From 08718715095609be602f1a98151e06aba11dda17 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Mon, 26 Aug 2019 15:23:14 +0200 Subject: [PATCH] Improve coverage --- src/finalisers/shared/getExportBlock.ts | 39 +++++++------------ .../_config.js | 10 +---- .../_config.js | 11 ++++++ .../_expected/amd.js | 11 ++++++ .../_expected/cjs.js | 12 ++++++ .../_expected/es.js | 4 ++ .../_expected/iife.js | 12 ++++++ .../_expected/system.js | 15 +++++++ .../_expected/umd.js | 15 +++++++ .../main.js | 3 ++ .../reexport-external-default/_config.js | 4 +- .../_expected/amd.js | 8 ++-- .../_expected/cjs.js | 7 ++-- .../reexport-external-default/_expected/es.js | 5 ++- .../_expected/iife.js | 10 ++--- .../_expected/system.js | 7 +++- .../_expected/umd.js | 14 +++---- .../samples/reexport-external-default/main.js | 4 +- 18 files changed, 134 insertions(+), 57 deletions(-) create mode 100644 test/form/samples/reexport-external-default-as-name-and-name/_config.js create mode 100644 test/form/samples/reexport-external-default-as-name-and-name/_expected/amd.js create mode 100644 test/form/samples/reexport-external-default-as-name-and-name/_expected/cjs.js create mode 100644 test/form/samples/reexport-external-default-as-name-and-name/_expected/es.js create mode 100644 test/form/samples/reexport-external-default-as-name-and-name/_expected/iife.js create mode 100644 test/form/samples/reexport-external-default-as-name-and-name/_expected/system.js create mode 100644 test/form/samples/reexport-external-default-as-name-and-name/_expected/umd.js create mode 100644 test/form/samples/reexport-external-default-as-name-and-name/main.js diff --git a/src/finalisers/shared/getExportBlock.ts b/src/finalisers/shared/getExportBlock.ts index 086753774e8..45ac72f5f15 100644 --- a/src/finalisers/shared/getExportBlock.ts +++ b/src/finalisers/shared/getExportBlock.ts @@ -14,24 +14,16 @@ export default function getExportBlock( if (!namedExportsMode) { let local; - for (const expt of exports) { - if (expt.exported === 'default') { - local = expt.local; - break; - } - } - if (!local) { - findReexportedDefault: for (const dep of dependencies) { + if (exports.length > 0) { + local = exports[0].local; + } else { + for (const dep of dependencies) { if (dep.reexports) { - for (const expt of dep.reexports) { - if (expt.reexported === 'default') { - local = - dep.namedExportsMode && expt.imported !== '*' && expt.imported !== 'default' - ? `${dep.name}.${expt.imported}` - : dep.name; - break findReexportedDefault; - } - } + const expt = dep.reexports[0]; + local = + dep.namedExportsMode && expt.imported !== '*' && expt.imported !== 'default' + ? `${dep.name}.${expt.imported}` + : dep.name; } } } @@ -79,12 +71,11 @@ export default function getExportBlock( if (exportBlock && !compact) exportBlock += '\n'; if ( exportsNames && - ((reexports && - reexports.some(specifier => - specifier.imported === 'default' - ? specifier.reexported === 'default' - : specifier.imported !== '*' - )) || + (reexports.some(specifier => + specifier.imported === 'default' + ? specifier.reexported === 'default' + : specifier.imported !== '*' + ) || (imports && imports.some(specifier => specifier.imported !== 'default'))) ) { exportBlock += `exports.${specifier.reexported}${_}=${_}${name}${ @@ -106,7 +97,7 @@ export default function getExportBlock( `${t}${t}return ${importName};${n}${t}}${n}});` : `exports.${specifier.reexported}${_}=${_}${importName};`; } else if (specifier.reexported !== '*') { - if (exportBlock && !compact) exportBlock += '\n'; + if (exportBlock) exportBlock += n; exportBlock += `exports.${specifier.reexported}${_}=${_}${name};`; } }); diff --git a/test/form/samples/reexport-external-default-and-name/_config.js b/test/form/samples/reexport-external-default-and-name/_config.js index 4a4eb5b3de2..6e8c12c648f 100644 --- a/test/form/samples/reexport-external-default-and-name/_config.js +++ b/test/form/samples/reexport-external-default-and-name/_config.js @@ -1,5 +1,6 @@ module.exports = { - description: 're-exports a named external export as default', + description: + 'reexports a an external default as a name and imports another name from that dependency', expectedWarnings: ['MIXED_EXPORTS'], options: { external: ['external'], @@ -9,10 +10,3 @@ module.exports = { } } }; - -// TODO Lukas there seem to be many different interops -> consolidate! -// - function -// - inline -// - inline generating the __default variable -// TODO Lukas also test named and default import from same dependency -// TODO Lukas also test without interop diff --git a/test/form/samples/reexport-external-default-as-name-and-name/_config.js b/test/form/samples/reexport-external-default-as-name-and-name/_config.js new file mode 100644 index 00000000000..5ccfb6e52a1 --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/_config.js @@ -0,0 +1,11 @@ +module.exports = { + description: 're-exports a named external export as default', + expectedWarnings: ['MIXED_EXPORTS'], + options: { + external: ['external'], + output: { + globals: { external: 'external' }, + name: 'bundle' + } + } +}; diff --git a/test/form/samples/reexport-external-default-as-name-and-name/_expected/amd.js b/test/form/samples/reexport-external-default-as-name-and-name/_expected/amd.js new file mode 100644 index 00000000000..f7d2f9738b6 --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/_expected/amd.js @@ -0,0 +1,11 @@ +define(['exports', 'external'], function (exports, external) { 'use strict'; + + var external__default = 'default' in external ? external['default'] : external; + + console.log(external.value); + + exports.reexported = external__default; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/form/samples/reexport-external-default-as-name-and-name/_expected/cjs.js b/test/form/samples/reexport-external-default-as-name-and-name/_expected/cjs.js new file mode 100644 index 00000000000..bc9957bb8ba --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/_expected/cjs.js @@ -0,0 +1,12 @@ +'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); + +console.log(external.value); + +exports.reexported = external__default; diff --git a/test/form/samples/reexport-external-default-as-name-and-name/_expected/es.js b/test/form/samples/reexport-external-default-as-name-and-name/_expected/es.js new file mode 100644 index 00000000000..f1f07c98fff --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/_expected/es.js @@ -0,0 +1,4 @@ +import { value } from 'external'; +export { default as reexported } from 'external'; + +console.log(value); diff --git a/test/form/samples/reexport-external-default-as-name-and-name/_expected/iife.js b/test/form/samples/reexport-external-default-as-name-and-name/_expected/iife.js new file mode 100644 index 00000000000..30afb56f290 --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/_expected/iife.js @@ -0,0 +1,12 @@ +var bundle = (function (exports, external) { + 'use strict'; + + var external__default = 'default' in external ? external['default'] : external; + + console.log(external.value); + + exports.reexported = external__default; + + return exports; + +}({}, external)); diff --git a/test/form/samples/reexport-external-default-as-name-and-name/_expected/system.js b/test/form/samples/reexport-external-default-as-name-and-name/_expected/system.js new file mode 100644 index 00000000000..1b3c4676de4 --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/_expected/system.js @@ -0,0 +1,15 @@ +System.register('bundle', ['external'], function (exports) { + 'use strict'; + var value; + return { + setters: [function (module) { + value = module.value; + exports('reexported', module.default); + }], + execute: function () { + + console.log(value); + + } + }; +}); diff --git a/test/form/samples/reexport-external-default-as-name-and-name/_expected/umd.js b/test/form/samples/reexport-external-default-as-name-and-name/_expected/umd.js new file mode 100644 index 00000000000..063e89a0d64 --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/_expected/umd.js @@ -0,0 +1,15 @@ +(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.bundle = {}, global.external)); +}(this, function (exports, external) { 'use strict'; + + var external__default = 'default' in external ? external['default'] : external; + + console.log(external.value); + + exports.reexported = external__default; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/test/form/samples/reexport-external-default-as-name-and-name/main.js b/test/form/samples/reexport-external-default-as-name-and-name/main.js new file mode 100644 index 00000000000..3612bf7cfac --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/main.js @@ -0,0 +1,3 @@ +export { default as reexported } from 'external'; +import {value} from 'external'; +console.log(value); diff --git a/test/form/samples/reexport-external-default/_config.js b/test/form/samples/reexport-external-default/_config.js index b360be300a9..17dee117ebb 100644 --- a/test/form/samples/reexport-external-default/_config.js +++ b/test/form/samples/reexport-external-default/_config.js @@ -1,9 +1,9 @@ module.exports = { description: 'reexports an external default export', options: { - external: ['external'], + external: ['external1', 'external2'], output: { - globals: { external: 'external' }, + globals: { external1: 'external1', external2: 'external2' }, name: 'bundle' } } diff --git a/test/form/samples/reexport-external-default/_expected/amd.js b/test/form/samples/reexport-external-default/_expected/amd.js index ad2b06d6161..44863dc1288 100644 --- a/test/form/samples/reexport-external-default/_expected/amd.js +++ b/test/form/samples/reexport-external-default/_expected/amd.js @@ -1,9 +1,9 @@ -define(['external'], function (external) { 'use strict'; +define(['external1', 'external2'], function (external1, external2) { 'use strict'; - external = external && external.hasOwnProperty('default') ? external['default'] : external; + external2 = external2 && external2.hasOwnProperty('default') ? external2['default'] : external2; + console.log(external1.foo); - - return external; + return external2; }); diff --git a/test/form/samples/reexport-external-default/_expected/cjs.js b/test/form/samples/reexport-external-default/_expected/cjs.js index c823462ee46..fce42369eb4 100644 --- a/test/form/samples/reexport-external-default/_expected/cjs.js +++ b/test/form/samples/reexport-external-default/_expected/cjs.js @@ -2,8 +2,9 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } -var external = _interopDefault(require('external')); +var external1 = require('external1'); +var external2 = _interopDefault(require('external2')); +console.log(external1.foo); - -module.exports = external; +module.exports = external2; diff --git a/test/form/samples/reexport-external-default/_expected/es.js b/test/form/samples/reexport-external-default/_expected/es.js index 785cd9f1e41..294b431269c 100644 --- a/test/form/samples/reexport-external-default/_expected/es.js +++ b/test/form/samples/reexport-external-default/_expected/es.js @@ -1 +1,4 @@ -export { default } from 'external'; +import { foo } from 'external1'; +export { default } from 'external2'; + +console.log(foo); diff --git a/test/form/samples/reexport-external-default/_expected/iife.js b/test/form/samples/reexport-external-default/_expected/iife.js index b89d986667e..7d9a819618e 100644 --- a/test/form/samples/reexport-external-default/_expected/iife.js +++ b/test/form/samples/reexport-external-default/_expected/iife.js @@ -1,10 +1,10 @@ -var bundle = (function (external) { +var bundle = (function (external1, external2) { 'use strict'; - external = external && external.hasOwnProperty('default') ? external['default'] : external; + external2 = external2 && external2.hasOwnProperty('default') ? external2['default'] : external2; + console.log(external1.foo); + return external2; - return external; - -}(external)); +}(external1, external2)); diff --git a/test/form/samples/reexport-external-default/_expected/system.js b/test/form/samples/reexport-external-default/_expected/system.js index 3a453e38bc5..42d170c3da2 100644 --- a/test/form/samples/reexport-external-default/_expected/system.js +++ b/test/form/samples/reexport-external-default/_expected/system.js @@ -1,12 +1,15 @@ -System.register('bundle', ['external'], function (exports) { +System.register('bundle', ['external1', 'external2'], function (exports) { 'use strict'; + var foo; return { setters: [function (module) { + foo = module.foo; + }, function (module) { exports('default', module.default); }], execute: function () { - + console.log(foo); } }; diff --git a/test/form/samples/reexport-external-default/_expected/umd.js b/test/form/samples/reexport-external-default/_expected/umd.js index c409bf50cb6..c50e069feca 100644 --- a/test/form/samples/reexport-external-default/_expected/umd.js +++ b/test/form/samples/reexport-external-default/_expected/umd.js @@ -1,13 +1,13 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('external')) : - typeof define === 'function' && define.amd ? define(['external'], factory) : - (global = global || self, global.bundle = factory(global.external)); -}(this, function (external) { 'use strict'; + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('external1'), require('external2')) : + typeof define === 'function' && define.amd ? define(['external1', 'external2'], factory) : + (global = global || self, global.bundle = factory(global.external1, global.external2)); +}(this, function (external1, external2) { 'use strict'; - external = external && external.hasOwnProperty('default') ? external['default'] : external; + external2 = external2 && external2.hasOwnProperty('default') ? external2['default'] : external2; + console.log(external1.foo); - - return external; + return external2; })); diff --git a/test/form/samples/reexport-external-default/main.js b/test/form/samples/reexport-external-default/main.js index 785cd9f1e41..ee66642e983 100644 --- a/test/form/samples/reexport-external-default/main.js +++ b/test/form/samples/reexport-external-default/main.js @@ -1 +1,3 @@ -export { default } from 'external'; +import { foo } from 'external1'; +export { default } from 'external2'; +console.log(foo);