diff --git a/src/finalisers/shared/getExportBlock.ts b/src/finalisers/shared/getExportBlock.ts index 4c2f613f4c4..c1036e1ee58 100644 --- a/src/finalisers/shared/getExportBlock.ts +++ b/src/finalisers/shared/getExportBlock.ts @@ -62,8 +62,15 @@ export default function getExportBlock( reexports.some( specifier => specifier.imported !== 'default' && specifier.imported !== '*' )); + + const reexportsDefaultAsDefault = + reexports && + reexports.some( + specifier => specifier.imported === 'default' && specifier.reexported === 'default' + ); + if (exportBlock && !compact) exportBlock += '\n'; - if (exportsNamesOrNamespace) + if (exportsNamesOrNamespace || reexportsDefaultAsDefault) exportBlock += `exports.${specifier.reexported}${_}=${_}${name}${ interop !== false ? '__default' : '.default' };`; diff --git a/test/form/samples/re-export-default-external-as-default/_config.js b/test/form/samples/re-export-default-external-as-default/_config.js new file mode 100644 index 00000000000..d7ee1a9e9d9 --- /dev/null +++ b/test/form/samples/re-export-default-external-as-default/_config.js @@ -0,0 +1,7 @@ +module.exports = { + description: 're-exports a default external import as default export (when using named exports)', + options: { + output: { name: 'reexportsDefaultExternalAsDefault', exports: 'named' }, + external: ['external'] + } +}; diff --git a/test/form/samples/re-export-default-external-as-default/_expected/amd.js b/test/form/samples/re-export-default-external-as-default/_expected/amd.js new file mode 100644 index 00000000000..8bc157376f8 --- /dev/null +++ b/test/form/samples/re-export-default-external-as-default/_expected/amd.js @@ -0,0 +1,12 @@ +define(['exports', 'external'], function (exports, external) { 'use strict'; + + var external__default = 'default' in external ? external['default'] : external; + + + + Object.keys(external).forEach(function (key) { exports[key] = external[key]; }); + exports.default = external__default; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/form/samples/re-export-default-external-as-default/_expected/cjs.js b/test/form/samples/re-export-default-external-as-default/_expected/cjs.js new file mode 100644 index 00000000000..1ecf08ad403 --- /dev/null +++ b/test/form/samples/re-export-default-external-as-default/_expected/cjs.js @@ -0,0 +1,13 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var external = require('external'); +var external__default = _interopDefault(external); + + + +Object.keys(external).forEach(function (key) { exports[key] = external[key]; }); +exports.default = external__default; diff --git a/test/form/samples/re-export-default-external-as-default/_expected/es.js b/test/form/samples/re-export-default-external-as-default/_expected/es.js new file mode 100644 index 00000000000..508209b527e --- /dev/null +++ b/test/form/samples/re-export-default-external-as-default/_expected/es.js @@ -0,0 +1,2 @@ +export * from 'external'; +export { default } from 'external'; diff --git a/test/form/samples/re-export-default-external-as-default/_expected/iife.js b/test/form/samples/re-export-default-external-as-default/_expected/iife.js new file mode 100644 index 00000000000..13e44bba082 --- /dev/null +++ b/test/form/samples/re-export-default-external-as-default/_expected/iife.js @@ -0,0 +1,13 @@ +var reexportsDefaultExternalAsDefault = (function (exports, external) { + 'use strict'; + + var external__default = 'default' in external ? external['default'] : external; + + + + Object.keys(external).forEach(function (key) { exports[key] = external[key]; }); + exports.default = external__default; + + return exports; + +}({}, external)); diff --git a/test/form/samples/re-export-default-external-as-default/_expected/system.js b/test/form/samples/re-export-default-external-as-default/_expected/system.js new file mode 100644 index 00000000000..ea3d45de194 --- /dev/null +++ b/test/form/samples/re-export-default-external-as-default/_expected/system.js @@ -0,0 +1,19 @@ +System.register('reexportsDefaultExternalAsDefault', ['external'], function (exports, module) { + 'use strict'; + var _starExcludes = { default: 1 }; + return { + setters: [function (module) { + var _setter = {}; + for (var _$p in module) { + if (!_starExcludes[_$p]) _setter[_$p] = module[_$p]; + } + _setter.default = module.default; + exports(_setter); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/form/samples/re-export-default-external-as-default/_expected/umd.js b/test/form/samples/re-export-default-external-as-default/_expected/umd.js new file mode 100644 index 00000000000..86629fd6123 --- /dev/null +++ b/test/form/samples/re-export-default-external-as-default/_expected/umd.js @@ -0,0 +1,16 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : + typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : + (global = global || self, factory(global.reexportsDefaultExternalAsDefault = {}, global.external)); +}(this, function (exports, external) { 'use strict'; + + var external__default = 'default' in external ? external['default'] : external; + + + + Object.keys(external).forEach(function (key) { exports[key] = external[key]; }); + exports.default = external__default; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/test/form/samples/re-export-default-external-as-default/main.js b/test/form/samples/re-export-default-external-as-default/main.js new file mode 100644 index 00000000000..508209b527e --- /dev/null +++ b/test/form/samples/re-export-default-external-as-default/main.js @@ -0,0 +1,2 @@ +export * from 'external'; +export { default } from 'external';