From 2f7e064037d3fe101a52e6a5be6009fe3980fbce Mon Sep 17 00:00:00 2001 From: Benjamin T Date: Sun, 27 Oct 2019 20:24:42 +0100 Subject: [PATCH] Remove the need to provide an output name for IIFE bundles (#3181) * Remove the need to provide an output name for IIFE bundles * Add test for IIFE warning Also migrate UMD test and remove some unused folders --- src/finalisers/iife.ts | 9 +++-- .../compact-multiple-imports/_expected/amd.js | 6 ---- .../compact-multiple-imports/_expected/cjs.js | 6 ---- .../compact-multiple-imports/_expected/es.js | 6 ---- .../_expected/iife.js | 6 ---- .../_expected/system.js | 6 ---- .../compact-multiple-imports/_expected/umd.js | 6 ---- .../_expected/amd/main.js | 5 --- .../_expected/cjs/main.js | 3 -- .../_expected/es/main.js | 1 - .../_expected/system/main.js | 10 ------ .../dynamic-import-name/_expected/amd/main.js | 5 --- .../dynamic-import-name/_expected/cjs/main.js | 3 -- .../dynamic-import-name/_expected/es/main.js | 1 - .../_expected/system/main.js | 10 ------ .../samples/error-missing-umd-name/_config.js | 8 +++++ .../samples/error-missing-umd-name/main.js | 1 + .../_expected/amd.js | 10 ------ .../_expected/cjs.js | 8 ----- .../_expected/es.js | 6 ---- .../_expected/iife.js | 11 ------ .../_expected/system.js | 15 -------- .../_expected/umd.js | 14 -------- .../samples/warn-missing-iife-name/_config.js | 10 ++++++ .../samples/warn-missing-iife-name/main.js | 1 + test/misc/write-bundle.js | 36 ------------------- 26 files changed, 24 insertions(+), 179 deletions(-) delete mode 100644 test/function/samples/compact-multiple-imports/_expected/amd.js delete mode 100644 test/function/samples/compact-multiple-imports/_expected/cjs.js delete mode 100644 test/function/samples/compact-multiple-imports/_expected/es.js delete mode 100644 test/function/samples/compact-multiple-imports/_expected/iife.js delete mode 100644 test/function/samples/compact-multiple-imports/_expected/system.js delete mode 100644 test/function/samples/compact-multiple-imports/_expected/umd.js delete mode 100644 test/function/samples/dynamic-import-name-warn/_expected/amd/main.js delete mode 100644 test/function/samples/dynamic-import-name-warn/_expected/cjs/main.js delete mode 100644 test/function/samples/dynamic-import-name-warn/_expected/es/main.js delete mode 100644 test/function/samples/dynamic-import-name-warn/_expected/system/main.js delete mode 100644 test/function/samples/dynamic-import-name/_expected/amd/main.js delete mode 100644 test/function/samples/dynamic-import-name/_expected/cjs/main.js delete mode 100644 test/function/samples/dynamic-import-name/_expected/es/main.js delete mode 100644 test/function/samples/dynamic-import-name/_expected/system/main.js create mode 100644 test/function/samples/error-missing-umd-name/_config.js create mode 100644 test/function/samples/error-missing-umd-name/main.js delete mode 100644 test/function/samples/side-effects-only-default-exports/_expected/amd.js delete mode 100644 test/function/samples/side-effects-only-default-exports/_expected/cjs.js delete mode 100644 test/function/samples/side-effects-only-default-exports/_expected/es.js delete mode 100644 test/function/samples/side-effects-only-default-exports/_expected/iife.js delete mode 100644 test/function/samples/side-effects-only-default-exports/_expected/system.js delete mode 100644 test/function/samples/side-effects-only-default-exports/_expected/umd.js create mode 100644 test/function/samples/warn-missing-iife-name/_config.js create mode 100644 test/function/samples/warn-missing-iife-name/main.js diff --git a/src/finalisers/iife.ts b/src/finalisers/iife.ts index 755748e169b..a87a4b535c1 100644 --- a/src/finalisers/iife.ts +++ b/src/finalisers/iife.ts @@ -48,9 +48,8 @@ export default function iife( const args = external.map(m => m.name); if (hasExports && !name) { - error({ - code: 'INVALID_OPTION', - message: `You must supply "output.name" for IIFE bundles.` + warn({ + message: `If you do not supply "output.name", you may not be able to access the exports of an IIFE bundle.` }); } @@ -68,9 +67,9 @@ export default function iife( let wrapperIntro = `(function${_}(${args.join(`,${_}`)})${_}{${n}${useStrict}`; - if (hasExports && (!extend || !namedExportsMode)) { + if (hasExports && (!extend || !namedExportsMode) && name) { wrapperIntro = - (useVariableAssignment ? `${varOrConst} ${name}` : thisProp(name as string)) + + (useVariableAssignment ? `${varOrConst} ${name}` : thisProp(name)) + `${_}=${_}${wrapperIntro}`; } diff --git a/test/function/samples/compact-multiple-imports/_expected/amd.js b/test/function/samples/compact-multiple-imports/_expected/amd.js deleted file mode 100644 index c0c925741aa..00000000000 --- a/test/function/samples/compact-multiple-imports/_expected/amd.js +++ /dev/null @@ -1,6 +0,0 @@ -define(['external'],function(x){'use strict';x=x&&x.hasOwnProperty('default')?x['default']:x;var self = {get default(){return foo}};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 () { - console.log( x ); -} -// trailing comment -return foo;}); diff --git a/test/function/samples/compact-multiple-imports/_expected/cjs.js b/test/function/samples/compact-multiple-imports/_expected/cjs.js deleted file mode 100644 index c0276a75f26..00000000000 --- a/test/function/samples/compact-multiple-imports/_expected/cjs.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict';function _interopDefault(e){return(e&&(typeof e==='object')&&'default'in e)?e['default']:e}var x=_interopDefault(require('external'));var self = {get default(){return foo}};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 () { - console.log( x ); -} -// trailing comment -module.exports=foo; diff --git a/test/function/samples/compact-multiple-imports/_expected/es.js b/test/function/samples/compact-multiple-imports/_expected/es.js deleted file mode 100644 index 16cecd7ccd7..00000000000 --- a/test/function/samples/compact-multiple-imports/_expected/es.js +++ /dev/null @@ -1,6 +0,0 @@ -import x from'external';var self = {get default(){return foo}};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 () { - console.log( x ); -} -// trailing comment -export default foo; diff --git a/test/function/samples/compact-multiple-imports/_expected/iife.js b/test/function/samples/compact-multiple-imports/_expected/iife.js deleted file mode 100644 index 1f8ea4d384d..00000000000 --- a/test/function/samples/compact-multiple-imports/_expected/iife.js +++ /dev/null @@ -1,6 +0,0 @@ -var foo=(function(x){'use strict';x=x&&x.hasOwnProperty('default')?x['default']:x;var self = {get default(){return foo}};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 () { - console.log( x ); -} -// trailing comment -return foo;}(x)); diff --git a/test/function/samples/compact-multiple-imports/_expected/system.js b/test/function/samples/compact-multiple-imports/_expected/system.js deleted file mode 100644 index a49e388d827..00000000000 --- a/test/function/samples/compact-multiple-imports/_expected/system.js +++ /dev/null @@ -1,6 +0,0 @@ -System.register('foo',['external'],function(exports,module){'use strict';var x;return{setters:[function(module){x=module.default;}],execute:function(){exports('default',foo);var self = {get default(){return foo}};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 () { - console.log( x ); -} -// trailing comment -}}}); diff --git a/test/function/samples/compact-multiple-imports/_expected/umd.js b/test/function/samples/compact-multiple-imports/_expected/umd.js deleted file mode 100644 index 7902ad4e3ff..00000000000 --- a/test/function/samples/compact-multiple-imports/_expected/umd.js +++ /dev/null @@ -1,6 +0,0 @@ -(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}};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 () { - console.log( x ); -} -// trailing comment -return foo;})); diff --git a/test/function/samples/dynamic-import-name-warn/_expected/amd/main.js b/test/function/samples/dynamic-import-name-warn/_expected/amd/main.js deleted file mode 100644 index b81e4d74b05..00000000000 --- a/test/function/samples/dynamic-import-name-warn/_expected/amd/main.js +++ /dev/null @@ -1,5 +0,0 @@ -define(['require'], function (require) { 'use strict'; - - new Promise(function (resolve, reject) { require(['./foo.js'], resolve, reject) }); - -}); diff --git a/test/function/samples/dynamic-import-name-warn/_expected/cjs/main.js b/test/function/samples/dynamic-import-name-warn/_expected/cjs/main.js deleted file mode 100644 index b1acd589703..00000000000 --- a/test/function/samples/dynamic-import-name-warn/_expected/cjs/main.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -Promise.resolve(require('./foo.js')); diff --git a/test/function/samples/dynamic-import-name-warn/_expected/es/main.js b/test/function/samples/dynamic-import-name-warn/_expected/es/main.js deleted file mode 100644 index 51e216a3931..00000000000 --- a/test/function/samples/dynamic-import-name-warn/_expected/es/main.js +++ /dev/null @@ -1 +0,0 @@ -foobar('./foo.js'); diff --git a/test/function/samples/dynamic-import-name-warn/_expected/system/main.js b/test/function/samples/dynamic-import-name-warn/_expected/system/main.js deleted file mode 100644 index 0824bad8d3f..00000000000 --- a/test/function/samples/dynamic-import-name-warn/_expected/system/main.js +++ /dev/null @@ -1,10 +0,0 @@ -System.register([], function (exports, module) { - 'use strict'; - return { - execute: function () { - - module.import('./foo.js'); - - } - }; -}); diff --git a/test/function/samples/dynamic-import-name/_expected/amd/main.js b/test/function/samples/dynamic-import-name/_expected/amd/main.js deleted file mode 100644 index b81e4d74b05..00000000000 --- a/test/function/samples/dynamic-import-name/_expected/amd/main.js +++ /dev/null @@ -1,5 +0,0 @@ -define(['require'], function (require) { 'use strict'; - - new Promise(function (resolve, reject) { require(['./foo.js'], resolve, reject) }); - -}); diff --git a/test/function/samples/dynamic-import-name/_expected/cjs/main.js b/test/function/samples/dynamic-import-name/_expected/cjs/main.js deleted file mode 100644 index b1acd589703..00000000000 --- a/test/function/samples/dynamic-import-name/_expected/cjs/main.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -Promise.resolve(require('./foo.js')); diff --git a/test/function/samples/dynamic-import-name/_expected/es/main.js b/test/function/samples/dynamic-import-name/_expected/es/main.js deleted file mode 100644 index 51e216a3931..00000000000 --- a/test/function/samples/dynamic-import-name/_expected/es/main.js +++ /dev/null @@ -1 +0,0 @@ -foobar('./foo.js'); diff --git a/test/function/samples/dynamic-import-name/_expected/system/main.js b/test/function/samples/dynamic-import-name/_expected/system/main.js deleted file mode 100644 index 0824bad8d3f..00000000000 --- a/test/function/samples/dynamic-import-name/_expected/system/main.js +++ /dev/null @@ -1,10 +0,0 @@ -System.register([], function (exports, module) { - 'use strict'; - return { - execute: function () { - - module.import('./foo.js'); - - } - }; -}); diff --git a/test/function/samples/error-missing-umd-name/_config.js b/test/function/samples/error-missing-umd-name/_config.js new file mode 100644 index 00000000000..04cf5eb68a7 --- /dev/null +++ b/test/function/samples/error-missing-umd-name/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'throws an error if no name is provided for a UMD bundle', + options: { output: { format: 'umd' } }, + generateError: { + code: 'INVALID_OPTION', + message: 'You must supply "output.name" for UMD bundles.' + } +}; diff --git a/test/function/samples/error-missing-umd-name/main.js b/test/function/samples/error-missing-umd-name/main.js new file mode 100644 index 00000000000..310d1059fd1 --- /dev/null +++ b/test/function/samples/error-missing-umd-name/main.js @@ -0,0 +1 @@ +export const x = 42; diff --git a/test/function/samples/side-effects-only-default-exports/_expected/amd.js b/test/function/samples/side-effects-only-default-exports/_expected/amd.js deleted file mode 100644 index 308b0b8c7bc..00000000000 --- a/test/function/samples/side-effects-only-default-exports/_expected/amd.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function () { 'use strict'; - - var a = () => { - console.log('props'); - }; - - a(); - a(); - -}); diff --git a/test/function/samples/side-effects-only-default-exports/_expected/cjs.js b/test/function/samples/side-effects-only-default-exports/_expected/cjs.js deleted file mode 100644 index 4b1f7113031..00000000000 --- a/test/function/samples/side-effects-only-default-exports/_expected/cjs.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var a = () => { - console.log('props'); -}; - -a(); -a(); diff --git a/test/function/samples/side-effects-only-default-exports/_expected/es.js b/test/function/samples/side-effects-only-default-exports/_expected/es.js deleted file mode 100644 index c387edcca09..00000000000 --- a/test/function/samples/side-effects-only-default-exports/_expected/es.js +++ /dev/null @@ -1,6 +0,0 @@ -var a = () => { - console.log('props'); -}; - -a(); -a(); diff --git a/test/function/samples/side-effects-only-default-exports/_expected/iife.js b/test/function/samples/side-effects-only-default-exports/_expected/iife.js deleted file mode 100644 index 46c38fba33b..00000000000 --- a/test/function/samples/side-effects-only-default-exports/_expected/iife.js +++ /dev/null @@ -1,11 +0,0 @@ -(function () { - 'use strict'; - - var a = () => { - console.log('props'); - }; - - a(); - a(); - -}()); diff --git a/test/function/samples/side-effects-only-default-exports/_expected/system.js b/test/function/samples/side-effects-only-default-exports/_expected/system.js deleted file mode 100644 index 6af303a682b..00000000000 --- a/test/function/samples/side-effects-only-default-exports/_expected/system.js +++ /dev/null @@ -1,15 +0,0 @@ -System.register([], function (exports, module) { - 'use strict'; - return { - execute: function () { - - var a = () => { - console.log('props'); - }; - - a(); - a(); - - } - }; -}); diff --git a/test/function/samples/side-effects-only-default-exports/_expected/umd.js b/test/function/samples/side-effects-only-default-exports/_expected/umd.js deleted file mode 100644 index 611df0c41da..00000000000 --- a/test/function/samples/side-effects-only-default-exports/_expected/umd.js +++ /dev/null @@ -1,14 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory() : - typeof define === 'function' && define.amd ? define(factory) : - (factory()); -}(this, (function () { 'use strict'; - - var a = () => { - console.log('props'); - }; - - a(); - a(); - -}))); diff --git a/test/function/samples/warn-missing-iife-name/_config.js b/test/function/samples/warn-missing-iife-name/_config.js new file mode 100644 index 00000000000..2326bd1f959 --- /dev/null +++ b/test/function/samples/warn-missing-iife-name/_config.js @@ -0,0 +1,10 @@ +module.exports = { + description: 'warns if no name is provided for an IIFE bundle', + options: { output: { format: 'iife' } }, + warnings: [ + { + message: + 'If you do not supply "output.name", you may not be able to access the exports of an IIFE bundle.' + } + ] +}; diff --git a/test/function/samples/warn-missing-iife-name/main.js b/test/function/samples/warn-missing-iife-name/main.js new file mode 100644 index 00000000000..310d1059fd1 --- /dev/null +++ b/test/function/samples/warn-missing-iife-name/main.js @@ -0,0 +1 @@ +export const x = 42; diff --git a/test/misc/write-bundle.js b/test/misc/write-bundle.js index decb030012e..6df9bf9bcff 100644 --- a/test/misc/write-bundle.js +++ b/test/misc/write-bundle.js @@ -25,42 +25,6 @@ describe('bundle.write()', () => { }); }); - it('expects output.name for IIFE and UMD bundles', () => { - let bundle; - - return rollup - .rollup({ - input: 'x', - plugins: [ - { - resolveId: () => 'test', - load: () => 'export var foo = 42;' - } - ] - }) - .then(rollupInstance => { - bundle = rollupInstance; - return bundle.generate({ - format: 'umd' - }); - }) - .catch(err => { - assert.throws(() => { - throw err; - }, /You must supply "output\.name" for UMD bundles/); - }) - .then(() => { - return bundle.generate({ - format: 'iife' - }); - }) - .catch(err => { - assert.throws(() => { - throw err; - }, /You must supply "output\.name" for IIFE bundles/); - }); - }); - it('throws on es6 format', () => { return rollup .rollup({