From 7ada3a8f15ce79d4960fea10e252494a6ed30f7d Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Mon, 17 Dec 2018 20:15:01 +0100 Subject: [PATCH 1/4] Fix missing parentheses when creating a namespace via a comma expression, only check for self in the UMD-IIFE case --- src/finalisers/iife.ts | 3 +- src/finalisers/shared/setupNamespace.ts | 48 ++++++++++++------- src/finalisers/umd.ts | 46 +++++++++--------- test/cli/samples/module-name/_expected.js | 4 +- test/cli/samples/no-conflict/_expected.js | 8 ++-- .../_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../assignment-to-exports/_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- test/form/samples/compact/_expected/umd.js | 2 +- .../computed-properties/_expected/umd.js | 4 +- .../conflicting-imports/_expected/umd.js | 7 +-- .../dedupes-external-imports/_expected/umd.js | 4 +- .../define-es-modules-false/_expected/umd.js | 4 +- .../export-all-from-internal/_expected/umd.js | 4 +- .../export-all-multiple/_expected/umd.js | 4 +- .../samples/export-default-2/_expected/umd.js | 4 +- .../samples/export-default-3/_expected/umd.js | 4 +- test/form/samples/export-default-4/_config.js | 4 ++ .../samples/export-default-4/_expected/amd.js | 7 +++ .../samples/export-default-4/_expected/cjs.js | 5 ++ .../samples/export-default-4/_expected/es.js | 3 ++ .../export-default-4/_expected/iife.js | 10 ++++ .../export-default-4/_expected/system.js | 10 ++++ .../samples/export-default-4/_expected/umd.js | 11 +++++ test/form/samples/export-default-4/main.js | 1 + .../export-default-import/_expected/umd.js | 4 +- .../samples/export-default/_expected/umd.js | 4 +- .../samples/export-globals/_expected/umd.js | 4 +- .../export-live-bindings/_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../samples/extend-exports/_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../external-deshadowing/_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../external-export-tracing/_expected/umd.js | 4 +- .../_expected/umd.js | 7 +-- .../_expected/umd.js | 7 +-- .../_expected/umd.js | 7 +-- .../samples/external-imports/_expected/umd.js | 7 +-- .../_expected/umd.js | 7 +-- .../_expected/umd.js | 4 +- test/form/samples/freeze/_expected/umd.js | 4 +- .../function-mutation/_expected/umd.js | 4 +- .../_expected/umd.js | 7 +-- .../samples/import-namespace/_expected/umd.js | 7 +-- .../_expected/umd.js | 4 +- .../samples/indent-false/_expected/umd.js | 4 +- .../samples/indent-spaces/_expected/umd.js | 4 +- .../indent-true-spaces/_expected/umd.js | 4 +- .../form/samples/indent-true/_expected/umd.js | 4 +- .../interop-false-reexport/_expected/umd.js | 4 +- .../samples/interop-false/_expected/umd.js | 4 +- .../samples/intro-and-outro/_expected/umd.js | 4 +- .../json-parse-is-not-pure/_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- test/form/samples/mjs/_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../samples/module-name-wat/_expected/umd.js | 4 +- .../module-name-with-dashes/_expected/umd.js | 4 +- .../samples/multiple-exports/_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../namespace-self-import/_expected/umd.js | 4 +- .../namespace-tostringtag/_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../namespaced-named-exports/_expected/umd.js | 4 +- .../samples/no-treeshake/_expected/umd.js | 4 +- .../output-named-library/_expected/umd.js | 4 +- .../samples/paths-function/_expected/umd.js | 7 +-- .../samples/paths-relative/_expected/umd.js | 7 +-- test/form/samples/paths/_expected/umd.js | 7 +-- .../pattern-assignments/_expected/umd.js | 4 +- .../samples/prefer-const/_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- test/form/samples/promises/_expected/umd.js | 4 +- .../_expected/umd.js | 7 +-- .../_expected/umd.js | 7 +-- .../re-export-aliasing/_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../reexports-from-external/_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../_expected/umd.js | 7 +-- .../_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../samples/side-effect-b/_expected/umd.js | 4 +- .../samples/side-effect-c/_expected/umd.js | 4 +- .../samples/side-effect-d/_expected/umd.js | 4 +- .../samples/side-effect-e/_expected/umd.js | 4 +- .../samples/side-effect-f/_expected/umd.js | 4 +- .../samples/side-effect-g/_expected/umd.js | 4 +- .../samples/side-effect-h/_expected/umd.js | 4 +- .../samples/side-effect-i/_expected/umd.js | 4 +- .../samples/side-effect-j/_expected/umd.js | 4 +- .../samples/side-effect-k/_expected/umd.js | 4 +- .../side-effects-delete/_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../_expected/umd.js | 4 +- .../umd-noconflict-extend/_expected/umd.js | 8 ++-- .../_expected/umd.js | 10 ++-- .../_expected/umd.js | 8 ++-- .../samples/umd-noconflict/_expected/umd.js | 8 ++-- .../samples/unused-import/_expected/umd.js | 7 +-- .../samples/url-external/_expected/umd.js | 7 +-- .../_expected/umd.js | 7 +-- 108 files changed, 344 insertions(+), 263 deletions(-) create mode 100644 test/form/samples/export-default-4/_config.js create mode 100644 test/form/samples/export-default-4/_expected/amd.js create mode 100644 test/form/samples/export-default-4/_expected/cjs.js create mode 100644 test/form/samples/export-default-4/_expected/es.js create mode 100644 test/form/samples/export-default-4/_expected/iife.js create mode 100644 test/form/samples/export-default-4/_expected/system.js create mode 100644 test/form/samples/export-default-4/_expected/umd.js create mode 100644 test/form/samples/export-default-4/main.js diff --git a/src/finalisers/iife.ts b/src/finalisers/iife.ts index 37318815709..37d78e966d0 100644 --- a/src/finalisers/iife.ts +++ b/src/finalisers/iife.ts @@ -71,8 +71,7 @@ export default function iife( } if (isNamespaced) { - wrapperIntro = - setupNamespace(name, 'this', false, options.globals, options.compact) + wrapperIntro; + wrapperIntro = setupNamespace(name, 'this', options.globals, options.compact) + wrapperIntro; } let wrapperOutro = `${n}${n}}(${deps}));`; diff --git a/src/finalisers/shared/setupNamespace.ts b/src/finalisers/shared/setupNamespace.ts index 4fdac73c93c..422478bd14f 100644 --- a/src/finalisers/shared/setupNamespace.ts +++ b/src/finalisers/shared/setupNamespace.ts @@ -4,7 +4,6 @@ import { property } from './sanitize'; export default function setupNamespace( name: string, root: string, - forAssignment: boolean, globals: GlobalsOption, compact: boolean ) { @@ -14,24 +13,39 @@ export default function setupNamespace( } const _ = compact ? '' : ' '; + parts.pop(); + let acc = root; + return ( + parts + .map( + part => ((acc += property(part)), `${acc}${_}=${_}${acc}${_}||${_}{}${compact ? '' : ';'}`) + ) + .join(compact ? ',' : '\n') + (compact && parts.length ? ';' : '\n') + ); +} + +export const assignToDeepVariable = ( + deepName: string, + root: string, + globals: GlobalsOption, + compact: boolean +) => (assignment: string): string => { + const _ = compact ? '' : ' '; + const parts = deepName.split('.'); + if (globals) { + parts[0] = (typeof globals === 'function' ? globals(parts[0]) : globals[parts[0]]) || parts[0]; + } const last = parts.pop(); let acc = root; - if (forAssignment) { - return parts - .map(part => ((acc += property(part)), `${acc}${_}=${_}${acc}${_}||${_}{}`)) - .concat(`${acc}${property(last)}`) - .join(`,${_}`); - } else { - return ( - parts - .map( - part => ( - (acc += property(part)), `${acc}${_}=${_}${acc}${_}||${_}{}${compact ? '' : ';'}` - ) - ) - .join(compact ? ',' : '\n') + (compact && parts.length ? ';' : '\n') - ); + let deepAssignment = parts + .map(part => ((acc += property(part)), `${acc}${_}=${_}${acc}${_}||${_}{}`)) + .concat(`${acc}${property(last)}`) + .join(`,${_}`) + .concat(`${_}=${_}${assignment}`); + if (parts.length > 0) { + deepAssignment = `(${deepAssignment})`; } -} + return deepAssignment; +}; diff --git a/src/finalisers/umd.ts b/src/finalisers/umd.ts index 60184484b71..fb7d801a877 100644 --- a/src/finalisers/umd.ts +++ b/src/finalisers/umd.ts @@ -6,7 +6,7 @@ import { compactEsModuleExport, esModuleExport } from './shared/esModuleExport'; import getExportBlock from './shared/getExportBlock'; import getInteropBlock from './shared/getInteropBlock'; import { keypath, property } from './shared/sanitize'; -import setupNamespace from './shared/setupNamespace'; +import { assignToDeepVariable } from './shared/setupNamespace'; import trimEmptyImports from './shared/trimEmptyImports'; import warnOnBuiltins from './shared/warnOnBuiltins'; @@ -59,9 +59,9 @@ export default function umd( amdDeps.unshift(`'exports'`); cjsDeps.unshift(`exports`); globalDeps.unshift( - `${setupNamespace(options.name, 'global', true, options.globals, options.compact)}${_}=${_}${ - options.extend ? `${globalProp(options.name)}${_}||${_}` : '' - }{}` + assignToDeepVariable(options.name, 'global', options.globals, options.compact)( + `${options.extend ? `${globalProp(options.name)}${_}||${_}` : ''}{}` + ) ); factoryArgs.unshift('exports'); @@ -74,47 +74,47 @@ export default function umd( (amdDeps.length ? `[${amdDeps.join(`,${_}`)}],${_}` : ``); const define = amdOptions.define || 'define'; - const cjsExport = !namedExportsMode && hasExports ? `module.exports${_}=${_}` : ``; - const defaultExport = - !namedExportsMode && hasExports - ? `${setupNamespace(options.name, 'global', true, options.globals, options.compact)}${_}=${_}` - : ''; - const useStrict = options.strict !== false ? `${_}'use strict';${n}` : ``; - let globalExport; + let iifeExport; if (options.noConflict === true) { let factory; if (!namedExportsMode && hasExports) { - factory = `var exports${_}=${_}factory(${globalDeps});`; + factory = `var exports${_}=${_}factory(${globalDeps.join(`,${_}`)});`; } else if (namedExportsMode) { const module = globalDeps.shift(); factory = `var exports${_}=${_}${module};${n}` + - `${t}${t}factory(${['exports'].concat(globalDeps)});`; + `${t}${t}factory(${['exports'].concat(globalDeps).join(`,${_}`)});`; } - globalExport = - `(function()${_}{${n}` + + iifeExport = + `(function${_}()${_}{${n}` + `${t}${t}var current${_}=${_}${safeAccess(options.name, options.compact)};${n}` + `${t}${t}${factory}${n}` + `${t}${t}${globalProp(options.name)}${_}=${_}exports;${n}` + - `${t}${t}exports.noConflict${_}=${_}function()${_}{${_}` + + `${t}${t}exports.noConflict${_}=${_}function${_}()${_}{${_}` + `${globalProp(options.name)}${_}=${_}current;${_}return exports${ options.compact ? '' : '; ' }};${n}` + - `${t}})()`; + `${t}}())`; } else { - globalExport = `${defaultExport}factory(${globalDeps})`; + iifeExport = `factory(${globalDeps.join(`,${_}`)})`; + if (!namedExportsMode && hasExports) { + iifeExport = assignToDeepVariable(options.name, 'global', options.globals, options.compact)( + iifeExport + ); + } } - const iifeNeedsGlobal = hasExports || (options.noConflict === true && namedExportsMode); + const iifeNeedsGlobal = + hasExports || (options.noConflict === true && namedExportsMode) || globalDeps.length > 0; const globalParam = iifeNeedsGlobal ? `global,${_}` : ''; - const globalArg = iifeNeedsGlobal - ? `typeof self${_}!==${_}'undefined'${_}?${_}self${_}:${_}this,${_}` - : ''; + const globalArg = iifeNeedsGlobal ? `this,${_}` : ''; + const iifeStart = iifeNeedsGlobal ? `(global${_}=${_}global${_}||${_}self,${_}` : ''; + const iifeEnd = iifeNeedsGlobal ? ')' : ''; const cjsIntro = iifeNeedsGlobal ? `${t}typeof exports${_}===${_}'object'${_}&&${_}typeof module${_}!==${_}'undefined'${_}?` + `${_}${cjsExport}factory(${cjsDeps.join(`,${_}`)})${_}:${n}` @@ -124,7 +124,7 @@ export default function umd( `(function${_}(${globalParam}factory)${_}{${n}` + cjsIntro + `${t}typeof ${define}${_}===${_}'function'${_}&&${_}${define}.amd${_}?${_}${define}(${amdParams}factory)${_}:${n}` + - `${t}${globalExport};${n}` + + `${t}${iifeStart}${iifeExport}${iifeEnd};${n}` + `}(${globalArg}function${_}(${factoryArgs})${_}{${useStrict}${n}`; const wrapperOutro = n + n + '}));'; diff --git a/test/cli/samples/module-name/_expected.js b/test/cli/samples/module-name/_expected.js index 5d988c0df7c..2b06c87bf3d 100644 --- a/test/cli/samples/module-name/_expected.js +++ b/test/cli/samples/module-name/_expected.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; var main = 42; diff --git a/test/cli/samples/no-conflict/_expected.js b/test/cli/samples/no-conflict/_expected.js index 50291cbf6e7..2cb728fc844 100644 --- a/test/cli/samples/no-conflict/_expected.js +++ b/test/cli/samples/no-conflict/_expected.js @@ -1,13 +1,13 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - (function() { + (global = global || self, (function () { var current = global.conflictyName; var exports = factory(); global.conflictyName = exports; - exports.noConflict = function() { global.conflictyName = current; return exports; }; - })(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + exports.noConflict = function () { global.conflictyName = current; return exports; }; + }())); +}(this, function () { 'use strict'; var main = {}; diff --git a/test/form/samples/assignment-to-array-buffer-view/_expected/umd.js b/test/form/samples/assignment-to-array-buffer-view/_expected/umd.js index 294e3576748..9ec3ef24970 100644 --- a/test/form/samples/assignment-to-array-buffer-view/_expected/umd.js +++ b/test/form/samples/assignment-to-array-buffer-view/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.bundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.bundle = {})); +}(this, function (exports) { 'use strict'; var buffer = new ArrayBuffer( 8 ); diff --git a/test/form/samples/assignment-to-exports-class-declaration/_expected/umd.js b/test/form/samples/assignment-to-exports-class-declaration/_expected/umd.js index 15ccce3ffff..30778727178 100644 --- a/test/form/samples/assignment-to-exports-class-declaration/_expected/umd.js +++ b/test/form/samples/assignment-to-exports-class-declaration/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.myModule = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.myModule = {})); +}(this, function (exports) { 'use strict'; exports.Foo = class Foo {}; exports.Foo = lol( exports.Foo ); diff --git a/test/form/samples/assignment-to-exports/_expected/umd.js b/test/form/samples/assignment-to-exports/_expected/umd.js index ecc3f3fedce..a344a0db14a 100644 --- a/test/form/samples/assignment-to-exports/_expected/umd.js +++ b/test/form/samples/assignment-to-exports/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.bundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.bundle = {})); +}(this, function (exports) { 'use strict'; // Unassigned export var foo1; diff --git a/test/form/samples/catch-parameter-shadowing/_expected/umd.js b/test/form/samples/catch-parameter-shadowing/_expected/umd.js index 70c25ca8e30..70e934b73d5 100644 --- a/test/form/samples/catch-parameter-shadowing/_expected/umd.js +++ b/test/form/samples/catch-parameter-shadowing/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.bundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.bundle = {})); +}(this, function (exports) { 'use strict'; const e = 2.7182818284; diff --git a/test/form/samples/compact/_expected/umd.js b/test/form/samples/compact/_expected/umd.js index 24dad306b2b..6315bf4fc32 100644 --- a/test/form/samples/compact/_expected/umd.js +++ b/test/form/samples/compact/_expected/umd.js @@ -1,4 +1,4 @@ -(function(global,factory){typeof exports==='object'&&typeof module!=='undefined'?module.exports=factory(require('external')):typeof define==='function'&&define.amd?define(['external'],factory):global.foo=factory(global.x);}(typeof self!=='undefined'?self:this,function(x){'use strict';x=x&&x.hasOwnProperty('default')?x['default']:x;var self = {get default(){return foo$$1}};if(typeof Symbol!=='undefined'&&Symbol.toStringTag)Object.defineProperty(self,Symbol.toStringTag,{value:'Module'});else Object.defineProperty(self,'toString',{value:function(){return'[object Module]';}});/*#__PURE__*/Object.freeze(self);console.log(self); +(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.foo=factory(global.x));}(this,function(x){'use strict';x=x&&x.hasOwnProperty('default')?x['default']:x;var self = {get default(){return foo$$1}};if(typeof Symbol!=='undefined'&&Symbol.toStringTag)Object.defineProperty(self,Symbol.toStringTag,{value:'Module'});else Object.defineProperty(self,'toString',{value:function(){return'[object Module]';}});/*#__PURE__*/Object.freeze(self);console.log(self); function foo$$1 () { console.log( x ); } diff --git a/test/form/samples/computed-properties/_expected/umd.js b/test/form/samples/computed-properties/_expected/umd.js index 68569e48477..620a759b053 100644 --- a/test/form/samples/computed-properties/_expected/umd.js +++ b/test/form/samples/computed-properties/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.computedProperties = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.computedProperties = {})); +}(this, function (exports) { 'use strict'; var foo = 'foo'; var bar = 'bar'; diff --git a/test/form/samples/conflicting-imports/_expected/umd.js b/test/form/samples/conflicting-imports/_expected/umd.js index 7d5c2c962ca..0f07fe910e4 100644 --- a/test/form/samples/conflicting-imports/_expected/umd.js +++ b/test/form/samples/conflicting-imports/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('foo'), require('bar')) : typeof define === 'function' && define.amd ? define(['foo', 'bar'], factory) : - factory(global.foo,global.bar); -}(function (foo,bar) { 'use strict'; + (global = global || self, factory(global.foo, global.bar)); +}(this, function (foo,bar) { 'use strict'; console.log( bar.a ); diff --git a/test/form/samples/dedupes-external-imports/_expected/umd.js b/test/form/samples/dedupes-external-imports/_expected/umd.js index 353c196e261..87b5d8ba4d9 100644 --- a/test/form/samples/dedupes-external-imports/_expected/umd.js +++ b/test/form/samples/dedupes-external-imports/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : - factory(global.myBundle = {},global.external); -}(typeof self !== 'undefined' ? self : this, function (exports,external) { 'use strict'; + (global = global || self, factory(global.myBundle = {}, global.external)); +}(this, function (exports,external) { 'use strict'; class Foo extends external.Component { constructor () { diff --git a/test/form/samples/define-es-modules-false/_expected/umd.js b/test/form/samples/define-es-modules-false/_expected/umd.js index 55024228e64..580090c4ad1 100644 --- a/test/form/samples/define-es-modules-false/_expected/umd.js +++ b/test/form/samples/define-es-modules-false/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.foo = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.foo = {})); +}(this, function (exports) { 'use strict'; const make1 = () => {}; diff --git a/test/form/samples/export-all-from-internal/_expected/umd.js b/test/form/samples/export-all-from-internal/_expected/umd.js index b514b3f7e9a..0c947c5a0eb 100644 --- a/test/form/samples/export-all-from-internal/_expected/umd.js +++ b/test/form/samples/export-all-from-internal/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.exposedInternals = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.exposedInternals = {})); +}(this, function (exports) { 'use strict'; const a = 1; const b = 2; diff --git a/test/form/samples/export-all-multiple/_expected/umd.js b/test/form/samples/export-all-multiple/_expected/umd.js index a13949e213a..b267d2611ce 100644 --- a/test/form/samples/export-all-multiple/_expected/umd.js +++ b/test/form/samples/export-all-multiple/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('foo'), require('bar'), require('baz')) : typeof define === 'function' && define.amd ? define(['exports', 'foo', 'bar', 'baz'], factory) : - factory(global.myBundle = {},global.foo,global.bar,global.baz); -}(typeof self !== 'undefined' ? self : this, function (exports,foo,bar,baz) { 'use strict'; + (global = global || self, factory(global.myBundle = {}, global.foo, global.bar, global.baz)); +}(this, function (exports,foo,bar,baz) { 'use strict'; Object.keys(foo).forEach(function (key) { exports[key] = foo[key]; }); Object.keys(bar).forEach(function (key) { exports[key] = bar[key]; }); diff --git a/test/form/samples/export-default-2/_expected/umd.js b/test/form/samples/export-default-2/_expected/umd.js index 43acc2ac2cc..56124966176 100644 --- a/test/form/samples/export-default-2/_expected/umd.js +++ b/test/form/samples/export-default-2/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; var bar = 1; diff --git a/test/form/samples/export-default-3/_expected/umd.js b/test/form/samples/export-default-3/_expected/umd.js index 43acc2ac2cc..56124966176 100644 --- a/test/form/samples/export-default-3/_expected/umd.js +++ b/test/form/samples/export-default-3/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; var bar = 1; diff --git a/test/form/samples/export-default-4/_config.js b/test/form/samples/export-default-4/_config.js new file mode 100644 index 00000000000..a3d71b3ae40 --- /dev/null +++ b/test/form/samples/export-default-4/_config.js @@ -0,0 +1,4 @@ +module.exports = { + description: 'single default export in deep namespace', + options: { output: { name: 'my.global.namespace' } } +}; diff --git a/test/form/samples/export-default-4/_expected/amd.js b/test/form/samples/export-default-4/_expected/amd.js new file mode 100644 index 00000000000..37d25711e09 --- /dev/null +++ b/test/form/samples/export-default-4/_expected/amd.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var main = 42; + + return main; + +}); diff --git a/test/form/samples/export-default-4/_expected/cjs.js b/test/form/samples/export-default-4/_expected/cjs.js new file mode 100644 index 00000000000..5a370cdb174 --- /dev/null +++ b/test/form/samples/export-default-4/_expected/cjs.js @@ -0,0 +1,5 @@ +'use strict'; + +var main = 42; + +module.exports = main; diff --git a/test/form/samples/export-default-4/_expected/es.js b/test/form/samples/export-default-4/_expected/es.js new file mode 100644 index 00000000000..d862de816a3 --- /dev/null +++ b/test/form/samples/export-default-4/_expected/es.js @@ -0,0 +1,3 @@ +var main = 42; + +export default main; diff --git a/test/form/samples/export-default-4/_expected/iife.js b/test/form/samples/export-default-4/_expected/iife.js new file mode 100644 index 00000000000..7ad35103978 --- /dev/null +++ b/test/form/samples/export-default-4/_expected/iife.js @@ -0,0 +1,10 @@ +this.my = this.my || {}; +this.my.global = this.my.global || {}; +this.my.global.namespace = (function () { + 'use strict'; + + var main = 42; + + return main; + +}()); diff --git a/test/form/samples/export-default-4/_expected/system.js b/test/form/samples/export-default-4/_expected/system.js new file mode 100644 index 00000000000..821e7961ade --- /dev/null +++ b/test/form/samples/export-default-4/_expected/system.js @@ -0,0 +1,10 @@ +System.register('my.global.namespace', [], function (exports, module) { + 'use strict'; + return { + execute: function () { + + var main = exports('default', 42); + + } + }; +}); diff --git a/test/form/samples/export-default-4/_expected/umd.js b/test/form/samples/export-default-4/_expected/umd.js new file mode 100644 index 00000000000..ce7bed11a80 --- /dev/null +++ b/test/form/samples/export-default-4/_expected/umd.js @@ -0,0 +1,11 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, (global.my = global.my || {}, global.my.global = global.my.global || {}, global.my.global.namespace = factory())); +}(this, function () { 'use strict'; + + var main = 42; + + return main; + +})); diff --git a/test/form/samples/export-default-4/main.js b/test/form/samples/export-default-4/main.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/form/samples/export-default-4/main.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/form/samples/export-default-import/_expected/umd.js b/test/form/samples/export-default-import/_expected/umd.js index 3d81d0c5a76..741b7647e02 100644 --- a/test/form/samples/export-default-import/_expected/umd.js +++ b/test/form/samples/export-default-import/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('x')) : typeof define === 'function' && define.amd ? define(['exports', 'x'], factory) : - factory(global.myBundle = {},global.x); -}(typeof self !== 'undefined' ? self : this, function (exports,x) { 'use strict'; + (global = global || self, factory(global.myBundle = {}, global.x)); +}(this, function (exports,x) { 'use strict'; x = x && x.hasOwnProperty('default') ? x['default'] : x; diff --git a/test/form/samples/export-default/_expected/umd.js b/test/form/samples/export-default/_expected/umd.js index 5d988c0df7c..2b06c87bf3d 100644 --- a/test/form/samples/export-default/_expected/umd.js +++ b/test/form/samples/export-default/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; var main = 42; diff --git a/test/form/samples/export-globals/_expected/umd.js b/test/form/samples/export-globals/_expected/umd.js index 218c9734b69..b9a1805877b 100644 --- a/test/form/samples/export-globals/_expected/umd.js +++ b/test/form/samples/export-globals/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.myBundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.myBundle = {})); +}(this, function (exports) { 'use strict'; const isNaN$1 = isNaN; diff --git a/test/form/samples/export-live-bindings/_expected/umd.js b/test/form/samples/export-live-bindings/_expected/umd.js index 34f3e77fd8c..cb764936ff5 100644 --- a/test/form/samples/export-live-bindings/_expected/umd.js +++ b/test/form/samples/export-live-bindings/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.iife = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.iife = {})); +}(this, function (exports) { 'use strict'; function update () { exports.foo += 10; diff --git a/test/form/samples/exports-at-end-if-possible/_expected/umd.js b/test/form/samples/exports-at-end-if-possible/_expected/umd.js index ef8e2853278..2e3206a8dca 100644 --- a/test/form/samples/exports-at-end-if-possible/_expected/umd.js +++ b/test/form/samples/exports-at-end-if-possible/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.myBundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.myBundle = {})); +}(this, function (exports) { 'use strict'; var FOO = 'foo'; diff --git a/test/form/samples/extend-exports/_expected/umd.js b/test/form/samples/extend-exports/_expected/umd.js index 661338c351b..fbd60d09b45 100644 --- a/test/form/samples/extend-exports/_expected/umd.js +++ b/test/form/samples/extend-exports/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.foo = global.foo || {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.foo = global.foo || {})); +}(this, function (exports) { 'use strict'; const answer = 42; diff --git a/test/form/samples/extend-namespaced-exports/_expected/umd.js b/test/form/samples/extend-namespaced-exports/_expected/umd.js index c2fe554c014..b971dac5430 100644 --- a/test/form/samples/extend-namespaced-exports/_expected/umd.js +++ b/test/form/samples/extend-namespaced-exports/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.foo = global.foo || {}, global.foo.bar = global.foo.bar || {}, global.foo.bar.baz = global.foo.bar.baz || {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory((global.foo = global.foo || {}, global.foo.bar = global.foo.bar || {}, global.foo.bar.baz = global.foo.bar.baz || {}))); +}(this, function (exports) { 'use strict'; const answer = 42; diff --git a/test/form/samples/external-deshadowing/_expected/umd.js b/test/form/samples/external-deshadowing/_expected/umd.js index 60e8ef34deb..84525771c97 100644 --- a/test/form/samples/external-deshadowing/_expected/umd.js +++ b/test/form/samples/external-deshadowing/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('a'), require('b')) : typeof define === 'function' && define.amd ? define(['exports', 'a', 'b'], factory) : - factory(global.myBundle = {},global.a,global.Test); -}(typeof self !== 'undefined' ? self : this, function (exports,a,Test) { 'use strict'; + (global = global || self, factory(global.myBundle = {}, global.a, global.Test)); +}(this, function (exports,a,Test) { 'use strict'; Test = Test && Test.hasOwnProperty('default') ? Test['default'] : Test; diff --git a/test/form/samples/external-empty-import-no-global-b/_expected/umd.js b/test/form/samples/external-empty-import-no-global-b/_expected/umd.js index 104d7fee3d6..8917845bf44 100644 --- a/test/form/samples/external-empty-import-no-global-b/_expected/umd.js +++ b/test/form/samples/external-empty-import-no-global-b/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('babel-polyfill'), require('other')) : typeof define === 'function' && define.amd ? define(['babel-polyfill', 'other'], factory) : - global.myBundle = factory(null,global.other); -}(typeof self !== 'undefined' ? self : this, function (babelPolyfill,other) { 'use strict'; + (global = global || self, global.myBundle = factory(null, global.other)); +}(this, function (babelPolyfill,other) { 'use strict'; other.x(); diff --git a/test/form/samples/external-empty-import-no-global/_expected/umd.js b/test/form/samples/external-empty-import-no-global/_expected/umd.js index fa16d94e13b..1cd3ecca04d 100644 --- a/test/form/samples/external-empty-import-no-global/_expected/umd.js +++ b/test/form/samples/external-empty-import-no-global/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('babel-polyfill')) : typeof define === 'function' && define.amd ? define(['babel-polyfill'], factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; var main = new WeakMap(); diff --git a/test/form/samples/external-export-tracing/_expected/umd.js b/test/form/samples/external-export-tracing/_expected/umd.js index a81f0a79a20..237e080d7ae 100644 --- a/test/form/samples/external-export-tracing/_expected/umd.js +++ b/test/form/samples/external-export-tracing/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : - factory(global.myBundle = {},global.external); -}(typeof self !== 'undefined' ? self : this, function (exports,external) { 'use strict'; + (global = global || self, factory(global.myBundle = {}, global.external)); +}(this, function (exports,external) { 'use strict'; exports.s = external.p; diff --git a/test/form/samples/external-import-alias-shadow/_expected/umd.js b/test/form/samples/external-import-alias-shadow/_expected/umd.js index 8ab00cff5cf..bc4e3ec0c2d 100644 --- a/test/form/samples/external-import-alias-shadow/_expected/umd.js +++ b/test/form/samples/external-import-alias-shadow/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('acorn')) : typeof define === 'function' && define.amd ? define(['acorn'], factory) : - factory(global.acorn); -}(function (acorn) { 'use strict'; + (global = global || self, factory(global.acorn)); +}(this, function (acorn) { 'use strict'; function parse(source) { return acorn.parse(source, { ecmaVersion: 6 }); diff --git a/test/form/samples/external-imports-custom-names-function/_expected/umd.js b/test/form/samples/external-imports-custom-names-function/_expected/umd.js index 9bae2564fb5..ddb9d7a38b6 100644 --- a/test/form/samples/external-imports-custom-names-function/_expected/umd.js +++ b/test/form/samples/external-imports-custom-names-function/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('a-b-c')) : typeof define === 'function' && define.amd ? define(['a-b-c'], factory) : - factory(global.a_b_c); -}(function (aBC) { 'use strict'; + (global = global || self, factory(global.a_b_c)); +}(this, function (aBC) { 'use strict'; aBC.foo(); diff --git a/test/form/samples/external-imports-custom-names/_expected/umd.js b/test/form/samples/external-imports-custom-names/_expected/umd.js index b853ce9a841..00e37dc9df5 100644 --- a/test/form/samples/external-imports-custom-names/_expected/umd.js +++ b/test/form/samples/external-imports-custom-names/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) : typeof define === 'function' && define.amd ? define(['jquery'], factory) : - factory(global.jQuery); -}(function ($) { 'use strict'; + (global = global || self, factory(global.jQuery)); +}(this, function ($) { 'use strict'; $ = $ && $.hasOwnProperty('default') ? $['default'] : $; diff --git a/test/form/samples/external-imports/_expected/umd.js b/test/form/samples/external-imports/_expected/umd.js index 5bfb7a3d4b5..22a51867443 100644 --- a/test/form/samples/external-imports/_expected/umd.js +++ b/test/form/samples/external-imports/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('factory'), require('baz'), require('shipping-port'), require('alphabet')) : typeof define === 'function' && define.amd ? define(['factory', 'baz', 'shipping-port', 'alphabet'], factory) : - factory(global.factory,global.baz,global.containers,global.alphabet); -}(function (factory,baz,containers,alphabet) { 'use strict'; + (global = global || self, factory(global.factory, global.baz, global.containers, global.alphabet)); +}(this, function (factory,baz,containers,alphabet) { 'use strict'; factory = factory && factory.hasOwnProperty('default') ? factory['default'] : factory; var alphabet__default = 'default' in alphabet ? alphabet['default'] : alphabet; diff --git a/test/form/samples/external-namespace-and-named/_expected/umd.js b/test/form/samples/external-namespace-and-named/_expected/umd.js index c7e14a25d25..9808cd9d3c5 100644 --- a/test/form/samples/external-namespace-and-named/_expected/umd.js +++ b/test/form/samples/external-namespace-and-named/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('foo')) : typeof define === 'function' && define.amd ? define(['foo'], factory) : - factory(global.foo); -}(function (foo) { 'use strict'; + (global = global || self, factory(global.foo)); +}(this, function (foo) { 'use strict'; console.log(foo); console.log(foo.blah); diff --git a/test/form/samples/external-namespace-reexport/_expected/umd.js b/test/form/samples/external-namespace-reexport/_expected/umd.js index 99265b8c00e..18173e97fee 100644 --- a/test/form/samples/external-namespace-reexport/_expected/umd.js +++ b/test/form/samples/external-namespace-reexport/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('highcharts')) : typeof define === 'function' && define.amd ? define(['exports', 'highcharts'], factory) : - factory(global.myBundle = {},global.highcharts); -}(typeof self !== 'undefined' ? self : this, function (exports,highcharts) { 'use strict'; + (global = global || self, factory(global.myBundle = {}, global.highcharts)); +}(this, function (exports,highcharts) { 'use strict'; exports.Highcharts = highcharts; diff --git a/test/form/samples/freeze/_expected/umd.js b/test/form/samples/freeze/_expected/umd.js index 79f9a42267a..bb1168a5a08 100644 --- a/test/form/samples/freeze/_expected/umd.js +++ b/test/form/samples/freeze/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.myBundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.myBundle = {})); +}(this, function (exports) { 'use strict'; const foo = 1; const bar = 2; diff --git a/test/form/samples/function-mutation/_expected/umd.js b/test/form/samples/function-mutation/_expected/umd.js index 2568bcc60c5..3a05544f922 100644 --- a/test/form/samples/function-mutation/_expected/umd.js +++ b/test/form/samples/function-mutation/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.bundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.bundle = {})); +}(this, function (exports) { 'use strict'; function foo () { console.log( 'foo' ); diff --git a/test/form/samples/import-external-namespace-and-default/_expected/umd.js b/test/form/samples/import-external-namespace-and-default/_expected/umd.js index 85be823d932..3e8f5fe9521 100644 --- a/test/form/samples/import-external-namespace-and-default/_expected/umd.js +++ b/test/form/samples/import-external-namespace-and-default/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('foo')) : typeof define === 'function' && define.amd ? define(['foo'], factory) : - factory(global.foo); -}(function (foo) { 'use strict'; + (global = global || self, factory(global.foo)); +}(this, function (foo) { 'use strict'; var foo__default = 'default' in foo ? foo['default'] : foo; diff --git a/test/form/samples/import-namespace/_expected/umd.js b/test/form/samples/import-namespace/_expected/umd.js index 568625e07eb..be53d03fa08 100644 --- a/test/form/samples/import-namespace/_expected/umd.js +++ b/test/form/samples/import-namespace/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('foo'), require('bar')) : typeof define === 'function' && define.amd ? define(['foo', 'bar'], factory) : - factory(global.foo,global.bar); -}(function (foo,bar) { 'use strict'; + (global = global || self, factory(global.foo, global.bar)); +}(this, function (foo,bar) { 'use strict'; foo.x(); console.log(bar); diff --git a/test/form/samples/import-specifier-deshadowing/_expected/umd.js b/test/form/samples/import-specifier-deshadowing/_expected/umd.js index f7d2c2fddef..92b492d29d3 100644 --- a/test/form/samples/import-specifier-deshadowing/_expected/umd.js +++ b/test/form/samples/import-specifier-deshadowing/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('react-sticky')) : typeof define === 'function' && define.amd ? define(['react-sticky'], factory) : - global.Sticky = factory(global.reactSticky); -}(typeof self !== 'undefined' ? self : this, function (reactSticky) { 'use strict'; + (global = global || self, global.Sticky = factory(global.reactSticky)); +}(this, function (reactSticky) { 'use strict'; var Sticky = function () { function Sticky() {} diff --git a/test/form/samples/indent-false/_expected/umd.js b/test/form/samples/indent-false/_expected/umd.js index c564f5c006f..cf9a9f633cc 100644 --- a/test/form/samples/indent-false/_expected/umd.js +++ b/test/form/samples/indent-false/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : -global.foo = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; +(global = global || self, global.foo = factory()); +}(this, function () { 'use strict'; function foo () { console.log( 'not indented' ); diff --git a/test/form/samples/indent-spaces/_expected/umd.js b/test/form/samples/indent-spaces/_expected/umd.js index ea02460b08e..dfcb5f1c84a 100644 --- a/test/form/samples/indent-spaces/_expected/umd.js +++ b/test/form/samples/indent-spaces/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.foo = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.foo = factory()); +}(this, function () { 'use strict'; function foo () { console.log( 'indented with tabs' ); diff --git a/test/form/samples/indent-true-spaces/_expected/umd.js b/test/form/samples/indent-true-spaces/_expected/umd.js index 61c18bbbeaf..2e092911179 100644 --- a/test/form/samples/indent-true-spaces/_expected/umd.js +++ b/test/form/samples/indent-true-spaces/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.foo = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.foo = factory()); +}(this, function () { 'use strict'; function foo () { console.log( 'indented with spaces' ); diff --git a/test/form/samples/indent-true/_expected/umd.js b/test/form/samples/indent-true/_expected/umd.js index 6c5faf54c30..7575694b25c 100644 --- a/test/form/samples/indent-true/_expected/umd.js +++ b/test/form/samples/indent-true/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.foo = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.foo = factory()); +}(this, function () { 'use strict'; function foo () { console.log( 'indented with tabs' ); diff --git a/test/form/samples/interop-false-reexport/_expected/umd.js b/test/form/samples/interop-false-reexport/_expected/umd.js index efcc53aacf1..4b3cac8c489 100644 --- a/test/form/samples/interop-false-reexport/_expected/umd.js +++ b/test/form/samples/interop-false-reexport/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : - factory(global.foo = {},global.external); -}(typeof self !== 'undefined' ? self : this, function (exports,external) { 'use strict'; + (global = global || self, factory(global.foo = {}, global.external)); +}(this, function (exports,external) { 'use strict'; exports.q = external.p; exports.p = external.default; diff --git a/test/form/samples/interop-false/_expected/umd.js b/test/form/samples/interop-false/_expected/umd.js index 14f9a630abb..c43c117f1c8 100644 --- a/test/form/samples/interop-false/_expected/umd.js +++ b/test/form/samples/interop-false/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('core/view')) : typeof define === 'function' && define.amd ? define(['core/view'], factory) : - global.foo = factory(global.View); -}(typeof self !== 'undefined' ? self : this, function (View) { 'use strict'; + (global = global || self, global.foo = factory(global.View)); +}(this, function (View) { 'use strict'; var main = View.extend({}); diff --git a/test/form/samples/intro-and-outro/_expected/umd.js b/test/form/samples/intro-and-outro/_expected/umd.js index 020f98301c3..fe822c8d141 100644 --- a/test/form/samples/intro-and-outro/_expected/umd.js +++ b/test/form/samples/intro-and-outro/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('external')) : typeof define === 'function' && define.amd ? define(['external'], factory) : - global.foo = factory(global.a); -}(typeof self !== 'undefined' ? self : this, function (a) { 'use strict'; + (global = global || self, global.foo = factory(global.a)); +}(this, function (a) { 'use strict'; /* this is an intro */ diff --git a/test/form/samples/json-parse-is-not-pure/_expected/umd.js b/test/form/samples/json-parse-is-not-pure/_expected/umd.js index 57a8a3f5324..66480492683 100644 --- a/test/form/samples/json-parse-is-not-pure/_expected/umd.js +++ b/test/form/samples/json-parse-is-not-pure/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; var main = (input) => { try { diff --git a/test/form/samples/json-stringify-is-not-pure/_expected/umd.js b/test/form/samples/json-stringify-is-not-pure/_expected/umd.js index ff2c48c5b2a..9a32762ecf9 100644 --- a/test/form/samples/json-stringify-is-not-pure/_expected/umd.js +++ b/test/form/samples/json-stringify-is-not-pure/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; var main = (input) => { try { diff --git a/test/form/samples/mjs/_expected/umd.js b/test/form/samples/mjs/_expected/umd.js index da70546bfe0..d496c91ac4e 100644 --- a/test/form/samples/mjs/_expected/umd.js +++ b/test/form/samples/mjs/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.myBundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.myBundle = {})); +}(this, function (exports) { 'use strict'; var dep = 'js'; diff --git a/test/form/samples/module-name-scoped-package/_expected/umd.js b/test/form/samples/module-name-scoped-package/_expected/umd.js index 55824515283..d0318a43b47 100644 --- a/test/form/samples/module-name-scoped-package/_expected/umd.js +++ b/test/form/samples/module-name-scoped-package/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global['@scoped/npm-package'] = global['@scoped/npm-package'] || {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global['@scoped/npm-package'] = global['@scoped/npm-package'] || {})); +}(this, function (exports) { 'use strict'; let foo = 'foo'; diff --git a/test/form/samples/module-name-wat/_expected/umd.js b/test/form/samples/module-name-wat/_expected/umd.js index 83d1765b102..101413d1d12 100644 --- a/test/form/samples/module-name-wat/_expected/umd.js +++ b/test/form/samples/module-name-wat/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.foo = global.foo || {}, global.foo['@scoped/npm-package'] = global.foo['@scoped/npm-package'] || {}, global.foo['@scoped/npm-package'].bar = global.foo['@scoped/npm-package'].bar || {}, global.foo['@scoped/npm-package'].bar['why-would-you-do-this'] = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory((global.foo = global.foo || {}, global.foo['@scoped/npm-package'] = global.foo['@scoped/npm-package'] || {}, global.foo['@scoped/npm-package'].bar = global.foo['@scoped/npm-package'].bar || {}, global.foo['@scoped/npm-package'].bar['why-would-you-do-this'] = {}))); +}(this, function (exports) { 'use strict'; let foo = 'foo'; diff --git a/test/form/samples/module-name-with-dashes/_expected/umd.js b/test/form/samples/module-name-with-dashes/_expected/umd.js index eeaba12484c..50fa37ef44f 100644 --- a/test/form/samples/module-name-with-dashes/_expected/umd.js +++ b/test/form/samples/module-name-with-dashes/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global['module-name-with-dashes'] = global['module-name-with-dashes'] || {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global['module-name-with-dashes'] = global['module-name-with-dashes'] || {})); +}(this, function (exports) { 'use strict'; let foo = 'foo'; diff --git a/test/form/samples/multiple-exports/_expected/umd.js b/test/form/samples/multiple-exports/_expected/umd.js index 862d7fbbc3a..de5db1b2251 100644 --- a/test/form/samples/multiple-exports/_expected/umd.js +++ b/test/form/samples/multiple-exports/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.myBundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.myBundle = {})); +}(this, function (exports) { 'use strict'; var foo = 1; var bar = 2; diff --git a/test/form/samples/mutate-logical-expression/_expected/umd.js b/test/form/samples/mutate-logical-expression/_expected/umd.js index 8834b79b8a9..71af856b00e 100644 --- a/test/form/samples/mutate-logical-expression/_expected/umd.js +++ b/test/form/samples/mutate-logical-expression/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.bundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.bundle = {})); +}(this, function (exports) { 'use strict'; var aExp = {}; var logicalAExp = aExp || {}; diff --git a/test/form/samples/namespace-import-reexport/_expected/umd.js b/test/form/samples/namespace-import-reexport/_expected/umd.js index 6391f9cafba..5ea4f3cf255 100644 --- a/test/form/samples/namespace-import-reexport/_expected/umd.js +++ b/test/form/samples/namespace-import-reexport/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external-package')) : typeof define === 'function' && define.amd ? define(['exports', 'external-package'], factory) : - factory(global.iife = {},global.externalPackage); -}(typeof self !== 'undefined' ? self : this, function (exports,externalPackage) { 'use strict'; + (global = global || self, factory(global.iife = {}, global.externalPackage)); +}(this, function (exports,externalPackage) { 'use strict'; exports.ext = externalPackage; diff --git a/test/form/samples/namespace-self-import/_expected/umd.js b/test/form/samples/namespace-self-import/_expected/umd.js index 73992752527..8c689ceb032 100644 --- a/test/form/samples/namespace-self-import/_expected/umd.js +++ b/test/form/samples/namespace-self-import/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.iife = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.iife = {})); +}(this, function (exports) { 'use strict'; var self = /*#__PURE__*/Object.freeze({ get p () { return p$$1; } diff --git a/test/form/samples/namespace-tostringtag/_expected/umd.js b/test/form/samples/namespace-tostringtag/_expected/umd.js index 7866d6f9341..770a07c5e35 100644 --- a/test/form/samples/namespace-tostringtag/_expected/umd.js +++ b/test/form/samples/namespace-tostringtag/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.iife = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.iife = {})); +}(this, function (exports) { 'use strict'; var self = { get p () { return p$$1; } diff --git a/test/form/samples/namespaced-default-exports/_expected/umd.js b/test/form/samples/namespaced-default-exports/_expected/umd.js index 7ae2d849d5e..9cb1a070b7e 100644 --- a/test/form/samples/namespaced-default-exports/_expected/umd.js +++ b/test/form/samples/namespaced-default-exports/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.foo = global.foo || {}, global.foo.bar = global.foo.bar || {}, global.foo.bar.baz = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, (global.foo = global.foo || {}, global.foo.bar = global.foo.bar || {}, global.foo.bar.baz = factory())); +}(this, function () { 'use strict'; var main = 42; diff --git a/test/form/samples/namespaced-named-exports/_expected/umd.js b/test/form/samples/namespaced-named-exports/_expected/umd.js index 79785ba236f..3e35c2e5f5b 100644 --- a/test/form/samples/namespaced-named-exports/_expected/umd.js +++ b/test/form/samples/namespaced-named-exports/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.foo = global.foo || {}, global.foo.bar = global.foo.bar || {}, global.foo.bar.baz = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory((global.foo = global.foo || {}, global.foo.bar = global.foo.bar || {}, global.foo.bar.baz = {}))); +}(this, function (exports) { 'use strict'; var answer = 42; diff --git a/test/form/samples/no-treeshake/_expected/umd.js b/test/form/samples/no-treeshake/_expected/umd.js index 5ddad60ade1..611d41929bb 100644 --- a/test/form/samples/no-treeshake/_expected/umd.js +++ b/test/form/samples/no-treeshake/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : - factory(global.stirred = {},global.external); -}(typeof self !== 'undefined' ? self : this, function (exports,external) { 'use strict'; + (global = global || self, factory(global.stirred = {}, global.external)); +}(this, function (exports,external) { 'use strict'; var foo = 13; diff --git a/test/form/samples/output-named-library/_expected/umd.js b/test/form/samples/output-named-library/_expected/umd.js index 16417cbaf4d..a928211f03a 100644 --- a/test/form/samples/output-named-library/_expected/umd.js +++ b/test/form/samples/output-named-library/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.libraryName = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.libraryName = {})); +}(this, function (exports) { 'use strict'; const valueOnLib = 42; diff --git a/test/form/samples/paths-function/_expected/umd.js b/test/form/samples/paths-function/_expected/umd.js index 20c4ea55510..e97aed45982 100644 --- a/test/form/samples/paths-function/_expected/umd.js +++ b/test/form/samples/paths-function/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('https://unpkg.com/foo')) : typeof define === 'function' && define.amd ? define(['https://unpkg.com/foo'], factory) : - factory(global.foo); -}(function (foo) { 'use strict'; + (global = global || self, factory(global.foo)); +}(this, function (foo) { 'use strict'; foo = foo && foo.hasOwnProperty('default') ? foo['default'] : foo; diff --git a/test/form/samples/paths-relative/_expected/umd.js b/test/form/samples/paths-relative/_expected/umd.js index f5c03f855a4..2c8c32fcc76 100644 --- a/test/form/samples/paths-relative/_expected/umd.js +++ b/test/form/samples/paths-relative/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../foo')) : typeof define === 'function' && define.amd ? define(['../foo'], factory) : - factory(global.foo); -}(function (foo) { 'use strict'; + (global = global || self, factory(global.foo)); +}(this, function (foo) { 'use strict'; foo = foo && foo.hasOwnProperty('default') ? foo['default'] : foo; diff --git a/test/form/samples/paths/_expected/umd.js b/test/form/samples/paths/_expected/umd.js index 20c4ea55510..e97aed45982 100644 --- a/test/form/samples/paths/_expected/umd.js +++ b/test/form/samples/paths/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('https://unpkg.com/foo')) : typeof define === 'function' && define.amd ? define(['https://unpkg.com/foo'], factory) : - factory(global.foo); -}(function (foo) { 'use strict'; + (global = global || self, factory(global.foo)); +}(this, function (foo) { 'use strict'; foo = foo && foo.hasOwnProperty('default') ? foo['default'] : foo; diff --git a/test/form/samples/pattern-assignments/_expected/umd.js b/test/form/samples/pattern-assignments/_expected/umd.js index 7667b225ad4..941d60fdb92 100644 --- a/test/form/samples/pattern-assignments/_expected/umd.js +++ b/test/form/samples/pattern-assignments/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.bundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.bundle = {})); +}(this, function (exports) { 'use strict'; var effect = () => console.log( 'effect' ); diff --git a/test/form/samples/prefer-const/_expected/umd.js b/test/form/samples/prefer-const/_expected/umd.js index 12bbd8f6e38..121c9f6c245 100644 --- a/test/form/samples/prefer-const/_expected/umd.js +++ b/test/form/samples/prefer-const/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('other')) : typeof define === 'function' && define.amd ? define(['other'], factory) : - global.myBundle = factory(global.other); -}(typeof self !== 'undefined' ? self : this, function (other) { 'use strict'; + (global = global || self, global.myBundle = factory(global.other)); +}(this, function (other) { 'use strict'; const a = 1; const b = 2; diff --git a/test/form/samples/preserves-comments-after-imports/_expected/umd.js b/test/form/samples/preserves-comments-after-imports/_expected/umd.js index 120edb987e9..f30302b1e28 100644 --- a/test/form/samples/preserves-comments-after-imports/_expected/umd.js +++ b/test/form/samples/preserves-comments-after-imports/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.myBundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.myBundle = {})); +}(this, function (exports) { 'use strict'; /** A comment for a number */ var number = 5; diff --git a/test/form/samples/promises/_expected/umd.js b/test/form/samples/promises/_expected/umd.js index 5dd631f3a82..8722948db3e 100644 --- a/test/form/samples/promises/_expected/umd.js +++ b/test/form/samples/promises/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.bundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.bundle = {})); +}(this, function (exports) { 'use strict'; const p1 = new Promise( () => { console.log( 'fire & forget' ); diff --git a/test/form/samples/prune-pure-unused-import-array/_expected/umd.js b/test/form/samples/prune-pure-unused-import-array/_expected/umd.js index b8ded053719..c7eb6921f53 100644 --- a/test/form/samples/prune-pure-unused-import-array/_expected/umd.js +++ b/test/form/samples/prune-pure-unused-import-array/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('other')) : typeof define === 'function' && define.amd ? define(['other'], factory) : - factory(global.other); -}(function (other) { 'use strict'; + (global = global || self, factory(global.other)); +}(this, function (other) { 'use strict'; diff --git a/test/form/samples/prune-pure-unused-import-function/_expected/umd.js b/test/form/samples/prune-pure-unused-import-function/_expected/umd.js index b8ded053719..c7eb6921f53 100644 --- a/test/form/samples/prune-pure-unused-import-function/_expected/umd.js +++ b/test/form/samples/prune-pure-unused-import-function/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('other')) : typeof define === 'function' && define.amd ? define(['other'], factory) : - factory(global.other); -}(function (other) { 'use strict'; + (global = global || self, factory(global.other)); +}(this, function (other) { 'use strict'; diff --git a/test/form/samples/re-export-aliasing/_expected/umd.js b/test/form/samples/re-export-aliasing/_expected/umd.js index 5077fe401b9..c7cbb4dfac8 100644 --- a/test/form/samples/re-export-aliasing/_expected/umd.js +++ b/test/form/samples/re-export-aliasing/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d')) : typeof define === 'function' && define.amd ? define(['exports', 'd'], factory) : - factory(global.reexportsAliasingExternal = {},global.d); -}(typeof self !== 'undefined' ? self : this, function (exports,d) { 'use strict'; + (global = global || self, factory(global.reexportsAliasingExternal = {}, global.d)); +}(this, function (exports,d) { 'use strict'; exports.b = d.d; diff --git a/test/form/samples/re-export-default-external/_expected/umd.js b/test/form/samples/re-export-default-external/_expected/umd.js index f9aba91c943..d8a666e8265 100644 --- a/test/form/samples/re-export-default-external/_expected/umd.js +++ b/test/form/samples/re-export-default-external/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('external')) : typeof define === 'function' && define.amd ? define(['external'], factory) : - global.reexportsDefaultExternal = factory(global.external); -}(typeof self !== 'undefined' ? self : this, function (external) { 'use strict'; + (global = global || self, global.reexportsDefaultExternal = factory(global.external)); +}(this, function (external) { 'use strict'; return external.objAlias; diff --git a/test/form/samples/reassigned-exported-functions-and-classes/_expected/umd.js b/test/form/samples/reassigned-exported-functions-and-classes/_expected/umd.js index 2fe71ce4d45..fb46f179e23 100644 --- a/test/form/samples/reassigned-exported-functions-and-classes/_expected/umd.js +++ b/test/form/samples/reassigned-exported-functions-and-classes/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.bundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.bundle = {})); +}(this, function (exports) { 'use strict'; function foo () {} foo = 1; diff --git a/test/form/samples/reexports-from-external/_expected/umd.js b/test/form/samples/reexports-from-external/_expected/umd.js index 6632c2c0dbd..c8b9737cb64 100644 --- a/test/form/samples/reexports-from-external/_expected/umd.js +++ b/test/form/samples/reexports-from-external/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : - factory(global.myBundle = {},global.external); -}(typeof self !== 'undefined' ? self : this, function (exports,external) { 'use strict'; + (global = global || self, factory(global.myBundle = {}, global.external)); +}(this, function (exports,external) { 'use strict'; Object.keys(external).forEach(function (key) { exports[key] = external[key]; }); diff --git a/test/form/samples/reexports-name-from-external/_expected/umd.js b/test/form/samples/reexports-name-from-external/_expected/umd.js index 429d6fc7336..a133feff526 100644 --- a/test/form/samples/reexports-name-from-external/_expected/umd.js +++ b/test/form/samples/reexports-name-from-external/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : - factory(global.myBundle = {},global.external); -}(typeof self !== 'undefined' ? self : this, function (exports,external) { 'use strict'; + (global = global || self, factory(global.myBundle = {}, global.external)); +}(this, function (exports,external) { 'use strict'; exports.foo = external.foo; diff --git a/test/form/samples/relative-external-with-global/_expected/umd.js b/test/form/samples/relative-external-with-global/_expected/umd.js index a0b7b8ab533..32920cf056a 100644 --- a/test/form/samples/relative-external-with-global/_expected/umd.js +++ b/test/form/samples/relative-external-with-global/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('./lib/throttle.js')) : typeof define === 'function' && define.amd ? define(['./lib/throttle.js'], factory) : - factory(global.Lib.throttle); -}(function (throttle) { 'use strict'; + (global = global || self, factory(global.Lib.throttle)); +}(this, function (throttle) { 'use strict'; throttle = throttle && throttle.hasOwnProperty('default') ? throttle['default'] : throttle; diff --git a/test/form/samples/render-declaration-semicolons/_expected/umd.js b/test/form/samples/render-declaration-semicolons/_expected/umd.js index 3ab816fbc0e..07f7e7242ea 100644 --- a/test/form/samples/render-declaration-semicolons/_expected/umd.js +++ b/test/form/samples/render-declaration-semicolons/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.bundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.bundle = {})); +}(this, function (exports) { 'use strict'; var a, b; console.log(a, b); diff --git a/test/form/samples/render-named-export-declarations/_expected/umd.js b/test/form/samples/render-named-export-declarations/_expected/umd.js index 923cc86c20a..224d4bd827e 100644 --- a/test/form/samples/render-named-export-declarations/_expected/umd.js +++ b/test/form/samples/render-named-export-declarations/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.bundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.bundle = {})); +}(this, function (exports) { 'use strict'; var aFoo; exports.aBar = 2; diff --git a/test/form/samples/resolve-external-dynamic-imports/_expected/umd.js b/test/form/samples/resolve-external-dynamic-imports/_expected/umd.js index f1eb2833b98..3672b0247fd 100644 --- a/test/form/samples/resolve-external-dynamic-imports/_expected/umd.js +++ b/test/form/samples/resolve-external-dynamic-imports/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : - factory(global.bundle = {},global.myExternal); -}(typeof self !== 'undefined' ? self : this, function (exports,myExternal) { 'use strict'; + (global = global || self, factory(global.bundle = {}, global.myExternal)); +}(this, function (exports,myExternal) { 'use strict'; myExternal = myExternal && myExternal.hasOwnProperty('default') ? myExternal['default'] : myExternal; diff --git a/test/form/samples/side-effect-b/_expected/umd.js b/test/form/samples/side-effect-b/_expected/umd.js index 5d988c0df7c..2b06c87bf3d 100644 --- a/test/form/samples/side-effect-b/_expected/umd.js +++ b/test/form/samples/side-effect-b/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; var main = 42; diff --git a/test/form/samples/side-effect-c/_expected/umd.js b/test/form/samples/side-effect-c/_expected/umd.js index 5d988c0df7c..2b06c87bf3d 100644 --- a/test/form/samples/side-effect-c/_expected/umd.js +++ b/test/form/samples/side-effect-c/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; var main = 42; diff --git a/test/form/samples/side-effect-d/_expected/umd.js b/test/form/samples/side-effect-d/_expected/umd.js index 5d988c0df7c..2b06c87bf3d 100644 --- a/test/form/samples/side-effect-d/_expected/umd.js +++ b/test/form/samples/side-effect-d/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; var main = 42; diff --git a/test/form/samples/side-effect-e/_expected/umd.js b/test/form/samples/side-effect-e/_expected/umd.js index 552ddc2ba07..cbb7f44ce73 100644 --- a/test/form/samples/side-effect-e/_expected/umd.js +++ b/test/form/samples/side-effect-e/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; function foo () { var Object = { diff --git a/test/form/samples/side-effect-f/_expected/umd.js b/test/form/samples/side-effect-f/_expected/umd.js index 5d988c0df7c..2b06c87bf3d 100644 --- a/test/form/samples/side-effect-f/_expected/umd.js +++ b/test/form/samples/side-effect-f/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; var main = 42; diff --git a/test/form/samples/side-effect-g/_expected/umd.js b/test/form/samples/side-effect-g/_expected/umd.js index 5d988c0df7c..2b06c87bf3d 100644 --- a/test/form/samples/side-effect-g/_expected/umd.js +++ b/test/form/samples/side-effect-g/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; var main = 42; diff --git a/test/form/samples/side-effect-h/_expected/umd.js b/test/form/samples/side-effect-h/_expected/umd.js index 4e1ccef34af..29151628db7 100644 --- a/test/form/samples/side-effect-h/_expected/umd.js +++ b/test/form/samples/side-effect-h/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; function foo ( ok ) { if ( !ok ) { diff --git a/test/form/samples/side-effect-i/_expected/umd.js b/test/form/samples/side-effect-i/_expected/umd.js index 1c56ff1d95a..101b6dae5ea 100644 --- a/test/form/samples/side-effect-i/_expected/umd.js +++ b/test/form/samples/side-effect-i/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; if ( !ok ) { throw new Error( 'this will be included' ); diff --git a/test/form/samples/side-effect-j/_expected/umd.js b/test/form/samples/side-effect-j/_expected/umd.js index 580d41c9d38..b8615138438 100644 --- a/test/form/samples/side-effect-j/_expected/umd.js +++ b/test/form/samples/side-effect-j/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; var augment; augment = x => x.augmented = true; diff --git a/test/form/samples/side-effect-k/_expected/umd.js b/test/form/samples/side-effect-k/_expected/umd.js index 14d66c1b014..cf81267ae5d 100644 --- a/test/form/samples/side-effect-k/_expected/umd.js +++ b/test/form/samples/side-effect-k/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - global.myBundle = factory(); -}(typeof self !== 'undefined' ? self : this, function () { 'use strict'; + (global = global || self, global.myBundle = factory()); +}(this, function () { 'use strict'; function augment ( x ) { var prop, source; diff --git a/test/form/samples/side-effects-delete/_expected/umd.js b/test/form/samples/side-effects-delete/_expected/umd.js index 0a22049cbff..fef4b137fab 100644 --- a/test/form/samples/side-effects-delete/_expected/umd.js +++ b/test/form/samples/side-effects-delete/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.myBundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.myBundle = {})); +}(this, function (exports) { 'use strict'; var x = {foo: 'bar'}; delete x.foo; diff --git a/test/form/samples/side-effects-in-template-literals/_expected/umd.js b/test/form/samples/side-effects-in-template-literals/_expected/umd.js index 8cee35d06f4..c210dbbd554 100644 --- a/test/form/samples/side-effects-in-template-literals/_expected/umd.js +++ b/test/form/samples/side-effects-in-template-literals/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.myBundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.myBundle = {})); +}(this, function (exports) { 'use strict'; exports.x = 0; diff --git a/test/form/samples/side-effects-object-literal-mutation/_expected/umd.js b/test/form/samples/side-effects-object-literal-mutation/_expected/umd.js index 94e977da6a6..d5a59658254 100644 --- a/test/form/samples/side-effects-object-literal-mutation/_expected/umd.js +++ b/test/form/samples/side-effects-object-literal-mutation/_expected/umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - factory(global.bundle = {}); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + (global = global || self, factory(global.bundle = {})); +}(this, function (exports) { 'use strict'; const retained1 = { x: {} }; retained1.y = 1; diff --git a/test/form/samples/umd-noconflict-extend/_expected/umd.js b/test/form/samples/umd-noconflict-extend/_expected/umd.js index f27878ac8c6..cee2577ab63 100644 --- a/test/form/samples/umd-noconflict-extend/_expected/umd.js +++ b/test/form/samples/umd-noconflict-extend/_expected/umd.js @@ -1,14 +1,14 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - (function() { + (global = global || self, (function () { var current = global.FooBar; var exports = global.FooBar = global.FooBar || {}; factory(exports); global.FooBar = exports; - exports.noConflict = function() { global.FooBar = current; return exports; }; - })(); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + exports.noConflict = function () { global.FooBar = current; return exports; }; + }())); +}(this, function (exports) { 'use strict'; function doThings() { console.log( 'doing things...' ); diff --git a/test/form/samples/umd-noconflict-namespaced/_expected/umd.js b/test/form/samples/umd-noconflict-namespaced/_expected/umd.js index 8881e96de77..28323fba711 100644 --- a/test/form/samples/umd-noconflict-namespaced/_expected/umd.js +++ b/test/form/samples/umd-noconflict-namespaced/_expected/umd.js @@ -1,14 +1,14 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - (function() { + (global = global || self, (function () { var current = global.my && global.my.name && global.my.name.spaced && global.my.name.spaced.module; - var exports = global.my = global.my || {}, global.my.name = global.my.name || {}, global.my.name.spaced = global.my.name.spaced || {}, global.my.name.spaced.module = {}; + var exports = (global.my = global.my || {}, global.my.name = global.my.name || {}, global.my.name.spaced = global.my.name.spaced || {}, global.my.name.spaced.module = {}); factory(exports); global.my.name.spaced.module = exports; - exports.noConflict = function() { global.my.name.spaced.module = current; return exports; }; - })(); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + exports.noConflict = function () { global.my.name.spaced.module = current; return exports; }; + }())); +}(this, function (exports) { 'use strict'; function doThings() { console.log( 'doing things...' ); diff --git a/test/form/samples/umd-noconflict-no-exports/_expected/umd.js b/test/form/samples/umd-noconflict-no-exports/_expected/umd.js index f4fcd62f66e..8f15a0d5933 100644 --- a/test/form/samples/umd-noconflict-no-exports/_expected/umd.js +++ b/test/form/samples/umd-noconflict-no-exports/_expected/umd.js @@ -1,14 +1,14 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - (function() { + (global = global || self, (function () { var current = global.FooBar; var exports = global.FooBar = {}; factory(exports); global.FooBar = exports; - exports.noConflict = function() { global.FooBar = current; return exports; }; - })(); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + exports.noConflict = function () { global.FooBar = current; return exports; }; + }())); +}(this, function (exports) { 'use strict'; console.log('no exports'); diff --git a/test/form/samples/umd-noconflict/_expected/umd.js b/test/form/samples/umd-noconflict/_expected/umd.js index c95170f12cc..4287fad786f 100644 --- a/test/form/samples/umd-noconflict/_expected/umd.js +++ b/test/form/samples/umd-noconflict/_expected/umd.js @@ -1,14 +1,14 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - (function() { + (global = global || self, (function () { var current = global.FooBar; var exports = global.FooBar = {}; factory(exports); global.FooBar = exports; - exports.noConflict = function() { global.FooBar = current; return exports; }; - })(); -}(typeof self !== 'undefined' ? self : this, function (exports) { 'use strict'; + exports.noConflict = function () { global.FooBar = current; return exports; }; + }())); +}(this, function (exports) { 'use strict'; function doThings() { console.log( 'doing things...' ); diff --git a/test/form/samples/unused-import/_expected/umd.js b/test/form/samples/unused-import/_expected/umd.js index 1d285d4b77f..e4a85638e85 100644 --- a/test/form/samples/unused-import/_expected/umd.js +++ b/test/form/samples/unused-import/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('external')) : typeof define === 'function' && define.amd ? define(['external'], factory) : - factory(global.external); -}(function (external) { 'use strict'; + (global = global || self, factory(global.external)); +}(this, function (external) { 'use strict'; diff --git a/test/form/samples/url-external/_expected/umd.js b/test/form/samples/url-external/_expected/umd.js index d4a2cbbd06f..ee0a76d4bd9 100644 --- a/test/form/samples/url-external/_expected/umd.js +++ b/test/form/samples/url-external/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('https://external.com/external.js')) : typeof define === 'function' && define.amd ? define(['https://external.com/external.js'], factory) : - factory(global.external); -}(function (external) { 'use strict'; + (global = global || self, factory(global.external)); +}(this, function (external) { 'use strict'; external = external && external.hasOwnProperty('default') ? external['default'] : external; diff --git a/test/form/samples/use-global-map-for-export-name/_expected/umd.js b/test/form/samples/use-global-map-for-export-name/_expected/umd.js index 8bf1eb36806..e45bbf1c3f5 100644 --- a/test/form/samples/use-global-map-for-export-name/_expected/umd.js +++ b/test/form/samples/use-global-map-for-export-name/_expected/umd.js @@ -1,7 +1,8 @@ -(function (factory) { +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('leaflet')) : typeof define === 'function' && define.amd ? define(['leaflet'], factory) : - factory(global.L); -}(function (L) { 'use strict'; + (global = global || self, factory(global.L)); +}(this, function (L) { 'use strict'; L = L && L.hasOwnProperty('default') ? L['default'] : L; From 4d3e41c9463a29184bed0705da3f1ad614fa44b6 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Wed, 19 Dec 2018 09:18:44 +0100 Subject: [PATCH 2/4] Add comprehensive UMD wrapper tests and fix more issues --- src/finalisers/shared/setupNamespace.ts | 9 +- src/finalisers/umd.ts | 23 ++- test/cli/samples/no-conflict/_expected.js | 3 +- .../conflicting-imports/_expected/umd.js | 2 +- .../dedupes-external-imports/_expected/umd.js | 2 +- .../export-all-multiple/_expected/umd.js | 2 +- .../export-default-import/_expected/umd.js | 2 +- .../external-deshadowing/_expected/umd.js | 2 +- .../_expected/umd.js | 2 +- .../external-export-tracing/_expected/umd.js | 2 +- .../samples/external-imports/_expected/umd.js | 2 +- .../_expected/umd.js | 2 +- .../samples/import-namespace/_expected/umd.js | 2 +- .../interop-false-reexport/_expected/umd.js | 2 +- .../_expected/umd.js | 2 +- .../samples/no-treeshake/_expected/umd.js | 2 +- .../re-export-aliasing/_expected/umd.js | 2 +- .../reexports-from-external/_expected/umd.js | 2 +- .../_expected/umd.js | 2 +- .../_expected/umd.js | 2 +- .../umd-noconflict-extend/_expected/umd.js | 1 - .../_expected/umd.js | 1 - .../_expected/umd.js | 1 - .../samples/umd-noconflict/_expected/umd.js | 1 - test/misc/index.js | 1 + test/misc/umd.js | 191 ++++++++++++++++++ 26 files changed, 233 insertions(+), 32 deletions(-) create mode 100644 test/misc/umd.js diff --git a/src/finalisers/shared/setupNamespace.ts b/src/finalisers/shared/setupNamespace.ts index 422478bd14f..ca8dfd2cca5 100644 --- a/src/finalisers/shared/setupNamespace.ts +++ b/src/finalisers/shared/setupNamespace.ts @@ -25,12 +25,13 @@ export default function setupNamespace( ); } -export const assignToDeepVariable = ( +export function assignToDeepVariable( deepName: string, root: string, globals: GlobalsOption, - compact: boolean -) => (assignment: string): string => { + compact: boolean, + assignment: string +): string { const _ = compact ? '' : ' '; const parts = deepName.split('.'); if (globals) { @@ -48,4 +49,4 @@ export const assignToDeepVariable = ( deepAssignment = `(${deepAssignment})`; } return deepAssignment; -}; +} diff --git a/src/finalisers/umd.ts b/src/finalisers/umd.ts index fb7d801a877..2eb3bd7d8dc 100644 --- a/src/finalisers/umd.ts +++ b/src/finalisers/umd.ts @@ -59,7 +59,11 @@ export default function umd( amdDeps.unshift(`'exports'`); cjsDeps.unshift(`exports`); globalDeps.unshift( - assignToDeepVariable(options.name, 'global', options.globals, options.compact)( + assignToDeepVariable( + options.name, + 'global', + options.globals, + options.compact, `${options.extend ? `${globalProp(options.name)}${_}||${_}` : ''}{}` ) ); @@ -83,7 +87,13 @@ export default function umd( let factory; if (!namedExportsMode && hasExports) { - factory = `var exports${_}=${_}factory(${globalDeps.join(`,${_}`)});`; + factory = `var exports${_}=${_}${assignToDeepVariable( + options.name, + 'global', + options.globals, + options.compact, + `factory(${globalDeps.join(`,${_}`)})` + )};`; } else if (namedExportsMode) { const module = globalDeps.shift(); factory = @@ -94,7 +104,6 @@ export default function umd( `(function${_}()${_}{${n}` + `${t}${t}var current${_}=${_}${safeAccess(options.name, options.compact)};${n}` + `${t}${t}${factory}${n}` + - `${t}${t}${globalProp(options.name)}${_}=${_}exports;${n}` + `${t}${t}exports.noConflict${_}=${_}function${_}()${_}{${_}` + `${globalProp(options.name)}${_}=${_}current;${_}return exports${ options.compact ? '' : '; ' @@ -103,7 +112,11 @@ export default function umd( } else { iifeExport = `factory(${globalDeps.join(`,${_}`)})`; if (!namedExportsMode && hasExports) { - iifeExport = assignToDeepVariable(options.name, 'global', options.globals, options.compact)( + iifeExport = assignToDeepVariable( + options.name, + 'global', + options.globals, + options.compact, iifeExport ); } @@ -125,7 +138,7 @@ export default function umd( cjsIntro + `${t}typeof ${define}${_}===${_}'function'${_}&&${_}${define}.amd${_}?${_}${define}(${amdParams}factory)${_}:${n}` + `${t}${iifeStart}${iifeExport}${iifeEnd};${n}` + - `}(${globalArg}function${_}(${factoryArgs})${_}{${useStrict}${n}`; + `}(${globalArg}function${_}(${factoryArgs.join(', ')})${_}{${useStrict}${n}`; const wrapperOutro = n + n + '}));'; diff --git a/test/cli/samples/no-conflict/_expected.js b/test/cli/samples/no-conflict/_expected.js index 2cb728fc844..29daa8a420e 100644 --- a/test/cli/samples/no-conflict/_expected.js +++ b/test/cli/samples/no-conflict/_expected.js @@ -3,8 +3,7 @@ typeof define === 'function' && define.amd ? define(factory) : (global = global || self, (function () { var current = global.conflictyName; - var exports = factory(); - global.conflictyName = exports; + var exports = global.conflictyName = factory(); exports.noConflict = function () { global.conflictyName = current; return exports; }; }())); }(this, function () { 'use strict'; diff --git a/test/form/samples/conflicting-imports/_expected/umd.js b/test/form/samples/conflicting-imports/_expected/umd.js index 0f07fe910e4..d597b323a13 100644 --- a/test/form/samples/conflicting-imports/_expected/umd.js +++ b/test/form/samples/conflicting-imports/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('foo'), require('bar')) : typeof define === 'function' && define.amd ? define(['foo', 'bar'], factory) : (global = global || self, factory(global.foo, global.bar)); -}(this, function (foo,bar) { 'use strict'; +}(this, function (foo, bar) { 'use strict'; console.log( bar.a ); diff --git a/test/form/samples/dedupes-external-imports/_expected/umd.js b/test/form/samples/dedupes-external-imports/_expected/umd.js index 87b5d8ba4d9..fb58239deec 100644 --- a/test/form/samples/dedupes-external-imports/_expected/umd.js +++ b/test/form/samples/dedupes-external-imports/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : (global = global || self, factory(global.myBundle = {}, global.external)); -}(this, function (exports,external) { 'use strict'; +}(this, function (exports, external) { 'use strict'; class Foo extends external.Component { constructor () { diff --git a/test/form/samples/export-all-multiple/_expected/umd.js b/test/form/samples/export-all-multiple/_expected/umd.js index b267d2611ce..0fff0ff0f20 100644 --- a/test/form/samples/export-all-multiple/_expected/umd.js +++ b/test/form/samples/export-all-multiple/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('foo'), require('bar'), require('baz')) : typeof define === 'function' && define.amd ? define(['exports', 'foo', 'bar', 'baz'], factory) : (global = global || self, factory(global.myBundle = {}, global.foo, global.bar, global.baz)); -}(this, function (exports,foo,bar,baz) { 'use strict'; +}(this, function (exports, foo, bar, baz) { 'use strict'; Object.keys(foo).forEach(function (key) { exports[key] = foo[key]; }); Object.keys(bar).forEach(function (key) { exports[key] = bar[key]; }); diff --git a/test/form/samples/export-default-import/_expected/umd.js b/test/form/samples/export-default-import/_expected/umd.js index 741b7647e02..bf36a9e833d 100644 --- a/test/form/samples/export-default-import/_expected/umd.js +++ b/test/form/samples/export-default-import/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('x')) : typeof define === 'function' && define.amd ? define(['exports', 'x'], factory) : (global = global || self, factory(global.myBundle = {}, global.x)); -}(this, function (exports,x) { 'use strict'; +}(this, function (exports, x) { 'use strict'; x = x && x.hasOwnProperty('default') ? x['default'] : x; diff --git a/test/form/samples/external-deshadowing/_expected/umd.js b/test/form/samples/external-deshadowing/_expected/umd.js index 84525771c97..8d2072edebb 100644 --- a/test/form/samples/external-deshadowing/_expected/umd.js +++ b/test/form/samples/external-deshadowing/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('a'), require('b')) : typeof define === 'function' && define.amd ? define(['exports', 'a', 'b'], factory) : (global = global || self, factory(global.myBundle = {}, global.a, global.Test)); -}(this, function (exports,a,Test) { 'use strict'; +}(this, function (exports, a, Test) { 'use strict'; Test = Test && Test.hasOwnProperty('default') ? Test['default'] : Test; diff --git a/test/form/samples/external-empty-import-no-global-b/_expected/umd.js b/test/form/samples/external-empty-import-no-global-b/_expected/umd.js index 8917845bf44..a5970d328b0 100644 --- a/test/form/samples/external-empty-import-no-global-b/_expected/umd.js +++ b/test/form/samples/external-empty-import-no-global-b/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('babel-polyfill'), require('other')) : typeof define === 'function' && define.amd ? define(['babel-polyfill', 'other'], factory) : (global = global || self, global.myBundle = factory(null, global.other)); -}(this, function (babelPolyfill,other) { 'use strict'; +}(this, function (babelPolyfill, other) { 'use strict'; other.x(); diff --git a/test/form/samples/external-export-tracing/_expected/umd.js b/test/form/samples/external-export-tracing/_expected/umd.js index 237e080d7ae..15f54936b5d 100644 --- a/test/form/samples/external-export-tracing/_expected/umd.js +++ b/test/form/samples/external-export-tracing/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : (global = global || self, factory(global.myBundle = {}, global.external)); -}(this, function (exports,external) { 'use strict'; +}(this, function (exports, external) { 'use strict'; exports.s = external.p; diff --git a/test/form/samples/external-imports/_expected/umd.js b/test/form/samples/external-imports/_expected/umd.js index 22a51867443..298d285426b 100644 --- a/test/form/samples/external-imports/_expected/umd.js +++ b/test/form/samples/external-imports/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('factory'), require('baz'), require('shipping-port'), require('alphabet')) : typeof define === 'function' && define.amd ? define(['factory', 'baz', 'shipping-port', 'alphabet'], factory) : (global = global || self, factory(global.factory, global.baz, global.containers, global.alphabet)); -}(this, function (factory,baz,containers,alphabet) { 'use strict'; +}(this, function (factory, baz, containers, alphabet) { 'use strict'; factory = factory && factory.hasOwnProperty('default') ? factory['default'] : factory; var alphabet__default = 'default' in alphabet ? alphabet['default'] : alphabet; diff --git a/test/form/samples/external-namespace-reexport/_expected/umd.js b/test/form/samples/external-namespace-reexport/_expected/umd.js index 18173e97fee..0ace47526b6 100644 --- a/test/form/samples/external-namespace-reexport/_expected/umd.js +++ b/test/form/samples/external-namespace-reexport/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('highcharts')) : typeof define === 'function' && define.amd ? define(['exports', 'highcharts'], factory) : (global = global || self, factory(global.myBundle = {}, global.highcharts)); -}(this, function (exports,highcharts) { 'use strict'; +}(this, function (exports, highcharts) { 'use strict'; exports.Highcharts = highcharts; diff --git a/test/form/samples/import-namespace/_expected/umd.js b/test/form/samples/import-namespace/_expected/umd.js index be53d03fa08..92b4875b7d6 100644 --- a/test/form/samples/import-namespace/_expected/umd.js +++ b/test/form/samples/import-namespace/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('foo'), require('bar')) : typeof define === 'function' && define.amd ? define(['foo', 'bar'], factory) : (global = global || self, factory(global.foo, global.bar)); -}(this, function (foo,bar) { 'use strict'; +}(this, function (foo, bar) { 'use strict'; foo.x(); console.log(bar); diff --git a/test/form/samples/interop-false-reexport/_expected/umd.js b/test/form/samples/interop-false-reexport/_expected/umd.js index 4b3cac8c489..b15968708e0 100644 --- a/test/form/samples/interop-false-reexport/_expected/umd.js +++ b/test/form/samples/interop-false-reexport/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : (global = global || self, factory(global.foo = {}, global.external)); -}(this, function (exports,external) { 'use strict'; +}(this, function (exports, external) { 'use strict'; exports.q = external.p; exports.p = external.default; diff --git a/test/form/samples/namespace-import-reexport/_expected/umd.js b/test/form/samples/namespace-import-reexport/_expected/umd.js index 5ea4f3cf255..5a56f7f8e17 100644 --- a/test/form/samples/namespace-import-reexport/_expected/umd.js +++ b/test/form/samples/namespace-import-reexport/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external-package')) : typeof define === 'function' && define.amd ? define(['exports', 'external-package'], factory) : (global = global || self, factory(global.iife = {}, global.externalPackage)); -}(this, function (exports,externalPackage) { 'use strict'; +}(this, function (exports, externalPackage) { 'use strict'; exports.ext = externalPackage; diff --git a/test/form/samples/no-treeshake/_expected/umd.js b/test/form/samples/no-treeshake/_expected/umd.js index 611d41929bb..79952d3b35c 100644 --- a/test/form/samples/no-treeshake/_expected/umd.js +++ b/test/form/samples/no-treeshake/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : (global = global || self, factory(global.stirred = {}, global.external)); -}(this, function (exports,external) { 'use strict'; +}(this, function (exports, external) { 'use strict'; var foo = 13; diff --git a/test/form/samples/re-export-aliasing/_expected/umd.js b/test/form/samples/re-export-aliasing/_expected/umd.js index c7cbb4dfac8..1bb32be30b4 100644 --- a/test/form/samples/re-export-aliasing/_expected/umd.js +++ b/test/form/samples/re-export-aliasing/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d')) : typeof define === 'function' && define.amd ? define(['exports', 'd'], factory) : (global = global || self, factory(global.reexportsAliasingExternal = {}, global.d)); -}(this, function (exports,d) { 'use strict'; +}(this, function (exports, d) { 'use strict'; exports.b = d.d; diff --git a/test/form/samples/reexports-from-external/_expected/umd.js b/test/form/samples/reexports-from-external/_expected/umd.js index c8b9737cb64..60eb7a0f7cb 100644 --- a/test/form/samples/reexports-from-external/_expected/umd.js +++ b/test/form/samples/reexports-from-external/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : (global = global || self, factory(global.myBundle = {}, global.external)); -}(this, function (exports,external) { 'use strict'; +}(this, function (exports, external) { 'use strict'; Object.keys(external).forEach(function (key) { exports[key] = external[key]; }); diff --git a/test/form/samples/reexports-name-from-external/_expected/umd.js b/test/form/samples/reexports-name-from-external/_expected/umd.js index a133feff526..083302c7fb7 100644 --- a/test/form/samples/reexports-name-from-external/_expected/umd.js +++ b/test/form/samples/reexports-name-from-external/_expected/umd.js @@ -2,7 +2,7 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : (global = global || self, factory(global.myBundle = {}, global.external)); -}(this, function (exports,external) { 'use strict'; +}(this, function (exports, external) { 'use strict'; exports.foo = external.foo; diff --git a/test/form/samples/resolve-external-dynamic-imports/_expected/umd.js b/test/form/samples/resolve-external-dynamic-imports/_expected/umd.js index 3672b0247fd..b83571e3391 100644 --- a/test/form/samples/resolve-external-dynamic-imports/_expected/umd.js +++ b/test/form/samples/resolve-external-dynamic-imports/_expected/umd.js @@ -2,7 +2,7 @@ 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.myExternal)); -}(this, function (exports,myExternal) { 'use strict'; +}(this, function (exports, myExternal) { 'use strict'; myExternal = myExternal && myExternal.hasOwnProperty('default') ? myExternal['default'] : myExternal; diff --git a/test/form/samples/umd-noconflict-extend/_expected/umd.js b/test/form/samples/umd-noconflict-extend/_expected/umd.js index cee2577ab63..590130efa1e 100644 --- a/test/form/samples/umd-noconflict-extend/_expected/umd.js +++ b/test/form/samples/umd-noconflict-extend/_expected/umd.js @@ -5,7 +5,6 @@ var current = global.FooBar; var exports = global.FooBar = global.FooBar || {}; factory(exports); - global.FooBar = exports; exports.noConflict = function () { global.FooBar = current; return exports; }; }())); }(this, function (exports) { 'use strict'; diff --git a/test/form/samples/umd-noconflict-namespaced/_expected/umd.js b/test/form/samples/umd-noconflict-namespaced/_expected/umd.js index 28323fba711..23360cce5fb 100644 --- a/test/form/samples/umd-noconflict-namespaced/_expected/umd.js +++ b/test/form/samples/umd-noconflict-namespaced/_expected/umd.js @@ -5,7 +5,6 @@ var current = global.my && global.my.name && global.my.name.spaced && global.my.name.spaced.module; var exports = (global.my = global.my || {}, global.my.name = global.my.name || {}, global.my.name.spaced = global.my.name.spaced || {}, global.my.name.spaced.module = {}); factory(exports); - global.my.name.spaced.module = exports; exports.noConflict = function () { global.my.name.spaced.module = current; return exports; }; }())); }(this, function (exports) { 'use strict'; diff --git a/test/form/samples/umd-noconflict-no-exports/_expected/umd.js b/test/form/samples/umd-noconflict-no-exports/_expected/umd.js index 8f15a0d5933..4eb569aa7b7 100644 --- a/test/form/samples/umd-noconflict-no-exports/_expected/umd.js +++ b/test/form/samples/umd-noconflict-no-exports/_expected/umd.js @@ -5,7 +5,6 @@ var current = global.FooBar; var exports = global.FooBar = {}; factory(exports); - global.FooBar = exports; exports.noConflict = function () { global.FooBar = current; return exports; }; }())); }(this, function (exports) { 'use strict'; diff --git a/test/form/samples/umd-noconflict/_expected/umd.js b/test/form/samples/umd-noconflict/_expected/umd.js index 4287fad786f..d2e40088d2a 100644 --- a/test/form/samples/umd-noconflict/_expected/umd.js +++ b/test/form/samples/umd-noconflict/_expected/umd.js @@ -5,7 +5,6 @@ var current = global.FooBar; var exports = global.FooBar = {}; factory(exports); - global.FooBar = exports; exports.noConflict = function () { global.FooBar = current; return exports; }; }())); }(this, function (exports) { 'use strict'; diff --git a/test/misc/index.js b/test/misc/index.js index 805a21b32a5..fa4a4adcde2 100644 --- a/test/misc/index.js +++ b/test/misc/index.js @@ -4,4 +4,5 @@ require('./deprecations'); require('./in-memory-sourcemaps'); require('./misc'); require('./sanity-checks'); +require('./umd'); require('./write-bundle'); diff --git a/test/misc/umd.js b/test/misc/umd.js new file mode 100644 index 00000000000..78dcd8c9a23 --- /dev/null +++ b/test/misc/umd.js @@ -0,0 +1,191 @@ +const rollup = require('../../dist/rollup'); +const assert = require('assert'); +const { loader } = require('../utils.js'); + +function runTestCode(code, thisValue, globals) { + const globalsWithAssert = Object.assign({}, globals, { assert }); + const globalKeys = Object.keys(globalsWithAssert); + const fn = new Function(globalKeys, code); + fn.apply(thisValue, globalKeys.map(key => globalsWithAssert[key])); +} + +function runNodeTest(code) { + const module = { exports: {} }; + runTestCode(code, module.exports, { + module, + exports: module.exports, + require: importee => { + if (importee !== 'external') { + throw new Error(`Tried to import unknown "${importee}".`); + } + return runNodeTest('module.exports = "external";'); + } + }); + return module.exports; +} + +function runAmdTest(code, outputOptions) { + let defineArgs; + function define(...args) { + defineArgs = args; + } + define.amd = true; + + runTestCode(code, undefined, { define }); + if (typeof defineArgs[0] === 'function') { + return defineArgs[0]() || {}; + } + const module = { exports: {} }; + const result = + defineArgs[1]( + ...defineArgs[0].map(injection => { + switch (injection) { + case 'module': + return module; + case 'exports': + return module.exports; + case 'external': + return 'external'; + default: + throw new Error(`unexpected AMD injection ${injection}`); + } + }) + ) || {}; + return defineArgs[0].indexOf('exports') === -1 ? result : module.exports; +} + +function runIifeTest(code, outputOptions) { + const global = { external: 'external' }; + runTestCode(code, global, {}); + return getAndCheckIifeExports(global, outputOptions); +} + +function runStrictIifeTest(code, outputOptions) { + const global = { external: 'external' }; + runTestCode('"use strict";' + code, undefined, { self: global }); + return getAndCheckIifeExports(global, outputOptions); +} + +function runIifeWithExistingValuesTest(code, outputOptions) { + const global = { + external: 'external', + bundle: 'previous', + my: { '@nested/value': { bundle: 'previous' } } + }; + runTestCode(code, global, {}); + const exports = getAndCheckIifeExports(global, outputOptions); + if (outputOptions.noConflict) { + // As "noConflict" was already called when getting the exports, the previous globals should be restored + assert.deepEqual( + global, + { external: 'external', bundle: 'previous', my: { '@nested/value': { bundle: 'previous' } } }, + 'noConflict restores global' + ); + } + return exports === 'previous' ? {} : exports; +} + +function getAndCheckIifeExports(global, outputOptions) { + const exports = getIifeExports(global, outputOptions); + if (outputOptions.noConflict) { + assert.deepEqual(exports.noConflict(), exports, 'noConflict() returns exports'); + delete exports.noConflict; + } + return exports; +} + +function getIifeExports(global, outputOptions) { + if (outputOptions.name) { + return outputOptions.name + .split('.') + .reduce((currentVar, nextKey) => currentVar[nextKey] || {}, global); + } + return {}; +} + +function getUmdCode(inputCode, outputOptions) { + return rollup + .rollup({ + input: 'input', + external: ['external'], + plugins: [loader({ input: inputCode })] + }) + .then(bundle => + bundle.generate( + Object.assign({ format: 'umd', globals: { external: 'external' } }, outputOptions) + ) + ) + .then(({ code }) => code); +} + +function runTestsWithCode(code, outputOptions, expectedExports) { + const umdCodePromise = getUmdCode(code, outputOptions); + + [ + { + environmentName: 'node', + runTest: runNodeTest + }, + { + environmentName: 'amd', + runTest: runAmdTest + }, + { + environmentName: 'iife', + runTest: runIifeTest + }, + { + environmentName: 'strict mode iife', + runTest: runStrictIifeTest + }, + { + environmentName: 'iife with existing globals', + runTest: runIifeWithExistingValuesTest + } + ].forEach(({ environmentName, runTest }) => + it(`works in ${environmentName} environment`, () => + umdCodePromise.then(code => { + assert.deepEqual( + runTest(code, outputOptions), + expectedExports, + 'expected exports are returned' + ); + })) + ); +} + +['bundle', 'my.@nested/value.bundle'].forEach(name => + [false, true].forEach(compact => + [false, true].forEach(noConflict => + describe(`The UMD wrapper with name="${name}", compact=${compact}, noConflict=${noConflict}`, () => { + const outputOptions = { compact, name, noConflict }; + + describe('creating a bundle with neither exports nor imports', () => + runTestsWithCode('assert.ok(true);', outputOptions, {})); + + describe('creating a bundle with named exports', () => + runTestsWithCode('export const x = 42;', outputOptions, { x: 42 })); + + describe('creating a bundle with a default export', () => + runTestsWithCode('export default {value: 42};', outputOptions, { value: 42 })); + + describe('creating a bundle with an external import', () => + runTestsWithCode( + 'import value from "external"; assert.equal(value, "external");', + outputOptions, + {} + )); + + describe('creating a bundle with an external import and named exports', () => + runTestsWithCode('import value from "external"; export const x = value;', outputOptions, { + x: 'external' + })); + + describe('creating a bundle with an external import and a default export', () => + runTestsWithCode('import value from "external"; export default {value};', outputOptions, { + value: 'external' + })); + }) + ) + ) +); From 2704b78a3f9c1eca24d24392e88fc169ce5cfde0 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Wed, 19 Dec 2018 10:02:00 +0100 Subject: [PATCH 3/4] Shorten variable names in UMD; remove unnecessary UMD function tests --- src/finalisers/umd.ts | 49 ++++++++++--------- test/form/samples/compact/_expected/umd.js | 2 +- .../supports-compact-umd-in-node/_config.js | 11 ----- .../supports-compact-umd-in-node/main.js | 3 -- .../samples/supports-umd-in-node/_config.js | 11 ----- .../samples/supports-umd-in-node/main.js | 3 -- 6 files changed, 27 insertions(+), 52 deletions(-) delete mode 100644 test/function/samples/supports-compact-umd-in-node/_config.js delete mode 100644 test/function/samples/supports-compact-umd-in-node/main.js delete mode 100644 test/function/samples/supports-umd-in-node/_config.js delete mode 100644 test/function/samples/supports-umd-in-node/main.js diff --git a/src/finalisers/umd.ts b/src/finalisers/umd.ts index 2eb3bd7d8dc..6f78c0f31fd 100644 --- a/src/finalisers/umd.ts +++ b/src/finalisers/umd.ts @@ -10,16 +10,16 @@ import { assignToDeepVariable } from './shared/setupNamespace'; import trimEmptyImports from './shared/trimEmptyImports'; import warnOnBuiltins from './shared/warnOnBuiltins'; -function globalProp(name: string) { +function globalProp(name: string, globalVar: string) { if (!name) return 'null'; - return `global${keypath(name)}`; + return `${globalVar}${keypath(name)}`; } -function safeAccess(name: string, compact: boolean) { +function safeAccess(name: string, globalVar: string, _: string) { const parts = name.split('.'); - let acc = 'global'; - return parts.map(part => ((acc += property(part)), acc)).join(compact ? '&&' : ` && `); + let acc = globalVar; + return parts.map(part => ((acc += property(part)), acc)).join(`${_}&&${_}`); } export default function umd( @@ -38,6 +38,8 @@ export default function umd( ) { const _ = options.compact ? '' : ' '; const n = options.compact ? '' : '\n'; + const factoryVar = options.compact ? 'f' : 'factory'; + const globalVar = options.compact ? 'g' : 'global'; if (hasExports && !options.name) { error({ @@ -52,7 +54,7 @@ export default function umd( const cjsDeps = dependencies.map(m => `require('${m.id}')`); const trimmedImports = trimEmptyImports(dependencies); - const globalDeps = trimmedImports.map(module => globalProp(module.globalName)); + const globalDeps = trimmedImports.map(module => globalProp(module.globalName, globalVar)); const factoryArgs = trimmedImports.map(m => m.name); if (namedExportsMode && (hasExports || options.noConflict === true)) { @@ -61,10 +63,10 @@ export default function umd( globalDeps.unshift( assignToDeepVariable( options.name, - 'global', + globalVar, options.globals, options.compact, - `${options.extend ? `${globalProp(options.name)}${_}||${_}` : ''}{}` + `${options.extend ? `${globalProp(options.name, globalVar)}${_}||${_}` : ''}{}` ) ); @@ -84,37 +86,38 @@ export default function umd( let iifeExport; if (options.noConflict === true) { + const noConflictExportsVar = options.compact ? 'e' : 'exports'; let factory; if (!namedExportsMode && hasExports) { - factory = `var exports${_}=${_}${assignToDeepVariable( + factory = `var ${noConflictExportsVar}${_}=${_}${assignToDeepVariable( options.name, - 'global', + globalVar, options.globals, options.compact, - `factory(${globalDeps.join(`,${_}`)})` + `${factoryVar}(${globalDeps.join(`,${_}`)})` )};`; } else if (namedExportsMode) { const module = globalDeps.shift(); factory = - `var exports${_}=${_}${module};${n}` + - `${t}${t}factory(${['exports'].concat(globalDeps).join(`,${_}`)});`; + `var ${noConflictExportsVar}${_}=${_}${module};${n}` + + `${t}${t}${factoryVar}(${[noConflictExportsVar].concat(globalDeps).join(`,${_}`)});`; } iifeExport = `(function${_}()${_}{${n}` + - `${t}${t}var current${_}=${_}${safeAccess(options.name, options.compact)};${n}` + + `${t}${t}var current${_}=${_}${safeAccess(options.name, globalVar, _)};${n}` + `${t}${t}${factory}${n}` + - `${t}${t}exports.noConflict${_}=${_}function${_}()${_}{${_}` + - `${globalProp(options.name)}${_}=${_}current;${_}return exports${ + `${t}${t}${noConflictExportsVar}.noConflict${_}=${_}function${_}()${_}{${_}` + + `${globalProp(options.name, globalVar)}${_}=${_}current;${_}return ${noConflictExportsVar}${ options.compact ? '' : '; ' }};${n}` + `${t}}())`; } else { - iifeExport = `factory(${globalDeps.join(`,${_}`)})`; + iifeExport = `${factoryVar}(${globalDeps.join(`,${_}`)})`; if (!namedExportsMode && hasExports) { iifeExport = assignToDeepVariable( options.name, - 'global', + globalVar, options.globals, options.compact, iifeExport @@ -124,19 +127,19 @@ export default function umd( const iifeNeedsGlobal = hasExports || (options.noConflict === true && namedExportsMode) || globalDeps.length > 0; - const globalParam = iifeNeedsGlobal ? `global,${_}` : ''; + const globalParam = iifeNeedsGlobal ? `${globalVar},${_}` : ''; const globalArg = iifeNeedsGlobal ? `this,${_}` : ''; - const iifeStart = iifeNeedsGlobal ? `(global${_}=${_}global${_}||${_}self,${_}` : ''; + const iifeStart = iifeNeedsGlobal ? `(${globalVar}${_}=${_}${globalVar}${_}||${_}self,${_}` : ''; const iifeEnd = iifeNeedsGlobal ? ')' : ''; const cjsIntro = iifeNeedsGlobal ? `${t}typeof exports${_}===${_}'object'${_}&&${_}typeof module${_}!==${_}'undefined'${_}?` + - `${_}${cjsExport}factory(${cjsDeps.join(`,${_}`)})${_}:${n}` + `${_}${cjsExport}${factoryVar}(${cjsDeps.join(`,${_}`)})${_}:${n}` : ''; const wrapperIntro = - `(function${_}(${globalParam}factory)${_}{${n}` + + `(function${_}(${globalParam}${factoryVar})${_}{${n}` + cjsIntro + - `${t}typeof ${define}${_}===${_}'function'${_}&&${_}${define}.amd${_}?${_}${define}(${amdParams}factory)${_}:${n}` + + `${t}typeof ${define}${_}===${_}'function'${_}&&${_}${define}.amd${_}?${_}${define}(${amdParams}${factoryVar})${_}:${n}` + `${t}${iifeStart}${iifeExport}${iifeEnd};${n}` + `}(${globalArg}function${_}(${factoryArgs.join(', ')})${_}{${useStrict}${n}`; diff --git a/test/form/samples/compact/_expected/umd.js b/test/form/samples/compact/_expected/umd.js index 6315bf4fc32..ea9dbe3f7da 100644 --- a/test/form/samples/compact/_expected/umd.js +++ b/test/form/samples/compact/_expected/umd.js @@ -1,4 +1,4 @@ -(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.foo=factory(global.x));}(this,function(x){'use strict';x=x&&x.hasOwnProperty('default')?x['default']:x;var self = {get default(){return foo$$1}};if(typeof Symbol!=='undefined'&&Symbol.toStringTag)Object.defineProperty(self,Symbol.toStringTag,{value:'Module'});else Object.defineProperty(self,'toString',{value:function(){return'[object Module]';}});/*#__PURE__*/Object.freeze(self);console.log(self); +(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?module.exports=f(require('external')):typeof define==='function'&&define.amd?define(['external'],f):(g=g||self,g.foo=f(g.x));}(this,function(x){'use strict';x=x&&x.hasOwnProperty('default')?x['default']:x;var self = {get default(){return foo$$1}};if(typeof Symbol!=='undefined'&&Symbol.toStringTag)Object.defineProperty(self,Symbol.toStringTag,{value:'Module'});else Object.defineProperty(self,'toString',{value:function(){return'[object Module]';}});/*#__PURE__*/Object.freeze(self);console.log(self); function foo$$1 () { console.log( x ); } diff --git a/test/function/samples/supports-compact-umd-in-node/_config.js b/test/function/samples/supports-compact-umd-in-node/_config.js deleted file mode 100644 index 0e248b032ee..00000000000 --- a/test/function/samples/supports-compact-umd-in-node/_config.js +++ /dev/null @@ -1,11 +0,0 @@ -const assert = require('assert'); - -module.exports = { - description: 'umd output works in node', - options: { - output: { format: 'umd', name: 'bundle', compact: true } - }, - exports(exports) { - assert.equal(exports.x, 'y'); - } -}; diff --git a/test/function/samples/supports-compact-umd-in-node/main.js b/test/function/samples/supports-compact-umd-in-node/main.js deleted file mode 100644 index 574c8636455..00000000000 --- a/test/function/samples/supports-compact-umd-in-node/main.js +++ /dev/null @@ -1,3 +0,0 @@ -const x = 'y'; - -export {x}; diff --git a/test/function/samples/supports-umd-in-node/_config.js b/test/function/samples/supports-umd-in-node/_config.js deleted file mode 100644 index 39b2fc87621..00000000000 --- a/test/function/samples/supports-umd-in-node/_config.js +++ /dev/null @@ -1,11 +0,0 @@ -const assert = require('assert'); - -module.exports = { - description: 'umd output works in node', - options: { - output: { format: 'umd', name: 'bundle' } - }, - exports(exports) { - assert.equal(exports.x, 'y'); - } -}; diff --git a/test/function/samples/supports-umd-in-node/main.js b/test/function/samples/supports-umd-in-node/main.js deleted file mode 100644 index 574c8636455..00000000000 --- a/test/function/samples/supports-umd-in-node/main.js +++ /dev/null @@ -1,3 +0,0 @@ -const x = 'y'; - -export {x}; From c1cc45b8acf77ff3756d85855aa16dd624f4411d Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Wed, 19 Dec 2018 12:03:40 +0100 Subject: [PATCH 4/4] Test and refine iife wrapper --- src/finalisers/iife.ts | 29 ++--- .../conflicting-imports/_expected/iife.js | 4 +- .../_expected/iife.js | 4 +- .../export-all-multiple/_expected/iife.js | 4 +- .../export-default-import/_expected/iife.js | 4 +- .../external-deshadowing/_expected/iife.js | 4 +- .../_expected/iife.js | 4 +- .../external-export-tracing/_expected/iife.js | 4 +- .../external-imports/_expected/iife.js | 4 +- .../_expected/iife.js | 4 +- .../import-namespace/_expected/iife.js | 4 +- .../interop-false-reexport/_expected/iife.js | 4 +- .../_expected/iife.js | 4 +- .../samples/no-treeshake/_expected/iife.js | 4 +- .../re-export-aliasing/_expected/iife.js | 4 +- .../reexports-from-external/_expected/iife.js | 4 +- .../_expected/iife.js | 4 +- .../_expected/iife.js | 4 +- .../_expected/iife.js | 1 - test/misc/iife.js | 104 ++++++++++++++++++ test/misc/index.js | 1 + 21 files changed, 155 insertions(+), 48 deletions(-) create mode 100644 test/misc/iife.js diff --git a/src/finalisers/iife.ts b/src/finalisers/iife.ts index 37d78e966d0..93a36897914 100644 --- a/src/finalisers/iife.ts +++ b/src/finalisers/iife.ts @@ -31,9 +31,9 @@ export default function iife( const { extend, name } = options; const isNamespaced = name && name.indexOf('.') !== -1; - const possibleVariableAssignment = !extend && !isNamespaced; + const useVariableAssignment = !extend && !isNamespaced; - if (name && possibleVariableAssignment && !isLegal(name)) { + if (name && useVariableAssignment && !isLegal(name)) { error({ code: 'ILLEGAL_IDENTIFIER_AS_NAME', message: `Given name (${name}) is not legal JS identifier. If you need this you can try --extend option` @@ -53,28 +53,31 @@ export default function iife( }); } - if (extend) { - deps.unshift(`${thisProp(name)}${_}=${_}${thisProp(name)}${_}||${_}{}`); - args.unshift('exports'); - } else if (namedExportsMode && hasExports) { - deps.unshift('{}'); - args.unshift('exports'); + if (namedExportsMode && hasExports) { + if (extend) { + deps.unshift(`${thisProp(name)}${_}=${_}${thisProp(name)}${_}||${_}{}`); + args.unshift('exports'); + } else { + deps.unshift('{}'); + args.unshift('exports'); + } } const useStrict = options.strict !== false ? `${t}'use strict';${n}${n}` : ``; - let wrapperIntro = `(function${_}(${args})${_}{${n}${useStrict}`; + let wrapperIntro = `(function${_}(${args.join(`,${_}`)})${_}{${n}${useStrict}`; - if (hasExports && !extend) { + if (hasExports && (!extend || !namedExportsMode)) { wrapperIntro = - (isNamespaced ? thisProp(name) : `${graph.varOrConst} ${name}`) + `${_}=${_}${wrapperIntro}`; + (useVariableAssignment ? `${graph.varOrConst} ${name}` : thisProp(name)) + + `${_}=${_}${wrapperIntro}`; } - if (isNamespaced) { + if (isNamespaced && hasExports) { wrapperIntro = setupNamespace(name, 'this', options.globals, options.compact) + wrapperIntro; } - let wrapperOutro = `${n}${n}}(${deps}));`; + let wrapperOutro = `${n}${n}}(${deps.join(`,${_}`)}));`; if (!extend && namedExportsMode && hasExports) { wrapperOutro = `${n}${n}${t}return exports;${wrapperOutro}`; diff --git a/test/form/samples/conflicting-imports/_expected/iife.js b/test/form/samples/conflicting-imports/_expected/iife.js index 149a4ff7f59..a5ef4fbff06 100644 --- a/test/form/samples/conflicting-imports/_expected/iife.js +++ b/test/form/samples/conflicting-imports/_expected/iife.js @@ -1,8 +1,8 @@ -(function (foo,bar) { +(function (foo, bar) { 'use strict'; console.log( bar.a ); console.log( foo.a ); -}(foo,bar)); +}(foo, bar)); diff --git a/test/form/samples/dedupes-external-imports/_expected/iife.js b/test/form/samples/dedupes-external-imports/_expected/iife.js index a1da8a4434f..c483ba20563 100644 --- a/test/form/samples/dedupes-external-imports/_expected/iife.js +++ b/test/form/samples/dedupes-external-imports/_expected/iife.js @@ -1,4 +1,4 @@ -var myBundle = (function (exports,external) { +var myBundle = (function (exports, external) { 'use strict'; class Foo extends external.Component { @@ -32,4 +32,4 @@ var myBundle = (function (exports,external) { return exports; -}({},external)); +}({}, external)); diff --git a/test/form/samples/export-all-multiple/_expected/iife.js b/test/form/samples/export-all-multiple/_expected/iife.js index f233c39c7a2..b7ff2a15e7f 100644 --- a/test/form/samples/export-all-multiple/_expected/iife.js +++ b/test/form/samples/export-all-multiple/_expected/iife.js @@ -1,4 +1,4 @@ -var myBundle = (function (exports,foo,bar,baz) { +var myBundle = (function (exports, foo, bar, baz) { 'use strict'; @@ -9,4 +9,4 @@ var myBundle = (function (exports,foo,bar,baz) { return exports; -}({},foo,bar,baz)); +}({}, foo, bar, baz)); diff --git a/test/form/samples/export-default-import/_expected/iife.js b/test/form/samples/export-default-import/_expected/iife.js index 29d13f6a92b..ccb224f947a 100644 --- a/test/form/samples/export-default-import/_expected/iife.js +++ b/test/form/samples/export-default-import/_expected/iife.js @@ -1,4 +1,4 @@ -var myBundle = (function (exports,x) { +var myBundle = (function (exports, x) { 'use strict'; x = x && x.hasOwnProperty('default') ? x['default'] : x; @@ -9,4 +9,4 @@ var myBundle = (function (exports,x) { return exports; -}({},x)); +}({}, x)); diff --git a/test/form/samples/external-deshadowing/_expected/iife.js b/test/form/samples/external-deshadowing/_expected/iife.js index 524eb041a94..93c2a4475dc 100644 --- a/test/form/samples/external-deshadowing/_expected/iife.js +++ b/test/form/samples/external-deshadowing/_expected/iife.js @@ -1,4 +1,4 @@ -var myBundle = (function (exports,a,Test) { +var myBundle = (function (exports, a, Test) { 'use strict'; Test = Test && Test.hasOwnProperty('default') ? Test['default'] : Test; @@ -16,4 +16,4 @@ var myBundle = (function (exports,a,Test) { return exports; -}({},a,Test)); +}({}, a, Test)); diff --git a/test/form/samples/external-empty-import-no-global-b/_expected/iife.js b/test/form/samples/external-empty-import-no-global-b/_expected/iife.js index 23f04a2bb66..f0f77a3c473 100644 --- a/test/form/samples/external-empty-import-no-global-b/_expected/iife.js +++ b/test/form/samples/external-empty-import-no-global-b/_expected/iife.js @@ -1,4 +1,4 @@ -var myBundle = (function (babelPolyfill,other) { +var myBundle = (function (babelPolyfill, other) { 'use strict'; other.x(); @@ -7,4 +7,4 @@ var myBundle = (function (babelPolyfill,other) { return main; -}(null,other)); +}(null, other)); diff --git a/test/form/samples/external-export-tracing/_expected/iife.js b/test/form/samples/external-export-tracing/_expected/iife.js index 26c602c947a..2bb394748a6 100644 --- a/test/form/samples/external-export-tracing/_expected/iife.js +++ b/test/form/samples/external-export-tracing/_expected/iife.js @@ -1,4 +1,4 @@ -var myBundle = (function (exports,external) { +var myBundle = (function (exports, external) { 'use strict'; @@ -7,4 +7,4 @@ var myBundle = (function (exports,external) { return exports; -}({},external)); +}({}, external)); diff --git a/test/form/samples/external-imports/_expected/iife.js b/test/form/samples/external-imports/_expected/iife.js index 20bd43dd9fc..fb0f172d051 100644 --- a/test/form/samples/external-imports/_expected/iife.js +++ b/test/form/samples/external-imports/_expected/iife.js @@ -1,4 +1,4 @@ -(function (factory,baz,containers,alphabet) { +(function (factory, baz, containers, alphabet) { 'use strict'; factory = factory && factory.hasOwnProperty('default') ? factory['default'] : factory; @@ -10,4 +10,4 @@ console.log( alphabet.a ); console.log( alphabet__default.length ); -}(factory,baz,containers,alphabet)); +}(factory, baz, containers, alphabet)); diff --git a/test/form/samples/external-namespace-reexport/_expected/iife.js b/test/form/samples/external-namespace-reexport/_expected/iife.js index 85115792110..3f1b66a99d2 100644 --- a/test/form/samples/external-namespace-reexport/_expected/iife.js +++ b/test/form/samples/external-namespace-reexport/_expected/iife.js @@ -1,4 +1,4 @@ -var myBundle = (function (exports,highcharts) { +var myBundle = (function (exports, highcharts) { 'use strict'; @@ -7,4 +7,4 @@ var myBundle = (function (exports,highcharts) { return exports; -}({},highcharts)); +}({}, highcharts)); diff --git a/test/form/samples/import-namespace/_expected/iife.js b/test/form/samples/import-namespace/_expected/iife.js index 2b09a1bfe55..8d39eaa2d8e 100644 --- a/test/form/samples/import-namespace/_expected/iife.js +++ b/test/form/samples/import-namespace/_expected/iife.js @@ -1,7 +1,7 @@ -(function (foo,bar) { +(function (foo, bar) { 'use strict'; foo.x(); console.log(bar); -}(foo,bar)); +}(foo, bar)); diff --git a/test/form/samples/interop-false-reexport/_expected/iife.js b/test/form/samples/interop-false-reexport/_expected/iife.js index a13e7b6a7c3..0a0eb6ebc60 100644 --- a/test/form/samples/interop-false-reexport/_expected/iife.js +++ b/test/form/samples/interop-false-reexport/_expected/iife.js @@ -1,4 +1,4 @@ -var foo = (function (exports,external) { +var foo = (function (exports, external) { 'use strict'; @@ -8,4 +8,4 @@ var foo = (function (exports,external) { return exports; -}({},external)); +}({}, external)); diff --git a/test/form/samples/namespace-import-reexport/_expected/iife.js b/test/form/samples/namespace-import-reexport/_expected/iife.js index b3d69726397..be7fc3ef89c 100644 --- a/test/form/samples/namespace-import-reexport/_expected/iife.js +++ b/test/form/samples/namespace-import-reexport/_expected/iife.js @@ -1,4 +1,4 @@ -var iife = (function (exports,externalPackage) { +var iife = (function (exports, externalPackage) { 'use strict'; @@ -7,4 +7,4 @@ var iife = (function (exports,externalPackage) { return exports; -}({},externalPackage)); +}({}, externalPackage)); diff --git a/test/form/samples/no-treeshake/_expected/iife.js b/test/form/samples/no-treeshake/_expected/iife.js index a8294f43882..c1fe5df589b 100644 --- a/test/form/samples/no-treeshake/_expected/iife.js +++ b/test/form/samples/no-treeshake/_expected/iife.js @@ -1,4 +1,4 @@ -var stirred = (function (exports,external) { +var stirred = (function (exports, external) { 'use strict'; var foo = 13; @@ -38,4 +38,4 @@ var stirred = (function (exports,external) { return exports; -}({},external)); +}({}, external)); diff --git a/test/form/samples/re-export-aliasing/_expected/iife.js b/test/form/samples/re-export-aliasing/_expected/iife.js index 30f14470ef0..d56c72b5a38 100644 --- a/test/form/samples/re-export-aliasing/_expected/iife.js +++ b/test/form/samples/re-export-aliasing/_expected/iife.js @@ -1,4 +1,4 @@ -var reexportsAliasingExternal = (function (exports,d) { +var reexportsAliasingExternal = (function (exports, d) { 'use strict'; @@ -7,4 +7,4 @@ var reexportsAliasingExternal = (function (exports,d) { return exports; -}({},d)); +}({}, d)); diff --git a/test/form/samples/reexports-from-external/_expected/iife.js b/test/form/samples/reexports-from-external/_expected/iife.js index 698ec93c66d..830badeb9a1 100644 --- a/test/form/samples/reexports-from-external/_expected/iife.js +++ b/test/form/samples/reexports-from-external/_expected/iife.js @@ -1,4 +1,4 @@ -var myBundle = (function (exports,external) { +var myBundle = (function (exports, external) { 'use strict'; @@ -7,4 +7,4 @@ var myBundle = (function (exports,external) { return exports; -}({},external)); +}({}, external)); diff --git a/test/form/samples/reexports-name-from-external/_expected/iife.js b/test/form/samples/reexports-name-from-external/_expected/iife.js index 9ec202abcd8..acbc785d20a 100644 --- a/test/form/samples/reexports-name-from-external/_expected/iife.js +++ b/test/form/samples/reexports-name-from-external/_expected/iife.js @@ -1,4 +1,4 @@ -var myBundle = (function (exports,external) { +var myBundle = (function (exports, external) { 'use strict'; @@ -7,4 +7,4 @@ var myBundle = (function (exports,external) { return exports; -}({},external)); +}({}, external)); diff --git a/test/form/samples/resolve-external-dynamic-imports/_expected/iife.js b/test/form/samples/resolve-external-dynamic-imports/_expected/iife.js index 12ca9894e47..a586721c0e4 100644 --- a/test/form/samples/resolve-external-dynamic-imports/_expected/iife.js +++ b/test/form/samples/resolve-external-dynamic-imports/_expected/iife.js @@ -1,4 +1,4 @@ -var bundle = (function (exports,myExternal) { +var bundle = (function (exports, myExternal) { 'use strict'; myExternal = myExternal && myExternal.hasOwnProperty('default') ? myExternal['default'] : myExternal; @@ -12,4 +12,4 @@ var bundle = (function (exports,myExternal) { return exports; -}({},myExternal)); +}({}, myExternal)); diff --git a/test/form/samples/use-global-map-for-export-name/_expected/iife.js b/test/form/samples/use-global-map-for-export-name/_expected/iife.js index 5ba1f560aad..325179b7c1a 100644 --- a/test/form/samples/use-global-map-for-export-name/_expected/iife.js +++ b/test/form/samples/use-global-map-for-export-name/_expected/iife.js @@ -1,4 +1,3 @@ -this.L = this.L || {}; (function (L) { 'use strict'; diff --git a/test/misc/iife.js b/test/misc/iife.js new file mode 100644 index 00000000000..1571a3f1376 --- /dev/null +++ b/test/misc/iife.js @@ -0,0 +1,104 @@ +const rollup = require('../../dist/rollup'); +const assert = require('assert'); +const { loader } = require('../utils.js'); + +function runTestCode(code, globals) { + const globalsWithAssert = Object.assign({}, globals, { assert }); + const globalKeys = Object.keys(globalsWithAssert); + const fn = new Function(globalKeys, code); + fn.apply(globals, globalKeys.map(key => globalsWithAssert[key])); +} + +function runIifeTest(code, outputOptions) { + const bundleName = outputOptions.name.split('.')[0]; + const globals = { external: 'external', __exports: {} }; + runTestCode( + bundleName && bundleName.indexOf('@') === -1 + ? `${code}if (typeof ${bundleName} !== 'undefined') __exports.${bundleName} = ${bundleName};` + : code, + globals + ); + return getIifeExports(globals.__exports[bundleName] ? globals.__exports : globals, outputOptions); +} + +function getIifeExports(global, outputOptions) { + if (outputOptions.name) { + return outputOptions.name + .split('.') + .reduce((currentVar, nextKey) => currentVar[nextKey] || {}, global); + } + return {}; +} + +function getIifeCode(inputCode, outputOptions) { + return rollup + .rollup({ + input: 'input', + external: ['external'], + plugins: [loader({ input: inputCode })] + }) + .then(bundle => + bundle.generate( + Object.assign({ format: 'iife', globals: { external: 'external' } }, outputOptions) + ) + ) + .then(({ code }) => code); +} + +function runTestsWithCode(code, outputOptions, expectedExports) { + it('works with extend=false', () => { + const options = Object.assign({ extend: false }, outputOptions); + return getIifeCode(code, options).then(code => + assert.deepEqual( + runIifeTest(code, options), + expectedExports, + 'expected exports are returned' + ) + ); + }); + + it('works with extend=true', () => { + const options = Object.assign({ extend: true }, outputOptions); + return getIifeCode(code, options).then(code => + assert.deepEqual( + runIifeTest(code, options), + expectedExports, + 'expected exports are returned' + ) + ); + }); +} + +['bundle', '@my.@nested/value.bundle'].forEach(name => + [false, true].forEach(compact => + describe(`The IIFE wrapper with name="${name}", compact=${compact}`, () => { + const outputOptions = { compact, name }; + + describe('creating a bundle with neither exports nor imports', () => + runTestsWithCode('assert.ok(true);', outputOptions, {})); + + describe('creating a bundle with named exports', () => + runTestsWithCode('export const x = 42;', outputOptions, { x: 42 })); + + describe('creating a bundle with a default export', () => + runTestsWithCode('export default {value: 42};', outputOptions, { value: 42 })); + + describe('creating a bundle with an external import', () => + runTestsWithCode( + 'import value from "external"; assert.equal(value, "external");', + outputOptions, + {} + )); + + describe('creating a bundle with an external import and named exports', () => + runTestsWithCode('import value from "external"; export const x = value;', outputOptions, { + x: 'external' + })); + + describe('creating a bundle with an external import and a default export', () => + runTestsWithCode('import value from "external"; export default {value};', outputOptions, { + value: 'external' + })); + }) + ) +); diff --git a/test/misc/index.js b/test/misc/index.js index fa4a4adcde2..c516fc154c0 100644 --- a/test/misc/index.js +++ b/test/misc/index.js @@ -1,6 +1,7 @@ require('./acorn-plugins'); require('./bundle-information'); require('./deprecations'); +require('./iife'); require('./in-memory-sourcemaps'); require('./misc'); require('./sanity-checks');