diff --git a/packages/core/src/code_manager/model/HtmlGenerator.ts b/packages/core/src/code_manager/model/HtmlGenerator.ts
index 5b966c5ee..177203e8c 100644
--- a/packages/core/src/code_manager/model/HtmlGenerator.ts
+++ b/packages/core/src/code_manager/model/HtmlGenerator.ts
@@ -34,6 +34,7 @@ export default class HTMLGenerator extends Model {
id &&
id[0] === 'i' && // all autogenerated IDs start with 'i'
!mod.get('script') && // if the component has script, we have to leave the ID
+ !mod.get('script-export') && // if the component has script, we have to leave the ID
!mod.get('attributes')!.id && // id is not intentionally in attributes
idRules.indexOf(id) < 0 // we shouldn't have any rule with this ID
) {
diff --git a/packages/core/test/specs/code_manager/model/CodeModels.js b/packages/core/test/specs/code_manager/model/CodeModels.js
index c6db691c1..8140c33ff 100644
--- a/packages/core/test/specs/code_manager/model/CodeModels.js
+++ b/packages/core/test/specs/code_manager/model/CodeModels.js
@@ -62,6 +62,37 @@ describe('HtmlGenerator', () => {
});
expect(obj.build(m1)).toEqual('');
});
+
+ test('Build correctly component with id preserved when script is defined', () => {
+ const m1 = comp.get('components').add({
+ tagName: 'article',
+ });
+ m1.set('script', 'anything');
+ expect(obj.build(m1, { cleanId: true, em })).toEqual(``);
+ });
+
+ test('Build correctly component with id preserved when script-export is defined', () => {
+ const m1 = comp.get('components').add({
+ tagName: 'article',
+ });
+ m1.set('script-export', 'anything');
+ expect(obj.build(m1, { cleanId: true, em })).toEqual(``);
+ });
+
+ test('Build correctly component with id preserved when id is explicitly set ', () => {
+ const m1 = comp.get('components').add({
+ tagName: 'article',
+ });
+ m1.setId('i11');
+ expect(obj.build(m1, { cleanId: true, em })).toEqual(``);
+ });
+
+ test('Build correctly component with cleanId is enabled and id is not required ', () => {
+ const m1 = comp.get('components').add({
+ tagName: 'article',
+ });
+ expect(obj.build(m1, { cleanId: true, em })).toEqual(``);
+ });
});
describe('CssGenerator', () => {