diff --git a/src/finalisers/shared/getExportBlock.ts b/src/finalisers/shared/getExportBlock.ts index d1e2ba59937..48021fab475 100644 --- a/src/finalisers/shared/getExportBlock.ts +++ b/src/finalisers/shared/getExportBlock.ts @@ -29,30 +29,6 @@ export function getExportBlock( let exportBlock = ''; - // star exports must always output first for precedence - for (const { name, reexports } of dependencies) { - if (reexports && namedExportsMode) { - for (const specifier of reexports) { - if (specifier.reexported === '*') { - if (exportBlock) exportBlock += n; - if (specifier.needsLiveBinding) { - exportBlock += - `Object.keys(${name}).forEach(function${_}(k)${_}{${n}` + - `${t}if${_}(k${_}!==${_}'default')${_}Object.defineProperty(exports,${_}k,${_}{${n}` + - `${t}${t}enumerable:${_}true,${n}` + - `${t}${t}get:${_}function${_}()${_}{${n}` + - `${t}${t}${t}return ${name}[k];${n}` + - `${t}${t}}${n}${t}});${n}});`; - } else { - exportBlock += - `Object.keys(${name}).forEach(function${_}(k)${_}{${n}` + - `${t}if${_}(k${_}!==${_}'default')${_}exports[k]${_}=${_}${name}[k];${n}});`; - } - } - } - } - } - for (const { defaultVariableName, id, @@ -98,6 +74,29 @@ export function getExportBlock( } } + for (const { name, reexports } of dependencies) { + if (reexports && namedExportsMode) { + for (const specifier of reexports) { + if (specifier.reexported === '*') { + if (exportBlock) exportBlock += n; + if (specifier.needsLiveBinding) { + exportBlock += + `Object.keys(${name}).forEach(function${_}(k)${_}{${n}` + + `${t}if${_}(k${_}!==${_}'default'${_}&&${_}!exports.hasOwnProperty(k))${_}Object.defineProperty(exports,${_}k,${_}{${n}` + + `${t}${t}enumerable:${_}true,${n}` + + `${t}${t}get:${_}function${_}()${_}{${n}` + + `${t}${t}${t}return ${name}[k];${n}` + + `${t}${t}}${n}${t}});${n}});`; + } else { + exportBlock += + `Object.keys(${name}).forEach(function${_}(k)${_}{${n}` + + `${t}if${_}(k${_}!==${_}'default'${_}&&${_}!exports.hasOwnProperty(k))${_}exports[k]${_}=${_}${name}[k];${n}});`; + } + } + } + } + } + if (exportBlock) { return `${n}${n}${exportBlock}`; } diff --git a/test/chunking-form/samples/chunking-star-external/_expected/amd/main1.js b/test/chunking-form/samples/chunking-star-external/_expected/amd/main1.js index 2c27908828a..936dee41172 100644 --- a/test/chunking-form/samples/chunking-star-external/_expected/amd/main1.js +++ b/test/chunking-form/samples/chunking-star-external/_expected/amd/main1.js @@ -2,14 +2,6 @@ define(['exports', 'starexternal1', 'external1', './generated-dep', 'starexterna var main = '1'; - Object.keys(starexternal1).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { - enumerable: true, - get: function () { - return starexternal1[k]; - } - }); - }); Object.defineProperty(exports, 'e', { enumerable: true, get: function () { @@ -18,6 +10,14 @@ define(['exports', 'starexternal1', 'external1', './generated-dep', 'starexterna }); exports.dep = dep.dep; exports.main = main; + Object.keys(starexternal1).forEach(function (k) { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { + enumerable: true, + get: function () { + return starexternal1[k]; + } + }); + }); Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/chunking-form/samples/chunking-star-external/_expected/amd/main2.js b/test/chunking-form/samples/chunking-star-external/_expected/amd/main2.js index 95cba85b89f..6655382d8c6 100644 --- a/test/chunking-form/samples/chunking-star-external/_expected/amd/main2.js +++ b/test/chunking-form/samples/chunking-star-external/_expected/amd/main2.js @@ -2,14 +2,6 @@ define(['exports', './generated-dep', 'external2', 'starexternal2'], function (e var main = '2'; - Object.keys(starexternal2).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { - enumerable: true, - get: function () { - return starexternal2[k]; - } - }); - }); exports.dep = dep.dep; Object.defineProperty(exports, 'e', { enumerable: true, @@ -18,6 +10,14 @@ define(['exports', './generated-dep', 'external2', 'starexternal2'], function (e } }); exports.main = main; + Object.keys(starexternal2).forEach(function (k) { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { + enumerable: true, + get: function () { + return starexternal2[k]; + } + }); + }); Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/chunking-form/samples/chunking-star-external/_expected/cjs/main1.js b/test/chunking-form/samples/chunking-star-external/_expected/cjs/main1.js index ef847f28b4b..620f87b6570 100644 --- a/test/chunking-form/samples/chunking-star-external/_expected/cjs/main1.js +++ b/test/chunking-form/samples/chunking-star-external/_expected/cjs/main1.js @@ -10,14 +10,6 @@ require('external2'); var main = '1'; -Object.keys(starexternal1).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { - enumerable: true, - get: function () { - return starexternal1[k]; - } - }); -}); Object.defineProperty(exports, 'e', { enumerable: true, get: function () { @@ -26,3 +18,11 @@ Object.defineProperty(exports, 'e', { }); exports.dep = dep.dep; exports.main = main; +Object.keys(starexternal1).forEach(function (k) { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { + enumerable: true, + get: function () { + return starexternal1[k]; + } + }); +}); diff --git a/test/chunking-form/samples/chunking-star-external/_expected/cjs/main2.js b/test/chunking-form/samples/chunking-star-external/_expected/cjs/main2.js index 5da3f44ccc4..79d55867966 100644 --- a/test/chunking-form/samples/chunking-star-external/_expected/cjs/main2.js +++ b/test/chunking-form/samples/chunking-star-external/_expected/cjs/main2.js @@ -8,14 +8,6 @@ var starexternal2 = require('starexternal2'); var main = '2'; -Object.keys(starexternal2).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { - enumerable: true, - get: function () { - return starexternal2[k]; - } - }); -}); exports.dep = dep.dep; Object.defineProperty(exports, 'e', { enumerable: true, @@ -24,3 +16,11 @@ Object.defineProperty(exports, 'e', { } }); exports.main = main; +Object.keys(starexternal2).forEach(function (k) { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { + enumerable: true, + get: function () { + return starexternal2[k]; + } + }); +}); diff --git a/test/form/samples/export-all-before-named/_expected/amd.js b/test/form/samples/export-all-before-named/_expected/amd.js index e718a007b14..992516bce48 100644 --- a/test/form/samples/export-all-before-named/_expected/amd.js +++ b/test/form/samples/export-all-before-named/_expected/amd.js @@ -4,15 +4,15 @@ define(['exports', 'external'], function (exports, external) { 'use strict'; return path[0] === '.'; } + exports.internalFn = internalFn; Object.keys(external).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return external[k]; } }); }); - exports.internalFn = internalFn; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/form/samples/export-all-before-named/_expected/cjs.js b/test/form/samples/export-all-before-named/_expected/cjs.js index d751709f95e..ca91d57ba6c 100644 --- a/test/form/samples/export-all-before-named/_expected/cjs.js +++ b/test/form/samples/export-all-before-named/_expected/cjs.js @@ -8,12 +8,12 @@ function internalFn(path) { return path[0] === '.'; } +exports.internalFn = internalFn; Object.keys(external).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return external[k]; } }); }); -exports.internalFn = internalFn; diff --git a/test/form/samples/export-all-before-named/_expected/iife.js b/test/form/samples/export-all-before-named/_expected/iife.js index bdd2f3acb4e..524791eb5f4 100644 --- a/test/form/samples/export-all-before-named/_expected/iife.js +++ b/test/form/samples/export-all-before-named/_expected/iife.js @@ -5,15 +5,15 @@ var exposedInternals = (function (exports, external) { return path[0] === '.'; } + exports.internalFn = internalFn; Object.keys(external).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return external[k]; } }); }); - exports.internalFn = internalFn; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/form/samples/export-all-before-named/_expected/umd.js b/test/form/samples/export-all-before-named/_expected/umd.js index 6ec6b090958..b6ef3fc25a9 100644 --- a/test/form/samples/export-all-before-named/_expected/umd.js +++ b/test/form/samples/export-all-before-named/_expected/umd.js @@ -8,15 +8,15 @@ return path[0] === '.'; } + exports.internalFn = internalFn; Object.keys(external).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return external[k]; } }); }); - exports.internalFn = internalFn; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/form/samples/export-all-multiple/_expected/amd.js b/test/form/samples/export-all-multiple/_expected/amd.js index 8d4e5c36acd..76d538855b1 100644 --- a/test/form/samples/export-all-multiple/_expected/amd.js +++ b/test/form/samples/export-all-multiple/_expected/amd.js @@ -3,7 +3,7 @@ define(['exports', 'foo', 'bar', 'baz'], function (exports, foo, bar, baz) { 'us Object.keys(foo).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return foo[k]; @@ -11,7 +11,7 @@ define(['exports', 'foo', 'bar', 'baz'], function (exports, foo, bar, baz) { 'us }); }); Object.keys(bar).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return bar[k]; @@ -19,7 +19,7 @@ define(['exports', 'foo', 'bar', 'baz'], function (exports, foo, bar, baz) { 'us }); }); Object.keys(baz).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return baz[k]; diff --git a/test/form/samples/export-all-multiple/_expected/cjs.js b/test/form/samples/export-all-multiple/_expected/cjs.js index c322612ac32..63491e13df6 100644 --- a/test/form/samples/export-all-multiple/_expected/cjs.js +++ b/test/form/samples/export-all-multiple/_expected/cjs.js @@ -9,7 +9,7 @@ var baz = require('baz'); Object.keys(foo).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return foo[k]; @@ -17,7 +17,7 @@ Object.keys(foo).forEach(function (k) { }); }); Object.keys(bar).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return bar[k]; @@ -25,7 +25,7 @@ Object.keys(bar).forEach(function (k) { }); }); Object.keys(baz).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return baz[k]; diff --git a/test/form/samples/export-all-multiple/_expected/iife.js b/test/form/samples/export-all-multiple/_expected/iife.js index c7c196d7b62..fe9a5885453 100644 --- a/test/form/samples/export-all-multiple/_expected/iife.js +++ b/test/form/samples/export-all-multiple/_expected/iife.js @@ -4,7 +4,7 @@ var myBundle = (function (exports, foo, bar, baz) { Object.keys(foo).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return foo[k]; @@ -12,7 +12,7 @@ var myBundle = (function (exports, foo, bar, baz) { }); }); Object.keys(bar).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return bar[k]; @@ -20,7 +20,7 @@ var myBundle = (function (exports, foo, bar, baz) { }); }); Object.keys(baz).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return baz[k]; diff --git a/test/form/samples/export-all-multiple/_expected/umd.js b/test/form/samples/export-all-multiple/_expected/umd.js index fa5f5339297..14fca7409e6 100644 --- a/test/form/samples/export-all-multiple/_expected/umd.js +++ b/test/form/samples/export-all-multiple/_expected/umd.js @@ -5,7 +5,7 @@ }(this, (function (exports, foo, bar, baz) { 'use strict'; Object.keys(foo).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return foo[k]; @@ -13,7 +13,7 @@ }); }); Object.keys(bar).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return bar[k]; @@ -21,7 +21,7 @@ }); }); Object.keys(baz).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return baz[k]; diff --git a/test/form/samples/no-external-live-bindings-compact/_expected/amd.js b/test/form/samples/no-external-live-bindings-compact/_expected/amd.js index 3cef6a2c1eb..4d4d211ae47 100644 --- a/test/form/samples/no-external-live-bindings-compact/_expected/amd.js +++ b/test/form/samples/no-external-live-bindings-compact/_expected/amd.js @@ -1 +1 @@ -define(['require','exports','external1','external2'],function(require,exports,external1,external2){'use strict';function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){n[k]=e[k];});}n['default']=e;return Object.freeze(n);}const dynamic = new Promise(function(c,e){require(['external3'],function(m){c(/*#__PURE__*/_interopNamespace(m));},e)});Object.keys(external2).forEach(function(k){if(k!=='default')exports[k]=external2[k];});exports.external1=external1.external1;exports.dynamic=dynamic;Object.defineProperty(exports,'__esModule',{value:true});}); \ No newline at end of file +define(['require','exports','external1','external2'],function(require,exports,external1,external2){'use strict';function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){n[k]=e[k];});}n['default']=e;return Object.freeze(n);}const dynamic = new Promise(function(c,e){require(['external3'],function(m){c(/*#__PURE__*/_interopNamespace(m));},e)});exports.external1=external1.external1;exports.dynamic=dynamic;Object.keys(external2).forEach(function(k){if(k!=='default'&&!exports.hasOwnProperty(k))exports[k]=external2[k];});Object.defineProperty(exports,'__esModule',{value:true});}); \ No newline at end of file diff --git a/test/form/samples/no-external-live-bindings-compact/_expected/cjs.js b/test/form/samples/no-external-live-bindings-compact/_expected/cjs.js index 4fe60b3fac6..95ba0066264 100644 --- a/test/form/samples/no-external-live-bindings-compact/_expected/cjs.js +++ b/test/form/samples/no-external-live-bindings-compact/_expected/cjs.js @@ -1 +1 @@ -'use strict';Object.defineProperty(exports,'__esModule',{value:true});var external1=require('external1'),external2=require('external2');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){n[k]=e[k];});}n['default']=e;return Object.freeze(n);}const dynamic = Promise.resolve().then(function(){return /*#__PURE__*/_interopNamespace(require('external3'))});Object.keys(external2).forEach(function(k){if(k!=='default')exports[k]=external2[k];});exports.external1=external1.external1;exports.dynamic=dynamic; \ No newline at end of file +'use strict';Object.defineProperty(exports,'__esModule',{value:true});var external1=require('external1'),external2=require('external2');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){n[k]=e[k];});}n['default']=e;return Object.freeze(n);}const dynamic = Promise.resolve().then(function(){return /*#__PURE__*/_interopNamespace(require('external3'))});exports.external1=external1.external1;exports.dynamic=dynamic;Object.keys(external2).forEach(function(k){if(k!=='default'&&!exports.hasOwnProperty(k))exports[k]=external2[k];}); \ No newline at end of file diff --git a/test/form/samples/no-external-live-bindings-compact/_expected/iife.js b/test/form/samples/no-external-live-bindings-compact/_expected/iife.js index ee7c1ced09e..9b545fb7682 100644 --- a/test/form/samples/no-external-live-bindings-compact/_expected/iife.js +++ b/test/form/samples/no-external-live-bindings-compact/_expected/iife.js @@ -1 +1 @@ -var bundle=(function(exports,external1,external2){'use strict';const dynamic = import('external3');Object.keys(external2).forEach(function(k){if(k!=='default')exports[k]=external2[k];});exports.external1=external1.external1;exports.dynamic=dynamic;Object.defineProperty(exports,'__esModule',{value:true});return exports;}({},external1,external2)); \ No newline at end of file +var bundle=(function(exports,external1,external2){'use strict';const dynamic = import('external3');exports.external1=external1.external1;exports.dynamic=dynamic;Object.keys(external2).forEach(function(k){if(k!=='default'&&!exports.hasOwnProperty(k))exports[k]=external2[k];});Object.defineProperty(exports,'__esModule',{value:true});return exports;}({},external1,external2)); \ No newline at end of file diff --git a/test/form/samples/no-external-live-bindings-compact/_expected/umd.js b/test/form/samples/no-external-live-bindings-compact/_expected/umd.js index 4714197f42a..58c3d25f209 100644 --- a/test/form/samples/no-external-live-bindings-compact/_expected/umd.js +++ b/test/form/samples/no-external-live-bindings-compact/_expected/umd.js @@ -1 +1 @@ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports,require('external1'),require('external2')):typeof define==='function'&&define.amd?define(['exports','external1','external2'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f(g.bundle={},g.external1,g.external2));}(this,(function(exports, external1, external2){'use strict';const dynamic = import('external3');Object.keys(external2).forEach(function(k){if(k!=='default')exports[k]=external2[k];});exports.external1=external1.external1;exports.dynamic=dynamic;Object.defineProperty(exports,'__esModule',{value:true});}))); \ No newline at end of file +(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports,require('external1'),require('external2')):typeof define==='function'&&define.amd?define(['exports','external1','external2'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f(g.bundle={},g.external1,g.external2));}(this,(function(exports, external1, external2){'use strict';const dynamic = import('external3');exports.external1=external1.external1;exports.dynamic=dynamic;Object.keys(external2).forEach(function(k){if(k!=='default'&&!exports.hasOwnProperty(k))exports[k]=external2[k];});Object.defineProperty(exports,'__esModule',{value:true});}))); \ No newline at end of file diff --git a/test/form/samples/no-external-live-bindings/_expected/amd.js b/test/form/samples/no-external-live-bindings/_expected/amd.js index f78d05827c6..9b35d440d96 100644 --- a/test/form/samples/no-external-live-bindings/_expected/amd.js +++ b/test/form/samples/no-external-live-bindings/_expected/amd.js @@ -14,11 +14,11 @@ define(['require', 'exports', 'external1', 'external2'], function (require, expo const dynamic = new Promise(function (resolve, reject) { require(['external3'], function (m) { resolve(/*#__PURE__*/_interopNamespace(m)); }, reject) }); - Object.keys(external2).forEach(function (k) { - if (k !== 'default') exports[k] = external2[k]; - }); exports.external1 = external1.external1; exports.dynamic = dynamic; + Object.keys(external2).forEach(function (k) { + if (k !== 'default' && !exports.hasOwnProperty(k)) exports[k] = external2[k]; + }); Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/form/samples/no-external-live-bindings/_expected/cjs.js b/test/form/samples/no-external-live-bindings/_expected/cjs.js index 9b0083e5df9..2c9efccf213 100644 --- a/test/form/samples/no-external-live-bindings/_expected/cjs.js +++ b/test/form/samples/no-external-live-bindings/_expected/cjs.js @@ -19,8 +19,8 @@ function _interopNamespace(e) { const dynamic = Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('external3')); }); -Object.keys(external2).forEach(function (k) { - if (k !== 'default') exports[k] = external2[k]; -}); exports.external1 = external1.external1; exports.dynamic = dynamic; +Object.keys(external2).forEach(function (k) { + if (k !== 'default' && !exports.hasOwnProperty(k)) exports[k] = external2[k]; +}); diff --git a/test/form/samples/no-external-live-bindings/_expected/iife.js b/test/form/samples/no-external-live-bindings/_expected/iife.js index c04023a4d98..65bc640d59c 100644 --- a/test/form/samples/no-external-live-bindings/_expected/iife.js +++ b/test/form/samples/no-external-live-bindings/_expected/iife.js @@ -3,11 +3,11 @@ var bundle = (function (exports, external1, external2) { const dynamic = import('external3'); - Object.keys(external2).forEach(function (k) { - if (k !== 'default') exports[k] = external2[k]; - }); exports.external1 = external1.external1; exports.dynamic = dynamic; + Object.keys(external2).forEach(function (k) { + if (k !== 'default' && !exports.hasOwnProperty(k)) exports[k] = external2[k]; + }); Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/form/samples/no-external-live-bindings/_expected/umd.js b/test/form/samples/no-external-live-bindings/_expected/umd.js index 6d8a9a62e6c..09d4d9e60bc 100644 --- a/test/form/samples/no-external-live-bindings/_expected/umd.js +++ b/test/form/samples/no-external-live-bindings/_expected/umd.js @@ -6,11 +6,11 @@ const dynamic = import('external3'); - Object.keys(external2).forEach(function (k) { - if (k !== 'default') exports[k] = external2[k]; - }); exports.external1 = external1.external1; exports.dynamic = dynamic; + Object.keys(external2).forEach(function (k) { + if (k !== 'default' && !exports.hasOwnProperty(k)) exports[k] = external2[k]; + }); Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/form/samples/override-external-namespace/_config.js b/test/form/samples/override-external-namespace/_config.js index 4f553815855..9fcd9fb2c12 100644 --- a/test/form/samples/override-external-namespace/_config.js +++ b/test/form/samples/override-external-namespace/_config.js @@ -1,5 +1,4 @@ module.exports = { - skip: true, description: 'allows overriding imports of external namespace reexports', options: { external: 'external', diff --git a/test/form/samples/override-external-namespace/_expected/amd.js b/test/form/samples/override-external-namespace/_expected/amd.js new file mode 100644 index 00000000000..59cf2532751 --- /dev/null +++ b/test/form/samples/override-external-namespace/_expected/amd.js @@ -0,0 +1,22 @@ +define(['exports', 'external'], function (exports, external) { 'use strict'; + + const a = 'defined'; + exports.b = void 0; + var c; + const reassign = () => (exports.b = 'defined'); + + exports.a = a; + exports.c = c; + exports.reassign = reassign; + Object.keys(external).forEach(function (k) { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { + enumerable: true, + get: function () { + return external[k]; + } + }); + }); + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/form/samples/override-external-namespace/_expected/cjs.js b/test/form/samples/override-external-namespace/_expected/cjs.js new file mode 100644 index 00000000000..8d1e3ca2cea --- /dev/null +++ b/test/form/samples/override-external-namespace/_expected/cjs.js @@ -0,0 +1,22 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var external = require('external'); + +const a = 'defined'; +exports.b = void 0; +var c; +const reassign = () => (exports.b = 'defined'); + +exports.a = a; +exports.c = c; +exports.reassign = reassign; +Object.keys(external).forEach(function (k) { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { + enumerable: true, + get: function () { + return external[k]; + } + }); +}); diff --git a/test/form/samples/override-external-namespace/_expected/es.js b/test/form/samples/override-external-namespace/_expected/es.js new file mode 100644 index 00000000000..4b91c54a897 --- /dev/null +++ b/test/form/samples/override-external-namespace/_expected/es.js @@ -0,0 +1,8 @@ +export * from 'external'; + +const a = 'defined'; +let b; +var c; +const reassign = () => (b = 'defined'); + +export { a, b, c, reassign }; diff --git a/test/form/samples/override-external-namespace/_expected/iife.js b/test/form/samples/override-external-namespace/_expected/iife.js new file mode 100644 index 00000000000..13f2f93e7f3 --- /dev/null +++ b/test/form/samples/override-external-namespace/_expected/iife.js @@ -0,0 +1,25 @@ +var bundle = (function (exports, external) { + 'use strict'; + + const a = 'defined'; + exports.b = void 0; + var c; + const reassign = () => (exports.b = 'defined'); + + exports.a = a; + exports.c = c; + exports.reassign = reassign; + Object.keys(external).forEach(function (k) { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { + enumerable: true, + get: function () { + return external[k]; + } + }); + }); + + Object.defineProperty(exports, '__esModule', { value: true }); + + return exports; + +}({}, external)); diff --git a/test/form/samples/override-external-namespace/_expected/system.js b/test/form/samples/override-external-namespace/_expected/system.js new file mode 100644 index 00000000000..1ef69adff58 --- /dev/null +++ b/test/form/samples/override-external-namespace/_expected/system.js @@ -0,0 +1,26 @@ +System.register('bundle', ['external'], function (exports) { + 'use strict'; + var _starExcludes = { a: 1, b: 1, c: 1, reassign: 1, default: 1 }; + return { + setters: [function (module) { + var _setter = {}; + for (var _$p in module) { + if (!_starExcludes[_$p]) _setter[_$p] = module[_$p]; + } + exports(_setter); + }], + execute: function () { + + exports({ + b: void 0, + c: void 0 + }); + + const a = exports('a', 'defined'); + let b; + var c; + const reassign = exports('reassign', () => (b = exports('b', 'defined'))); + + } + }; +}); diff --git a/test/form/samples/override-external-namespace/_expected/umd.js b/test/form/samples/override-external-namespace/_expected/umd.js new file mode 100644 index 00000000000..cf25f11641e --- /dev/null +++ b/test/form/samples/override-external-namespace/_expected/umd.js @@ -0,0 +1,26 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : + typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.bundle = {}, global.external)); +}(this, (function (exports, external) { 'use strict'; + + const a = 'defined'; + exports.b = void 0; + var c; + const reassign = () => (exports.b = 'defined'); + + exports.a = a; + exports.c = c; + exports.reassign = reassign; + Object.keys(external).forEach(function (k) { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { + enumerable: true, + get: function () { + return external[k]; + } + }); + }); + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); diff --git a/test/form/samples/override-external-namespace/main.js b/test/form/samples/override-external-namespace/main.js index be1f8249978..fe438e1c96d 100644 --- a/test/form/samples/override-external-namespace/main.js +++ b/test/form/samples/override-external-namespace/main.js @@ -2,3 +2,4 @@ export * from 'external'; export const a = 'defined'; export let b; export var c; +export const reassign = () => (b = 'defined'); diff --git a/test/form/samples/reexport-external-default-and-namespace/_expected/amd.js b/test/form/samples/reexport-external-default-and-namespace/_expected/amd.js index 9019dce6f92..216558ef81a 100644 --- a/test/form/samples/reexport-external-default-and-namespace/_expected/amd.js +++ b/test/form/samples/reexport-external-default-and-namespace/_expected/amd.js @@ -6,20 +6,20 @@ define(['exports', 'external'], function (exports, external) { 'use strict'; + Object.defineProperty(exports, 'default', { + enumerable: true, + get: function () { + return external__default['default']; + } + }); Object.keys(external).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return external[k]; } }); }); - Object.defineProperty(exports, 'default', { - enumerable: true, - get: function () { - return external__default['default']; - } - }); Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/form/samples/reexport-external-default-and-namespace/_expected/cjs.js b/test/form/samples/reexport-external-default-and-namespace/_expected/cjs.js index 1ad7ca48b58..2099b57d622 100644 --- a/test/form/samples/reexport-external-default-and-namespace/_expected/cjs.js +++ b/test/form/samples/reexport-external-default-and-namespace/_expected/cjs.js @@ -10,17 +10,17 @@ var external__default = /*#__PURE__*/_interopDefaultLegacy(external); +Object.defineProperty(exports, 'default', { + enumerable: true, + get: function () { + return external__default['default']; + } +}); Object.keys(external).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return external[k]; } }); }); -Object.defineProperty(exports, 'default', { - enumerable: true, - get: function () { - return external__default['default']; - } -}); diff --git a/test/form/samples/reexport-external-default-and-namespace/_expected/iife.js b/test/form/samples/reexport-external-default-and-namespace/_expected/iife.js index 7898bf9307d..58def2bf914 100644 --- a/test/form/samples/reexport-external-default-and-namespace/_expected/iife.js +++ b/test/form/samples/reexport-external-default-and-namespace/_expected/iife.js @@ -7,20 +7,20 @@ var bundle = (function (exports, external) { + Object.defineProperty(exports, 'default', { + enumerable: true, + get: function () { + return external__default['default']; + } + }); Object.keys(external).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return external[k]; } }); }); - Object.defineProperty(exports, 'default', { - enumerable: true, - get: function () { - return external__default['default']; - } - }); Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/form/samples/reexport-external-default-and-namespace/_expected/umd.js b/test/form/samples/reexport-external-default-and-namespace/_expected/umd.js index 000fc5cacbe..30244c5b778 100644 --- a/test/form/samples/reexport-external-default-and-namespace/_expected/umd.js +++ b/test/form/samples/reexport-external-default-and-namespace/_expected/umd.js @@ -10,20 +10,20 @@ + Object.defineProperty(exports, 'default', { + enumerable: true, + get: function () { + return external__default['default']; + } + }); Object.keys(external).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return external[k]; } }); }); - Object.defineProperty(exports, 'default', { - enumerable: true, - get: function () { - return external__default['default']; - } - }); Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/form/samples/reexport-external-namespace/_expected/amd.js b/test/form/samples/reexport-external-namespace/_expected/amd.js index 4611971c8cd..c093b8b7ffe 100644 --- a/test/form/samples/reexport-external-namespace/_expected/amd.js +++ b/test/form/samples/reexport-external-namespace/_expected/amd.js @@ -3,7 +3,7 @@ define(['exports', 'external'], function (exports, external) { 'use strict'; Object.keys(external).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return external[k]; diff --git a/test/form/samples/reexport-external-namespace/_expected/cjs.js b/test/form/samples/reexport-external-namespace/_expected/cjs.js index 330c90ae500..e2a1380e607 100644 --- a/test/form/samples/reexport-external-namespace/_expected/cjs.js +++ b/test/form/samples/reexport-external-namespace/_expected/cjs.js @@ -7,7 +7,7 @@ var external = require('external'); Object.keys(external).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return external[k]; diff --git a/test/form/samples/reexport-external-namespace/_expected/iife.js b/test/form/samples/reexport-external-namespace/_expected/iife.js index 39643704416..2a5162801a5 100644 --- a/test/form/samples/reexport-external-namespace/_expected/iife.js +++ b/test/form/samples/reexport-external-namespace/_expected/iife.js @@ -4,7 +4,7 @@ var bundle = (function (exports, external) { Object.keys(external).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return external[k]; diff --git a/test/form/samples/reexport-external-namespace/_expected/umd.js b/test/form/samples/reexport-external-namespace/_expected/umd.js index de2c7faad0e..f37aded3ae5 100644 --- a/test/form/samples/reexport-external-namespace/_expected/umd.js +++ b/test/form/samples/reexport-external-namespace/_expected/umd.js @@ -5,7 +5,7 @@ }(this, (function (exports, external) { 'use strict'; Object.keys(external).forEach(function (k) { - if (k !== 'default') Object.defineProperty(exports, k, { + if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return external[k]; diff --git a/test/function/samples/no-external-live-bindings-compact/_config.js b/test/function/samples/no-external-live-bindings-compact/_config.js index ed1e9ec9691..e94a85a2051 100644 --- a/test/function/samples/no-external-live-bindings-compact/_config.js +++ b/test/function/samples/no-external-live-bindings-compact/_config.js @@ -16,7 +16,7 @@ module.exports = { } }, exports(exports) { - assert.deepStrictEqual(Object.keys(exports), ['external2', 'value', 'external1', 'dynamic']); + assert.deepStrictEqual(Object.keys(exports).sort(), ['dynamic', 'external1', 'external2', 'value']); assert.strictEqual(exports.external1, true); assert.strictEqual(exports.external2, true); assert.strictEqual(exports.value, 'external2'); diff --git a/test/function/samples/no-external-live-bindings/_config.js b/test/function/samples/no-external-live-bindings/_config.js index c1e1bf0b3ff..8c26c560fe5 100644 --- a/test/function/samples/no-external-live-bindings/_config.js +++ b/test/function/samples/no-external-live-bindings/_config.js @@ -15,7 +15,7 @@ module.exports = { } }, exports(exports) { - assert.deepStrictEqual(Object.keys(exports), ['external2', 'value', 'external1', 'dynamic']); + assert.deepStrictEqual(Object.keys(exports).sort(), ['dynamic', 'external1', 'external2', 'value']); assert.strictEqual(exports.external1, true); assert.strictEqual(exports.external2, true); assert.strictEqual(exports.value, 'external2'); diff --git a/test/function/samples/override-external-namespace/_config.js b/test/function/samples/override-external-namespace/_config.js new file mode 100644 index 00000000000..48c7480e64f --- /dev/null +++ b/test/function/samples/override-external-namespace/_config.js @@ -0,0 +1,16 @@ +const assert = require('assert'); + +module.exports = { + description: 'allows overriding imports of external namespace reexports', + options: { + external: 'path' + }, + exports(exports) { + assert.strictEqual(typeof exports.basename, 'function'); + assert.strictEqual(exports.dirname, 'defined'); + assert.strictEqual(exports.join, undefined); + assert.strictEqual(exports.resolve, undefined); + exports.reassign(); + assert.strictEqual(exports.resolve, 'defined'); + } +}; diff --git a/test/function/samples/override-external-namespace/main.js b/test/function/samples/override-external-namespace/main.js new file mode 100644 index 00000000000..6c0fccaae49 --- /dev/null +++ b/test/function/samples/override-external-namespace/main.js @@ -0,0 +1,5 @@ +export * from 'path'; +export const dirname = 'defined'; +export let resolve; +export var join; +export const reassign = () => (resolve = 'defined'); diff --git a/test/function/samples/override-static-external-namespace/_config.js b/test/function/samples/override-static-external-namespace/_config.js new file mode 100644 index 00000000000..71fb2ddc5c3 --- /dev/null +++ b/test/function/samples/override-static-external-namespace/_config.js @@ -0,0 +1,19 @@ +const assert = require('assert'); + +module.exports = { + description: 'allows overriding imports of external namespace reexports without external live-bindings', + options: { + external: 'path', + output: { + externalLiveBindings: false + } + }, + exports(exports) { + assert.strictEqual(typeof exports.basename, 'function'); + assert.strictEqual(exports.dirname, 'defined'); + assert.strictEqual(exports.join, undefined); + assert.strictEqual(exports.resolve, undefined); + exports.reassign(); + assert.strictEqual(exports.resolve, 'defined'); + } +}; diff --git a/test/function/samples/override-static-external-namespace/main.js b/test/function/samples/override-static-external-namespace/main.js new file mode 100644 index 00000000000..1aefb09808d --- /dev/null +++ b/test/function/samples/override-static-external-namespace/main.js @@ -0,0 +1,5 @@ +export * from 'path'; +export const dirname = 'defined'; +export let resolve; +export var join; +export const reassign = () => (resolve = 'defined'); \ No newline at end of file