Skip to content

Commit

Permalink
Always render and use a dynamic namespace when a module with syntheti…
Browse files Browse the repository at this point in the history
…c named exports is imported dynamically
  • Loading branch information
lukastaegert committed Jun 26, 2020
1 parent ee6ef99 commit 8173e69
Show file tree
Hide file tree
Showing 151 changed files with 241 additions and 156 deletions.
6 changes: 6 additions & 0 deletions src/Chunk.ts
Expand Up @@ -215,6 +215,11 @@ export default class Chunk {
for (const importer of module.includedDynamicImporters) {
if (!chunkModules.has(importer)) {
this.dynamicEntryModules.push(module);
// Modules with synthetic exports need an artifical namespace for dynamic imports
if (module.syntheticNamedExports) {
module.namespace.include();
this.exports.add(module.namespace);
}
}
}
if (module.implicitlyLoadedAfter.size > 0) {
Expand Down Expand Up @@ -347,6 +352,7 @@ export default class Chunk {
}
}
for (const module of this.dynamicEntryModules) {
if (module.syntheticNamedExports) continue;
if (!this.facadeModule && this.canModuleBeFacade(module, exposedVariables)) {
this.facadeModule = module;
this.facadeChunkByModule.set(module, this);
Expand Down
4 changes: 3 additions & 1 deletion src/Module.ts
Expand Up @@ -295,7 +295,9 @@ export default class Module {
return error({
code: Errors.SYNTHETIC_NAMED_EXPORTS_NEED_DEFAULT,
id: this.id,
message: `Modules with 'syntheticNamedExports' need a default export.`
message: `Module "${relativeId(
this.id
)}" that is marked to have "syntheticNamedExports" needs a default export.`
});
}
return this.defaultExport;
Expand Down
2 changes: 1 addition & 1 deletion src/ast/nodes/ImportExpression.ts
Expand Up @@ -73,7 +73,7 @@ export default class Import extends NodeBase {
if (namespaceExportName) {
const _ = options.compact ? '' : ' ';
const s = options.compact ? '' : ';';
code.appendLeft(
code.prependLeft(
this.end,
`.then(function${_}(n)${_}{${_}return n.${namespaceExportName}${s}${_}})`
);
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

30 changes: 0 additions & 30 deletions test/chunking-form/samples/synthetic-named-exports/_config.js

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

@@ -0,0 +1,11 @@
define(['exports', './generated-main'], function (exports, main) { 'use strict';

var component = { lib: main.lib, lib2: main.lib.named, lib3: main.lib.named.named };

var component$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(/*#__PURE__*/Object.create(null), component, {
'default': component
}));

exports.component = component$1;

});
Expand Up @@ -6,7 +6,7 @@ define(['require', 'exports'], function (require, exports) { 'use strict';

console.log('side-effect', lib.named.named);

const component = new Promise(function (resolve, reject) { require(['./generated-component'], resolve, reject) });
const component = new Promise(function (resolve, reject) { require(['./generated-component'], resolve, reject) }).then(function (n) { return n.component; });

exports.component = component;
exports.lib = lib;
Expand Down
@@ -0,0 +1,11 @@
'use strict';

var main = require('./generated-main.js');

var component = { lib: main.lib, lib2: main.lib.named, lib3: main.lib.named.named };

var component$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(/*#__PURE__*/Object.create(null), component, {
'default': component
}));

exports.component = component$1;
Expand Up @@ -6,7 +6,7 @@ console.log('side-effect', lib.named);

console.log('side-effect', lib.named.named);

const component = Promise.resolve().then(function () { return require('./generated-component.js'); });
const component = Promise.resolve().then(function () { return require('./generated-component.js'); }).then(function (n) { return n.component; });

exports.component = component;
exports.lib = lib;
@@ -0,0 +1,9 @@
import { l as lib } from './generated-main.js';

var component = { lib, lib2: lib.named, lib3: lib.named.named };

var component$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(/*#__PURE__*/Object.create(null), component, {
'default': component
}));

export { component$1 as c };
Expand Up @@ -4,6 +4,6 @@ console.log('side-effect', lib.named);

console.log('side-effect', lib.named.named);

const component = import('./generated-component.js');
const component = import('./generated-component.js').then(function (n) { return n.c; });

export { component as c, lib as l };
@@ -0,0 +1,19 @@
System.register(['./generated-main.js'], function (exports) {
'use strict';
var lib;
return {
setters: [function (module) {
lib = module.l;
}],
execute: function () {

var component = { lib, lib2: lib.named, lib3: lib.named.named };

var component$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(/*#__PURE__*/Object.create(null), component, {
'default': component
}));
exports('c', component$1);

}
};
});
Expand Up @@ -9,7 +9,7 @@ System.register([], function (exports, module) {

console.log('side-effect', lib.named.named);

const component = exports('c', module.import('./generated-component.js'));
const component = exports('c', module.import('./generated-component.js').then(function (n) { return n.c; }));

}
};
Expand Down
@@ -1,4 +1,4 @@
import lib from './lib';
import lib2 from './lib-reexport2';
import lib3 from './lib-reexport';
console.log(lib, lib2, lib3);
export default { lib, lib2, lib3 };
@@ -0,0 +1,11 @@
define(['exports', './main'], function (exports, main) { 'use strict';

var component = { lib: main.lib, someExport: main.lib.someExport };

var component$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(/*#__PURE__*/Object.create(null), component, {
'default': component
}));

exports.component = component$1;

});
Expand Up @@ -4,7 +4,7 @@ define(['require', 'exports'], function (require, exports) { 'use strict';

console.log('side-effect', lib);

const component = new Promise(function (resolve, reject) { require(['./generated-component'], resolve, reject) });
const component = new Promise(function (resolve, reject) { require(['./generated-component'], resolve, reject) }).then(function (n) { return n.component; });

exports.component = component;
exports.lib = lib;
Expand Down
@@ -0,0 +1,11 @@
'use strict';

var main = require('./main.js');

var component = { lib: main.lib, someExport: main.lib.someExport };

var component$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(/*#__PURE__*/Object.create(null), component, {
'default': component
}));

exports.component = component$1;
Expand Up @@ -6,7 +6,7 @@ var lib = {};

console.log('side-effect', lib);

const component = Promise.resolve().then(function () { return require('./generated-component.js'); });
const component = Promise.resolve().then(function () { return require('./generated-component.js'); }).then(function (n) { return n.component; });

exports.component = component;
exports.lib = lib;
@@ -0,0 +1,9 @@
import { lib } from './main.js';

var component = { lib, someExport: lib.someExport };

var component$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(/*#__PURE__*/Object.create(null), component, {
'default': component
}));

export { component$1 as c };
@@ -0,0 +1,7 @@
var lib = {};

console.log('side-effect', lib);

const component = import('./generated-component.js').then(function (n) { return n.c; });

export { component, lib };
@@ -0,0 +1,19 @@
System.register(['./main.js'], function (exports) {
'use strict';
var lib;
return {
setters: [function (module) {
lib = module.lib;
}],
execute: function () {

var component = { lib, someExport: lib.someExport };

var component$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(/*#__PURE__*/Object.create(null), component, {
'default': component
}));
exports('c', component$1);

}
};
});
Expand Up @@ -7,7 +7,7 @@ System.register([], function (exports, module) {

console.log('side-effect', lib);

const component = exports('component', module.import('./generated-component.js'));
const component = exports('component', module.import('./generated-component.js').then(function (n) { return n.c; }));

}
};
Expand Down
@@ -1,2 +1,2 @@
import lib, { someExport } from './lib-reexport';
console.log(lib, someExport);
export default { lib, someExport };
@@ -0,0 +1,15 @@
module.exports = {
description: 'synthetic named exports',
options: {
input: ['main.js'],
plugins: [
{
transform(code, id) {
if (id.endsWith('dep.js')) {
return { code, syntheticNamedExports: true };
}
}
}
]
}
};

0 comments on commit 8173e69

Please sign in to comment.