diff --git a/src/finalisers/shared/getExportBlock.ts b/src/finalisers/shared/getExportBlock.ts index c1036e1ee58..4cc77ce503e 100644 --- a/src/finalisers/shared/getExportBlock.ts +++ b/src/finalisers/shared/getExportBlock.ts @@ -49,42 +49,48 @@ export default function getExportBlock( } }); - dependencies.forEach(({ name, imports, reexports, isChunk }) => { - if (reexports && namedExportsMode) { - reexports.forEach(specifier => { - if (specifier.imported === 'default' && !isChunk) { - const exportsNamesOrNamespace = - (imports && - imports.some( - specifier => specifier.imported === '*' || specifier.imported !== 'default' - )) || - (reexports && - reexports.some( - specifier => specifier.imported !== 'default' && specifier.imported !== '*' - )); + dependencies.forEach( + ({ name, imports, reexports, isChunk, namedExportsMode: depNamedExportsMode }) => { + if (reexports && namedExportsMode) { + reexports.forEach(specifier => { + if (specifier.imported === 'default' && !isChunk) { + const exportsNamesOrNamespace = + (imports && + imports.some( + specifier => specifier.imported === '*' || specifier.imported !== 'default' + )) || + (reexports && + reexports.some( + specifier => specifier.imported !== 'default' && specifier.imported !== '*' + )); - const reexportsDefaultAsDefault = - reexports && - reexports.some( - specifier => specifier.imported === 'default' && specifier.reexported === 'default' - ); + const reexportsDefaultAsDefault = + reexports && + reexports.some( + specifier => specifier.imported === 'default' && specifier.reexported === 'default' + ); - if (exportBlock && !compact) exportBlock += '\n'; - if (exportsNamesOrNamespace || reexportsDefaultAsDefault) - exportBlock += `exports.${specifier.reexported}${_}=${_}${name}${ - interop !== false ? '__default' : '.default' - };`; - else exportBlock += `exports.${specifier.reexported}${_}=${_}${name};`; - } else if (specifier.imported !== '*') { - if (exportBlock && !compact) exportBlock += '\n'; - exportBlock += `exports.${specifier.reexported}${_}=${_}${name}.${specifier.imported};`; - } else if (specifier.reexported !== '*') { - if (exportBlock && !compact) exportBlock += '\n'; - exportBlock += `exports.${specifier.reexported}${_}=${_}${name};`; - } - }); + if (exportBlock && !compact) exportBlock += '\n'; + if (exportsNamesOrNamespace || reexportsDefaultAsDefault) + exportBlock += `exports.${specifier.reexported}${_}=${_}${name}${ + interop !== false ? '__default' : '.default' + };`; + else exportBlock += `exports.${specifier.reexported}${_}=${_}${name};`; + } else if (specifier.imported !== '*') { + if (exportBlock && !compact) exportBlock += '\n'; + const importName = + specifier.imported === 'default' && !depNamedExportsMode + ? name + : `${name}.${specifier.imported}`; + exportBlock += `exports.${specifier.reexported}${_}=${_}${importName};`; + } else if (specifier.reexported !== '*') { + if (exportBlock && !compact) exportBlock += '\n'; + exportBlock += `exports.${specifier.reexported}${_}=${_}${name};`; + } + }); + } } - }); + ); exports.forEach(expt => { const lhs = `exports.${expt.exported}`; diff --git a/test/chunking-form/samples/entry-point-without-own-code/_expected/amd/generated-m1.js b/test/chunking-form/samples/entry-point-without-own-code/_expected/amd/generated-m1.js index 122db75ab30..77ebf9c9248 100644 --- a/test/chunking-form/samples/entry-point-without-own-code/_expected/amd/generated-m1.js +++ b/test/chunking-form/samples/entry-point-without-own-code/_expected/amd/generated-m1.js @@ -6,7 +6,7 @@ define(['exports', './m2.js'], function (exports, m2) { 'use strict'; m2: m2 }); - exports.m2 = m2.default; + exports.m2 = m2; exports.ms = ms; }); diff --git a/test/chunking-form/samples/entry-point-without-own-code/_expected/amd/m1.js b/test/chunking-form/samples/entry-point-without-own-code/_expected/amd/m1.js index 6093fb6b86d..0103e34d77d 100644 --- a/test/chunking-form/samples/entry-point-without-own-code/_expected/amd/m1.js +++ b/test/chunking-form/samples/entry-point-without-own-code/_expected/amd/m1.js @@ -2,7 +2,7 @@ define(['exports', './m2.js', './generated-m1.js'], function (exports, m2, m1) { - exports.m2 = m2.default; + exports.m2 = m2; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/chunking-form/samples/entry-point-without-own-code/_expected/cjs/generated-m1.js b/test/chunking-form/samples/entry-point-without-own-code/_expected/cjs/generated-m1.js index 901dfa4f519..9e827c896df 100644 --- a/test/chunking-form/samples/entry-point-without-own-code/_expected/cjs/generated-m1.js +++ b/test/chunking-form/samples/entry-point-without-own-code/_expected/cjs/generated-m1.js @@ -8,5 +8,5 @@ var ms = /*#__PURE__*/Object.freeze({ m2: m2 }); -exports.m2 = m2.default; +exports.m2 = m2; exports.ms = ms; diff --git a/test/chunking-form/samples/entry-point-without-own-code/_expected/cjs/m1.js b/test/chunking-form/samples/entry-point-without-own-code/_expected/cjs/m1.js index 8596b2ed78f..9b97781f444 100644 --- a/test/chunking-form/samples/entry-point-without-own-code/_expected/cjs/m1.js +++ b/test/chunking-form/samples/entry-point-without-own-code/_expected/cjs/m1.js @@ -7,4 +7,4 @@ require('./generated-m1.js'); -exports.m2 = m2.default; +exports.m2 = m2; diff --git a/test/chunking-form/samples/export-default-from-entry/_config.js b/test/chunking-form/samples/export-default-from-entry/_config.js new file mode 100644 index 00000000000..1fa07bc2cf0 --- /dev/null +++ b/test/chunking-form/samples/export-default-from-entry/_config.js @@ -0,0 +1,6 @@ +module.exports = { + description: 'correctly imports the default from an entry point', + options: { + input: ['main', 'dep'] + } +}; diff --git a/test/chunking-form/samples/export-default-from-entry/_expected/amd/dep.js b/test/chunking-form/samples/export-default-from-entry/_expected/amd/dep.js new file mode 100644 index 00000000000..67abed68a19 --- /dev/null +++ b/test/chunking-form/samples/export-default-from-entry/_expected/amd/dep.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var dep = 42; + + return dep; + +}); diff --git a/test/chunking-form/samples/export-default-from-entry/_expected/amd/main.js b/test/chunking-form/samples/export-default-from-entry/_expected/amd/main.js new file mode 100644 index 00000000000..f34747d3cdb --- /dev/null +++ b/test/chunking-form/samples/export-default-from-entry/_expected/amd/main.js @@ -0,0 +1,9 @@ +define(['exports', './dep.js'], function (exports, dep) { 'use strict'; + + + + exports.value = dep; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/export-default-from-entry/_expected/cjs/dep.js b/test/chunking-form/samples/export-default-from-entry/_expected/cjs/dep.js new file mode 100644 index 00000000000..bede68050cb --- /dev/null +++ b/test/chunking-form/samples/export-default-from-entry/_expected/cjs/dep.js @@ -0,0 +1,5 @@ +'use strict'; + +var dep = 42; + +module.exports = dep; diff --git a/test/chunking-form/samples/export-default-from-entry/_expected/cjs/main.js b/test/chunking-form/samples/export-default-from-entry/_expected/cjs/main.js new file mode 100644 index 00000000000..d5b48cc5a0a --- /dev/null +++ b/test/chunking-form/samples/export-default-from-entry/_expected/cjs/main.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var dep = require('./dep.js'); + + + +exports.value = dep; diff --git a/test/chunking-form/samples/export-default-from-entry/_expected/es/dep.js b/test/chunking-form/samples/export-default-from-entry/_expected/es/dep.js new file mode 100644 index 00000000000..1df3b791cce --- /dev/null +++ b/test/chunking-form/samples/export-default-from-entry/_expected/es/dep.js @@ -0,0 +1,3 @@ +var dep = 42; + +export default dep; diff --git a/test/chunking-form/samples/export-default-from-entry/_expected/es/main.js b/test/chunking-form/samples/export-default-from-entry/_expected/es/main.js new file mode 100644 index 00000000000..0d14fd4af82 --- /dev/null +++ b/test/chunking-form/samples/export-default-from-entry/_expected/es/main.js @@ -0,0 +1 @@ +export { default as value } from './dep.js'; diff --git a/test/chunking-form/samples/export-default-from-entry/_expected/system/dep.js b/test/chunking-form/samples/export-default-from-entry/_expected/system/dep.js new file mode 100644 index 00000000000..0d32931b472 --- /dev/null +++ b/test/chunking-form/samples/export-default-from-entry/_expected/system/dep.js @@ -0,0 +1,10 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + var dep = exports('default', 42); + + } + }; +}); diff --git a/test/chunking-form/samples/export-default-from-entry/_expected/system/main.js b/test/chunking-form/samples/export-default-from-entry/_expected/system/main.js new file mode 100644 index 00000000000..b389030eb79 --- /dev/null +++ b/test/chunking-form/samples/export-default-from-entry/_expected/system/main.js @@ -0,0 +1,13 @@ +System.register(['./dep.js'], function (exports, module) { + 'use strict'; + return { + setters: [function (module) { + exports('value', module.default); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/export-default-from-entry/dep.js b/test/chunking-form/samples/export-default-from-entry/dep.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/chunking-form/samples/export-default-from-entry/dep.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/chunking-form/samples/export-default-from-entry/main.js b/test/chunking-form/samples/export-default-from-entry/main.js new file mode 100644 index 00000000000..900a82bafec --- /dev/null +++ b/test/chunking-form/samples/export-default-from-entry/main.js @@ -0,0 +1 @@ +export {default as value} from './dep'; diff --git a/test/function/samples/code-splitting-export-default-from-entry/_config.js b/test/function/samples/code-splitting-export-default-from-entry/_config.js new file mode 100644 index 00000000000..376c52b9c37 --- /dev/null +++ b/test/function/samples/code-splitting-export-default-from-entry/_config.js @@ -0,0 +1,13 @@ +const assert = require('assert'); + +module.exports = { + description: 'correctly imports the default from an entry point', + options: { + input: ['main', 'dep'] + }, + exports(exports) { + assert.deepStrictEqual(exports, { + value: 42 + }); + } +}; diff --git a/test/function/samples/code-splitting-export-default-from-entry/dep.js b/test/function/samples/code-splitting-export-default-from-entry/dep.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/function/samples/code-splitting-export-default-from-entry/dep.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/function/samples/code-splitting-export-default-from-entry/main.js b/test/function/samples/code-splitting-export-default-from-entry/main.js new file mode 100644 index 00000000000..900a82bafec --- /dev/null +++ b/test/function/samples/code-splitting-export-default-from-entry/main.js @@ -0,0 +1 @@ +export {default as value} from './dep';