diff --git a/src/finalisers/shared/getExportBlock.ts b/src/finalisers/shared/getExportBlock.ts index 05beb20173c..001b1305d1a 100644 --- a/src/finalisers/shared/getExportBlock.ts +++ b/src/finalisers/shared/getExportBlock.ts @@ -11,28 +11,20 @@ export default function getExportBlock( ) { const _ = compact ? '' : ' '; const n = compact ? '' : '\n'; - if (!namedExportsMode) { let local; - exports.some(expt => { - if (expt.exported === 'default') { - local = expt.local; - return true; + if (exports.length > 0) { + local = exports[0].local; + } else { + for (const dep of dependencies) { + if (dep.reexports) { + const expt = dep.reexports[0]; + local = + dep.namedExportsMode && expt.imported !== '*' && expt.imported !== 'default' + ? `${dep.name}.${expt.imported}` + : dep.name; + } } - return false; - }); - // search for reexported default otherwise - if (!local) { - dependencies.some(dep => { - if (!dep.reexports) return false; - return dep.reexports.some(expt => { - if (expt.reexported === 'default') { - local = dep.namedExportsMode && expt.imported !== '*' ? `${dep.name}.${expt.imported}` : dep.name; - return true; - } - return false; - }); - }); } return `${mechanism}${local};`; } @@ -44,7 +36,7 @@ export default function getExportBlock( if (reexports && namedExportsMode) { reexports.forEach(specifier => { if (specifier.reexported === '*') { - if (!compact && exportBlock) exportBlock += '\n'; + if (exportBlock) exportBlock += n; if (specifier.needsLiveBinding) { exportBlock += `Object.keys(${name}).forEach(function${_}(k)${_}{${n}` + @@ -63,60 +55,61 @@ export default function getExportBlock( } }); - dependencies.forEach( - ({ name, imports, reexports, isChunk, namedExportsMode: depNamedExportsMode }) => { - if (reexports && namedExportsMode) { - reexports.forEach(specifier => { - if (specifier.imported === 'default' && !isChunk) { - const exportsNamesOrNamespace = - (imports && imports.some(specifier => specifier.imported !== 'default')) || - (reexports && - reexports.some( - specifier => specifier.imported !== 'default' && specifier.imported !== '*' - )); - - const reexportsDefaultAsDefault = - reexports && - reexports.some( - specifier => specifier.imported === 'default' && specifier.reexported === 'default' - ); - - if (exportBlock && !compact) exportBlock += '\n'; - if (exportsNamesOrNamespace || reexportsDefaultAsDefault) - exportBlock += `exports.${specifier.reexported}${_}=${_}${name}${ - interop !== false ? '__default' : '.default' - };`; - else exportBlock += `exports.${specifier.reexported}${_}=${_}${name};`; - } else if (specifier.imported !== '*') { - if (exportBlock && !compact) exportBlock += '\n'; - const importName = - specifier.imported === 'default' && !depNamedExportsMode - ? name - : `${name}.${specifier.imported}`; - exportBlock += specifier.needsLiveBinding - ? `Object.defineProperty(exports,${_}'${specifier.reexported}',${_}{${n}` + - `${t}enumerable:${_}true,${n}` + - `${t}get:${_}function${_}()${_}{${n}` + - `${t}${t}return ${importName};${n}${t}}${n}});` - : `exports.${specifier.reexported}${_}=${_}${importName};`; - } else if (specifier.reexported !== '*') { - if (exportBlock && !compact) exportBlock += '\n'; + for (const { + name, + imports, + reexports, + isChunk, + namedExportsMode: depNamedExportsMode, + exportsNames + } of dependencies) { + if (reexports && namedExportsMode) { + for (const specifier of reexports) { + if (specifier.imported === 'default' && !isChunk) { + if (exportBlock) exportBlock += n; + if ( + exportsNames && + (reexports.some(specifier => + specifier.imported === 'default' + ? specifier.reexported === 'default' + : specifier.imported !== '*' + ) || + (imports && imports.some(specifier => specifier.imported !== 'default'))) + ) { + exportBlock += `exports.${specifier.reexported}${_}=${_}${name}${ + interop !== false ? '__default' : '.default' + };`; + } else { exportBlock += `exports.${specifier.reexported}${_}=${_}${name};`; } - }); + } else if (specifier.imported !== '*') { + if (exportBlock) exportBlock += n; + const importName = + specifier.imported === 'default' && !depNamedExportsMode + ? name + : `${name}.${specifier.imported}`; + exportBlock += specifier.needsLiveBinding + ? `Object.defineProperty(exports,${_}'${specifier.reexported}',${_}{${n}` + + `${t}enumerable:${_}true,${n}` + + `${t}get:${_}function${_}()${_}{${n}` + + `${t}${t}return ${importName};${n}${t}}${n}});` + : `exports.${specifier.reexported}${_}=${_}${importName};`; + } else if (specifier.reexported !== '*') { + if (exportBlock) exportBlock += n; + exportBlock += `exports.${specifier.reexported}${_}=${_}${name};`; + } } } - ); + } - exports.forEach(expt => { + for (const expt of exports) { const lhs = `exports.${expt.exported}`; const rhs = expt.local; - if (lhs === rhs) { - return; + if (lhs !== rhs) { + if (exportBlock) exportBlock += n; + exportBlock += `${lhs}${_}=${_}${rhs};`; } - if (exportBlock && !compact) exportBlock += '\n'; - exportBlock += `${lhs}${_}=${_}${rhs};`; - }); + } return exportBlock; } diff --git a/src/finalisers/shared/getInteropBlock.ts b/src/finalisers/shared/getInteropBlock.ts index 2f69a062549..3aabf076edb 100644 --- a/src/finalisers/shared/getInteropBlock.ts +++ b/src/finalisers/shared/getInteropBlock.ts @@ -6,21 +6,23 @@ export default function getInteropBlock( options: OutputOptions, varOrConst: string ) { + const _ = options.compact ? '' : ' '; + return dependencies .map(({ name, exportsNames, exportsDefault, namedExportsMode }) => { - if (!namedExportsMode) return; - - if (!exportsDefault || options.interop === false) return null; + if (!namedExportsMode || !exportsDefault || options.interop === false) return null; if (exportsNames) { - if (options.compact) - return `${varOrConst} ${name}__default='default'in ${name}?${name}['default']:${name};`; - return `${varOrConst} ${name}__default = 'default' in ${name} ? ${name}['default'] : ${name};`; + return ( + `${varOrConst} ${name}__default${_}=${_}'default'${_}in ${name}${_}?` + + `${_}${name}['default']${_}:${_}${name};` + ); } - if (options.compact) - return `${name}=${name}&&${name}.hasOwnProperty('default')?${name}['default']:${name};`; - return `${name} = ${name} && ${name}.hasOwnProperty('default') ? ${name}['default'] : ${name};`; + return ( + `${name}${_}=${_}${name}${_}&&${_}${name}.hasOwnProperty('default')${_}?` + + `${_}${name}['default']${_}:${_}${name};` + ); }) .filter(Boolean) .join(options.compact ? '' : '\n'); diff --git a/test/form/samples/namespace-import-reexport-2/_config.js b/test/form/samples/namespace-import-reexport-2/_config.js new file mode 100644 index 00000000000..a8be2ee28c8 --- /dev/null +++ b/test/form/samples/namespace-import-reexport-2/_config.js @@ -0,0 +1,10 @@ +module.exports = { + description: 'properly associate or shadow variables in and around functions', + options: { + external: ['external1', 'external2'], + output: { + globals: { external1: 'external1', external2: 'external2' }, + name: 'iife' + } + } +}; diff --git a/test/form/samples/namespace-import-reexport-2/_expected/amd.js b/test/form/samples/namespace-import-reexport-2/_expected/amd.js new file mode 100644 index 00000000000..e31cce3d95c --- /dev/null +++ b/test/form/samples/namespace-import-reexport-2/_expected/amd.js @@ -0,0 +1,15 @@ +define(['exports', 'external1', 'external2'], function (exports, external1, external2) { 'use strict'; + + + + Object.defineProperty(exports, 'x', { + enumerable: true, + get: function () { + return external1.x; + } + }); + exports.ext = external2; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/form/samples/namespace-import-reexport-2/_expected/cjs.js b/test/form/samples/namespace-import-reexport-2/_expected/cjs.js new file mode 100644 index 00000000000..0b768501fdc --- /dev/null +++ b/test/form/samples/namespace-import-reexport-2/_expected/cjs.js @@ -0,0 +1,16 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var external1 = require('external1'); +var external2 = require('external2'); + + + +Object.defineProperty(exports, 'x', { + enumerable: true, + get: function () { + return external1.x; + } +}); +exports.ext = external2; diff --git a/test/form/samples/namespace-import-reexport-2/_expected/es.js b/test/form/samples/namespace-import-reexport-2/_expected/es.js new file mode 100644 index 00000000000..9ea9b96dc05 --- /dev/null +++ b/test/form/samples/namespace-import-reexport-2/_expected/es.js @@ -0,0 +1,3 @@ +export { x } from 'external1'; +import * as external2 from 'external2'; +export { external2 as ext }; diff --git a/test/form/samples/namespace-import-reexport-2/_expected/iife.js b/test/form/samples/namespace-import-reexport-2/_expected/iife.js new file mode 100644 index 00000000000..d9c4fd7c415 --- /dev/null +++ b/test/form/samples/namespace-import-reexport-2/_expected/iife.js @@ -0,0 +1,16 @@ +var iife = (function (exports, external1, external2) { + 'use strict'; + + + + Object.defineProperty(exports, 'x', { + enumerable: true, + get: function () { + return external1.x; + } + }); + exports.ext = external2; + + return exports; + +}({}, external1, external2)); diff --git a/test/form/samples/namespace-import-reexport-2/_expected/system.js b/test/form/samples/namespace-import-reexport-2/_expected/system.js new file mode 100644 index 00000000000..9da3b2bee66 --- /dev/null +++ b/test/form/samples/namespace-import-reexport-2/_expected/system.js @@ -0,0 +1,15 @@ +System.register('iife', ['external1', 'external2'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('x', module.x); + }, function (module) { + exports('ext', module); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/form/samples/namespace-import-reexport-2/_expected/umd.js b/test/form/samples/namespace-import-reexport-2/_expected/umd.js new file mode 100644 index 00000000000..f42e0602048 --- /dev/null +++ b/test/form/samples/namespace-import-reexport-2/_expected/umd.js @@ -0,0 +1,17 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external1'), require('external2')) : + typeof define === 'function' && define.amd ? define(['exports', 'external1', 'external2'], factory) : + (global = global || self, factory(global.iife = {}, global.external1, global.external2)); +}(this, function (exports, external1, external2) { 'use strict'; + + Object.defineProperty(exports, 'x', { + enumerable: true, + get: function () { + return external1.x; + } + }); + exports.ext = external2; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/test/form/samples/namespace-import-reexport-2/main.js b/test/form/samples/namespace-import-reexport-2/main.js new file mode 100644 index 00000000000..90201693a81 --- /dev/null +++ b/test/form/samples/namespace-import-reexport-2/main.js @@ -0,0 +1,3 @@ +export { x } from 'external1'; +import * as ext from 'external2'; +export { ext }; diff --git a/test/form/samples/re-export-default-external-as-default/_config.js b/test/form/samples/re-export-default-external-as-default/_config.js deleted file mode 100644 index c4ec766d6b2..00000000000 --- a/test/form/samples/re-export-default-external-as-default/_config.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - description: 're-exports a default external import as default export (when using named exports)', - options: { - output: { - globals: { external: 'external' }, - name: 'reexportsDefaultExternalAsDefault', - exports: 'named' - }, - external: ['external'] - } -}; diff --git a/test/form/samples/re-export-default-external/_config.js b/test/form/samples/re-export-default-external/_config.js deleted file mode 100644 index 1a259e389ca..00000000000 --- a/test/form/samples/re-export-default-external/_config.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - description: 're-exports a default import', - options: { - output: { - globals: { external: 'external' }, - name: 'reexportsDefaultExternal' - }, - external: ['external'] - } -}; diff --git a/test/form/samples/reexport-external-default-and-name/_config.js b/test/form/samples/reexport-external-default-and-name/_config.js new file mode 100644 index 00000000000..6e8c12c648f --- /dev/null +++ b/test/form/samples/reexport-external-default-and-name/_config.js @@ -0,0 +1,12 @@ +module.exports = { + description: + 'reexports a an external default as a name and imports another name from that dependency', + expectedWarnings: ['MIXED_EXPORTS'], + options: { + external: ['external'], + output: { + globals: { external: 'external' }, + name: 'bundle' + } + } +}; diff --git a/test/form/samples/reexport-external-default-and-name/_expected/amd.js b/test/form/samples/reexport-external-default-and-name/_expected/amd.js new file mode 100644 index 00000000000..6884f896916 --- /dev/null +++ b/test/form/samples/reexport-external-default-and-name/_expected/amd.js @@ -0,0 +1,12 @@ +define(['exports', 'external'], function (exports, external) { 'use strict'; + + external = external && external.hasOwnProperty('default') ? external['default'] : external; + + const value = 42; + + exports.default = external; + exports.value = value; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/form/samples/reexport-external-default-and-name/_expected/cjs.js b/test/form/samples/reexport-external-default-and-name/_expected/cjs.js new file mode 100644 index 00000000000..afdcda8ee27 --- /dev/null +++ b/test/form/samples/reexport-external-default-and-name/_expected/cjs.js @@ -0,0 +1,12 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var external = _interopDefault(require('external')); + +const value = 42; + +exports.default = external; +exports.value = value; diff --git a/test/form/samples/reexport-external-default-and-name/_expected/es.js b/test/form/samples/reexport-external-default-and-name/_expected/es.js new file mode 100644 index 00000000000..7d95a1b2203 --- /dev/null +++ b/test/form/samples/reexport-external-default-and-name/_expected/es.js @@ -0,0 +1,5 @@ +export { default } from 'external'; + +const value = 42; + +export { value }; diff --git a/test/form/samples/reexport-external-default-and-name/_expected/iife.js b/test/form/samples/reexport-external-default-and-name/_expected/iife.js new file mode 100644 index 00000000000..bd001fe2f10 --- /dev/null +++ b/test/form/samples/reexport-external-default-and-name/_expected/iife.js @@ -0,0 +1,13 @@ +var bundle = (function (exports, external) { + 'use strict'; + + external = external && external.hasOwnProperty('default') ? external['default'] : external; + + const value = 42; + + exports.default = external; + exports.value = value; + + return exports; + +}({}, external)); diff --git a/test/form/samples/reexport-external-default-and-name/_expected/system.js b/test/form/samples/reexport-external-default-and-name/_expected/system.js new file mode 100644 index 00000000000..8791e72c586 --- /dev/null +++ b/test/form/samples/reexport-external-default-and-name/_expected/system.js @@ -0,0 +1,13 @@ +System.register('bundle', ['external'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('default', module.default); + }], + execute: function () { + + const value = exports('value', 42); + + } + }; +}); diff --git a/test/form/samples/reexport-external-default-and-name/_expected/umd.js b/test/form/samples/reexport-external-default-and-name/_expected/umd.js new file mode 100644 index 00000000000..7b502be23da --- /dev/null +++ b/test/form/samples/reexport-external-default-and-name/_expected/umd.js @@ -0,0 +1,16 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : + typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : + (global = global || self, factory(global.bundle = {}, global.external)); +}(this, function (exports, external) { 'use strict'; + + external = external && external.hasOwnProperty('default') ? external['default'] : external; + + const value = 42; + + exports.default = external; + exports.value = value; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/test/form/samples/reexport-external-default-and-name/main.js b/test/form/samples/reexport-external-default-and-name/main.js new file mode 100644 index 00000000000..804917476db --- /dev/null +++ b/test/form/samples/reexport-external-default-and-name/main.js @@ -0,0 +1,2 @@ +export { default } from 'external'; +export const value = 42; diff --git a/test/form/samples/reexport-external-default-and-namespace/_config.js b/test/form/samples/reexport-external-default-and-namespace/_config.js new file mode 100644 index 00000000000..6af73286dd4 --- /dev/null +++ b/test/form/samples/reexport-external-default-and-namespace/_config.js @@ -0,0 +1,11 @@ +module.exports = { + description: 'reexports a default external import as default export (when using named exports)', + options: { + output: { + globals: { external: 'external' }, + name: 'bundle', + exports: 'named' + }, + external: ['external'] + } +}; diff --git a/test/form/samples/re-export-default-external-as-default/_expected/amd.js b/test/form/samples/reexport-external-default-and-namespace/_expected/amd.js similarity index 100% rename from test/form/samples/re-export-default-external-as-default/_expected/amd.js rename to test/form/samples/reexport-external-default-and-namespace/_expected/amd.js diff --git a/test/form/samples/re-export-default-external-as-default/_expected/cjs.js b/test/form/samples/reexport-external-default-and-namespace/_expected/cjs.js similarity index 100% rename from test/form/samples/re-export-default-external-as-default/_expected/cjs.js rename to test/form/samples/reexport-external-default-and-namespace/_expected/cjs.js diff --git a/test/form/samples/re-export-default-external-as-default/_expected/es.js b/test/form/samples/reexport-external-default-and-namespace/_expected/es.js similarity index 100% rename from test/form/samples/re-export-default-external-as-default/_expected/es.js rename to test/form/samples/reexport-external-default-and-namespace/_expected/es.js diff --git a/test/form/samples/re-export-default-external-as-default/_expected/iife.js b/test/form/samples/reexport-external-default-and-namespace/_expected/iife.js similarity index 83% rename from test/form/samples/re-export-default-external-as-default/_expected/iife.js rename to test/form/samples/reexport-external-default-and-namespace/_expected/iife.js index e8abf1dbe07..439dafcadd0 100644 --- a/test/form/samples/re-export-default-external-as-default/_expected/iife.js +++ b/test/form/samples/reexport-external-default-and-namespace/_expected/iife.js @@ -1,4 +1,4 @@ -var reexportsDefaultExternalAsDefault = (function (exports, external) { +var bundle = (function (exports, external) { 'use strict'; var external__default = 'default' in external ? external['default'] : external; diff --git a/test/form/samples/re-export-default-external-as-default/_expected/system.js b/test/form/samples/reexport-external-default-and-namespace/_expected/system.js similarity index 77% rename from test/form/samples/re-export-default-external-as-default/_expected/system.js rename to test/form/samples/reexport-external-default-and-namespace/_expected/system.js index 5e411938e62..35e2ee4b4a8 100644 --- a/test/form/samples/re-export-default-external-as-default/_expected/system.js +++ b/test/form/samples/reexport-external-default-and-namespace/_expected/system.js @@ -1,4 +1,4 @@ -System.register('reexportsDefaultExternalAsDefault', ['external'], function (exports) { +System.register('bundle', ['external'], function (exports) { 'use strict'; var _starExcludes = { default: 1 }; return { diff --git a/test/form/samples/re-export-default-external-as-default/_expected/umd.js b/test/form/samples/reexport-external-default-and-namespace/_expected/umd.js similarity index 86% rename from test/form/samples/re-export-default-external-as-default/_expected/umd.js rename to test/form/samples/reexport-external-default-and-namespace/_expected/umd.js index a4a1a434e88..ae54b6806bc 100644 --- a/test/form/samples/re-export-default-external-as-default/_expected/umd.js +++ b/test/form/samples/reexport-external-default-and-namespace/_expected/umd.js @@ -1,7 +1,7 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : - (global = global || self, factory(global.reexportsDefaultExternalAsDefault = {}, global.external)); + (global = global || self, factory(global.bundle = {}, global.external)); }(this, function (exports, external) { 'use strict'; var external__default = 'default' in external ? external['default'] : external; diff --git a/test/form/samples/re-export-default-external-as-default/main.js b/test/form/samples/reexport-external-default-and-namespace/main.js similarity index 100% rename from test/form/samples/re-export-default-external-as-default/main.js rename to test/form/samples/reexport-external-default-and-namespace/main.js diff --git a/test/form/samples/reexport-external-default-as-name-and-name/_config.js b/test/form/samples/reexport-external-default-as-name-and-name/_config.js new file mode 100644 index 00000000000..5ccfb6e52a1 --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/_config.js @@ -0,0 +1,11 @@ +module.exports = { + description: 're-exports a named external export as default', + expectedWarnings: ['MIXED_EXPORTS'], + options: { + external: ['external'], + output: { + globals: { external: 'external' }, + name: 'bundle' + } + } +}; diff --git a/test/form/samples/reexport-external-default-as-name-and-name/_expected/amd.js b/test/form/samples/reexport-external-default-as-name-and-name/_expected/amd.js new file mode 100644 index 00000000000..f7d2f9738b6 --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/_expected/amd.js @@ -0,0 +1,11 @@ +define(['exports', 'external'], function (exports, external) { 'use strict'; + + var external__default = 'default' in external ? external['default'] : external; + + console.log(external.value); + + exports.reexported = external__default; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/form/samples/reexport-external-default-as-name-and-name/_expected/cjs.js b/test/form/samples/reexport-external-default-as-name-and-name/_expected/cjs.js new file mode 100644 index 00000000000..bc9957bb8ba --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/_expected/cjs.js @@ -0,0 +1,12 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var external = require('external'); +var external__default = _interopDefault(external); + +console.log(external.value); + +exports.reexported = external__default; diff --git a/test/form/samples/reexport-external-default-as-name-and-name/_expected/es.js b/test/form/samples/reexport-external-default-as-name-and-name/_expected/es.js new file mode 100644 index 00000000000..f1f07c98fff --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/_expected/es.js @@ -0,0 +1,4 @@ +import { value } from 'external'; +export { default as reexported } from 'external'; + +console.log(value); diff --git a/test/form/samples/reexport-external-default-as-name-and-name/_expected/iife.js b/test/form/samples/reexport-external-default-as-name-and-name/_expected/iife.js new file mode 100644 index 00000000000..30afb56f290 --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/_expected/iife.js @@ -0,0 +1,12 @@ +var bundle = (function (exports, external) { + 'use strict'; + + var external__default = 'default' in external ? external['default'] : external; + + console.log(external.value); + + exports.reexported = external__default; + + return exports; + +}({}, external)); diff --git a/test/form/samples/reexport-external-default-as-name-and-name/_expected/system.js b/test/form/samples/reexport-external-default-as-name-and-name/_expected/system.js new file mode 100644 index 00000000000..1b3c4676de4 --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/_expected/system.js @@ -0,0 +1,15 @@ +System.register('bundle', ['external'], function (exports) { + 'use strict'; + var value; + return { + setters: [function (module) { + value = module.value; + exports('reexported', module.default); + }], + execute: function () { + + console.log(value); + + } + }; +}); diff --git a/test/form/samples/reexports-name-from-external/_expected/umd.js b/test/form/samples/reexport-external-default-as-name-and-name/_expected/umd.js similarity index 60% rename from test/form/samples/reexports-name-from-external/_expected/umd.js rename to test/form/samples/reexport-external-default-as-name-and-name/_expected/umd.js index b0d5278f377..063e89a0d64 100644 --- a/test/form/samples/reexports-name-from-external/_expected/umd.js +++ b/test/form/samples/reexport-external-default-as-name-and-name/_expected/umd.js @@ -1,15 +1,14 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : - (global = global || self, factory(global.myBundle = {}, global.external)); + (global = global || self, factory(global.bundle = {}, global.external)); }(this, function (exports, external) { 'use strict'; - Object.defineProperty(exports, 'foo', { - enumerable: true, - get: function () { - return external.foo; - } - }); + var external__default = 'default' in external ? external['default'] : external; + + console.log(external.value); + + exports.reexported = external__default; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/form/samples/reexport-external-default-as-name-and-name/main.js b/test/form/samples/reexport-external-default-as-name-and-name/main.js new file mode 100644 index 00000000000..3612bf7cfac --- /dev/null +++ b/test/form/samples/reexport-external-default-as-name-and-name/main.js @@ -0,0 +1,3 @@ +export { default as reexported } from 'external'; +import {value} from 'external'; +console.log(value); diff --git a/test/form/samples/reexport-external-default/_config.js b/test/form/samples/reexport-external-default/_config.js new file mode 100644 index 00000000000..17dee117ebb --- /dev/null +++ b/test/form/samples/reexport-external-default/_config.js @@ -0,0 +1,10 @@ +module.exports = { + description: 'reexports an external default export', + options: { + external: ['external1', 'external2'], + output: { + globals: { external1: 'external1', external2: 'external2' }, + name: 'bundle' + } + } +}; diff --git a/test/form/samples/reexport-external-default/_expected/amd.js b/test/form/samples/reexport-external-default/_expected/amd.js new file mode 100644 index 00000000000..44863dc1288 --- /dev/null +++ b/test/form/samples/reexport-external-default/_expected/amd.js @@ -0,0 +1,9 @@ +define(['external1', 'external2'], function (external1, external2) { 'use strict'; + + external2 = external2 && external2.hasOwnProperty('default') ? external2['default'] : external2; + + console.log(external1.foo); + + return external2; + +}); diff --git a/test/form/samples/reexport-external-default/_expected/cjs.js b/test/form/samples/reexport-external-default/_expected/cjs.js new file mode 100644 index 00000000000..fce42369eb4 --- /dev/null +++ b/test/form/samples/reexport-external-default/_expected/cjs.js @@ -0,0 +1,10 @@ +'use strict'; + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var external1 = require('external1'); +var external2 = _interopDefault(require('external2')); + +console.log(external1.foo); + +module.exports = external2; diff --git a/test/form/samples/reexport-external-default/_expected/es.js b/test/form/samples/reexport-external-default/_expected/es.js new file mode 100644 index 00000000000..294b431269c --- /dev/null +++ b/test/form/samples/reexport-external-default/_expected/es.js @@ -0,0 +1,4 @@ +import { foo } from 'external1'; +export { default } from 'external2'; + +console.log(foo); diff --git a/test/form/samples/reexport-external-default/_expected/iife.js b/test/form/samples/reexport-external-default/_expected/iife.js new file mode 100644 index 00000000000..7d9a819618e --- /dev/null +++ b/test/form/samples/reexport-external-default/_expected/iife.js @@ -0,0 +1,10 @@ +var bundle = (function (external1, external2) { + 'use strict'; + + external2 = external2 && external2.hasOwnProperty('default') ? external2['default'] : external2; + + console.log(external1.foo); + + return external2; + +}(external1, external2)); diff --git a/test/form/samples/reexport-external-default/_expected/system.js b/test/form/samples/reexport-external-default/_expected/system.js new file mode 100644 index 00000000000..42d170c3da2 --- /dev/null +++ b/test/form/samples/reexport-external-default/_expected/system.js @@ -0,0 +1,16 @@ +System.register('bundle', ['external1', 'external2'], function (exports) { + 'use strict'; + var foo; + return { + setters: [function (module) { + foo = module.foo; + }, function (module) { + exports('default', module.default); + }], + execute: function () { + + console.log(foo); + + } + }; +}); diff --git a/test/form/samples/reexport-external-default/_expected/umd.js b/test/form/samples/reexport-external-default/_expected/umd.js new file mode 100644 index 00000000000..c50e069feca --- /dev/null +++ b/test/form/samples/reexport-external-default/_expected/umd.js @@ -0,0 +1,13 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('external1'), require('external2')) : + typeof define === 'function' && define.amd ? define(['external1', 'external2'], factory) : + (global = global || self, global.bundle = factory(global.external1, global.external2)); +}(this, function (external1, external2) { 'use strict'; + + external2 = external2 && external2.hasOwnProperty('default') ? external2['default'] : external2; + + console.log(external1.foo); + + return external2; + +})); diff --git a/test/form/samples/reexport-external-default/main.js b/test/form/samples/reexport-external-default/main.js new file mode 100644 index 00000000000..ee66642e983 --- /dev/null +++ b/test/form/samples/reexport-external-default/main.js @@ -0,0 +1,3 @@ +import { foo } from 'external1'; +export { default } from 'external2'; +console.log(foo); diff --git a/test/form/samples/reexports-name-from-external/_config.js b/test/form/samples/reexport-external-name-as-default/_config.js similarity index 59% rename from test/form/samples/reexports-name-from-external/_config.js rename to test/form/samples/reexport-external-name-as-default/_config.js index 002f1649b1c..76bfd0844be 100644 --- a/test/form/samples/reexports-name-from-external/_config.js +++ b/test/form/samples/reexport-external-name-as-default/_config.js @@ -1,10 +1,10 @@ module.exports = { - description: 're-exports name from external module', + description: 're-exports a named external export as default', options: { external: ['external'], output: { globals: { external: 'external' }, - name: 'myBundle' + name: 'bundle' } } }; diff --git a/test/form/samples/reexport-external-name-as-default/_expected/amd.js b/test/form/samples/reexport-external-name-as-default/_expected/amd.js new file mode 100644 index 00000000000..ccae8803919 --- /dev/null +++ b/test/form/samples/reexport-external-name-as-default/_expected/amd.js @@ -0,0 +1,7 @@ +define(['external'], function (external) { 'use strict'; + + + + return external.value; + +}); diff --git a/test/form/samples/reexport-external-name-as-default/_expected/cjs.js b/test/form/samples/reexport-external-name-as-default/_expected/cjs.js new file mode 100644 index 00000000000..760a57c17d3 --- /dev/null +++ b/test/form/samples/reexport-external-name-as-default/_expected/cjs.js @@ -0,0 +1,7 @@ +'use strict'; + +var external = require('external'); + + + +module.exports = external.value; diff --git a/test/form/samples/reexport-external-name-as-default/_expected/es.js b/test/form/samples/reexport-external-name-as-default/_expected/es.js new file mode 100644 index 00000000000..44f45020388 --- /dev/null +++ b/test/form/samples/reexport-external-name-as-default/_expected/es.js @@ -0,0 +1 @@ +export { value as default } from 'external'; diff --git a/test/form/samples/reexport-external-name-as-default/_expected/iife.js b/test/form/samples/reexport-external-name-as-default/_expected/iife.js new file mode 100644 index 00000000000..fc92c34817f --- /dev/null +++ b/test/form/samples/reexport-external-name-as-default/_expected/iife.js @@ -0,0 +1,8 @@ +var bundle = (function (external) { + 'use strict'; + + + + return external.value; + +}(external)); diff --git a/test/form/samples/reexports-name-from-external/_expected/system.js b/test/form/samples/reexport-external-name-as-default/_expected/system.js similarity index 51% rename from test/form/samples/reexports-name-from-external/_expected/system.js rename to test/form/samples/reexport-external-name-as-default/_expected/system.js index dbb57734310..3c99a21cd8d 100644 --- a/test/form/samples/reexports-name-from-external/_expected/system.js +++ b/test/form/samples/reexport-external-name-as-default/_expected/system.js @@ -1,8 +1,8 @@ -System.register('myBundle', ['external'], function (exports) { +System.register('bundle', ['external'], function (exports) { 'use strict'; return { setters: [function (module) { - exports('foo', module.foo); + exports('default', module.value); }], execute: function () { diff --git a/test/form/samples/reexport-external-name-as-default/_expected/umd.js b/test/form/samples/reexport-external-name-as-default/_expected/umd.js new file mode 100644 index 00000000000..310cc530610 --- /dev/null +++ b/test/form/samples/reexport-external-name-as-default/_expected/umd.js @@ -0,0 +1,9 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('external')) : + typeof define === 'function' && define.amd ? define(['external'], factory) : + (global = global || self, global.bundle = factory(global.external)); +}(this, function (external) { 'use strict'; + + return external.value; + +})); diff --git a/test/form/samples/reexport-external-name-as-default/main.js b/test/form/samples/reexport-external-name-as-default/main.js new file mode 100644 index 00000000000..44f45020388 --- /dev/null +++ b/test/form/samples/reexport-external-name-as-default/main.js @@ -0,0 +1 @@ +export { value as default } from 'external'; diff --git a/test/form/samples/reexport-external-name-as-default2/_config.js b/test/form/samples/reexport-external-name-as-default2/_config.js new file mode 100644 index 00000000000..ca3e78aa86f --- /dev/null +++ b/test/form/samples/reexport-external-name-as-default2/_config.js @@ -0,0 +1,10 @@ +module.exports = { + description: 're-exports a named external export as default via another file', + options: { + external: ['external'], + output: { + globals: { external: 'external' }, + name: 'bundle' + } + } +}; diff --git a/test/form/samples/re-export-default-external/_expected/amd.js b/test/form/samples/reexport-external-name-as-default2/_expected/amd.js similarity index 100% rename from test/form/samples/re-export-default-external/_expected/amd.js rename to test/form/samples/reexport-external-name-as-default2/_expected/amd.js diff --git a/test/form/samples/re-export-default-external/_expected/cjs.js b/test/form/samples/reexport-external-name-as-default2/_expected/cjs.js similarity index 100% rename from test/form/samples/re-export-default-external/_expected/cjs.js rename to test/form/samples/reexport-external-name-as-default2/_expected/cjs.js diff --git a/test/form/samples/re-export-default-external/_expected/es.js b/test/form/samples/reexport-external-name-as-default2/_expected/es.js similarity index 100% rename from test/form/samples/re-export-default-external/_expected/es.js rename to test/form/samples/reexport-external-name-as-default2/_expected/es.js diff --git a/test/form/samples/re-export-default-external/_expected/iife.js b/test/form/samples/reexport-external-name-as-default2/_expected/iife.js similarity index 52% rename from test/form/samples/re-export-default-external/_expected/iife.js rename to test/form/samples/reexport-external-name-as-default2/_expected/iife.js index ff349936953..10d6c813a61 100644 --- a/test/form/samples/re-export-default-external/_expected/iife.js +++ b/test/form/samples/reexport-external-name-as-default2/_expected/iife.js @@ -1,4 +1,4 @@ -var reexportsDefaultExternal = (function (external) { +var bundle = (function (external) { 'use strict'; diff --git a/test/form/samples/re-export-default-external/_expected/system.js b/test/form/samples/reexport-external-name-as-default2/_expected/system.js similarity index 64% rename from test/form/samples/re-export-default-external/_expected/system.js rename to test/form/samples/reexport-external-name-as-default2/_expected/system.js index f36d2e27e7f..9b52f598eb2 100644 --- a/test/form/samples/re-export-default-external/_expected/system.js +++ b/test/form/samples/reexport-external-name-as-default2/_expected/system.js @@ -1,4 +1,4 @@ -System.register('reexportsDefaultExternal', ['external'], function (exports) { +System.register('bundle', ['external'], function (exports) { 'use strict'; return { setters: [function (module) { diff --git a/test/form/samples/re-export-default-external/_expected/umd.js b/test/form/samples/reexport-external-name-as-default2/_expected/umd.js similarity index 77% rename from test/form/samples/re-export-default-external/_expected/umd.js rename to test/form/samples/reexport-external-name-as-default2/_expected/umd.js index d8a666e8265..908f69f1383 100644 --- a/test/form/samples/re-export-default-external/_expected/umd.js +++ b/test/form/samples/reexport-external-name-as-default2/_expected/umd.js @@ -1,7 +1,7 @@ (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.reexportsDefaultExternal = factory(global.external)); + (global = global || self, global.bundle = factory(global.external)); }(this, function (external) { 'use strict'; return external.objAlias; diff --git a/test/form/samples/re-export-default-external/first.js b/test/form/samples/reexport-external-name-as-default2/first.js similarity index 100% rename from test/form/samples/re-export-default-external/first.js rename to test/form/samples/reexport-external-name-as-default2/first.js diff --git a/test/form/samples/re-export-default-external/main.js b/test/form/samples/reexport-external-name-as-default2/main.js similarity index 100% rename from test/form/samples/re-export-default-external/main.js rename to test/form/samples/reexport-external-name-as-default2/main.js diff --git a/test/form/samples/reexport-external-name/_config.js b/test/form/samples/reexport-external-name/_config.js new file mode 100644 index 00000000000..e64e3c7b2c0 --- /dev/null +++ b/test/form/samples/reexport-external-name/_config.js @@ -0,0 +1,10 @@ +module.exports = { + description: 're-exports a named export from an external module', + options: { + external: ['external1', 'external2'], + output: { + globals: { external1: 'external1', external2: 'external2' }, + name: 'bundle' + } + } +}; diff --git a/test/form/samples/reexport-external-name/_expected/amd.js b/test/form/samples/reexport-external-name/_expected/amd.js new file mode 100644 index 00000000000..4f91cd0a717 --- /dev/null +++ b/test/form/samples/reexport-external-name/_expected/amd.js @@ -0,0 +1,20 @@ +define(['exports', 'external1', 'external2'], function (exports, external1, external2) { 'use strict'; + + + + Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { + return external1.foo; + } + }); + Object.defineProperty(exports, 'bar', { + enumerable: true, + get: function () { + return external2.foo; + } + }); + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/form/samples/reexport-external-name/_expected/cjs.js b/test/form/samples/reexport-external-name/_expected/cjs.js new file mode 100644 index 00000000000..06061bbe91c --- /dev/null +++ b/test/form/samples/reexport-external-name/_expected/cjs.js @@ -0,0 +1,21 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var external1 = require('external1'); +var external2 = require('external2'); + + + +Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { + return external1.foo; + } +}); +Object.defineProperty(exports, 'bar', { + enumerable: true, + get: function () { + return external2.foo; + } +}); diff --git a/test/form/samples/reexport-external-name/_expected/es.js b/test/form/samples/reexport-external-name/_expected/es.js new file mode 100644 index 00000000000..67604d43e4c --- /dev/null +++ b/test/form/samples/reexport-external-name/_expected/es.js @@ -0,0 +1,2 @@ +export { foo } from 'external1'; +export { foo as bar } from 'external2'; diff --git a/test/form/samples/reexport-external-name/_expected/iife.js b/test/form/samples/reexport-external-name/_expected/iife.js new file mode 100644 index 00000000000..0a1db335888 --- /dev/null +++ b/test/form/samples/reexport-external-name/_expected/iife.js @@ -0,0 +1,21 @@ +var bundle = (function (exports, external1, external2) { + 'use strict'; + + + + Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { + return external1.foo; + } + }); + Object.defineProperty(exports, 'bar', { + enumerable: true, + get: function () { + return external2.foo; + } + }); + + return exports; + +}({}, external1, external2)); diff --git a/test/form/samples/reexport-external-name/_expected/system.js b/test/form/samples/reexport-external-name/_expected/system.js new file mode 100644 index 00000000000..73367c2fca4 --- /dev/null +++ b/test/form/samples/reexport-external-name/_expected/system.js @@ -0,0 +1,15 @@ +System.register('bundle', ['external1', 'external2'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('foo', module.foo); + }, function (module) { + exports('bar', module.foo); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/form/samples/reexport-external-name/_expected/umd.js b/test/form/samples/reexport-external-name/_expected/umd.js new file mode 100644 index 00000000000..c7943baff5e --- /dev/null +++ b/test/form/samples/reexport-external-name/_expected/umd.js @@ -0,0 +1,22 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external1'), require('external2')) : + typeof define === 'function' && define.amd ? define(['exports', 'external1', 'external2'], factory) : + (global = global || self, factory(global.bundle = {}, global.external1, global.external2)); +}(this, function (exports, external1, external2) { 'use strict'; + + Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { + return external1.foo; + } + }); + Object.defineProperty(exports, 'bar', { + enumerable: true, + get: function () { + return external2.foo; + } + }); + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/test/form/samples/reexport-external-name/main.js b/test/form/samples/reexport-external-name/main.js new file mode 100644 index 00000000000..67604d43e4c --- /dev/null +++ b/test/form/samples/reexport-external-name/main.js @@ -0,0 +1,2 @@ +export { foo } from 'external1'; +export { foo as bar } from 'external2'; diff --git a/test/form/samples/reexports-from-external/_config.js b/test/form/samples/reexport-external-namespace/_config.js similarity index 89% rename from test/form/samples/reexports-from-external/_config.js rename to test/form/samples/reexport-external-namespace/_config.js index 5fb03551aa5..9ffdafe8b0f 100644 --- a/test/form/samples/reexports-from-external/_config.js +++ b/test/form/samples/reexport-external-namespace/_config.js @@ -4,7 +4,7 @@ module.exports = { external: ['external'], output: { globals: { external: 'external' }, - name: 'myBundle' + name: 'bundle' } } }; diff --git a/test/form/samples/reexports-from-external/_expected/amd.js b/test/form/samples/reexport-external-namespace/_expected/amd.js similarity index 100% rename from test/form/samples/reexports-from-external/_expected/amd.js rename to test/form/samples/reexport-external-namespace/_expected/amd.js diff --git a/test/form/samples/reexports-from-external/_expected/cjs.js b/test/form/samples/reexport-external-namespace/_expected/cjs.js similarity index 100% rename from test/form/samples/reexports-from-external/_expected/cjs.js rename to test/form/samples/reexport-external-namespace/_expected/cjs.js diff --git a/test/form/samples/reexports-from-external/_expected/es.js b/test/form/samples/reexport-external-namespace/_expected/es.js similarity index 100% rename from test/form/samples/reexports-from-external/_expected/es.js rename to test/form/samples/reexport-external-namespace/_expected/es.js diff --git a/test/form/samples/reexports-from-external/_expected/iife.js b/test/form/samples/reexport-external-namespace/_expected/iife.js similarity index 83% rename from test/form/samples/reexports-from-external/_expected/iife.js rename to test/form/samples/reexport-external-namespace/_expected/iife.js index 7d256f28988..e8785f48a07 100644 --- a/test/form/samples/reexports-from-external/_expected/iife.js +++ b/test/form/samples/reexport-external-namespace/_expected/iife.js @@ -1,4 +1,4 @@ -var myBundle = (function (exports, external) { +var bundle = (function (exports, external) { 'use strict'; diff --git a/test/form/samples/reexports-from-external/_expected/system.js b/test/form/samples/reexport-external-namespace/_expected/system.js similarity index 81% rename from test/form/samples/reexports-from-external/_expected/system.js rename to test/form/samples/reexport-external-namespace/_expected/system.js index a2b08322d73..5d92a82f4fe 100644 --- a/test/form/samples/reexports-from-external/_expected/system.js +++ b/test/form/samples/reexport-external-namespace/_expected/system.js @@ -1,4 +1,4 @@ -System.register('myBundle', ['external'], function (exports) { +System.register('bundle', ['external'], function (exports) { 'use strict'; var _starExcludes = { default: 1 }; return { diff --git a/test/form/samples/reexports-from-external/_expected/umd.js b/test/form/samples/reexport-external-namespace/_expected/umd.js similarity index 87% rename from test/form/samples/reexports-from-external/_expected/umd.js rename to test/form/samples/reexport-external-namespace/_expected/umd.js index 5f89f7b61af..0f7f7be3e78 100644 --- a/test/form/samples/reexports-from-external/_expected/umd.js +++ b/test/form/samples/reexport-external-namespace/_expected/umd.js @@ -1,7 +1,7 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : - (global = global || self, factory(global.myBundle = {}, global.external)); + (global = global || self, factory(global.bundle = {}, global.external)); }(this, function (exports, external) { 'use strict'; Object.keys(external).forEach(function (k) { diff --git a/test/form/samples/reexports-from-external/main.js b/test/form/samples/reexport-external-namespace/main.js similarity index 100% rename from test/form/samples/reexports-from-external/main.js rename to test/form/samples/reexport-external-namespace/main.js diff --git a/test/form/samples/reexports-name-from-external/_expected/amd.js b/test/form/samples/reexports-name-from-external/_expected/amd.js deleted file mode 100644 index 4642bbad96c..00000000000 --- a/test/form/samples/reexports-name-from-external/_expected/amd.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['exports', 'external'], function (exports, external) { 'use strict'; - - - - Object.defineProperty(exports, 'foo', { - enumerable: true, - get: function () { - return external.foo; - } - }); - - Object.defineProperty(exports, '__esModule', { value: true }); - -}); diff --git a/test/form/samples/reexports-name-from-external/_expected/cjs.js b/test/form/samples/reexports-name-from-external/_expected/cjs.js deleted file mode 100644 index 0fd0876a028..00000000000 --- a/test/form/samples/reexports-name-from-external/_expected/cjs.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -var external = require('external'); - - - -Object.defineProperty(exports, 'foo', { - enumerable: true, - get: function () { - return external.foo; - } -}); diff --git a/test/form/samples/reexports-name-from-external/_expected/es.js b/test/form/samples/reexports-name-from-external/_expected/es.js deleted file mode 100644 index 397e2e7780c..00000000000 --- a/test/form/samples/reexports-name-from-external/_expected/es.js +++ /dev/null @@ -1 +0,0 @@ -export { foo } from '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 deleted file mode 100644 index db9c835d04d..00000000000 --- a/test/form/samples/reexports-name-from-external/_expected/iife.js +++ /dev/null @@ -1,15 +0,0 @@ -var myBundle = (function (exports, external) { - 'use strict'; - - - - Object.defineProperty(exports, 'foo', { - enumerable: true, - get: function () { - return external.foo; - } - }); - - return exports; - -}({}, external)); diff --git a/test/form/samples/reexports-name-from-external/main.js b/test/form/samples/reexports-name-from-external/main.js deleted file mode 100644 index 8986665d702..00000000000 --- a/test/form/samples/reexports-name-from-external/main.js +++ /dev/null @@ -1 +0,0 @@ -export { foo } from 'external'; \ No newline at end of file