Skip to content

Commit

Permalink
Properly handle dynamic imports declared in dynamically imported files (
Browse files Browse the repository at this point in the history
  • Loading branch information
lukastaegert committed Jan 21, 2019
1 parent de89274 commit a7eb784
Show file tree
Hide file tree
Showing 32 changed files with 155 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/utils/chunkColouring.ts
Expand Up @@ -11,7 +11,7 @@ export function assignChunkColouringHashes(
let currentEntry: Module, currentEntryHash: Uint8Array;
let modulesVisitedForCurrentEntry: { [id: string]: boolean };
const handledEntryPoints: { [id: string]: boolean } = {};
const dynamicImports: Set<Module> = new Set();
const dynamicImports: Module[] = [];

const addCurrentEntryColourToModule = (module: Module) => {
if (currentEntry.chunkAlias) {
Expand All @@ -36,7 +36,7 @@ export function assignChunkColouringHashes(
resolution.isDynamicEntryPoint &&
!resolution.chunkAlias
) {
dynamicImports.add(resolution);
dynamicImports.push(resolution);
}
}
};
Expand Down Expand Up @@ -72,10 +72,11 @@ Try defining "${chunkName}" first in the manualChunks definitions of the Rollup
addCurrentEntryColourToModule(currentEntry);
}

for (currentEntry of Array.from(dynamicImports)) {
for (currentEntry of dynamicImports) {
if (handledEntryPoints[currentEntry.id]) {
continue;
}
handledEntryPoints[currentEntry.id] = true;
currentEntryHash = randomUint8Array(10);
modulesVisitedForCurrentEntry = { [currentEntry.id]: null };
addCurrentEntryColourToModule(currentEntry);
Expand Down
6 changes: 6 additions & 0 deletions test/chunking-form/samples/nested-dynamic-imports/_config.js
@@ -0,0 +1,6 @@
module.exports = {
description: 'handles dynamic imports containing dynamic imports',
options: {
input: 'main'
}
};
@@ -0,0 +1,6 @@
define(['require'], function (require) { 'use strict';

new Promise(function (resolve, reject) { require(['./generated-chunk2.js'], resolve, reject) });
console.log('dynamic1');

});
@@ -0,0 +1,6 @@
define(['require'], function (require) { 'use strict';

new Promise(function (resolve, reject) { require(['./generated-chunk3.js'], resolve, reject) });
console.log('dynamic2');

});
@@ -0,0 +1,6 @@
define(['require'], function (require) { 'use strict';

new Promise(function (resolve, reject) { require(['./generated-chunk4.js'], resolve, reject) });
console.log('dynamic3');

});
@@ -0,0 +1,6 @@
define(['require'], function (require) { 'use strict';

new Promise(function (resolve, reject) { require(['./generated-chunk5.js'], resolve, reject) });
console.log('dynamic4');

});
@@ -0,0 +1,5 @@
define(function () { 'use strict';

console.log('dynamic5');

});
@@ -0,0 +1,6 @@
define(['require'], function (require) { 'use strict';

new Promise(function (resolve, reject) { require(['./generated-chunk.js'], resolve, reject) });
console.log('main');

});
@@ -0,0 +1,4 @@
'use strict';

Promise.resolve(require('./generated-chunk2.js'));
console.log('dynamic1');
@@ -0,0 +1,4 @@
'use strict';

Promise.resolve(require('./generated-chunk3.js'));
console.log('dynamic2');
@@ -0,0 +1,4 @@
'use strict';

Promise.resolve(require('./generated-chunk4.js'));
console.log('dynamic3');
@@ -0,0 +1,4 @@
'use strict';

Promise.resolve(require('./generated-chunk5.js'));
console.log('dynamic4');
@@ -0,0 +1,3 @@
'use strict';

console.log('dynamic5');
@@ -0,0 +1,4 @@
'use strict';

Promise.resolve(require('./generated-chunk.js'));
console.log('main');
@@ -0,0 +1,2 @@
import('./generated-chunk2.js');
console.log('dynamic1');
@@ -0,0 +1,2 @@
import('./generated-chunk3.js');
console.log('dynamic2');
@@ -0,0 +1,2 @@
import('./generated-chunk4.js');
console.log('dynamic3');
@@ -0,0 +1,2 @@
import('./generated-chunk5.js');
console.log('dynamic4');
@@ -0,0 +1 @@
console.log('dynamic5');
@@ -0,0 +1,2 @@
import('./generated-chunk.js');
console.log('main');
@@ -0,0 +1,11 @@
System.register([], function (exports, module) {
'use strict';
return {
execute: function () {

module.import('./generated-chunk2.js');
console.log('dynamic1');

}
};
});
@@ -0,0 +1,11 @@
System.register([], function (exports, module) {
'use strict';
return {
execute: function () {

module.import('./generated-chunk3.js');
console.log('dynamic2');

}
};
});
@@ -0,0 +1,11 @@
System.register([], function (exports, module) {
'use strict';
return {
execute: function () {

module.import('./generated-chunk4.js');
console.log('dynamic3');

}
};
});
@@ -0,0 +1,11 @@
System.register([], function (exports, module) {
'use strict';
return {
execute: function () {

module.import('./generated-chunk5.js');
console.log('dynamic4');

}
};
});
@@ -0,0 +1,10 @@
System.register([], function (exports, module) {
'use strict';
return {
execute: function () {

console.log('dynamic5');

}
};
});
@@ -0,0 +1,11 @@
System.register([], function (exports, module) {
'use strict';
return {
execute: function () {

module.import('./generated-chunk.js');
console.log('main');

}
};
});
2 changes: 2 additions & 0 deletions test/chunking-form/samples/nested-dynamic-imports/dynamic1.js
@@ -0,0 +1,2 @@
import('./dynamic2.js');
console.log('dynamic1');
2 changes: 2 additions & 0 deletions test/chunking-form/samples/nested-dynamic-imports/dynamic2.js
@@ -0,0 +1,2 @@
import('./dynamic3.js');
console.log('dynamic2');
2 changes: 2 additions & 0 deletions test/chunking-form/samples/nested-dynamic-imports/dynamic3.js
@@ -0,0 +1,2 @@
import('./dynamic4.js');
console.log('dynamic3');
2 changes: 2 additions & 0 deletions test/chunking-form/samples/nested-dynamic-imports/dynamic4.js
@@ -0,0 +1,2 @@
import('./dynamic5.js');
console.log('dynamic4');
@@ -0,0 +1 @@
console.log('dynamic5');
2 changes: 2 additions & 0 deletions test/chunking-form/samples/nested-dynamic-imports/main.js
@@ -0,0 +1,2 @@
import('./dynamic1.js');
console.log('main');

0 comments on commit a7eb784

Please sign in to comment.