diff --git a/src/Chunk.ts b/src/Chunk.ts index 00a51b6d993..ee7b92ccc3c 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -126,7 +126,12 @@ export default class Chunk { if (!facadedModule.facadeChunk) { facadedModule.facadeChunk = chunk; } - chunk.dependencies.add(facadedModule.chunk!); + for (const dependency of facadedModule.getDependenciesToBeIncluded()) { + chunk.dependencies.add(dependency instanceof Module ? dependency.chunk! : dependency); + } + if (!chunk.dependencies.has(facadedModule.chunk!) && facadedModule.hasEffects()) { + chunk.dependencies.add(facadedModule.chunk!); + } chunk.facadeModule = facadedModule; chunk.strictFacade = true; return chunk; diff --git a/src/Module.ts b/src/Module.ts index c3d840e45a2..723b5e74823 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -368,10 +368,7 @@ export default class Module { const possibleDependencies = new Set(this.dependencies); for (const dependency of possibleDependencies) { if (!dependency.moduleSideEffects || relevantDependencies.has(dependency)) continue; - if ( - dependency instanceof ExternalModule || - (dependency.ast.included && dependency.ast.hasEffects(createHasEffectsContext())) - ) { + if (dependency instanceof ExternalModule || dependency.hasEffects()) { relevantDependencies.add(dependency); } else { for (const transitiveDependency of dependency.dependencies) { @@ -532,6 +529,12 @@ export default class Module { return null as any; } + hasEffects() { + return ( + this.moduleSideEffects && this.ast.included && this.ast.hasEffects(createHasEffectsContext()) + ); + } + include(): void { const context = createInclusionContext(); if (this.ast.shouldBeIncluded(context)) this.ast.include(context, false); diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts index 226da80ee99..b8d37c610cb 100644 --- a/src/ModuleLoader.ts +++ b/src/ModuleLoader.ts @@ -142,32 +142,31 @@ export class ModuleLoader { this.nextEntryModuleIndex += unresolvedEntryModules.length; const loadNewEntryModulesPromise = Promise.all( unresolvedEntryModules.map( - async ({ fileName, id, name, importer }): Promise => { - const module = await this.loadEntryModule(id, true, importer); - if (fileName !== null) { - module.chunkFileNames.add(fileName); - } else if (name !== null) { - if (module.chunkName === null) { - module.chunkName = name; - } - if (isUserDefined) { - module.userChunkNames.add(name); - } - } - return module; - } + ({ id, importer }): Promise => this.loadEntryModule(id, true, importer) ) ).then(entryModules => { let moduleIndex = firstEntryModuleIndex; - for (const entryModule of entryModules) { + for (let index = 0; index < entryModules.length; index++) { + const { fileName, name } = unresolvedEntryModules[index]; + const entryModule = entryModules[index]; entryModule.isUserDefinedEntryPoint = entryModule.isUserDefinedEntryPoint || isUserDefined; - const existingIndexModule = this.indexedEntryModules.find( + if (fileName !== null) { + entryModule.chunkFileNames.add(fileName); + } else if (name !== null) { + if (entryModule.chunkName === null) { + entryModule.chunkName = name; + } + if (isUserDefined) { + entryModule.userChunkNames.add(name); + } + } + const existingIndexedModule = this.indexedEntryModules.find( indexedModule => indexedModule.module.id === entryModule.id ); - if (!existingIndexModule) { + if (!existingIndexedModule) { this.indexedEntryModules.push({ module: entryModule, index: moduleIndex }); } else { - existingIndexModule.index = Math.min(existingIndexModule.index, moduleIndex); + existingIndexedModule.index = Math.min(existingIndexedModule.index, moduleIndex); } moduleIndex++; } diff --git a/test/chunking-form/samples/entry-aliases/_config.js b/test/chunking-form/samples/entry-aliases/_config.js new file mode 100644 index 00000000000..b34e645a489 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_config.js @@ -0,0 +1,13 @@ +module.exports = { + description: 'alias module dependency inlining', + options: { + input: { + 'main1.js': 'main1.js', + 'main1-alias.js': 'main1.js', + 'main2.js': 'main2.js' + }, + output: { + entryFileNames: '[name]' + } + } +}; diff --git a/test/chunking-form/samples/entry-aliases/_expected/amd/generated-dep.js b/test/chunking-form/samples/entry-aliases/_expected/amd/generated-dep.js new file mode 100644 index 00000000000..859f8d05dc5 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/amd/generated-dep.js @@ -0,0 +1,7 @@ +define(['exports'], function (exports) { 'use strict'; + + var name = 'name'; + + exports.name = name; + +}); diff --git a/test/chunking-form/samples/entry-aliases/_expected/amd/main1-alias.js b/test/chunking-form/samples/entry-aliases/_expected/amd/main1-alias.js new file mode 100644 index 00000000000..e91de314159 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/amd/main1-alias.js @@ -0,0 +1,9 @@ +define(['exports', './generated-dep'], function (exports, dep) { 'use strict'; + + + + exports.name = dep.name; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/entry-aliases/_expected/amd/main1.js b/test/chunking-form/samples/entry-aliases/_expected/amd/main1.js new file mode 100644 index 00000000000..e91de314159 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/amd/main1.js @@ -0,0 +1,9 @@ +define(['exports', './generated-dep'], function (exports, dep) { 'use strict'; + + + + exports.name = dep.name; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/entry-aliases/_expected/amd/main2.js b/test/chunking-form/samples/entry-aliases/_expected/amd/main2.js new file mode 100644 index 00000000000..cb9ff3e4b30 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/amd/main2.js @@ -0,0 +1,5 @@ +define(['./generated-dep'], function (dep) { 'use strict'; + + console.log(dep.name); + +}); diff --git a/test/chunking-form/samples/entry-aliases/_expected/cjs/generated-dep.js b/test/chunking-form/samples/entry-aliases/_expected/cjs/generated-dep.js new file mode 100644 index 00000000000..fe90666bb92 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/cjs/generated-dep.js @@ -0,0 +1,5 @@ +'use strict'; + +var name = 'name'; + +exports.name = name; diff --git a/test/chunking-form/samples/entry-aliases/_expected/cjs/main1-alias.js b/test/chunking-form/samples/entry-aliases/_expected/cjs/main1-alias.js new file mode 100644 index 00000000000..50083991d6f --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/cjs/main1-alias.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var dep = require('./generated-dep.js'); + + + +exports.name = dep.name; diff --git a/test/chunking-form/samples/entry-aliases/_expected/cjs/main1.js b/test/chunking-form/samples/entry-aliases/_expected/cjs/main1.js new file mode 100644 index 00000000000..50083991d6f --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/cjs/main1.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var dep = require('./generated-dep.js'); + + + +exports.name = dep.name; diff --git a/test/chunking-form/samples/entry-aliases/_expected/cjs/main2.js b/test/chunking-form/samples/entry-aliases/_expected/cjs/main2.js new file mode 100644 index 00000000000..033c5333a49 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/cjs/main2.js @@ -0,0 +1,5 @@ +'use strict'; + +var dep = require('./generated-dep.js'); + +console.log(dep.name); diff --git a/test/chunking-form/samples/entry-aliases/_expected/es/generated-dep.js b/test/chunking-form/samples/entry-aliases/_expected/es/generated-dep.js new file mode 100644 index 00000000000..83809a871df --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/es/generated-dep.js @@ -0,0 +1,3 @@ +var name = 'name'; + +export { name as n }; diff --git a/test/chunking-form/samples/entry-aliases/_expected/es/main1-alias.js b/test/chunking-form/samples/entry-aliases/_expected/es/main1-alias.js new file mode 100644 index 00000000000..a9f98d6ab2d --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/es/main1-alias.js @@ -0,0 +1 @@ +export { n as name } from './generated-dep.js'; diff --git a/test/chunking-form/samples/entry-aliases/_expected/es/main1.js b/test/chunking-form/samples/entry-aliases/_expected/es/main1.js new file mode 100644 index 00000000000..a9f98d6ab2d --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/es/main1.js @@ -0,0 +1 @@ +export { n as name } from './generated-dep.js'; diff --git a/test/chunking-form/samples/entry-aliases/_expected/es/main2.js b/test/chunking-form/samples/entry-aliases/_expected/es/main2.js new file mode 100644 index 00000000000..fc1b553e541 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/es/main2.js @@ -0,0 +1,3 @@ +import { n as name } from './generated-dep.js'; + +console.log(name); diff --git a/test/chunking-form/samples/entry-aliases/_expected/system/generated-dep.js b/test/chunking-form/samples/entry-aliases/_expected/system/generated-dep.js new file mode 100644 index 00000000000..0efb4ed6cb1 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/system/generated-dep.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var name = exports('n', 'name'); + + } + }; +}); diff --git a/test/chunking-form/samples/entry-aliases/_expected/system/main1-alias.js b/test/chunking-form/samples/entry-aliases/_expected/system/main1-alias.js new file mode 100644 index 00000000000..fa0993a1758 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/system/main1-alias.js @@ -0,0 +1,13 @@ +System.register(['./generated-dep.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('name', module.n); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/entry-aliases/_expected/system/main1.js b/test/chunking-form/samples/entry-aliases/_expected/system/main1.js new file mode 100644 index 00000000000..fa0993a1758 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/system/main1.js @@ -0,0 +1,13 @@ +System.register(['./generated-dep.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('name', module.n); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/entry-aliases/_expected/system/main2.js b/test/chunking-form/samples/entry-aliases/_expected/system/main2.js new file mode 100644 index 00000000000..eb344d8e3de --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/_expected/system/main2.js @@ -0,0 +1,14 @@ +System.register(['./generated-dep.js'], function () { + 'use strict'; + var name; + return { + setters: [function (module) { + name = module.n; + }], + execute: function () { + + console.log(name); + + } + }; +}); diff --git a/test/chunking-form/samples/entry-aliases/dep.js b/test/chunking-form/samples/entry-aliases/dep.js new file mode 100644 index 00000000000..4388de88803 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/dep.js @@ -0,0 +1 @@ +export var name = 'name'; diff --git a/test/chunking-form/samples/entry-aliases/main1.js b/test/chunking-form/samples/entry-aliases/main1.js new file mode 100644 index 00000000000..a5a8872e855 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/main1.js @@ -0,0 +1 @@ +export { name } from './dep.js'; diff --git a/test/chunking-form/samples/entry-aliases/main2.js b/test/chunking-form/samples/entry-aliases/main2.js new file mode 100644 index 00000000000..70734d97046 --- /dev/null +++ b/test/chunking-form/samples/entry-aliases/main2.js @@ -0,0 +1,2 @@ +import { name } from './dep.js'; +console.log(name); diff --git a/test/chunking-form/samples/entry-point-without-own-code/_expected/amd/m1.js b/test/chunking-form/samples/entry-point-without-own-code/_expected/amd/m1.js index b95c6ca797c..8c152a68567 100644 --- a/test/chunking-form/samples/entry-point-without-own-code/_expected/amd/m1.js +++ b/test/chunking-form/samples/entry-point-without-own-code/_expected/amd/m1.js @@ -1,4 +1,4 @@ -define(['exports', './m2', './generated-m1'], function (exports, m2, m1) { 'use strict'; +define(['exports', './m2'], function (exports, m2) { 'use strict'; diff --git a/test/chunking-form/samples/entry-point-without-own-code/_expected/cjs/m1.js b/test/chunking-form/samples/entry-point-without-own-code/_expected/cjs/m1.js index 9b97781f444..f1de24e56e2 100644 --- a/test/chunking-form/samples/entry-point-without-own-code/_expected/cjs/m1.js +++ b/test/chunking-form/samples/entry-point-without-own-code/_expected/cjs/m1.js @@ -3,7 +3,6 @@ Object.defineProperty(exports, '__esModule', { value: true }); var m2 = require('./m2.js'); -require('./generated-m1.js'); diff --git a/test/chunking-form/samples/entry-point-without-own-code/_expected/es/m1.js b/test/chunking-form/samples/entry-point-without-own-code/_expected/es/m1.js index a0461824120..2c2fbbf6215 100644 --- a/test/chunking-form/samples/entry-point-without-own-code/_expected/es/m1.js +++ b/test/chunking-form/samples/entry-point-without-own-code/_expected/es/m1.js @@ -1,2 +1 @@ export { default as m2 } from './m2.js'; -import './generated-m1.js'; diff --git a/test/chunking-form/samples/entry-point-without-own-code/_expected/system/m1.js b/test/chunking-form/samples/entry-point-without-own-code/_expected/system/m1.js index 5f74314c76e..f9644287173 100644 --- a/test/chunking-form/samples/entry-point-without-own-code/_expected/system/m1.js +++ b/test/chunking-form/samples/entry-point-without-own-code/_expected/system/m1.js @@ -1,9 +1,9 @@ -System.register(['./m2.js', './generated-m1.js'], function (exports) { +System.register(['./m2.js'], function (exports) { 'use strict'; return { setters: [function (module) { exports('m2', module.default); - }, function () {}], + }], execute: function () { diff --git a/test/form/samples/prune-pure-unused-import-array/_config.js b/test/form/samples/prune-pure-unused-import-array/_config.js new file mode 100644 index 00000000000..4d9035fa705 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-array/_config.js @@ -0,0 +1,10 @@ +module.exports = { + description: 'prunes pure unused external imports ([#1352])', + options: { + external: ['external', 'other'], + treeshake: { moduleSideEffects: ['other'] }, + output: { + globals: { other: 'other' } + } + } +}; diff --git a/test/form/samples/prune-pure-unused-import-array/_expected/amd.js b/test/form/samples/prune-pure-unused-import-array/_expected/amd.js new file mode 100644 index 00000000000..f02c330d436 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-array/_expected/amd.js @@ -0,0 +1,5 @@ +define(['other'], function (other) { 'use strict'; + + + +}); diff --git a/test/form/samples/prune-pure-unused-import-array/_expected/cjs.js b/test/form/samples/prune-pure-unused-import-array/_expected/cjs.js new file mode 100644 index 00000000000..d4c04157586 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-array/_expected/cjs.js @@ -0,0 +1,4 @@ +'use strict'; + +require('other'); + diff --git a/test/form/samples/prune-pure-unused-import-array/_expected/es.js b/test/form/samples/prune-pure-unused-import-array/_expected/es.js new file mode 100644 index 00000000000..4c6a1dd1289 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-array/_expected/es.js @@ -0,0 +1 @@ +import 'other'; diff --git a/test/form/samples/prune-pure-unused-import-array/_expected/iife.js b/test/form/samples/prune-pure-unused-import-array/_expected/iife.js new file mode 100644 index 00000000000..8435bdceb01 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-array/_expected/iife.js @@ -0,0 +1,6 @@ +(function (other) { + 'use strict'; + + + +}(other)); diff --git a/test/form/samples/prune-pure-unused-import-array/_expected/system.js b/test/form/samples/prune-pure-unused-import-array/_expected/system.js new file mode 100644 index 00000000000..44f1ac2d34d --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-array/_expected/system.js @@ -0,0 +1,11 @@ +System.register(['other'], function () { + 'use strict'; + return { + setters: [function () {}], + execute: function () { + + + + } + }; +}); 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 new file mode 100644 index 00000000000..481b0e068ab --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-array/_expected/umd.js @@ -0,0 +1,9 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('other')) : + typeof define === 'function' && define.amd ? define(['other'], factory) : + (global = global || self, factory(global.other)); +}(this, (function (other) { 'use strict'; + + + +}))); diff --git a/test/form/samples/prune-pure-unused-import-array/main.js b/test/form/samples/prune-pure-unused-import-array/main.js new file mode 100644 index 00000000000..558f459bd2a --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-array/main.js @@ -0,0 +1,7 @@ +import { unused } from 'external'; +import { notused } from 'other'; + +function alsoUnused () { + unused(); + notused(); +} diff --git a/test/form/samples/prune-pure-unused-import-function/_config.js b/test/form/samples/prune-pure-unused-import-function/_config.js new file mode 100644 index 00000000000..c682d7c9920 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-function/_config.js @@ -0,0 +1,11 @@ +module.exports = { + description: 'prunes pure unused external imports ([#1352])', + expectedWarnings: ['EMPTY_BUNDLE'], + options: { + external: ['external', 'other'], + treeshake: { moduleSideEffects: id => id !== 'external' }, + output: { + globals: { other: 'other' } + } + } +}; diff --git a/test/form/samples/prune-pure-unused-import-function/_expected/amd.js b/test/form/samples/prune-pure-unused-import-function/_expected/amd.js new file mode 100644 index 00000000000..f02c330d436 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-function/_expected/amd.js @@ -0,0 +1,5 @@ +define(['other'], function (other) { 'use strict'; + + + +}); diff --git a/test/form/samples/prune-pure-unused-import-function/_expected/cjs.js b/test/form/samples/prune-pure-unused-import-function/_expected/cjs.js new file mode 100644 index 00000000000..d4c04157586 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-function/_expected/cjs.js @@ -0,0 +1,4 @@ +'use strict'; + +require('other'); + diff --git a/test/form/samples/prune-pure-unused-import-function/_expected/es.js b/test/form/samples/prune-pure-unused-import-function/_expected/es.js new file mode 100644 index 00000000000..4c6a1dd1289 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-function/_expected/es.js @@ -0,0 +1 @@ +import 'other'; diff --git a/test/form/samples/prune-pure-unused-import-function/_expected/iife.js b/test/form/samples/prune-pure-unused-import-function/_expected/iife.js new file mode 100644 index 00000000000..8435bdceb01 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-function/_expected/iife.js @@ -0,0 +1,6 @@ +(function (other) { + 'use strict'; + + + +}(other)); diff --git a/test/form/samples/prune-pure-unused-import-function/_expected/system.js b/test/form/samples/prune-pure-unused-import-function/_expected/system.js new file mode 100644 index 00000000000..44f1ac2d34d --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-function/_expected/system.js @@ -0,0 +1,11 @@ +System.register(['other'], function () { + 'use strict'; + return { + setters: [function () {}], + execute: function () { + + + + } + }; +}); 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 new file mode 100644 index 00000000000..481b0e068ab --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-function/_expected/umd.js @@ -0,0 +1,9 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('other')) : + typeof define === 'function' && define.amd ? define(['other'], factory) : + (global = global || self, factory(global.other)); +}(this, (function (other) { 'use strict'; + + + +}))); diff --git a/test/form/samples/prune-pure-unused-import-function/main.js b/test/form/samples/prune-pure-unused-import-function/main.js new file mode 100644 index 00000000000..558f459bd2a --- /dev/null +++ b/test/form/samples/prune-pure-unused-import-function/main.js @@ -0,0 +1,7 @@ +import { unused } from 'external'; +import { notused } from 'other'; + +function alsoUnused () { + unused(); + notused(); +} diff --git a/test/form/samples/prune-pure-unused-import/_config.js b/test/form/samples/prune-pure-unused-import/_config.js new file mode 100644 index 00000000000..a3236e50639 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'prunes pure unused external imports ([#1352])', + expectedWarnings: ['EMPTY_BUNDLE'], + options: { + external: ['external', 'other'], + treeshake: { moduleSideEffects: 'no-external' } + } +}; diff --git a/test/form/samples/prune-pure-unused-import/_expected/amd.js b/test/form/samples/prune-pure-unused-import/_expected/amd.js new file mode 100644 index 00000000000..f9f8229aa40 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import/_expected/amd.js @@ -0,0 +1,5 @@ +define(function () { 'use strict'; + + + +}); diff --git a/test/form/samples/prune-pure-unused-import/_expected/cjs.js b/test/form/samples/prune-pure-unused-import/_expected/cjs.js new file mode 100644 index 00000000000..eb109abbed0 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import/_expected/cjs.js @@ -0,0 +1,2 @@ +'use strict'; + diff --git a/test/form/samples/prune-pure-unused-import/_expected/es.js b/test/form/samples/prune-pure-unused-import/_expected/es.js new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import/_expected/es.js @@ -0,0 +1 @@ + diff --git a/test/form/samples/prune-pure-unused-import/_expected/iife.js b/test/form/samples/prune-pure-unused-import/_expected/iife.js new file mode 100644 index 00000000000..43ef5426880 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import/_expected/iife.js @@ -0,0 +1,6 @@ +(function () { + 'use strict'; + + + +}()); diff --git a/test/form/samples/prune-pure-unused-import/_expected/system.js b/test/form/samples/prune-pure-unused-import/_expected/system.js new file mode 100644 index 00000000000..a702f2b06ef --- /dev/null +++ b/test/form/samples/prune-pure-unused-import/_expected/system.js @@ -0,0 +1,10 @@ +System.register([], function () { + 'use strict'; + return { + execute: function () { + + + + } + }; +}); diff --git a/test/form/samples/prune-pure-unused-import/_expected/umd.js b/test/form/samples/prune-pure-unused-import/_expected/umd.js new file mode 100644 index 00000000000..8bf6301d469 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import/_expected/umd.js @@ -0,0 +1,8 @@ +(function (factory) { + typeof define === 'function' && define.amd ? define(factory) : + factory(); +}((function () { 'use strict'; + + + +}))); diff --git a/test/form/samples/prune-pure-unused-import/main.js b/test/form/samples/prune-pure-unused-import/main.js new file mode 100644 index 00000000000..ce3e0cb6298 --- /dev/null +++ b/test/form/samples/prune-pure-unused-import/main.js @@ -0,0 +1,5 @@ +import { unused } from 'external'; + +function alsoUnused () { + unused(); +} diff --git a/test/function/samples/bundle-facade-order/_config.js b/test/function/samples/bundle-facade-order/_config.js new file mode 100644 index 00000000000..b202a1b5733 --- /dev/null +++ b/test/function/samples/bundle-facade-order/_config.js @@ -0,0 +1,27 @@ +const assert = require('assert'); + +module.exports = { + description: 'respects the order of entry points when there are additional facades for chunks', + options: { + input: { + main: 'main', + 'main-alias': 'main', + other: 'other' + }, + plugins: { + generateBundle(options, bundle) { + assert.deepStrictEqual( + Object.keys(bundle).map(id => [id, bundle[id].code]), + [ + ['main.js', "'use strict';\n\nvar main = 'main1';\n\nmodule.exports = main;\n"], + ['other.js', "'use strict';\n\nvar other = 'main2';\n\nmodule.exports = other;\n"], + [ + 'main-alias.js', + "'use strict';\n\nvar main = require('./main.js');\n\n\n\nmodule.exports = main;\n" + ] + ] + ); + } + } + } +}; diff --git a/test/function/samples/bundle-facade-order/main.js b/test/function/samples/bundle-facade-order/main.js new file mode 100644 index 00000000000..b217470a5f7 --- /dev/null +++ b/test/function/samples/bundle-facade-order/main.js @@ -0,0 +1 @@ +export default 'main1'; diff --git a/test/function/samples/bundle-facade-order/other.js b/test/function/samples/bundle-facade-order/other.js new file mode 100644 index 00000000000..cb63f9eba57 --- /dev/null +++ b/test/function/samples/bundle-facade-order/other.js @@ -0,0 +1 @@ +export default 'main2'; diff --git a/test/function/samples/facade-reexports/_config.js b/test/function/samples/facade-reexports/_config.js new file mode 100644 index 00000000000..d3c1009516f --- /dev/null +++ b/test/function/samples/facade-reexports/_config.js @@ -0,0 +1,16 @@ +const assert = require('assert'); + +module.exports = { + description: + 'handles reexports when creating a facade chunk and transitive dependencies are not hoisted', + options: { + input: ['main', 'other'], + external: 'external', + output: { hoistTransitiveImports: false } + }, + async exports(exports) { + assert.strictEqual(exports.other, 'other'); + assert.strictEqual(exports.external, true); + assert.strictEqual(await exports.dynamic(), 'liblib'); + } +}; diff --git a/test/function/samples/facade-reexports/dynamic.js b/test/function/samples/facade-reexports/dynamic.js new file mode 100644 index 00000000000..02aaca499c0 --- /dev/null +++ b/test/function/samples/facade-reexports/dynamic.js @@ -0,0 +1,2 @@ +import { lib } from './lib'; +export const dynamic = lib; \ No newline at end of file diff --git a/test/function/samples/facade-reexports/lib.js b/test/function/samples/facade-reexports/lib.js new file mode 100644 index 00000000000..da7d8c96654 --- /dev/null +++ b/test/function/samples/facade-reexports/lib.js @@ -0,0 +1 @@ +export const lib = 'lib'; diff --git a/test/function/samples/facade-reexports/main.js b/test/function/samples/facade-reexports/main.js new file mode 100644 index 00000000000..e84395737bd --- /dev/null +++ b/test/function/samples/facade-reexports/main.js @@ -0,0 +1,4 @@ +import { lib } from './lib'; +export const dynamic = () => import('./dynamic').then(({ dynamic }) => dynamic + lib); +export { other } from './other'; +export { external } from 'external'; diff --git a/test/function/samples/facade-reexports/other.js b/test/function/samples/facade-reexports/other.js new file mode 100644 index 00000000000..46e8ba3a3e2 --- /dev/null +++ b/test/function/samples/facade-reexports/other.js @@ -0,0 +1 @@ +export const other = 'other' \ No newline at end of file