From a21d81535dcde433966a313d95bee241822839f8 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sun, 14 Jun 2020 08:18:14 +0200 Subject: [PATCH 01/20] Get rid of "chunk" on Module --- src/Chunk.ts | 96 +++++++++++++++++++----------------- src/Graph.ts | 32 +++++++----- src/Module.ts | 2 +- src/rollup/rollup.ts | 8 +-- src/utils/deconflictChunk.ts | 9 +++- 5 files changed, 86 insertions(+), 61 deletions(-) diff --git a/src/Chunk.ts b/src/Chunk.ts index 429db2079f9..2929c72b5ef 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -118,23 +118,26 @@ export default class Chunk { inputOptions: NormalizedInputOptions, unsetOptions: Set, modulesById: Map, + chunkByModule: Map, facadedModule: Module, facadeName: FacadeName ): Chunk { - const chunk = new Chunk([], inputOptions, unsetOptions, modulesById); + const chunk = new Chunk([], inputOptions, unsetOptions, modulesById, chunkByModule); chunk.assignFacadeName(facadeName, facadedModule); if (!facadedModule.facadeChunk) { facadedModule.facadeChunk = chunk; } for (const dependency of facadedModule.getDependenciesToBeIncluded()) { - chunk.dependencies.add(dependency instanceof Module ? dependency.chunk! : dependency); + chunk.dependencies.add( + dependency instanceof Module ? chunkByModule.get(dependency)! : dependency + ); } if ( - !chunk.dependencies.has(facadedModule.chunk!) && + !chunk.dependencies.has(chunkByModule.get(facadedModule)!) && facadedModule.moduleSideEffects && facadedModule.hasEffects() ) { - chunk.dependencies.add(facadedModule.chunk!); + chunk.dependencies.add(chunkByModule.get(facadedModule)!); } chunk.ensureReexportsAreAvailableForModule(facadedModule); chunk.facadeModule = facadedModule; @@ -183,7 +186,8 @@ export default class Chunk { private readonly orderedModules: Module[], private readonly inputOptions: NormalizedInputOptions, private readonly unsetOptions: Set, - private readonly modulesById: Map + private readonly modulesById: Map, + private readonly chunkByModule: Map ) { this.execIndex = orderedModules.length > 0 ? orderedModules[0].execIndex : Infinity; const chunkModules = new Set(orderedModules); @@ -195,7 +199,6 @@ export default class Chunk { if (module.manualChunkAlias) { this.manualChunkAlias = module.manualChunkAlias; } - module.chunk = this; if (module.isEntryPoint) { this.entryModules.push(module); } @@ -338,6 +341,7 @@ export default class Chunk { this.inputOptions, this.unsetOptions, this.modulesById, + this.chunkByModule, module, facadeName ) @@ -754,13 +758,14 @@ export default class Chunk { moduleDependencies: Set, chunkDependencies: Set ) { - for (const depModule of moduleDependencies) { - if (depModule instanceof Module) { - if (depModule.chunk && depModule.chunk !== this) { - chunkDependencies.add(depModule.chunk); + for (const module of moduleDependencies) { + if (module instanceof Module) { + const chunk = this.chunkByModule.get(module); + if (chunk && chunk !== this) { + chunkDependencies.add(chunk); } } else { - chunkDependencies.add(depModule); + chunkDependencies.add(module); } } } @@ -809,16 +814,16 @@ export default class Chunk { const importedVariable = isSynthetic ? (exportedVariable as SyntheticNamedExportVariable).getBaseVariable() : exportedVariable; - const exportingModule = importedVariable.module; - if ( - exportingModule && - exportingModule.chunk && - exportingModule.chunk !== this && - !(importedVariable instanceof NamespaceVariable && this.inputOptions.preserveModules) - ) { - exportingModule.chunk.exports.add(importedVariable); - if (isSynthetic) { - this.imports.add(importedVariable); + if (!(importedVariable instanceof NamespaceVariable && this.inputOptions.preserveModules)) { + const exportingModule = importedVariable.module; + if (exportingModule instanceof Module) { + const chunk = this.chunkByModule.get(exportingModule); + if (chunk && chunk !== this) { + chunk.exports.add(importedVariable); + if (isSynthetic) { + this.imports.add(importedVariable); + } + } } } } @@ -828,17 +833,14 @@ export default class Chunk { const stripKnownJsExtensions = options.format === 'amd'; for (const [module, code] of this.renderedModuleSources) { for (const { node, resolution } of module.dynamicImports) { - if ( - !resolution || - !node.included || - (resolution instanceof Module && resolution.chunk === this) - ) { + const chunk = this.chunkByModule.get(resolution as Module); + if (!resolution || !node.included || chunk === this) { continue; } const renderedResolution = resolution instanceof Module ? `'${this.getRelativePath( - (resolution.facadeChunk || resolution.chunk!).id!, + (resolution.facadeChunk || chunk!).id!, stripKnownJsExtensions )}'` : resolution instanceof ExternalModule @@ -853,7 +855,7 @@ export default class Chunk { renderedResolution, resolution instanceof Module && !(resolution.facadeChunk && resolution.facadeChunk.strictFacade) && - resolution.chunk!.exportNamesByVariable!.get(resolution.namespace)![0], + chunk!.exportNamesByVariable!.get(resolution.namespace)![0], options ); } @@ -888,9 +890,10 @@ export default class Chunk { const variable = this.exportsByName![exportName]; if (variable instanceof SyntheticNamedExportVariable) continue; const module = variable.module; - if (!module || module.chunk === this) continue; + if (!module) continue; if (module instanceof Module) { - exportChunk = module.chunk!; + exportChunk = this.chunkByModule.get(module)!; + if (exportChunk === this) continue; importName = exportChunk.getVariableExportName(variable); needsLiveBinding = variable.isReassigned; } else { @@ -912,7 +915,7 @@ export default class Chunk { for (const variable of this.imports) { if ( (variable.module instanceof Module - ? variable.module.chunk === dep + ? this.chunkByModule.get(variable.module) === dep : variable.module === dep) && !renderedImports.has(variable) ) { @@ -921,7 +924,7 @@ export default class Chunk { imported: variable.module instanceof ExternalModule ? variable.name - : variable.module!.chunk!.getVariableExportName(variable), + : this.chunkByModule.get(variable.module!)!.getVariableExportName(variable), local: variable.getName() }); } @@ -971,7 +974,7 @@ export default class Chunk { const variable = this.exportsByName![exportName]; if (!(variable instanceof SyntheticNamedExportVariable)) { const module = variable.module; - if (module && module.chunk !== this) continue; + if (module && this.chunkByModule.get(module as Module) !== this) continue; } let expression = null; let hoisted = false; @@ -1044,10 +1047,11 @@ export default class Chunk { for (const { node, resolution } of module.dynamicImports) { if (!node.included) continue; if (resolution instanceof Module) { - if (resolution.chunk === this) { + const chunk = this.chunkByModule.get(resolution); + if (chunk === this) { node.setInternalResolution(resolution.namespace); } else { - node.setExternalResolution(resolution.chunk!.exportMode, resolution); + node.setExternalResolution(chunk!.exportMode, resolution); } } else { node.setExternalResolution('auto', resolution); @@ -1110,6 +1114,7 @@ export default class Chunk { options.format as string, options.interop, this.inputOptions.preserveModules, + this.chunkByModule, syntheticExports, this.exportNamesByVariable! ); @@ -1123,19 +1128,22 @@ export default class Chunk { if (variable instanceof SyntheticNamedExportVariable) { variable = variable.getBaseVariable(); } - if (variable.module && (variable.module as Module).chunk !== this) { - this.imports.add(variable); - if ( - !(variable instanceof NamespaceVariable && this.inputOptions.preserveModules) && - variable.module instanceof Module - ) { - variable.module.chunk!.exports.add(variable); + if (variable.module) { + const chunk = this.chunkByModule.get(variable.module as Module); + if (chunk !== this) { + this.imports.add(variable); + if ( + !(variable instanceof NamespaceVariable && this.inputOptions.preserveModules) && + variable.module instanceof Module + ) { + chunk!.exports.add(variable); + } } } } if ( (module.isEntryPoint && module.preserveSignature !== false) || - module.includedDynamicImporters.some(importer => importer.chunk !== this) || + module.includedDynamicImporters.some(importer => this.chunkByModule.get(importer) !== this) || module.namespace.included ) { this.ensureReexportsAreAvailableForModule(module); @@ -1144,7 +1152,7 @@ export default class Chunk { if ( node.included && resolution instanceof Module && - resolution.chunk === this && + this.chunkByModule.get(resolution) === this && !resolution.namespace.included ) { resolution.namespace.include(); diff --git a/src/Graph.ts b/src/Graph.ts index 082f1b14e70..b39fd6d60da 100644 --- a/src/Graph.ts +++ b/src/Graph.ts @@ -104,7 +104,7 @@ export default class Graph { this.moduleLoader = new ModuleLoader(this, this.modulesById, this.options, this.pluginDriver); } - async build(): Promise { + async build(): Promise { timeStart('generate module graph', 2); await this.generateModuleGraph(); timeEnd('generate module graph', 2); @@ -118,16 +118,12 @@ export default class Graph { this.includeStatements(); timeEnd('mark included statements', 2); - timeStart('generate chunks', 2); - const chunks = this.generateChunks(); - timeEnd('generate chunks', 2); this.phase = BuildPhase.GENERATE; - - return chunks; } generateChunks(): Chunk[] { const chunks: Chunk[] = []; + const chunkByModule = new Map(); if (this.options.preserveModules) { for (const module of this.modules) { if ( @@ -135,9 +131,16 @@ export default class Graph { module.isEntryPoint || module.includedDynamicImporters.length > 0 ) { - const chunk = new Chunk([module], this.options, this.unsetOptions, this.modulesById); + const chunk = new Chunk( + [module], + this.options, + this.unsetOptions, + this.modulesById, + chunkByModule + ); chunk.entryModules = [module]; chunks.push(chunk); + chunkByModule.set(module, chunk); } } } else { @@ -145,7 +148,17 @@ export default class Graph { ? [this.modules] : getChunkAssignments(this.entryModules, this.manualChunkModulesByAlias)) { sortByExecutionOrder(chunkModules); - chunks.push(new Chunk(chunkModules, this.options, this.unsetOptions, this.modulesById)); + const chunk = new Chunk( + chunkModules, + this.options, + this.unsetOptions, + this.modulesById, + chunkByModule + ); + chunks.push(chunk); + for (const module of chunkModules) { + chunkByModule.set(module, chunk); + } } } @@ -256,12 +269,9 @@ export default class Graph { timeEnd(`treeshaking pass ${treeshakingPass++}`, 3); } while (this.needsTreeshakingPass); } else { - // Necessary to properly replace namespace imports for (const module of this.modules) module.includeAllInBundle(); } - // check for unused external imports for (const externalModule of this.externalModules) externalModule.warnUnusedImports(); - // check for missing implicit dependants for (const module of this.implicitEntryModules) { for (const dependant of module.implicitlyLoadedAfter) { if (!(dependant.isEntryPoint || dependant.isIncluded())) { diff --git a/src/Module.ts b/src/Module.ts index bf1788c8b01..43f034be9bc 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -178,7 +178,6 @@ function getVariableForExportNameRecursive( } export default class Module { - chunk: Chunk | null = null; chunkFileNames = new Set(); chunkName: string | null = null; code!: string; @@ -196,6 +195,7 @@ export default class Module { exportAllSources = new Set(); exports: { [name: string]: ExportDescription } = Object.create(null); exportsAll: { [name: string]: string } = Object.create(null); + // TODO Lukas get rid of this as well facadeChunk: Chunk | null = null; implicitlyLoadedAfter = new Set(); implicitlyLoadedBefore = new Set(); diff --git a/src/rollup/rollup.ts b/src/rollup/rollup.ts index 9849ad173c8..0e66ccfd292 100644 --- a/src/rollup/rollup.ts +++ b/src/rollup/rollup.ts @@ -1,6 +1,5 @@ import { version as rollupVersion } from 'package.json'; import Bundle from '../Bundle'; -import Chunk from '../Chunk'; import Graph from '../Graph'; import { ensureArray } from '../utils/ensureArray'; import { errCannotEmitFromOptionsHook, error } from '../utils/error'; @@ -48,10 +47,9 @@ export async function rollupInternal( timeStart('BUILD', 1); - let chunks: Chunk[]; try { await graph.pluginDriver.hookParallel('buildStart', [inputOptions]); - chunks = await graph.build(); + await graph.build(); } catch (err) { const watchFiles = Object.keys(graph.watchFiles); if (watchFiles.length > 0) { @@ -61,6 +59,10 @@ export async function rollupInternal( throw err; } + timeStart('generate chunks', 2); + const chunks = graph.generateChunks(); + timeEnd('generate chunks', 2); + await graph.pluginDriver.hookParallel('buildEnd', []); timeEnd('BUILD', 1); diff --git a/src/utils/deconflictChunk.ts b/src/utils/deconflictChunk.ts index b4ab5ff5aca..88d93de2657 100644 --- a/src/utils/deconflictChunk.ts +++ b/src/utils/deconflictChunk.ts @@ -13,6 +13,7 @@ const DECONFLICT_IMPORTED_VARIABLES_BY_FORMAT: { dependencies: Set, interop: boolean, preserveModules: boolean, + chunkByModule: Map, syntheticExports: Set ) => void; } = { @@ -32,6 +33,7 @@ export function deconflictChunk( format: string, interop: boolean, preserveModules: boolean, + chunkByModule: Map, syntheticExports: Set, exportNamesByVariable: Map ) { @@ -45,6 +47,7 @@ export function deconflictChunk( dependencies, interop, preserveModules, + chunkByModule, syntheticExports ); @@ -59,6 +62,7 @@ function deconflictImportsEsm( dependencies: Set, interop: boolean, preserveModules: boolean, + _chunkByModule: Map, syntheticExports: Set ) { // Deconflict re-exported variables of dependencies when preserveModules is true. @@ -108,7 +112,8 @@ function deconflictImportsOther( imports: Set, dependencies: Set, interop: boolean, - preserveModules: boolean + preserveModules: boolean, + chunkByModule: Map ) { for (const chunkOrExternalModule of dependencies) { chunkOrExternalModule.variableName = getSafeName(chunkOrExternalModule.variableName, usedNames); @@ -125,7 +130,7 @@ function deconflictImportsOther( variable.setRenderNames(module.variableName, null); } } else { - const chunk = module!.chunk!; + const chunk = chunkByModule.get(module!)!; if (chunk.exportMode === 'default' || (preserveModules && variable.isNamespace)) { variable.setRenderNames(null, chunk.variableName); } else { From 36e83857484d35c414991efc7a2177da98446695 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Mon, 15 Jun 2020 07:36:53 +0200 Subject: [PATCH 02/20] Remove facadeChunk from Module --- src/Bundle.ts | 12 ++++++++++-- src/Chunk.ts | 32 ++++++++++++++++++++------------ src/Graph.ts | 11 +++++++---- src/Module.ts | 3 --- src/rollup/rollup.ts | 8 +++++--- src/utils/FileEmitter.ts | 15 +++++++++++---- src/utils/PluginDriver.ts | 5 ++++- 7 files changed, 57 insertions(+), 29 deletions(-) diff --git a/src/Bundle.ts b/src/Bundle.ts index 162601cb6cf..643e05a69bb 100644 --- a/src/Bundle.ts +++ b/src/Bundle.ts @@ -1,4 +1,5 @@ import Chunk from './Chunk'; +import Module from './Module'; import { NormalizedInputOptions, NormalizedOutputOptions, @@ -20,14 +21,21 @@ export default class Bundle { private readonly unsetOptions: Set, private readonly inputOptions: NormalizedInputOptions, private readonly pluginDriver: PluginDriver, - private readonly chunks: Chunk[] + private readonly chunks: Chunk[], + private readonly facadeChunkByModule: Map ) {} async generate(isWrite: boolean): Promise { timeStart('GENERATE', 1); const inputBase = commondir(getAbsoluteEntryModulePaths(this.chunks)); const outputBundle: OutputBundleWithPlaceholders = Object.create(null); - this.pluginDriver.setOutputBundle(outputBundle, this.outputOptions.assetFileNames); + // TODO Lukas this can only be done once we have chunks due to facadeChunkByModule at the moment + // Better: test not getting the file name in renderStart and put a ?.id in getChunkFileName + this.pluginDriver.setOutputBundle( + outputBundle, + this.outputOptions.assetFileNames, + this.facadeChunkByModule + ); try { await this.pluginDriver.hookParallel('renderStart', [this.outputOptions, this.inputOptions]); if (this.chunks.length > 1) { diff --git a/src/Chunk.ts b/src/Chunk.ts index 2929c72b5ef..34657ff44a6 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -119,13 +119,21 @@ export default class Chunk { unsetOptions: Set, modulesById: Map, chunkByModule: Map, + facadeChunkByModule: Map, facadedModule: Module, facadeName: FacadeName ): Chunk { - const chunk = new Chunk([], inputOptions, unsetOptions, modulesById, chunkByModule); + const chunk = new Chunk( + [], + inputOptions, + unsetOptions, + modulesById, + chunkByModule, + facadeChunkByModule + ); chunk.assignFacadeName(facadeName, facadedModule); - if (!facadedModule.facadeChunk) { - facadedModule.facadeChunk = chunk; + if (!facadeChunkByModule.has(facadedModule)) { + facadeChunkByModule.set(facadedModule, chunk); } for (const dependency of facadedModule.getDependenciesToBeIncluded()) { chunk.dependencies.add( @@ -187,7 +195,8 @@ export default class Chunk { private readonly inputOptions: NormalizedInputOptions, private readonly unsetOptions: Set, private readonly modulesById: Map, - private readonly chunkByModule: Map + private readonly chunkByModule: Map, + private readonly facadeChunkByModule: Map ) { this.execIndex = orderedModules.length > 0 ? orderedModules[0].execIndex : Infinity; const chunkModules = new Set(orderedModules); @@ -327,7 +336,7 @@ export default class Chunk { this.canModuleBeFacade(module, exposedVariables)) ) { this.facadeModule = module; - module.facadeChunk = this; + this.facadeChunkByModule.set(module, this); if (module.preserveSignature) { this.strictFacade = module.preserveSignature === 'strict'; this.ensureReexportsAreAvailableForModule(module); @@ -342,6 +351,7 @@ export default class Chunk { this.unsetOptions, this.modulesById, this.chunkByModule, + this.facadeChunkByModule, module, facadeName ) @@ -351,7 +361,7 @@ export default class Chunk { for (const module of this.dynamicEntryModules) { if (!this.facadeModule && this.canModuleBeFacade(module, exposedVariables)) { this.facadeModule = module; - module.facadeChunk = this; + this.facadeChunkByModule.set(module, this); this.strictFacade = true; this.assignFacadeName({}, module); } else if ( @@ -360,7 +370,7 @@ export default class Chunk { this.canModuleBeFacade(module, exposedVariables) ) { this.strictFacade = true; - } else if (!(module.facadeChunk && module.facadeChunk.strictFacade)) { + } else if (!this.facadeChunkByModule.get(module)?.strictFacade) { module.namespace.include(); this.exports.add(module.namespace); } @@ -834,15 +844,13 @@ export default class Chunk { for (const [module, code] of this.renderedModuleSources) { for (const { node, resolution } of module.dynamicImports) { const chunk = this.chunkByModule.get(resolution as Module); + const facadeChunk = this.facadeChunkByModule.get(resolution as Module); if (!resolution || !node.included || chunk === this) { continue; } const renderedResolution = resolution instanceof Module - ? `'${this.getRelativePath( - (resolution.facadeChunk || chunk!).id!, - stripKnownJsExtensions - )}'` + ? `'${this.getRelativePath((facadeChunk || chunk!).id!, stripKnownJsExtensions)}'` : resolution instanceof ExternalModule ? `'${ resolution.renormalizeRenderPath @@ -854,7 +862,7 @@ export default class Chunk { code, renderedResolution, resolution instanceof Module && - !(resolution.facadeChunk && resolution.facadeChunk.strictFacade) && + !facadeChunk?.strictFacade && chunk!.exportNamesByVariable!.get(resolution.namespace)![0], options ); diff --git a/src/Graph.ts b/src/Graph.ts index b39fd6d60da..3252343d545 100644 --- a/src/Graph.ts +++ b/src/Graph.ts @@ -121,9 +121,10 @@ export default class Graph { this.phase = BuildPhase.GENERATE; } - generateChunks(): Chunk[] { + generateChunks(): { chunks: Chunk[]; facadeChunkByModule: Map } { const chunks: Chunk[] = []; const chunkByModule = new Map(); + const facadeChunkByModule = new Map(); if (this.options.preserveModules) { for (const module of this.modules) { if ( @@ -136,7 +137,8 @@ export default class Graph { this.options, this.unsetOptions, this.modulesById, - chunkByModule + chunkByModule, + facadeChunkByModule ); chunk.entryModules = [module]; chunks.push(chunk); @@ -153,7 +155,8 @@ export default class Graph { this.options, this.unsetOptions, this.modulesById, - chunkByModule + chunkByModule, + facadeChunkByModule ); chunks.push(chunk); for (const module of chunkModules) { @@ -169,7 +172,7 @@ export default class Graph { for (const chunk of chunks) { facades.push(...chunk.generateFacades()); } - return [...chunks, ...facades]; + return { chunks: [...chunks, ...facades], facadeChunkByModule }; } getCache(): RollupCache { diff --git a/src/Module.ts b/src/Module.ts index 43f034be9bc..939803ce02b 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -26,7 +26,6 @@ import ExternalVariable from './ast/variables/ExternalVariable'; import NamespaceVariable from './ast/variables/NamespaceVariable'; import SyntheticNamedExportVariable from './ast/variables/SyntheticNamedExportVariable'; import Variable from './ast/variables/Variable'; -import Chunk from './Chunk'; import ExternalModule from './ExternalModule'; import Graph from './Graph'; import { @@ -195,8 +194,6 @@ export default class Module { exportAllSources = new Set(); exports: { [name: string]: ExportDescription } = Object.create(null); exportsAll: { [name: string]: string } = Object.create(null); - // TODO Lukas get rid of this as well - facadeChunk: Chunk | null = null; implicitlyLoadedAfter = new Set(); implicitlyLoadedBefore = new Set(); importDescriptions: { [name: string]: ImportDescription } = Object.create(null); diff --git a/src/rollup/rollup.ts b/src/rollup/rollup.ts index 0e66ccfd292..32180b0141a 100644 --- a/src/rollup/rollup.ts +++ b/src/rollup/rollup.ts @@ -60,7 +60,7 @@ export async function rollupInternal( } timeStart('generate chunks', 2); - const chunks = graph.generateChunks(); + const { chunks, facadeChunkByModule } = graph.generateChunks(); timeEnd('generate chunks', 2); await graph.pluginDriver.hookParallel('buildEnd', []); @@ -84,7 +84,8 @@ export async function rollupInternal( unsetOptions, inputOptions, outputPluginDriver, - chunks + chunks, + facadeChunkByModule ); return createOutput(await bundle.generate(false)); }, @@ -110,7 +111,8 @@ export async function rollupInternal( unsetOptions, inputOptions, outputPluginDriver, - chunks + chunks, + facadeChunkByModule ); const generated = await bundle.generate(true); await Promise.all( diff --git a/src/utils/FileEmitter.ts b/src/utils/FileEmitter.ts index ba14de04ca5..19f6c9c399a 100644 --- a/src/utils/FileEmitter.ts +++ b/src/utils/FileEmitter.ts @@ -1,3 +1,4 @@ +import Chunk from '../Chunk'; import Graph from '../Graph'; import Module from '../Module'; import { @@ -137,13 +138,17 @@ function getAssetFileName(file: ConsumedAsset, referenceId: string): string { return file.fileName; } -function getChunkFileName(file: ConsumedChunk): string { - const fileName = file.fileName || (file.module && file.module.facadeChunk!.id); +function getChunkFileName( + file: ConsumedChunk, + facadeChunkByModule: Map | null +): string { + const fileName = file.fileName || (file.module && facadeChunkByModule?.get(file.module)!.id); if (!fileName) return error(errChunkNotGeneratedForFileName(file.fileName || file.name)); return fileName; } export class FileEmitter { + private facadeChunkByModule: Map | null = null; private filesByReferenceId: Map; private output: OutputSpecificFileData | null = null; @@ -194,7 +199,7 @@ export class FileEmitter { const emittedFile = this.filesByReferenceId.get(fileReferenceId); if (!emittedFile) return error(errFileReferenceIdNotFoundForFilename(fileReferenceId)); if (emittedFile.type === 'chunk') { - return getChunkFileName(emittedFile); + return getChunkFileName(emittedFile, this.facadeChunkByModule); } else { return getAssetFileName(emittedFile, fileReferenceId); } @@ -223,12 +228,14 @@ export class FileEmitter { public setOutputBundle = ( outputBundle: OutputBundleWithPlaceholders, - assetFileNames: string + assetFileNames: string, + facadeChunkByModule: Map ): void => { this.output = { assetFileNames, bundle: outputBundle }; + this.facadeChunkByModule = facadeChunkByModule; for (const emittedFile of this.filesByReferenceId.values()) { if (emittedFile.fileName) { reserveFileNameInBundle(emittedFile.fileName, this.output.bundle, this.options.onwarn); diff --git a/src/utils/PluginDriver.ts b/src/utils/PluginDriver.ts index 7825a90ad0e..0444a4dd7a4 100644 --- a/src/utils/PluginDriver.ts +++ b/src/utils/PluginDriver.ts @@ -1,4 +1,6 @@ +import Chunk from '../Chunk'; import Graph from '../Graph'; +import Module from '../Module'; import { AddonHookFunction, AsyncPluginHooks, @@ -68,7 +70,8 @@ export class PluginDriver { public getFileName: (fileReferenceId: string) => string; public setOutputBundle: ( outputBundle: OutputBundleWithPlaceholders, - assetFileNames: string + assetFileNames: string, + facadeChunkByModule: Map ) => void; private fileEmitter: FileEmitter; From 6f85bb7c3c9512be63b411482d9c3c21acb3c1d2 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 16 Jun 2020 07:23:10 +0200 Subject: [PATCH 03/20] Move chunk assignment to generate --- src/Bundle.ts | 36 +++++--- src/Chunk.ts | 43 +++++----- src/Graph.ts | 43 ++++++++-- src/Module.ts | 1 - src/ModuleLoader.ts | 20 +++-- src/rollup/rollup.ts | 10 +-- src/utils/chunkAssignment.ts | 83 +++++++++++++------ .../_expected/amd/main1.js | 4 +- .../_expected/amd/main2.js | 2 +- .../_expected/amd/main2.js | 2 +- .../namespace-reexports/_expected/amd/main.js | 4 +- .../config-multiple-getfilename/_config.js | 1 - .../_expected/es.txt | 2 +- 13 files changed, 159 insertions(+), 92 deletions(-) diff --git a/src/Bundle.ts b/src/Bundle.ts index 643e05a69bb..4d38e6f6088 100644 --- a/src/Bundle.ts +++ b/src/Bundle.ts @@ -1,4 +1,5 @@ import Chunk from './Chunk'; +import Graph from './Graph'; import Module from './Module'; import { NormalizedInputOptions, @@ -21,39 +22,45 @@ export default class Bundle { private readonly unsetOptions: Set, private readonly inputOptions: NormalizedInputOptions, private readonly pluginDriver: PluginDriver, - private readonly chunks: Chunk[], - private readonly facadeChunkByModule: Map + private readonly graph: Graph // TODO Lukas replace with used properties ) {} async generate(isWrite: boolean): Promise { timeStart('GENERATE', 1); - const inputBase = commondir(getAbsoluteEntryModulePaths(this.chunks)); const outputBundle: OutputBundleWithPlaceholders = Object.create(null); + const facadeChunkByModule = new Map(); // TODO Lukas this can only be done once we have chunks due to facadeChunkByModule at the moment // Better: test not getting the file name in renderStart and put a ?.id in getChunkFileName this.pluginDriver.setOutputBundle( outputBundle, this.outputOptions.assetFileNames, - this.facadeChunkByModule + facadeChunkByModule ); try { await this.pluginDriver.hookParallel('renderStart', [this.outputOptions, this.inputOptions]); - if (this.chunks.length > 1) { + + timeStart('generate chunks', 2); + // TODO Lukas move to this class + const chunks = this.graph.generateChunks(facadeChunkByModule); + timeEnd('generate chunks', 2); + + if (chunks.length > 1) { validateOptionsForMultiChunkOutput(this.outputOptions); } const addons = await createAddons(this.outputOptions, this.pluginDriver); - for (const chunk of this.chunks) { + for (const chunk of chunks) { chunk.generateExports(this.outputOptions); } - for (const chunk of this.chunks) { + const inputBase = commondir(getAbsoluteEntryModulePaths(chunks)); + for (const chunk of chunks) { chunk.preRender(this.outputOptions, inputBase, this.pluginDriver); } - this.assignChunkIds(inputBase, addons, outputBundle); - assignChunksToBundle(this.chunks, outputBundle); + this.assignChunkIds(chunks, inputBase, addons, outputBundle); + assignChunksToBundle(chunks, outputBundle); await Promise.all( - this.chunks.map(chunk => { + chunks.map(chunk => { const outputChunk = outputBundle[chunk.id!] as OutputChunk; return chunk .render(this.outputOptions, addons, outputChunk, this.pluginDriver) @@ -89,10 +96,15 @@ export default class Bundle { return outputBundle as OutputBundle; } - private assignChunkIds(inputBase: string, addons: Addons, bundle: OutputBundleWithPlaceholders) { + private assignChunkIds( + chunks: Chunk[], + inputBase: string, + addons: Addons, + bundle: OutputBundleWithPlaceholders + ) { const entryChunks: Chunk[] = []; const otherChunks: Chunk[] = []; - for (const chunk of this.chunks) { + for (const chunk of chunks) { (chunk.facadeModule && chunk.facadeModule.isUserDefinedEntryPoint ? entryChunks : otherChunks diff --git a/src/Chunk.ts b/src/Chunk.ts index 34657ff44a6..da6dec2d46c 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -129,7 +129,8 @@ export default class Chunk { unsetOptions, modulesById, chunkByModule, - facadeChunkByModule + facadeChunkByModule, + null ); chunk.assignFacadeName(facadeName, facadedModule); if (!facadeChunkByModule.has(facadedModule)) { @@ -158,7 +159,7 @@ export default class Chunk { exportMode: 'none' | 'named' | 'default' = 'named'; facadeModule: Module | null = null; id: string | null = null; - variableName = 'chunk'; + variableName: string; private dependencies = new Set(); private dynamicDependencies = new Set(); @@ -172,7 +173,6 @@ export default class Chunk { private imports = new Set(); private indentString: string = undefined as any; private isEmpty = true; - private manualChunkAlias: string | null = null; private name: string | null = null; private needsExportsShim = false; private renderedDependencies: Map< @@ -196,7 +196,8 @@ export default class Chunk { private readonly unsetOptions: Set, private readonly modulesById: Map, private readonly chunkByModule: Map, - private readonly facadeChunkByModule: Map + private readonly facadeChunkByModule: Map, + private readonly manualChunkAlias: string | null ) { this.execIndex = orderedModules.length > 0 ? orderedModules[0].execIndex : Infinity; const chunkModules = new Set(orderedModules); @@ -205,9 +206,6 @@ export default class Chunk { if (this.isEmpty && module.isIncluded()) { this.isEmpty = false; } - if (module.manualChunkAlias) { - this.manualChunkAlias = module.manualChunkAlias; - } if (module.isEntryPoint) { this.entryModules.push(module); } @@ -220,21 +218,7 @@ export default class Chunk { this.implicitEntryModules.push(module); } } - - const moduleForNaming = - this.entryModules[0] || - this.implicitEntryModules[0] || - this.dynamicEntryModules[0] || - this.orderedModules[this.orderedModules.length - 1]; - if (moduleForNaming) { - this.variableName = makeLegal( - basename( - moduleForNaming.chunkName || - moduleForNaming.manualChunkAlias || - getAliasName(moduleForNaming.id) - ) - ); - } + this.variableName = makeLegal(this.generateVariableName()); } canModuleBeFacade(module: Module, exposedVariables: Set): boolean { @@ -881,6 +865,21 @@ export default class Chunk { } } + private generateVariableName(): string { + if (this.manualChunkAlias) { + return this.manualChunkAlias; + } + const moduleForNaming = + this.entryModules[0] || + this.implicitEntryModules[0] || + this.dynamicEntryModules[0] || + this.orderedModules[this.orderedModules.length - 1]; + if (moduleForNaming) { + return moduleForNaming.chunkName || getAliasName(moduleForNaming.id); + } + return 'chunk'; + } + private getChunkDependencyDeclarations( options: NormalizedOutputOptions ): Map { diff --git a/src/Graph.ts b/src/Graph.ts index 3252343d545..cb08a9ae85b 100644 --- a/src/Graph.ts +++ b/src/Graph.ts @@ -61,6 +61,7 @@ export default class Graph { private entryModules: Module[] = []; private externalModules: ExternalModule[] = []; private implicitEntryModules: Module[] = []; + private manualChunkAliasByModule = new Map(); private manualChunkModulesByAlias: Record = {}; private modules: Module[] = []; private pluginCache?: Record; @@ -121,10 +122,9 @@ export default class Graph { this.phase = BuildPhase.GENERATE; } - generateChunks(): { chunks: Chunk[]; facadeChunkByModule: Map } { + generateChunks(facadeChunkByModule: Map): Chunk[] { const chunks: Chunk[] = []; const chunkByModule = new Map(); - const facadeChunkByModule = new Map(); if (this.options.preserveModules) { for (const module of this.modules) { if ( @@ -138,7 +138,8 @@ export default class Graph { this.unsetOptions, this.modulesById, chunkByModule, - facadeChunkByModule + facadeChunkByModule, + null ); chunk.entryModules = [module]; chunks.push(chunk); @@ -146,9 +147,16 @@ export default class Graph { } } } else { - for (const chunkModules of this.options.inlineDynamicImports - ? [this.modules] - : getChunkAssignments(this.entryModules, this.manualChunkModulesByAlias)) { + // TODO Lukas even better, the chunks could be objects with optional aliases + const { chunks: chunkedModules, manualChunks: modulesByManualChunk } = this.options + .inlineDynamicImports + ? { chunks: [this.modules], manualChunks: {} } + : getChunkAssignments( + this.entryModules, + this.manualChunkModulesByAlias, + this.manualChunkAliasByModule + ); + for (const chunkModules of chunkedModules) { sortByExecutionOrder(chunkModules); const chunk = new Chunk( chunkModules, @@ -156,7 +164,25 @@ export default class Graph { this.unsetOptions, this.modulesById, chunkByModule, - facadeChunkByModule + facadeChunkByModule, + null + ); + chunks.push(chunk); + for (const module of chunkModules) { + chunkByModule.set(module, chunk); + } + } + for (const alias of Object.keys(modulesByManualChunk)) { + const chunkModules = modulesByManualChunk[alias]; + sortByExecutionOrder(chunkModules); + const chunk = new Chunk( + chunkModules, + this.options, + this.unsetOptions, + this.modulesById, + chunkByModule, + facadeChunkByModule, + alias ); chunks.push(chunk); for (const module of chunkModules) { @@ -172,7 +198,7 @@ export default class Graph { for (const chunk of chunks) { facades.push(...chunk.generateFacades()); } - return { chunks: [...chunks, ...facades], facadeChunkByModule }; + return [...chunks, ...facades]; } getCache(): RollupCache { @@ -232,6 +258,7 @@ export default class Graph { { entryModules: this.entryModules, implicitEntryModules: this.implicitEntryModules, + manualChunkAliasByModule: this.manualChunkAliasByModule, manualChunkModulesByAlias: this.manualChunkModulesByAlias } ] = await Promise.all([ diff --git a/src/Module.ts b/src/Module.ts index 939803ce02b..581ad460b06 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -203,7 +203,6 @@ export default class Module { includedDynamicImporters: Module[] = []; isExecuted = false; isUserDefinedEntryPoint = false; - manualChunkAlias: string = null as any; namespace!: NamespaceVariable; originalCode!: string; originalSourcemap!: ExistingDecodedSourceMap | null; diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts index 054879d0b53..256f0b6e5ed 100644 --- a/src/ModuleLoader.ts +++ b/src/ModuleLoader.ts @@ -45,7 +45,8 @@ export class ModuleLoader { private readonly implicitEntryModules = new Set(); private readonly indexedEntryModules: { index: number; module: Module }[] = []; private latestLoadModulesPromise: Promise = Promise.resolve(); - private readonly manualChunkModules: Record = {}; + private readonly manualChunkAliasByModule = new Map(); + private readonly manualChunkModulesByAlias: Record = {}; private nextEntryModuleIndex = 0; constructor( @@ -65,6 +66,7 @@ export class ModuleLoader { ): Promise<{ entryModules: Module[]; implicitEntryModules: Module[]; + manualChunkAliasByModule: Map; manualChunkModulesByAlias: Record; newEntryModules: Module[]; }> { @@ -102,7 +104,8 @@ export class ModuleLoader { return { entryModules: this.indexedEntryModules.map(({ module }) => module), implicitEntryModules: [...this.implicitEntryModules], - manualChunkModulesByAlias: this.manualChunkModules, + manualChunkAliasByModule: this.manualChunkAliasByModule, + manualChunkModulesByAlias: this.manualChunkModulesByAlias, newEntryModules }; } @@ -257,14 +260,15 @@ export class ModuleLoader { } private addModuleToManualChunk(alias: string, module: Module) { - if (module.manualChunkAlias !== null && module.manualChunkAlias !== alias) { - return error(errCannotAssignModuleToChunk(module.id, alias, module.manualChunkAlias)); + const existingAlias = this.manualChunkAliasByModule.get(module); + if (typeof existingAlias === 'string' && existingAlias !== alias) { + return error(errCannotAssignModuleToChunk(module.id, alias, existingAlias)); } - module.manualChunkAlias = alias; - if (!this.manualChunkModules[alias]) { - this.manualChunkModules[alias] = []; + this.manualChunkAliasByModule.set(module, alias); + if (!this.manualChunkModulesByAlias[alias]) { + this.manualChunkModulesByAlias[alias] = []; } - this.manualChunkModules[alias].push(module); + this.manualChunkModulesByAlias[alias].push(module); } private async awaitLoadModulesPromise(): Promise { diff --git a/src/rollup/rollup.ts b/src/rollup/rollup.ts index 32180b0141a..4480480c121 100644 --- a/src/rollup/rollup.ts +++ b/src/rollup/rollup.ts @@ -59,10 +59,6 @@ export async function rollupInternal( throw err; } - timeStart('generate chunks', 2); - const { chunks, facadeChunkByModule } = graph.generateChunks(); - timeEnd('generate chunks', 2); - await graph.pluginDriver.hookParallel('buildEnd', []); timeEnd('BUILD', 1); @@ -84,8 +80,7 @@ export async function rollupInternal( unsetOptions, inputOptions, outputPluginDriver, - chunks, - facadeChunkByModule + graph ); return createOutput(await bundle.generate(false)); }, @@ -111,8 +106,7 @@ export async function rollupInternal( unsetOptions, inputOptions, outputPluginDriver, - chunks, - facadeChunkByModule + graph ); const generated = await bundle.generate(true); await Promise.all( diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index bf5848a4b4c..03d23434344 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -5,10 +5,29 @@ type DependentModuleMap = Map>; export function getChunkAssignments( entryModules: Module[], - manualChunkModules: Record -): Module[][] { + manualChunkEntries: Record, + manualChunkAliasByEntry: Map +): { chunks: Module[][]; manualChunks: Record } { + // TODO Lukas would it be enough to just have a Set of which modules have an alias? + const manualChunkAliasByModule = new Map(manualChunkAliasByEntry); + const manualChunks = Object.create(null); + for (const chunkName of Object.keys(manualChunkEntries)) { + const manualChunkModules = (manualChunks[chunkName] = []); + for (const entry of manualChunkEntries[chunkName]) { + addStaticDependenciesToManualChunk( + entry, + chunkName, + manualChunkModules, + manualChunkAliasByModule + ); + } + } + const assignedEntryPointsByModule: DependentModuleMap = new Map(); - const { dependentEntryPointsByModule, dynamicEntryModules } = analyzeModuleGraph(entryModules); + const { dependentEntryPointsByModule, dynamicEntryModules } = analyzeModuleGraph( + entryModules, + manualChunkAliasByModule + ); const dynamicallyDependentEntryPointsByDynamicEntry: DependentModuleMap = getDynamicDependentEntryPoints( dependentEntryPointsByModule, dynamicEntryModules @@ -20,14 +39,10 @@ export function getChunkAssignments( dynamicDependentEntryPoints: Set | null, assignedEntry: Module | string = entry ) { - const manualChunkAlias = entry.manualChunkAlias; const modulesToHandle = new Set([entry]); for (const module of modulesToHandle) { const assignedEntryPoints = getDependentModules(assignedEntryPointsByModule, module); - if (manualChunkAlias) { - module.manualChunkAlias = manualChunkAlias; - assignedEntryPoints.add(assignedEntry); - } else if ( + if ( dynamicDependentEntryPoints && areEntryPointsContainedOrDynamicallyDependent( dynamicDependentEntryPoints, @@ -39,7 +54,7 @@ export function getChunkAssignments( assignedEntryPoints.add(assignedEntry); } for (const dependency of module.getDependenciesToBeIncluded()) { - if (!(dependency instanceof ExternalModule || dependency.manualChunkAlias)) { + if (!(dependency instanceof ExternalModule || manualChunkAliasByModule.has(dependency))) { modulesToHandle.add(dependency); } } @@ -65,20 +80,14 @@ export function getChunkAssignments( return true; } - for (const chunkName of Object.keys(manualChunkModules)) { - for (const entry of manualChunkModules[chunkName]) { - assignEntryToStaticDependencies(entry, null, chunkName); - } - } - for (const entry of entryModules) { - if (!entry.manualChunkAlias) { + if (!manualChunkAliasByModule.has(entry)) { assignEntryToStaticDependencies(entry, null); } } for (const entry of dynamicEntryModules) { - if (!entry.manualChunkAlias) { + if (!manualChunkAliasByModule.has(entry)) { assignEntryToStaticDependencies( entry, dynamicallyDependentEntryPointsByDynamicEntry.get(entry)! @@ -86,14 +95,36 @@ export function getChunkAssignments( } } - return createChunks( - [...Object.keys(manualChunkModules), ...entryModules, ...dynamicEntryModules], - assignedEntryPointsByModule - ); + return { + chunks: createChunks( + [...Object.keys(manualChunkEntries), ...entryModules, ...dynamicEntryModules], + assignedEntryPointsByModule + ), + manualChunks + }; +} + +function addStaticDependenciesToManualChunk( + entry: Module, + manualChunkAlias: string, + manualChunkModules: Module[], + manualChunkAliasByModule: Map +) { + const modulesToHandle = new Set([entry]); + for (const module of modulesToHandle) { + manualChunkAliasByModule.set(module, manualChunkAlias); + manualChunkModules.push(module); + for (const dependency of module.getDependenciesToBeIncluded()) { + if (!(dependency instanceof ExternalModule || manualChunkAliasByModule.has(dependency))) { + modulesToHandle.add(dependency); + } + } + } } function analyzeModuleGraph( - entryModules: Module[] + entryModules: Module[], + manualChunkAliasByModule: Map ): { dependentEntryPointsByModule: DependentModuleMap; dynamicEntryModules: Set; @@ -114,15 +145,17 @@ function analyzeModuleGraph( if ( resolution instanceof Module && resolution.includedDynamicImporters.length > 0 && - !resolution.manualChunkAlias + !manualChunkAliasByModule.has(resolution) ) { dynamicEntryModules.add(resolution); entriesToHandle.add(resolution); } } for (const dependency of module.implicitlyLoadedBefore) { - dynamicEntryModules.add(dependency); - entriesToHandle.add(dependency); + if (!manualChunkAliasByModule.has(dependency)) { + dynamicEntryModules.add(dependency); + entriesToHandle.add(dependency); + } } } } diff --git a/test/chunking-form/samples/chunk-variable-name-conflict/_expected/amd/main1.js b/test/chunking-form/samples/chunk-variable-name-conflict/_expected/amd/main1.js index f8cf7bcec88..b5ec063a056 100644 --- a/test/chunking-form/samples/chunk-variable-name-conflict/_expected/amd/main1.js +++ b/test/chunking-form/samples/chunk-variable-name-conflict/_expected/amd/main1.js @@ -1,5 +1,5 @@ -define(['./generated-dep'], function (dep$1) { 'use strict'; +define(['./generated-dep'], function (dep) { 'use strict'; - [43].map(dep => console.log(dep, dep$1.value, dep$1.x)); + [43].map(dep$1 => console.log(dep$1, dep.value, dep.x)); }); diff --git a/test/chunking-form/samples/manual-chunk-contains-entry-conflict/_expected/amd/main2.js b/test/chunking-form/samples/manual-chunk-contains-entry-conflict/_expected/amd/main2.js index 0c144671364..d28c079a312 100644 --- a/test/chunking-form/samples/manual-chunk-contains-entry-conflict/_expected/amd/main2.js +++ b/test/chunking-form/samples/manual-chunk-contains-entry-conflict/_expected/amd/main2.js @@ -1,4 +1,4 @@ -define(['./main'], function (main) { 'use strict'; +define(['./main'], function (outer) { 'use strict'; diff --git a/test/chunking-form/samples/manual-chunk-is-entry-conflict/_expected/amd/main2.js b/test/chunking-form/samples/manual-chunk-is-entry-conflict/_expected/amd/main2.js index 0c144671364..e007f54e5e2 100644 --- a/test/chunking-form/samples/manual-chunk-is-entry-conflict/_expected/amd/main2.js +++ b/test/chunking-form/samples/manual-chunk-is-entry-conflict/_expected/amd/main2.js @@ -1,4 +1,4 @@ -define(['./main'], function (main) { 'use strict'; +define(['./main'], function (other) { 'use strict'; diff --git a/test/chunking-form/samples/namespace-reexports/_expected/amd/main.js b/test/chunking-form/samples/namespace-reexports/_expected/amd/main.js index ab833f3837e..47919c68682 100644 --- a/test/chunking-form/samples/namespace-reexports/_expected/amd/main.js +++ b/test/chunking-form/samples/namespace-reexports/_expected/amd/main.js @@ -1,6 +1,6 @@ -define(['exports', './hsl2hsv', './generated-index'], function (exports, hsl2hsv$1, index) { 'use strict'; +define(['exports', './hsl2hsv', './generated-index'], function (exports, hsl2hsv, index) { 'use strict'; - console.log(hsl2hsv$1.p); + console.log(hsl2hsv.p); var main = new Map(Object.entries(index.lib)); exports.default = main; diff --git a/test/cli/samples/config-multiple-getfilename/_config.js b/test/cli/samples/config-multiple-getfilename/_config.js index ba17660e7a0..842113b93e1 100644 --- a/test/cli/samples/config-multiple-getfilename/_config.js +++ b/test/cli/samples/config-multiple-getfilename/_config.js @@ -1,5 +1,4 @@ module.exports = { - skip: true, description: 'returns correct file names for multiple outputs (#3467)', command: 'rollup -c' }; diff --git a/test/cli/samples/config-multiple-getfilename/_expected/es.txt b/test/cli/samples/config-multiple-getfilename/_expected/es.txt index 3c21391e2b3..deeb1faca1d 100644 --- a/test/cli/samples/config-multiple-getfilename/_expected/es.txt +++ b/test/cli/samples/config-multiple-getfilename/_expected/es.txt @@ -1 +1 @@ -es-main.js +es-main.js \ No newline at end of file From 96dad293509917aa221362a6dc7e06abd75b1ec0 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 16 Jun 2020 07:40:19 +0200 Subject: [PATCH 04/20] Just track which modules are in manual chunks during assignment --- src/Graph.ts | 12 +++++------ src/ModuleLoader.ts | 28 ++++++++++++------------ src/utils/chunkAssignment.ts | 41 +++++++++++++++--------------------- 3 files changed, 37 insertions(+), 44 deletions(-) diff --git a/src/Graph.ts b/src/Graph.ts index cb08a9ae85b..7d3b89939f5 100644 --- a/src/Graph.ts +++ b/src/Graph.ts @@ -61,8 +61,8 @@ export default class Graph { private entryModules: Module[] = []; private externalModules: ExternalModule[] = []; private implicitEntryModules: Module[] = []; - private manualChunkAliasByModule = new Map(); - private manualChunkModulesByAlias: Record = {}; + private manualChunkAliasByEntry = new Map(); + private manualChunkEntriesByAlias: Record = {}; private modules: Module[] = []; private pluginCache?: Record; @@ -153,8 +153,8 @@ export default class Graph { ? { chunks: [this.modules], manualChunks: {} } : getChunkAssignments( this.entryModules, - this.manualChunkModulesByAlias, - this.manualChunkAliasByModule + this.manualChunkEntriesByAlias, + this.manualChunkAliasByEntry ); for (const chunkModules of chunkedModules) { sortByExecutionOrder(chunkModules); @@ -258,8 +258,8 @@ export default class Graph { { entryModules: this.entryModules, implicitEntryModules: this.implicitEntryModules, - manualChunkAliasByModule: this.manualChunkAliasByModule, - manualChunkModulesByAlias: this.manualChunkModulesByAlias + manualChunkAliasByEntry: this.manualChunkAliasByEntry, + manualChunkEntriesByAlias: this.manualChunkEntriesByAlias } ] = await Promise.all([ this.moduleLoader.addEntryModules(normalizeEntryModules(this.options.input), true), diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts index 256f0b6e5ed..2aec0de3964 100644 --- a/src/ModuleLoader.ts +++ b/src/ModuleLoader.ts @@ -45,8 +45,8 @@ export class ModuleLoader { private readonly implicitEntryModules = new Set(); private readonly indexedEntryModules: { index: number; module: Module }[] = []; private latestLoadModulesPromise: Promise = Promise.resolve(); - private readonly manualChunkAliasByModule = new Map(); - private readonly manualChunkModulesByAlias: Record = {}; + private readonly manualChunkAliasByEntry = new Map(); + private readonly manualChunkEntriesByAlias: Record = {}; private nextEntryModuleIndex = 0; constructor( @@ -66,8 +66,8 @@ export class ModuleLoader { ): Promise<{ entryModules: Module[]; implicitEntryModules: Module[]; - manualChunkAliasByModule: Map; - manualChunkModulesByAlias: Record; + manualChunkAliasByEntry: Map; + manualChunkEntriesByAlias: Record; newEntryModules: Module[]; }> { const firstEntryModuleIndex = this.nextEntryModuleIndex; @@ -104,8 +104,8 @@ export class ModuleLoader { return { entryModules: this.indexedEntryModules.map(({ module }) => module), implicitEntryModules: [...this.implicitEntryModules], - manualChunkAliasByModule: this.manualChunkAliasByModule, - manualChunkModulesByAlias: this.manualChunkModulesByAlias, + manualChunkAliasByEntry: this.manualChunkAliasByEntry, + manualChunkEntriesByAlias: this.manualChunkEntriesByAlias, newEntryModules }; } @@ -121,11 +121,11 @@ export class ModuleLoader { const result = this.extendLoadModulesPromise( Promise.all( unresolvedManualChunks.map(({ id }) => this.loadEntryModule(id, false, undefined, null)) - ).then(manualChunkModules => { - for (let index = 0; index < manualChunkModules.length; index++) { + ).then(manualChunkEntries => { + for (let index = 0; index < manualChunkEntries.length; index++) { this.addModuleToManualChunk( unresolvedManualChunks[index].alias, - manualChunkModules[index] + manualChunkEntries[index] ); } }) @@ -260,15 +260,15 @@ export class ModuleLoader { } private addModuleToManualChunk(alias: string, module: Module) { - const existingAlias = this.manualChunkAliasByModule.get(module); + const existingAlias = this.manualChunkAliasByEntry.get(module); if (typeof existingAlias === 'string' && existingAlias !== alias) { return error(errCannotAssignModuleToChunk(module.id, alias, existingAlias)); } - this.manualChunkAliasByModule.set(module, alias); - if (!this.manualChunkModulesByAlias[alias]) { - this.manualChunkModulesByAlias[alias] = []; + this.manualChunkAliasByEntry.set(module, alias); + if (!this.manualChunkEntriesByAlias[alias]) { + this.manualChunkEntriesByAlias[alias] = []; } - this.manualChunkModulesByAlias[alias].push(module); + this.manualChunkEntriesByAlias[alias].push(module); } private async awaitLoadModulesPromise(): Promise { diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index 03d23434344..9e42ca3e6b7 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -5,28 +5,22 @@ type DependentModuleMap = Map>; export function getChunkAssignments( entryModules: Module[], - manualChunkEntries: Record, + manualChunkEntriesByAlias: Record, manualChunkAliasByEntry: Map ): { chunks: Module[][]; manualChunks: Record } { - // TODO Lukas would it be enough to just have a Set of which modules have an alias? - const manualChunkAliasByModule = new Map(manualChunkAliasByEntry); + const modulesInManualChunks = new Set(manualChunkAliasByEntry.keys()); const manualChunks = Object.create(null); - for (const chunkName of Object.keys(manualChunkEntries)) { - const manualChunkModules = (manualChunks[chunkName] = []); - for (const entry of manualChunkEntries[chunkName]) { - addStaticDependenciesToManualChunk( - entry, - chunkName, - manualChunkModules, - manualChunkAliasByModule - ); + for (const chunkName of Object.keys(manualChunkEntriesByAlias)) { + const chunkModules = (manualChunks[chunkName] = []); + for (const entry of manualChunkEntriesByAlias[chunkName]) { + addStaticDependenciesToManualChunk(entry, chunkModules, modulesInManualChunks); } } const assignedEntryPointsByModule: DependentModuleMap = new Map(); const { dependentEntryPointsByModule, dynamicEntryModules } = analyzeModuleGraph( entryModules, - manualChunkAliasByModule + modulesInManualChunks ); const dynamicallyDependentEntryPointsByDynamicEntry: DependentModuleMap = getDynamicDependentEntryPoints( dependentEntryPointsByModule, @@ -54,7 +48,7 @@ export function getChunkAssignments( assignedEntryPoints.add(assignedEntry); } for (const dependency of module.getDependenciesToBeIncluded()) { - if (!(dependency instanceof ExternalModule || manualChunkAliasByModule.has(dependency))) { + if (!(dependency instanceof ExternalModule || modulesInManualChunks.has(dependency))) { modulesToHandle.add(dependency); } } @@ -81,13 +75,13 @@ export function getChunkAssignments( } for (const entry of entryModules) { - if (!manualChunkAliasByModule.has(entry)) { + if (!modulesInManualChunks.has(entry)) { assignEntryToStaticDependencies(entry, null); } } for (const entry of dynamicEntryModules) { - if (!manualChunkAliasByModule.has(entry)) { + if (!modulesInManualChunks.has(entry)) { assignEntryToStaticDependencies( entry, dynamicallyDependentEntryPointsByDynamicEntry.get(entry)! @@ -97,7 +91,7 @@ export function getChunkAssignments( return { chunks: createChunks( - [...Object.keys(manualChunkEntries), ...entryModules, ...dynamicEntryModules], + [...Object.keys(manualChunkEntriesByAlias), ...entryModules, ...dynamicEntryModules], assignedEntryPointsByModule ), manualChunks @@ -106,16 +100,15 @@ export function getChunkAssignments( function addStaticDependenciesToManualChunk( entry: Module, - manualChunkAlias: string, manualChunkModules: Module[], - manualChunkAliasByModule: Map + modulesInManualChunks: Set ) { const modulesToHandle = new Set([entry]); for (const module of modulesToHandle) { - manualChunkAliasByModule.set(module, manualChunkAlias); + modulesInManualChunks.add(module); manualChunkModules.push(module); for (const dependency of module.getDependenciesToBeIncluded()) { - if (!(dependency instanceof ExternalModule || manualChunkAliasByModule.has(dependency))) { + if (!(dependency instanceof ExternalModule || modulesInManualChunks.has(dependency))) { modulesToHandle.add(dependency); } } @@ -124,7 +117,7 @@ function addStaticDependenciesToManualChunk( function analyzeModuleGraph( entryModules: Module[], - manualChunkAliasByModule: Map + modulesInManualChunks: Set ): { dependentEntryPointsByModule: DependentModuleMap; dynamicEntryModules: Set; @@ -145,14 +138,14 @@ function analyzeModuleGraph( if ( resolution instanceof Module && resolution.includedDynamicImporters.length > 0 && - !manualChunkAliasByModule.has(resolution) + !modulesInManualChunks.has(resolution) ) { dynamicEntryModules.add(resolution); entriesToHandle.add(resolution); } } for (const dependency of module.implicitlyLoadedBefore) { - if (!manualChunkAliasByModule.has(dependency)) { + if (!modulesInManualChunks.has(dependency)) { dynamicEntryModules.add(dependency); entriesToHandle.add(dependency); } From d62b3676b5603c46bbc8f8228992430aef36378d Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 16 Jun 2020 08:01:03 +0200 Subject: [PATCH 05/20] Simplify manual chunk logic --- src/Graph.ts | 31 +++++-------------------- src/utils/chunkAssignment.ts | 45 ++++++++++++++++++------------------ 2 files changed, 29 insertions(+), 47 deletions(-) diff --git a/src/Graph.ts b/src/Graph.ts index 7d3b89939f5..8b6092896de 100644 --- a/src/Graph.ts +++ b/src/Graph.ts @@ -147,36 +147,17 @@ export default class Graph { } } } else { - // TODO Lukas even better, the chunks could be objects with optional aliases - const { chunks: chunkedModules, manualChunks: modulesByManualChunk } = this.options - .inlineDynamicImports - ? { chunks: [this.modules], manualChunks: {} } + const chunkDefinitions = this.options.inlineDynamicImports + ? [{ alias: null, modules: this.modules }] : getChunkAssignments( this.entryModules, this.manualChunkEntriesByAlias, this.manualChunkAliasByEntry ); - for (const chunkModules of chunkedModules) { - sortByExecutionOrder(chunkModules); + for (const { alias, modules } of chunkDefinitions) { + sortByExecutionOrder(modules); const chunk = new Chunk( - chunkModules, - this.options, - this.unsetOptions, - this.modulesById, - chunkByModule, - facadeChunkByModule, - null - ); - chunks.push(chunk); - for (const module of chunkModules) { - chunkByModule.set(module, chunk); - } - } - for (const alias of Object.keys(modulesByManualChunk)) { - const chunkModules = modulesByManualChunk[alias]; - sortByExecutionOrder(chunkModules); - const chunk = new Chunk( - chunkModules, + modules, this.options, this.unsetOptions, this.modulesById, @@ -185,7 +166,7 @@ export default class Graph { alias ); chunks.push(chunk); - for (const module of chunkModules) { + for (const module of modules) { chunkByModule.set(module, chunk); } } diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index 9e42ca3e6b7..422ccae669b 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -1,23 +1,25 @@ import ExternalModule from '../ExternalModule'; import Module from '../Module'; -type DependentModuleMap = Map>; +type DependentModuleMap = Map>; +type ChunkDefinitions = { alias: string | null; modules: Module[] }[]; export function getChunkAssignments( entryModules: Module[], manualChunkEntriesByAlias: Record, manualChunkAliasByEntry: Map -): { chunks: Module[][]; manualChunks: Record } { +): ChunkDefinitions { const modulesInManualChunks = new Set(manualChunkAliasByEntry.keys()); - const manualChunks = Object.create(null); - for (const chunkName of Object.keys(manualChunkEntriesByAlias)) { - const chunkModules = (manualChunks[chunkName] = []); - for (const entry of manualChunkEntriesByAlias[chunkName]) { + const chunkDefinitions: ChunkDefinitions = []; + for (const alias of Object.keys(manualChunkEntriesByAlias)) { + const chunkModules: Module[] = []; + for (const entry of manualChunkEntriesByAlias[alias]) { addStaticDependenciesToManualChunk(entry, chunkModules, modulesInManualChunks); } + chunkDefinitions.push({ alias, modules: chunkModules }); } - const assignedEntryPointsByModule: DependentModuleMap = new Map(); + const assignedEntryPointsByModule: DependentModuleMap = new Map(); const { dependentEntryPointsByModule, dynamicEntryModules } = analyzeModuleGraph( entryModules, modulesInManualChunks @@ -30,8 +32,7 @@ export function getChunkAssignments( function assignEntryToStaticDependencies( entry: Module, - dynamicDependentEntryPoints: Set | null, - assignedEntry: Module | string = entry + dynamicDependentEntryPoints: Set | null ) { const modulesToHandle = new Set([entry]); for (const module of modulesToHandle) { @@ -45,7 +46,7 @@ export function getChunkAssignments( ) { continue; } else { - assignedEntryPoints.add(assignedEntry); + assignedEntryPoints.add(entry); } for (const dependency of module.getDependenciesToBeIncluded()) { if (!(dependency instanceof ExternalModule || modulesInManualChunks.has(dependency))) { @@ -89,13 +90,10 @@ export function getChunkAssignments( } } - return { - chunks: createChunks( - [...Object.keys(manualChunkEntriesByAlias), ...entryModules, ...dynamicEntryModules], - assignedEntryPointsByModule - ), - manualChunks - }; + chunkDefinitions.push( + ...createChunks([...entryModules, ...dynamicEntryModules], assignedEntryPointsByModule) + ); + return chunkDefinitions; } function addStaticDependenciesToManualChunk( @@ -155,7 +153,7 @@ function analyzeModuleGraph( return { dependentEntryPointsByModule, dynamicEntryModules }; } -function getDependentModules(moduleMap: DependentModuleMap, module: Module): Set { +function getDependentModules(moduleMap: DependentModuleMap, module: Module): Set { const dependentModules = moduleMap.get(module) || new Set(); moduleMap.set(module, dependentModules); return dependentModules; @@ -184,9 +182,9 @@ function getDynamicDependentEntryPoints( } function createChunks( - allEntryPoints: (Module | string)[], - assignedEntryPointsByModule: DependentModuleMap -) { + allEntryPoints: Module[], + assignedEntryPointsByModule: DependentModuleMap +): ChunkDefinitions { const chunkModules: { [chunkSignature: string]: Module[] } = Object.create(null); for (const [module, assignedEntryPoints] of assignedEntryPointsByModule) { let chunkSignature = ''; @@ -200,5 +198,8 @@ function createChunks( chunkModules[chunkSignature] = [module]; } } - return Object.keys(chunkModules).map(chunkSignature => chunkModules[chunkSignature]); + return Object.keys(chunkModules).map(chunkSignature => ({ + alias: null, + modules: chunkModules[chunkSignature] + })); } From d4bfcecc8af9b5c160cb2db61c1f5669f90336ac Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 16 Jun 2020 20:50:18 +0200 Subject: [PATCH 06/20] Further simplify manual chunk logic --- src/Bundle.ts | 1 + src/Chunk.ts | 5 ++--- src/Graph.ts | 11 +++-------- src/ModuleLoader.ts | 10 +++------- src/utils/chunkAssignment.ts | 17 +++++++++-------- 5 files changed, 18 insertions(+), 26 deletions(-) diff --git a/src/Bundle.ts b/src/Bundle.ts index 4d38e6f6088..e7b51c42b88 100644 --- a/src/Bundle.ts +++ b/src/Bundle.ts @@ -25,6 +25,7 @@ export default class Bundle { private readonly graph: Graph // TODO Lukas replace with used properties ) {} + // TODO Lukas make this one nicer by structuring it async generate(isWrite: boolean): Promise { timeStart('GENERATE', 1); const outputBundle: OutputBundleWithPlaceholders = Object.create(null); diff --git a/src/Chunk.ts b/src/Chunk.ts index da6dec2d46c..cdda5b1b5af 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -614,7 +614,6 @@ export default class Chunk { ) { timeStart('render format', 3); - const chunkId = this.id!; const format = options.format; const finalise = finalisers[format]; if (options.dynamicImportFunction && format !== 'es') { @@ -712,8 +711,8 @@ export default class Chunk { let file: string; if (options.file) file = resolve(options.sourcemapFile || options.file); - else if (options.dir) file = resolve(options.dir, chunkId); - else file = resolve(chunkId); + else if (options.dir) file = resolve(options.dir, this.id!); + else file = resolve(this.id!); const decodedMap = magicString.generateDecodedMap({}); map = collapseSourcemaps( diff --git a/src/Graph.ts b/src/Graph.ts index 8b6092896de..3b9657ca097 100644 --- a/src/Graph.ts +++ b/src/Graph.ts @@ -62,7 +62,6 @@ export default class Graph { private externalModules: ExternalModule[] = []; private implicitEntryModules: Module[] = []; private manualChunkAliasByEntry = new Map(); - private manualChunkEntriesByAlias: Record = {}; private modules: Module[] = []; private pluginCache?: Record; @@ -122,6 +121,7 @@ export default class Graph { this.phase = BuildPhase.GENERATE; } + // TODO Lukas note that this is both returning a value and mutating its argument generateChunks(facadeChunkByModule: Map): Chunk[] { const chunks: Chunk[] = []; const chunkByModule = new Map(); @@ -149,11 +149,7 @@ export default class Graph { } else { const chunkDefinitions = this.options.inlineDynamicImports ? [{ alias: null, modules: this.modules }] - : getChunkAssignments( - this.entryModules, - this.manualChunkEntriesByAlias, - this.manualChunkAliasByEntry - ); + : getChunkAssignments(this.entryModules, this.manualChunkAliasByEntry); for (const { alias, modules } of chunkDefinitions) { sortByExecutionOrder(modules); const chunk = new Chunk( @@ -239,8 +235,7 @@ export default class Graph { { entryModules: this.entryModules, implicitEntryModules: this.implicitEntryModules, - manualChunkAliasByEntry: this.manualChunkAliasByEntry, - manualChunkEntriesByAlias: this.manualChunkEntriesByAlias + manualChunkAliasByEntry: this.manualChunkAliasByEntry } ] = await Promise.all([ this.moduleLoader.addEntryModules(normalizeEntryModules(this.options.input), true), diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts index 2aec0de3964..9afb3b5da30 100644 --- a/src/ModuleLoader.ts +++ b/src/ModuleLoader.ts @@ -40,13 +40,15 @@ export interface UnresolvedModule { name: string | null; } +// TODO Lukas can we remove the manual chunk logic entirely except for adding non-entry modules? +// Then we could even do that during generate. Add a function that receives an array of entry ids +// and returns an array of modules, which we call once for each alias in a Promise.all. export class ModuleLoader { private readonly hasModuleSideEffects: HasModuleSideEffects; private readonly implicitEntryModules = new Set(); private readonly indexedEntryModules: { index: number; module: Module }[] = []; private latestLoadModulesPromise: Promise = Promise.resolve(); private readonly manualChunkAliasByEntry = new Map(); - private readonly manualChunkEntriesByAlias: Record = {}; private nextEntryModuleIndex = 0; constructor( @@ -67,7 +69,6 @@ export class ModuleLoader { entryModules: Module[]; implicitEntryModules: Module[]; manualChunkAliasByEntry: Map; - manualChunkEntriesByAlias: Record; newEntryModules: Module[]; }> { const firstEntryModuleIndex = this.nextEntryModuleIndex; @@ -105,7 +106,6 @@ export class ModuleLoader { entryModules: this.indexedEntryModules.map(({ module }) => module), implicitEntryModules: [...this.implicitEntryModules], manualChunkAliasByEntry: this.manualChunkAliasByEntry, - manualChunkEntriesByAlias: this.manualChunkEntriesByAlias, newEntryModules }; } @@ -265,10 +265,6 @@ export class ModuleLoader { return error(errCannotAssignModuleToChunk(module.id, alias, existingAlias)); } this.manualChunkAliasByEntry.set(module, alias); - if (!this.manualChunkEntriesByAlias[alias]) { - this.manualChunkEntriesByAlias[alias] = []; - } - this.manualChunkEntriesByAlias[alias].push(module); } private async awaitLoadModulesPromise(): Promise { diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index 422ccae669b..1ca7a4ff1aa 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -6,17 +6,18 @@ type ChunkDefinitions = { alias: string | null; modules: Module[] }[]; export function getChunkAssignments( entryModules: Module[], - manualChunkEntriesByAlias: Record, manualChunkAliasByEntry: Map ): ChunkDefinitions { - const modulesInManualChunks = new Set(manualChunkAliasByEntry.keys()); const chunkDefinitions: ChunkDefinitions = []; - for (const alias of Object.keys(manualChunkEntriesByAlias)) { - const chunkModules: Module[] = []; - for (const entry of manualChunkEntriesByAlias[alias]) { - addStaticDependenciesToManualChunk(entry, chunkModules, modulesInManualChunks); - } - chunkDefinitions.push({ alias, modules: chunkModules }); + const modulesInManualChunks = new Set(manualChunkAliasByEntry.keys()); + const manualChunkModulesByAlias: Record = Object.create(null); + for (const [entry, alias] of manualChunkAliasByEntry) { + const chunkModules = (manualChunkModulesByAlias[alias] = + manualChunkModulesByAlias[alias] || []); + addStaticDependenciesToManualChunk(entry, chunkModules, modulesInManualChunks); + } + for (const [alias, modules] of Object.entries(manualChunkModulesByAlias)) { + chunkDefinitions.push({ alias, modules }); } const assignedEntryPointsByModule: DependentModuleMap = new Map(); From a6a540c254ddb2dadc9fb6da8f869e43e0734b34 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Wed, 17 Jun 2020 07:14:18 +0200 Subject: [PATCH 07/20] Simplify chunk generation --- src/Chunk.ts | 2 +- src/Graph.ts | 67 +++++++------------ .../warn-mixed-exports-multiple/_config.js | 2 +- .../inline-dynamic-imports-bundle/_config.js | 17 +++++ .../inline-dynamic-imports-bundle/lib.js | 1 + .../inline-dynamic-imports-bundle/main.js | 1 + .../reexporter.js | 1 + .../invalid-default-export-mode/main.js | 2 +- .../preserve-modules/mixed-exports/_config.js | 8 +-- 9 files changed, 53 insertions(+), 48 deletions(-) create mode 100644 test/function/samples/inline-dynamic-imports-bundle/_config.js create mode 100644 test/function/samples/inline-dynamic-imports-bundle/lib.js create mode 100644 test/function/samples/inline-dynamic-imports-bundle/main.js create mode 100644 test/function/samples/inline-dynamic-imports-bundle/reexporter.js diff --git a/src/Chunk.ts b/src/Chunk.ts index cdda5b1b5af..71a73cbbf48 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -206,7 +206,7 @@ export default class Chunk { if (this.isEmpty && module.isIncluded()) { this.isEmpty = false; } - if (module.isEntryPoint) { + if (module.isEntryPoint || inputOptions.preserveModules) { this.entryModules.push(module); } for (const importer of module.includedDynamicImporters) { diff --git a/src/Graph.ts b/src/Graph.ts index 3b9657ca097..924d5582054 100644 --- a/src/Graph.ts +++ b/src/Graph.ts @@ -125,49 +125,26 @@ export default class Graph { generateChunks(facadeChunkByModule: Map): Chunk[] { const chunks: Chunk[] = []; const chunkByModule = new Map(); - if (this.options.preserveModules) { - for (const module of this.modules) { - if ( - module.isIncluded() || - module.isEntryPoint || - module.includedDynamicImporters.length > 0 - ) { - const chunk = new Chunk( - [module], - this.options, - this.unsetOptions, - this.modulesById, - chunkByModule, - facadeChunkByModule, - null - ); - chunk.entryModules = [module]; - chunks.push(chunk); - chunkByModule.set(module, chunk); - } - } - } else { - const chunkDefinitions = this.options.inlineDynamicImports - ? [{ alias: null, modules: this.modules }] - : getChunkAssignments(this.entryModules, this.manualChunkAliasByEntry); - for (const { alias, modules } of chunkDefinitions) { - sortByExecutionOrder(modules); - const chunk = new Chunk( - modules, - this.options, - this.unsetOptions, - this.modulesById, - chunkByModule, - facadeChunkByModule, - alias - ); - chunks.push(chunk); - for (const module of modules) { - chunkByModule.set(module, chunk); - } + for (const { alias, modules } of this.options.inlineDynamicImports + ? [{ alias: null, modules: getIncludedModules(this.modulesById) }] + : this.options.preserveModules + ? getIncludedModules(this.modulesById).map(module => ({ alias: null, modules: [module] })) + : getChunkAssignments(this.entryModules, this.manualChunkAliasByEntry)) { + sortByExecutionOrder(modules); + const chunk = new Chunk( + modules, + this.options, + this.unsetOptions, + this.modulesById, + chunkByModule, + facadeChunkByModule, + alias + ); + chunks.push(chunk); + for (const module of modules) { + chunkByModule.set(module, chunk); } } - for (const chunk of chunks) { chunk.link(); } @@ -331,3 +308,11 @@ export default class Graph { } } } + +function getIncludedModules(modulesById: Map): Module[] { + return [...modulesById.values()].filter( + module => + module instanceof Module && + (module.isIncluded() || module.isEntryPoint || module.includedDynamicImporters.length > 0) + ) as Module[]; +} diff --git a/test/cli/samples/warn-mixed-exports-multiple/_config.js b/test/cli/samples/warn-mixed-exports-multiple/_config.js index 75ed8c1955a..fc19537ac45 100644 --- a/test/cli/samples/warn-mixed-exports-multiple/_config.js +++ b/test/cli/samples/warn-mixed-exports-multiple/_config.js @@ -9,9 +9,9 @@ module.exports = { '(!) Mixing named and default exports\n' + 'https://rollupjs.org/guide/en/#output-exports\n' + 'The following entry modules are using named and default exports together:\n' + + 'main.js\n' + 'lib1.js\n' + 'lib2.js\n' + - 'lib3.js\n' + '...and 3 other entry modules\n' + '\n' + "Consumers of your bundle will have to use chunk['default'] to access their default export, which may not be what you want. Use `output.exports: 'named'` to disable this warning\n" diff --git a/test/function/samples/inline-dynamic-imports-bundle/_config.js b/test/function/samples/inline-dynamic-imports-bundle/_config.js new file mode 100644 index 00000000000..a53445cff3b --- /dev/null +++ b/test/function/samples/inline-dynamic-imports-bundle/_config.js @@ -0,0 +1,17 @@ +const assert = require('assert'); +const path = require('path'); + +module.exports = { + description: 'ignores non-bundled modules when inlining dynamic imports', + options: { + inlineDynamicImports: true, + plugins: { + generateBundle(options, bundle) { + assert.deepStrictEqual(Object.keys(bundle['main.js'].modules), [ + path.join(__dirname, 'lib.js'), + path.join(__dirname, 'main.js') + ]); + } + } + } +}; diff --git a/test/function/samples/inline-dynamic-imports-bundle/lib.js b/test/function/samples/inline-dynamic-imports-bundle/lib.js new file mode 100644 index 00000000000..9d7381d29f6 --- /dev/null +++ b/test/function/samples/inline-dynamic-imports-bundle/lib.js @@ -0,0 +1 @@ +export const foo = 42; diff --git a/test/function/samples/inline-dynamic-imports-bundle/main.js b/test/function/samples/inline-dynamic-imports-bundle/main.js new file mode 100644 index 00000000000..0bb1f9f4b4a --- /dev/null +++ b/test/function/samples/inline-dynamic-imports-bundle/main.js @@ -0,0 +1 @@ +export { foo } from './reexporter'; diff --git a/test/function/samples/inline-dynamic-imports-bundle/reexporter.js b/test/function/samples/inline-dynamic-imports-bundle/reexporter.js new file mode 100644 index 00000000000..26a05cf13db --- /dev/null +++ b/test/function/samples/inline-dynamic-imports-bundle/reexporter.js @@ -0,0 +1 @@ +export { foo } from './lib'; diff --git a/test/function/samples/preserve-modules/invalid-default-export-mode/main.js b/test/function/samples/preserve-modules/invalid-default-export-mode/main.js index f26e8d860a6..c379b667da9 100644 --- a/test/function/samples/preserve-modules/invalid-default-export-mode/main.js +++ b/test/function/samples/preserve-modules/invalid-default-export-mode/main.js @@ -1,3 +1,3 @@ import { value } from './lib.js'; - assert.equal(value, 42); +export default 43; diff --git a/test/function/samples/preserve-modules/mixed-exports/_config.js b/test/function/samples/preserve-modules/mixed-exports/_config.js index d6b878a4ba9..712148c9874 100644 --- a/test/function/samples/preserve-modules/mixed-exports/_config.js +++ b/test/function/samples/preserve-modules/mixed-exports/_config.js @@ -9,16 +9,16 @@ module.exports = { warnings: [ { code: 'MIXED_EXPORTS', - id: path.resolve(__dirname, 'lib1.js'), + id: path.resolve(__dirname, 'main.js'), message: - 'Entry module "lib1.js" is using named and default exports together. Consumers of your bundle will have to use `chunk["default"]` to access the default export, which may not be what you want. Use `output.exports: "named"` to disable this warning', + 'Entry module "main.js" is using named and default exports together. Consumers of your bundle will have to use `chunk["default"]` to access the default export, which may not be what you want. Use `output.exports: "named"` to disable this warning', url: 'https://rollupjs.org/guide/en/#output-exports' }, { code: 'MIXED_EXPORTS', - id: path.resolve(__dirname, 'main.js'), + id: path.resolve(__dirname, 'lib1.js'), message: - 'Entry module "main.js" is using named and default exports together. Consumers of your bundle will have to use `chunk["default"]` to access the default export, which may not be what you want. Use `output.exports: "named"` to disable this warning', + 'Entry module "lib1.js" is using named and default exports together. Consumers of your bundle will have to use `chunk["default"]` to access the default export, which may not be what you want. Use `output.exports: "named"` to disable this warning', url: 'https://rollupjs.org/guide/en/#output-exports' } ] From 122f0f88b3081ecb48b3fe50d29d9308d5584fa4 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Wed, 17 Jun 2020 07:35:16 +0200 Subject: [PATCH 08/20] Move chunking logic to bundle --- src/Bundle.ts | 53 +++++++++++++++++-- src/Graph.ts | 57 ++------------------- src/rollup/rollup.ts | 28 ++++++---- src/utils/options/normalizeOutputOptions.ts | 5 +- 4 files changed, 76 insertions(+), 67 deletions(-) diff --git a/src/Bundle.ts b/src/Bundle.ts index e7b51c42b88..fe88f19e399 100644 --- a/src/Bundle.ts +++ b/src/Bundle.ts @@ -1,5 +1,5 @@ import Chunk from './Chunk'; -import Graph from './Graph'; +import ExternalModule from './ExternalModule'; import Module from './Module'; import { NormalizedInputOptions, @@ -9,8 +9,10 @@ import { OutputChunk } from './rollup/types'; import { Addons, createAddons } from './utils/addons'; +import { getChunkAssignments } from './utils/chunkAssignment'; import commondir from './utils/commondir'; import { error, warnDeprecation } from './utils/error'; +import { sortByExecutionOrder } from './utils/executionOrder'; import { FILE_PLACEHOLDER } from './utils/FileEmitter'; import { basename, isAbsolute } from './utils/path'; import { PluginDriver } from './utils/PluginDriver'; @@ -22,7 +24,9 @@ export default class Bundle { private readonly unsetOptions: Set, private readonly inputOptions: NormalizedInputOptions, private readonly pluginDriver: PluginDriver, - private readonly graph: Graph // TODO Lukas replace with used properties + private readonly modulesById: Map, + private readonly entryModules: Module[], + private readonly manualChunkAliasByEntry: Map ) {} // TODO Lukas make this one nicer by structuring it @@ -41,8 +45,7 @@ export default class Bundle { await this.pluginDriver.hookParallel('renderStart', [this.outputOptions, this.inputOptions]); timeStart('generate chunks', 2); - // TODO Lukas move to this class - const chunks = this.graph.generateChunks(facadeChunkByModule); + const chunks = this.generateChunks(facadeChunkByModule); timeEnd('generate chunks', 2); if (chunks.length > 1) { @@ -130,6 +133,40 @@ export default class Bundle { bundle[chunk.id] = FILE_PLACEHOLDER; } } + + // TODO Lukas note that this is both returning a value and mutating its argument + private generateChunks(facadeChunkByModule: Map): Chunk[] { + const chunks: Chunk[] = []; + const chunkByModule = new Map(); + for (const { alias, modules } of this.inputOptions.inlineDynamicImports + ? [{ alias: null, modules: getIncludedModules(this.modulesById) }] + : this.inputOptions.preserveModules + ? getIncludedModules(this.modulesById).map(module => ({ alias: null, modules: [module] })) + : getChunkAssignments(this.entryModules, this.manualChunkAliasByEntry)) { + sortByExecutionOrder(modules); + const chunk = new Chunk( + modules, + this.inputOptions, + this.unsetOptions, + this.modulesById, + chunkByModule, + facadeChunkByModule, + alias + ); + chunks.push(chunk); + for (const module of modules) { + chunkByModule.set(module, chunk); + } + } + for (const chunk of chunks) { + chunk.link(); + } + const facades: Chunk[] = []; + for (const chunk of chunks) { + facades.push(...chunk.generateFacades()); + } + return [...chunks, ...facades]; + } } function getAbsoluteEntryModulePaths(chunks: Chunk[]): string[] { @@ -176,3 +213,11 @@ function assignChunksToBundle( } return outputBundle as OutputBundle; } + +function getIncludedModules(modulesById: Map): Module[] { + return [...modulesById.values()].filter( + module => + module instanceof Module && + (module.isIncluded() || module.isEntryPoint || module.includedDynamicImporters.length > 0) + ) as Module[]; +} diff --git a/src/Graph.ts b/src/Graph.ts index 924d5582054..3f2a7b93fe9 100644 --- a/src/Graph.ts +++ b/src/Graph.ts @@ -1,7 +1,6 @@ import * as acorn from 'acorn'; import GlobalScope from './ast/scopes/GlobalScope'; import { PathTracker } from './ast/utils/PathTracker'; -import Chunk from './Chunk'; import ExternalModule from './ExternalModule'; import Module from './Module'; import { ModuleLoader, UnresolvedModule } from './ModuleLoader'; @@ -14,9 +13,8 @@ import { SerializablePluginCache } from './rollup/types'; import { BuildPhase } from './utils/buildPhase'; -import { getChunkAssignments } from './utils/chunkAssignment'; import { errImplicitDependantIsNotIncluded, error } from './utils/error'; -import { analyseModuleExecution, sortByExecutionOrder } from './utils/executionOrder'; +import { analyseModuleExecution } from './utils/executionOrder'; import { getId } from './utils/getId'; import { PluginDriver } from './utils/PluginDriver'; import relativeId from './utils/relativeId'; @@ -44,11 +42,14 @@ function normalizeEntryModules( })); } +// TODO Lukas in the end get rid of manual chunks logic here as well export default class Graph { acornParser: typeof acorn.Parser; cachedModules: Map; contextParse: (code: string, acornOptions?: acorn.Options) => acorn.Node; deoptimizationTracker: PathTracker; + entryModules: Module[] = []; + manualChunkAliasByEntry = new Map(); moduleLoader: ModuleLoader; modulesById = new Map(); needsTreeshakingPass = false; @@ -58,18 +59,12 @@ export default class Graph { watchFiles: Record = Object.create(null); watchMode = false; - private entryModules: Module[] = []; private externalModules: ExternalModule[] = []; private implicitEntryModules: Module[] = []; - private manualChunkAliasByEntry = new Map(); private modules: Module[] = []; private pluginCache?: Record; - constructor( - private readonly options: NormalizedInputOptions, - private readonly unsetOptions: Set, - watcher: RollupWatcher | null - ) { + constructor(private readonly options: NormalizedInputOptions, watcher: RollupWatcher | null) { this.deoptimizationTracker = new PathTracker(); this.cachedModules = new Map(); if (options.cache !== false) { @@ -121,40 +116,6 @@ export default class Graph { this.phase = BuildPhase.GENERATE; } - // TODO Lukas note that this is both returning a value and mutating its argument - generateChunks(facadeChunkByModule: Map): Chunk[] { - const chunks: Chunk[] = []; - const chunkByModule = new Map(); - for (const { alias, modules } of this.options.inlineDynamicImports - ? [{ alias: null, modules: getIncludedModules(this.modulesById) }] - : this.options.preserveModules - ? getIncludedModules(this.modulesById).map(module => ({ alias: null, modules: [module] })) - : getChunkAssignments(this.entryModules, this.manualChunkAliasByEntry)) { - sortByExecutionOrder(modules); - const chunk = new Chunk( - modules, - this.options, - this.unsetOptions, - this.modulesById, - chunkByModule, - facadeChunkByModule, - alias - ); - chunks.push(chunk); - for (const module of modules) { - chunkByModule.set(module, chunk); - } - } - for (const chunk of chunks) { - chunk.link(); - } - const facades: Chunk[] = []; - for (const chunk of chunks) { - facades.push(...chunk.generateFacades()); - } - return [...chunks, ...facades]; - } - getCache(): RollupCache { // handle plugin cache eviction for (const name in this.pluginCache) { @@ -308,11 +269,3 @@ export default class Graph { } } } - -function getIncludedModules(modulesById: Map): Module[] { - return [...modulesById.values()].filter( - module => - module instanceof Module && - (module.isIncluded() || module.isEntryPoint || module.includedDynamicImporters.length > 0) - ) as Module[]; -} diff --git a/src/rollup/rollup.ts b/src/rollup/rollup.ts index 4480480c121..c2127457287 100644 --- a/src/rollup/rollup.ts +++ b/src/rollup/rollup.ts @@ -32,13 +32,13 @@ export async function rollupInternal( rawInputOptions: GenericConfigObject, watcher: RollupWatcher | null ): Promise { - const { options: inputOptions, unsetOptions } = getInputOptions( + const { options: inputOptions, unsetOptions: unsetInputOptions } = getInputOptions( rawInputOptions, watcher !== null ); initialiseTimers(inputOptions); - const graph = new Graph(inputOptions, unsetOptions, watcher); + const graph = new Graph(inputOptions, watcher); // remove the cache option from the memory after graph creation (cache is not used anymore) const useCache = rawInputOptions.cache !== false; @@ -65,6 +65,7 @@ export async function rollupInternal( const result: RollupBuild = { cache: useCache ? graph.getCache() : undefined, + // TODO Lukas merge generate and write here async generate(rawOutputOptions: OutputOptions) { const { options: outputOptions, @@ -73,14 +74,17 @@ export async function rollupInternal( } = getOutputOptionsAndPluginDriver( rawOutputOptions as GenericConfigObject, graph.pluginDriver, - inputOptions + inputOptions, + unsetInputOptions ); const bundle = new Bundle( outputOptions, unsetOptions, inputOptions, outputPluginDriver, - graph + graph.modulesById, + graph.entryModules, + graph.manualChunkAliasByEntry ); return createOutput(await bundle.generate(false)); }, @@ -93,7 +97,8 @@ export async function rollupInternal( } = getOutputOptionsAndPluginDriver( rawOutputOptions as GenericConfigObject, graph.pluginDriver, - inputOptions + inputOptions, + unsetInputOptions ); if (!outputOptions.dir && !outputOptions.file) { return error({ @@ -106,7 +111,9 @@ export async function rollupInternal( unsetOptions, inputOptions, outputPluginDriver, - graph + graph.modulesById, + graph.entryModules, + graph.manualChunkAliasByEntry ); const generated = await bundle.generate(true); await Promise.all( @@ -161,7 +168,8 @@ function normalizePlugins(plugins: Plugin[], anonymousPrefix: string): void { function getOutputOptionsAndPluginDriver( rawOutputOptions: GenericConfigObject, inputPluginDriver: PluginDriver, - inputOptions: NormalizedInputOptions + inputOptions: NormalizedInputOptions, + unsetInputOptions: Set ): { options: NormalizedOutputOptions; outputPluginDriver: PluginDriver; @@ -175,13 +183,14 @@ function getOutputOptionsAndPluginDriver( const outputPluginDriver = inputPluginDriver.createOutputPluginDriver(rawPlugins); return { - ...getOutputOptions(inputOptions, rawOutputOptions, outputPluginDriver), + ...getOutputOptions(inputOptions, unsetInputOptions, rawOutputOptions, outputPluginDriver), outputPluginDriver }; } function getOutputOptions( inputOptions: NormalizedInputOptions, + unsetInputOptions: Set, rawOutputOptions: GenericConfigObject, outputPluginDriver: PluginDriver ): { options: NormalizedOutputOptions; unsetOptions: Set } { @@ -199,7 +208,8 @@ function getOutputOptions( }; } ) as GenericConfigObject, - inputOptions + inputOptions, + unsetInputOptions ); } diff --git a/src/utils/options/normalizeOutputOptions.ts b/src/utils/options/normalizeOutputOptions.ts index 520530abd84..8d836199595 100644 --- a/src/utils/options/normalizeOutputOptions.ts +++ b/src/utils/options/normalizeOutputOptions.ts @@ -14,11 +14,12 @@ import { GenericConfigObject, warnUnknownOptions } from './options'; export function normalizeOutputOptions( config: GenericConfigObject, - inputOptions: NormalizedInputOptions + inputOptions: NormalizedInputOptions, + unsetInputOptions: Set ): { options: NormalizedOutputOptions; unsetOptions: Set } { // These are options that may trigger special warnings or behaviour later // if the user did not select an explicit value - const unsetOptions = new Set(); + const unsetOptions = new Set(unsetInputOptions); const compact = (config.compact as boolean | undefined) || false; const file = getFile(config, inputOptions); From 442e0b11525480f3a7cceb9c6c2236568d21d3db Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Wed, 17 Jun 2020 20:29:28 +0200 Subject: [PATCH 09/20] Fix getFileName for chunks, some cleanup --- src/Bundle.ts | 18 ++++++------- src/Chunk.ts | 12 +++------ src/utils/FileEmitter.ts | 2 +- .../_config.js | 26 +++++++++++++++++++ .../chunk.js | 1 + .../main.js | 1 + 6 files changed, 42 insertions(+), 18 deletions(-) create mode 100644 test/function/samples/deprecated/emit-chunk/chunk-filename-not-available-render-start/_config.js create mode 100644 test/function/samples/deprecated/emit-chunk/chunk-filename-not-available-render-start/chunk.js create mode 100644 test/function/samples/deprecated/emit-chunk/chunk-filename-not-available-render-start/main.js diff --git a/src/Bundle.ts b/src/Bundle.ts index fe88f19e399..1d00161a4f0 100644 --- a/src/Bundle.ts +++ b/src/Bundle.ts @@ -19,6 +19,8 @@ import { PluginDriver } from './utils/PluginDriver'; import { timeEnd, timeStart } from './utils/timers'; export default class Bundle { + private facadeChunkByModule = new Map(); + constructor( private readonly outputOptions: NormalizedOutputOptions, private readonly unsetOptions: Set, @@ -33,25 +35,22 @@ export default class Bundle { async generate(isWrite: boolean): Promise { timeStart('GENERATE', 1); const outputBundle: OutputBundleWithPlaceholders = Object.create(null); - const facadeChunkByModule = new Map(); - // TODO Lukas this can only be done once we have chunks due to facadeChunkByModule at the moment - // Better: test not getting the file name in renderStart and put a ?.id in getChunkFileName this.pluginDriver.setOutputBundle( outputBundle, this.outputOptions.assetFileNames, - facadeChunkByModule + this.facadeChunkByModule ); try { await this.pluginDriver.hookParallel('renderStart', [this.outputOptions, this.inputOptions]); timeStart('generate chunks', 2); - const chunks = this.generateChunks(facadeChunkByModule); + const chunks = this.generateChunks(); timeEnd('generate chunks', 2); + timeStart('render modules', 2); if (chunks.length > 1) { validateOptionsForMultiChunkOutput(this.outputOptions); } - const addons = await createAddons(this.outputOptions, this.pluginDriver); for (const chunk of chunks) { chunk.generateExports(this.outputOptions); @@ -60,6 +59,8 @@ export default class Bundle { for (const chunk of chunks) { chunk.preRender(this.outputOptions, inputBase, this.pluginDriver); } + timeEnd('render modules', 2); + this.assignChunkIds(chunks, inputBase, addons, outputBundle); assignChunksToBundle(chunks, outputBundle); @@ -134,8 +135,7 @@ export default class Bundle { } } - // TODO Lukas note that this is both returning a value and mutating its argument - private generateChunks(facadeChunkByModule: Map): Chunk[] { + private generateChunks(): Chunk[] { const chunks: Chunk[] = []; const chunkByModule = new Map(); for (const { alias, modules } of this.inputOptions.inlineDynamicImports @@ -150,7 +150,7 @@ export default class Bundle { this.unsetOptions, this.modulesById, chunkByModule, - facadeChunkByModule, + this.facadeChunkByModule, alias ); chunks.push(chunk); diff --git a/src/Chunk.ts b/src/Chunk.ts index 71a73cbbf48..8361b2510f9 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -505,8 +505,6 @@ export default class Chunk { // prerender allows chunk hashes and names to be generated before finalizing preRender(options: NormalizedOutputOptions, inputBase: string, outputPluginDriver: PluginDriver) { - timeStart('render modules', 3); - const magicString = new MagicStringBundle({ separator: options.compact ? '' : '\n\n' }); this.usedModules = []; this.indentString = getIndentString(this.orderedModules, options); @@ -602,8 +600,6 @@ export default class Chunk { this.renderedDependencies = this.getChunkDependencyDeclarations(options); this.renderedExports = this.exportMode === 'none' ? [] : this.getChunkExportDeclarations(options.format); - - timeEnd('render modules', 3); } async render( @@ -612,7 +608,7 @@ export default class Chunk { outputChunk: RenderedChunk, outputPluginDriver: PluginDriver ) { - timeStart('render format', 3); + timeStart('render format', 2); const format = options.format; const finalise = finalisers[format]; @@ -694,7 +690,7 @@ export default class Chunk { if (addons.footer) magicString.append(addons.footer); const prevCode = magicString.toString(); - timeEnd('render format', 3); + timeEnd('render format', 2); let map: SourceMap = null as any; const chunkSourcemapChain: DecodedSourceMapOrMissing[] = []; @@ -707,7 +703,7 @@ export default class Chunk { sourcemapChain: chunkSourcemapChain }); if (options.sourcemap) { - timeStart('sourcemap', 3); + timeStart('sourcemap', 2); let file: string; if (options.file) file = resolve(options.sourcemapFile || options.file); @@ -741,7 +737,7 @@ export default class Chunk { }) .map(normalize); - timeEnd('sourcemap', 3); + timeEnd('sourcemap', 2); } if (options.compact !== true && code[code.length - 1] !== '\n') code += '\n'; return { code, map }; diff --git a/src/utils/FileEmitter.ts b/src/utils/FileEmitter.ts index 19f6c9c399a..ac5f6204ff1 100644 --- a/src/utils/FileEmitter.ts +++ b/src/utils/FileEmitter.ts @@ -142,7 +142,7 @@ function getChunkFileName( file: ConsumedChunk, facadeChunkByModule: Map | null ): string { - const fileName = file.fileName || (file.module && facadeChunkByModule?.get(file.module)!.id); + const fileName = file.fileName || (file.module && facadeChunkByModule?.get(file.module)?.id); if (!fileName) return error(errChunkNotGeneratedForFileName(file.fileName || file.name)); return fileName; } diff --git a/test/function/samples/deprecated/emit-chunk/chunk-filename-not-available-render-start/_config.js b/test/function/samples/deprecated/emit-chunk/chunk-filename-not-available-render-start/_config.js new file mode 100644 index 00000000000..42a48e679eb --- /dev/null +++ b/test/function/samples/deprecated/emit-chunk/chunk-filename-not-available-render-start/_config.js @@ -0,0 +1,26 @@ +let chunkId; + +module.exports = { + description: 'Throws when accessing the filename in renderStart', + options: { + strictDeprecations: false, + input: 'main.js', + plugins: { + name: 'test-plugin', + buildStart() { + chunkId = this.emitChunk('chunk.js'); + }, + renderStart() { + this.getChunkFileName(chunkId); + } + } + }, + generateError: { + code: 'PLUGIN_ERROR', + hook: 'renderStart', + message: + 'Plugin error - Unable to get file name for chunk "chunk.js". Ensure that generate is called first.', + plugin: 'test-plugin', + pluginCode: 'CHUNK_NOT_GENERATED' + } +}; diff --git a/test/function/samples/deprecated/emit-chunk/chunk-filename-not-available-render-start/chunk.js b/test/function/samples/deprecated/emit-chunk/chunk-filename-not-available-render-start/chunk.js new file mode 100644 index 00000000000..36b1d61dd25 --- /dev/null +++ b/test/function/samples/deprecated/emit-chunk/chunk-filename-not-available-render-start/chunk.js @@ -0,0 +1 @@ +console.log('chunk'); diff --git a/test/function/samples/deprecated/emit-chunk/chunk-filename-not-available-render-start/main.js b/test/function/samples/deprecated/emit-chunk/chunk-filename-not-available-render-start/main.js new file mode 100644 index 00000000000..c0b933d7b56 --- /dev/null +++ b/test/function/samples/deprecated/emit-chunk/chunk-filename-not-available-render-start/main.js @@ -0,0 +1 @@ +console.log('main'); From 162141e0822de298a09dbadc144412f70bb37380 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Thu, 18 Jun 2020 06:57:46 +0200 Subject: [PATCH 10/20] Extract manualChunks logic from ModuleLoader --- src/Graph.ts | 58 ++++++++++++++++++++++++++++----- src/ModuleLoader.ts | 66 +++++++------------------------------- test/misc/sanity-checks.js | 23 +++++++------ 3 files changed, 72 insertions(+), 75 deletions(-) diff --git a/src/Graph.ts b/src/Graph.ts index 3f2a7b93fe9..58fdcd2d0a6 100644 --- a/src/Graph.ts +++ b/src/Graph.ts @@ -5,6 +5,7 @@ import ExternalModule from './ExternalModule'; import Module from './Module'; import { ModuleLoader, UnresolvedModule } from './ModuleLoader'; import { + GetManualChunk, ModuleInfo, ModuleJSON, NormalizedInputOptions, @@ -13,7 +14,11 @@ import { SerializablePluginCache } from './rollup/types'; import { BuildPhase } from './utils/buildPhase'; -import { errImplicitDependantIsNotIncluded, error } from './utils/error'; +import { + errCannotAssignModuleToChunk, + errImplicitDependantIsNotIncluded, + error +} from './utils/error'; import { analyseModuleExecution } from './utils/executionOrder'; import { getId } from './utils/getId'; import { PluginDriver } from './utils/PluginDriver'; @@ -167,20 +172,57 @@ export default class Graph { }; }; + private async addManualChunks(manualChunks: Record): Promise { + const chunkEntries = await Promise.all( + Object.keys(manualChunks).map(async alias => ({ + alias, + entries: await this.moduleLoader.addAdditionalModules(manualChunks[alias]).catch(error => { + console.log(error); + console.error(error); + return []; + }) + })) + ); + for (const { alias, entries } of chunkEntries) { + for (const entry of entries) { + this.addModuleToManualChunk(alias, entry); + } + } + } + + private addModuleToManualChunk(alias: string, module: Module) { + const existingAlias = this.manualChunkAliasByEntry.get(module); + if (typeof existingAlias === 'string' && existingAlias !== alias) { + return error(errCannotAssignModuleToChunk(module.id, alias, existingAlias)); + } + this.manualChunkAliasByEntry.set(module, alias); + } + + private assignManualChunks(getManualChunk: GetManualChunk) { + const manualChunksApi = { + getModuleIds: () => this.modulesById.keys(), + getModuleInfo: this.getModuleInfo + }; + for (const module of this.modulesById.values()) { + if (module instanceof Module) { + const manualChunkAlias = getManualChunk(module.id, manualChunksApi); + if (typeof manualChunkAlias === 'string') { + this.addModuleToManualChunk(manualChunkAlias, module); + } + } + } + } + private async generateModuleGraph(): Promise { const { manualChunks } = this.options; [ - { - entryModules: this.entryModules, - implicitEntryModules: this.implicitEntryModules, - manualChunkAliasByEntry: this.manualChunkAliasByEntry - } + { entryModules: this.entryModules, implicitEntryModules: this.implicitEntryModules } ] = await Promise.all([ this.moduleLoader.addEntryModules(normalizeEntryModules(this.options.input), true), - typeof manualChunks === 'object' ? this.moduleLoader.addManualChunks(manualChunks) : null + typeof manualChunks === 'object' ? this.addManualChunks(manualChunks) : null ]); if (typeof manualChunks === 'function') { - this.moduleLoader.assignManualChunks(manualChunks); + this.assignManualChunks(manualChunks); } if (this.entryModules.length === 0) { throw new Error('You must supply options.input to rollup'); diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts index 9afb3b5da30..cd30c1cc985 100644 --- a/src/ModuleLoader.ts +++ b/src/ModuleLoader.ts @@ -4,7 +4,6 @@ import Graph from './Graph'; import Module from './Module'; import { EmittedChunk, - GetManualChunk, HasModuleSideEffects, NormalizedInputOptions, ResolvedId, @@ -13,7 +12,6 @@ import { } from './rollup/types'; import { errBadLoader, - errCannotAssignModuleToChunk, errEntryCannotBeExternal, errExternalSyntheticExports, errImplicitDependantCannotBeExternal, @@ -40,15 +38,11 @@ export interface UnresolvedModule { name: string | null; } -// TODO Lukas can we remove the manual chunk logic entirely except for adding non-entry modules? -// Then we could even do that during generate. Add a function that receives an array of entry ids -// and returns an array of modules, which we call once for each alias in a Promise.all. export class ModuleLoader { private readonly hasModuleSideEffects: HasModuleSideEffects; private readonly implicitEntryModules = new Set(); private readonly indexedEntryModules: { index: number; module: Module }[] = []; private latestLoadModulesPromise: Promise = Promise.resolve(); - private readonly manualChunkAliasByEntry = new Map(); private nextEntryModuleIndex = 0; constructor( @@ -62,13 +56,20 @@ export class ModuleLoader { : () => true; } + async addAdditionalModules(unresolvedModules: string[]): Promise { + const result = this.extendLoadModulesPromise( + Promise.all(unresolvedModules.map(id => this.loadEntryModule(id, false, undefined, null))) + ); + await this.awaitLoadModulesPromise(); + return result; + } + async addEntryModules( unresolvedEntryModules: UnresolvedModule[], isUserDefined: boolean ): Promise<{ entryModules: Module[]; implicitEntryModules: Module[]; - manualChunkAliasByEntry: Map; newEntryModules: Module[]; }> { const firstEntryModuleIndex = this.nextEntryModuleIndex; @@ -105,50 +106,10 @@ export class ModuleLoader { return { entryModules: this.indexedEntryModules.map(({ module }) => module), implicitEntryModules: [...this.implicitEntryModules], - manualChunkAliasByEntry: this.manualChunkAliasByEntry, newEntryModules }; } - async addManualChunks(manualChunks: Record): Promise { - const unresolvedManualChunks: { alias: string; id: string }[] = []; - for (const alias of Object.keys(manualChunks)) { - const manualChunkIds = manualChunks[alias]; - for (const id of manualChunkIds) { - unresolvedManualChunks.push({ id, alias }); - } - } - const result = this.extendLoadModulesPromise( - Promise.all( - unresolvedManualChunks.map(({ id }) => this.loadEntryModule(id, false, undefined, null)) - ).then(manualChunkEntries => { - for (let index = 0; index < manualChunkEntries.length; index++) { - this.addModuleToManualChunk( - unresolvedManualChunks[index].alias, - manualChunkEntries[index] - ); - } - }) - ); - await this.awaitLoadModulesPromise(); - return result; - } - - assignManualChunks(getManualChunk: GetManualChunk) { - const manualChunksApi = { - getModuleIds: () => this.modulesById.keys(), - getModuleInfo: this.graph.getModuleInfo - }; - for (const module of this.modulesById.values()) { - if (module instanceof Module) { - const manualChunkAlias = getManualChunk(module.id, manualChunksApi); - if (typeof manualChunkAlias === 'string') { - this.addModuleToManualChunk(manualChunkAlias, module); - } - } - } - } - async emitChunk({ fileName, id, @@ -259,14 +220,6 @@ export class ModuleLoader { } } - private addModuleToManualChunk(alias: string, module: Module) { - const existingAlias = this.manualChunkAliasByEntry.get(module); - if (typeof existingAlias === 'string' && existingAlias !== alias) { - return error(errCannotAssignModuleToChunk(module.id, alias, existingAlias)); - } - this.manualChunkAliasByEntry.set(module, alias); - } - private async awaitLoadModulesPromise(): Promise { let startingPromise; do { @@ -280,6 +233,9 @@ export class ModuleLoader { loadNewModulesPromise, this.latestLoadModulesPromise ]); + this.latestLoadModulesPromise.catch(() => { + /* Avoid unhandled Promise rejections */ + }); return loadNewModulesPromise; } diff --git a/test/misc/sanity-checks.js b/test/misc/sanity-checks.js index 6ef7efe6c6a..e88d2efaadc 100644 --- a/test/misc/sanity-checks.js +++ b/test/misc/sanity-checks.js @@ -96,7 +96,6 @@ describe('sanity checks', () => { ); }); - it('throws on incorrect bundle.generate format option', async () => { let error = null; const bundle = await rollup.rollup({ @@ -125,9 +124,7 @@ describe('sanity checks', () => { assert.equal(code, `function foo(x){ console.log(x); }\n\nexport { foo };\n`); }); - it('reuses existing error object', () => { - let error; - + it('reuses existing error object', async () => { class CustomError extends Error { constructor(message, x) { super(message); @@ -135,22 +132,24 @@ describe('sanity checks', () => { } } - return rollup - .rollup({ + let error = null; + const customError = new CustomError('foo', 'bar'); + try { + await rollup.rollup({ input: 'x', plugins: [ loader({ x: `console.log( 42 );` }), { - transform(code) { - error = new CustomError('foo', 'bar'); - this.error(error); + transform() { + this.error(customError); } } ] - }) - .catch(e => { - assert.equal(e, error); }); + } catch (buildError) { + error = buildError; + } + assert.strictEqual(error, customError); }); it('throws when using multiple inputs together with the "file" option', async () => { From 0d6aaf897a408ded699fac5c4384962d92260660 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Thu, 18 Jun 2020 21:51:32 +0200 Subject: [PATCH 11/20] Make manualChunks an output option --- src/Bundle.ts | 75 +++++++++-- src/Graph.ts | 75 ++--------- src/ModuleLoader.ts | 1 + src/rollup/rollup.ts | 8 +- src/rollup/types.d.ts | 6 +- src/utils/chunkAssignment.ts | 2 +- src/utils/options/mergeOptions.ts | 1 + src/utils/options/normalizeInputOptions.ts | 30 ++--- src/utils/options/normalizeOutputOptions.ts | 25 ++++ .../samples/circular-manual-chunks/_config.js | 2 +- .../circular-manual-chunks/_config.js | 9 ++ .../_expected/amd/generated-lib1.js | 8 ++ .../_expected/amd/generated-lib2.js | 8 ++ .../_expected/amd/main.js | 9 ++ .../_expected/cjs/generated-lib1.js | 8 ++ .../_expected/cjs/generated-lib2.js | 8 ++ .../_expected/cjs/main.js | 10 ++ .../_expected/es/generated-lib1.js | 6 + .../_expected/es/generated-lib2.js | 6 + .../_expected/es/main.js | 2 + .../_expected/system/generated-lib1.js | 15 +++ .../_expected/system/generated-lib2.js | 15 +++ .../_expected/system/main.js | 13 ++ .../deprecated/circular-manual-chunks/lib1.js | 3 + .../deprecated/circular-manual-chunks/lib2.js | 3 + .../deprecated/circular-manual-chunks/main.js | 1 + .../emit-file-chunk-facade/_config.js | 21 ++++ .../_expected/amd/generated-build-starter.js | 11 ++ .../_expected/amd/generated-buildStart.js | 9 ++ .../_expected/amd/main.js | 5 + .../_expected/cjs/generated-build-starter.js | 9 ++ .../_expected/cjs/generated-buildStart.js | 9 ++ .../_expected/cjs/main.js | 5 + .../_expected/es/generated-build-starter.js | 6 + .../_expected/es/generated-buildStart.js | 1 + .../_expected/es/main.js | 3 + .../system/generated-build-starter.js | 13 ++ .../_expected/system/generated-buildStart.js | 13 ++ .../_expected/system/main.js | 15 +++ .../emit-file-chunk-facade/buildStart.js | 5 + .../deprecated/emit-file-chunk-facade/dep.js | 2 + .../deprecated/emit-file-chunk-facade/main.js | 3 + .../manual-chunk-avoid-facade/_config.js | 10 ++ .../_expected/amd/main1.js | 5 + .../_expected/amd/main2.js | 11 ++ .../_expected/cjs/main1.js | 5 + .../_expected/cjs/main2.js | 9 ++ .../_expected/es/main1.js | 3 + .../_expected/es/main2.js | 5 + .../_expected/system/main1.js | 14 +++ .../_expected/system/main2.js | 12 ++ .../manual-chunk-avoid-facade/dep.js | 1 + .../manual-chunk-avoid-facade/main1.js | 3 + .../manual-chunk-avoid-facade/main2.js | 5 + .../_config.js | 13 ++ .../_expected/amd/main.js | 13 ++ .../_expected/amd/main2.js | 5 + .../_expected/cjs/main.js | 11 ++ .../_expected/cjs/main2.js | 4 + .../_expected/es/main.js | 7 ++ .../_expected/es/main2.js | 1 + .../_expected/system/main.js | 14 +++ .../_expected/system/main2.js | 11 ++ .../dep.js | 1 + .../main.js | 5 + .../main2.js | 1 + .../outer.js | 3 + .../_config.js | 13 ++ .../_expected/amd/main.js | 13 ++ .../_expected/cjs/main.js | 11 ++ .../_expected/es/main.js | 7 ++ .../_expected/system/main.js | 14 +++ .../manual-chunk-contains-entry-match/dep.js | 1 + .../manual-chunk-contains-entry-match/main.js | 5 + .../outer.js | 3 + .../manual-chunk-is-entry-conflict/_config.js | 13 ++ .../_expected/amd/main.js | 13 ++ .../_expected/amd/main2.js | 5 + .../_expected/cjs/main.js | 11 ++ .../_expected/cjs/main2.js | 4 + .../_expected/es/main.js | 7 ++ .../_expected/es/main2.js | 1 + .../_expected/system/main.js | 14 +++ .../_expected/system/main2.js | 11 ++ .../manual-chunk-is-entry-conflict/dep.js | 1 + .../manual-chunk-is-entry-conflict/main.js | 5 + .../manual-chunk-is-entry-conflict/main2.js | 1 + .../manual-chunk-is-entry-match/_config.js | 13 ++ .../_expected/amd/main.js | 13 ++ .../_expected/cjs/main.js | 11 ++ .../_expected/es/main.js | 7 ++ .../_expected/system/main.js | 14 +++ .../manual-chunk-is-entry-match/dep.js | 1 + .../manual-chunk-is-entry-match/main.js | 5 + .../manual-chunks-different-nested/_config.js | 12 ++ .../_expected/amd/generated-manual-inner.js | 5 + .../_expected/amd/generated-manual-middle.js | 5 + .../_expected/amd/generated-manual-outer.js | 5 + .../_expected/amd/main.js | 5 + .../_expected/cjs/generated-manual-inner.js | 3 + .../_expected/cjs/generated-manual-middle.js | 5 + .../_expected/cjs/generated-manual-outer.js | 5 + .../_expected/cjs/main.js | 7 ++ .../_expected/es/generated-manual-inner.js | 1 + .../_expected/es/generated-manual-middle.js | 3 + .../_expected/es/generated-manual-outer.js | 3 + .../_expected/es/main.js | 5 + .../system/generated-manual-inner.js | 10 ++ .../system/generated-manual-middle.js | 11 ++ .../system/generated-manual-outer.js | 11 ++ .../_expected/system/main.js | 11 ++ .../manual-chunks-different-nested/inner.js | 1 + .../manual-chunks-different-nested/main.js | 3 + .../manual-chunks-different-nested/middle.js | 3 + .../manual-chunks-different-nested/outer.js | 3 + .../manual-chunks-dynamic-facades/_config.js | 10 ++ .../_expected/amd/generated-dynamic.js | 34 +++++ .../_expected/amd/main.js | 7 ++ .../_expected/cjs/generated-dynamic.js | 32 +++++ .../_expected/cjs/main.js | 7 ++ .../_expected/es/generated-dynamic.js | 27 ++++ .../_expected/es/main.js | 5 + .../_expected/system/generated-dynamic.js | 37 ++++++ .../_expected/system/main.js | 16 +++ .../manual-chunks-dynamic-facades/dep.js | 1 + .../manual-chunks-dynamic-facades/dynamic1.js | 4 + .../manual-chunks-dynamic-facades/dynamic2.js | 1 + .../manual-chunks-dynamic-facades/dynamic3.js | 1 + .../manual-chunks-dynamic-facades/main.js | 5 + .../_config.js | 10 ++ .../_expected/amd/generated-dynamic.js | 25 ++++ .../_expected/amd/main.js | 6 + .../_expected/cjs/generated-dynamic.js | 23 ++++ .../_expected/cjs/main.js | 4 + .../_expected/es/generated-dynamic.js | 20 +++ .../_expected/es/main.js | 2 + .../_expected/system/generated-dynamic.js | 29 +++++ .../_expected/system/main.js | 11 ++ .../dynamic1.js | 3 + .../dynamic2.js | 4 + .../main.js | 2 + .../manual-chunks-dynamic/_config.js | 10 ++ .../_expected/amd/generated-dynamic.js | 7 ++ .../_expected/amd/main.js | 5 + .../_expected/cjs/generated-dynamic.js | 5 + .../_expected/cjs/main.js | 3 + .../_expected/es/generated-dynamic.js | 3 + .../_expected/es/main.js | 1 + .../_expected/system/generated-dynamic.js | 10 ++ .../_expected/system/main.js | 10 ++ .../manual-chunks-dynamic/dynamic.js | 1 + .../deprecated/manual-chunks-dynamic/main.js | 1 + .../manual-chunks-function/_config.js | 12 ++ .../_expected/amd/generated-chunk-b.js | 7 ++ .../_expected/amd/generated-chunk-c.js | 5 + .../_expected/amd/main-a.js | 9 ++ .../_expected/cjs/generated-chunk-b.js | 5 + .../_expected/cjs/generated-chunk-c.js | 5 + .../_expected/cjs/main-a.js | 10 ++ .../_expected/es/generated-chunk-b.js | 3 + .../_expected/es/generated-chunk-c.js | 3 + .../_expected/es/main-a.js | 8 ++ .../_expected/system/generated-chunk-b.js | 12 ++ .../_expected/system/generated-chunk-c.js | 11 ++ .../_expected/system/main-a.js | 15 +++ .../manual-chunks-function/dep-a.js | 4 + .../manual-chunks-function/dep-b.js | 3 + .../manual-chunks-function/dep-c.js | 3 + .../deprecated/manual-chunks-function/dep1.js | 1 + .../deprecated/manual-chunks-function/dep2.js | 1 + .../manual-chunks-function/main-a.js | 4 + .../manual-chunks-nested/_config.js | 10 ++ .../_expected/amd/generated-manual.js | 9 ++ .../_expected/amd/main.js | 5 + .../_expected/cjs/generated-manual.js | 7 ++ .../_expected/cjs/main.js | 5 + .../_expected/es/generated-manual.js | 5 + .../manual-chunks-nested/_expected/es/main.js | 3 + .../_expected/system/generated-manual.js | 14 +++ .../_expected/system/main.js | 11 ++ .../deprecated/manual-chunks-nested/inner.js | 1 + .../deprecated/manual-chunks-nested/main.js | 3 + .../deprecated/manual-chunks-nested/middle.js | 3 + .../deprecated/manual-chunks-nested/outer.js | 3 + .../deprecated/manual-chunks/_config.js | 11 ++ .../_expected/amd/generated-deps2and3.js | 20 +++ .../_expected/amd/generated-lib1.js | 9 ++ .../manual-chunks/_expected/amd/main.js | 17 +++ .../_expected/cjs/generated-deps2and3.js | 20 +++ .../_expected/cjs/generated-lib1.js | 7 ++ .../manual-chunks/_expected/cjs/main.js | 18 +++ .../_expected/es/generated-deps2and3.js | 17 +++ .../_expected/es/generated-lib1.js | 5 + .../manual-chunks/_expected/es/main.js | 16 +++ .../_expected/system/generated-deps2and3.js | 31 +++++ .../_expected/system/generated-lib1.js | 14 +++ .../manual-chunks/_expected/system/main.js | 25 ++++ .../samples/deprecated/manual-chunks/dep1.js | 3 + .../samples/deprecated/manual-chunks/dep2.js | 6 + .../samples/deprecated/manual-chunks/dep3.js | 8 ++ .../samples/deprecated/manual-chunks/lib1.js | 7 ++ .../samples/deprecated/manual-chunks/lib2.js | 3 + .../samples/deprecated/manual-chunks/main.js | 15 +++ .../emit-file/emit-chunk-facade/_config.js | 6 +- .../manual-chunk-avoid-facade/_config.js | 6 +- .../_config.js | 7 +- .../_config.js | 6 +- .../manual-chunk-is-entry-conflict/_config.js | 6 +- .../manual-chunk-is-entry-match/_config.js | 6 +- .../manual-chunks-different-nested/_config.js | 10 +- .../manual-chunks-dynamic-facades/_config.js | 6 +- .../_config.js | 6 +- .../samples/manual-chunks-dynamic/_config.js | 6 +- .../samples/manual-chunks-function/_config.js | 8 +- .../samples/manual-chunks-nested/_config.js | 6 +- .../samples/manual-chunks/_config.js | 8 +- .../inline-imports-with-manual/_config.js | 15 +++ .../inline-imports-with-manual/lib.js | 1 + .../inline-imports-with-manual/main.js | 1 + .../manual-chunks-conflict/_config.js | 17 +++ .../deprecated/manual-chunks-conflict/dep.js | 1 + .../deprecated/manual-chunks-conflict/main.js | 1 + .../deprecated/manual-chunks-info/_config.js | 75 +++++++++++ .../deprecated/manual-chunks-info/dynamic.js | 2 + .../deprecated/manual-chunks-info/lib.js | 1 + .../deprecated/manual-chunks-info/main.js | 3 + .../manual-chunks-preserve-modules/_config.js | 15 +++ .../manual-chunks-preserve-modules/lib.js | 1 + .../manual-chunks-preserve-modules/main.js | 3 + .../deprecations/manualChunks/_config.js | 13 ++ .../samples/deprecations/manualChunks/main.js | 11 ++ .../inline-imports-with-manual/_config.js | 8 +- .../samples/manual-chunks-conflict/_config.js | 15 ++- .../samples/manual-chunks-info/_config.js | 118 +++++++++--------- test/function/samples/options-hook/_config.js | 1 - .../samples/output-options-hook/_config.js | 1 + .../preserve-modules/manual-chunks/_config.js | 8 +- test/misc/optionList.js | 2 +- 238 files changed, 2012 insertions(+), 207 deletions(-) create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/_config.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/amd/generated-lib1.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/amd/generated-lib2.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/cjs/generated-lib1.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/cjs/generated-lib2.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/es/generated-lib1.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/es/generated-lib2.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/system/generated-lib1.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/system/generated-lib2.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/lib1.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/lib2.js create mode 100644 test/chunking-form/samples/deprecated/circular-manual-chunks/main.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/_config.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/amd/generated-build-starter.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/amd/generated-buildStart.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/cjs/generated-build-starter.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/cjs/generated-buildStart.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/es/generated-build-starter.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/es/generated-buildStart.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/system/generated-build-starter.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/system/generated-buildStart.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/buildStart.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/dep.js create mode 100644 test/chunking-form/samples/deprecated/emit-file-chunk-facade/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_config.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/amd/main1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/amd/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/cjs/main1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/cjs/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/es/main1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/es/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/system/main1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/system/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/dep.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/main1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_config.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/amd/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/cjs/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/es/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/system/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/dep.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/outer.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_config.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/dep.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/outer.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_config.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/amd/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/cjs/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/es/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/system/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/dep.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/main2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_config.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/dep.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_config.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/generated-manual-inner.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/generated-manual-middle.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/generated-manual-outer.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/generated-manual-inner.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/generated-manual-middle.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/generated-manual-outer.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/generated-manual-inner.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/generated-manual-middle.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/generated-manual-outer.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/generated-manual-inner.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/generated-manual-middle.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/generated-manual-outer.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/inner.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/middle.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-different-nested/outer.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_config.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/amd/generated-dynamic.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/cjs/generated-dynamic.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/es/generated-dynamic.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/system/generated-dynamic.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dep.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dynamic1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dynamic2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dynamic3.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_config.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/amd/generated-dynamic.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/cjs/generated-dynamic.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/es/generated-dynamic.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/system/generated-dynamic.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/dynamic1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/dynamic2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic/_config.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/amd/generated-dynamic.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/cjs/generated-dynamic.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/es/generated-dynamic.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/system/generated-dynamic.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic/dynamic.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-dynamic/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/_config.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/_expected/amd/generated-chunk-b.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/_expected/amd/generated-chunk-c.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/_expected/amd/main-a.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/_expected/cjs/generated-chunk-b.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/_expected/cjs/generated-chunk-c.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/_expected/cjs/main-a.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/_expected/es/generated-chunk-b.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/_expected/es/generated-chunk-c.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/_expected/es/main-a.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/_expected/system/generated-chunk-b.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/_expected/system/generated-chunk-c.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/_expected/system/main-a.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/dep-a.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/dep-b.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/dep-c.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/dep1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/dep2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-function/main-a.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-nested/_config.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/amd/generated-manual.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/cjs/generated-manual.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/es/generated-manual.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/system/generated-manual.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-nested/inner.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-nested/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-nested/middle.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks-nested/outer.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/_config.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/_expected/amd/generated-deps2and3.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/_expected/amd/generated-lib1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/_expected/cjs/generated-deps2and3.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/_expected/cjs/generated-lib1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/_expected/es/generated-deps2and3.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/_expected/es/generated-lib1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/_expected/system/generated-deps2and3.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/_expected/system/generated-lib1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/dep1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/dep2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/dep3.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/lib1.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/lib2.js create mode 100644 test/chunking-form/samples/deprecated/manual-chunks/main.js create mode 100644 test/function/samples/deprecated/inline-imports-with-manual/_config.js create mode 100644 test/function/samples/deprecated/inline-imports-with-manual/lib.js create mode 100644 test/function/samples/deprecated/inline-imports-with-manual/main.js create mode 100644 test/function/samples/deprecated/manual-chunks-conflict/_config.js create mode 100644 test/function/samples/deprecated/manual-chunks-conflict/dep.js create mode 100644 test/function/samples/deprecated/manual-chunks-conflict/main.js create mode 100644 test/function/samples/deprecated/manual-chunks-info/_config.js create mode 100644 test/function/samples/deprecated/manual-chunks-info/dynamic.js create mode 100644 test/function/samples/deprecated/manual-chunks-info/lib.js create mode 100644 test/function/samples/deprecated/manual-chunks-info/main.js create mode 100644 test/function/samples/deprecated/manual-chunks-preserve-modules/_config.js create mode 100644 test/function/samples/deprecated/manual-chunks-preserve-modules/lib.js create mode 100644 test/function/samples/deprecated/manual-chunks-preserve-modules/main.js create mode 100644 test/function/samples/deprecations/manualChunks/_config.js create mode 100644 test/function/samples/deprecations/manualChunks/main.js diff --git a/src/Bundle.ts b/src/Bundle.ts index 1d00161a4f0..73be41855f1 100644 --- a/src/Bundle.ts +++ b/src/Bundle.ts @@ -1,7 +1,9 @@ import Chunk from './Chunk'; import ExternalModule from './ExternalModule'; +import Graph from './Graph'; import Module from './Module'; import { + GetManualChunk, NormalizedInputOptions, NormalizedOutputOptions, OutputBundle, @@ -11,7 +13,7 @@ import { import { Addons, createAddons } from './utils/addons'; import { getChunkAssignments } from './utils/chunkAssignment'; import commondir from './utils/commondir'; -import { error, warnDeprecation } from './utils/error'; +import { errCannotAssignModuleToChunk, error, warnDeprecation } from './utils/error'; import { sortByExecutionOrder } from './utils/executionOrder'; import { FILE_PLACEHOLDER } from './utils/FileEmitter'; import { basename, isAbsolute } from './utils/path'; @@ -26,9 +28,7 @@ export default class Bundle { private readonly unsetOptions: Set, private readonly inputOptions: NormalizedInputOptions, private readonly pluginDriver: PluginDriver, - private readonly modulesById: Map, - private readonly entryModules: Module[], - private readonly manualChunkAliasByEntry: Map + private readonly graph: Graph ) {} // TODO Lukas make this one nicer by structuring it @@ -44,7 +44,7 @@ export default class Bundle { await this.pluginDriver.hookParallel('renderStart', [this.outputOptions, this.inputOptions]); timeStart('generate chunks', 2); - const chunks = this.generateChunks(); + const chunks = await this.generateChunks(); timeEnd('generate chunks', 2); timeStart('render modules', 2); @@ -101,6 +101,24 @@ export default class Bundle { return outputBundle as OutputBundle; } + private async addManualChunks( + manualChunks: Record + ): Promise> { + const manualChunkAliasByEntry = new Map(); + const chunkEntries = await Promise.all( + Object.keys(manualChunks).map(async alias => ({ + alias, + entries: await this.graph.moduleLoader.addAdditionalModules(manualChunks[alias]) + })) + ); + for (const { alias, entries } of chunkEntries) { + for (const entry of entries) { + addModuleToManualChunk(alias, entry, manualChunkAliasByEntry); + } + } + return manualChunkAliasByEntry; + } + private assignChunkIds( chunks: Chunk[], inputBase: string, @@ -135,20 +153,45 @@ export default class Bundle { } } - private generateChunks(): Chunk[] { + private assignManualChunks(getManualChunk: GetManualChunk): Map { + const manualChunkAliasByEntry = new Map(); + const manualChunksApi = { + getModuleIds: () => this.graph.modulesById.keys(), + getModuleInfo: this.graph.getModuleInfo + }; + for (const module of this.graph.modulesById.values()) { + if (module instanceof Module) { + const manualChunkAlias = getManualChunk(module.id, manualChunksApi); + if (typeof manualChunkAlias === 'string') { + addModuleToManualChunk(manualChunkAlias, module, manualChunkAliasByEntry); + } + } + } + return manualChunkAliasByEntry; + } + + private async generateChunks(): Promise { + const { manualChunks } = this.outputOptions; + const manualChunkAliasByEntry = + typeof manualChunks === 'object' + ? await this.addManualChunks(manualChunks) + : this.assignManualChunks(manualChunks); const chunks: Chunk[] = []; const chunkByModule = new Map(); for (const { alias, modules } of this.inputOptions.inlineDynamicImports - ? [{ alias: null, modules: getIncludedModules(this.modulesById) }] + ? [{ alias: null, modules: getIncludedModules(this.graph.modulesById) }] : this.inputOptions.preserveModules - ? getIncludedModules(this.modulesById).map(module => ({ alias: null, modules: [module] })) - : getChunkAssignments(this.entryModules, this.manualChunkAliasByEntry)) { + ? getIncludedModules(this.graph.modulesById).map(module => ({ + alias: null, + modules: [module] + })) + : getChunkAssignments(this.graph.entryModules, manualChunkAliasByEntry)) { sortByExecutionOrder(modules); const chunk = new Chunk( modules, this.inputOptions, this.unsetOptions, - this.modulesById, + this.graph.modulesById, chunkByModule, this.facadeChunkByModule, alias @@ -221,3 +264,15 @@ function getIncludedModules(modulesById: Map): (module.isIncluded() || module.isEntryPoint || module.includedDynamicImporters.length > 0) ) as Module[]; } + +function addModuleToManualChunk( + alias: string, + module: Module, + manualChunkAliasByEntry: Map +) { + const existingAlias = manualChunkAliasByEntry.get(module); + if (typeof existingAlias === 'string' && existingAlias !== alias) { + return error(errCannotAssignModuleToChunk(module.id, alias, existingAlias)); + } + manualChunkAliasByEntry.set(module, alias); +} diff --git a/src/Graph.ts b/src/Graph.ts index 58fdcd2d0a6..2cf40a838ce 100644 --- a/src/Graph.ts +++ b/src/Graph.ts @@ -5,7 +5,6 @@ import ExternalModule from './ExternalModule'; import Module from './Module'; import { ModuleLoader, UnresolvedModule } from './ModuleLoader'; import { - GetManualChunk, ModuleInfo, ModuleJSON, NormalizedInputOptions, @@ -14,11 +13,7 @@ import { SerializablePluginCache } from './rollup/types'; import { BuildPhase } from './utils/buildPhase'; -import { - errCannotAssignModuleToChunk, - errImplicitDependantIsNotIncluded, - error -} from './utils/error'; +import { errImplicitDependantIsNotIncluded, error } from './utils/error'; import { analyseModuleExecution } from './utils/executionOrder'; import { getId } from './utils/getId'; import { PluginDriver } from './utils/PluginDriver'; @@ -47,14 +42,12 @@ function normalizeEntryModules( })); } -// TODO Lukas in the end get rid of manual chunks logic here as well export default class Graph { acornParser: typeof acorn.Parser; cachedModules: Map; contextParse: (code: string, acornOptions?: acorn.Options) => acorn.Node; deoptimizationTracker: PathTracker; entryModules: Module[] = []; - manualChunkAliasByEntry = new Map(); moduleLoader: ModuleLoader; modulesById = new Map(); needsTreeshakingPass = false; @@ -109,10 +102,10 @@ export default class Graph { await this.generateModuleGraph(); timeEnd('generate module graph', 2); - timeStart('link and order modules', 2); + timeStart('sort modules', 2); this.phase = BuildPhase.ANALYSE; - this.linkAndOrderModules(); - timeEnd('link and order modules', 2); + this.sortModules(); + timeEnd('sort modules', 2); timeStart('mark included statements', 2); this.includeStatements(); @@ -172,58 +165,11 @@ export default class Graph { }; }; - private async addManualChunks(manualChunks: Record): Promise { - const chunkEntries = await Promise.all( - Object.keys(manualChunks).map(async alias => ({ - alias, - entries: await this.moduleLoader.addAdditionalModules(manualChunks[alias]).catch(error => { - console.log(error); - console.error(error); - return []; - }) - })) - ); - for (const { alias, entries } of chunkEntries) { - for (const entry of entries) { - this.addModuleToManualChunk(alias, entry); - } - } - } - - private addModuleToManualChunk(alias: string, module: Module) { - const existingAlias = this.manualChunkAliasByEntry.get(module); - if (typeof existingAlias === 'string' && existingAlias !== alias) { - return error(errCannotAssignModuleToChunk(module.id, alias, existingAlias)); - } - this.manualChunkAliasByEntry.set(module, alias); - } - - private assignManualChunks(getManualChunk: GetManualChunk) { - const manualChunksApi = { - getModuleIds: () => this.modulesById.keys(), - getModuleInfo: this.getModuleInfo - }; - for (const module of this.modulesById.values()) { - if (module instanceof Module) { - const manualChunkAlias = getManualChunk(module.id, manualChunksApi); - if (typeof manualChunkAlias === 'string') { - this.addModuleToManualChunk(manualChunkAlias, module); - } - } - } - } - private async generateModuleGraph(): Promise { - const { manualChunks } = this.options; - [ - { entryModules: this.entryModules, implicitEntryModules: this.implicitEntryModules } - ] = await Promise.all([ - this.moduleLoader.addEntryModules(normalizeEntryModules(this.options.input), true), - typeof manualChunks === 'object' ? this.addManualChunks(manualChunks) : null - ]); - if (typeof manualChunks === 'function') { - this.assignManualChunks(manualChunks); - } + ({ + entryModules: this.entryModules, + implicitEntryModules: this.implicitEntryModules + } = await this.moduleLoader.addEntryModules(normalizeEntryModules(this.options.input), true)); if (this.entryModules.length === 0) { throw new Error('You must supply options.input to rollup'); } @@ -267,10 +213,7 @@ export default class Graph { } } - private linkAndOrderModules() { - for (const module of this.modules) { - module.linkDependencies(); - } + private sortModules() { const { orderedModules, cyclePaths } = analyseModuleExecution(this.entryModules); for (const cyclePath of cyclePaths) { this.options.onwarn({ diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts index cd30c1cc985..5a73490f624 100644 --- a/src/ModuleLoader.ts +++ b/src/ModuleLoader.ts @@ -322,6 +322,7 @@ export class ModuleLoader { } } } + module.linkDependencies(); return module; } diff --git a/src/rollup/rollup.ts b/src/rollup/rollup.ts index c2127457287..0be0d04d22d 100644 --- a/src/rollup/rollup.ts +++ b/src/rollup/rollup.ts @@ -82,9 +82,7 @@ export async function rollupInternal( unsetOptions, inputOptions, outputPluginDriver, - graph.modulesById, - graph.entryModules, - graph.manualChunkAliasByEntry + graph ); return createOutput(await bundle.generate(false)); }, @@ -111,9 +109,7 @@ export async function rollupInternal( unsetOptions, inputOptions, outputPluginDriver, - graph.modulesById, - graph.entryModules, - graph.manualChunkAliasByEntry + graph ); const generated = await bundle.generate(true); await Promise.all( diff --git a/src/rollup/types.d.ts b/src/rollup/types.d.ts index 335e0988a7b..ea3fa299059 100644 --- a/src/rollup/types.d.ts +++ b/src/rollup/types.d.ts @@ -492,6 +492,7 @@ export interface InputOptions { external?: ExternalOption; inlineDynamicImports?: boolean; input?: InputOption; + /** @deprecated Use the "manualChunks" output option instead. */ manualChunks?: ManualChunksOption; moduleContext?: ((id: string) => string | null | undefined) | { [id: string]: string }; onwarn?: WarningHandlerWithDefault; @@ -515,7 +516,8 @@ export interface NormalizedInputOptions { external: IsExternal; inlineDynamicImports: boolean; input: string[] | { [entryAlias: string]: string }; - manualChunks: ManualChunksOption; + /** @deprecated Use the "manualChunks" output option instead. */ + manualChunks: ManualChunksOption | undefined; moduleContext: (id: string) => string; onwarn: WarningHandler; perf: boolean; @@ -562,6 +564,7 @@ export interface OutputOptions { indent?: string | boolean; interop?: boolean; intro?: string | (() => string | Promise); + manualChunks?: ManualChunksOption; minifyInternalExports?: boolean; name?: string; namespaceToStringTag?: boolean; @@ -604,6 +607,7 @@ export interface NormalizedOutputOptions { indent: true | string; interop: boolean; intro: () => string | Promise; + manualChunks: ManualChunksOption; minifyInternalExports: boolean; name: string | undefined; namespaceToStringTag: boolean; diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index 1ca7a4ff1aa..186cc895ddf 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -106,7 +106,7 @@ function addStaticDependenciesToManualChunk( for (const module of modulesToHandle) { modulesInManualChunks.add(module); manualChunkModules.push(module); - for (const dependency of module.getDependenciesToBeIncluded()) { + for (const dependency of module.dependencies) { if (!(dependency instanceof ExternalModule || modulesInManualChunks.has(dependency))) { modulesToHandle.add(dependency); } diff --git a/src/utils/options/mergeOptions.ts b/src/utils/options/mergeOptions.ts index 74048416b5f..0d502366680 100644 --- a/src/utils/options/mergeOptions.ts +++ b/src/utils/options/mergeOptions.ts @@ -209,6 +209,7 @@ function mergeOutputOptions( indent: getOption('indent'), interop: getOption('interop'), intro: getOption('intro'), + manualChunks: getOption('manualChunks'), minifyInternalExports: getOption('minifyInternalExports'), name: getOption('name'), namespaceToStringTag: getOption('namespaceToStringTag'), diff --git a/src/utils/options/normalizeInputOptions.ts b/src/utils/options/normalizeInputOptions.ts index 751f9ac3883..27ed758efcb 100644 --- a/src/utils/options/normalizeInputOptions.ts +++ b/src/utils/options/normalizeInputOptions.ts @@ -50,7 +50,7 @@ export function normalizeInputOptions( external: getIdMatcher(config.external as ExternalOption), inlineDynamicImports, input: getInput(config, inlineDynamicImports), - manualChunks: getManualChunks(config, inlineDynamicImports, preserveModules), + manualChunks: getManualChunks(config, onwarn, strictDeprecations), moduleContext: getModuleContext(config, context), onwarn, perf: (config.perf as boolean | undefined) || false, @@ -175,25 +175,19 @@ const getInput = ( const getManualChunks = ( config: GenericConfigObject, - inlineDynamicImports: boolean, - preserveModules: boolean -): ManualChunksOption => { - const configManualChunks = config.manualChunks as ManualChunksOption; + warn: WarningHandler, + strictDeprecations: boolean +): ManualChunksOption | undefined => { + const configManualChunks = config.manualChunks as ManualChunksOption | undefined; if (configManualChunks) { - if (inlineDynamicImports) { - return error({ - code: 'INVALID_OPTION', - message: '"manualChunks" option is not supported for "inlineDynamicImports".' - }); - } - if (preserveModules) { - return error({ - code: 'INVALID_OPTION', - message: '"preserveModules" does not support the "manualChunks" option.' - }); - } + warnDeprecationWithOptions( + 'The "manualChunks" option is deprecated. Use the "output.manualChunks" option instead.', + false, + warn, + strictDeprecations + ); } - return configManualChunks || {}; + return configManualChunks; }; const getModuleContext = ( diff --git a/src/utils/options/normalizeOutputOptions.ts b/src/utils/options/normalizeOutputOptions.ts index 8d836199595..e0267995b19 100644 --- a/src/utils/options/normalizeOutputOptions.ts +++ b/src/utils/options/normalizeOutputOptions.ts @@ -1,6 +1,7 @@ import { GlobalsOption, InternalModuleFormat, + ManualChunksOption, ModuleFormat, NormalizedInputOptions, NormalizedOutputOptions, @@ -47,6 +48,7 @@ export function normalizeOutputOptions( indent: getIndent(config, compact), interop: (config.interop as boolean | undefined) ?? true, intro: getAddon(config, 'intro'), + manualChunks: getManualChunks(config, inputOptions), minifyInternalExports: getMinifyInternalExports(config, format, compact), name: config.name as string | undefined, namespaceToStringTag: (config.namespaceToStringTag as boolean | undefined) || false, @@ -189,6 +191,29 @@ const getIndent = (config: GenericConfigObject, compact: boolean): string | true return configIndent === false ? '' : configIndent ?? true; }; +const getManualChunks = ( + config: GenericConfigObject, + inputOptions: NormalizedInputOptions +): ManualChunksOption => { + const configManualChunks = + (config.manualChunks as ManualChunksOption | undefined) || inputOptions.manualChunks; + if (configManualChunks) { + if (inputOptions.inlineDynamicImports) { + return error({ + code: 'INVALID_OPTION', + message: '"manualChunks" option is not supported for "inlineDynamicImports".' + }); + } + if (inputOptions.preserveModules) { + return error({ + code: 'INVALID_OPTION', + message: '"preserveModules" does not support the "manualChunks" option.' + }); + } + } + return configManualChunks || {}; +}; + const getMinifyInternalExports = ( config: GenericConfigObject, format: InternalModuleFormat, diff --git a/test/chunking-form/samples/circular-manual-chunks/_config.js b/test/chunking-form/samples/circular-manual-chunks/_config.js index 35fc197570e..4a03dcf2c88 100644 --- a/test/chunking-form/samples/circular-manual-chunks/_config.js +++ b/test/chunking-form/samples/circular-manual-chunks/_config.js @@ -3,6 +3,6 @@ module.exports = { expectedWarnings: ['CIRCULAR_DEPENDENCY'], options: { input: 'main', - manualChunks: { lib1: ['lib1'], lib2: ['lib2'] } + output: { manualChunks: { lib1: ['lib1'], lib2: ['lib2'] } } } }; diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/_config.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/_config.js new file mode 100644 index 00000000000..1a256a1d458 --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/_config.js @@ -0,0 +1,9 @@ +module.exports = { + description: 'handles manual chunks with circular dependencies', + expectedWarnings: ['CIRCULAR_DEPENDENCY'], + options: { + strictDeprecations: false, + input: 'main', + manualChunks: { lib1: ['lib1'], lib2: ['lib2'] } + } +}; diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/amd/generated-lib1.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/amd/generated-lib1.js new file mode 100644 index 00000000000..257a2531b61 --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/amd/generated-lib1.js @@ -0,0 +1,8 @@ +define(['exports', './generated-lib2'], function (exports, lib2) { 'use strict'; + + const lib1 = 'lib1'; + console.log(`${lib1} imports ${lib2.lib2}`); + + exports.lib1 = lib1; + +}); diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/amd/generated-lib2.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/amd/generated-lib2.js new file mode 100644 index 00000000000..2d731c52482 --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/amd/generated-lib2.js @@ -0,0 +1,8 @@ +define(['exports', './generated-lib1'], function (exports, lib1) { 'use strict'; + + const lib2 = 'lib2'; + console.log(`${lib2} imports ${lib1.lib1}`); + + exports.lib2 = lib2; + +}); diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/amd/main.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/amd/main.js new file mode 100644 index 00000000000..7c53593aa26 --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/amd/main.js @@ -0,0 +1,9 @@ +define(['exports', './generated-lib2', './generated-lib1'], function (exports, lib2, lib1) { 'use strict'; + + + + exports.lib1 = lib1.lib1; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/cjs/generated-lib1.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/cjs/generated-lib1.js new file mode 100644 index 00000000000..7c6e9861e98 --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/cjs/generated-lib1.js @@ -0,0 +1,8 @@ +'use strict'; + +var lib2 = require('./generated-lib2.js'); + +const lib1 = 'lib1'; +console.log(`${lib1} imports ${lib2.lib2}`); + +exports.lib1 = lib1; diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/cjs/generated-lib2.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/cjs/generated-lib2.js new file mode 100644 index 00000000000..b1af239dfea --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/cjs/generated-lib2.js @@ -0,0 +1,8 @@ +'use strict'; + +var lib1 = require('./generated-lib1.js'); + +const lib2 = 'lib2'; +console.log(`${lib2} imports ${lib1.lib1}`); + +exports.lib2 = lib2; diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/cjs/main.js new file mode 100644 index 00000000000..7a6f3d231a7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/cjs/main.js @@ -0,0 +1,10 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +require('./generated-lib2.js'); +var lib1 = require('./generated-lib1.js'); + + + +exports.lib1 = lib1.lib1; diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/es/generated-lib1.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/es/generated-lib1.js new file mode 100644 index 00000000000..f01a233c797 --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/es/generated-lib1.js @@ -0,0 +1,6 @@ +import { l as lib2 } from './generated-lib2.js'; + +const lib1 = 'lib1'; +console.log(`${lib1} imports ${lib2}`); + +export { lib1 as l }; diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/es/generated-lib2.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/es/generated-lib2.js new file mode 100644 index 00000000000..d822262aeb0 --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/es/generated-lib2.js @@ -0,0 +1,6 @@ +import { l as lib1 } from './generated-lib1.js'; + +const lib2 = 'lib2'; +console.log(`${lib2} imports ${lib1}`); + +export { lib2 as l }; diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/es/main.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/es/main.js new file mode 100644 index 00000000000..160cdb23d43 --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/es/main.js @@ -0,0 +1,2 @@ +import './generated-lib2.js'; +export { l as lib1 } from './generated-lib1.js'; diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/system/generated-lib1.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/system/generated-lib1.js new file mode 100644 index 00000000000..482dde2146a --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/system/generated-lib1.js @@ -0,0 +1,15 @@ +System.register(['./generated-lib2.js'], function (exports) { + 'use strict'; + var lib2; + return { + setters: [function (module) { + lib2 = module.l; + }], + execute: function () { + + const lib1 = exports('l', 'lib1'); + console.log(`${lib1} imports ${lib2}`); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/system/generated-lib2.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/system/generated-lib2.js new file mode 100644 index 00000000000..d1beca4b879 --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/system/generated-lib2.js @@ -0,0 +1,15 @@ +System.register(['./generated-lib1.js'], function (exports) { + 'use strict'; + var lib1; + return { + setters: [function (module) { + lib1 = module.l; + }], + execute: function () { + + const lib2 = exports('l', 'lib2'); + console.log(`${lib2} imports ${lib1}`); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/system/main.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/system/main.js new file mode 100644 index 00000000000..cfb378bc462 --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/_expected/system/main.js @@ -0,0 +1,13 @@ +System.register(['./generated-lib2.js', './generated-lib1.js'], function (exports) { + 'use strict'; + return { + setters: [function () {}, function (module) { + exports('lib1', module.l); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/lib1.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/lib1.js new file mode 100644 index 00000000000..f0e3728c779 --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/lib1.js @@ -0,0 +1,3 @@ +import { lib2 } from './lib2.js'; +export const lib1 = 'lib1'; +console.log(`${lib1} imports ${lib2}`); diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/lib2.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/lib2.js new file mode 100644 index 00000000000..cb0f5333f98 --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/lib2.js @@ -0,0 +1,3 @@ +import { lib1 } from './lib1'; +export const lib2 = 'lib2'; +console.log(`${lib2} imports ${lib1}`); diff --git a/test/chunking-form/samples/deprecated/circular-manual-chunks/main.js b/test/chunking-form/samples/deprecated/circular-manual-chunks/main.js new file mode 100644 index 00000000000..73c902d4bfa --- /dev/null +++ b/test/chunking-form/samples/deprecated/circular-manual-chunks/main.js @@ -0,0 +1 @@ +export { lib1 } from './lib1.js'; diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_config.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_config.js new file mode 100644 index 00000000000..eb5d67acdb8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_config.js @@ -0,0 +1,21 @@ +const assert = require('assert'); +let referenceId; + +module.exports = { + description: 'retrieves the correct name of an emitted chunk in case a facade is created', + options: { + strictDeprecations: false, + input: 'main', + manualChunks: { + 'build-starter': ['buildStart'] + }, + plugins: { + buildStart() { + referenceId = this.emitFile({ type: 'chunk', id: 'buildStart' }); + }, + renderChunk() { + assert.strictEqual(this.getFileName(referenceId), 'generated-buildStart.js'); + } + } + } +}; diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/amd/generated-build-starter.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/amd/generated-build-starter.js new file mode 100644 index 00000000000..4974a348248 --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/amd/generated-build-starter.js @@ -0,0 +1,11 @@ +define(['exports'], function (exports) { 'use strict'; + + const value = 42; + const otherValue = 43; + + console.log('startBuild', value); + + exports.otherValue = otherValue; + exports.value = value; + +}); diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/amd/generated-buildStart.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/amd/generated-buildStart.js new file mode 100644 index 00000000000..06143748495 --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/amd/generated-buildStart.js @@ -0,0 +1,9 @@ +define(['exports', './generated-build-starter'], function (exports, buildStarter) { 'use strict'; + + + + exports.buildStartValue = buildStarter.value; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/amd/main.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/amd/main.js new file mode 100644 index 00000000000..f9191ee8ad4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(['./generated-build-starter'], function (buildStarter) { 'use strict'; + + console.log('main', buildStarter.value, buildStarter.otherValue); + +}); diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/cjs/generated-build-starter.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/cjs/generated-build-starter.js new file mode 100644 index 00000000000..fecf7a3cd4c --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/cjs/generated-build-starter.js @@ -0,0 +1,9 @@ +'use strict'; + +const value = 42; +const otherValue = 43; + +console.log('startBuild', value); + +exports.otherValue = otherValue; +exports.value = value; diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/cjs/generated-buildStart.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/cjs/generated-buildStart.js new file mode 100644 index 00000000000..66c05cca4ba --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/cjs/generated-buildStart.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var buildStarter = require('./generated-build-starter.js'); + + + +exports.buildStartValue = buildStarter.value; diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/cjs/main.js new file mode 100644 index 00000000000..666c396846a --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/cjs/main.js @@ -0,0 +1,5 @@ +'use strict'; + +var buildStarter = require('./generated-build-starter.js'); + +console.log('main', buildStarter.value, buildStarter.otherValue); diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/es/generated-build-starter.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/es/generated-build-starter.js new file mode 100644 index 00000000000..43deafdd0be --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/es/generated-build-starter.js @@ -0,0 +1,6 @@ +const value = 42; +const otherValue = 43; + +console.log('startBuild', value); + +export { otherValue as o, value as v }; diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/es/generated-buildStart.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/es/generated-buildStart.js new file mode 100644 index 00000000000..ffb305eac54 --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/es/generated-buildStart.js @@ -0,0 +1 @@ +export { v as buildStartValue } from './generated-build-starter.js'; diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/es/main.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/es/main.js new file mode 100644 index 00000000000..28caef9429d --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/es/main.js @@ -0,0 +1,3 @@ +import { v as value, o as otherValue } from './generated-build-starter.js'; + +console.log('main', value, otherValue); diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/system/generated-build-starter.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/system/generated-build-starter.js new file mode 100644 index 00000000000..75f69e53e87 --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/system/generated-build-starter.js @@ -0,0 +1,13 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const value = exports('v', 42); + const otherValue = exports('o', 43); + + console.log('startBuild', value); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/system/generated-buildStart.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/system/generated-buildStart.js new file mode 100644 index 00000000000..b82461c98ab --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/system/generated-buildStart.js @@ -0,0 +1,13 @@ +System.register(['./generated-build-starter.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('buildStartValue', module.v); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/system/main.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/system/main.js new file mode 100644 index 00000000000..4b52f565751 --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/_expected/system/main.js @@ -0,0 +1,15 @@ +System.register(['./generated-build-starter.js'], function () { + 'use strict'; + var value, otherValue; + return { + setters: [function (module) { + value = module.v; + otherValue = module.o; + }], + execute: function () { + + console.log('main', value, otherValue); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/buildStart.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/buildStart.js new file mode 100644 index 00000000000..49baee4964e --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/buildStart.js @@ -0,0 +1,5 @@ +import {value} from './dep.js'; + +console.log('startBuild', value); + +export { value as buildStartValue }; diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/dep.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/dep.js new file mode 100644 index 00000000000..a2db6341120 --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/dep.js @@ -0,0 +1,2 @@ +export const value = 42; +export const otherValue = 43; diff --git a/test/chunking-form/samples/deprecated/emit-file-chunk-facade/main.js b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/main.js new file mode 100644 index 00000000000..df41d56376c --- /dev/null +++ b/test/chunking-form/samples/deprecated/emit-file-chunk-facade/main.js @@ -0,0 +1,3 @@ +import { value, otherValue } from './dep'; + +console.log('main', value, otherValue); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_config.js b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_config.js new file mode 100644 index 00000000000..cdbcbdedf88 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_config.js @@ -0,0 +1,10 @@ +module.exports = { + description: 'avoid facades if possible when using manual chunks', + options: { + strictDeprecations: false, + input: ['main1', 'main2'], + manualChunks: { + manual: ['main2'] + } + } +}; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/amd/main1.js b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/amd/main1.js new file mode 100644 index 00000000000..a973f4d8de7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/amd/main1.js @@ -0,0 +1,5 @@ +define(['./main2'], function (manual) { 'use strict'; + + console.log('main', manual.reexported); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/amd/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/amd/main2.js new file mode 100644 index 00000000000..674f42a401c --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/amd/main2.js @@ -0,0 +1,11 @@ +define(['exports'], function (exports) { 'use strict'; + + const value = 42; + + console.log('main2', value); + + exports.reexported = value; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/cjs/main1.js b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/cjs/main1.js new file mode 100644 index 00000000000..81de531a9bb --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/cjs/main1.js @@ -0,0 +1,5 @@ +'use strict'; + +var manual = require('./main2.js'); + +console.log('main', manual.reexported); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/cjs/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/cjs/main2.js new file mode 100644 index 00000000000..f7d33362bcc --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/cjs/main2.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const value = 42; + +console.log('main2', value); + +exports.reexported = value; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/es/main1.js b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/es/main1.js new file mode 100644 index 00000000000..6ba22536aa3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/es/main1.js @@ -0,0 +1,3 @@ +import { reexported as value } from './main2.js'; + +console.log('main', value); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/es/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/es/main2.js new file mode 100644 index 00000000000..897452bd66e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/es/main2.js @@ -0,0 +1,5 @@ +const value = 42; + +console.log('main2', value); + +export { value as reexported }; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/system/main1.js b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/system/main1.js new file mode 100644 index 00000000000..36f1fb810be --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/system/main1.js @@ -0,0 +1,14 @@ +System.register(['./main2.js'], function () { + 'use strict'; + var value; + return { + setters: [function (module) { + value = module.reexported; + }], + execute: function () { + + console.log('main', value); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/system/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/system/main2.js new file mode 100644 index 00000000000..e00ab6a2dca --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/_expected/system/main2.js @@ -0,0 +1,12 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const value = exports('reexported', 42); + + console.log('main2', value); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/dep.js b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/dep.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/dep.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/main1.js b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/main1.js new file mode 100644 index 00000000000..5da97663c3a --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/main1.js @@ -0,0 +1,3 @@ +import { value } from './dep'; + +console.log('main', value); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/main2.js new file mode 100644 index 00000000000..868d23fd0a7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-avoid-facade/main2.js @@ -0,0 +1,5 @@ +import {value} from './dep.js'; + +console.log('main2', value); + +export { value as reexported }; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_config.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_config.js new file mode 100644 index 00000000000..eddc0b545b7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_config.js @@ -0,0 +1,13 @@ +module.exports = { + description: 'Uses entry alias if manual chunks contain entry chunks with different alias', + options: { + strictDeprecations: false, + input: { + main: 'main.js', + main2: 'main2.js' + }, + manualChunks: { + outer: ['outer'] + } + } +}; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/amd/main.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/amd/main.js new file mode 100644 index 00000000000..fc91f027a0e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/amd/main.js @@ -0,0 +1,13 @@ +define(['exports'], function (exports) { 'use strict'; + + console.log('dep'); + + console.log('main'); + + const value = 42; + + exports.value = value; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/amd/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/amd/main2.js new file mode 100644 index 00000000000..d28c079a312 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/amd/main2.js @@ -0,0 +1,5 @@ +define(['./main'], function (outer) { 'use strict'; + + + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/cjs/main.js new file mode 100644 index 00000000000..5da9ebd5132 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/cjs/main.js @@ -0,0 +1,11 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +console.log('dep'); + +console.log('main'); + +const value = 42; + +exports.value = value; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/cjs/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/cjs/main2.js new file mode 100644 index 00000000000..7ca8a520b06 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/cjs/main2.js @@ -0,0 +1,4 @@ +'use strict'; + +require('./main.js'); + diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/es/main.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/es/main.js new file mode 100644 index 00000000000..132b27a8d7c --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/es/main.js @@ -0,0 +1,7 @@ +console.log('dep'); + +console.log('main'); + +const value = 42; + +export { value }; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/es/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/es/main2.js new file mode 100644 index 00000000000..859ecc36bb9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/es/main2.js @@ -0,0 +1 @@ +import './main.js'; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/system/main.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/system/main.js new file mode 100644 index 00000000000..b92309e3bf3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/system/main.js @@ -0,0 +1,14 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + console.log('dep'); + + console.log('main'); + + const value = exports('value', 42); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/system/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/system/main2.js new file mode 100644 index 00000000000..da731958b75 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/_expected/system/main2.js @@ -0,0 +1,11 @@ +System.register(['./main.js'], function () { + 'use strict'; + return { + setters: [function () {}], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/dep.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/dep.js new file mode 100644 index 00000000000..b74a9837c07 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/dep.js @@ -0,0 +1 @@ +console.log('dep'); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/main.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/main.js new file mode 100644 index 00000000000..983ead17e5a --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/main.js @@ -0,0 +1,5 @@ +import './dep.js'; + +console.log('main'); + +export const value = 42; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/main2.js new file mode 100644 index 00000000000..d6cf3b02443 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/main2.js @@ -0,0 +1 @@ +import './dep.js'; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/outer.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/outer.js new file mode 100644 index 00000000000..26385b8a3c3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-conflict/outer.js @@ -0,0 +1,3 @@ +import './main'; + +console.log('outer'); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_config.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_config.js new file mode 100644 index 00000000000..0265957b69b --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_config.js @@ -0,0 +1,13 @@ +module.exports = { + description: + 'Identifies the entry chunk with the manual chunk that contains it if the aliases match', + options: { + strictDeprecations: false, + input: { + main: 'main.js' + }, + manualChunks: { + main: ['outer'] + } + } +}; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/amd/main.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/amd/main.js new file mode 100644 index 00000000000..fc91f027a0e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/amd/main.js @@ -0,0 +1,13 @@ +define(['exports'], function (exports) { 'use strict'; + + console.log('dep'); + + console.log('main'); + + const value = 42; + + exports.value = value; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/cjs/main.js new file mode 100644 index 00000000000..5da9ebd5132 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/cjs/main.js @@ -0,0 +1,11 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +console.log('dep'); + +console.log('main'); + +const value = 42; + +exports.value = value; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/es/main.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/es/main.js new file mode 100644 index 00000000000..132b27a8d7c --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/es/main.js @@ -0,0 +1,7 @@ +console.log('dep'); + +console.log('main'); + +const value = 42; + +export { value }; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/system/main.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/system/main.js new file mode 100644 index 00000000000..b92309e3bf3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/_expected/system/main.js @@ -0,0 +1,14 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + console.log('dep'); + + console.log('main'); + + const value = exports('value', 42); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/dep.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/dep.js new file mode 100644 index 00000000000..b74a9837c07 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/dep.js @@ -0,0 +1 @@ +console.log('dep'); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/main.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/main.js new file mode 100644 index 00000000000..983ead17e5a --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/main.js @@ -0,0 +1,5 @@ +import './dep.js'; + +console.log('main'); + +export const value = 42; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/outer.js b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/outer.js new file mode 100644 index 00000000000..26385b8a3c3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-contains-entry-match/outer.js @@ -0,0 +1,3 @@ +import './main'; + +console.log('outer'); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_config.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_config.js new file mode 100644 index 00000000000..e30afc125c2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_config.js @@ -0,0 +1,13 @@ +module.exports = { + description: 'Uses entry alias if manual chunks are entry chunks with different alias', + options: { + strictDeprecations: false, + input: { + main: 'main.js', + main2: 'main2.js' + }, + manualChunks: { + other: ['main'] + } + } +}; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/amd/main.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/amd/main.js new file mode 100644 index 00000000000..fc91f027a0e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/amd/main.js @@ -0,0 +1,13 @@ +define(['exports'], function (exports) { 'use strict'; + + console.log('dep'); + + console.log('main'); + + const value = 42; + + exports.value = value; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/amd/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/amd/main2.js new file mode 100644 index 00000000000..e007f54e5e2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/amd/main2.js @@ -0,0 +1,5 @@ +define(['./main'], function (other) { 'use strict'; + + + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/cjs/main.js new file mode 100644 index 00000000000..5da9ebd5132 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/cjs/main.js @@ -0,0 +1,11 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +console.log('dep'); + +console.log('main'); + +const value = 42; + +exports.value = value; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/cjs/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/cjs/main2.js new file mode 100644 index 00000000000..7ca8a520b06 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/cjs/main2.js @@ -0,0 +1,4 @@ +'use strict'; + +require('./main.js'); + diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/es/main.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/es/main.js new file mode 100644 index 00000000000..132b27a8d7c --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/es/main.js @@ -0,0 +1,7 @@ +console.log('dep'); + +console.log('main'); + +const value = 42; + +export { value }; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/es/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/es/main2.js new file mode 100644 index 00000000000..859ecc36bb9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/es/main2.js @@ -0,0 +1 @@ +import './main.js'; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/system/main.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/system/main.js new file mode 100644 index 00000000000..b92309e3bf3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/system/main.js @@ -0,0 +1,14 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + console.log('dep'); + + console.log('main'); + + const value = exports('value', 42); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/system/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/system/main2.js new file mode 100644 index 00000000000..da731958b75 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/_expected/system/main2.js @@ -0,0 +1,11 @@ +System.register(['./main.js'], function () { + 'use strict'; + return { + setters: [function () {}], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/dep.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/dep.js new file mode 100644 index 00000000000..b74a9837c07 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/dep.js @@ -0,0 +1 @@ +console.log('dep'); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/main.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/main.js new file mode 100644 index 00000000000..983ead17e5a --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/main.js @@ -0,0 +1,5 @@ +import './dep.js'; + +console.log('main'); + +export const value = 42; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/main2.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/main2.js new file mode 100644 index 00000000000..d6cf3b02443 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-conflict/main2.js @@ -0,0 +1 @@ +import './dep.js'; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_config.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_config.js new file mode 100644 index 00000000000..3207916f4f1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_config.js @@ -0,0 +1,13 @@ +module.exports = { + description: + 'Identifies the entry chunk with the manual chunk that has the same entry if the aliases match', + options: { + strictDeprecations: false, + input: { + main: 'main.js' + }, + manualChunks: { + main: ['main'] + } + } +}; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/amd/main.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/amd/main.js new file mode 100644 index 00000000000..fc91f027a0e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/amd/main.js @@ -0,0 +1,13 @@ +define(['exports'], function (exports) { 'use strict'; + + console.log('dep'); + + console.log('main'); + + const value = 42; + + exports.value = value; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/cjs/main.js new file mode 100644 index 00000000000..5da9ebd5132 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/cjs/main.js @@ -0,0 +1,11 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +console.log('dep'); + +console.log('main'); + +const value = 42; + +exports.value = value; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/es/main.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/es/main.js new file mode 100644 index 00000000000..132b27a8d7c --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/es/main.js @@ -0,0 +1,7 @@ +console.log('dep'); + +console.log('main'); + +const value = 42; + +export { value }; diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/system/main.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/system/main.js new file mode 100644 index 00000000000..b92309e3bf3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/_expected/system/main.js @@ -0,0 +1,14 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + console.log('dep'); + + console.log('main'); + + const value = exports('value', 42); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/dep.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/dep.js new file mode 100644 index 00000000000..b74a9837c07 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/dep.js @@ -0,0 +1 @@ +console.log('dep'); diff --git a/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/main.js b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/main.js new file mode 100644 index 00000000000..983ead17e5a --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunk-is-entry-match/main.js @@ -0,0 +1,5 @@ +import './dep.js'; + +console.log('main'); + +export const value = 42; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_config.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_config.js new file mode 100644 index 00000000000..9f46a40f134 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_config.js @@ -0,0 +1,12 @@ +module.exports = { + description: 'manual chunks can have other manual chunks as dependencies', + options: { + strictDeprecations: false, + input: ['main.js'], + manualChunks: { + 'manual-outer': ['outer.js'], + 'manual-inner': ['inner.js'], + 'manual-middle': ['middle.js'] + } + } +}; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/generated-manual-inner.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/generated-manual-inner.js new file mode 100644 index 00000000000..5068b5fd910 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/generated-manual-inner.js @@ -0,0 +1,5 @@ +define(function () { 'use strict'; + + console.log('inner'); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/generated-manual-middle.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/generated-manual-middle.js new file mode 100644 index 00000000000..a12cddc2c4f --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/generated-manual-middle.js @@ -0,0 +1,5 @@ +define(['./generated-manual-inner'], function (manualInner) { 'use strict'; + + console.log('middle'); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/generated-manual-outer.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/generated-manual-outer.js new file mode 100644 index 00000000000..19b33370089 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/generated-manual-outer.js @@ -0,0 +1,5 @@ +define(['./generated-manual-middle'], function (manualMiddle) { 'use strict'; + + console.log('outer'); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/main.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/main.js new file mode 100644 index 00000000000..5ec5a9952d4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(['./generated-manual-inner', './generated-manual-middle', './generated-manual-outer'], function (manualInner, manualMiddle, manualOuter) { 'use strict'; + + console.log('main'); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/generated-manual-inner.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/generated-manual-inner.js new file mode 100644 index 00000000000..02ef883da4e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/generated-manual-inner.js @@ -0,0 +1,3 @@ +'use strict'; + +console.log('inner'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/generated-manual-middle.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/generated-manual-middle.js new file mode 100644 index 00000000000..77da3dd71c1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/generated-manual-middle.js @@ -0,0 +1,5 @@ +'use strict'; + +require('./generated-manual-inner.js'); + +console.log('middle'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/generated-manual-outer.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/generated-manual-outer.js new file mode 100644 index 00000000000..8a4efba721e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/generated-manual-outer.js @@ -0,0 +1,5 @@ +'use strict'; + +require('./generated-manual-middle.js'); + +console.log('outer'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/main.js new file mode 100644 index 00000000000..7b5cf110cf4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/cjs/main.js @@ -0,0 +1,7 @@ +'use strict'; + +require('./generated-manual-inner.js'); +require('./generated-manual-middle.js'); +require('./generated-manual-outer.js'); + +console.log('main'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/generated-manual-inner.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/generated-manual-inner.js new file mode 100644 index 00000000000..8e1a29ca97f --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/generated-manual-inner.js @@ -0,0 +1 @@ +console.log('inner'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/generated-manual-middle.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/generated-manual-middle.js new file mode 100644 index 00000000000..247a57bae80 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/generated-manual-middle.js @@ -0,0 +1,3 @@ +import './generated-manual-inner.js'; + +console.log('middle'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/generated-manual-outer.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/generated-manual-outer.js new file mode 100644 index 00000000000..f348b38752c --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/generated-manual-outer.js @@ -0,0 +1,3 @@ +import './generated-manual-middle.js'; + +console.log('outer'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/main.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/main.js new file mode 100644 index 00000000000..de3b67e6685 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/es/main.js @@ -0,0 +1,5 @@ +import './generated-manual-inner.js'; +import './generated-manual-middle.js'; +import './generated-manual-outer.js'; + +console.log('main'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/generated-manual-inner.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/generated-manual-inner.js new file mode 100644 index 00000000000..7079c6deaf2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/generated-manual-inner.js @@ -0,0 +1,10 @@ +System.register([], function () { + 'use strict'; + return { + execute: function () { + + console.log('inner'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/generated-manual-middle.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/generated-manual-middle.js new file mode 100644 index 00000000000..e972910e58e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/generated-manual-middle.js @@ -0,0 +1,11 @@ +System.register(['./generated-manual-inner.js'], function () { + 'use strict'; + return { + setters: [function () {}], + execute: function () { + + console.log('middle'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/generated-manual-outer.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/generated-manual-outer.js new file mode 100644 index 00000000000..8657192807b --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/generated-manual-outer.js @@ -0,0 +1,11 @@ +System.register(['./generated-manual-middle.js'], function () { + 'use strict'; + return { + setters: [function () {}], + execute: function () { + + console.log('outer'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/main.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/main.js new file mode 100644 index 00000000000..07ba8910bbb --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/_expected/system/main.js @@ -0,0 +1,11 @@ +System.register(['./generated-manual-inner.js', './generated-manual-middle.js', './generated-manual-outer.js'], function () { + 'use strict'; + return { + setters: [function () {}, function () {}, function () {}], + execute: function () { + + console.log('main'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/inner.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/inner.js new file mode 100644 index 00000000000..8e1a29ca97f --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/inner.js @@ -0,0 +1 @@ +console.log('inner'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/main.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/main.js new file mode 100644 index 00000000000..b46ebb222d8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/main.js @@ -0,0 +1,3 @@ +import './outer.js'; + +console.log('main'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/middle.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/middle.js new file mode 100644 index 00000000000..0073259087e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/middle.js @@ -0,0 +1,3 @@ +import './inner.js'; + +console.log('middle'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-different-nested/outer.js b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/outer.js new file mode 100644 index 00000000000..c77196cec49 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-different-nested/outer.js @@ -0,0 +1,3 @@ +import './middle.js'; + +console.log('outer'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_config.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_config.js new file mode 100644 index 00000000000..9666b5675d5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_config.js @@ -0,0 +1,10 @@ +module.exports = { + description: 'creates facades for dynamic manual chunks if necessary', + options: { + strictDeprecations: false, + input: ['main.js'], + manualChunks: { + dynamic: ['dynamic1.js'] + } + } +}; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/amd/generated-dynamic.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/amd/generated-dynamic.js new file mode 100644 index 00000000000..06d0b979512 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/amd/generated-dynamic.js @@ -0,0 +1,34 @@ +define(['exports'], function (exports) { 'use strict'; + + const DEP = 'DEP'; + + const DYNAMIC_2 = 'DYNAMIC_2'; + + var dynamic2 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_2: DYNAMIC_2 + }); + + const DYNAMIC_3 = 'DYNAMIC_3'; + + var dynamic3 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_3: DYNAMIC_3 + }); + + const DYNAMIC_1 = 'DYNAMIC_1'; + + var dynamic1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_1: DYNAMIC_1, + DEP: DEP, + DYNAMIC_2: DYNAMIC_2, + DYNAMIC_3: DYNAMIC_3 + }); + + exports.DEP = DEP; + exports.dynamic1 = dynamic1; + exports.dynamic2 = dynamic2; + exports.dynamic3 = dynamic3; + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/amd/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/amd/main.js new file mode 100644 index 00000000000..dd2114e5c49 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/amd/main.js @@ -0,0 +1,7 @@ +define(['require', './generated-dynamic'], function (require, dynamic) { 'use strict'; + + Promise.all([new Promise(function (resolve, reject) { require(['./generated-dynamic'], resolve, reject) }).then(function (n) { return n.dynamic1; }), new Promise(function (resolve, reject) { require(['./generated-dynamic'], resolve, reject) }).then(function (n) { return n.dynamic2; }), new Promise(function (resolve, reject) { require(['./generated-dynamic'], resolve, reject) }).then(function (n) { return n.dynamic3; })]).then( + results => console.log(results, dynamic.DEP) + ); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/cjs/generated-dynamic.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/cjs/generated-dynamic.js new file mode 100644 index 00000000000..50c556066d4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/cjs/generated-dynamic.js @@ -0,0 +1,32 @@ +'use strict'; + +const DEP = 'DEP'; + +const DYNAMIC_2 = 'DYNAMIC_2'; + +var dynamic2 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_2: DYNAMIC_2 +}); + +const DYNAMIC_3 = 'DYNAMIC_3'; + +var dynamic3 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_3: DYNAMIC_3 +}); + +const DYNAMIC_1 = 'DYNAMIC_1'; + +var dynamic1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_1: DYNAMIC_1, + DEP: DEP, + DYNAMIC_2: DYNAMIC_2, + DYNAMIC_3: DYNAMIC_3 +}); + +exports.DEP = DEP; +exports.dynamic1 = dynamic1; +exports.dynamic2 = dynamic2; +exports.dynamic3 = dynamic3; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/cjs/main.js new file mode 100644 index 00000000000..6d822d5ed9f --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/cjs/main.js @@ -0,0 +1,7 @@ +'use strict'; + +var dynamic = require('./generated-dynamic.js'); + +Promise.all([Promise.resolve().then(function () { return require('./generated-dynamic.js'); }).then(function (n) { return n.dynamic1; }), Promise.resolve().then(function () { return require('./generated-dynamic.js'); }).then(function (n) { return n.dynamic2; }), Promise.resolve().then(function () { return require('./generated-dynamic.js'); }).then(function (n) { return n.dynamic3; })]).then( + results => console.log(results, dynamic.DEP) +); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/es/generated-dynamic.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/es/generated-dynamic.js new file mode 100644 index 00000000000..3f031460abc --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/es/generated-dynamic.js @@ -0,0 +1,27 @@ +const DEP = 'DEP'; + +const DYNAMIC_2 = 'DYNAMIC_2'; + +var dynamic2 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_2: DYNAMIC_2 +}); + +const DYNAMIC_3 = 'DYNAMIC_3'; + +var dynamic3 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_3: DYNAMIC_3 +}); + +const DYNAMIC_1 = 'DYNAMIC_1'; + +var dynamic1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_1: DYNAMIC_1, + DEP: DEP, + DYNAMIC_2: DYNAMIC_2, + DYNAMIC_3: DYNAMIC_3 +}); + +export { DEP as D, dynamic3 as a, dynamic1 as b, dynamic2 as d }; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/es/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/es/main.js new file mode 100644 index 00000000000..0ef6f970d6a --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/es/main.js @@ -0,0 +1,5 @@ +import { D as DEP } from './generated-dynamic.js'; + +Promise.all([import('./generated-dynamic.js').then(function (n) { return n.b; }), import('./generated-dynamic.js').then(function (n) { return n.d; }), import('./generated-dynamic.js').then(function (n) { return n.a; })]).then( + results => console.log(results, DEP) +); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/system/generated-dynamic.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/system/generated-dynamic.js new file mode 100644 index 00000000000..768028d36f0 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/system/generated-dynamic.js @@ -0,0 +1,37 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const DEP = exports('D', 'DEP'); + + const DYNAMIC_2 = 'DYNAMIC_2'; + + var dynamic2 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_2: DYNAMIC_2 + }); + exports('d', dynamic2); + + const DYNAMIC_3 = 'DYNAMIC_3'; + + var dynamic3 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_3: DYNAMIC_3 + }); + exports('a', dynamic3); + + const DYNAMIC_1 = 'DYNAMIC_1'; + + var dynamic1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_1: DYNAMIC_1, + DEP: DEP, + DYNAMIC_2: DYNAMIC_2, + DYNAMIC_3: DYNAMIC_3 + }); + exports('b', dynamic1); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/system/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/system/main.js new file mode 100644 index 00000000000..3d78385bd86 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/_expected/system/main.js @@ -0,0 +1,16 @@ +System.register(['./generated-dynamic.js'], function (exports, module) { + 'use strict'; + var DEP; + return { + setters: [function (module) { + DEP = module.D; + }], + execute: function () { + + Promise.all([module.import('./generated-dynamic.js').then(function (n) { return n.b; }), module.import('./generated-dynamic.js').then(function (n) { return n.d; }), module.import('./generated-dynamic.js').then(function (n) { return n.a; })]).then( + results => console.log(results, DEP) + ); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dep.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dep.js new file mode 100644 index 00000000000..4be514fd761 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dep.js @@ -0,0 +1 @@ +export const DEP = 'DEP'; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dynamic1.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dynamic1.js new file mode 100644 index 00000000000..1591826eaf0 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dynamic1.js @@ -0,0 +1,4 @@ +export * from './dep.js'; +export * from './dynamic2.js'; +export * from './dynamic3.js'; +export const DYNAMIC_1 = 'DYNAMIC_1'; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dynamic2.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dynamic2.js new file mode 100644 index 00000000000..11eeeb42896 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dynamic2.js @@ -0,0 +1 @@ +export const DYNAMIC_2 = 'DYNAMIC_2'; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dynamic3.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dynamic3.js new file mode 100644 index 00000000000..439fa36aab0 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/dynamic3.js @@ -0,0 +1 @@ +export const DYNAMIC_3 = 'DYNAMIC_3'; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/main.js new file mode 100644 index 00000000000..317e03b17c5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-facades/main.js @@ -0,0 +1,5 @@ +import { DEP } from './dep'; + +Promise.all([import('./dynamic1.js'), import('./dynamic2.js'), import('./dynamic3.js')]).then( + results => console.log(results, DEP) +); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_config.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_config.js new file mode 100644 index 00000000000..28725aa0585 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_config.js @@ -0,0 +1,10 @@ +module.exports = { + description: 'handles name conflicts in manual chunks', + options: { + strictDeprecations: false, + input: ['main.js'], + manualChunks: { + dynamic: ['dynamic1.js'] + } + } +}; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/amd/generated-dynamic.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/amd/generated-dynamic.js new file mode 100644 index 00000000000..076fa7636d8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/amd/generated-dynamic.js @@ -0,0 +1,25 @@ +define(['exports'], function (exports) { 'use strict'; + + console.log('dynamic2'); + + const DYNAMIC_A = 'DYNAMIC_A'; + const DYNAMIC_B = 'DYNAMIC_B'; + + var dynamic2 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_A: DYNAMIC_A, + DYNAMIC_B: DYNAMIC_B + }); + + console.log('dynamic1'); + + var dynamic1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_B: DYNAMIC_A, + DYNAMIC_A: DYNAMIC_B + }); + + exports.dynamic1 = dynamic1; + exports.dynamic2 = dynamic2; + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/amd/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/amd/main.js new file mode 100644 index 00000000000..134e33a9f75 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/amd/main.js @@ -0,0 +1,6 @@ +define(['require'], function (require) { 'use strict'; + + new Promise(function (resolve, reject) { require(['./generated-dynamic'], resolve, reject) }).then(function (n) { return n.dynamic1; }).then(result => console.log(result)); + new Promise(function (resolve, reject) { require(['./generated-dynamic'], resolve, reject) }).then(function (n) { return n.dynamic2; }).then(result => console.log(result)); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/cjs/generated-dynamic.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/cjs/generated-dynamic.js new file mode 100644 index 00000000000..6051f8db1b3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/cjs/generated-dynamic.js @@ -0,0 +1,23 @@ +'use strict'; + +console.log('dynamic2'); + +const DYNAMIC_A = 'DYNAMIC_A'; +const DYNAMIC_B = 'DYNAMIC_B'; + +var dynamic2 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_A: DYNAMIC_A, + DYNAMIC_B: DYNAMIC_B +}); + +console.log('dynamic1'); + +var dynamic1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_B: DYNAMIC_A, + DYNAMIC_A: DYNAMIC_B +}); + +exports.dynamic1 = dynamic1; +exports.dynamic2 = dynamic2; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/cjs/main.js new file mode 100644 index 00000000000..436abdbbe3d --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/cjs/main.js @@ -0,0 +1,4 @@ +'use strict'; + +Promise.resolve().then(function () { return require('./generated-dynamic.js'); }).then(function (n) { return n.dynamic1; }).then(result => console.log(result)); +Promise.resolve().then(function () { return require('./generated-dynamic.js'); }).then(function (n) { return n.dynamic2; }).then(result => console.log(result)); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/es/generated-dynamic.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/es/generated-dynamic.js new file mode 100644 index 00000000000..34710d6347c --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/es/generated-dynamic.js @@ -0,0 +1,20 @@ +console.log('dynamic2'); + +const DYNAMIC_A = 'DYNAMIC_A'; +const DYNAMIC_B = 'DYNAMIC_B'; + +var dynamic2 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_A: DYNAMIC_A, + DYNAMIC_B: DYNAMIC_B +}); + +console.log('dynamic1'); + +var dynamic1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_B: DYNAMIC_A, + DYNAMIC_A: DYNAMIC_B +}); + +export { dynamic1 as a, dynamic2 as d }; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/es/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/es/main.js new file mode 100644 index 00000000000..e6906c3f8a2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/es/main.js @@ -0,0 +1,2 @@ +import('./generated-dynamic.js').then(function (n) { return n.a; }).then(result => console.log(result)); +import('./generated-dynamic.js').then(function (n) { return n.d; }).then(result => console.log(result)); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/system/generated-dynamic.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/system/generated-dynamic.js new file mode 100644 index 00000000000..7b09ab0ef5b --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/system/generated-dynamic.js @@ -0,0 +1,29 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + console.log('dynamic2'); + + const DYNAMIC_A = 'DYNAMIC_A'; + const DYNAMIC_B = 'DYNAMIC_B'; + + var dynamic2 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_A: DYNAMIC_A, + DYNAMIC_B: DYNAMIC_B + }); + exports('d', dynamic2); + + console.log('dynamic1'); + + var dynamic1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + DYNAMIC_B: DYNAMIC_A, + DYNAMIC_A: DYNAMIC_B + }); + exports('a', dynamic1); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/system/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/system/main.js new file mode 100644 index 00000000000..a59ec2ff8bb --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/_expected/system/main.js @@ -0,0 +1,11 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + module.import('./generated-dynamic.js').then(function (n) { return n.a; }).then(result => console.log(result)); + module.import('./generated-dynamic.js').then(function (n) { return n.d; }).then(result => console.log(result)); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/dynamic1.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/dynamic1.js new file mode 100644 index 00000000000..ee02308ddb4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/dynamic1.js @@ -0,0 +1,3 @@ +console.log('dynamic1'); + +export { DYNAMIC_A as DYNAMIC_B, DYNAMIC_B as DYNAMIC_A } from './dynamic2'; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/dynamic2.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/dynamic2.js new file mode 100644 index 00000000000..6d087c59d00 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/dynamic2.js @@ -0,0 +1,4 @@ +console.log('dynamic2'); + +export const DYNAMIC_A = 'DYNAMIC_A'; +export const DYNAMIC_B = 'DYNAMIC_B'; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/main.js new file mode 100644 index 00000000000..9e2abfea069 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic-name-conflict/main.js @@ -0,0 +1,2 @@ +import('./dynamic1.js').then(result => console.log(result)); +import('./dynamic2.js').then(result => console.log(result)); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_config.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_config.js new file mode 100644 index 00000000000..cfb06c43a96 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_config.js @@ -0,0 +1,10 @@ +module.exports = { + description: 'supports dynamic manual chunks', + options: { + strictDeprecations: false, + input: ['main.js'], + manualChunks: { + dynamic: ['dynamic.js'] + } + } +}; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/amd/generated-dynamic.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/amd/generated-dynamic.js new file mode 100644 index 00000000000..94b0e40c8e0 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/amd/generated-dynamic.js @@ -0,0 +1,7 @@ +define(['exports'], function (exports) { 'use strict'; + + const DYNAMIC_USED_BY_A = 'DYNAMIC_USED_BY_A'; + + exports.DYNAMIC_USED_BY_A = DYNAMIC_USED_BY_A; + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/amd/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/amd/main.js new file mode 100644 index 00000000000..7ade37c39c9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(['require'], function (require) { 'use strict'; + + new Promise(function (resolve, reject) { require(['./generated-dynamic'], resolve, reject) }).then(({DYNAMIC_USED_BY_A}) => console.log(DYNAMIC_USED_BY_A)); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/cjs/generated-dynamic.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/cjs/generated-dynamic.js new file mode 100644 index 00000000000..28e15f91379 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/cjs/generated-dynamic.js @@ -0,0 +1,5 @@ +'use strict'; + +const DYNAMIC_USED_BY_A = 'DYNAMIC_USED_BY_A'; + +exports.DYNAMIC_USED_BY_A = DYNAMIC_USED_BY_A; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/cjs/main.js new file mode 100644 index 00000000000..48ed2ac4287 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/cjs/main.js @@ -0,0 +1,3 @@ +'use strict'; + +Promise.resolve().then(function () { return require('./generated-dynamic.js'); }).then(({DYNAMIC_USED_BY_A}) => console.log(DYNAMIC_USED_BY_A)); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/es/generated-dynamic.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/es/generated-dynamic.js new file mode 100644 index 00000000000..4ccf6321419 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/es/generated-dynamic.js @@ -0,0 +1,3 @@ +const DYNAMIC_USED_BY_A = 'DYNAMIC_USED_BY_A'; + +export { DYNAMIC_USED_BY_A }; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/es/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/es/main.js new file mode 100644 index 00000000000..aefad148dc7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/es/main.js @@ -0,0 +1 @@ +import('./generated-dynamic.js').then(({DYNAMIC_USED_BY_A}) => console.log(DYNAMIC_USED_BY_A)); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/system/generated-dynamic.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/system/generated-dynamic.js new file mode 100644 index 00000000000..cf05be5bb3b --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/system/generated-dynamic.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const DYNAMIC_USED_BY_A = exports('DYNAMIC_USED_BY_A', 'DYNAMIC_USED_BY_A'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/system/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/system/main.js new file mode 100644 index 00000000000..5c1d9db7c1e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/_expected/system/main.js @@ -0,0 +1,10 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + module.import('./generated-dynamic.js').then(({DYNAMIC_USED_BY_A}) => console.log(DYNAMIC_USED_BY_A)); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic/dynamic.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/dynamic.js new file mode 100644 index 00000000000..38cb5406d06 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/dynamic.js @@ -0,0 +1 @@ +export const DYNAMIC_USED_BY_A = 'DYNAMIC_USED_BY_A'; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/manual-chunks-dynamic/main.js b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/main.js new file mode 100644 index 00000000000..c4c5988813a --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-dynamic/main.js @@ -0,0 +1 @@ +import('./dynamic.js').then(({DYNAMIC_USED_BY_A}) => console.log(DYNAMIC_USED_BY_A)); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/_config.js b/test/chunking-form/samples/deprecated/manual-chunks-function/_config.js new file mode 100644 index 00000000000..5b225fe7552 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/_config.js @@ -0,0 +1,12 @@ +module.exports = { + description: 'allows to define manual chunks via a function', + options: { + strictDeprecations: false, + input: ['main-a'], + manualChunks(id) { + if (id[id.length - 5] === '-') { + return `chunk-${id[id.length - 4]}`; + } + } + } +}; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/amd/generated-chunk-b.js b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/amd/generated-chunk-b.js new file mode 100644 index 00000000000..234e6a42b0c --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/amd/generated-chunk-b.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + console.log('dep2'); + + console.log('dep-b'); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/amd/generated-chunk-c.js b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/amd/generated-chunk-c.js new file mode 100644 index 00000000000..d62075790ea --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/amd/generated-chunk-c.js @@ -0,0 +1,5 @@ +define(['./generated-chunk-b'], function (chunkB) { 'use strict'; + + console.log('dep-c'); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/amd/main-a.js b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/amd/main-a.js new file mode 100644 index 00000000000..939b5e414df --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/amd/main-a.js @@ -0,0 +1,9 @@ +define(['./generated-chunk-b', './generated-chunk-c'], function (chunkB, chunkC) { 'use strict'; + + console.log('dep1'); + + console.log('dep-a'); + + console.log('main-a'); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/cjs/generated-chunk-b.js b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/cjs/generated-chunk-b.js new file mode 100644 index 00000000000..51b3d3e3d98 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/cjs/generated-chunk-b.js @@ -0,0 +1,5 @@ +'use strict'; + +console.log('dep2'); + +console.log('dep-b'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/cjs/generated-chunk-c.js b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/cjs/generated-chunk-c.js new file mode 100644 index 00000000000..d8349602bd6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/cjs/generated-chunk-c.js @@ -0,0 +1,5 @@ +'use strict'; + +require('./generated-chunk-b.js'); + +console.log('dep-c'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/cjs/main-a.js b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/cjs/main-a.js new file mode 100644 index 00000000000..d65da8d78b5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/cjs/main-a.js @@ -0,0 +1,10 @@ +'use strict'; + +require('./generated-chunk-b.js'); +require('./generated-chunk-c.js'); + +console.log('dep1'); + +console.log('dep-a'); + +console.log('main-a'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/es/generated-chunk-b.js b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/es/generated-chunk-b.js new file mode 100644 index 00000000000..16fb2a90267 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/es/generated-chunk-b.js @@ -0,0 +1,3 @@ +console.log('dep2'); + +console.log('dep-b'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/es/generated-chunk-c.js b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/es/generated-chunk-c.js new file mode 100644 index 00000000000..78ee7d95de5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/es/generated-chunk-c.js @@ -0,0 +1,3 @@ +import './generated-chunk-b.js'; + +console.log('dep-c'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/es/main-a.js b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/es/main-a.js new file mode 100644 index 00000000000..ae2fdbf85e5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/es/main-a.js @@ -0,0 +1,8 @@ +import './generated-chunk-b.js'; +import './generated-chunk-c.js'; + +console.log('dep1'); + +console.log('dep-a'); + +console.log('main-a'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/system/generated-chunk-b.js b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/system/generated-chunk-b.js new file mode 100644 index 00000000000..fabf038cbaa --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/system/generated-chunk-b.js @@ -0,0 +1,12 @@ +System.register([], function () { + 'use strict'; + return { + execute: function () { + + console.log('dep2'); + + console.log('dep-b'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/system/generated-chunk-c.js b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/system/generated-chunk-c.js new file mode 100644 index 00000000000..4cd41ad57b6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/system/generated-chunk-c.js @@ -0,0 +1,11 @@ +System.register(['./generated-chunk-b.js'], function () { + 'use strict'; + return { + setters: [function () {}], + execute: function () { + + console.log('dep-c'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/system/main-a.js b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/system/main-a.js new file mode 100644 index 00000000000..69e6ce429d3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/_expected/system/main-a.js @@ -0,0 +1,15 @@ +System.register(['./generated-chunk-b.js', './generated-chunk-c.js'], function () { + 'use strict'; + return { + setters: [function () {}, function () {}], + execute: function () { + + console.log('dep1'); + + console.log('dep-a'); + + console.log('main-a'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/dep-a.js b/test/chunking-form/samples/deprecated/manual-chunks-function/dep-a.js new file mode 100644 index 00000000000..5cf180c1404 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/dep-a.js @@ -0,0 +1,4 @@ +import './dep-c'; +import './dep1'; + +console.log('dep-a'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/dep-b.js b/test/chunking-form/samples/deprecated/manual-chunks-function/dep-b.js new file mode 100644 index 00000000000..67c590f583e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/dep-b.js @@ -0,0 +1,3 @@ +import './dep2'; + +console.log('dep-b'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/dep-c.js b/test/chunking-form/samples/deprecated/manual-chunks-function/dep-c.js new file mode 100644 index 00000000000..3934b0ad90e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/dep-c.js @@ -0,0 +1,3 @@ +import './dep2'; + +console.log('dep-c'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/dep1.js b/test/chunking-form/samples/deprecated/manual-chunks-function/dep1.js new file mode 100644 index 00000000000..6aa6066cec9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/dep1.js @@ -0,0 +1 @@ +console.log('dep1'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/dep2.js b/test/chunking-form/samples/deprecated/manual-chunks-function/dep2.js new file mode 100644 index 00000000000..f5325d80e8a --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/dep2.js @@ -0,0 +1 @@ +console.log('dep2'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-function/main-a.js b/test/chunking-form/samples/deprecated/manual-chunks-function/main-a.js new file mode 100644 index 00000000000..cf97f330a79 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-function/main-a.js @@ -0,0 +1,4 @@ +import './dep-a'; +import './dep-b'; + +console.log('main-a'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-nested/_config.js b/test/chunking-form/samples/deprecated/manual-chunks-nested/_config.js new file mode 100644 index 00000000000..20ea0b64d16 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-nested/_config.js @@ -0,0 +1,10 @@ +module.exports = { + description: 'manual chunks can contain nested modules', + options: { + strictDeprecations: false, + input: ['main.js'], + manualChunks: { + manual: ['middle.js', 'inner.js', 'outer.js'] + } + } +}; diff --git a/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/amd/generated-manual.js b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/amd/generated-manual.js new file mode 100644 index 00000000000..e81d58f94e9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/amd/generated-manual.js @@ -0,0 +1,9 @@ +define(function () { 'use strict'; + + console.log('inner'); + + console.log('middle'); + + console.log('outer'); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/amd/main.js b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/amd/main.js new file mode 100644 index 00000000000..c9a0d54be11 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(['./generated-manual'], function (manual) { 'use strict'; + + console.log('main'); + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/cjs/generated-manual.js b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/cjs/generated-manual.js new file mode 100644 index 00000000000..3ce3b1a69a1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/cjs/generated-manual.js @@ -0,0 +1,7 @@ +'use strict'; + +console.log('inner'); + +console.log('middle'); + +console.log('outer'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/cjs/main.js new file mode 100644 index 00000000000..f679e51bff2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/cjs/main.js @@ -0,0 +1,5 @@ +'use strict'; + +require('./generated-manual.js'); + +console.log('main'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/es/generated-manual.js b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/es/generated-manual.js new file mode 100644 index 00000000000..7abdcd7f151 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/es/generated-manual.js @@ -0,0 +1,5 @@ +console.log('inner'); + +console.log('middle'); + +console.log('outer'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/es/main.js b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/es/main.js new file mode 100644 index 00000000000..ddeb648f149 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/es/main.js @@ -0,0 +1,3 @@ +import './generated-manual.js'; + +console.log('main'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/system/generated-manual.js b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/system/generated-manual.js new file mode 100644 index 00000000000..b297489bbda --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/system/generated-manual.js @@ -0,0 +1,14 @@ +System.register([], function () { + 'use strict'; + return { + execute: function () { + + console.log('inner'); + + console.log('middle'); + + console.log('outer'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/system/main.js b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/system/main.js new file mode 100644 index 00000000000..a1d452ebaf8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-nested/_expected/system/main.js @@ -0,0 +1,11 @@ +System.register(['./generated-manual.js'], function () { + 'use strict'; + return { + setters: [function () {}], + execute: function () { + + console.log('main'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-nested/inner.js b/test/chunking-form/samples/deprecated/manual-chunks-nested/inner.js new file mode 100644 index 00000000000..8e1a29ca97f --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-nested/inner.js @@ -0,0 +1 @@ +console.log('inner'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-nested/main.js b/test/chunking-form/samples/deprecated/manual-chunks-nested/main.js new file mode 100644 index 00000000000..b46ebb222d8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-nested/main.js @@ -0,0 +1,3 @@ +import './outer.js'; + +console.log('main'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-nested/middle.js b/test/chunking-form/samples/deprecated/manual-chunks-nested/middle.js new file mode 100644 index 00000000000..0073259087e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-nested/middle.js @@ -0,0 +1,3 @@ +import './inner.js'; + +console.log('middle'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks-nested/outer.js b/test/chunking-form/samples/deprecated/manual-chunks-nested/outer.js new file mode 100644 index 00000000000..c77196cec49 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks-nested/outer.js @@ -0,0 +1,3 @@ +import './middle.js'; + +console.log('outer'); diff --git a/test/chunking-form/samples/deprecated/manual-chunks/_config.js b/test/chunking-form/samples/deprecated/manual-chunks/_config.js new file mode 100644 index 00000000000..626186e9b89 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/_config.js @@ -0,0 +1,11 @@ +module.exports = { + description: 'manual chunks support', + options: { + strictDeprecations: false, + input: ['main.js'], + manualChunks: { + lib1: ['lib1.js'], + deps2and3: ['dep2.js', 'dep3.js'] + } + } +}; diff --git a/test/chunking-form/samples/deprecated/manual-chunks/_expected/amd/generated-deps2and3.js b/test/chunking-form/samples/deprecated/manual-chunks/_expected/amd/generated-deps2and3.js new file mode 100644 index 00000000000..ddd28d1a05e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/_expected/amd/generated-deps2and3.js @@ -0,0 +1,20 @@ +define(['exports', './generated-lib1'], function (exports, lib1) { 'use strict'; + + function fn () { + console.log('lib2 fn'); + } + + function fn$1 () { + fn(); + console.log('dep2 fn'); + } + + function fn$2 () { + lib1.fn(); + console.log('dep3 fn'); + } + + exports.fn = fn$1; + exports.fn$1 = fn$2; + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks/_expected/amd/generated-lib1.js b/test/chunking-form/samples/deprecated/manual-chunks/_expected/amd/generated-lib1.js new file mode 100644 index 00000000000..8ee6361f5e4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/_expected/amd/generated-lib1.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + function fn () { + console.log('lib1 fn'); + } + + exports.fn = fn; + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks/_expected/amd/main.js b/test/chunking-form/samples/deprecated/manual-chunks/_expected/amd/main.js new file mode 100644 index 00000000000..e636d3d3dd1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/_expected/amd/main.js @@ -0,0 +1,17 @@ +define(['./generated-deps2and3', './generated-lib1'], function (deps2and3, lib1) { 'use strict'; + + function fn () { + console.log('dep1 fn'); + } + + class Main { + constructor () { + fn(); + deps2and3.fn(); + deps2and3.fn$1(); + } + } + + return Main; + +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks/_expected/cjs/generated-deps2and3.js b/test/chunking-form/samples/deprecated/manual-chunks/_expected/cjs/generated-deps2and3.js new file mode 100644 index 00000000000..2b98a12f897 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/_expected/cjs/generated-deps2and3.js @@ -0,0 +1,20 @@ +'use strict'; + +var lib1 = require('./generated-lib1.js'); + +function fn () { + console.log('lib2 fn'); +} + +function fn$1 () { + fn(); + console.log('dep2 fn'); +} + +function fn$2 () { + lib1.fn(); + console.log('dep3 fn'); +} + +exports.fn = fn$1; +exports.fn$1 = fn$2; diff --git a/test/chunking-form/samples/deprecated/manual-chunks/_expected/cjs/generated-lib1.js b/test/chunking-form/samples/deprecated/manual-chunks/_expected/cjs/generated-lib1.js new file mode 100644 index 00000000000..6a9d99129d3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/_expected/cjs/generated-lib1.js @@ -0,0 +1,7 @@ +'use strict'; + +function fn () { + console.log('lib1 fn'); +} + +exports.fn = fn; diff --git a/test/chunking-form/samples/deprecated/manual-chunks/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/manual-chunks/_expected/cjs/main.js new file mode 100644 index 00000000000..2a68746bab6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/_expected/cjs/main.js @@ -0,0 +1,18 @@ +'use strict'; + +var deps2and3 = require('./generated-deps2and3.js'); +require('./generated-lib1.js'); + +function fn () { + console.log('dep1 fn'); +} + +class Main { + constructor () { + fn(); + deps2and3.fn(); + deps2and3.fn$1(); + } +} + +module.exports = Main; diff --git a/test/chunking-form/samples/deprecated/manual-chunks/_expected/es/generated-deps2and3.js b/test/chunking-form/samples/deprecated/manual-chunks/_expected/es/generated-deps2and3.js new file mode 100644 index 00000000000..ab74a6ccafd --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/_expected/es/generated-deps2and3.js @@ -0,0 +1,17 @@ +import { f as fn$3 } from './generated-lib1.js'; + +function fn () { + console.log('lib2 fn'); +} + +function fn$1 () { + fn(); + console.log('dep2 fn'); +} + +function fn$2 () { + fn$3(); + console.log('dep3 fn'); +} + +export { fn$2 as a, fn$1 as f }; diff --git a/test/chunking-form/samples/deprecated/manual-chunks/_expected/es/generated-lib1.js b/test/chunking-form/samples/deprecated/manual-chunks/_expected/es/generated-lib1.js new file mode 100644 index 00000000000..ae5cdca1483 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/_expected/es/generated-lib1.js @@ -0,0 +1,5 @@ +function fn () { + console.log('lib1 fn'); +} + +export { fn as f }; diff --git a/test/chunking-form/samples/deprecated/manual-chunks/_expected/es/main.js b/test/chunking-form/samples/deprecated/manual-chunks/_expected/es/main.js new file mode 100644 index 00000000000..55591e37b6a --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/_expected/es/main.js @@ -0,0 +1,16 @@ +import { f as fn$1, a as fn$2 } from './generated-deps2and3.js'; +import './generated-lib1.js'; + +function fn () { + console.log('dep1 fn'); +} + +class Main { + constructor () { + fn(); + fn$1(); + fn$2(); + } +} + +export default Main; diff --git a/test/chunking-form/samples/deprecated/manual-chunks/_expected/system/generated-deps2and3.js b/test/chunking-form/samples/deprecated/manual-chunks/_expected/system/generated-deps2and3.js new file mode 100644 index 00000000000..2b10cd02e29 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/_expected/system/generated-deps2and3.js @@ -0,0 +1,31 @@ +System.register(['./generated-lib1.js'], function (exports) { + 'use strict'; + var fn$3; + return { + setters: [function (module) { + fn$3 = module.f; + }], + execute: function () { + + exports({ + a: fn$2, + f: fn$1 + }); + + function fn () { + console.log('lib2 fn'); + } + + function fn$1 () { + fn(); + console.log('dep2 fn'); + } + + function fn$2 () { + fn$3(); + console.log('dep3 fn'); + } + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks/_expected/system/generated-lib1.js b/test/chunking-form/samples/deprecated/manual-chunks/_expected/system/generated-lib1.js new file mode 100644 index 00000000000..46e60ceba06 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/_expected/system/generated-lib1.js @@ -0,0 +1,14 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + exports('f', fn); + + function fn () { + console.log('lib1 fn'); + } + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks/_expected/system/main.js b/test/chunking-form/samples/deprecated/manual-chunks/_expected/system/main.js new file mode 100644 index 00000000000..b9ce4867e2b --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/_expected/system/main.js @@ -0,0 +1,25 @@ +System.register(['./generated-deps2and3.js', './generated-lib1.js'], function (exports) { + 'use strict'; + var fn$1, fn$2; + return { + setters: [function (module) { + fn$1 = module.f; + fn$2 = module.a; + }, function () {}], + execute: function () { + + function fn () { + console.log('dep1 fn'); + } + + class Main { + constructor () { + fn(); + fn$1(); + fn$2(); + } + } exports('default', Main); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/manual-chunks/dep1.js b/test/chunking-form/samples/deprecated/manual-chunks/dep1.js new file mode 100644 index 00000000000..b67d0bbb2c1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/dep1.js @@ -0,0 +1,3 @@ +export function fn () { + console.log('dep1 fn'); +} \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/manual-chunks/dep2.js b/test/chunking-form/samples/deprecated/manual-chunks/dep2.js new file mode 100644 index 00000000000..1549fc1644c --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/dep2.js @@ -0,0 +1,6 @@ +import { fn as libfn } from './lib2.js'; + +export function fn () { + libfn(); + console.log('dep2 fn'); +} \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/manual-chunks/dep3.js b/test/chunking-form/samples/deprecated/manual-chunks/dep3.js new file mode 100644 index 00000000000..4e32222106a --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/dep3.js @@ -0,0 +1,8 @@ +import { fn as libfn, treeshaked } from './lib1.js'; + +export function fn () { + libfn(); + console.log('dep3 fn'); +} + +export default treeshaked; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/manual-chunks/lib1.js b/test/chunking-form/samples/deprecated/manual-chunks/lib1.js new file mode 100644 index 00000000000..5ccf83b357e --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/lib1.js @@ -0,0 +1,7 @@ +export function fn () { + console.log('lib1 fn'); +} + +export function treeshaked () { + console.log('this is tree shaken!'); +} \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/manual-chunks/lib2.js b/test/chunking-form/samples/deprecated/manual-chunks/lib2.js new file mode 100644 index 00000000000..2d6d2cf0852 --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/lib2.js @@ -0,0 +1,3 @@ +export function fn () { + console.log('lib2 fn'); +} \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/manual-chunks/main.js b/test/chunking-form/samples/deprecated/manual-chunks/main.js new file mode 100644 index 00000000000..d65cf01a5ff --- /dev/null +++ b/test/chunking-form/samples/deprecated/manual-chunks/main.js @@ -0,0 +1,15 @@ +import { fn } from './dep1.js'; +import { fn as fn2 } from './dep2.js'; +import { fn as fn3, default as treeshaked } from './dep3.js'; + +if (false) { + treeshaked(); +} + +export default class Main { + constructor () { + fn(); + fn2(); + fn3(); + } +} \ No newline at end of file diff --git a/test/chunking-form/samples/emit-file/emit-chunk-facade/_config.js b/test/chunking-form/samples/emit-file/emit-chunk-facade/_config.js index 5434bb22502..2c185dd564d 100644 --- a/test/chunking-form/samples/emit-file/emit-chunk-facade/_config.js +++ b/test/chunking-form/samples/emit-file/emit-chunk-facade/_config.js @@ -5,8 +5,10 @@ module.exports = { description: 'retrieves the correct name of an emitted chunk in case a facade is created', options: { input: 'main', - manualChunks: { - 'build-starter': ['buildStart'] + output: { + manualChunks: { + 'build-starter': ['buildStart'] + } }, plugins: { buildStart() { diff --git a/test/chunking-form/samples/manual-chunk-avoid-facade/_config.js b/test/chunking-form/samples/manual-chunk-avoid-facade/_config.js index 3872987a3f1..b3f1783fee8 100644 --- a/test/chunking-form/samples/manual-chunk-avoid-facade/_config.js +++ b/test/chunking-form/samples/manual-chunk-avoid-facade/_config.js @@ -2,8 +2,10 @@ module.exports = { description: 'avoid facades if possible when using manual chunks', options: { input: ['main1', 'main2'], - manualChunks: { - manual: ['main2'] + output: { + manualChunks: { + manual: ['main2'] + } } } }; diff --git a/test/chunking-form/samples/manual-chunk-contains-entry-conflict/_config.js b/test/chunking-form/samples/manual-chunk-contains-entry-conflict/_config.js index 31b66fa814e..a37dc57a3b7 100644 --- a/test/chunking-form/samples/manual-chunk-contains-entry-conflict/_config.js +++ b/test/chunking-form/samples/manual-chunk-contains-entry-conflict/_config.js @@ -1,12 +1,15 @@ module.exports = { + expectedWarnings: ['EMPTY_BUNDLE'], description: 'Uses entry alias if manual chunks contain entry chunks with different alias', options: { input: { main: 'main.js', main2: 'main2.js' }, - manualChunks: { - outer: ['outer'] + output: { + manualChunks: { + outer: ['outer'] + } } } }; diff --git a/test/chunking-form/samples/manual-chunk-contains-entry-match/_config.js b/test/chunking-form/samples/manual-chunk-contains-entry-match/_config.js index a08d4f85d17..886f2483469 100644 --- a/test/chunking-form/samples/manual-chunk-contains-entry-match/_config.js +++ b/test/chunking-form/samples/manual-chunk-contains-entry-match/_config.js @@ -5,8 +5,10 @@ module.exports = { input: { main: 'main.js' }, - manualChunks: { - main: ['outer'] + output: { + manualChunks: { + main: ['outer'] + } } } }; diff --git a/test/chunking-form/samples/manual-chunk-is-entry-conflict/_config.js b/test/chunking-form/samples/manual-chunk-is-entry-conflict/_config.js index 3b18f870977..ff3ff114277 100644 --- a/test/chunking-form/samples/manual-chunk-is-entry-conflict/_config.js +++ b/test/chunking-form/samples/manual-chunk-is-entry-conflict/_config.js @@ -5,8 +5,10 @@ module.exports = { main: 'main.js', main2: 'main2.js' }, - manualChunks: { - other: ['main'] + output: { + manualChunks: { + other: ['main'] + } } } }; diff --git a/test/chunking-form/samples/manual-chunk-is-entry-match/_config.js b/test/chunking-form/samples/manual-chunk-is-entry-match/_config.js index f86733b33a7..e48ab6e5c57 100644 --- a/test/chunking-form/samples/manual-chunk-is-entry-match/_config.js +++ b/test/chunking-form/samples/manual-chunk-is-entry-match/_config.js @@ -5,8 +5,10 @@ module.exports = { input: { main: 'main.js' }, - manualChunks: { - main: ['main'] + output: { + manualChunks: { + main: ['main'] + } } } }; diff --git a/test/chunking-form/samples/manual-chunks-different-nested/_config.js b/test/chunking-form/samples/manual-chunks-different-nested/_config.js index ef32850d199..b3cb648c6ce 100644 --- a/test/chunking-form/samples/manual-chunks-different-nested/_config.js +++ b/test/chunking-form/samples/manual-chunks-different-nested/_config.js @@ -2,10 +2,12 @@ module.exports = { description: 'manual chunks can have other manual chunks as dependencies', options: { input: ['main.js'], - manualChunks: { - 'manual-outer': ['outer.js'], - 'manual-inner': ['inner.js'], - 'manual-middle': ['middle.js'] + output: { + manualChunks: { + 'manual-outer': ['outer.js'], + 'manual-inner': ['inner.js'], + 'manual-middle': ['middle.js'] + } } } }; diff --git a/test/chunking-form/samples/manual-chunks-dynamic-facades/_config.js b/test/chunking-form/samples/manual-chunks-dynamic-facades/_config.js index ce24fdc1b3f..4b561f0ff92 100644 --- a/test/chunking-form/samples/manual-chunks-dynamic-facades/_config.js +++ b/test/chunking-form/samples/manual-chunks-dynamic-facades/_config.js @@ -2,8 +2,10 @@ module.exports = { description: 'creates facades for dynamic manual chunks if necessary', options: { input: ['main.js'], - manualChunks: { - dynamic: ['dynamic1.js'] + output: { + manualChunks: { + dynamic: ['dynamic1.js'] + } } } }; diff --git a/test/chunking-form/samples/manual-chunks-dynamic-name-conflict/_config.js b/test/chunking-form/samples/manual-chunks-dynamic-name-conflict/_config.js index 2e5e55b0c41..05c5ee743cf 100644 --- a/test/chunking-form/samples/manual-chunks-dynamic-name-conflict/_config.js +++ b/test/chunking-form/samples/manual-chunks-dynamic-name-conflict/_config.js @@ -2,8 +2,10 @@ module.exports = { description: 'handles name conflicts in manual chunks', options: { input: ['main.js'], - manualChunks: { - dynamic: ['dynamic1.js'] + output: { + manualChunks: { + dynamic: ['dynamic1.js'] + } } } }; diff --git a/test/chunking-form/samples/manual-chunks-dynamic/_config.js b/test/chunking-form/samples/manual-chunks-dynamic/_config.js index ae6451ab03c..e41c6eed7a7 100644 --- a/test/chunking-form/samples/manual-chunks-dynamic/_config.js +++ b/test/chunking-form/samples/manual-chunks-dynamic/_config.js @@ -2,8 +2,10 @@ module.exports = { description: 'supports dynamic manual chunks', options: { input: ['main.js'], - manualChunks: { - dynamic: ['dynamic.js'] + output: { + manualChunks: { + dynamic: ['dynamic.js'] + } } } }; diff --git a/test/chunking-form/samples/manual-chunks-function/_config.js b/test/chunking-form/samples/manual-chunks-function/_config.js index 7dce4fbb810..1c3e6daf708 100644 --- a/test/chunking-form/samples/manual-chunks-function/_config.js +++ b/test/chunking-form/samples/manual-chunks-function/_config.js @@ -2,9 +2,11 @@ module.exports = { description: 'allows to define manual chunks via a function', options: { input: ['main-a'], - manualChunks(id) { - if (id[id.length - 5] === '-') { - return `chunk-${id[id.length - 4]}`; + output: { + manualChunks(id) { + if (id[id.length - 5] === '-') { + return `chunk-${id[id.length - 4]}`; + } } } } diff --git a/test/chunking-form/samples/manual-chunks-nested/_config.js b/test/chunking-form/samples/manual-chunks-nested/_config.js index a617f04b21f..8214e629eaf 100644 --- a/test/chunking-form/samples/manual-chunks-nested/_config.js +++ b/test/chunking-form/samples/manual-chunks-nested/_config.js @@ -2,8 +2,10 @@ module.exports = { description: 'manual chunks can contain nested modules', options: { input: ['main.js'], - manualChunks: { - manual: ['middle.js', 'inner.js', 'outer.js'] + output: { + manualChunks: { + manual: ['middle.js', 'inner.js', 'outer.js'] + } } } }; diff --git a/test/chunking-form/samples/manual-chunks/_config.js b/test/chunking-form/samples/manual-chunks/_config.js index db37984cc08..2589e95d79a 100644 --- a/test/chunking-form/samples/manual-chunks/_config.js +++ b/test/chunking-form/samples/manual-chunks/_config.js @@ -2,9 +2,11 @@ module.exports = { description: 'manual chunks support', options: { input: ['main.js'], - manualChunks: { - lib1: ['lib1.js'], - deps2and3: ['dep2.js', 'dep3.js'] + output: { + manualChunks: { + lib1: ['lib1.js'], + deps2and3: ['dep2.js', 'dep3.js'] + } } } }; diff --git a/test/function/samples/deprecated/inline-imports-with-manual/_config.js b/test/function/samples/deprecated/inline-imports-with-manual/_config.js new file mode 100644 index 00000000000..4cbd5cc3dcb --- /dev/null +++ b/test/function/samples/deprecated/inline-imports-with-manual/_config.js @@ -0,0 +1,15 @@ +module.exports = { + description: 'Manual chunks are not supported when inlining dynamic imports', + options: { + strictDeprecations: false, + input: ['main.js'], + inlineDynamicImports: true, + manualChunks: { + lib: ['lib.js'] + } + }, + generateError: { + code: 'INVALID_OPTION', + message: '"manualChunks" option is not supported for "inlineDynamicImports".' + } +}; diff --git a/test/function/samples/deprecated/inline-imports-with-manual/lib.js b/test/function/samples/deprecated/inline-imports-with-manual/lib.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/function/samples/deprecated/inline-imports-with-manual/lib.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/function/samples/deprecated/inline-imports-with-manual/main.js b/test/function/samples/deprecated/inline-imports-with-manual/main.js new file mode 100644 index 00000000000..4869dc82f38 --- /dev/null +++ b/test/function/samples/deprecated/inline-imports-with-manual/main.js @@ -0,0 +1 @@ +import('./lib').then(({value}) => assert.equal(value, 42)); diff --git a/test/function/samples/deprecated/manual-chunks-conflict/_config.js b/test/function/samples/deprecated/manual-chunks-conflict/_config.js new file mode 100644 index 00000000000..8ef99e03397 --- /dev/null +++ b/test/function/samples/deprecated/manual-chunks-conflict/_config.js @@ -0,0 +1,17 @@ +module.exports = { + description: 'Throws for conflicts between manual chunks', + options: { + strictDeprecations: false, + input: ['main.js'], + output: { + manualChunks: { + dep1: ['dep.js'], + dep2: ['dep.js'] + } + } + }, + generateError: { + code: 'INVALID_CHUNK', + message: `Cannot assign dep.js to the "dep2" chunk as it is already in the "dep1" chunk.` + } +}; diff --git a/test/function/samples/deprecated/manual-chunks-conflict/dep.js b/test/function/samples/deprecated/manual-chunks-conflict/dep.js new file mode 100644 index 00000000000..b74a9837c07 --- /dev/null +++ b/test/function/samples/deprecated/manual-chunks-conflict/dep.js @@ -0,0 +1 @@ +console.log('dep'); diff --git a/test/function/samples/deprecated/manual-chunks-conflict/main.js b/test/function/samples/deprecated/manual-chunks-conflict/main.js new file mode 100644 index 00000000000..d6cf3b02443 --- /dev/null +++ b/test/function/samples/deprecated/manual-chunks-conflict/main.js @@ -0,0 +1 @@ +import './dep.js'; diff --git a/test/function/samples/deprecated/manual-chunks-info/_config.js b/test/function/samples/deprecated/manual-chunks-info/_config.js new file mode 100644 index 00000000000..962574e7cff --- /dev/null +++ b/test/function/samples/deprecated/manual-chunks-info/_config.js @@ -0,0 +1,75 @@ +const assert = require('assert'); +const path = require('path'); + +function getId(name) { + return path.resolve(__dirname, `${name}.js`); +} + +module.exports = { + description: 'provides additional chunk information to a manualChunks function', + options: { + strictDeprecations: false, + external: 'external', + output: { + manualChunks(id, { getModuleIds, getModuleInfo }) { + assert.deepStrictEqual( + [...getModuleIds()], + [getId('main'), 'external', getId('lib'), getId('dynamic')] + ); + assert.deepStrictEqual( + [...getModuleIds()].map(id => getModuleInfo(id)), + [ + { + dynamicImporters: [], + dynamicallyImportedIds: [getId('dynamic')], + hasModuleSideEffects: true, + id: getId('main'), + implicitlyLoadedAfterOneOf: [], + implicitlyLoadedBefore: [], + importers: [], + importedIds: [getId('lib'), 'external'], + isEntry: true, + isExternal: false + }, + { + dynamicImporters: [getId('dynamic')], + dynamicallyImportedIds: [], + hasModuleSideEffects: true, + id: 'external', + implicitlyLoadedAfterOneOf: [], + implicitlyLoadedBefore: [], + importers: [getId('main')], + importedIds: [], + isEntry: false, + isExternal: true + }, + { + dynamicImporters: [], + dynamicallyImportedIds: [], + hasModuleSideEffects: true, + id: getId('lib'), + implicitlyLoadedAfterOneOf: [], + implicitlyLoadedBefore: [], + importers: [getId('dynamic'), getId('main')], + importedIds: [], + isEntry: false, + isExternal: false + }, + { + dynamicImporters: [getId('main')], + dynamicallyImportedIds: ['external'], + hasModuleSideEffects: true, + id: getId('dynamic'), + implicitlyLoadedAfterOneOf: [], + implicitlyLoadedBefore: [], + importers: [], + importedIds: [getId('lib')], + isEntry: false, + isExternal: false + } + ] + ); + } + } + } +}; diff --git a/test/function/samples/deprecated/manual-chunks-info/dynamic.js b/test/function/samples/deprecated/manual-chunks-info/dynamic.js new file mode 100644 index 00000000000..2d2ab6f359b --- /dev/null +++ b/test/function/samples/deprecated/manual-chunks-info/dynamic.js @@ -0,0 +1,2 @@ +export const promise = import('external'); +export { default as internal } from './lib'; diff --git a/test/function/samples/deprecated/manual-chunks-info/lib.js b/test/function/samples/deprecated/manual-chunks-info/lib.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/function/samples/deprecated/manual-chunks-info/lib.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/function/samples/deprecated/manual-chunks-info/main.js b/test/function/samples/deprecated/manual-chunks-info/main.js new file mode 100644 index 00000000000..c79c2fe09f7 --- /dev/null +++ b/test/function/samples/deprecated/manual-chunks-info/main.js @@ -0,0 +1,3 @@ +export const promise = import('./dynamic'); +export { default as value } from './lib'; +export { external } from 'external'; diff --git a/test/function/samples/deprecated/manual-chunks-preserve-modules/_config.js b/test/function/samples/deprecated/manual-chunks-preserve-modules/_config.js new file mode 100644 index 00000000000..9181019287f --- /dev/null +++ b/test/function/samples/deprecated/manual-chunks-preserve-modules/_config.js @@ -0,0 +1,15 @@ +module.exports = { + description: 'Assigning manual chunks fails when preserving modules', + options: { + strictDeprecations: false, + input: ['main.js'], + preserveModules: true, + manualChunks: { + lib: ['lib.js'] + } + }, + generateError: { + code: 'INVALID_OPTION', + message: '"preserveModules" does not support the "manualChunks" option.' + } +}; diff --git a/test/function/samples/deprecated/manual-chunks-preserve-modules/lib.js b/test/function/samples/deprecated/manual-chunks-preserve-modules/lib.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/function/samples/deprecated/manual-chunks-preserve-modules/lib.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/function/samples/deprecated/manual-chunks-preserve-modules/main.js b/test/function/samples/deprecated/manual-chunks-preserve-modules/main.js new file mode 100644 index 00000000000..0786352d0f9 --- /dev/null +++ b/test/function/samples/deprecated/manual-chunks-preserve-modules/main.js @@ -0,0 +1,3 @@ +import { value } from './lib'; + +assert.equal(value, 42); diff --git a/test/function/samples/deprecations/manualChunks/_config.js b/test/function/samples/deprecations/manualChunks/_config.js new file mode 100644 index 00000000000..186f248569b --- /dev/null +++ b/test/function/samples/deprecations/manualChunks/_config.js @@ -0,0 +1,13 @@ +module.exports = { + description: 'marks the "manualChunks" input option as deprecated', + options: { + manualChunks() { + return 'manual'; + } + }, + error: { + code: 'DEPRECATED_FEATURE', + message: + 'The "manualChunks" option is deprecated. Use the "output.manualChunks" option instead.' + } +}; diff --git a/test/function/samples/deprecations/manualChunks/main.js b/test/function/samples/deprecations/manualChunks/main.js new file mode 100644 index 00000000000..f8a2d88d245 --- /dev/null +++ b/test/function/samples/deprecations/manualChunks/main.js @@ -0,0 +1,11 @@ +const foo = {}; + +function doIt(x) { + if (foo[x]) { + return true; + } + foo[x] = true; +} + +doIt('x'); +assert.ok(doIt('x'), 'foo was not reassigned'); diff --git a/test/function/samples/inline-imports-with-manual/_config.js b/test/function/samples/inline-imports-with-manual/_config.js index 2b3af2a2835..a05b086b89f 100644 --- a/test/function/samples/inline-imports-with-manual/_config.js +++ b/test/function/samples/inline-imports-with-manual/_config.js @@ -3,11 +3,13 @@ module.exports = { options: { input: ['main.js'], inlineDynamicImports: true, - manualChunks: { - lib: ['lib.js'] + output: { + manualChunks: { + lib: ['lib.js'] + } } }, - error: { + generateError: { code: 'INVALID_OPTION', message: '"manualChunks" option is not supported for "inlineDynamicImports".' } diff --git a/test/function/samples/manual-chunks-conflict/_config.js b/test/function/samples/manual-chunks-conflict/_config.js index f84e76fb7ae..a3f06ae895c 100644 --- a/test/function/samples/manual-chunks-conflict/_config.js +++ b/test/function/samples/manual-chunks-conflict/_config.js @@ -1,17 +1,16 @@ -const path = require('path'); - module.exports = { description: 'Throws for conflicts between manual chunks', options: { input: ['main.js'], - manualChunks: { - dep1: ['dep.js'], - dep2: ['dep.js'] + output: { + manualChunks: { + dep1: ['dep.js'], + dep2: ['dep.js'] + } } }, - error: { + generateError: { code: 'INVALID_CHUNK', - message: `Cannot assign dep.js to the "dep2" chunk as it is already in the "dep1" chunk.`, - watchFiles: [path.resolve(__dirname, 'main.js'), path.resolve(__dirname, 'dep.js')] + message: `Cannot assign dep.js to the "dep2" chunk as it is already in the "dep1" chunk.` } }; diff --git a/test/function/samples/manual-chunks-info/_config.js b/test/function/samples/manual-chunks-info/_config.js index a501278ef4a..8939821f4f7 100644 --- a/test/function/samples/manual-chunks-info/_config.js +++ b/test/function/samples/manual-chunks-info/_config.js @@ -9,64 +9,66 @@ module.exports = { description: 'provides additional chunk information to a manualChunks function', options: { external: 'external', - manualChunks(id, { getModuleIds, getModuleInfo }) { - assert.deepStrictEqual( - [...getModuleIds()], - [getId('main'), 'external', getId('lib'), getId('dynamic')] - ); - assert.deepStrictEqual( - [...getModuleIds()].map(id => getModuleInfo(id)), - [ - { - dynamicImporters: [], - dynamicallyImportedIds: [getId('dynamic')], - hasModuleSideEffects: true, - id: getId('main'), - implicitlyLoadedAfterOneOf: [], - implicitlyLoadedBefore: [], - importers: [], - importedIds: [getId('lib'), 'external'], - isEntry: true, - isExternal: false - }, - { - dynamicImporters: [getId('dynamic')], - dynamicallyImportedIds: [], - hasModuleSideEffects: true, - id: 'external', - implicitlyLoadedAfterOneOf: [], - implicitlyLoadedBefore: [], - importers: [getId('main')], - importedIds: [], - isEntry: false, - isExternal: true - }, - { - dynamicImporters: [], - dynamicallyImportedIds: [], - hasModuleSideEffects: true, - id: getId('lib'), - implicitlyLoadedAfterOneOf: [], - implicitlyLoadedBefore: [], - importers: [getId('dynamic'), getId('main')], - importedIds: [], - isEntry: false, - isExternal: false - }, - { - dynamicImporters: [getId('main')], - dynamicallyImportedIds: ['external'], - hasModuleSideEffects: true, - id: getId('dynamic'), - implicitlyLoadedAfterOneOf: [], - implicitlyLoadedBefore: [], - importers: [], - importedIds: [getId('lib')], - isEntry: false, - isExternal: false - } - ] - ); + output: { + manualChunks(id, { getModuleIds, getModuleInfo }) { + assert.deepStrictEqual( + [...getModuleIds()], + [getId('main'), 'external', getId('lib'), getId('dynamic')] + ); + assert.deepStrictEqual( + [...getModuleIds()].map(id => getModuleInfo(id)), + [ + { + dynamicImporters: [], + dynamicallyImportedIds: [getId('dynamic')], + hasModuleSideEffects: true, + id: getId('main'), + implicitlyLoadedAfterOneOf: [], + implicitlyLoadedBefore: [], + importers: [], + importedIds: [getId('lib'), 'external'], + isEntry: true, + isExternal: false + }, + { + dynamicImporters: [getId('dynamic')], + dynamicallyImportedIds: [], + hasModuleSideEffects: true, + id: 'external', + implicitlyLoadedAfterOneOf: [], + implicitlyLoadedBefore: [], + importers: [getId('main')], + importedIds: [], + isEntry: false, + isExternal: true + }, + { + dynamicImporters: [], + dynamicallyImportedIds: [], + hasModuleSideEffects: true, + id: getId('lib'), + implicitlyLoadedAfterOneOf: [], + implicitlyLoadedBefore: [], + importers: [getId('dynamic'), getId('main')], + importedIds: [], + isEntry: false, + isExternal: false + }, + { + dynamicImporters: [getId('main')], + dynamicallyImportedIds: ['external'], + hasModuleSideEffects: true, + id: getId('dynamic'), + implicitlyLoadedAfterOneOf: [], + implicitlyLoadedBefore: [], + importers: [], + importedIds: [getId('lib')], + isEntry: false, + isExternal: false + } + ] + ); + } } } }; diff --git a/test/function/samples/options-hook/_config.js b/test/function/samples/options-hook/_config.js index 230a403ca1d..fa6eaeaef77 100644 --- a/test/function/samples/options-hook/_config.js +++ b/test/function/samples/options-hook/_config.js @@ -20,7 +20,6 @@ module.exports = { experimentalCacheExpiry: 10, inlineDynamicImports: false, input: ['used'], - manualChunks: {}, perf: false, plugins: [ { diff --git a/test/function/samples/output-options-hook/_config.js b/test/function/samples/output-options-hook/_config.js index c78dc2fba81..f5003974f2b 100644 --- a/test/function/samples/output-options-hook/_config.js +++ b/test/function/samples/output-options-hook/_config.js @@ -33,6 +33,7 @@ module.exports = { hoistTransitiveImports: true, indent: true, interop: true, + manualChunks: {}, minifyInternalExports: false, namespaceToStringTag: false, noConflict: false, diff --git a/test/function/samples/preserve-modules/manual-chunks/_config.js b/test/function/samples/preserve-modules/manual-chunks/_config.js index 3d11ec5f9b9..dfeceeaba32 100644 --- a/test/function/samples/preserve-modules/manual-chunks/_config.js +++ b/test/function/samples/preserve-modules/manual-chunks/_config.js @@ -3,11 +3,13 @@ module.exports = { options: { input: ['main.js'], preserveModules: true, - manualChunks: { - lib: ['lib.js'] + output: { + manualChunks: { + lib: ['lib.js'] + } } }, - error: { + generateError: { code: 'INVALID_OPTION', message: '"preserveModules" does not support the "manualChunks" option.' } diff --git a/test/misc/optionList.js b/test/misc/optionList.js index 01b18d55da0..6c85ca494cf 100644 --- a/test/misc/optionList.js +++ b/test/misc/optionList.js @@ -1,3 +1,3 @@ exports.input = 'acorn, acornInjectPlugins, cache, context, experimentalCacheExpiry, external, inlineDynamicImports, input, manualChunks, moduleContext, onwarn, perf, plugins, preserveEntrySignatures, preserveModules, preserveSymlinks, shimMissingExports, strictDeprecations, treeshake, watch'; exports.flags = 'acorn, acornInjectPlugins, amd, assetFileNames, banner, c, cache, chunkFileNames, compact, config, context, d, dir, dynamicImportFunction, e, entryFileNames, environment, esModule, experimentalCacheExpiry, exports, extend, external, externalLiveBindings, f, file, footer, format, freeze, g, globals, h, hoistTransitiveImports, i, indent, inlineDynamicImports, input, interop, intro, m, manualChunks, minifyInternalExports, moduleContext, n, name, namespaceToStringTag, noConflict, o, onwarn, outro, p, paths, perf, plugin, plugins, preferConst, preserveEntrySignatures, preserveModules, preserveSymlinks, shimMissingExports, silent, sourcemap, sourcemapExcludeSources, sourcemapFile, stdin, strict, strictDeprecations, systemNullSetters, treeshake, v, w, waitForBundleInput, watch'; -exports.output = 'amd, assetFileNames, banner, chunkFileNames, compact, dir, dynamicImportFunction, entryFileNames, esModule, exports, extend, externalLiveBindings, file, footer, format, freeze, globals, hoistTransitiveImports, indent, interop, intro, minifyInternalExports, name, namespaceToStringTag, noConflict, outro, paths, plugins, preferConst, sourcemap, sourcemapExcludeSources, sourcemapFile, sourcemapPathTransform, strict, systemNullSetters'; +exports.output = 'amd, assetFileNames, banner, chunkFileNames, compact, dir, dynamicImportFunction, entryFileNames, esModule, exports, extend, externalLiveBindings, file, footer, format, freeze, globals, hoistTransitiveImports, indent, interop, intro, manualChunks, minifyInternalExports, name, namespaceToStringTag, noConflict, outro, paths, plugins, preferConst, sourcemap, sourcemapExcludeSources, sourcemapFile, sourcemapPathTransform, strict, systemNullSetters'; From f1ef398135707bf6e39851acb6d77ab1dff95892 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Thu, 18 Jun 2020 21:55:40 +0200 Subject: [PATCH 12/20] Make watch test more stable --- test/watch/index.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/watch/index.js b/test/watch/index.js index 66f1a931169..f58fe59f8ca 100644 --- a/test/watch/index.js +++ b/test/watch/index.js @@ -1199,8 +1199,8 @@ describe('rollup.watch', () => { }); describe('addWatchFile', () => { - it('supports adding additional watch files in plugin hooks', () => { - const watchChangeIds = []; + it.only('supports adding additional watch files in plugin hooks', () => { + const watchChangeIds = new Set(); const buildStartFile = path.resolve('test/_tmp/input/buildStart'); const loadFile = path.resolve('test/_tmp/input/load'); const resolveIdFile = path.resolve('test/_tmp/input/resolveId'); @@ -1231,7 +1231,7 @@ describe('rollup.watch', () => { this.addWatchFile(transformFile); }, watchChange(id) { - watchChangeIds.push(id); + watchChangeIds.add(id); } } }); @@ -1243,7 +1243,7 @@ describe('rollup.watch', () => { 'END', () => { assert.strictEqual(run('../_tmp/output/bundle.js'), 42); - assert.deepStrictEqual(watchChangeIds, []); + assert.strictEqual(watchChangeIds.size, 0); for (const file of watchFiles) sander.writeFileSync(file, 'changed'); }, 'START', @@ -1252,7 +1252,7 @@ describe('rollup.watch', () => { 'END', () => { assert.strictEqual(run('../_tmp/output/bundle.js'), 42); - assert.deepStrictEqual(watchChangeIds.sort(), watchFiles.sort()); + assert.deepStrictEqual([...watchChangeIds].sort(), watchFiles.sort()); } ]); }); From 75d7324aa87c7ac52637a3cab04f2b427a899838 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sat, 20 Jun 2020 07:35:34 +0200 Subject: [PATCH 13/20] Make inlineDynamicImports and preserveModules output options --- .lintstagedrc | 2 +- src/Bundle.ts | 9 ++- src/Chunk.ts | 48 +++++++---- src/Module.ts | 6 +- src/ModuleLoader.ts | 2 + src/ast/variables/NamespaceVariable.ts | 41 +++++----- src/rollup/types.d.ts | 12 ++- src/utils/options/mergeOptions.ts | 2 + src/utils/options/normalizeInputOptions.ts | 81 ++++++++++--------- src/utils/options/normalizeOutputOptions.ts | 67 +++++++++++++-- .../avoid-imports-preserve-modules/_config.js | 8 ++ .../_expected/amd/a.js | 9 +++ .../_expected/amd/b.js | 9 +++ .../_expected/amd/main.js | 5 ++ .../_expected/amd/one.js | 9 +++ .../_expected/cjs/a.js | 7 ++ .../_expected/cjs/b.js | 7 ++ .../_expected/cjs/main.js | 6 ++ .../_expected/cjs/one.js | 9 +++ .../_expected/es/a.js | 3 + .../_expected/es/b.js | 3 + .../_expected/es/main.js | 4 + .../_expected/es/one.js | 5 ++ .../_expected/system/a.js | 10 +++ .../_expected/system/b.js | 10 +++ .../_expected/system/main.js | 16 ++++ .../_expected/system/one.js | 14 ++++ .../avoid-imports-preserve-modules/a.js | 1 + .../avoid-imports-preserve-modules/b.js | 1 + .../avoid-imports-preserve-modules/c.js | 1 + .../avoid-imports-preserve-modules/index.js | 3 + .../avoid-imports-preserve-modules/main.js | 3 + .../avoid-imports-preserve-modules/one.js | 2 + .../dynamic-import-inlining-object/_config.js | 8 ++ .../_expected/amd/entry.js | 17 ++++ .../_expected/cjs/entry.js | 15 ++++ .../_expected/es/entry.js | 11 +++ .../_expected/system/entry.js | 18 +++++ .../dynamic-import-inlining-object/foo.js | 1 + .../dynamic-import-inlining-object/main.js | 2 + .../_config.js | 9 +++ .../_expected/amd/components/index.js | 10 +++ .../_expected/amd/components/sub/index.js | 11 +++ .../_expected/amd/main.js | 10 +++ .../_expected/cjs/components/index.js | 10 +++ .../_expected/cjs/components/sub/index.js | 9 +++ .../_expected/cjs/main.js | 11 +++ .../_expected/es/components/index.js | 6 ++ .../_expected/es/components/sub/index.js | 5 ++ .../_expected/es/main.js | 2 + .../_expected/system/components/index.js | 15 ++++ .../_expected/system/components/sub/index.js | 11 +++ .../_expected/system/main.js | 15 ++++ .../components/index.js | 4 + .../components/sub/index.js | 4 + .../main.js | 3 + .../_config.js | 10 +++ .../_expected/amd/dep1.js | 19 +++++ .../_expected/amd/dep2.js | 16 ++++ .../_expected/amd/main.js | 5 ++ .../_expected/cjs/dep1.js | 17 ++++ .../_expected/cjs/dep2.js | 14 ++++ .../_expected/cjs/main.js | 6 ++ .../_expected/es/dep1.js | 13 +++ .../_expected/es/dep2.js | 9 +++ .../_expected/es/main.js | 4 + .../_expected/system/dep1.js | 22 +++++ .../_expected/system/dep2.js | 18 +++++ .../_expected/system/main.js | 17 ++++ .../dep1.js | 9 +++ .../dep2.js | 7 ++ .../main.js | 4 + .../_config.js | 8 ++ .../_expected/amd/default.js | 7 ++ .../_expected/amd/main.js | 10 +++ .../_expected/amd/named.js | 9 +++ .../_expected/cjs/default.js | 5 ++ .../_expected/cjs/main.js | 11 +++ .../_expected/cjs/named.js | 7 ++ .../_expected/es/default.js | 3 + .../_expected/es/main.js | 8 ++ .../_expected/es/named.js | 3 + .../_expected/system/default.js | 10 +++ .../_expected/system/main.js | 20 +++++ .../_expected/system/named.js | 10 +++ .../default.js | 1 + .../preserve-modules-auto-export-mode/main.js | 8 ++ .../named.js | 1 + .../preserve-modules-commonjs/_config.js | 13 +++ .../amd/_virtual/_external_commonjs-external | 9 +++ .../amd/_virtual/other.js_commonjs-proxy | 7 ++ .../_expected/amd/commonjs.js | 16 ++++ .../_expected/amd/main.js | 7 ++ .../_expected/amd/other.js | 15 ++++ .../cjs/_virtual/_external_commonjs-external | 9 +++ .../cjs/_virtual/other.js_commonjs-proxy | 7 ++ .../_expected/cjs/commonjs.js | 17 ++++ .../_expected/cjs/main.js | 8 ++ .../_expected/cjs/other.js | 13 +++ .../es/_virtual/_external_commonjs-external | 2 + .../es/_virtual/other.js_commonjs-proxy | 2 + .../_expected/es/commonjs.js | 11 +++ .../_expected/es/main.js | 4 + .../_expected/es/other.js | 8 ++ .../_virtual/_external_commonjs-external | 15 ++++ .../system/_virtual/other.js_commonjs-proxy | 15 ++++ .../_expected/system/commonjs.js | 20 +++++ .../_expected/system/main.js | 16 ++++ .../_expected/system/other.js | 14 ++++ .../preserve-modules-commonjs/commonjs.js | 6 ++ .../preserve-modules-commonjs/main.js | 4 + .../preserve-modules-commonjs/other.js | 1 + .../_config.js | 8 ++ .../_expected/amd/dynamic-included.js | 9 +++ .../_expected/amd/main.js | 5 ++ .../_expected/cjs/dynamic-included.js | 7 ++ .../_expected/cjs/main.js | 3 + .../_expected/es/dynamic-included.js | 3 + .../_expected/es/main.js | 1 + .../_expected/system/dynamic-included.js | 10 +++ .../_expected/system/main.js | 10 +++ .../dynamic-included.js | 1 + .../dynamic-removed.js | 1 + .../preserve-modules-dynamic-imports/main.js | 6 ++ .../_config.js | 8 ++ .../_expected/amd/m1.js | 10 +++ .../_expected/amd/m2.js | 7 ++ .../_expected/amd/m3.js | 7 ++ .../_expected/amd/main.js | 5 ++ .../_expected/cjs/m1.js | 11 +++ .../_expected/cjs/m2.js | 5 ++ .../_expected/cjs/m3.js | 5 ++ .../_expected/cjs/main.js | 5 ++ .../_expected/es/m1.js | 2 + .../_expected/es/m2.js | 3 + .../_expected/es/m3.js | 3 + .../_expected/es/main.js | 3 + .../_expected/system/m1.js | 15 ++++ .../_expected/system/m2.js | 10 +++ .../_expected/system/m3.js | 10 +++ .../_expected/system/main.js | 14 ++++ .../preserve-modules-dynamic-namespace/m1.js | 5 ++ .../preserve-modules-dynamic-namespace/m2.js | 2 + .../preserve-modules-dynamic-namespace/m3.js | 2 + .../main.js | 3 + .../preserve-modules-empty/_config.js | 8 ++ .../_expected/amd/main.js | 5 ++ .../_expected/amd/two.js | 7 ++ .../_expected/cjs/main.js | 5 ++ .../_expected/cjs/two.js | 5 ++ .../_expected/es/main.js | 3 + .../_expected/es/two.js | 3 + .../_expected/system/main.js | 14 ++++ .../_expected/system/two.js | 10 +++ .../deprecated/preserve-modules-empty/main.js | 3 + .../deprecated/preserve-modules-empty/one.js | 2 + .../preserve-modules-empty/three.js | 1 + .../deprecated/preserve-modules-empty/two.js | 1 + .../preserve-modules-export-alias/_config.js | 8 ++ .../_expected/amd/dep.js | 10 +++ .../_expected/amd/main1.js | 10 +++ .../_expected/amd/main2.js | 9 +++ .../_expected/cjs/dep.js | 8 ++ .../_expected/cjs/main1.js | 10 +++ .../_expected/cjs/main2.js | 9 +++ .../_expected/es/dep.js | 3 + .../_expected/es/main1.js | 1 + .../_expected/es/main2.js | 1 + .../_expected/system/dep.js | 10 +++ .../_expected/system/main1.js | 16 ++++ .../_expected/system/main2.js | 13 +++ .../preserve-modules-export-alias/dep.js | 3 + .../preserve-modules-export-alias/main1.js | 1 + .../preserve-modules-export-alias/main2.js | 1 + .../_config.js | 11 +++ .../_expected/amd/entry-foo-amd-ts.ts.js | 7 ++ .../_expected/amd/entry-main-amd-ts.ts.js | 12 +++ .../_expected/amd/entry-no-ext-amd-.js | 7 ++ .../amd/nested/entry-bar-amd-ts.ts.js | 7 ++ .../amd/nested/entry-baz-amd-ts.ts.js | 7 ++ .../_expected/cjs/entry-foo-cjs-ts.ts.js | 5 ++ .../_expected/cjs/entry-main-cjs-ts.ts.js | 15 ++++ .../_expected/cjs/entry-no-ext-cjs-.js | 5 ++ .../cjs/nested/entry-bar-cjs-ts.ts.js | 5 ++ .../cjs/nested/entry-baz-cjs-ts.ts.js | 5 ++ .../_expected/es/entry-foo-es-ts.ts.js | 3 + .../_expected/es/entry-main-es-ts.ts.js | 4 + .../_expected/es/entry-no-ext-es-.js | 3 + .../_expected/es/nested/entry-bar-es-ts.ts.js | 3 + .../_expected/es/nested/entry-baz-es-ts.ts.js | 3 + .../system/entry-foo-system-ts.ts.js | 10 +++ .../system/entry-main-system-ts.ts.js | 19 +++++ .../_expected/system/entry-no-ext-system-.js | 10 +++ .../system/nested/entry-bar-system-ts.ts.js | 10 +++ .../system/nested/entry-baz-system-ts.ts.js | 10 +++ .../src/foo.ts | 1 + .../src/main.ts | 8 ++ .../src/nested/bar.ts | 1 + .../src/nested/baz.ts | 1 + .../src/no-ext | 1 + .../_config.js | 22 +++++ .../_expected/amd/_virtual/_One1.js | 7 ++ .../_expected/amd/_virtual/_One2.js | 7 ++ .../_expected/amd/_virtual/_one.js | 7 ++ .../_expected/amd/main.js | 5 ++ .../_expected/cjs/_virtual/_One1.js | 5 ++ .../_expected/cjs/_virtual/_One2.js | 5 ++ .../_expected/cjs/_virtual/_one.js | 5 ++ .../_expected/cjs/main.js | 7 ++ .../_expected/es/_virtual/_One1.js | 3 + .../_expected/es/_virtual/_One2.js | 3 + .../_expected/es/_virtual/_one.js | 3 + .../_expected/es/main.js | 5 ++ .../_expected/system/_virtual/_One1.js | 10 +++ .../_expected/system/_virtual/_One2.js | 10 +++ .../_expected/system/_virtual/_one.js | 10 +++ .../_expected/system/main.js | 18 +++++ .../main.js | 5 ++ .../_config.js | 11 +++ .../_expected/amd/default.js | 9 +++ .../_expected/amd/main.js | 12 +++ .../_expected/amd/named.js | 9 +++ .../_expected/cjs/default.js | 7 ++ .../_expected/cjs/main.js | 13 +++ .../_expected/cjs/named.js | 7 ++ .../_expected/es/default.js | 3 + .../_expected/es/main.js | 8 ++ .../_expected/es/named.js | 3 + .../_expected/system/default.js | 10 +++ .../_expected/system/main.js | 20 +++++ .../_expected/system/named.js | 10 +++ .../default.js | 1 + .../main.js | 8 ++ .../named.js | 1 + .../_config.js | 8 ++ .../_expected/amd/main.js | 10 +++ .../_expected/amd/module-a/v1/index.js | 9 +++ .../_expected/amd/module-b/v1/index.js | 9 +++ .../_expected/cjs/main.js | 11 +++ .../_expected/cjs/module-a/v1/index.js | 7 ++ .../_expected/cjs/module-b/v1/index.js | 7 ++ .../_expected/es/main.js | 4 + .../_expected/es/module-a/v1/index.js | 3 + .../_expected/es/module-b/v1/index.js | 3 + .../_expected/system/main.js | 15 ++++ .../_expected/system/module-a/v1/index.js | 10 +++ .../_expected/system/module-b/v1/index.js | 10 +++ .../main.js | 2 + .../module-a/index.js | 3 + .../module-a/v1/index.js | 1 + .../module-b/index.js | 3 + .../module-b/v1/index.js | 1 + .../preserve-modules-nested-export/_config.js | 8 ++ .../amd/inner/more_inner/something.js | 9 +++ .../_expected/amd/inner/some_effect.js | 5 ++ .../_expected/amd/main.js | 9 +++ .../cjs/inner/more_inner/something.js | 7 ++ .../_expected/cjs/inner/some_effect.js | 3 + .../_expected/cjs/main.js | 10 +++ .../es/inner/more_inner/something.js | 3 + .../_expected/es/inner/some_effect.js | 1 + .../_expected/es/main.js | 2 + .../system/inner/more_inner/something.js | 10 +++ .../_expected/system/inner/some_effect.js | 10 +++ .../_expected/system/main.js | 13 +++ .../inner/index.js | 2 + .../inner/more_inner/index.js | 1 + .../inner/more_inner/something.js | 1 + .../inner/some_effect.js | 1 + .../preserve-modules-nested-export/main.js | 1 + .../_config.js | 8 ++ .../_expected/amd/dep2.js | 7 ++ .../_expected/amd/main.js | 7 ++ .../_expected/cjs/dep2.js | 5 ++ .../_expected/cjs/main.js | 7 ++ .../_expected/es/dep2.js | 3 + .../_expected/es/main.js | 2 + .../_expected/system/dep2.js | 12 +++ .../_expected/system/main.js | 15 ++++ .../dep1.js | 1 + .../dep2.js | 1 + .../main.js | 3 + .../preserve-modules-proxy-import/_config.js | 9 +++ .../_expected/amd/main.js | 8 ++ .../_expected/amd/proxy.js | 9 +++ .../_expected/cjs/main.js | 8 ++ .../_expected/cjs/proxy.js | 9 +++ .../_expected/es/main.js | 4 + .../_expected/es/proxy.js | 2 + .../_expected/system/main.js | 15 ++++ .../_expected/system/proxy.js | 15 ++++ .../preserve-modules-proxy-import/main.js | 5 ++ .../preserve-modules-proxy-import/proxy.js | 2 + .../_config.js | 8 ++ .../_expected/amd/dep.js | 11 +++ .../_expected/amd/lib/main.js | 11 +++ .../_expected/cjs/dep.js | 9 +++ .../_expected/cjs/lib/main.js | 11 +++ .../_expected/es/dep.js | 5 ++ .../_expected/es/lib/main.js | 9 +++ .../_expected/system/dep.js | 14 ++++ .../_expected/system/lib/main.js | 18 +++++ .../src/dep.js | 3 + .../src/lib/main.js | 7 ++ .../_config.js | 27 +++++++ .../_expected/amd/answer.num.js | 7 ++ .../_expected/amd/lorem.str.js | 7 ++ .../_expected/amd/main.js | 11 +++ .../_expected/amd/no-ext.js | 7 ++ .../_expected/cjs/answer.num.js | 5 ++ .../_expected/cjs/lorem.str.js | 5 ++ .../_expected/cjs/main.js | 13 +++ .../_expected/cjs/no-ext.js | 5 ++ .../_expected/es/answer.num.js | 3 + .../_expected/es/lorem.str.js | 3 + .../_expected/es/main.js | 3 + .../_expected/es/no-ext.js | 3 + .../_expected/system/answer.num.js | 10 +++ .../_expected/system/lorem.str.js | 10 +++ .../_expected/system/main.js | 17 ++++ .../_expected/system/no-ext.js | 10 +++ .../src/answer.num | 1 + .../src/lorem.str | 1 + .../src/main.js | 3 + .../src/no-ext | 1 + .../preserve-modules-single-entry/_config.js | 8 ++ .../_expected/amd/main.js | 5 ++ .../_expected/cjs/main.js | 3 + .../_expected/es/main.js | 1 + .../_expected/system/main.js | 10 +++ .../preserve-modules-single-entry/main.js | 1 + .../_config.js | 23 ++++++ .../_expected/amd/_virtual/_virtualModule | 9 +++ .../_expected/amd/main.js | 5 ++ .../_expected/cjs/_virtual/_virtualModule | 7 ++ .../_expected/cjs/main.js | 5 ++ .../_expected/es/_virtual/_virtualModule | 3 + .../_expected/es/main.js | 3 + .../_expected/system/_virtual/_virtualModule | 10 +++ .../_expected/system/main.js | 14 ++++ .../preserve-modules-virtual-modules/main.js | 1 + .../deprecated/preserve-modules/_config.js | 8 ++ .../_expected/amd/deps/dep1.js | 11 +++ .../_expected/amd/deps/dep2.js | 12 +++ .../_expected/amd/deps/dep3.js | 12 +++ .../_expected/amd/lib/lib1.js | 11 +++ .../_expected/amd/lib/lib2.js | 11 +++ .../preserve-modules/_expected/amd/main1.js | 12 +++ .../preserve-modules/_expected/amd/main2.js | 12 +++ .../_expected/cjs/deps/dep1.js | 9 +++ .../_expected/cjs/deps/dep2.js | 12 +++ .../_expected/cjs/deps/dep3.js | 12 +++ .../_expected/cjs/lib/lib1.js | 9 +++ .../_expected/cjs/lib/lib2.js | 9 +++ .../preserve-modules/_expected/cjs/main1.js | 13 +++ .../preserve-modules/_expected/cjs/main2.js | 13 +++ .../_expected/es/deps/dep1.js | 5 ++ .../_expected/es/deps/dep2.js | 8 ++ .../_expected/es/deps/dep3.js | 8 ++ .../preserve-modules/_expected/es/lib/lib1.js | 5 ++ .../preserve-modules/_expected/es/lib/lib2.js | 5 ++ .../preserve-modules/_expected/es/main1.js | 11 +++ .../preserve-modules/_expected/es/main2.js | 11 +++ .../_expected/system/deps/dep1.js | 14 ++++ .../_expected/system/deps/dep2.js | 19 +++++ .../_expected/system/deps/dep3.js | 19 +++++ .../_expected/system/lib/lib1.js | 14 ++++ .../_expected/system/lib/lib2.js | 14 ++++ .../_expected/system/main1.js | 21 +++++ .../_expected/system/main2.js | 21 +++++ .../deprecated/preserve-modules/deps/dep1.js | 3 + .../deprecated/preserve-modules/deps/dep2.js | 6 ++ .../deprecated/preserve-modules/deps/dep3.js | 8 ++ .../deprecated/preserve-modules/lib/lib1.js | 7 ++ .../deprecated/preserve-modules/lib/lib2.js | 3 + .../deprecated/preserve-modules/main1.js | 9 +++ .../deprecated/preserve-modules/main2.js | 13 +++ .../dynamic-import-inlining-object/_config.js | 2 +- .../_config.js | 3 +- .../_config.js | 4 +- .../_config.js | 2 +- .../preserve-modules-commonjs/_config.js | 4 +- .../_config.js | 2 +- .../_config.js | 2 +- .../samples/preserve-modules-empty/_config.js | 2 +- .../preserve-modules-export-alias/_config.js | 2 +- .../_config.js | 6 +- .../_config.js | 2 +- .../_config.js | 4 +- .../_config.js | 2 +- .../preserve-modules-nested-export/_config.js | 2 +- .../_config.js | 2 +- .../preserve-modules-proxy-import/_config.js | 4 +- .../_config.js | 2 +- .../_config.js | 2 +- .../preserve-modules-single-entry/_config.js | 2 +- .../_config.js | 2 +- .../samples/preserve-modules/_config.js | 2 +- .../avoid-imports-preserve-modules/_config.js | 2 +- .../dynamic-import-inlining-array/_config.js | 8 ++ .../_expected.js | 11 +++ .../dynamic-import-inlining-array/foo.js | 1 + .../dynamic-import-inlining-array/main.js | 2 + .../dynamic-import-inlining/_config.js | 7 ++ .../dynamic-import-inlining/_expected.js | 11 +++ .../deprecated/dynamic-import-inlining/foo.js | 1 + .../dynamic-import-inlining/main.js | 2 + .../_config.js | 7 ++ .../_expected/amd.js | 5 ++ .../_expected/cjs.js | 3 + .../_expected/es.js | 1 + .../_expected/iife.js | 6 ++ .../_expected/system.js | 10 +++ .../_expected/umd.js | 8 ++ .../dynamic.js | 2 + .../inlined-treeshaken-dynamic-import/main.js | 2 + .../nested-inlined-dynamic-import/_config.js | 7 ++ .../_expected/amd.js | 18 +++++ .../_expected/cjs.js | 16 ++++ .../_expected/es.js | 14 ++++ .../_expected/iife.js | 19 +++++ .../_expected/system.js | 23 ++++++ .../_expected/umd.js | 21 +++++ .../nested-inlined-dynamic-import/foo.js | 1 + .../nested-inlined-dynamic-import/main.js | 7 ++ .../dynamic-import-inlining-array/_config.js | 2 +- .../dynamic-import-inlining/_config.js | 2 +- .../_config.js | 2 +- .../nested-inlined-dynamic-import/_config.js | 2 +- .../dynamic-import-duplicates/_config.js | 15 ++++ .../dynamic-import-duplicates/foo.js | 1 + .../dynamic-import-duplicates/main.js | 5 ++ .../dynamic-import-inlining/_config.js | 15 ++++ .../deprecated/dynamic-import-inlining/foo.js | 1 + .../dynamic-import-inlining/main.js | 5 ++ .../inline-dynamic-imports-bundle/_config.js | 18 +++++ .../inline-dynamic-imports-bundle/lib.js | 1 + .../inline-dynamic-imports-bundle/main.js | 1 + .../reexporter.js | 1 + .../inline-imports-with-manual/_config.js | 2 +- .../_config.js | 12 +++ .../inline-imports-with-multiple-array/lib.js | 1 + .../main.js | 1 + .../_config.js | 12 +++ .../lib.js | 1 + .../main.js | 1 + .../manual-chunks-preserve-modules/_config.js | 2 +- .../_config.js | 12 +++ .../nested-inlined-dynamic-import-1/foo.js | 1 + .../nested-inlined-dynamic-import-1/main.js | 4 + .../inline-dynamic-imports/_config.js | 14 ++++ .../inline-dynamic-imports/lib.js | 1 + .../inline-dynamic-imports/main.js | 1 + .../invalid-default-export-mode/_config.js | 16 ++++ .../invalid-default-export-mode/lib.js | 1 + .../invalid-default-export-mode/main.js | 3 + .../_config.js | 14 ++++ .../main.js | 1 + .../invalid-none-export-mode/_config.js | 16 ++++ .../invalid-none-export-mode/lib.js | 1 + .../invalid-none-export-mode/main.js | 3 + .../preserveModules/manual-chunks/_config.js | 17 ++++ .../preserveModules/manual-chunks/lib.js | 1 + .../preserveModules/manual-chunks/main.js | 3 + .../preserveModules/mixed-exports/_config.js | 26 ++++++ .../preserveModules/mixed-exports/lib1.js | 2 + .../preserveModules/mixed-exports/lib2.js | 1 + .../preserveModules/mixed-exports/lib3.js | 1 + .../preserveModules/mixed-exports/main.js | 11 +++ .../virtual-modules-conflict/_config.js | 33 ++++++++ .../_virtual/_virtualModule.js | 3 + .../virtual-modules-conflict/main.js | 4 + .../virtual-modules/_config.js | 33 ++++++++ .../virtual-modules/lib/lib.js | 1 + .../preserveModules/virtual-modules/main.js | 3 + .../inlineDynamicImports/_config.js | 11 +++ .../deprecations/inlineDynamicImports/main.js | 1 + .../samples/deprecations/manualChunks/main.js | 12 +-- .../deprecations/preserveModules/_config.js | 11 +++ .../deprecations/preserveModules/main.js | 1 + .../dynamic-import-duplicates/_config.js | 2 +- .../dynamic-import-inlining/_config.js | 2 +- .../inline-dynamic-imports-bundle/_config.js | 2 +- .../inline-imports-with-manual/_config.js | 4 +- .../_config.js | 6 +- .../_config.js | 6 +- .../_config.js | 2 +- test/function/samples/options-hook/_config.js | 2 - .../samples/output-options-hook/_config.js | 2 + .../inline-dynamic-imports/_config.js | 11 ++- .../invalid-default-export-mode/_config.js | 4 +- .../_config.js | 9 ++- .../invalid-none-export-mode/_config.js | 4 +- .../preserve-modules/manual-chunks/_config.js | 6 +- .../preserve-modules/mixed-exports/_config.js | 2 +- .../virtual-modules-conflict/_config.js | 4 +- .../virtual-modules/_config.js | 4 +- test/misc/optionList.js | 2 +- test/misc/sanity-checks.js | 5 +- test/watch/index.js | 2 +- 500 files changed, 3650 insertions(+), 185 deletions(-) create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_config.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/a.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/b.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/one.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/a.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/b.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/one.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/a.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/b.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/one.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/a.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/b.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/one.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/a.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/b.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/c.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/index.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/main.js create mode 100644 test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/one.js create mode 100644 test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_config.js create mode 100644 test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/amd/entry.js create mode 100644 test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/cjs/entry.js create mode 100644 test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/es/entry.js create mode 100644 test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/system/entry.js create mode 100644 test/chunking-form/samples/deprecated/dynamic-import-inlining-object/foo.js create mode 100644 test/chunking-form/samples/deprecated/dynamic-import-inlining-object/main.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_config.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/amd/components/index.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/amd/components/sub/index.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/cjs/components/index.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/cjs/components/sub/index.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/es/components/index.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/es/components/sub/index.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/system/components/index.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/system/components/sub/index.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/components/index.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/components/sub/index.js create mode 100644 test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/main.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_config.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/amd/dep1.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/amd/dep2.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/cjs/dep1.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/cjs/dep2.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/es/dep1.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/es/dep2.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/system/dep1.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/system/dep2.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/dep1.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/dep2.js create mode 100644 test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/amd/default.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/amd/named.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/cjs/default.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/cjs/named.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/default.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/named.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/system/default.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/system/named.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/default.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/named.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/_virtual/_external_commonjs-external create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/_virtual/other.js_commonjs-proxy create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/commonjs.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/other.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/_virtual/_external_commonjs-external create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/_virtual/other.js_commonjs-proxy create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/commonjs.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/other.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/_virtual/_external_commonjs-external create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/_virtual/other.js_commonjs-proxy create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/commonjs.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/other.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/_virtual/_external_commonjs-external create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/_virtual/other.js_commonjs-proxy create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/commonjs.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/other.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/commonjs.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-commonjs/other.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/amd/dynamic-included.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/cjs/dynamic-included.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/es/dynamic-included.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/system/dynamic-included.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/dynamic-included.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/dynamic-removed.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/m1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/m2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/m3.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/m1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/m2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/m3.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/m1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/m2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/m3.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/m1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/m2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/m3.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/m1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/m2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/m3.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-empty/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/amd/two.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/cjs/two.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/es/two.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/system/two.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-empty/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-empty/one.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-empty/three.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-empty/two.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/amd/dep.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/amd/main1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/amd/main2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/cjs/dep.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/cjs/main1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/cjs/main2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/es/dep.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/es/main1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/es/main2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/dep.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/main1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/main2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/dep.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/main1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-export-alias/main2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/entry-foo-amd-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/entry-main-amd-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/entry-no-ext-amd-.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/nested/entry-bar-amd-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/nested/entry-baz-amd-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/entry-foo-cjs-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/entry-main-cjs-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/entry-no-ext-cjs-.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/nested/entry-bar-cjs-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/nested/entry-baz-cjs-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/entry-foo-es-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/entry-main-es-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/entry-no-ext-es-.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/nested/entry-bar-es-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/nested/entry-baz-es-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/entry-foo-system-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/entry-main-system-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/entry-no-ext-system-.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/nested/entry-bar-system-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/nested/entry-baz-system-ts.ts.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/foo.ts create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/main.ts create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/nested/bar.ts create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/nested/baz.ts create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/no-ext create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/_virtual/_One1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/_virtual/_One2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/_virtual/_one.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/_virtual/_One1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/_virtual/_One2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/_virtual/_one.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/_virtual/_One1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/_virtual/_One2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/_virtual/_one.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/_virtual/_One1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/_virtual/_One2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/_virtual/_one.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/amd/default.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/amd/named.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/cjs/default.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/cjs/named.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/default.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/named.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/system/default.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/system/named.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/default.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/named.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/amd/module-a/v1/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/amd/module-b/v1/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/cjs/module-a/v1/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/cjs/module-b/v1/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/es/module-a/v1/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/es/module-b/v1/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/system/module-a/v1/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/system/module-b/v1/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-a/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-a/v1/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-b/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-b/v1/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/amd/inner/more_inner/something.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/amd/inner/some_effect.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/cjs/inner/more_inner/something.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/cjs/inner/some_effect.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/es/inner/more_inner/something.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/es/inner/some_effect.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/system/inner/more_inner/something.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/system/inner/some_effect.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/more_inner/index.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/more_inner/something.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/some_effect.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-nested-export/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/amd/dep2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/cjs/dep2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/es/dep2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/system/dep2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/dep1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/dep2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/amd/proxy.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/cjs/proxy.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/es/proxy.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/system/proxy.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-proxy-import/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-proxy-import/proxy.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/amd/dep.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/amd/lib/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/cjs/dep.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/cjs/lib/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/es/dep.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/es/lib/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/system/dep.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/system/lib/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/src/dep.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/src/lib/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/answer.num.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/lorem.str.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/no-ext.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/answer.num.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/lorem.str.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/no-ext.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/answer.num.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/lorem.str.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/no-ext.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/answer.num.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/lorem.str.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/no-ext.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/answer.num create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/lorem.str create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/no-ext create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-single-entry/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-single-entry/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/amd/_virtual/_virtualModule create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/amd/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/cjs/_virtual/_virtualModule create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/es/_virtual/_virtualModule create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/es/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/system/_virtual/_virtualModule create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/system/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/main.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_config.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/deps/dep1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/deps/dep2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/deps/dep3.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/lib/lib1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/lib/lib2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/main1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/main2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/deps/dep1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/deps/dep2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/deps/dep3.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/lib/lib1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/lib/lib2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/main1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/main2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/es/deps/dep1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/es/deps/dep2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/es/deps/dep3.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/es/lib/lib1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/es/lib/lib2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/es/main1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/es/main2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/system/deps/dep1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/system/deps/dep2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/system/deps/dep3.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/system/lib/lib1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/system/lib/lib2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/system/main1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/_expected/system/main2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/deps/dep1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/deps/dep2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/deps/dep3.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/lib/lib1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/lib/lib2.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/main1.js create mode 100644 test/chunking-form/samples/deprecated/preserve-modules/main2.js create mode 100644 test/form/samples/deprecated/dynamic-import-inlining-array/_config.js create mode 100644 test/form/samples/deprecated/dynamic-import-inlining-array/_expected.js create mode 100644 test/form/samples/deprecated/dynamic-import-inlining-array/foo.js create mode 100644 test/form/samples/deprecated/dynamic-import-inlining-array/main.js create mode 100644 test/form/samples/deprecated/dynamic-import-inlining/_config.js create mode 100644 test/form/samples/deprecated/dynamic-import-inlining/_expected.js create mode 100644 test/form/samples/deprecated/dynamic-import-inlining/foo.js create mode 100644 test/form/samples/deprecated/dynamic-import-inlining/main.js create mode 100644 test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_config.js create mode 100644 test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/amd.js create mode 100644 test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/cjs.js create mode 100644 test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/es.js create mode 100644 test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/iife.js create mode 100644 test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/system.js create mode 100644 test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/umd.js create mode 100644 test/form/samples/deprecated/inlined-treeshaken-dynamic-import/dynamic.js create mode 100644 test/form/samples/deprecated/inlined-treeshaken-dynamic-import/main.js create mode 100644 test/form/samples/deprecated/nested-inlined-dynamic-import/_config.js create mode 100644 test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/amd.js create mode 100644 test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/cjs.js create mode 100644 test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/es.js create mode 100644 test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/iife.js create mode 100644 test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/system.js create mode 100644 test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/umd.js create mode 100644 test/form/samples/deprecated/nested-inlined-dynamic-import/foo.js create mode 100644 test/form/samples/deprecated/nested-inlined-dynamic-import/main.js create mode 100644 test/function/samples/deprecated/dynamic-import-duplicates/_config.js create mode 100644 test/function/samples/deprecated/dynamic-import-duplicates/foo.js create mode 100644 test/function/samples/deprecated/dynamic-import-duplicates/main.js create mode 100644 test/function/samples/deprecated/dynamic-import-inlining/_config.js create mode 100644 test/function/samples/deprecated/dynamic-import-inlining/foo.js create mode 100644 test/function/samples/deprecated/dynamic-import-inlining/main.js create mode 100644 test/function/samples/deprecated/inline-dynamic-imports-bundle/_config.js create mode 100644 test/function/samples/deprecated/inline-dynamic-imports-bundle/lib.js create mode 100644 test/function/samples/deprecated/inline-dynamic-imports-bundle/main.js create mode 100644 test/function/samples/deprecated/inline-dynamic-imports-bundle/reexporter.js create mode 100644 test/function/samples/deprecated/inline-imports-with-multiple-array/_config.js create mode 100644 test/function/samples/deprecated/inline-imports-with-multiple-array/lib.js create mode 100644 test/function/samples/deprecated/inline-imports-with-multiple-array/main.js create mode 100644 test/function/samples/deprecated/inline-imports-with-multiple-object/_config.js create mode 100644 test/function/samples/deprecated/inline-imports-with-multiple-object/lib.js create mode 100644 test/function/samples/deprecated/inline-imports-with-multiple-object/main.js create mode 100644 test/function/samples/deprecated/nested-inlined-dynamic-import-1/_config.js create mode 100644 test/function/samples/deprecated/nested-inlined-dynamic-import-1/foo.js create mode 100644 test/function/samples/deprecated/nested-inlined-dynamic-import-1/main.js create mode 100644 test/function/samples/deprecated/preserveModules/inline-dynamic-imports/_config.js create mode 100644 test/function/samples/deprecated/preserveModules/inline-dynamic-imports/lib.js create mode 100644 test/function/samples/deprecated/preserveModules/inline-dynamic-imports/main.js create mode 100644 test/function/samples/deprecated/preserveModules/invalid-default-export-mode/_config.js create mode 100644 test/function/samples/deprecated/preserveModules/invalid-default-export-mode/lib.js create mode 100644 test/function/samples/deprecated/preserveModules/invalid-default-export-mode/main.js create mode 100644 test/function/samples/deprecated/preserveModules/invalid-no-preserve-entry-signatures/_config.js create mode 100644 test/function/samples/deprecated/preserveModules/invalid-no-preserve-entry-signatures/main.js create mode 100644 test/function/samples/deprecated/preserveModules/invalid-none-export-mode/_config.js create mode 100644 test/function/samples/deprecated/preserveModules/invalid-none-export-mode/lib.js create mode 100644 test/function/samples/deprecated/preserveModules/invalid-none-export-mode/main.js create mode 100644 test/function/samples/deprecated/preserveModules/manual-chunks/_config.js create mode 100644 test/function/samples/deprecated/preserveModules/manual-chunks/lib.js create mode 100644 test/function/samples/deprecated/preserveModules/manual-chunks/main.js create mode 100644 test/function/samples/deprecated/preserveModules/mixed-exports/_config.js create mode 100644 test/function/samples/deprecated/preserveModules/mixed-exports/lib1.js create mode 100644 test/function/samples/deprecated/preserveModules/mixed-exports/lib2.js create mode 100644 test/function/samples/deprecated/preserveModules/mixed-exports/lib3.js create mode 100644 test/function/samples/deprecated/preserveModules/mixed-exports/main.js create mode 100644 test/function/samples/deprecated/preserveModules/virtual-modules-conflict/_config.js create mode 100644 test/function/samples/deprecated/preserveModules/virtual-modules-conflict/_virtual/_virtualModule.js create mode 100644 test/function/samples/deprecated/preserveModules/virtual-modules-conflict/main.js create mode 100644 test/function/samples/deprecated/preserveModules/virtual-modules/_config.js create mode 100644 test/function/samples/deprecated/preserveModules/virtual-modules/lib/lib.js create mode 100644 test/function/samples/deprecated/preserveModules/virtual-modules/main.js create mode 100644 test/function/samples/deprecations/inlineDynamicImports/_config.js create mode 100644 test/function/samples/deprecations/inlineDynamicImports/main.js create mode 100644 test/function/samples/deprecations/preserveModules/_config.js create mode 100644 test/function/samples/deprecations/preserveModules/main.js diff --git a/.lintstagedrc b/.lintstagedrc index a7b8a40dd73..c2078e45c9a 100644 --- a/.lintstagedrc +++ b/.lintstagedrc @@ -3,7 +3,7 @@ "prettier --write", "tslint --project . --fix" ], - "test/**/*.ts": [ + "test/typescript/**/*.ts": [ "prettier --write", "tslint --project test/typescript --fix" ], diff --git a/src/Bundle.ts b/src/Bundle.ts index 73be41855f1..9578f303698 100644 --- a/src/Bundle.ts +++ b/src/Bundle.ts @@ -53,7 +53,7 @@ export default class Bundle { } const addons = await createAddons(this.outputOptions, this.pluginDriver); for (const chunk of chunks) { - chunk.generateExports(this.outputOptions); + chunk.generateExports(); } const inputBase = commondir(getAbsoluteEntryModulePaths(chunks)); for (const chunk of chunks) { @@ -139,7 +139,7 @@ export default class Bundle { for (const chunk of chunksForNaming) { if (this.outputOptions.file) { chunk.id = basename(this.outputOptions.file); - } else if (this.inputOptions.preserveModules) { + } else if (this.outputOptions.preserveModules) { chunk.id = chunk.generateIdPreserveModules( inputBase, this.outputOptions, @@ -178,9 +178,9 @@ export default class Bundle { : this.assignManualChunks(manualChunks); const chunks: Chunk[] = []; const chunkByModule = new Map(); - for (const { alias, modules } of this.inputOptions.inlineDynamicImports + for (const { alias, modules } of this.outputOptions.inlineDynamicImports ? [{ alias: null, modules: getIncludedModules(this.graph.modulesById) }] - : this.inputOptions.preserveModules + : this.outputOptions.preserveModules ? getIncludedModules(this.graph.modulesById).map(module => ({ alias: null, modules: [module] @@ -190,6 +190,7 @@ export default class Bundle { const chunk = new Chunk( modules, this.inputOptions, + this.outputOptions, this.unsetOptions, this.graph.modulesById, chunkByModule, diff --git a/src/Chunk.ts b/src/Chunk.ts index 8361b2510f9..bf621090a40 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -116,6 +116,7 @@ function getGlobalName( export default class Chunk { private static generateFacade( inputOptions: NormalizedInputOptions, + outputOptions: NormalizedOutputOptions, unsetOptions: Set, modulesById: Map, chunkByModule: Map, @@ -126,6 +127,7 @@ export default class Chunk { const chunk = new Chunk( [], inputOptions, + outputOptions, unsetOptions, modulesById, chunkByModule, @@ -193,6 +195,7 @@ export default class Chunk { constructor( private readonly orderedModules: Module[], private readonly inputOptions: NormalizedInputOptions, + private readonly outputOptions: NormalizedOutputOptions, private readonly unsetOptions: Set, private readonly modulesById: Map, private readonly chunkByModule: Map, @@ -206,7 +209,7 @@ export default class Chunk { if (this.isEmpty && module.isIncluded()) { this.isEmpty = false; } - if (module.isEntryPoint || inputOptions.preserveModules) { + if (module.isEntryPoint || outputOptions.preserveModules) { this.entryModules.push(module); } for (const importer of module.includedDynamicImporters) { @@ -253,7 +256,7 @@ export default class Chunk { return true; } - generateExports(options: NormalizedOutputOptions) { + generateExports() { this.sortedExportNames = null; this.exportsByName = Object.create(null); this.exportNamesByVariable = new Map(); @@ -271,7 +274,7 @@ export default class Chunk { remainingExports.delete(variable); } } - if (options.minifyInternalExports) { + if (this.outputOptions.minifyInternalExports) { assignExportsToMangledNames( remainingExports, this.exportsByName!, @@ -280,10 +283,10 @@ export default class Chunk { } else { assignExportsToNames(remainingExports, this.exportsByName!, this.exportNamesByVariable); } - if (this.inputOptions.preserveModules || (this.facadeModule && this.facadeModule.isEntryPoint)) + if (this.outputOptions.preserveModules || (this.facadeModule && this.facadeModule.isEntryPoint)) this.exportMode = getExportMode( this, - options, + this.outputOptions, this.facadeModule!.id, this.inputOptions.onwarn ); @@ -315,7 +318,7 @@ export default class Chunk { } if ( !this.facadeModule && - (this.inputOptions.preserveModules || + (this.outputOptions.preserveModules || module.preserveSignature !== 'strict' || this.canModuleBeFacade(module, exposedVariables)) ) { @@ -332,6 +335,7 @@ export default class Chunk { facades.push( Chunk.generateFacade( this.inputOptions, + this.outputOptions, this.unsetOptions, this.modulesById, this.chunkByModule, @@ -488,7 +492,7 @@ export default class Chunk { } getVariableExportName(variable: Variable): string { - if (this.inputOptions.preserveModules && variable instanceof NamespaceVariable) { + if (this.outputOptions.preserveModules && variable instanceof NamespaceVariable) { return '*'; } return this.exportNamesByVariable!.get(variable)![0]; @@ -527,7 +531,7 @@ export default class Chunk { // for static and dynamic entry points, inline the execution list to avoid loading latency if ( options.hoistTransitiveImports && - !this.inputOptions.preserveModules && + !this.outputOptions.preserveModules && this.facadeModule !== null ) { for (const dep of this.dependencies) { @@ -556,7 +560,7 @@ export default class Chunk { this.usedModules.push(module); } const namespace = module.namespace; - if (namespace.included && !this.inputOptions.preserveModules) { + if (namespace.included && !this.outputOptions.preserveModules) { const rendered = namespace.renderBlock(renderOptions); if (namespace.renderFirst()) hoistedSource += n + rendered; else magicString.addSource(new MagicString(rendered)); @@ -676,7 +680,7 @@ export default class Chunk { indentString: this.indentString, intro: addons.intro!, isEntryModuleFacade: - this.inputOptions.preserveModules || + this.outputOptions.preserveModules || (this.facadeModule !== null && this.facadeModule.isEntryPoint), namedExportsMode: this.exportMode !== 'default', outro: addons.outro!, @@ -803,7 +807,7 @@ export default class Chunk { const importedVariable = isSynthetic ? (exportedVariable as SyntheticNamedExportVariable).getBaseVariable() : exportedVariable; - if (!(importedVariable instanceof NamespaceVariable && this.inputOptions.preserveModules)) { + if (!(importedVariable instanceof NamespaceVariable && this.outputOptions.preserveModules)) { const exportingModule = importedVariable.module; if (exportingModule instanceof Module) { const chunk = this.chunkByModule.get(exportingModule); @@ -1115,7 +1119,7 @@ export default class Chunk { usedNames, options.format as string, options.interop, - this.inputOptions.preserveModules, + this.outputOptions.preserveModules, this.chunkByModule, syntheticExports, this.exportNamesByVariable! @@ -1123,7 +1127,19 @@ export default class Chunk { } private setUpChunkImportsAndExportsForModule(module: Module) { - for (let variable of module.imports) { + const moduleImports = new Set(module.imports); + // when we are not preserving modules, we need to make all namespace variables available for + // rendering the namespace object + if (!this.outputOptions.preserveModules) { + const namespace = module.namespace; + if (namespace.included) { + const memberVariables = namespace.getMemberVariables(); + for (const name of Object.keys(memberVariables)) { + moduleImports.add(memberVariables[name]); + } + } + } + for (let variable of moduleImports) { if (variable instanceof ExportDefaultVariable) { variable = variable.getOriginalVariable(); } @@ -1135,7 +1151,7 @@ export default class Chunk { if (chunk !== this) { this.imports.add(variable); if ( - !(variable instanceof NamespaceVariable && this.inputOptions.preserveModules) && + !(variable instanceof NamespaceVariable && this.outputOptions.preserveModules) && variable.module instanceof Module ) { chunk!.exports.add(variable); @@ -1144,9 +1160,9 @@ export default class Chunk { } } if ( + module.namespace.included || (module.isEntryPoint && module.preserveSignature !== false) || - module.includedDynamicImporters.some(importer => this.chunkByModule.get(importer) !== this) || - module.namespace.included + module.includedDynamicImporters.some(importer => this.chunkByModule.get(importer) !== this) ) { this.ensureReexportsAreAvailableForModule(module); } diff --git a/src/Module.ts b/src/Module.ts index 581ad460b06..7065fa31aff 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -332,11 +332,7 @@ export default class Module { const additionalSideEffectModules = new Set(); const possibleDependencies = new Set(this.dependencies); let dependencyVariables = this.imports; - if ( - this.isEntryPoint || - this.includedDynamicImporters.length > 0 || - this.options.preserveModules - ) { + if (this.isEntryPoint || this.includedDynamicImporters.length > 0 || this.namespace.included) { dependencyVariables = new Set(dependencyVariables); for (const exportName of [...this.getReexports(), ...this.getExports()]) { dependencyVariables.add(this.getVariableForExportName(exportName)); diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts index 5a73490f624..e9407e0ee1a 100644 --- a/src/ModuleLoader.ts +++ b/src/ModuleLoader.ts @@ -303,6 +303,7 @@ export class ModuleLoader { this.modulesById.set(id, module); this.graph.watchFiles[id] = true; await this.addModuleSource(id, importer, module); + // TODO Lukas maybe get dependencies from here so that we do not fiddle with sources? await this.fetchAllDependencies(module); for (const name in module.exports) { @@ -322,6 +323,7 @@ export class ModuleLoader { } } } + // TODO Lukas can this be merged with the previous and simplified, remove some properties etc.? module.linkDependencies(); return module; } diff --git a/src/ast/variables/NamespaceVariable.ts b/src/ast/variables/NamespaceVariable.ts index 0fc96b33f54..365b020ee5e 100644 --- a/src/ast/variables/NamespaceVariable.ts +++ b/src/ast/variables/NamespaceVariable.ts @@ -35,15 +35,28 @@ export default class NamespaceVariable extends Variable { // need to reassign all exports. deoptimizePath() { const memberVariables = this.getMemberVariables(); - for (const key in memberVariables) { + for (const key of Object.keys(memberVariables)) { memberVariables[key].deoptimizePath(UNKNOWN_PATH); } } + getMemberVariables(): { [name: string]: Variable } { + if (this.memberVariables) { + return this.memberVariables; + } + const memberVariables = Object.create(null); + for (const name of this.context.getExports().concat(this.context.getReexports())) { + if (name[0] !== '*') { + memberVariables[name] = this.context.traceExport(name); + } + } + this.memberVariables = memberVariables; + return (this.memberVariables = memberVariables); + } + include() { if (!this.included) { this.included = true; - const memberVariables = this.getMemberVariables(); for (const identifier of this.references) { if (identifier.context.getModuleExecIndex() <= this.context.getModuleExecIndex()) { this.referencedEarly = true; @@ -51,12 +64,10 @@ export default class NamespaceVariable extends Variable { } } this.mergedNamespaces = this.context.includeAndGetAdditionalMergedNamespaces(); - if (this.context.options.preserveModules) { - for (const memberName in memberVariables) memberVariables[memberName].include(); - } else { - for (const memberName in memberVariables) - this.context.includeVariable(memberVariables[memberName]); - } + const memberVariables = this.getMemberVariables(); + // We directly include the variables instead of context.include to not automatically + // generate imports for members from other modules + for (const memberName of Object.keys(memberVariables)) memberVariables[memberName].include(); } } @@ -118,20 +129,6 @@ export default class NamespaceVariable extends Variable { renderFirst() { return this.referencedEarly; } - - private getMemberVariables(): { [name: string]: Variable } { - if (this.memberVariables) { - return this.memberVariables; - } - const memberVariables = Object.create(null); - for (const name of this.context.getExports().concat(this.context.getReexports())) { - if (name[0] !== '*') { - memberVariables[name] = this.context.traceExport(name); - } - } - this.memberVariables = memberVariables; - return (this.memberVariables = memberVariables); - } } NamespaceVariable.prototype.isNamespace = true; diff --git a/src/rollup/types.d.ts b/src/rollup/types.d.ts index ea3fa299059..f01ae76dc48 100644 --- a/src/rollup/types.d.ts +++ b/src/rollup/types.d.ts @@ -490,6 +490,7 @@ export interface InputOptions { context?: string; experimentalCacheExpiry?: number; external?: ExternalOption; + /** @deprecated Use the "inlineDynamicImports" output option instead. */ inlineDynamicImports?: boolean; input?: InputOption; /** @deprecated Use the "manualChunks" output option instead. */ @@ -499,6 +500,7 @@ export interface InputOptions { perf?: boolean; plugins?: Plugin[]; preserveEntrySignatures?: PreserveEntrySignaturesOption; + /** @deprecated Use the "preserveModules" output option instead. */ preserveModules?: boolean; preserveSymlinks?: boolean; shimMissingExports?: boolean; @@ -514,7 +516,8 @@ export interface NormalizedInputOptions { context: string; experimentalCacheExpiry: number; external: IsExternal; - inlineDynamicImports: boolean; + /** @deprecated Use the "inlineDynamicImports" output option instead. */ + inlineDynamicImports: boolean | undefined; input: string[] | { [entryAlias: string]: string }; /** @deprecated Use the "manualChunks" output option instead. */ manualChunks: ManualChunksOption | undefined; @@ -523,7 +526,8 @@ export interface NormalizedInputOptions { perf: boolean; plugins: Plugin[]; preserveEntrySignatures: PreserveEntrySignaturesOption; - preserveModules: boolean; + /** @deprecated Use the "preserveModules" output option instead. */ + preserveModules: boolean | undefined; preserveSymlinks: boolean; shimMissingExports: boolean; strictDeprecations: boolean; @@ -562,6 +566,7 @@ export interface OutputOptions { globals?: GlobalsOption; hoistTransitiveImports?: boolean; indent?: string | boolean; + inlineDynamicImports?: boolean; interop?: boolean; intro?: string | (() => string | Promise); manualChunks?: ManualChunksOption; @@ -573,6 +578,7 @@ export interface OutputOptions { paths?: OptionsPaths; plugins?: OutputPlugin[]; preferConst?: boolean; + preserveModules?: boolean; sourcemap?: boolean | 'inline' | 'hidden'; sourcemapExcludeSources?: boolean; sourcemapFile?: string; @@ -605,6 +611,7 @@ export interface NormalizedOutputOptions { globals: GlobalsOption; hoistTransitiveImports: boolean; indent: true | string; + inlineDynamicImports: boolean; interop: boolean; intro: () => string | Promise; manualChunks: ManualChunksOption; @@ -616,6 +623,7 @@ export interface NormalizedOutputOptions { paths: OptionsPaths; plugins: OutputPlugin[]; preferConst: boolean; + preserveModules: boolean; sourcemap: boolean | 'inline' | 'hidden'; sourcemapExcludeSources: boolean; sourcemapFile: string | undefined; diff --git a/src/utils/options/mergeOptions.ts b/src/utils/options/mergeOptions.ts index 0d502366680..2453b088ff0 100644 --- a/src/utils/options/mergeOptions.ts +++ b/src/utils/options/mergeOptions.ts @@ -207,6 +207,7 @@ function mergeOutputOptions( globals: getOption('globals'), hoistTransitiveImports: getOption('hoistTransitiveImports'), indent: getOption('indent'), + inlineDynamicImports: getOption('inlineDynamicImports'), interop: getOption('interop'), intro: getOption('intro'), manualChunks: getOption('manualChunks'), @@ -218,6 +219,7 @@ function mergeOutputOptions( paths: getOption('paths'), plugins: ensureArray(config.plugins) as Plugin[], preferConst: getOption('preferConst'), + preserveModules: getOption('preserveModules'), sourcemap: getOption('sourcemap'), sourcemapExcludeSources: getOption('sourcemapExcludeSources'), sourcemapFile: getOption('sourcemapFile'), diff --git a/src/utils/options/normalizeInputOptions.ts b/src/utils/options/normalizeInputOptions.ts index 27ed758efcb..7360ef08553 100644 --- a/src/utils/options/normalizeInputOptions.ts +++ b/src/utils/options/normalizeInputOptions.ts @@ -18,7 +18,7 @@ import { WarningHandlerWithDefault } from '../../rollup/types'; import { ensureArray } from '../ensureArray'; -import { errInvalidOption, error, warnDeprecationWithOptions } from '../error'; +import { errInvalidOption, warnDeprecationWithOptions } from '../error'; import { resolve } from '../path'; import relativeId from '../relativeId'; import { defaultOnWarn, GenericConfigObject, warnUnknownOptions } from './options'; @@ -37,9 +37,7 @@ export function normalizeInputOptions( const unsetOptions = new Set(); const context = (config.context as string | undefined) ?? 'undefined'; - const inlineDynamicImports = (config.inlineDynamicImports as boolean | undefined) || false; const onwarn = getOnwarn(config); - const preserveModules = getPreserveModules(config, inlineDynamicImports); const strictDeprecations = (config.strictDeprecations as boolean | undefined) || false; const options: NormalizedInputOptions & InputOptions = { acorn: getAcorn(config), @@ -48,15 +46,15 @@ export function normalizeInputOptions( context, experimentalCacheExpiry: (config.experimentalCacheExpiry as number | undefined) ?? 10, external: getIdMatcher(config.external as ExternalOption), - inlineDynamicImports, - input: getInput(config, inlineDynamicImports), + inlineDynamicImports: getInlineDynamicImports(config, onwarn, strictDeprecations), + input: getInput(config), manualChunks: getManualChunks(config, onwarn, strictDeprecations), moduleContext: getModuleContext(config, context), onwarn, perf: (config.perf as boolean | undefined) || false, plugins: ensureArray(config.plugins) as Plugin[], - preserveEntrySignatures: getPreserveEntrySignatures(config, unsetOptions, preserveModules), - preserveModules, + preserveEntrySignatures: getPreserveEntrySignatures(config, unsetOptions), + preserveModules: getPreserveModules(config, onwarn, strictDeprecations), preserveSymlinks: (config.preserveSymlinks as boolean | undefined) || false, shimMissingExports: (config.shimMissingExports as boolean | undefined) || false, strictDeprecations, @@ -91,20 +89,6 @@ const getOnwarn = (config: GenericConfigObject): WarningHandler => { : defaultOnWarn; }; -const getPreserveModules = ( - config: GenericConfigObject, - inlineDynamicImports: boolean -): boolean => { - const preserveModules = (config.preserveModules as boolean | undefined) || false; - if (preserveModules && inlineDynamicImports) { - return error({ - code: 'INVALID_OPTION', - message: `"preserveModules" does not support the "inlineDynamicImports" option.` - }); - } - return preserveModules; -}; - const getAcorn = (config: GenericConfigObject): acorn.Options => ({ allowAwaitOutsideFunction: true, ecmaVersion: 2020, @@ -157,20 +141,26 @@ const getIdMatcher = >( return () => false; }; -const getInput = ( +const getInlineDynamicImports = ( config: GenericConfigObject, - inlineDynamicImports: boolean -): string[] | { [entryAlias: string]: string } => { - const configInput = config.input as InputOption | undefined; - const input = - configInput == null ? [] : typeof configInput === 'string' ? [configInput] : configInput; - if (inlineDynamicImports && (Array.isArray(input) ? input : Object.keys(input)).length > 1) { - return error({ - code: 'INVALID_OPTION', - message: 'Multiple inputs are not supported for "inlineDynamicImports".' - }); + warn: WarningHandler, + strictDeprecations: boolean +): boolean | undefined => { + const configInlineDynamicImports = config.inlineDynamicImports as boolean | undefined; + if (configInlineDynamicImports) { + warnDeprecationWithOptions( + 'The "inlineDynamicImports" option is deprecated. Use the "output.inlineDynamicImports" option instead.', + false, + warn, + strictDeprecations + ); } - return input; + return configInlineDynamicImports; +}; + +const getInput = (config: GenericConfigObject): string[] | { [entryAlias: string]: string } => { + const configInput = config.input as InputOption | undefined; + return configInput == null ? [] : typeof configInput === 'string' ? [configInput] : configInput; }; const getManualChunks = ( @@ -213,23 +203,34 @@ const getModuleContext = ( const getPreserveEntrySignatures = ( config: GenericConfigObject, - unsetOptions: Set, - preserveModules: boolean + unsetOptions: Set ): PreserveEntrySignaturesOption => { const configPreserveEntrySignatures = config.preserveEntrySignatures as | PreserveEntrySignaturesOption | undefined; if (configPreserveEntrySignatures == null) { unsetOptions.add('preserveEntrySignatures'); - } else if (configPreserveEntrySignatures === false && preserveModules) { - return error({ - code: 'INVALID_OPTION', - message: '"preserveModules" does not support setting "preserveEntrySignatures" to "false".' - }); } return configPreserveEntrySignatures ?? 'strict'; }; +const getPreserveModules = ( + config: GenericConfigObject, + warn: WarningHandler, + strictDeprecations: boolean +): boolean | undefined => { + const configPreserveModules = config.preserveModules as boolean | undefined; + if (configPreserveModules) { + warnDeprecationWithOptions( + 'The "preserveModules" option is deprecated. Use the "output.preserveModules" option instead.', + false, + warn, + strictDeprecations + ); + } + return configPreserveModules; +}; + const getTreeshake = ( config: GenericConfigObject, warn: WarningHandler, diff --git a/src/utils/options/normalizeOutputOptions.ts b/src/utils/options/normalizeOutputOptions.ts index e0267995b19..515668ed7aa 100644 --- a/src/utils/options/normalizeOutputOptions.ts +++ b/src/utils/options/normalizeOutputOptions.ts @@ -23,8 +23,11 @@ export function normalizeOutputOptions( const unsetOptions = new Set(unsetInputOptions); const compact = (config.compact as boolean | undefined) || false; - const file = getFile(config, inputOptions); const format = getFormat(config); + const inlineDynamicImports = getInlineDynamicImports(config, inputOptions); + const preserveModules = getPreserveModules(config, inlineDynamicImports, inputOptions); + const file = getFile(config, preserveModules, inputOptions); + const outputOptions: NormalizedOutputOptions & OutputOptions = { amd: getAmd(config), assetFileNames: @@ -46,9 +49,10 @@ export function normalizeOutputOptions( globals: (config.globals as GlobalsOption | undefined) || {}, hoistTransitiveImports: (config.hoistTransitiveImports as boolean | undefined) ?? true, indent: getIndent(config, compact), + inlineDynamicImports, interop: (config.interop as boolean | undefined) ?? true, intro: getAddon(config, 'intro'), - manualChunks: getManualChunks(config, inputOptions), + manualChunks: getManualChunks(config, inlineDynamicImports, preserveModules, inputOptions), minifyInternalExports: getMinifyInternalExports(config, format, compact), name: config.name as string | undefined, namespaceToStringTag: (config.namespaceToStringTag as boolean | undefined) || false, @@ -57,6 +61,7 @@ export function normalizeOutputOptions( paths: (config.paths as OptionsPaths | undefined) || {}, plugins: ensureArray(config.plugins) as Plugin[], preferConst: (config.preferConst as boolean | undefined) || false, + preserveModules, sourcemap: (config.sourcemap as boolean | 'inline' | 'hidden' | undefined) || false, sourcemapExcludeSources: (config.sourcemapExcludeSources as boolean | undefined) || false, sourcemapFile: config.sourcemapFile as string | undefined, @@ -73,15 +78,16 @@ export function normalizeOutputOptions( const getFile = ( config: GenericConfigObject, + preserveModules: boolean, inputOptions: NormalizedInputOptions ): string | undefined => { const file = config.file as string | undefined; if (typeof file === 'string') { - if (inputOptions.preserveModules) { + if (preserveModules) { return error({ code: 'INVALID_OPTION', message: - 'You must set "output.dir" instead of "output.file" when using the "preserveModules" option.' + 'You must set "output.dir" instead of "output.file" when using the "output.preserveModules" option.' }); } if (!Array.isArray(inputOptions.input)) @@ -119,6 +125,48 @@ const getFormat = (config: GenericConfigObject): InternalModuleFormat => { } }; +const getInlineDynamicImports = ( + config: GenericConfigObject, + inputOptions: NormalizedInputOptions +): boolean => { + const inlineDynamicImports = + ((config.inlineDynamicImports as boolean | undefined) ?? inputOptions.inlineDynamicImports) || + false; + const { input } = inputOptions; + if (inlineDynamicImports && (Array.isArray(input) ? input : Object.keys(input)).length > 1) { + return error({ + code: 'INVALID_OPTION', + message: 'Multiple inputs are not supported for "output.inlineDynamicImports".' + }); + } + return inlineDynamicImports; +}; + +const getPreserveModules = ( + config: GenericConfigObject, + inlineDynamicImports: boolean, + inputOptions: NormalizedInputOptions +): boolean => { + const preserveModules = + ((config.preserveModules as boolean | undefined) ?? inputOptions.preserveModules) || false; + if (preserveModules) { + if (inlineDynamicImports) { + return error({ + code: 'INVALID_OPTION', + message: `The "output.inlineDynamicImports" option is not supported for "output.preserveModules".` + }); + } + if (inputOptions.preserveEntrySignatures === false) { + return error({ + code: 'INVALID_OPTION', + message: + 'Setting "preserveEntrySignatures" to "false" is not supported for "output.preserveModules".' + }); + } + } + return preserveModules; +}; + const getAmd = ( config: GenericConfigObject ): { @@ -193,21 +241,24 @@ const getIndent = (config: GenericConfigObject, compact: boolean): string | true const getManualChunks = ( config: GenericConfigObject, + inlineDynamicImports: boolean, + preserveModules: boolean, inputOptions: NormalizedInputOptions ): ManualChunksOption => { const configManualChunks = (config.manualChunks as ManualChunksOption | undefined) || inputOptions.manualChunks; if (configManualChunks) { - if (inputOptions.inlineDynamicImports) { + if (inlineDynamicImports) { return error({ code: 'INVALID_OPTION', - message: '"manualChunks" option is not supported for "inlineDynamicImports".' + message: + 'The "output.manualChunks" option is not supported for "output.inlineDynamicImports".' }); } - if (inputOptions.preserveModules) { + if (preserveModules) { return error({ code: 'INVALID_OPTION', - message: '"preserveModules" does not support the "manualChunks" option.' + message: 'The "output.manualChunks" option is not supported for "output.preserveModules".' }); } } diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_config.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_config.js new file mode 100644 index 00000000000..f1ceddc826f --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: + 'avoids empty imports if they do not have side-effects when preserving modules (#3359)', + options: { + strictDeprecations: false, + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/a.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/a.js new file mode 100644 index 00000000000..a0ee4d5c962 --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/a.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + const a = 1; + + exports.a = a; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/b.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/b.js new file mode 100644 index 00000000000..71d3b650e8d --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/b.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + const b = 2; + + exports.b = b; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/main.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/main.js new file mode 100644 index 00000000000..854a7e8dca1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(['./a', './one'], function (a, one) { 'use strict'; + + console.log(a.a + one.d); + +}); diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/one.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/one.js new file mode 100644 index 00000000000..2d8ca9bd394 --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/amd/one.js @@ -0,0 +1,9 @@ +define(['exports', './b'], function (exports, b) { 'use strict'; + + const d = b.b + 4; + + exports.d = d; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/a.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/a.js new file mode 100644 index 00000000000..97007408241 --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/a.js @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const a = 1; + +exports.a = a; diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/b.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/b.js new file mode 100644 index 00000000000..3c417e8458a --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/b.js @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const b = 2; + +exports.b = b; diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/main.js new file mode 100644 index 00000000000..c691c0d47e9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/main.js @@ -0,0 +1,6 @@ +'use strict'; + +var a = require('./a.js'); +var one = require('./one.js'); + +console.log(a.a + one.d); diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/one.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/one.js new file mode 100644 index 00000000000..9eea4c87a9f --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/cjs/one.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var b = require('./b.js'); + +const d = b.b + 4; + +exports.d = d; diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/a.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/a.js new file mode 100644 index 00000000000..089815c5bdd --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/a.js @@ -0,0 +1,3 @@ +const a = 1; + +export { a }; diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/b.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/b.js new file mode 100644 index 00000000000..27b49eddabb --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/b.js @@ -0,0 +1,3 @@ +const b = 2; + +export { b }; diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/main.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/main.js new file mode 100644 index 00000000000..ae089cc4dae --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/main.js @@ -0,0 +1,4 @@ +import { a as a$1 } from './a.js'; +import { d } from './one.js'; + +console.log(a$1 + d); diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/one.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/one.js new file mode 100644 index 00000000000..0d36a94fad2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/es/one.js @@ -0,0 +1,5 @@ +import { b as b$1 } from './b.js'; + +const d = b$1 + 4; + +export { d }; diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/a.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/a.js new file mode 100644 index 00000000000..50f0d7760ca --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/a.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const a = exports('a', 1); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/b.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/b.js new file mode 100644 index 00000000000..baa28369184 --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/b.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const b = exports('b', 2); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/main.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/main.js new file mode 100644 index 00000000000..306aa2895cd --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/main.js @@ -0,0 +1,16 @@ +System.register(['./a.js', './one.js'], function () { + 'use strict'; + var a, d; + return { + setters: [function (module) { + a = module.a; + }, function (module) { + d = module.d; + }], + execute: function () { + + console.log(a + d); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/one.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/one.js new file mode 100644 index 00000000000..dac01a3453c --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/_expected/system/one.js @@ -0,0 +1,14 @@ +System.register(['./b.js'], function (exports) { + 'use strict'; + var b; + return { + setters: [function (module) { + b = module.b; + }], + execute: function () { + + const d = exports('d', b + 4); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/a.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/a.js new file mode 100644 index 00000000000..cc798ff50da --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/a.js @@ -0,0 +1 @@ +export const a = 1; diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/b.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/b.js new file mode 100644 index 00000000000..202103085ce --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/b.js @@ -0,0 +1 @@ +export const b = 2; diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/c.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/c.js new file mode 100644 index 00000000000..5f0cabef84f --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/c.js @@ -0,0 +1 @@ +export const c = 3; diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/index.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/index.js new file mode 100644 index 00000000000..c2357812df9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/index.js @@ -0,0 +1,3 @@ +export { a } from './a'; +export { b } from './b'; +export { c } from './c'; diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/main.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/main.js new file mode 100644 index 00000000000..6279273d11d --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/main.js @@ -0,0 +1,3 @@ +import { a } from './index'; +import { d } from './one'; +console.log(a + d); diff --git a/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/one.js b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/one.js new file mode 100644 index 00000000000..8a9f8689a62 --- /dev/null +++ b/test/chunking-form/samples/deprecated/avoid-imports-preserve-modules/one.js @@ -0,0 +1,2 @@ +import { b } from './index'; +export const d = b + 4; diff --git a/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_config.js b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_config.js new file mode 100644 index 00000000000..4ffc9d0f905 --- /dev/null +++ b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'supports an object with a single entry when inlining dynamic imports', + options: { + strictDeprecations: false, + inlineDynamicImports: true, + input: { entry: 'main' } + } +}; diff --git a/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/amd/entry.js b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/amd/entry.js new file mode 100644 index 00000000000..87c533f4a08 --- /dev/null +++ b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/amd/entry.js @@ -0,0 +1,17 @@ +define(['exports'], function (exports) { 'use strict'; + + const bar = 2; + Promise.resolve().then(function () { return foo$1; }); + + const foo = 1; + + var foo$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + foo: foo + }); + + exports.bar = bar; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/cjs/entry.js b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/cjs/entry.js new file mode 100644 index 00000000000..188ad126796 --- /dev/null +++ b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/cjs/entry.js @@ -0,0 +1,15 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const bar = 2; +Promise.resolve().then(function () { return foo$1; }); + +const foo = 1; + +var foo$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + foo: foo +}); + +exports.bar = bar; diff --git a/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/es/entry.js b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/es/entry.js new file mode 100644 index 00000000000..ae434046e6c --- /dev/null +++ b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/es/entry.js @@ -0,0 +1,11 @@ +const bar = 2; +Promise.resolve().then(function () { return foo$1; }); + +const foo = 1; + +var foo$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + foo: foo +}); + +export { bar }; diff --git a/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/system/entry.js b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/system/entry.js new file mode 100644 index 00000000000..0ac064e426c --- /dev/null +++ b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/_expected/system/entry.js @@ -0,0 +1,18 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const bar = exports('bar', 2); + Promise.resolve().then(function () { return foo$1; }); + + const foo = 1; + + var foo$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + foo: foo + }); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/foo.js b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/foo.js new file mode 100644 index 00000000000..6a8018af412 --- /dev/null +++ b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/foo.js @@ -0,0 +1 @@ +export const foo = 1; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/main.js b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/main.js new file mode 100644 index 00000000000..ee3e6a770d6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/dynamic-import-inlining-object/main.js @@ -0,0 +1,2 @@ +export const bar = 2; +import('./foo.js'); diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_config.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_config.js new file mode 100644 index 00000000000..be01fb9f36e --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_config.js @@ -0,0 +1,9 @@ +module.exports = { + description: 'does not drop indirect reexports when preserving modules', + expectedWarnings: ['MIXED_EXPORTS'], + options: { + strictDeprecations: false, + output: { name: 'bundle' }, + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/amd/components/index.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/amd/components/index.js new file mode 100644 index 00000000000..6c3ef478f75 --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/amd/components/index.js @@ -0,0 +1,10 @@ +define(['exports', './sub/index'], function (exports, index) { 'use strict'; + + const baz = { bar: index.default }; + + exports.foo = index.foo; + exports.baz = baz; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/amd/components/sub/index.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/amd/components/sub/index.js new file mode 100644 index 00000000000..812fe417fb5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/amd/components/sub/index.js @@ -0,0 +1,11 @@ +define(['exports'], function (exports) { 'use strict'; + + const foo = 'bar'; + var bar = () => {}; + + exports.default = bar; + exports.foo = foo; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/amd/main.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/amd/main.js new file mode 100644 index 00000000000..42ad50c3101 --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/amd/main.js @@ -0,0 +1,10 @@ +define(['exports', './components/sub/index', './components/index'], function (exports, index, index$1) { 'use strict'; + + + + exports.foo = index.foo; + exports.baz = index$1.baz; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/cjs/components/index.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/cjs/components/index.js new file mode 100644 index 00000000000..46429b712ad --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/cjs/components/index.js @@ -0,0 +1,10 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var index = require('./sub/index.js'); + +const baz = { bar: index.default }; + +exports.foo = index.foo; +exports.baz = baz; diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/cjs/components/sub/index.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/cjs/components/sub/index.js new file mode 100644 index 00000000000..8ffc494cbe4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/cjs/components/sub/index.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const foo = 'bar'; +var bar = () => {}; + +exports.default = bar; +exports.foo = foo; diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/cjs/main.js new file mode 100644 index 00000000000..bdb3ac56756 --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/cjs/main.js @@ -0,0 +1,11 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var index = require('./components/sub/index.js'); +var index$1 = require('./components/index.js'); + + + +exports.foo = index.foo; +exports.baz = index$1.baz; diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/es/components/index.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/es/components/index.js new file mode 100644 index 00000000000..baeee792cc9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/es/components/index.js @@ -0,0 +1,6 @@ +import bar from './sub/index.js'; +export { foo } from './sub/index.js'; + +const baz = { bar }; + +export { baz }; diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/es/components/sub/index.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/es/components/sub/index.js new file mode 100644 index 00000000000..3b438c25222 --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/es/components/sub/index.js @@ -0,0 +1,5 @@ +const foo = 'bar'; +var bar = () => {}; + +export default bar; +export { foo }; diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/es/main.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/es/main.js new file mode 100644 index 00000000000..4b8f56eba17 --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/es/main.js @@ -0,0 +1,2 @@ +export { foo } from './components/sub/index.js'; +export { baz } from './components/index.js'; diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/system/components/index.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/system/components/index.js new file mode 100644 index 00000000000..17def0f802d --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/system/components/index.js @@ -0,0 +1,15 @@ +System.register('bundle', ['./sub/index.js'], function (exports) { + 'use strict'; + var bar; + return { + setters: [function (module) { + bar = module.default; + exports('foo', module.foo); + }], + execute: function () { + + const baz = exports('baz', { bar }); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/system/components/sub/index.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/system/components/sub/index.js new file mode 100644 index 00000000000..2174c193998 --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/system/components/sub/index.js @@ -0,0 +1,11 @@ +System.register('bundle', [], function (exports) { + 'use strict'; + return { + execute: function () { + + const foo = exports('foo', 'bar'); + var bar = exports('default', () => {}); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/system/main.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/system/main.js new file mode 100644 index 00000000000..a5e92b9bf5d --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/_expected/system/main.js @@ -0,0 +1,15 @@ +System.register('bundle', ['./components/sub/index.js', './components/index.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('foo', module.foo); + }, function (module) { + exports('baz', module.baz); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/components/index.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/components/index.js new file mode 100644 index 00000000000..0c5913716d6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/components/index.js @@ -0,0 +1,4 @@ +import bar, { foo } from './sub/index'; + +export const baz = { bar }; +export { foo }; diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/components/sub/index.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/components/sub/index.js new file mode 100644 index 00000000000..0bce193fce2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/components/sub/index.js @@ -0,0 +1,4 @@ +const foo = 'bar'; + +export { foo }; +export default () => {}; diff --git a/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/main.js b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/main.js new file mode 100644 index 00000000000..6dfbc9774ea --- /dev/null +++ b/test/chunking-form/samples/deprecated/indirect-reexports-preserve-modules/main.js @@ -0,0 +1,3 @@ +import { baz, foo } from './components/index'; + +export { baz, foo }; diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_config.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_config.js new file mode 100644 index 00000000000..23bb4b220e9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_config.js @@ -0,0 +1,10 @@ +module.exports = { + description: 'handles using dependencies with shimmed missing exports as ', + expectedWarnings: ['SHIMMED_EXPORT'], + options: { + strictDeprecations: false, + input: ['main.js'], + preserveModules: true, + shimMissingExports: true + } +}; diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/amd/dep1.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/amd/dep1.js new file mode 100644 index 00000000000..4e6617810fb --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/amd/dep1.js @@ -0,0 +1,19 @@ +define(['exports'], function (exports) { 'use strict'; + + var _missingExportShim = void 0; + + console.log('This is the output when a missing export is used internally but not reexported'); + + function almostUseUnused(useIt) { + if (useIt) { + console.log(_missingExportShim); + } + } + + almostUseUnused(false); + + exports.missing1 = _missingExportShim; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/amd/dep2.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/amd/dep2.js new file mode 100644 index 00000000000..c9382183868 --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/amd/dep2.js @@ -0,0 +1,16 @@ +define(['exports'], function (exports) { 'use strict'; + + var _missingExportShim = void 0; + + console.log('This is the output when a missing export is reexported'); + + var _missingExportShim$1 = void 0; + + console.log(_missingExportShim$1); + + exports.missing2 = _missingExportShim; + exports.previousShimmedExport = _missingExportShim$1; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/amd/main.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/amd/main.js new file mode 100644 index 00000000000..ec4beefe55b --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(['./dep1', './dep2'], function (dep1, dep2) { 'use strict'; + + console.log(dep1.missing1, dep2.missing2, dep2.previousShimmedExport); + +}); diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/cjs/dep1.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/cjs/dep1.js new file mode 100644 index 00000000000..58c566f2849 --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/cjs/dep1.js @@ -0,0 +1,17 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var _missingExportShim = void 0; + +console.log('This is the output when a missing export is used internally but not reexported'); + +function almostUseUnused(useIt) { + if (useIt) { + console.log(_missingExportShim); + } +} + +almostUseUnused(false); + +exports.missing1 = _missingExportShim; diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/cjs/dep2.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/cjs/dep2.js new file mode 100644 index 00000000000..8a01d991453 --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/cjs/dep2.js @@ -0,0 +1,14 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var _missingExportShim = void 0; + +console.log('This is the output when a missing export is reexported'); + +var _missingExportShim$1 = void 0; + +console.log(_missingExportShim$1); + +exports.missing2 = _missingExportShim; +exports.previousShimmedExport = _missingExportShim$1; diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/cjs/main.js new file mode 100644 index 00000000000..0a8ed0c591c --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/cjs/main.js @@ -0,0 +1,6 @@ +'use strict'; + +var dep1 = require('./dep1.js'); +var dep2 = require('./dep2.js'); + +console.log(dep1.missing1, dep2.missing2, dep2.previousShimmedExport); diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/es/dep1.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/es/dep1.js new file mode 100644 index 00000000000..99f4196bf72 --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/es/dep1.js @@ -0,0 +1,13 @@ +var _missingExportShim = void 0; + +console.log('This is the output when a missing export is used internally but not reexported'); + +function almostUseUnused(useIt) { + if (useIt) { + console.log(_missingExportShim); + } +} + +almostUseUnused(false); + +export { _missingExportShim as missing1 }; diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/es/dep2.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/es/dep2.js new file mode 100644 index 00000000000..1957fef7ba9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/es/dep2.js @@ -0,0 +1,9 @@ +var _missingExportShim = void 0; + +console.log('This is the output when a missing export is reexported'); + +var _missingExportShim$1 = void 0; + +console.log(_missingExportShim$1); + +export { _missingExportShim as missing2, _missingExportShim$1 as previousShimmedExport }; diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/es/main.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/es/main.js new file mode 100644 index 00000000000..ea2616a1c8c --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/es/main.js @@ -0,0 +1,4 @@ +import { missing1 as _missingExportShim } from './dep1.js'; +import { missing2 as _missingExportShim$1, previousShimmedExport as _missingExportShim$2 } from './dep2.js'; + +console.log(_missingExportShim, _missingExportShim$1, _missingExportShim$2); diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/system/dep1.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/system/dep1.js new file mode 100644 index 00000000000..292047e5ff6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/system/dep1.js @@ -0,0 +1,22 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var _missingExportShim = void 0; + + console.log('This is the output when a missing export is used internally but not reexported'); + + function almostUseUnused(useIt) { + if (useIt) { + console.log(_missingExportShim); + } + } + + almostUseUnused(false); + + exports('missing1', _missingExportShim); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/system/dep2.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/system/dep2.js new file mode 100644 index 00000000000..da8178d1d7f --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/system/dep2.js @@ -0,0 +1,18 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var _missingExportShim = void 0; + + console.log('This is the output when a missing export is reexported'); + + var _missingExportShim$1 = exports('previousShimmedExport', void 0); + + console.log(_missingExportShim$1); + + exports('missing2', _missingExportShim); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/system/main.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/system/main.js new file mode 100644 index 00000000000..fa94551b2ef --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/_expected/system/main.js @@ -0,0 +1,17 @@ +System.register(['./dep1.js', './dep2.js'], function () { + 'use strict'; + var _missingExportShim, _missingExportShim$1, _missingExportShim$2; + return { + setters: [function (module) { + _missingExportShim = module.missing1; + }, function (module) { + _missingExportShim$1 = module.missing2; + _missingExportShim$2 = module.previousShimmedExport; + }], + execute: function () { + + console.log(_missingExportShim, _missingExportShim$1, _missingExportShim$2); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/dep1.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/dep1.js new file mode 100644 index 00000000000..84e22e0fe8f --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/dep1.js @@ -0,0 +1,9 @@ +console.log('This is the output when a missing export is used internally but not reexported'); + +function almostUseUnused(useIt) { + if (useIt) { + console.log(_missingExportShim); + } +} + +almostUseUnused(false); diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/dep2.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/dep2.js new file mode 100644 index 00000000000..e49bb16dd04 --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/dep2.js @@ -0,0 +1,7 @@ +console.log('This is the output when a missing export is reexported'); + +var _missingExportShim = void 0; + +console.log(_missingExportShim); + +export {_missingExportShim as previousShimmedExport} diff --git a/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/main.js b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/main.js new file mode 100644 index 00000000000..167c08b23fc --- /dev/null +++ b/test/chunking-form/samples/deprecated/missing-export-reused-deconflicting/main.js @@ -0,0 +1,4 @@ +import { missing1 } from './dep1.js'; +import { missing2, previousShimmedExport } from './dep2.js'; + +console.log(missing1, missing2, previousShimmedExport); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_config.js new file mode 100644 index 00000000000..31219523c90 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'Uses entry point semantics for all files when preserving modules', + options: { + strictDeprecations: false, + input: 'main.js', + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/amd/default.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/amd/default.js new file mode 100644 index 00000000000..9101b3f3d25 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/amd/default.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var foo = 'default'; + + return foo; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/amd/main.js new file mode 100644 index 00000000000..d94d10667e3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/amd/main.js @@ -0,0 +1,10 @@ +define(['require', './default', './named'], function (require, _default, named) { 'use strict'; + + console.log(_default, named.value); + + new Promise(function (resolve, reject) { require(['./default'], function (m) { resolve({ 'default': m }); }, reject) }).then(result => console.log(result.default)); + new Promise(function (resolve, reject) { require(['./named'], resolve, reject) }).then(result => console.log(result.value)); + + return _default; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/amd/named.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/amd/named.js new file mode 100644 index 00000000000..37e6d25bd85 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/amd/named.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + const value = 'named'; + + exports.value = value; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/cjs/default.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/cjs/default.js new file mode 100644 index 00000000000..f670b985a61 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/cjs/default.js @@ -0,0 +1,5 @@ +'use strict'; + +var foo = 'default'; + +module.exports = foo; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/cjs/main.js new file mode 100644 index 00000000000..468614089bd --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/cjs/main.js @@ -0,0 +1,11 @@ +'use strict'; + +var _default = require('./default.js'); +var named = require('./named.js'); + +console.log(_default, named.value); + +Promise.resolve().then(function () { return { 'default': require('./default.js') }; }).then(result => console.log(result.default)); +Promise.resolve().then(function () { return require('./named.js'); }).then(result => console.log(result.value)); + +module.exports = _default; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/cjs/named.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/cjs/named.js new file mode 100644 index 00000000000..491f8569447 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/cjs/named.js @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const value = 'named'; + +exports.value = value; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/default.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/default.js new file mode 100644 index 00000000000..97dcda8cdc9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/default.js @@ -0,0 +1,3 @@ +var foo = 'default'; + +export default foo; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/main.js new file mode 100644 index 00000000000..1db891a835f --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/main.js @@ -0,0 +1,8 @@ +import foo from './default.js'; +export { default } from './default.js'; +import { value } from './named.js'; + +console.log(foo, value); + +import('./default.js').then(result => console.log(result.default)); +import('./named.js').then(result => console.log(result.value)); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/named.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/named.js new file mode 100644 index 00000000000..f632590076b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/es/named.js @@ -0,0 +1,3 @@ +const value = 'named'; + +export { value }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/system/default.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/system/default.js new file mode 100644 index 00000000000..0505d3144dd --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/system/default.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var foo = exports('default', 'default'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/system/main.js new file mode 100644 index 00000000000..12e707aee57 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/system/main.js @@ -0,0 +1,20 @@ +System.register(['./default.js', './named.js'], function (exports, module) { + 'use strict'; + var foo, value; + return { + setters: [function (module) { + foo = module.default; + exports('default', module.default); + }, function (module) { + value = module.value; + }], + execute: function () { + + console.log(foo, value); + + module.import('./default.js').then(result => console.log(result.default)); + module.import('./named.js').then(result => console.log(result.value)); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/system/named.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/system/named.js new file mode 100644 index 00000000000..431654fc285 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/_expected/system/named.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const value = exports('value', 'named'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/default.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/default.js new file mode 100644 index 00000000000..413f601a377 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/default.js @@ -0,0 +1 @@ +export default 'default'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/main.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/main.js new file mode 100644 index 00000000000..72dc390d821 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/main.js @@ -0,0 +1,8 @@ +import foo from './default.js'; +import { value } from './named.js'; +console.log(foo, value); + +export { default } from './default.js'; + +import('./default').then(result => console.log(result.default)); +import('./named').then(result => console.log(result.value)); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/named.js b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/named.js new file mode 100644 index 00000000000..a5c403fef99 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-auto-export-mode/named.js @@ -0,0 +1 @@ +export const value = 'named'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_config.js new file mode 100644 index 00000000000..21593c6541f --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_config.js @@ -0,0 +1,13 @@ +const commonjs = require('@rollup/plugin-commonjs'); + +module.exports = { + description: 'Handles output from @rollup/plugin-commonjs', + expectedWarnings: ['MIXED_EXPORTS'], + options: { + strictDeprecations: false, + input: 'main.js', + preserveModules: true, + external: ['external'], + plugins: [commonjs()] + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/_virtual/_external_commonjs-external b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/_virtual/_external_commonjs-external new file mode 100644 index 00000000000..aac3dad0875 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/_virtual/_external_commonjs-external @@ -0,0 +1,9 @@ +define(['external'], function (external) { 'use strict'; + + external = external && Object.prototype.hasOwnProperty.call(external, 'default') ? external['default'] : external; + + + + return external; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/_virtual/other.js_commonjs-proxy b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/_virtual/other.js_commonjs-proxy new file mode 100644 index 00000000000..3d189e335e4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/_virtual/other.js_commonjs-proxy @@ -0,0 +1,7 @@ +define(['../other'], function (other) { 'use strict'; + + + + return other; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/commonjs.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/commonjs.js new file mode 100644 index 00000000000..483f3f246b1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/commonjs.js @@ -0,0 +1,16 @@ +define(['exports', 'external', './other'], function (exports, external, other) { 'use strict'; + + external = external && Object.prototype.hasOwnProperty.call(external, 'default') ? external['default'] : external; + + const { value } = other.default; + + console.log(external, value); + + var commonjs = 42; + + exports.__moduleExports = commonjs; + exports.default = commonjs; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/main.js new file mode 100644 index 00000000000..48e1747cfda --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/main.js @@ -0,0 +1,7 @@ +define(['external', './commonjs'], function (external, commonjs) { 'use strict'; + + external = external && Object.prototype.hasOwnProperty.call(external, 'default') ? external['default'] : external; + + console.log(commonjs.default, external); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/other.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/other.js new file mode 100644 index 00000000000..09837ba81f4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/amd/other.js @@ -0,0 +1,15 @@ +define(['exports'], function (exports) { 'use strict'; + + var value = 43; + + var other = { + value: value + }; + + exports.__moduleExports = other; + exports.default = other; + exports.value = value; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/_virtual/_external_commonjs-external b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/_virtual/_external_commonjs-external new file mode 100644 index 00000000000..c823462ee46 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/_virtual/_external_commonjs-external @@ -0,0 +1,9 @@ +'use strict'; + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var external = _interopDefault(require('external')); + + + +module.exports = external; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/_virtual/other.js_commonjs-proxy b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/_virtual/other.js_commonjs-proxy new file mode 100644 index 00000000000..ccb2cfc1e38 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/_virtual/other.js_commonjs-proxy @@ -0,0 +1,7 @@ +'use strict'; + +var other = require('../other.js'); + + + +module.exports = other; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/commonjs.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/commonjs.js new file mode 100644 index 00000000000..f68e44a56f6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/commonjs.js @@ -0,0 +1,17 @@ +'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')); +var other = require('./other.js'); + +const { value } = other.default; + +console.log(external, value); + +var commonjs = 42; + +exports.__moduleExports = commonjs; +exports.default = commonjs; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/main.js new file mode 100644 index 00000000000..3566b7d3ca4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/main.js @@ -0,0 +1,8 @@ +'use strict'; + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var external = _interopDefault(require('external')); +var commonjs = require('./commonjs.js'); + +console.log(commonjs.default, external); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/other.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/other.js new file mode 100644 index 00000000000..e89cd646ba7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/cjs/other.js @@ -0,0 +1,13 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var value = 43; + +var other = { + value: value +}; + +exports.__moduleExports = other; +exports.default = other; +exports.value = value; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/_virtual/_external_commonjs-external b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/_virtual/_external_commonjs-external new file mode 100644 index 00000000000..e15c5466550 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/_virtual/_external_commonjs-external @@ -0,0 +1,2 @@ +import external$1 from 'external'; +export { default } from 'external'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/_virtual/other.js_commonjs-proxy b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/_virtual/other.js_commonjs-proxy new file mode 100644 index 00000000000..89634986ca4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/_virtual/other.js_commonjs-proxy @@ -0,0 +1,2 @@ +import other$1 from '../other.js'; +export { default } from '../other.js'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/commonjs.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/commonjs.js new file mode 100644 index 00000000000..e3f3ee13691 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/commonjs.js @@ -0,0 +1,11 @@ +import external$1 from 'external'; +import other$1 from './other.js'; + +const { value } = other$1; + +console.log(external$1, value); + +var commonjs = 42; + +export default commonjs; +export { commonjs as __moduleExports }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/main.js new file mode 100644 index 00000000000..5686f930d70 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/main.js @@ -0,0 +1,4 @@ +import external$1 from 'external'; +import commonjs$1 from './commonjs.js'; + +console.log(commonjs$1, external$1); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/other.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/other.js new file mode 100644 index 00000000000..34718a2745c --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/es/other.js @@ -0,0 +1,8 @@ +var value = 43; + +var other = { + value: value +}; + +export default other; +export { other as __moduleExports, value }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/_virtual/_external_commonjs-external b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/_virtual/_external_commonjs-external new file mode 100644 index 00000000000..134e2d6356d --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/_virtual/_external_commonjs-external @@ -0,0 +1,15 @@ +System.register(['external'], function (exports) { + 'use strict'; + var external; + return { + setters: [function (module) { + external = module.default; + exports('default', module.default); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/_virtual/other.js_commonjs-proxy b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/_virtual/other.js_commonjs-proxy new file mode 100644 index 00000000000..1edbd9c5069 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/_virtual/other.js_commonjs-proxy @@ -0,0 +1,15 @@ +System.register(['../other.js'], function (exports) { + 'use strict'; + var other; + return { + setters: [function (module) { + other = module.default; + exports('default', module.default); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/commonjs.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/commonjs.js new file mode 100644 index 00000000000..6aea482e9b2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/commonjs.js @@ -0,0 +1,20 @@ +System.register(['external', './other.js'], function (exports) { + 'use strict'; + var external, other; + return { + setters: [function (module) { + external = module.default; + }, function (module) { + other = module.default; + }], + execute: function () { + + const { value } = other; + + console.log(external, value); + + var commonjs = function (v) { return exports({ default: v, __moduleExports: v }), v; }(42); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/main.js new file mode 100644 index 00000000000..8ff0da14a79 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/main.js @@ -0,0 +1,16 @@ +System.register(['external', './commonjs.js'], function () { + 'use strict'; + var external, commonjs; + return { + setters: [function (module) { + external = module.default; + }, function (module) { + commonjs = module.default; + }], + execute: function () { + + console.log(commonjs, external); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/other.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/other.js new file mode 100644 index 00000000000..b2dc51dd9ea --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/_expected/system/other.js @@ -0,0 +1,14 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var value = exports('value', 43); + + var other = function (v) { return exports({ default: v, __moduleExports: v }), v; }({ + value: value + }); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/commonjs.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/commonjs.js new file mode 100644 index 00000000000..b9bf49c3fc5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/commonjs.js @@ -0,0 +1,6 @@ +const external = require('external'); +const { value } = require('./other'); + +console.log(external, value); + +module.exports = 42; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/main.js new file mode 100644 index 00000000000..cfef423da0c --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/main.js @@ -0,0 +1,4 @@ +import value from './commonjs'; +import external from 'external'; + +console.log(value, external); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-commonjs/other.js b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/other.js new file mode 100644 index 00000000000..cd9dcc83b69 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-commonjs/other.js @@ -0,0 +1 @@ +exports.value = 43; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_config.js new file mode 100644 index 00000000000..3ed23338db8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'dynamic imports are handled correctly when preserving modules', + options: { + strictDeprecations: false, + input: ['main.js'], + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/amd/dynamic-included.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/amd/dynamic-included.js new file mode 100644 index 00000000000..afd117130dc --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/amd/dynamic-included.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + const value = 'included'; + + exports.value = value; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/amd/main.js new file mode 100644 index 00000000000..2ec310c64aa --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(['require'], function (require) { 'use strict'; + + new Promise(function (resolve, reject) { require(['./dynamic-included'], resolve, reject) }).then(result => console.log(result)); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/cjs/dynamic-included.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/cjs/dynamic-included.js new file mode 100644 index 00000000000..2c8d642e303 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/cjs/dynamic-included.js @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const value = 'included'; + +exports.value = value; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/cjs/main.js new file mode 100644 index 00000000000..ed78ead193e --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/cjs/main.js @@ -0,0 +1,3 @@ +'use strict'; + +Promise.resolve().then(function () { return require('./dynamic-included.js'); }).then(result => console.log(result)); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/es/dynamic-included.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/es/dynamic-included.js new file mode 100644 index 00000000000..6370bf94358 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/es/dynamic-included.js @@ -0,0 +1,3 @@ +const value = 'included'; + +export { value }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/es/main.js new file mode 100644 index 00000000000..72ed76ddf10 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/es/main.js @@ -0,0 +1 @@ +import('./dynamic-included.js').then(result => console.log(result)); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/system/dynamic-included.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/system/dynamic-included.js new file mode 100644 index 00000000000..3a6e756071e --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/system/dynamic-included.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const value = exports('value', 'included'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/system/main.js new file mode 100644 index 00000000000..26c21dcccb5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/_expected/system/main.js @@ -0,0 +1,10 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + module.import('./dynamic-included.js').then(result => console.log(result)); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/dynamic-included.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/dynamic-included.js new file mode 100644 index 00000000000..287c398f8d6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/dynamic-included.js @@ -0,0 +1 @@ +export const value = 'included'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/dynamic-removed.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/dynamic-removed.js new file mode 100644 index 00000000000..a0203faa48b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/dynamic-removed.js @@ -0,0 +1 @@ +export const value = 'removed'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/main.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/main.js new file mode 100644 index 00000000000..9449616c8fe --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-imports/main.js @@ -0,0 +1,6 @@ +import('./dynamic-included').then(result => console.log(result)); + +const include = false; +if (include) { + import('./dynamic-removed').then(result => console.log(result)); +} diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_config.js new file mode 100644 index 00000000000..c5483693708 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'Preserve modules properly handles internal namespace imports (#2576)', + options: { + strictDeprecations: false, + input: ['main.js'], + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/m1.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/m1.js new file mode 100644 index 00000000000..25f53d93a63 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/m1.js @@ -0,0 +1,10 @@ +define(['exports', './m2', './m3'], function (exports, m2, m3) { 'use strict'; + + + + exports.m2 = m2; + exports.m3 = m3; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/m2.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/m2.js new file mode 100644 index 00000000000..22e08de419f --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/m2.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var m2 = {a:1}; + + return m2; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/m3.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/m3.js new file mode 100644 index 00000000000..685448b54a5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/m3.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var m3 = {b:2}; + + return m3; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/main.js new file mode 100644 index 00000000000..b73da45ad1d --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(['./m1'], function (m1) { 'use strict'; + + console.log(m1); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/m1.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/m1.js new file mode 100644 index 00000000000..2dcf78656c6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/m1.js @@ -0,0 +1,11 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var m2 = require('./m2.js'); +var m3 = require('./m3.js'); + + + +exports.m2 = m2; +exports.m3 = m3; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/m2.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/m2.js new file mode 100644 index 00000000000..4e7045d3fc5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/m2.js @@ -0,0 +1,5 @@ +'use strict'; + +var m2 = {a:1}; + +module.exports = m2; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/m3.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/m3.js new file mode 100644 index 00000000000..8e984623675 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/m3.js @@ -0,0 +1,5 @@ +'use strict'; + +var m3 = {b:2}; + +module.exports = m3; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/main.js new file mode 100644 index 00000000000..79afdf39744 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/cjs/main.js @@ -0,0 +1,5 @@ +'use strict'; + +var m1 = require('./m1.js'); + +console.log(m1); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/m1.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/m1.js new file mode 100644 index 00000000000..86968950d9d --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/m1.js @@ -0,0 +1,2 @@ +export { default as m2 } from './m2.js'; +export { default as m3 } from './m3.js'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/m2.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/m2.js new file mode 100644 index 00000000000..0ee68395af0 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/m2.js @@ -0,0 +1,3 @@ +var m2 = {a:1}; + +export default m2; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/m3.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/m3.js new file mode 100644 index 00000000000..0d65aa10bb9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/m3.js @@ -0,0 +1,3 @@ +var m3 = {b:2}; + +export default m3; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/main.js new file mode 100644 index 00000000000..c7526ddd8b1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/es/main.js @@ -0,0 +1,3 @@ +import * as ms from './m1.js'; + +console.log(ms); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/m1.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/m1.js new file mode 100644 index 00000000000..9f2d67db2a9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/m1.js @@ -0,0 +1,15 @@ +System.register(['./m2.js', './m3.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('m2', module.default); + }, function (module) { + exports('m3', module.default); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/m2.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/m2.js new file mode 100644 index 00000000000..d724fa35251 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/m2.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var m2 = exports('default', {a:1}); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/m3.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/m3.js new file mode 100644 index 00000000000..1181b9a04ec --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/m3.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var m3 = exports('default', {b:2}); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/main.js new file mode 100644 index 00000000000..7d19155def8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/_expected/system/main.js @@ -0,0 +1,14 @@ +System.register(['./m1.js'], function () { + 'use strict'; + var ms; + return { + setters: [function (module) { + ms = module; + }], + execute: function () { + + console.log(ms); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/m1.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/m1.js new file mode 100644 index 00000000000..611f3360f0a --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/m1.js @@ -0,0 +1,5 @@ +import m2 from './m2.js'; +import m3 from './m3.js'; + +// console.log('m1'); +export { m2, m3 }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/m2.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/m2.js new file mode 100644 index 00000000000..040aecae258 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/m2.js @@ -0,0 +1,2 @@ +var m2 = {a:1}; +export default m2; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/m3.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/m3.js new file mode 100644 index 00000000000..e58c26e98bd --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/m3.js @@ -0,0 +1,2 @@ +var m3 = {b:2}; +export default m3; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/main.js b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/main.js new file mode 100644 index 00000000000..c7526ddd8b1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-dynamic-namespace/main.js @@ -0,0 +1,3 @@ +import * as ms from './m1.js'; + +console.log(ms); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-empty/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-empty/_config.js new file mode 100644 index 00000000000..820e4c3cf04 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-empty/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'Preserve modules remove empty dependencies', + options: { + strictDeprecations: false, + input: 'main.js', + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/amd/main.js new file mode 100644 index 00000000000..6fd312fad67 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(['./two'], function (two) { 'use strict'; + + window.APP = { a: two }; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/amd/two.js b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/amd/two.js new file mode 100644 index 00000000000..68dcf822ab8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/amd/two.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var a = {}; + + return a; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/cjs/main.js new file mode 100644 index 00000000000..b882d86f306 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/cjs/main.js @@ -0,0 +1,5 @@ +'use strict'; + +var two = require('./two.js'); + +window.APP = { a: two }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/cjs/two.js b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/cjs/two.js new file mode 100644 index 00000000000..62ff33f50af --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/cjs/two.js @@ -0,0 +1,5 @@ +'use strict'; + +var a = {}; + +module.exports = a; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/es/main.js new file mode 100644 index 00000000000..c69a3355933 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/es/main.js @@ -0,0 +1,3 @@ +import a from './two.js'; + +window.APP = { a }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/es/two.js b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/es/two.js new file mode 100644 index 00000000000..0938a073152 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/es/two.js @@ -0,0 +1,3 @@ +var a = {}; + +export default a; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/system/main.js new file mode 100644 index 00000000000..b0664a8cd59 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/system/main.js @@ -0,0 +1,14 @@ +System.register(['./two.js'], function () { + 'use strict'; + var a; + return { + setters: [function (module) { + a = module.default; + }], + execute: function () { + + window.APP = { a }; + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/system/two.js b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/system/two.js new file mode 100644 index 00000000000..015fc0193bb --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-empty/_expected/system/two.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var a = exports('default', {}); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-empty/main.js b/test/chunking-form/samples/deprecated/preserve-modules-empty/main.js new file mode 100644 index 00000000000..944087cb5c5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-empty/main.js @@ -0,0 +1,3 @@ +import { a } from './one'; + +window.APP = { a }; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-empty/one.js b/test/chunking-form/samples/deprecated/preserve-modules-empty/one.js new file mode 100644 index 00000000000..2fa4a4dfd2b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-empty/one.js @@ -0,0 +1,2 @@ +export { default as a } from './two'; +export { default as b } from './three'; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-empty/three.js b/test/chunking-form/samples/deprecated/preserve-modules-empty/three.js new file mode 100644 index 00000000000..7c645e42fb7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-empty/three.js @@ -0,0 +1 @@ +export default {}; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-empty/two.js b/test/chunking-form/samples/deprecated/preserve-modules-empty/two.js new file mode 100644 index 00000000000..7c645e42fb7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-empty/two.js @@ -0,0 +1 @@ +export default {}; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_config.js new file mode 100644 index 00000000000..9ca75e06f00 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'confirm export aliases are preserved in modules', + options: { + strictDeprecations: false, + input: ['main1.js', 'main2.js'], + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/amd/dep.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/amd/dep.js new file mode 100644 index 00000000000..cab959ad2ca --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/amd/dep.js @@ -0,0 +1,10 @@ +define(['exports'], function (exports) { 'use strict'; + + const foo = 1; + + exports.bar = foo; + exports.foo = foo; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/amd/main1.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/amd/main1.js new file mode 100644 index 00000000000..4c30c2b8f1e --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/amd/main1.js @@ -0,0 +1,10 @@ +define(['exports', './dep'], function (exports, dep) { 'use strict'; + + + + exports.bar = dep.foo; + exports.foo = dep.foo; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/amd/main2.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/amd/main2.js new file mode 100644 index 00000000000..0d4dfce05b3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/amd/main2.js @@ -0,0 +1,9 @@ +define(['exports', './dep'], function (exports, dep) { 'use strict'; + + + + exports.bar = dep.foo; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/cjs/dep.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/cjs/dep.js new file mode 100644 index 00000000000..7bf4532c451 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/cjs/dep.js @@ -0,0 +1,8 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const foo = 1; + +exports.bar = foo; +exports.foo = foo; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/cjs/main1.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/cjs/main1.js new file mode 100644 index 00000000000..801c4e75c53 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/cjs/main1.js @@ -0,0 +1,10 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var dep = require('./dep.js'); + + + +exports.bar = dep.foo; +exports.foo = dep.foo; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/cjs/main2.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/cjs/main2.js new file mode 100644 index 00000000000..1c1f62cd337 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/cjs/main2.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var dep = require('./dep.js'); + + + +exports.bar = dep.foo; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/es/dep.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/es/dep.js new file mode 100644 index 00000000000..fd00364ba36 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/es/dep.js @@ -0,0 +1,3 @@ +const foo = 1; + +export { foo as bar, foo }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/es/main1.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/es/main1.js new file mode 100644 index 00000000000..ed1ba0cbfbb --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/es/main1.js @@ -0,0 +1 @@ +export { foo as bar, foo } from './dep.js'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/es/main2.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/es/main2.js new file mode 100644 index 00000000000..e7cedc5ee48 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/es/main2.js @@ -0,0 +1 @@ +export { foo as bar } from './dep.js'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/dep.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/dep.js new file mode 100644 index 00000000000..850241b9ad6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/dep.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const foo = function (v) { return exports({ foo: v, bar: v }), v; }(1); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/main1.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/main1.js new file mode 100644 index 00000000000..bfffe939f7a --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/main1.js @@ -0,0 +1,16 @@ +System.register(['./dep.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + var _setter = {}; + _setter.bar = module.foo; + _setter.foo = module.foo; + exports(_setter); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/main2.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/main2.js new file mode 100644 index 00000000000..d995245e8f6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/_expected/system/main2.js @@ -0,0 +1,13 @@ +System.register(['./dep.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('bar', module.foo); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/dep.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/dep.js new file mode 100644 index 00000000000..6e70164af81 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/dep.js @@ -0,0 +1,3 @@ +const foo = 1; + +export { foo, foo as bar }; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/main1.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/main1.js new file mode 100644 index 00000000000..d6dbbf4db77 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/main1.js @@ -0,0 +1 @@ +export { foo, bar } from './dep'; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-export-alias/main2.js b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/main2.js new file mode 100644 index 00000000000..a9aa169df94 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-export-alias/main2.js @@ -0,0 +1 @@ +export { bar } from './dep'; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_config.js new file mode 100644 index 00000000000..fd9c3b9b431 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_config.js @@ -0,0 +1,11 @@ +module.exports = { + description: 'entryFileNames pattern supported in combination with preserveModules', + options: { + strictDeprecations: false, + input: 'src/main.ts', + output: { + entryFileNames: 'entry-[name]-[format]-[ext][extname].js' + }, + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/entry-foo-amd-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/entry-foo-amd-ts.ts.js new file mode 100644 index 00000000000..2bc02b35588 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/entry-foo-amd-ts.ts.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var foo = 42; + + return foo; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/entry-main-amd-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/entry-main-amd-ts.ts.js new file mode 100644 index 00000000000..1018355bd77 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/entry-main-amd-ts.ts.js @@ -0,0 +1,12 @@ +define(['exports', './entry-foo-amd-ts.ts', './nested/entry-bar-amd-ts.ts', './nested/entry-baz-amd-ts.ts', './entry-no-ext-amd-'], function (exports, foo, bar, baz, noExt) { 'use strict'; + + + + exports.foo = foo; + exports.bar = bar; + exports.baz = baz; + exports.noExt = noExt; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/entry-no-ext-amd-.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/entry-no-ext-amd-.js new file mode 100644 index 00000000000..8e2da77223e --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/entry-no-ext-amd-.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var noExt = 'no-ext'; + + return noExt; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/nested/entry-bar-amd-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/nested/entry-bar-amd-ts.ts.js new file mode 100644 index 00000000000..cb3bfcd5d1d --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/nested/entry-bar-amd-ts.ts.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var bar = 'banana'; + + return bar; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/nested/entry-baz-amd-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/nested/entry-baz-amd-ts.ts.js new file mode 100644 index 00000000000..35018f30618 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/amd/nested/entry-baz-amd-ts.ts.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var baz = 'whatever'; + + return baz; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/entry-foo-cjs-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/entry-foo-cjs-ts.ts.js new file mode 100644 index 00000000000..476c8ac92d3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/entry-foo-cjs-ts.ts.js @@ -0,0 +1,5 @@ +'use strict'; + +var foo = 42; + +module.exports = foo; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/entry-main-cjs-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/entry-main-cjs-ts.ts.js new file mode 100644 index 00000000000..aff83e1b5d2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/entry-main-cjs-ts.ts.js @@ -0,0 +1,15 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var foo = require('./entry-foo-cjs-ts.ts.js'); +var bar = require('./nested/entry-bar-cjs-ts.ts.js'); +var baz = require('./nested/entry-baz-cjs-ts.ts.js'); +var noExt = require('./entry-no-ext-cjs-.js'); + + + +exports.foo = foo; +exports.bar = bar; +exports.baz = baz; +exports.noExt = noExt; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/entry-no-ext-cjs-.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/entry-no-ext-cjs-.js new file mode 100644 index 00000000000..5e9e9eb2cb5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/entry-no-ext-cjs-.js @@ -0,0 +1,5 @@ +'use strict'; + +var noExt = 'no-ext'; + +module.exports = noExt; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/nested/entry-bar-cjs-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/nested/entry-bar-cjs-ts.ts.js new file mode 100644 index 00000000000..f8f56e6fc51 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/nested/entry-bar-cjs-ts.ts.js @@ -0,0 +1,5 @@ +'use strict'; + +var bar = 'banana'; + +module.exports = bar; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/nested/entry-baz-cjs-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/nested/entry-baz-cjs-ts.ts.js new file mode 100644 index 00000000000..0ba506ad3eb --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/cjs/nested/entry-baz-cjs-ts.ts.js @@ -0,0 +1,5 @@ +'use strict'; + +var baz = 'whatever'; + +module.exports = baz; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/entry-foo-es-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/entry-foo-es-ts.ts.js new file mode 100644 index 00000000000..8ac2b2169a4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/entry-foo-es-ts.ts.js @@ -0,0 +1,3 @@ +var foo = 42; + +export default foo; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/entry-main-es-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/entry-main-es-ts.ts.js new file mode 100644 index 00000000000..341e9d48d9b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/entry-main-es-ts.ts.js @@ -0,0 +1,4 @@ +export { default as foo } from './entry-foo-es-ts.ts.js'; +export { default as bar } from './nested/entry-bar-es-ts.ts.js'; +export { default as baz } from './nested/entry-baz-es-ts.ts.js'; +export { default as noExt } from './entry-no-ext-es-.js'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/entry-no-ext-es-.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/entry-no-ext-es-.js new file mode 100644 index 00000000000..e630b7b5e9d --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/entry-no-ext-es-.js @@ -0,0 +1,3 @@ +var noExt = 'no-ext'; + +export default noExt; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/nested/entry-bar-es-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/nested/entry-bar-es-ts.ts.js new file mode 100644 index 00000000000..bbf65d4599d --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/nested/entry-bar-es-ts.ts.js @@ -0,0 +1,3 @@ +var bar = 'banana'; + +export default bar; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/nested/entry-baz-es-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/nested/entry-baz-es-ts.ts.js new file mode 100644 index 00000000000..03a3023d32b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/es/nested/entry-baz-es-ts.ts.js @@ -0,0 +1,3 @@ +var baz = 'whatever'; + +export default baz; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/entry-foo-system-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/entry-foo-system-ts.ts.js new file mode 100644 index 00000000000..81b45b772a8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/entry-foo-system-ts.ts.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var foo = exports('default', 42); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/entry-main-system-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/entry-main-system-ts.ts.js new file mode 100644 index 00000000000..22b35a8d704 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/entry-main-system-ts.ts.js @@ -0,0 +1,19 @@ +System.register(['./entry-foo-system-ts.ts.js', './nested/entry-bar-system-ts.ts.js', './nested/entry-baz-system-ts.ts.js', './entry-no-ext-system-.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('foo', module.default); + }, function (module) { + exports('bar', module.default); + }, function (module) { + exports('baz', module.default); + }, function (module) { + exports('noExt', module.default); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/entry-no-ext-system-.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/entry-no-ext-system-.js new file mode 100644 index 00000000000..91546e66d5b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/entry-no-ext-system-.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var noExt = exports('default', 'no-ext'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/nested/entry-bar-system-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/nested/entry-bar-system-ts.ts.js new file mode 100644 index 00000000000..5ef23f15879 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/nested/entry-bar-system-ts.ts.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var bar = exports('default', 'banana'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/nested/entry-baz-system-ts.ts.js b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/nested/entry-baz-system-ts.ts.js new file mode 100644 index 00000000000..a0526b56624 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/_expected/system/nested/entry-baz-system-ts.ts.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var baz = exports('default', 'whatever'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/foo.ts b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/foo.ts new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/foo.ts @@ -0,0 +1 @@ +export default 42; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/main.ts b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/main.ts new file mode 100644 index 00000000000..3f169c8f476 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/main.ts @@ -0,0 +1,8 @@ +// @ts-ignore +export { default as foo } from './foo.ts'; +// @ts-ignore +export { default as bar } from './nested/bar.ts'; +// @ts-ignore +export { default as baz } from './nested/baz.ts'; +// @ts-ignore +export { default as noExt } from './no-ext'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/nested/bar.ts b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/nested/bar.ts new file mode 100644 index 00000000000..7d79d5a99a8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/nested/bar.ts @@ -0,0 +1 @@ +export default 'banana'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/nested/baz.ts b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/nested/baz.ts new file mode 100644 index 00000000000..6d70feca8ec --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/nested/baz.ts @@ -0,0 +1 @@ +export default 'whatever'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/no-ext b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/no-ext new file mode 100644 index 00000000000..a59381f7298 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-filename-pattern/src/no-ext @@ -0,0 +1 @@ +export default 'no-ext' diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_config.js new file mode 100644 index 00000000000..6ffd681d55c --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_config.js @@ -0,0 +1,22 @@ +module.exports = { + description: 'Preserve modules id case sensitive', + options: { + strictDeprecations: false, + input: 'main.js', + preserveModules: true, + plugins: [ + { + resolveId(id) { + if (id.toLowerCase().includes('one')) { + return id; + } + }, + load(id) { + if (id.toLowerCase().includes('one')) { + return `export default '${id.replace('\0', '')}'`; + } + } + } + ] + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/_virtual/_One1.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/_virtual/_One1.js new file mode 100644 index 00000000000..0383829b24e --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/_virtual/_One1.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var c = 'One1.js'; + + return c; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/_virtual/_One2.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/_virtual/_One2.js new file mode 100644 index 00000000000..1febaba2ef7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/_virtual/_One2.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var b = 'One.js'; + + return b; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/_virtual/_one.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/_virtual/_one.js new file mode 100644 index 00000000000..469b63f9f86 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/_virtual/_one.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var a = 'one.js'; + + return a; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/main.js new file mode 100644 index 00000000000..803eecb1652 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(['./_virtual/_one', './_virtual/_One2', './_virtual/_One1'], function (_one, _One, _One1) { 'use strict'; + + window.APP = { a: _one, b: _One, c: _One1 }; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/_virtual/_One1.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/_virtual/_One1.js new file mode 100644 index 00000000000..2e2081c7b39 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/_virtual/_One1.js @@ -0,0 +1,5 @@ +'use strict'; + +var c = 'One1.js'; + +module.exports = c; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/_virtual/_One2.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/_virtual/_One2.js new file mode 100644 index 00000000000..94e5e6eebdb --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/_virtual/_One2.js @@ -0,0 +1,5 @@ +'use strict'; + +var b = 'One.js'; + +module.exports = b; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/_virtual/_one.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/_virtual/_one.js new file mode 100644 index 00000000000..04b4a696e73 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/_virtual/_one.js @@ -0,0 +1,5 @@ +'use strict'; + +var a = 'one.js'; + +module.exports = a; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/main.js new file mode 100644 index 00000000000..d113352518b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/cjs/main.js @@ -0,0 +1,7 @@ +'use strict'; + +var _one = require('./_virtual/_one.js'); +var _One = require('./_virtual/_One2.js'); +var _One1 = require('./_virtual/_One1.js'); + +window.APP = { a: _one, b: _One, c: _One1 }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/_virtual/_One1.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/_virtual/_One1.js new file mode 100644 index 00000000000..3ea816df737 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/_virtual/_One1.js @@ -0,0 +1,3 @@ +var c = 'One1.js'; + +export default c; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/_virtual/_One2.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/_virtual/_One2.js new file mode 100644 index 00000000000..d889775b3d6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/_virtual/_One2.js @@ -0,0 +1,3 @@ +var b = 'One.js'; + +export default b; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/_virtual/_one.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/_virtual/_one.js new file mode 100644 index 00000000000..615c3de0ca9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/_virtual/_one.js @@ -0,0 +1,3 @@ +var a = 'one.js'; + +export default a; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/main.js new file mode 100644 index 00000000000..e7a751f410a --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/es/main.js @@ -0,0 +1,5 @@ +import a from './_virtual/_one.js'; +import b from './_virtual/_One2.js'; +import c from './_virtual/_One1.js'; + +window.APP = { a, b, c }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/_virtual/_One1.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/_virtual/_One1.js new file mode 100644 index 00000000000..eb4e015bab5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/_virtual/_One1.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var c = exports('default', 'One1.js'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/_virtual/_One2.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/_virtual/_One2.js new file mode 100644 index 00000000000..04b90908308 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/_virtual/_One2.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var b = exports('default', 'One.js'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/_virtual/_one.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/_virtual/_one.js new file mode 100644 index 00000000000..f6c4ac9f9fd --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/_virtual/_one.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var a = exports('default', 'one.js'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/main.js new file mode 100644 index 00000000000..17303445bb0 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/_expected/system/main.js @@ -0,0 +1,18 @@ +System.register(['./_virtual/_one.js', './_virtual/_One2.js', './_virtual/_One1.js'], function () { + 'use strict'; + var a, b, c; + return { + setters: [function (module) { + a = module.default; + }, function (module) { + b = module.default; + }, function (module) { + c = module.default; + }], + execute: function () { + + window.APP = { a, b, c }; + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/main.js b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/main.js new file mode 100644 index 00000000000..49a5f34ffef --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-id-case-sensitive/main.js @@ -0,0 +1,5 @@ +import a from '\0one.js'; +import b from '\0One.js'; +import c from '\0One1.js'; + +window.APP = { a, b, c }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_config.js new file mode 100644 index 00000000000..b79256cfb0b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_config.js @@ -0,0 +1,11 @@ +module.exports = { + description: 'respects "named" export mode in all chunks when preserving modules', + options: { + strictDeprecations: false, + input: 'main.js', + preserveModules: true, + output: { + exports: 'named' + } + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/amd/default.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/amd/default.js new file mode 100644 index 00000000000..e8359fc2e7b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/amd/default.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + var foo = 'default'; + + exports.default = foo; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/amd/main.js new file mode 100644 index 00000000000..929d5812cfc --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/amd/main.js @@ -0,0 +1,12 @@ +define(['require', 'exports', './default', './named'], function (require, exports, _default, named) { 'use strict'; + + console.log(_default.default, named.value); + + new Promise(function (resolve, reject) { require(['./default'], resolve, reject) }).then(result => console.log(result.default)); + new Promise(function (resolve, reject) { require(['./named'], resolve, reject) }).then(result => console.log(result.value)); + + exports.default = _default.default; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/amd/named.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/amd/named.js new file mode 100644 index 00000000000..37e6d25bd85 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/amd/named.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + const value = 'named'; + + exports.value = value; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/cjs/default.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/cjs/default.js new file mode 100644 index 00000000000..bc9cb9bdcb9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/cjs/default.js @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var foo = 'default'; + +exports.default = foo; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/cjs/main.js new file mode 100644 index 00000000000..9ff3162badf --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/cjs/main.js @@ -0,0 +1,13 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var _default = require('./default.js'); +var named = require('./named.js'); + +console.log(_default.default, named.value); + +Promise.resolve().then(function () { return require('./default.js'); }).then(result => console.log(result.default)); +Promise.resolve().then(function () { return require('./named.js'); }).then(result => console.log(result.value)); + +exports.default = _default.default; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/cjs/named.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/cjs/named.js new file mode 100644 index 00000000000..491f8569447 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/cjs/named.js @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const value = 'named'; + +exports.value = value; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/default.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/default.js new file mode 100644 index 00000000000..97dcda8cdc9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/default.js @@ -0,0 +1,3 @@ +var foo = 'default'; + +export default foo; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/main.js new file mode 100644 index 00000000000..1db891a835f --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/main.js @@ -0,0 +1,8 @@ +import foo from './default.js'; +export { default } from './default.js'; +import { value } from './named.js'; + +console.log(foo, value); + +import('./default.js').then(result => console.log(result.default)); +import('./named.js').then(result => console.log(result.value)); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/named.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/named.js new file mode 100644 index 00000000000..f632590076b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/es/named.js @@ -0,0 +1,3 @@ +const value = 'named'; + +export { value }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/system/default.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/system/default.js new file mode 100644 index 00000000000..0505d3144dd --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/system/default.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var foo = exports('default', 'default'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/system/main.js new file mode 100644 index 00000000000..12e707aee57 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/system/main.js @@ -0,0 +1,20 @@ +System.register(['./default.js', './named.js'], function (exports, module) { + 'use strict'; + var foo, value; + return { + setters: [function (module) { + foo = module.default; + exports('default', module.default); + }, function (module) { + value = module.value; + }], + execute: function () { + + console.log(foo, value); + + module.import('./default.js').then(result => console.log(result.default)); + module.import('./named.js').then(result => console.log(result.value)); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/system/named.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/system/named.js new file mode 100644 index 00000000000..431654fc285 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/_expected/system/named.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const value = exports('value', 'named'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/default.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/default.js new file mode 100644 index 00000000000..413f601a377 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/default.js @@ -0,0 +1 @@ +export default 'default'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/main.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/main.js new file mode 100644 index 00000000000..72dc390d821 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/main.js @@ -0,0 +1,8 @@ +import foo from './default.js'; +import { value } from './named.js'; +console.log(foo, value); + +export { default } from './default.js'; + +import('./default').then(result => console.log(result.default)); +import('./named').then(result => console.log(result.value)); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/named.js b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/named.js new file mode 100644 index 00000000000..a5c403fef99 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-named-export-mode/named.js @@ -0,0 +1 @@ +export const value = 'named'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_config.js new file mode 100644 index 00000000000..22ec30f4ec3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'confirm exports are deconflicted when exporting nested index aliases', + options: { + strictDeprecations: false, + input: 'main.js', + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/amd/main.js new file mode 100644 index 00000000000..12dccf71f8f --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/amd/main.js @@ -0,0 +1,10 @@ +define(['exports', './module-a/v1/index', './module-b/v1/index'], function (exports, index, index$1) { 'use strict'; + + + + exports.ModuleA_V1 = index; + exports.ModuleB_V1 = index$1; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/amd/module-a/v1/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/amd/module-a/v1/index.js new file mode 100644 index 00000000000..2c1cbb5248d --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/amd/module-a/v1/index.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + const TEST_MODULE_A = 'A'; + + exports.TEST_MODULE_A = TEST_MODULE_A; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/amd/module-b/v1/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/amd/module-b/v1/index.js new file mode 100644 index 00000000000..b56f633d9fb --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/amd/module-b/v1/index.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + const TEST_MODULE_B = 'A'; + + exports.TEST_MODULE_B = TEST_MODULE_B; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/cjs/main.js new file mode 100644 index 00000000000..632ce47b9ae --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/cjs/main.js @@ -0,0 +1,11 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var index = require('./module-a/v1/index.js'); +var index$1 = require('./module-b/v1/index.js'); + + + +exports.ModuleA_V1 = index; +exports.ModuleB_V1 = index$1; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/cjs/module-a/v1/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/cjs/module-a/v1/index.js new file mode 100644 index 00000000000..a8ab4802133 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/cjs/module-a/v1/index.js @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const TEST_MODULE_A = 'A'; + +exports.TEST_MODULE_A = TEST_MODULE_A; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/cjs/module-b/v1/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/cjs/module-b/v1/index.js new file mode 100644 index 00000000000..2c2b23c7d63 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/cjs/module-b/v1/index.js @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const TEST_MODULE_B = 'A'; + +exports.TEST_MODULE_B = TEST_MODULE_B; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/es/main.js new file mode 100644 index 00000000000..537dda397a8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/es/main.js @@ -0,0 +1,4 @@ +import * as index from './module-a/v1/index.js'; +export { index as ModuleA_V1 }; +import * as index$1 from './module-b/v1/index.js'; +export { index$1 as ModuleB_V1 }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/es/module-a/v1/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/es/module-a/v1/index.js new file mode 100644 index 00000000000..a8158380482 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/es/module-a/v1/index.js @@ -0,0 +1,3 @@ +const TEST_MODULE_A = 'A'; + +export { TEST_MODULE_A }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/es/module-b/v1/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/es/module-b/v1/index.js new file mode 100644 index 00000000000..338a266e13c --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/es/module-b/v1/index.js @@ -0,0 +1,3 @@ +const TEST_MODULE_B = 'A'; + +export { TEST_MODULE_B }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/system/main.js new file mode 100644 index 00000000000..69423415aa6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/system/main.js @@ -0,0 +1,15 @@ +System.register(['./module-a/v1/index.js', './module-b/v1/index.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('ModuleA_V1', module); + }, function (module) { + exports('ModuleB_V1', module); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/system/module-a/v1/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/system/module-a/v1/index.js new file mode 100644 index 00000000000..400a5460fc9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/system/module-a/v1/index.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const TEST_MODULE_A = exports('TEST_MODULE_A', 'A'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/system/module-b/v1/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/system/module-b/v1/index.js new file mode 100644 index 00000000000..337b556bb25 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/_expected/system/module-b/v1/index.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const TEST_MODULE_B = exports('TEST_MODULE_B', 'A'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/main.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/main.js new file mode 100644 index 00000000000..6322b946820 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/main.js @@ -0,0 +1,2 @@ +export * from './module-a/index' +export * from './module-b/index' \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-a/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-a/index.js new file mode 100644 index 00000000000..6bd359daf1f --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-a/index.js @@ -0,0 +1,3 @@ +import * as ModuleA_V1 from './v1/index' + +export { ModuleA_V1 } \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-a/v1/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-a/v1/index.js new file mode 100644 index 00000000000..8bc392c756a --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-a/v1/index.js @@ -0,0 +1 @@ +export const TEST_MODULE_A = 'A' \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-b/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-b/index.js new file mode 100644 index 00000000000..f9b363cdf9f --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-b/index.js @@ -0,0 +1,3 @@ +import * as ModuleB_V1 from './v1/index' + +export { ModuleB_V1 } \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-b/v1/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-b/v1/index.js new file mode 100644 index 00000000000..1d751964f68 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-barrel-es-export/module-b/v1/index.js @@ -0,0 +1 @@ +export const TEST_MODULE_B = 'A' \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_config.js new file mode 100644 index 00000000000..291753db080 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'confirm exports are preserved when exporting a module', + options: { + strictDeprecations: false, + input: 'main.js', + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/amd/inner/more_inner/something.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/amd/inner/more_inner/something.js new file mode 100644 index 00000000000..138d9ba9e40 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/amd/inner/more_inner/something.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + const Something = 'Hello World'; + + exports.Something = Something; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/amd/inner/some_effect.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/amd/inner/some_effect.js new file mode 100644 index 00000000000..621699a15d1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/amd/inner/some_effect.js @@ -0,0 +1,5 @@ +define(function () { 'use strict'; + + console.log('side-effect'); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/amd/main.js new file mode 100644 index 00000000000..c89b17c4c11 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/amd/main.js @@ -0,0 +1,9 @@ +define(['exports', './inner/more_inner/something', './inner/some_effect'], function (exports, something, some_effect) { 'use strict'; + + + + exports.Something = something.Something; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/cjs/inner/more_inner/something.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/cjs/inner/more_inner/something.js new file mode 100644 index 00000000000..32f3040b7c0 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/cjs/inner/more_inner/something.js @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const Something = 'Hello World'; + +exports.Something = Something; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/cjs/inner/some_effect.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/cjs/inner/some_effect.js new file mode 100644 index 00000000000..28e48ebec94 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/cjs/inner/some_effect.js @@ -0,0 +1,3 @@ +'use strict'; + +console.log('side-effect'); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/cjs/main.js new file mode 100644 index 00000000000..ffa1d0bc5bb --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/cjs/main.js @@ -0,0 +1,10 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var something = require('./inner/more_inner/something.js'); +require('./inner/some_effect.js'); + + + +exports.Something = something.Something; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/es/inner/more_inner/something.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/es/inner/more_inner/something.js new file mode 100644 index 00000000000..636a4132444 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/es/inner/more_inner/something.js @@ -0,0 +1,3 @@ +const Something = 'Hello World'; + +export { Something }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/es/inner/some_effect.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/es/inner/some_effect.js new file mode 100644 index 00000000000..4ca9b41c411 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/es/inner/some_effect.js @@ -0,0 +1 @@ +console.log('side-effect'); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/es/main.js new file mode 100644 index 00000000000..efa908a5a5b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/es/main.js @@ -0,0 +1,2 @@ +export { Something } from './inner/more_inner/something.js'; +import './inner/some_effect.js'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/system/inner/more_inner/something.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/system/inner/more_inner/something.js new file mode 100644 index 00000000000..1b4bba21314 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/system/inner/more_inner/something.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const Something = exports('Something', 'Hello World'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/system/inner/some_effect.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/system/inner/some_effect.js new file mode 100644 index 00000000000..19dd3ec79bd --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/system/inner/some_effect.js @@ -0,0 +1,10 @@ +System.register([], function () { + 'use strict'; + return { + execute: function () { + + console.log('side-effect'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/system/main.js new file mode 100644 index 00000000000..16e27681d9a --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/_expected/system/main.js @@ -0,0 +1,13 @@ +System.register(['./inner/more_inner/something.js', './inner/some_effect.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('Something', module.Something); + }, function () {}], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/index.js new file mode 100644 index 00000000000..b46f14091cf --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/index.js @@ -0,0 +1,2 @@ +export * from './more_inner/index'; +import './some_effect'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/more_inner/index.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/more_inner/index.js new file mode 100644 index 00000000000..93e297c24fb --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/more_inner/index.js @@ -0,0 +1 @@ +export * from './something'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/more_inner/something.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/more_inner/something.js new file mode 100644 index 00000000000..60e3455d002 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/more_inner/something.js @@ -0,0 +1 @@ +export const Something = 'Hello World'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/some_effect.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/some_effect.js new file mode 100644 index 00000000000..4ca9b41c411 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/inner/some_effect.js @@ -0,0 +1 @@ +console.log('side-effect'); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-nested-export/main.js b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/main.js new file mode 100644 index 00000000000..ee0c7608365 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-nested-export/main.js @@ -0,0 +1 @@ +export * from './inner/index'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_config.js new file mode 100644 index 00000000000..157659436ee --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'imports and exports of non-entry points are tracked', + options: { + strictDeprecations: false, + input: 'main.js', + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/amd/dep2.js b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/amd/dep2.js new file mode 100644 index 00000000000..16210f80f24 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/amd/dep2.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + function foo() {} + + return foo; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/amd/main.js new file mode 100644 index 00000000000..085588168a4 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/amd/main.js @@ -0,0 +1,7 @@ +define(['./dep2'], function (dep2) { 'use strict'; + + + + return dep2; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/cjs/dep2.js b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/cjs/dep2.js new file mode 100644 index 00000000000..d356914dcc3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/cjs/dep2.js @@ -0,0 +1,5 @@ +'use strict'; + +function foo() {} + +module.exports = foo; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/cjs/main.js new file mode 100644 index 00000000000..663b040c9e7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/cjs/main.js @@ -0,0 +1,7 @@ +'use strict'; + +var dep2 = require('./dep2.js'); + + + +module.exports = dep2; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/es/dep2.js b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/es/dep2.js new file mode 100644 index 00000000000..e39ccfc8db2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/es/dep2.js @@ -0,0 +1,3 @@ +function foo() {} + +export default foo; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/es/main.js new file mode 100644 index 00000000000..845c1582956 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/es/main.js @@ -0,0 +1,2 @@ +import foo from './dep2.js'; +export { default } from './dep2.js'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/system/dep2.js b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/system/dep2.js new file mode 100644 index 00000000000..eb88d79aeda --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/system/dep2.js @@ -0,0 +1,12 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + exports('default', foo); + + function foo() {} + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/system/main.js new file mode 100644 index 00000000000..8f2d06a8f51 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/_expected/system/main.js @@ -0,0 +1,15 @@ +System.register(['./dep2.js'], function (exports) { + 'use strict'; + var foo; + return { + setters: [function (module) { + foo = module.default; + exports('default', module.default); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/dep1.js b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/dep1.js new file mode 100644 index 00000000000..2c5a157d2d8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/dep1.js @@ -0,0 +1 @@ +export { default } from './dep2'; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/dep2.js b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/dep2.js new file mode 100644 index 00000000000..a5e4ff3389d --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/dep2.js @@ -0,0 +1 @@ +export default function() {}; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/main.js b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/main.js new file mode 100644 index 00000000000..24640f29f7f --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-non-entry-imports/main.js @@ -0,0 +1,3 @@ +import foo from './dep1'; + +export default foo; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_config.js new file mode 100644 index 00000000000..19e53c11fe1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_config.js @@ -0,0 +1,9 @@ +module.exports = { + description: + 'correctly resolves imports via a proxy module as direct imports when preserving modules', + options: { + strictDeprecations: false, + preserveModules: true, + external: 'external' + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/amd/main.js new file mode 100644 index 00000000000..44f6509d271 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/amd/main.js @@ -0,0 +1,8 @@ +define(['external'], function (path) { 'use strict'; + + path = path && Object.prototype.hasOwnProperty.call(path, 'default') ? path['default'] : path; + + console.log(path.normalize('foo\\bar')); + console.log(path.normalize('foo\\bar')); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/amd/proxy.js b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/amd/proxy.js new file mode 100644 index 00000000000..5635775aa4b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/amd/proxy.js @@ -0,0 +1,9 @@ +define(['external'], function (path) { 'use strict'; + + path = path && Object.prototype.hasOwnProperty.call(path, 'default') ? path['default'] : path; + + + + return path; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/cjs/main.js new file mode 100644 index 00000000000..654e8af8d93 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/cjs/main.js @@ -0,0 +1,8 @@ +'use strict'; + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var path = _interopDefault(require('external')); + +console.log(path.normalize('foo\\bar')); +console.log(path.normalize('foo\\bar')); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/cjs/proxy.js b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/cjs/proxy.js new file mode 100644 index 00000000000..d19101d4b40 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/cjs/proxy.js @@ -0,0 +1,9 @@ +'use strict'; + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var path = _interopDefault(require('external')); + + + +module.exports = path; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/es/main.js new file mode 100644 index 00000000000..ce092ae39e2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/es/main.js @@ -0,0 +1,4 @@ +import path$1 from 'external'; + +console.log(path$1.normalize('foo\\bar')); +console.log(path$1.normalize('foo\\bar')); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/es/proxy.js b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/es/proxy.js new file mode 100644 index 00000000000..5e9a06a041a --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/es/proxy.js @@ -0,0 +1,2 @@ +import path$1 from 'external'; +export { default } from 'external'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/system/main.js new file mode 100644 index 00000000000..cdb1f31d2d8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/system/main.js @@ -0,0 +1,15 @@ +System.register(['external'], function () { + 'use strict'; + var path; + return { + setters: [function (module) { + path = module.default; + }], + execute: function () { + + console.log(path.normalize('foo\\bar')); + console.log(path.normalize('foo\\bar')); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/system/proxy.js b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/system/proxy.js new file mode 100644 index 00000000000..131f0eac764 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/_expected/system/proxy.js @@ -0,0 +1,15 @@ +System.register(['external'], function (exports) { + 'use strict'; + var path; + return { + setters: [function (module) { + path = module.default; + exports('default', module.default); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/main.js b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/main.js new file mode 100644 index 00000000000..288bd4a163c --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/main.js @@ -0,0 +1,5 @@ +import path from 'external'; +import proxyPath from './proxy'; + +console.log(path.normalize('foo\\bar')); +console.log(proxyPath.normalize('foo\\bar')); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/proxy.js b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/proxy.js new file mode 100644 index 00000000000..4635dc5b4a2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-proxy-import/proxy.js @@ -0,0 +1,2 @@ +import path from 'external'; +export default path; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_config.js new file mode 100644 index 00000000000..e71eaf513aa --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'change the module destination', + options: { + strictDeprecations: false, + input: 'src/lib/main.js', + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/amd/dep.js b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/amd/dep.js new file mode 100644 index 00000000000..93365a06219 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/amd/dep.js @@ -0,0 +1,11 @@ +define(['exports'], function (exports) { 'use strict'; + + function fn () { + console.log('dep fn'); + } + + exports.fn = fn; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/amd/lib/main.js b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/amd/lib/main.js new file mode 100644 index 00000000000..ff8eacced99 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/amd/lib/main.js @@ -0,0 +1,11 @@ +define(['../dep'], function (dep) { 'use strict'; + + class Main { + constructor () { + dep.fn(); + } + } + + return Main; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/cjs/dep.js b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/cjs/dep.js new file mode 100644 index 00000000000..b67a1e41d97 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/cjs/dep.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function fn () { + console.log('dep fn'); +} + +exports.fn = fn; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/cjs/lib/main.js b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/cjs/lib/main.js new file mode 100644 index 00000000000..fb6e31f3abc --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/cjs/lib/main.js @@ -0,0 +1,11 @@ +'use strict'; + +var dep = require('../dep.js'); + +class Main { + constructor () { + dep.fn(); + } +} + +module.exports = Main; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/es/dep.js b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/es/dep.js new file mode 100644 index 00000000000..bfe925a46ac --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/es/dep.js @@ -0,0 +1,5 @@ +function fn () { + console.log('dep fn'); +} + +export { fn }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/es/lib/main.js b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/es/lib/main.js new file mode 100644 index 00000000000..6285f240de1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/es/lib/main.js @@ -0,0 +1,9 @@ +import { fn } from '../dep.js'; + +class Main { + constructor () { + fn(); + } +} + +export default Main; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/system/dep.js b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/system/dep.js new file mode 100644 index 00000000000..3228f5b2991 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/system/dep.js @@ -0,0 +1,14 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + exports('fn', fn); + + function fn () { + console.log('dep fn'); + } + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/system/lib/main.js b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/system/lib/main.js new file mode 100644 index 00000000000..2c8238dca02 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/_expected/system/lib/main.js @@ -0,0 +1,18 @@ +System.register(['../dep.js'], function (exports) { + 'use strict'; + var fn; + return { + setters: [function (module) { + fn = module.fn; + }], + execute: function () { + + class Main { + constructor () { + fn(); + } + } exports('default', Main); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/src/dep.js b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/src/dep.js new file mode 100644 index 00000000000..b725c96e30d --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/src/dep.js @@ -0,0 +1,3 @@ +export function fn () { + console.log('dep fn'); +} \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/src/lib/main.js b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/src/lib/main.js new file mode 100644 index 00000000000..a8f1f1403a1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-reaching-outside/src/lib/main.js @@ -0,0 +1,7 @@ +import { fn } from '../dep'; + +export default class Main { + constructor () { + fn(); + } +} \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_config.js new file mode 100644 index 00000000000..c79966da224 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_config.js @@ -0,0 +1,27 @@ +const path = require('path'); + +module.exports = { + description: 'scriptified assets have extension in preserveModules output filename', + options: { + strictDeprecations: false, + input: 'src/main.js', + preserveModules: true, + plugins: [ + { + name: 'str-num-plugin', + transform(code, id) { + switch (path.extname(id)) { + case '.num': + return { code: `export default ${code.trim()}` }; + case '.str': + return { code: `export default "${code.trim()}"` }; + case '': + return { code: 'export default "COULDN\'T TRANSFORM"' }; + default: + return null; + } + } + } + ] + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/answer.num.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/answer.num.js new file mode 100644 index 00000000000..66a5b0c010f --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/answer.num.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var answer = 42; + + return answer; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/lorem.str.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/lorem.str.js new file mode 100644 index 00000000000..8aeeca012a0 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/lorem.str.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + + return lorem; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/main.js new file mode 100644 index 00000000000..889e72fdb24 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/main.js @@ -0,0 +1,11 @@ +define(['exports', './answer.num', './lorem.str', './no-ext'], function (exports, answer, lorem, noExt) { 'use strict'; + + + + exports.answer = answer; + exports.lorem = lorem; + exports.noExt = noExt; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/no-ext.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/no-ext.js new file mode 100644 index 00000000000..b60c10d9158 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/amd/no-ext.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var noExt = "COULDN'T TRANSFORM"; + + return noExt; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/answer.num.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/answer.num.js new file mode 100644 index 00000000000..afe78ce4015 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/answer.num.js @@ -0,0 +1,5 @@ +'use strict'; + +var answer = 42; + +module.exports = answer; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/lorem.str.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/lorem.str.js new file mode 100644 index 00000000000..aa3ea036c2f --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/lorem.str.js @@ -0,0 +1,5 @@ +'use strict'; + +var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + +module.exports = lorem; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/main.js new file mode 100644 index 00000000000..0c13700934e --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/main.js @@ -0,0 +1,13 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var answer = require('./answer.num.js'); +var lorem = require('./lorem.str.js'); +var noExt = require('./no-ext.js'); + + + +exports.answer = answer; +exports.lorem = lorem; +exports.noExt = noExt; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/no-ext.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/no-ext.js new file mode 100644 index 00000000000..912e8df3bfe --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/cjs/no-ext.js @@ -0,0 +1,5 @@ +'use strict'; + +var noExt = "COULDN'T TRANSFORM"; + +module.exports = noExt; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/answer.num.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/answer.num.js new file mode 100644 index 00000000000..b91051d4a13 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/answer.num.js @@ -0,0 +1,3 @@ +var answer = 42; + +export default answer; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/lorem.str.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/lorem.str.js new file mode 100644 index 00000000000..64a054f651b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/lorem.str.js @@ -0,0 +1,3 @@ +var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + +export default lorem; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/main.js new file mode 100644 index 00000000000..76d97e13ffd --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/main.js @@ -0,0 +1,3 @@ +export { default as answer } from './answer.num.js'; +export { default as lorem } from './lorem.str.js'; +export { default as noExt } from './no-ext.js'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/no-ext.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/no-ext.js new file mode 100644 index 00000000000..b1b723a7068 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/es/no-ext.js @@ -0,0 +1,3 @@ +var noExt = "COULDN'T TRANSFORM"; + +export default noExt; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/answer.num.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/answer.num.js new file mode 100644 index 00000000000..e897f1a3be2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/answer.num.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var answer = exports('default', 42); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/lorem.str.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/lorem.str.js new file mode 100644 index 00000000000..7ebf110f98b --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/lorem.str.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var lorem = exports('default', "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/main.js new file mode 100644 index 00000000000..57340411039 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/main.js @@ -0,0 +1,17 @@ +System.register(['./answer.num.js', './lorem.str.js', './no-ext.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('answer', module.default); + }, function (module) { + exports('lorem', module.default); + }, function (module) { + exports('noExt', module.default); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/no-ext.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/no-ext.js new file mode 100644 index 00000000000..bd0ec5a3c61 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/_expected/system/no-ext.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var noExt = exports('default', "COULDN'T TRANSFORM"); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/answer.num b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/answer.num new file mode 100644 index 00000000000..d81cc0710eb --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/answer.num @@ -0,0 +1 @@ +42 diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/lorem.str b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/lorem.str new file mode 100644 index 00000000000..1b376877f43 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/lorem.str @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/main.js b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/main.js new file mode 100644 index 00000000000..7ebfc9b7c45 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/main.js @@ -0,0 +1,3 @@ +export { default as answer } from './answer.num'; +export { default as lorem } from './lorem.str'; +export { default as noExt } from './no-ext'; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/no-ext b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/no-ext new file mode 100644 index 00000000000..ec25b34dbc2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-scriptified-assets/src/no-ext @@ -0,0 +1 @@ +WHATEVER diff --git a/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_config.js new file mode 100644 index 00000000000..2c68b2aa9fc --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'single entry names file correctly', + options: { + strictDeprecations: false, + input: 'main.js', + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/amd/main.js new file mode 100644 index 00000000000..799d8161ff5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(function () { 'use strict'; + + console.log(); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/cjs/main.js new file mode 100644 index 00000000000..21c7c3af005 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/cjs/main.js @@ -0,0 +1,3 @@ +'use strict'; + +console.log(); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/es/main.js new file mode 100644 index 00000000000..b7bd4c88516 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/es/main.js @@ -0,0 +1 @@ +console.log(); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/system/main.js new file mode 100644 index 00000000000..9c717dc8ff3 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-single-entry/_expected/system/main.js @@ -0,0 +1,10 @@ +System.register([], function () { + 'use strict'; + return { + execute: function () { + + console.log(); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-single-entry/main.js b/test/chunking-form/samples/deprecated/preserve-modules-single-entry/main.js new file mode 100644 index 00000000000..13ae9bfeec7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-single-entry/main.js @@ -0,0 +1 @@ +console.log() \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_config.js b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_config.js new file mode 100644 index 00000000000..f9785b99872 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_config.js @@ -0,0 +1,23 @@ +module.exports = { + description: 'Generates actual files for virtual modules when preserving modules', + options: { + strictDeprecations: false, + input: 'main.js', + preserveModules: true, + plugins: [ + { + resolveId(id) { + if (id === '\0virtualModule') return id; + }, + load(id) { + if (id !== '\0virtualModule') return null; + return 'export const virtual = "Virtual!";\n'; + }, + transform(code, id) { + if (id === '\0virtualModule') return null; + return 'import {virtual} from "\0virtualModule";\n' + code; + } + } + ] + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/amd/_virtual/_virtualModule b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/amd/_virtual/_virtualModule new file mode 100644 index 00000000000..e847f6c12b8 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/amd/_virtual/_virtualModule @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + const virtual = "Virtual!"; + + exports.virtual = virtual; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/amd/main.js b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/amd/main.js new file mode 100644 index 00000000000..452f5c4b435 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(['./_virtual/_virtualModule'], function (_virtualModule) { 'use strict'; + + assert.equal(_virtualModule.virtual, 'Virtual!'); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/cjs/_virtual/_virtualModule b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/cjs/_virtual/_virtualModule new file mode 100644 index 00000000000..3b40ebf67c2 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/cjs/_virtual/_virtualModule @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const virtual = "Virtual!"; + +exports.virtual = virtual; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/cjs/main.js b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/cjs/main.js new file mode 100644 index 00000000000..c32672f1b85 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/cjs/main.js @@ -0,0 +1,5 @@ +'use strict'; + +var _virtualModule = require('./_virtual/_virtualModule'); + +assert.equal(_virtualModule.virtual, 'Virtual!'); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/es/_virtual/_virtualModule b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/es/_virtual/_virtualModule new file mode 100644 index 00000000000..2bada18c396 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/es/_virtual/_virtualModule @@ -0,0 +1,3 @@ +const virtual = "Virtual!"; + +export { virtual }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/es/main.js b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/es/main.js new file mode 100644 index 00000000000..6bb75abdf27 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/es/main.js @@ -0,0 +1,3 @@ +import { virtual } from './_virtual/_virtualModule'; + +assert.equal(virtual, 'Virtual!'); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/system/_virtual/_virtualModule b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/system/_virtual/_virtualModule new file mode 100644 index 00000000000..2281d70c5a9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/system/_virtual/_virtualModule @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const virtual = exports('virtual', "Virtual!"); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/system/main.js b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/system/main.js new file mode 100644 index 00000000000..7b8b65e237d --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/_expected/system/main.js @@ -0,0 +1,14 @@ +System.register(['./_virtual/_virtualModule'], function () { + 'use strict'; + var virtual; + return { + setters: [function (module) { + virtual = module.virtual; + }], + execute: function () { + + assert.equal(virtual, 'Virtual!'); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/main.js b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/main.js new file mode 100644 index 00000000000..505982998fa --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules-virtual-modules/main.js @@ -0,0 +1 @@ +assert.equal(virtual, 'Virtual!'); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_config.js b/test/chunking-form/samples/deprecated/preserve-modules/_config.js new file mode 100644 index 00000000000..fb89b5a641c --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'Rewrite modules in-place', + options: { + strictDeprecations: false, + input: ['main1.js', 'main2.js'], + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/deps/dep1.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/deps/dep1.js new file mode 100644 index 00000000000..eb1b2814d87 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/deps/dep1.js @@ -0,0 +1,11 @@ +define(['exports'], function (exports) { 'use strict'; + + function fn () { + console.log('dep1 fn'); + } + + exports.fn = fn; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/deps/dep2.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/deps/dep2.js new file mode 100644 index 00000000000..2a152d376d9 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/deps/dep2.js @@ -0,0 +1,12 @@ +define(['exports', '../lib/lib2'], function (exports, lib2) { 'use strict'; + + function fn () { + lib2.fn(); + console.log('dep2 fn'); + } + + exports.fn = fn; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/deps/dep3.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/deps/dep3.js new file mode 100644 index 00000000000..bfc8f877c33 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/deps/dep3.js @@ -0,0 +1,12 @@ +define(['exports', '../lib/lib1'], function (exports, lib1) { 'use strict'; + + function fn () { + lib1.fn(); + console.log('dep3 fn'); + } + + exports.fn = fn; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/lib/lib1.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/lib/lib1.js new file mode 100644 index 00000000000..93c0a3a4169 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/lib/lib1.js @@ -0,0 +1,11 @@ +define(['exports'], function (exports) { 'use strict'; + + function fn () { + console.log('lib1 fn'); + } + + exports.fn = fn; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/lib/lib2.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/lib/lib2.js new file mode 100644 index 00000000000..8e8e2d17cdc --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/lib/lib2.js @@ -0,0 +1,11 @@ +define(['exports'], function (exports) { 'use strict'; + + function fn () { + console.log('lib2 fn'); + } + + exports.fn = fn; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/main1.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/main1.js new file mode 100644 index 00000000000..70e5862bab7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/main1.js @@ -0,0 +1,12 @@ +define(['./deps/dep1', './deps/dep2'], function (dep1, dep2) { 'use strict'; + + class Main1 { + constructor () { + dep1.fn(); + dep2.fn(); + } + } + + return Main1; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/main2.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/main2.js new file mode 100644 index 00000000000..b9dd02ca10c --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/amd/main2.js @@ -0,0 +1,12 @@ +define(['./deps/dep2', './deps/dep3'], function (dep2, dep3) { 'use strict'; + + class Main2 { + constructor () { + dep3.fn(); + dep2.fn(); + } + } + + return Main2; + +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/deps/dep1.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/deps/dep1.js new file mode 100644 index 00000000000..94bfa086430 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/deps/dep1.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function fn () { + console.log('dep1 fn'); +} + +exports.fn = fn; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/deps/dep2.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/deps/dep2.js new file mode 100644 index 00000000000..a9f8fb62635 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/deps/dep2.js @@ -0,0 +1,12 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var lib2 = require('../lib/lib2.js'); + +function fn () { + lib2.fn(); + console.log('dep2 fn'); +} + +exports.fn = fn; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/deps/dep3.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/deps/dep3.js new file mode 100644 index 00000000000..eb901c61adc --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/deps/dep3.js @@ -0,0 +1,12 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var lib1 = require('../lib/lib1.js'); + +function fn () { + lib1.fn(); + console.log('dep3 fn'); +} + +exports.fn = fn; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/lib/lib1.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/lib/lib1.js new file mode 100644 index 00000000000..135c3023fcc --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/lib/lib1.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function fn () { + console.log('lib1 fn'); +} + +exports.fn = fn; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/lib/lib2.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/lib/lib2.js new file mode 100644 index 00000000000..ee3ad249352 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/lib/lib2.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function fn () { + console.log('lib2 fn'); +} + +exports.fn = fn; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/main1.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/main1.js new file mode 100644 index 00000000000..0181b38e214 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/main1.js @@ -0,0 +1,13 @@ +'use strict'; + +var dep1 = require('./deps/dep1.js'); +var dep2 = require('./deps/dep2.js'); + +class Main1 { + constructor () { + dep1.fn(); + dep2.fn(); + } +} + +module.exports = Main1; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/main2.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/main2.js new file mode 100644 index 00000000000..5078fc7854f --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/cjs/main2.js @@ -0,0 +1,13 @@ +'use strict'; + +var dep2 = require('./deps/dep2.js'); +var dep3 = require('./deps/dep3.js'); + +class Main2 { + constructor () { + dep3.fn(); + dep2.fn(); + } +} + +module.exports = Main2; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/deps/dep1.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/deps/dep1.js new file mode 100644 index 00000000000..34a5e9c11a5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/deps/dep1.js @@ -0,0 +1,5 @@ +function fn () { + console.log('dep1 fn'); +} + +export { fn }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/deps/dep2.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/deps/dep2.js new file mode 100644 index 00000000000..233b8235a07 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/deps/dep2.js @@ -0,0 +1,8 @@ +import { fn as fn$1 } from '../lib/lib2.js'; + +function fn () { + fn$1(); + console.log('dep2 fn'); +} + +export { fn }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/deps/dep3.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/deps/dep3.js new file mode 100644 index 00000000000..e01b47ef194 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/deps/dep3.js @@ -0,0 +1,8 @@ +import { fn as fn$1 } from '../lib/lib1.js'; + +function fn () { + fn$1(); + console.log('dep3 fn'); +} + +export { fn }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/lib/lib1.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/lib/lib1.js new file mode 100644 index 00000000000..0d869dbec7d --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/lib/lib1.js @@ -0,0 +1,5 @@ +function fn () { + console.log('lib1 fn'); +} + +export { fn }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/lib/lib2.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/lib/lib2.js new file mode 100644 index 00000000000..a6f4f0324f1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/lib/lib2.js @@ -0,0 +1,5 @@ +function fn () { + console.log('lib2 fn'); +} + +export { fn }; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/main1.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/main1.js new file mode 100644 index 00000000000..db71b463402 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/main1.js @@ -0,0 +1,11 @@ +import { fn } from './deps/dep1.js'; +import { fn as fn$1 } from './deps/dep2.js'; + +class Main1 { + constructor () { + fn(); + fn$1(); + } +} + +export default Main1; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/main2.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/main2.js new file mode 100644 index 00000000000..a3b4ef89ff7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/es/main2.js @@ -0,0 +1,11 @@ +import { fn as fn$1 } from './deps/dep2.js'; +import { fn } from './deps/dep3.js'; + +class Main2 { + constructor () { + fn(); + fn$1(); + } +} + +export default Main2; diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/deps/dep1.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/deps/dep1.js new file mode 100644 index 00000000000..813157baf2d --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/deps/dep1.js @@ -0,0 +1,14 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + exports('fn', fn); + + function fn () { + console.log('dep1 fn'); + } + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/deps/dep2.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/deps/dep2.js new file mode 100644 index 00000000000..e659b606bfb --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/deps/dep2.js @@ -0,0 +1,19 @@ +System.register(['../lib/lib2.js'], function (exports) { + 'use strict'; + var fn$1; + return { + setters: [function (module) { + fn$1 = module.fn; + }], + execute: function () { + + exports('fn', fn); + + function fn () { + fn$1(); + console.log('dep2 fn'); + } + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/deps/dep3.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/deps/dep3.js new file mode 100644 index 00000000000..bd88b3e2d36 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/deps/dep3.js @@ -0,0 +1,19 @@ +System.register(['../lib/lib1.js'], function (exports) { + 'use strict'; + var fn$1; + return { + setters: [function (module) { + fn$1 = module.fn; + }], + execute: function () { + + exports('fn', fn); + + function fn () { + fn$1(); + console.log('dep3 fn'); + } + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/lib/lib1.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/lib/lib1.js new file mode 100644 index 00000000000..744d84434d7 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/lib/lib1.js @@ -0,0 +1,14 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + exports('fn', fn); + + function fn () { + console.log('lib1 fn'); + } + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/lib/lib2.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/lib/lib2.js new file mode 100644 index 00000000000..b27f09d18bd --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/lib/lib2.js @@ -0,0 +1,14 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + exports('fn', fn); + + function fn () { + console.log('lib2 fn'); + } + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/main1.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/main1.js new file mode 100644 index 00000000000..17f7ddb453e --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/main1.js @@ -0,0 +1,21 @@ +System.register(['./deps/dep1.js', './deps/dep2.js'], function (exports) { + 'use strict'; + var fn, fn$1; + return { + setters: [function (module) { + fn = module.fn; + }, function (module) { + fn$1 = module.fn; + }], + execute: function () { + + class Main1 { + constructor () { + fn(); + fn$1(); + } + } exports('default', Main1); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/main2.js b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/main2.js new file mode 100644 index 00000000000..4833f43826d --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/_expected/system/main2.js @@ -0,0 +1,21 @@ +System.register(['./deps/dep2.js', './deps/dep3.js'], function (exports) { + 'use strict'; + var fn$1, fn; + return { + setters: [function (module) { + fn$1 = module.fn; + }, function (module) { + fn = module.fn; + }], + execute: function () { + + class Main2 { + constructor () { + fn(); + fn$1(); + } + } exports('default', Main2); + + } + }; +}); diff --git a/test/chunking-form/samples/deprecated/preserve-modules/deps/dep1.js b/test/chunking-form/samples/deprecated/preserve-modules/deps/dep1.js new file mode 100644 index 00000000000..b67d0bbb2c1 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/deps/dep1.js @@ -0,0 +1,3 @@ +export function fn () { + console.log('dep1 fn'); +} \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules/deps/dep2.js b/test/chunking-form/samples/deprecated/preserve-modules/deps/dep2.js new file mode 100644 index 00000000000..031534c44bb --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/deps/dep2.js @@ -0,0 +1,6 @@ +import { fn as libfn } from '../lib/lib2.js'; + +export function fn () { + libfn(); + console.log('dep2 fn'); +} \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules/deps/dep3.js b/test/chunking-form/samples/deprecated/preserve-modules/deps/dep3.js new file mode 100644 index 00000000000..0ebd9320bc6 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/deps/dep3.js @@ -0,0 +1,8 @@ +import { fn as libfn, treeshaked } from '../lib/lib1.js'; + +export function fn () { + libfn(); + console.log('dep3 fn'); +} + +export default treeshaked; \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules/lib/lib1.js b/test/chunking-form/samples/deprecated/preserve-modules/lib/lib1.js new file mode 100644 index 00000000000..5ccf83b357e --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/lib/lib1.js @@ -0,0 +1,7 @@ +export function fn () { + console.log('lib1 fn'); +} + +export function treeshaked () { + console.log('this is tree shaken!'); +} \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules/lib/lib2.js b/test/chunking-form/samples/deprecated/preserve-modules/lib/lib2.js new file mode 100644 index 00000000000..2d6d2cf0852 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/lib/lib2.js @@ -0,0 +1,3 @@ +export function fn () { + console.log('lib2 fn'); +} \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules/main1.js b/test/chunking-form/samples/deprecated/preserve-modules/main1.js new file mode 100644 index 00000000000..dfbcdf631e5 --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/main1.js @@ -0,0 +1,9 @@ +import { fn } from './deps/dep1.js'; +import { fn as fn2 } from './deps/dep2.js'; + +export default class Main1 { + constructor () { + fn(); + fn2(); + } +} \ No newline at end of file diff --git a/test/chunking-form/samples/deprecated/preserve-modules/main2.js b/test/chunking-form/samples/deprecated/preserve-modules/main2.js new file mode 100644 index 00000000000..67202404b6a --- /dev/null +++ b/test/chunking-form/samples/deprecated/preserve-modules/main2.js @@ -0,0 +1,13 @@ +import { fn } from './deps/dep2.js'; +import { fn as fn2, default as treeshaked } from './deps/dep3.js'; + +if (false) { + treeshaked(); +} + +export default class Main2 { + constructor () { + fn2(); + fn(); + } +} \ No newline at end of file diff --git a/test/chunking-form/samples/dynamic-import-inlining-object/_config.js b/test/chunking-form/samples/dynamic-import-inlining-object/_config.js index 5adf9230f61..7dec64bfdc0 100644 --- a/test/chunking-form/samples/dynamic-import-inlining-object/_config.js +++ b/test/chunking-form/samples/dynamic-import-inlining-object/_config.js @@ -1,7 +1,7 @@ module.exports = { description: 'supports an object with a single entry when inlining dynamic imports', options: { - inlineDynamicImports: true, + output: { inlineDynamicImports: true }, input: { entry: 'main' } } }; diff --git a/test/chunking-form/samples/indirect-reexports-preserve-modules/_config.js b/test/chunking-form/samples/indirect-reexports-preserve-modules/_config.js index 9d663da377f..e2616fe4ab7 100644 --- a/test/chunking-form/samples/indirect-reexports-preserve-modules/_config.js +++ b/test/chunking-form/samples/indirect-reexports-preserve-modules/_config.js @@ -2,7 +2,6 @@ module.exports = { description: 'does not drop indirect reexports when preserving modules', expectedWarnings: ['MIXED_EXPORTS'], options: { - output: { name: 'bundle' }, - preserveModules: true + output: { name: 'bundle', preserveModules: true } } }; diff --git a/test/chunking-form/samples/missing-export-reused-deconflicting/_config.js b/test/chunking-form/samples/missing-export-reused-deconflicting/_config.js index 6244f66663a..fa8ef996a91 100644 --- a/test/chunking-form/samples/missing-export-reused-deconflicting/_config.js +++ b/test/chunking-form/samples/missing-export-reused-deconflicting/_config.js @@ -3,7 +3,7 @@ module.exports = { expectedWarnings: ['SHIMMED_EXPORT'], options: { input: ['main.js'], - preserveModules: true, - shimMissingExports: true + shimMissingExports: true, + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-auto-export-mode/_config.js b/test/chunking-form/samples/preserve-modules-auto-export-mode/_config.js index 647ad33e23b..7afad981a92 100644 --- a/test/chunking-form/samples/preserve-modules-auto-export-mode/_config.js +++ b/test/chunking-form/samples/preserve-modules-auto-export-mode/_config.js @@ -2,6 +2,6 @@ module.exports = { description: 'Uses entry point semantics for all files when preserving modules', options: { input: 'main.js', - preserveModules: true + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-commonjs/_config.js b/test/chunking-form/samples/preserve-modules-commonjs/_config.js index 98966ed2bcf..c748f85794d 100644 --- a/test/chunking-form/samples/preserve-modules-commonjs/_config.js +++ b/test/chunking-form/samples/preserve-modules-commonjs/_config.js @@ -5,8 +5,8 @@ module.exports = { expectedWarnings: ['MIXED_EXPORTS'], options: { input: 'main.js', - preserveModules: true, external: ['external'], - plugins: [commonjs()] + plugins: [commonjs()], + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-dynamic-imports/_config.js b/test/chunking-form/samples/preserve-modules-dynamic-imports/_config.js index 798b10bf38f..cd38717b589 100644 --- a/test/chunking-form/samples/preserve-modules-dynamic-imports/_config.js +++ b/test/chunking-form/samples/preserve-modules-dynamic-imports/_config.js @@ -2,6 +2,6 @@ module.exports = { description: 'dynamic imports are handled correctly when preserving modules', options: { input: ['main.js'], - preserveModules: true + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-dynamic-namespace/_config.js b/test/chunking-form/samples/preserve-modules-dynamic-namespace/_config.js index 01cb359eb12..10c317cd8fc 100644 --- a/test/chunking-form/samples/preserve-modules-dynamic-namespace/_config.js +++ b/test/chunking-form/samples/preserve-modules-dynamic-namespace/_config.js @@ -2,6 +2,6 @@ module.exports = { description: 'Preserve modules properly handles internal namespace imports (#2576)', options: { input: ['main.js'], - preserveModules: true + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-empty/_config.js b/test/chunking-form/samples/preserve-modules-empty/_config.js index 40a998bf69b..7b9d517b336 100644 --- a/test/chunking-form/samples/preserve-modules-empty/_config.js +++ b/test/chunking-form/samples/preserve-modules-empty/_config.js @@ -2,6 +2,6 @@ module.exports = { description: 'Preserve modules remove empty dependencies', options: { input: 'main.js', - preserveModules: true + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-export-alias/_config.js b/test/chunking-form/samples/preserve-modules-export-alias/_config.js index 5b0d222a443..9c422ba3d6d 100644 --- a/test/chunking-form/samples/preserve-modules-export-alias/_config.js +++ b/test/chunking-form/samples/preserve-modules-export-alias/_config.js @@ -2,6 +2,6 @@ module.exports = { description: 'confirm export aliases are preserved in modules', options: { input: ['main1.js', 'main2.js'], - preserveModules: true + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-filename-pattern/_config.js b/test/chunking-form/samples/preserve-modules-filename-pattern/_config.js index 6322a7ba3d0..f8e36cb7cbd 100644 --- a/test/chunking-form/samples/preserve-modules-filename-pattern/_config.js +++ b/test/chunking-form/samples/preserve-modules-filename-pattern/_config.js @@ -3,8 +3,8 @@ module.exports = { options: { input: 'src/main.ts', output: { - entryFileNames: 'entry-[name]-[format]-[ext][extname].js' - }, - preserveModules: true + entryFileNames: 'entry-[name]-[format]-[ext][extname].js', + preserveModules: true + } } }; diff --git a/test/chunking-form/samples/preserve-modules-id-case-sensitive/_config.js b/test/chunking-form/samples/preserve-modules-id-case-sensitive/_config.js index 85f8e574fd6..7650f6f19b0 100644 --- a/test/chunking-form/samples/preserve-modules-id-case-sensitive/_config.js +++ b/test/chunking-form/samples/preserve-modules-id-case-sensitive/_config.js @@ -2,7 +2,7 @@ module.exports = { description: 'Preserve modules id case sensitive', options: { input: 'main.js', - preserveModules: true, + output: { preserveModules: true }, plugins: [ { resolveId(id) { diff --git a/test/chunking-form/samples/preserve-modules-named-export-mode/_config.js b/test/chunking-form/samples/preserve-modules-named-export-mode/_config.js index edad038168f..0ad8d5aad54 100644 --- a/test/chunking-form/samples/preserve-modules-named-export-mode/_config.js +++ b/test/chunking-form/samples/preserve-modules-named-export-mode/_config.js @@ -2,9 +2,9 @@ module.exports = { description: 'respects "named" export mode in all chunks when preserving modules', options: { input: 'main.js', - preserveModules: true, output: { - exports: 'named' + exports: 'named', + preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_config.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_config.js index 650ae278b0d..209f77d87a8 100644 --- a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_config.js +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_config.js @@ -2,6 +2,6 @@ module.exports = { description: 'confirm exports are deconflicted when exporting nested index aliases', options: { input: 'main.js', - preserveModules: true + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_config.js b/test/chunking-form/samples/preserve-modules-nested-export/_config.js index 454bc294b9b..f2cdd1cc149 100644 --- a/test/chunking-form/samples/preserve-modules-nested-export/_config.js +++ b/test/chunking-form/samples/preserve-modules-nested-export/_config.js @@ -2,6 +2,6 @@ module.exports = { description: 'confirm exports are preserved when exporting a module', options: { input: 'main.js', - preserveModules: true + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-non-entry-imports/_config.js b/test/chunking-form/samples/preserve-modules-non-entry-imports/_config.js index c5fa075124d..732fa455ebe 100644 --- a/test/chunking-form/samples/preserve-modules-non-entry-imports/_config.js +++ b/test/chunking-form/samples/preserve-modules-non-entry-imports/_config.js @@ -2,6 +2,6 @@ module.exports = { description: 'imports and exports of non-entry points are tracked', options: { input: 'main.js', - preserveModules: true + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-proxy-import/_config.js b/test/chunking-form/samples/preserve-modules-proxy-import/_config.js index e14c8b8d0bd..23a87ffcbec 100644 --- a/test/chunking-form/samples/preserve-modules-proxy-import/_config.js +++ b/test/chunking-form/samples/preserve-modules-proxy-import/_config.js @@ -2,7 +2,7 @@ module.exports = { description: 'correctly resolves imports via a proxy module as direct imports when preserving modules', options: { - preserveModules: true, - external: 'external' + external: 'external', + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-reaching-outside/_config.js b/test/chunking-form/samples/preserve-modules-reaching-outside/_config.js index ac0a33eec3d..61fa9b612c1 100644 --- a/test/chunking-form/samples/preserve-modules-reaching-outside/_config.js +++ b/test/chunking-form/samples/preserve-modules-reaching-outside/_config.js @@ -2,6 +2,6 @@ module.exports = { description: 'change the module destination', options: { input: 'src/lib/main.js', - preserveModules: true + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-scriptified-assets/_config.js b/test/chunking-form/samples/preserve-modules-scriptified-assets/_config.js index 0cd10867ec0..6022c27f9cf 100644 --- a/test/chunking-form/samples/preserve-modules-scriptified-assets/_config.js +++ b/test/chunking-form/samples/preserve-modules-scriptified-assets/_config.js @@ -4,7 +4,7 @@ module.exports = { description: 'scriptified assets have extension in preserveModules output filename', options: { input: 'src/main.js', - preserveModules: true, + output: { preserveModules: true }, plugins: [ { name: 'str-num-plugin', diff --git a/test/chunking-form/samples/preserve-modules-single-entry/_config.js b/test/chunking-form/samples/preserve-modules-single-entry/_config.js index 0a48e7f9c8b..05ac0170147 100644 --- a/test/chunking-form/samples/preserve-modules-single-entry/_config.js +++ b/test/chunking-form/samples/preserve-modules-single-entry/_config.js @@ -2,6 +2,6 @@ module.exports = { description: 'single entry names file correctly', options: { input: 'main.js', - preserveModules: true + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/preserve-modules-virtual-modules/_config.js b/test/chunking-form/samples/preserve-modules-virtual-modules/_config.js index 71765b9a4bf..bd10fa0ad02 100644 --- a/test/chunking-form/samples/preserve-modules-virtual-modules/_config.js +++ b/test/chunking-form/samples/preserve-modules-virtual-modules/_config.js @@ -2,7 +2,7 @@ module.exports = { description: 'Generates actual files for virtual modules when preserving modules', options: { input: 'main.js', - preserveModules: true, + output: { preserveModules: true }, plugins: [ { resolveId(id) { diff --git a/test/chunking-form/samples/preserve-modules/_config.js b/test/chunking-form/samples/preserve-modules/_config.js index 7c666fc33ab..54d9611466a 100644 --- a/test/chunking-form/samples/preserve-modules/_config.js +++ b/test/chunking-form/samples/preserve-modules/_config.js @@ -2,6 +2,6 @@ module.exports = { description: 'Rewrite modules in-place', options: { input: ['main1.js', 'main2.js'], - preserveModules: true + output: { preserveModules: true } } }; diff --git a/test/chunking-form/samples/side-effect-free-dependencies/avoid-imports-preserve-modules/_config.js b/test/chunking-form/samples/side-effect-free-dependencies/avoid-imports-preserve-modules/_config.js index e3fdb18ef33..48c8a85b3ff 100644 --- a/test/chunking-form/samples/side-effect-free-dependencies/avoid-imports-preserve-modules/_config.js +++ b/test/chunking-form/samples/side-effect-free-dependencies/avoid-imports-preserve-modules/_config.js @@ -2,6 +2,6 @@ module.exports = { description: 'avoids empty imports if they do not have side-effects when preserving modules (#3359)', options: { - preserveModules: true + output: { preserveModules: true } } }; diff --git a/test/form/samples/deprecated/dynamic-import-inlining-array/_config.js b/test/form/samples/deprecated/dynamic-import-inlining-array/_config.js new file mode 100644 index 00000000000..5f4382d6a8b --- /dev/null +++ b/test/form/samples/deprecated/dynamic-import-inlining-array/_config.js @@ -0,0 +1,8 @@ +module.exports = { + description: 'supports an array with a single entry when inlining dynamic imports', + options: { + strictDeprecations: false, + inlineDynamicImports: true, + input: ['main'] + } +}; diff --git a/test/form/samples/deprecated/dynamic-import-inlining-array/_expected.js b/test/form/samples/deprecated/dynamic-import-inlining-array/_expected.js new file mode 100644 index 00000000000..ae434046e6c --- /dev/null +++ b/test/form/samples/deprecated/dynamic-import-inlining-array/_expected.js @@ -0,0 +1,11 @@ +const bar = 2; +Promise.resolve().then(function () { return foo$1; }); + +const foo = 1; + +var foo$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + foo: foo +}); + +export { bar }; diff --git a/test/form/samples/deprecated/dynamic-import-inlining-array/foo.js b/test/form/samples/deprecated/dynamic-import-inlining-array/foo.js new file mode 100644 index 00000000000..6a8018af412 --- /dev/null +++ b/test/form/samples/deprecated/dynamic-import-inlining-array/foo.js @@ -0,0 +1 @@ +export const foo = 1; \ No newline at end of file diff --git a/test/form/samples/deprecated/dynamic-import-inlining-array/main.js b/test/form/samples/deprecated/dynamic-import-inlining-array/main.js new file mode 100644 index 00000000000..ee3e6a770d6 --- /dev/null +++ b/test/form/samples/deprecated/dynamic-import-inlining-array/main.js @@ -0,0 +1,2 @@ +export const bar = 2; +import('./foo.js'); diff --git a/test/form/samples/deprecated/dynamic-import-inlining/_config.js b/test/form/samples/deprecated/dynamic-import-inlining/_config.js new file mode 100644 index 00000000000..42be3fab8a0 --- /dev/null +++ b/test/form/samples/deprecated/dynamic-import-inlining/_config.js @@ -0,0 +1,7 @@ +module.exports = { + description: 'dynamic import inlining', + options: { + strictDeprecations: false, + inlineDynamicImports: true + } +}; diff --git a/test/form/samples/deprecated/dynamic-import-inlining/_expected.js b/test/form/samples/deprecated/dynamic-import-inlining/_expected.js new file mode 100644 index 00000000000..ae434046e6c --- /dev/null +++ b/test/form/samples/deprecated/dynamic-import-inlining/_expected.js @@ -0,0 +1,11 @@ +const bar = 2; +Promise.resolve().then(function () { return foo$1; }); + +const foo = 1; + +var foo$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + foo: foo +}); + +export { bar }; diff --git a/test/form/samples/deprecated/dynamic-import-inlining/foo.js b/test/form/samples/deprecated/dynamic-import-inlining/foo.js new file mode 100644 index 00000000000..6a8018af412 --- /dev/null +++ b/test/form/samples/deprecated/dynamic-import-inlining/foo.js @@ -0,0 +1 @@ +export const foo = 1; \ No newline at end of file diff --git a/test/form/samples/deprecated/dynamic-import-inlining/main.js b/test/form/samples/deprecated/dynamic-import-inlining/main.js new file mode 100644 index 00000000000..ee3e6a770d6 --- /dev/null +++ b/test/form/samples/deprecated/dynamic-import-inlining/main.js @@ -0,0 +1,2 @@ +export const bar = 2; +import('./foo.js'); diff --git a/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_config.js b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_config.js new file mode 100644 index 00000000000..70a30536aa8 --- /dev/null +++ b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_config.js @@ -0,0 +1,7 @@ +module.exports = { + description: 'completely removes tree-shaken dynamic imports ', + options: { + strictDeprecations: false, + inlineDynamicImports: true + } +}; diff --git a/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/amd.js b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/amd.js new file mode 100644 index 00000000000..126aa22ee83 --- /dev/null +++ b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/amd.js @@ -0,0 +1,5 @@ +define(function () { 'use strict'; + + console.log('main'); + +}); diff --git a/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/cjs.js b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/cjs.js new file mode 100644 index 00000000000..d0ed06d8c90 --- /dev/null +++ b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/cjs.js @@ -0,0 +1,3 @@ +'use strict'; + +console.log('main'); diff --git a/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/es.js b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/es.js new file mode 100644 index 00000000000..c0b933d7b56 --- /dev/null +++ b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/es.js @@ -0,0 +1 @@ +console.log('main'); diff --git a/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/iife.js b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/iife.js new file mode 100644 index 00000000000..d283cbce8ba --- /dev/null +++ b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/iife.js @@ -0,0 +1,6 @@ +(function () { + 'use strict'; + + console.log('main'); + +}()); diff --git a/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/system.js b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/system.js new file mode 100644 index 00000000000..c83499bc2d4 --- /dev/null +++ b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/system.js @@ -0,0 +1,10 @@ +System.register([], function () { + 'use strict'; + return { + execute: function () { + + console.log('main'); + + } + }; +}); diff --git a/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/umd.js b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/umd.js new file mode 100644 index 00000000000..f69e11c0256 --- /dev/null +++ b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/_expected/umd.js @@ -0,0 +1,8 @@ +(function (factory) { + typeof define === 'function' && define.amd ? define(factory) : + factory(); +}((function () { 'use strict'; + + console.log('main'); + +}))); diff --git a/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/dynamic.js b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/dynamic.js new file mode 100644 index 00000000000..1d7a1acc1b8 --- /dev/null +++ b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/dynamic.js @@ -0,0 +1,2 @@ +console.log('dynamic'); +export var dynamic = 42; diff --git a/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/main.js b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/main.js new file mode 100644 index 00000000000..9b0aad2c210 --- /dev/null +++ b/test/form/samples/deprecated/inlined-treeshaken-dynamic-import/main.js @@ -0,0 +1,2 @@ +console.log('main'); +const getFoo = () => import('./dynamic.js'); diff --git a/test/form/samples/deprecated/nested-inlined-dynamic-import/_config.js b/test/form/samples/deprecated/nested-inlined-dynamic-import/_config.js new file mode 100644 index 00000000000..b72d8e62afc --- /dev/null +++ b/test/form/samples/deprecated/nested-inlined-dynamic-import/_config.js @@ -0,0 +1,7 @@ +module.exports = { + description: 'deconflicts variables when nested dynamic imports are inlined', + options: { + strictDeprecations: false, + inlineDynamicImports: true + } +}; diff --git a/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/amd.js b/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/amd.js new file mode 100644 index 00000000000..83e0443cf4b --- /dev/null +++ b/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/amd.js @@ -0,0 +1,18 @@ +define(function () { 'use strict'; + + async function main() { + const foo$1 = 1; + const ns = await Promise.resolve().then(function () { return foo; }); + console.log(ns.value + foo$1); + } + + main(); + + const value = 42; + + var foo = /*#__PURE__*/Object.freeze({ + __proto__: null, + value: value + }); + +}); diff --git a/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/cjs.js b/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/cjs.js new file mode 100644 index 00000000000..9226d1268d7 --- /dev/null +++ b/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/cjs.js @@ -0,0 +1,16 @@ +'use strict'; + +async function main() { + const foo$1 = 1; + const ns = await Promise.resolve().then(function () { return foo; }); + console.log(ns.value + foo$1); +} + +main(); + +const value = 42; + +var foo = /*#__PURE__*/Object.freeze({ + __proto__: null, + value: value +}); diff --git a/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/es.js b/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/es.js new file mode 100644 index 00000000000..97b0b8e51f5 --- /dev/null +++ b/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/es.js @@ -0,0 +1,14 @@ +async function main() { + const foo$1 = 1; + const ns = await Promise.resolve().then(function () { return foo; }); + console.log(ns.value + foo$1); +} + +main(); + +const value = 42; + +var foo = /*#__PURE__*/Object.freeze({ + __proto__: null, + value: value +}); diff --git a/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/iife.js b/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/iife.js new file mode 100644 index 00000000000..6a2dd7b2aaa --- /dev/null +++ b/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/iife.js @@ -0,0 +1,19 @@ +(function () { + 'use strict'; + + async function main() { + const foo$1 = 1; + const ns = await Promise.resolve().then(function () { return foo; }); + console.log(ns.value + foo$1); + } + + main(); + + const value = 42; + + var foo = /*#__PURE__*/Object.freeze({ + __proto__: null, + value: value + }); + +}()); diff --git a/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/system.js b/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/system.js new file mode 100644 index 00000000000..a11234126c3 --- /dev/null +++ b/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/system.js @@ -0,0 +1,23 @@ +System.register([], function () { + 'use strict'; + return { + execute: function () { + + async function main() { + const foo$1 = 1; + const ns = await Promise.resolve().then(function () { return foo; }); + console.log(ns.value + foo$1); + } + + main(); + + const value = 42; + + var foo = /*#__PURE__*/Object.freeze({ + __proto__: null, + value: value + }); + + } + }; +}); diff --git a/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/umd.js b/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/umd.js new file mode 100644 index 00000000000..04bde1cc42f --- /dev/null +++ b/test/form/samples/deprecated/nested-inlined-dynamic-import/_expected/umd.js @@ -0,0 +1,21 @@ +(function (factory) { + typeof define === 'function' && define.amd ? define(factory) : + factory(); +}((function () { 'use strict'; + + async function main() { + const foo$1 = 1; + const ns = await Promise.resolve().then(function () { return foo; }); + console.log(ns.value + foo$1); + } + + main(); + + const value = 42; + + var foo = /*#__PURE__*/Object.freeze({ + __proto__: null, + value: value + }); + +}))); diff --git a/test/form/samples/deprecated/nested-inlined-dynamic-import/foo.js b/test/form/samples/deprecated/nested-inlined-dynamic-import/foo.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/form/samples/deprecated/nested-inlined-dynamic-import/foo.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/form/samples/deprecated/nested-inlined-dynamic-import/main.js b/test/form/samples/deprecated/nested-inlined-dynamic-import/main.js new file mode 100644 index 00000000000..685c5cc1aef --- /dev/null +++ b/test/form/samples/deprecated/nested-inlined-dynamic-import/main.js @@ -0,0 +1,7 @@ +async function main() { + const foo = 1; + const ns = await import('./foo.js'); + console.log(ns.value + foo); +} + +main(); diff --git a/test/form/samples/dynamic-import-inlining-array/_config.js b/test/form/samples/dynamic-import-inlining-array/_config.js index f426fa668a1..81ad9e51008 100644 --- a/test/form/samples/dynamic-import-inlining-array/_config.js +++ b/test/form/samples/dynamic-import-inlining-array/_config.js @@ -1,7 +1,7 @@ module.exports = { description: 'supports an array with a single entry when inlining dynamic imports', options: { - inlineDynamicImports: true, + output: { inlineDynamicImports: true }, input: ['main'] } }; diff --git a/test/form/samples/dynamic-import-inlining/_config.js b/test/form/samples/dynamic-import-inlining/_config.js index a83eaef5244..7e80cf62b7f 100644 --- a/test/form/samples/dynamic-import-inlining/_config.js +++ b/test/form/samples/dynamic-import-inlining/_config.js @@ -1,6 +1,6 @@ module.exports = { description: 'dynamic import inlining', options: { - inlineDynamicImports: true + output: { inlineDynamicImports: true } } }; diff --git a/test/form/samples/inlined-treeshaken-dynamic-import/_config.js b/test/form/samples/inlined-treeshaken-dynamic-import/_config.js index b5257d549c5..1703f4c9c1f 100644 --- a/test/form/samples/inlined-treeshaken-dynamic-import/_config.js +++ b/test/form/samples/inlined-treeshaken-dynamic-import/_config.js @@ -1,6 +1,6 @@ module.exports = { description: 'completely removes tree-shaken dynamic imports ', options: { - inlineDynamicImports: true + output: { inlineDynamicImports: true } } }; diff --git a/test/form/samples/nested-inlined-dynamic-import/_config.js b/test/form/samples/nested-inlined-dynamic-import/_config.js index 86e5a2e6ddf..11403c10e01 100644 --- a/test/form/samples/nested-inlined-dynamic-import/_config.js +++ b/test/form/samples/nested-inlined-dynamic-import/_config.js @@ -1,6 +1,6 @@ module.exports = { description: 'deconflicts variables when nested dynamic imports are inlined', options: { - inlineDynamicImports: true + output: { inlineDynamicImports: true } } }; diff --git a/test/function/samples/deprecated/dynamic-import-duplicates/_config.js b/test/function/samples/deprecated/dynamic-import-duplicates/_config.js new file mode 100644 index 00000000000..c71c26f5b04 --- /dev/null +++ b/test/function/samples/deprecated/dynamic-import-duplicates/_config.js @@ -0,0 +1,15 @@ +const assert = require('assert'); + +module.exports = { + description: 'Dynamic import inlining', + options: { + strictDeprecations: false, + inlineDynamicImports: true + }, + exports(exports) { + assert.equal(exports.x, 41); + return exports.promise.then(y => { + assert.equal(y, 42); + }); + } +}; diff --git a/test/function/samples/deprecated/dynamic-import-duplicates/foo.js b/test/function/samples/deprecated/dynamic-import-duplicates/foo.js new file mode 100644 index 00000000000..ddb14e1522c --- /dev/null +++ b/test/function/samples/deprecated/dynamic-import-duplicates/foo.js @@ -0,0 +1 @@ +export var x = 42; \ No newline at end of file diff --git a/test/function/samples/deprecated/dynamic-import-duplicates/main.js b/test/function/samples/deprecated/dynamic-import-duplicates/main.js new file mode 100644 index 00000000000..37a427d7d1a --- /dev/null +++ b/test/function/samples/deprecated/dynamic-import-duplicates/main.js @@ -0,0 +1,5 @@ +export var x = 41; + +export var promise = Promise.all([import('./foo'), import('./foo')]).then(foos => { + return foos[0].x; +}); diff --git a/test/function/samples/deprecated/dynamic-import-inlining/_config.js b/test/function/samples/deprecated/dynamic-import-inlining/_config.js new file mode 100644 index 00000000000..c71c26f5b04 --- /dev/null +++ b/test/function/samples/deprecated/dynamic-import-inlining/_config.js @@ -0,0 +1,15 @@ +const assert = require('assert'); + +module.exports = { + description: 'Dynamic import inlining', + options: { + strictDeprecations: false, + inlineDynamicImports: true + }, + exports(exports) { + assert.equal(exports.x, 41); + return exports.promise.then(y => { + assert.equal(y, 42); + }); + } +}; diff --git a/test/function/samples/deprecated/dynamic-import-inlining/foo.js b/test/function/samples/deprecated/dynamic-import-inlining/foo.js new file mode 100644 index 00000000000..ddb14e1522c --- /dev/null +++ b/test/function/samples/deprecated/dynamic-import-inlining/foo.js @@ -0,0 +1 @@ +export var x = 42; \ No newline at end of file diff --git a/test/function/samples/deprecated/dynamic-import-inlining/main.js b/test/function/samples/deprecated/dynamic-import-inlining/main.js new file mode 100644 index 00000000000..94869cb0b70 --- /dev/null +++ b/test/function/samples/deprecated/dynamic-import-inlining/main.js @@ -0,0 +1,5 @@ +export var x = 41; + +export var promise = import('./foo').then(foo => { + return foo.x; +}); diff --git a/test/function/samples/deprecated/inline-dynamic-imports-bundle/_config.js b/test/function/samples/deprecated/inline-dynamic-imports-bundle/_config.js new file mode 100644 index 00000000000..ce23254e2ce --- /dev/null +++ b/test/function/samples/deprecated/inline-dynamic-imports-bundle/_config.js @@ -0,0 +1,18 @@ +const assert = require('assert'); +const path = require('path'); + +module.exports = { + description: 'ignores non-bundled modules when inlining dynamic imports', + options: { + strictDeprecations: false, + inlineDynamicImports: true, + plugins: { + generateBundle(options, bundle) { + assert.deepStrictEqual(Object.keys(bundle['main.js'].modules), [ + path.join(__dirname, 'lib.js'), + path.join(__dirname, 'main.js') + ]); + } + } + } +}; diff --git a/test/function/samples/deprecated/inline-dynamic-imports-bundle/lib.js b/test/function/samples/deprecated/inline-dynamic-imports-bundle/lib.js new file mode 100644 index 00000000000..9d7381d29f6 --- /dev/null +++ b/test/function/samples/deprecated/inline-dynamic-imports-bundle/lib.js @@ -0,0 +1 @@ +export const foo = 42; diff --git a/test/function/samples/deprecated/inline-dynamic-imports-bundle/main.js b/test/function/samples/deprecated/inline-dynamic-imports-bundle/main.js new file mode 100644 index 00000000000..0bb1f9f4b4a --- /dev/null +++ b/test/function/samples/deprecated/inline-dynamic-imports-bundle/main.js @@ -0,0 +1 @@ +export { foo } from './reexporter'; diff --git a/test/function/samples/deprecated/inline-dynamic-imports-bundle/reexporter.js b/test/function/samples/deprecated/inline-dynamic-imports-bundle/reexporter.js new file mode 100644 index 00000000000..26a05cf13db --- /dev/null +++ b/test/function/samples/deprecated/inline-dynamic-imports-bundle/reexporter.js @@ -0,0 +1 @@ +export { foo } from './lib'; diff --git a/test/function/samples/deprecated/inline-imports-with-manual/_config.js b/test/function/samples/deprecated/inline-imports-with-manual/_config.js index 4cbd5cc3dcb..803c6f315cd 100644 --- a/test/function/samples/deprecated/inline-imports-with-manual/_config.js +++ b/test/function/samples/deprecated/inline-imports-with-manual/_config.js @@ -10,6 +10,6 @@ module.exports = { }, generateError: { code: 'INVALID_OPTION', - message: '"manualChunks" option is not supported for "inlineDynamicImports".' + message: 'The "output.manualChunks" option is not supported for "output.inlineDynamicImports".' } }; diff --git a/test/function/samples/deprecated/inline-imports-with-multiple-array/_config.js b/test/function/samples/deprecated/inline-imports-with-multiple-array/_config.js new file mode 100644 index 00000000000..dd87192aaf2 --- /dev/null +++ b/test/function/samples/deprecated/inline-imports-with-multiple-array/_config.js @@ -0,0 +1,12 @@ +module.exports = { + description: 'Having multiple inputs in an array is not supported when inlining dynamic imports', + options: { + strictDeprecations: false, + input: ['main.js', 'lib.js'], + inlineDynamicImports: true + }, + generateError: { + code: 'INVALID_OPTION', + message: 'Multiple inputs are not supported for "output.inlineDynamicImports".' + } +}; diff --git a/test/function/samples/deprecated/inline-imports-with-multiple-array/lib.js b/test/function/samples/deprecated/inline-imports-with-multiple-array/lib.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/function/samples/deprecated/inline-imports-with-multiple-array/lib.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/function/samples/deprecated/inline-imports-with-multiple-array/main.js b/test/function/samples/deprecated/inline-imports-with-multiple-array/main.js new file mode 100644 index 00000000000..4869dc82f38 --- /dev/null +++ b/test/function/samples/deprecated/inline-imports-with-multiple-array/main.js @@ -0,0 +1 @@ +import('./lib').then(({value}) => assert.equal(value, 42)); diff --git a/test/function/samples/deprecated/inline-imports-with-multiple-object/_config.js b/test/function/samples/deprecated/inline-imports-with-multiple-object/_config.js new file mode 100644 index 00000000000..58bd7b00a6f --- /dev/null +++ b/test/function/samples/deprecated/inline-imports-with-multiple-object/_config.js @@ -0,0 +1,12 @@ +module.exports = { + description: 'Having multiple inputs in an object is not supported when inlining dynamic imports', + options: { + strictDeprecations: false, + input: { main: 'main.js', lib: 'lib.js' }, + inlineDynamicImports: true + }, + generateError: { + code: 'INVALID_OPTION', + message: 'Multiple inputs are not supported for "output.inlineDynamicImports".' + } +}; diff --git a/test/function/samples/deprecated/inline-imports-with-multiple-object/lib.js b/test/function/samples/deprecated/inline-imports-with-multiple-object/lib.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/function/samples/deprecated/inline-imports-with-multiple-object/lib.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/function/samples/deprecated/inline-imports-with-multiple-object/main.js b/test/function/samples/deprecated/inline-imports-with-multiple-object/main.js new file mode 100644 index 00000000000..4869dc82f38 --- /dev/null +++ b/test/function/samples/deprecated/inline-imports-with-multiple-object/main.js @@ -0,0 +1 @@ +import('./lib').then(({value}) => assert.equal(value, 42)); diff --git a/test/function/samples/deprecated/manual-chunks-preserve-modules/_config.js b/test/function/samples/deprecated/manual-chunks-preserve-modules/_config.js index 9181019287f..b896cd2aaa2 100644 --- a/test/function/samples/deprecated/manual-chunks-preserve-modules/_config.js +++ b/test/function/samples/deprecated/manual-chunks-preserve-modules/_config.js @@ -10,6 +10,6 @@ module.exports = { }, generateError: { code: 'INVALID_OPTION', - message: '"preserveModules" does not support the "manualChunks" option.' + message: 'The "output.manualChunks" option is not supported for "output.preserveModules".' } }; diff --git a/test/function/samples/deprecated/nested-inlined-dynamic-import-1/_config.js b/test/function/samples/deprecated/nested-inlined-dynamic-import-1/_config.js new file mode 100644 index 00000000000..ad243453388 --- /dev/null +++ b/test/function/samples/deprecated/nested-inlined-dynamic-import-1/_config.js @@ -0,0 +1,12 @@ +const assert = require('assert'); + +module.exports = { + description: + 'deconflicts variables when nested dynamic imports are inlined via inlineDynamicImports', + options: { + output: { inlineDynamicImports: true } + }, + exports(exports) { + return exports().then(result => assert.strictEqual(result, 43)); + } +}; diff --git a/test/function/samples/deprecated/nested-inlined-dynamic-import-1/foo.js b/test/function/samples/deprecated/nested-inlined-dynamic-import-1/foo.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/function/samples/deprecated/nested-inlined-dynamic-import-1/foo.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/function/samples/deprecated/nested-inlined-dynamic-import-1/main.js b/test/function/samples/deprecated/nested-inlined-dynamic-import-1/main.js new file mode 100644 index 00000000000..24dfcc33be9 --- /dev/null +++ b/test/function/samples/deprecated/nested-inlined-dynamic-import-1/main.js @@ -0,0 +1,4 @@ +export default () => { + const foo = 1; + return import('./foo.js').then(ns => ns.value + foo); +}; diff --git a/test/function/samples/deprecated/preserveModules/inline-dynamic-imports/_config.js b/test/function/samples/deprecated/preserveModules/inline-dynamic-imports/_config.js new file mode 100644 index 00000000000..af0f5fe5964 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/inline-dynamic-imports/_config.js @@ -0,0 +1,14 @@ +module.exports = { + description: 'Inlining dynamic imports is not supported when preserving modules', + options: { + strictDeprecations: false, + input: ['main.js'], + preserveModules: true, + inlineDynamicImports: true + }, + generateError: { + code: 'INVALID_OPTION', + message: + 'The "output.inlineDynamicImports" option is not supported for "output.preserveModules".' + } +}; diff --git a/test/function/samples/deprecated/preserveModules/inline-dynamic-imports/lib.js b/test/function/samples/deprecated/preserveModules/inline-dynamic-imports/lib.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/inline-dynamic-imports/lib.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/function/samples/deprecated/preserveModules/inline-dynamic-imports/main.js b/test/function/samples/deprecated/preserveModules/inline-dynamic-imports/main.js new file mode 100644 index 00000000000..4869dc82f38 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/inline-dynamic-imports/main.js @@ -0,0 +1 @@ +import('./lib').then(({value}) => assert.equal(value, 42)); diff --git a/test/function/samples/deprecated/preserveModules/invalid-default-export-mode/_config.js b/test/function/samples/deprecated/preserveModules/invalid-default-export-mode/_config.js new file mode 100644 index 00000000000..88944569e52 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/invalid-default-export-mode/_config.js @@ -0,0 +1,16 @@ +module.exports = { + description: 'throws when using default export mode with named exports', + options: { + strictDeprecations: false, + input: ['main.js'], + preserveModules: true, + output: { + exports: 'default' + } + }, + generateError: { + code: 'INVALID_EXPORT_OPTION', + message: + '"default" was specified for "output.exports", but entry module "lib.js" has the following exports: value' + } +}; diff --git a/test/function/samples/deprecated/preserveModules/invalid-default-export-mode/lib.js b/test/function/samples/deprecated/preserveModules/invalid-default-export-mode/lib.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/invalid-default-export-mode/lib.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/function/samples/deprecated/preserveModules/invalid-default-export-mode/main.js b/test/function/samples/deprecated/preserveModules/invalid-default-export-mode/main.js new file mode 100644 index 00000000000..c379b667da9 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/invalid-default-export-mode/main.js @@ -0,0 +1,3 @@ +import { value } from './lib.js'; +assert.equal(value, 42); +export default 43; diff --git a/test/function/samples/deprecated/preserveModules/invalid-no-preserve-entry-signatures/_config.js b/test/function/samples/deprecated/preserveModules/invalid-no-preserve-entry-signatures/_config.js new file mode 100644 index 00000000000..dc378668cc5 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/invalid-no-preserve-entry-signatures/_config.js @@ -0,0 +1,14 @@ +module.exports = { + description: 'throws when setting preserveEntrySignatures to false', + options: { + strictDeprecations: false, + input: ['main.js'], + preserveModules: true, + preserveEntrySignatures: false + }, + generateError: { + code: 'INVALID_OPTION', + message: + 'Setting "preserveEntrySignatures" to "false" is not supported for "output.preserveModules".' + } +}; diff --git a/test/function/samples/deprecated/preserveModules/invalid-no-preserve-entry-signatures/main.js b/test/function/samples/deprecated/preserveModules/invalid-no-preserve-entry-signatures/main.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/invalid-no-preserve-entry-signatures/main.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/function/samples/deprecated/preserveModules/invalid-none-export-mode/_config.js b/test/function/samples/deprecated/preserveModules/invalid-none-export-mode/_config.js new file mode 100644 index 00000000000..e9fadad6a3e --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/invalid-none-export-mode/_config.js @@ -0,0 +1,16 @@ +module.exports = { + description: 'throws when using none export mode with named exports', + options: { + strictDeprecations: false, + input: ['main.js'], + preserveModules: true, + output: { + exports: 'none' + } + }, + generateError: { + code: 'INVALID_EXPORT_OPTION', + message: + '"none" was specified for "output.exports", but entry module "lib.js" has the following exports: value' + } +}; diff --git a/test/function/samples/deprecated/preserveModules/invalid-none-export-mode/lib.js b/test/function/samples/deprecated/preserveModules/invalid-none-export-mode/lib.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/invalid-none-export-mode/lib.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/function/samples/deprecated/preserveModules/invalid-none-export-mode/main.js b/test/function/samples/deprecated/preserveModules/invalid-none-export-mode/main.js new file mode 100644 index 00000000000..f26e8d860a6 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/invalid-none-export-mode/main.js @@ -0,0 +1,3 @@ +import { value } from './lib.js'; + +assert.equal(value, 42); diff --git a/test/function/samples/deprecated/preserveModules/manual-chunks/_config.js b/test/function/samples/deprecated/preserveModules/manual-chunks/_config.js new file mode 100644 index 00000000000..3bef57f7752 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/manual-chunks/_config.js @@ -0,0 +1,17 @@ +module.exports = { + description: 'Assigning manual chunks fails when preserving modules', + options: { + strictDeprecations: false, + input: ['main.js'], + preserveModules: true, + output: { + manualChunks: { + lib: ['lib.js'] + } + } + }, + generateError: { + code: 'INVALID_OPTION', + message: 'The "output.manualChunks" option is not supported for "output.preserveModules".' + } +}; diff --git a/test/function/samples/deprecated/preserveModules/manual-chunks/lib.js b/test/function/samples/deprecated/preserveModules/manual-chunks/lib.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/manual-chunks/lib.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/function/samples/deprecated/preserveModules/manual-chunks/main.js b/test/function/samples/deprecated/preserveModules/manual-chunks/main.js new file mode 100644 index 00000000000..0786352d0f9 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/manual-chunks/main.js @@ -0,0 +1,3 @@ +import { value } from './lib'; + +assert.equal(value, 42); diff --git a/test/function/samples/deprecated/preserveModules/mixed-exports/_config.js b/test/function/samples/deprecated/preserveModules/mixed-exports/_config.js new file mode 100644 index 00000000000..9ac628d5122 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/mixed-exports/_config.js @@ -0,0 +1,26 @@ +const path = require('path'); + +module.exports = { + description: 'warns for mixed exports in all chunks when preserving modules', + options: { + strictDeprecations: false, + input: ['main.js'], + preserveModules: true + }, + warnings: [ + { + code: 'MIXED_EXPORTS', + id: path.resolve(__dirname, 'main.js'), + message: + 'Entry module "main.js" is using named and default exports together. Consumers of your bundle will have to use `chunk["default"]` to access the default export, which may not be what you want. Use `output.exports: "named"` to disable this warning', + url: 'https://rollupjs.org/guide/en/#output-exports' + }, + { + code: 'MIXED_EXPORTS', + id: path.resolve(__dirname, 'lib1.js'), + message: + 'Entry module "lib1.js" is using named and default exports together. Consumers of your bundle will have to use `chunk["default"]` to access the default export, which may not be what you want. Use `output.exports: "named"` to disable this warning', + url: 'https://rollupjs.org/guide/en/#output-exports' + } + ] +}; diff --git a/test/function/samples/deprecated/preserveModules/mixed-exports/lib1.js b/test/function/samples/deprecated/preserveModules/mixed-exports/lib1.js new file mode 100644 index 00000000000..fea73e2bf15 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/mixed-exports/lib1.js @@ -0,0 +1,2 @@ +export const value1 = 42; +export default 42; diff --git a/test/function/samples/deprecated/preserveModules/mixed-exports/lib2.js b/test/function/samples/deprecated/preserveModules/mixed-exports/lib2.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/mixed-exports/lib2.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/function/samples/deprecated/preserveModules/mixed-exports/lib3.js b/test/function/samples/deprecated/preserveModules/mixed-exports/lib3.js new file mode 100644 index 00000000000..baeef4a82d8 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/mixed-exports/lib3.js @@ -0,0 +1 @@ +export const value3 = 42; diff --git a/test/function/samples/deprecated/preserveModules/mixed-exports/main.js b/test/function/samples/deprecated/preserveModules/mixed-exports/main.js new file mode 100644 index 00000000000..0bd8737542e --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/mixed-exports/main.js @@ -0,0 +1,11 @@ +import lib1, { value1 } from './lib1'; +import lib2 from './lib2'; +import { value3 } from './lib3'; + +assert.equal(lib1, 42); +assert.equal(value1, 42); +assert.equal(lib2, 42); +assert.equal(value3, 42); + +export const value = 42; +export default 42; diff --git a/test/function/samples/deprecated/preserveModules/virtual-modules-conflict/_config.js b/test/function/samples/deprecated/preserveModules/virtual-modules-conflict/_config.js new file mode 100644 index 00000000000..0f024647c97 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/virtual-modules-conflict/_config.js @@ -0,0 +1,33 @@ +const assert = require('assert'); + +module.exports = { + description: 'Generates actual files for virtual modules when preserving modules', + options: { + strictDeprecations: false, + input: ['main.js'], + preserveModules: true, + plugins: [ + { + resolveId(id) { + if (id === '\0virtualModule.js') return id; + }, + load(id) { + if (id !== '\0virtualModule.js') return null; + return 'export const virtual = "Virtual!";\n'; + }, + transform(code, id) { + if (id === '\0virtualModule.js') return null; + return 'import {virtual} from "\0virtualModule.js";\n' + code; + } + } + ] + }, + bundle(bundle) { + return bundle.generate({ format: 'es' }).then(generated => + assert.deepEqual( + generated.output.map(chunk => chunk.fileName), + ['main.js', '_virtual/_virtualModule.js', '_virtual/_virtualModule2.js'] + ) + ); + } +}; diff --git a/test/function/samples/deprecated/preserveModules/virtual-modules-conflict/_virtual/_virtualModule.js b/test/function/samples/deprecated/preserveModules/virtual-modules-conflict/_virtual/_virtualModule.js new file mode 100644 index 00000000000..3901a31bd31 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/virtual-modules-conflict/_virtual/_virtualModule.js @@ -0,0 +1,3 @@ +export const notSoVirtual = 'real'; + +assert.equal(virtual, 'Virtual!'); diff --git a/test/function/samples/deprecated/preserveModules/virtual-modules-conflict/main.js b/test/function/samples/deprecated/preserveModules/virtual-modules-conflict/main.js new file mode 100644 index 00000000000..7653b354896 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/virtual-modules-conflict/main.js @@ -0,0 +1,4 @@ +import { notSoVirtual } from './_virtual/_virtualModule'; + +assert.equal(virtual, 'Virtual!'); +assert.equal(notSoVirtual, 'real'); diff --git a/test/function/samples/deprecated/preserveModules/virtual-modules/_config.js b/test/function/samples/deprecated/preserveModules/virtual-modules/_config.js new file mode 100644 index 00000000000..47d4dfa4303 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/virtual-modules/_config.js @@ -0,0 +1,33 @@ +const assert = require('assert'); + +module.exports = { + description: 'Generates actual files for virtual modules when preserving modules', + options: { + strictDeprecations: false, + input: ['main.js'], + preserveModules: true, + plugins: [ + { + resolveId(id) { + if (id === '\0virtualModule') return id; + }, + load(id) { + if (id !== '\0virtualModule') return null; + return 'export const virtual = "Virtual!";\n'; + }, + transform(code, id) { + if (id === '\0virtualModule') return null; + return 'import {virtual} from "\0virtualModule";\n' + code; + } + } + ] + }, + bundle(bundle) { + return bundle.generate({ format: 'es' }).then(generated => + assert.deepEqual( + generated.output.map(chunk => chunk.fileName), + ['main.js', '_virtual/_virtualModule', 'lib/lib.js'] + ) + ); + } +}; diff --git a/test/function/samples/deprecated/preserveModules/virtual-modules/lib/lib.js b/test/function/samples/deprecated/preserveModules/virtual-modules/lib/lib.js new file mode 100644 index 00000000000..505982998fa --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/virtual-modules/lib/lib.js @@ -0,0 +1 @@ +assert.equal(virtual, 'Virtual!'); diff --git a/test/function/samples/deprecated/preserveModules/virtual-modules/main.js b/test/function/samples/deprecated/preserveModules/virtual-modules/main.js new file mode 100644 index 00000000000..f983b2526f1 --- /dev/null +++ b/test/function/samples/deprecated/preserveModules/virtual-modules/main.js @@ -0,0 +1,3 @@ +import './lib/lib.js'; + +assert.equal(virtual, 'Virtual!'); diff --git a/test/function/samples/deprecations/inlineDynamicImports/_config.js b/test/function/samples/deprecations/inlineDynamicImports/_config.js new file mode 100644 index 00000000000..82055f9b9ed --- /dev/null +++ b/test/function/samples/deprecations/inlineDynamicImports/_config.js @@ -0,0 +1,11 @@ +module.exports = { + description: 'marks the "inlineDynamicImports" input option as deprecated', + options: { + inlineDynamicImports: true + }, + error: { + code: 'DEPRECATED_FEATURE', + message: + 'The "inlineDynamicImports" option is deprecated. Use the "output.inlineDynamicImports" option instead.' + } +}; diff --git a/test/function/samples/deprecations/inlineDynamicImports/main.js b/test/function/samples/deprecations/inlineDynamicImports/main.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/function/samples/deprecations/inlineDynamicImports/main.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/function/samples/deprecations/manualChunks/main.js b/test/function/samples/deprecations/manualChunks/main.js index f8a2d88d245..7a4e8a723a4 100644 --- a/test/function/samples/deprecations/manualChunks/main.js +++ b/test/function/samples/deprecations/manualChunks/main.js @@ -1,11 +1 @@ -const foo = {}; - -function doIt(x) { - if (foo[x]) { - return true; - } - foo[x] = true; -} - -doIt('x'); -assert.ok(doIt('x'), 'foo was not reassigned'); +export default 42; diff --git a/test/function/samples/deprecations/preserveModules/_config.js b/test/function/samples/deprecations/preserveModules/_config.js new file mode 100644 index 00000000000..5e29e525797 --- /dev/null +++ b/test/function/samples/deprecations/preserveModules/_config.js @@ -0,0 +1,11 @@ +module.exports = { + description: 'marks the "preserveModules" input option as deprecated', + options: { + preserveModules: true + }, + error: { + code: 'DEPRECATED_FEATURE', + message: + 'The "preserveModules" option is deprecated. Use the "output.preserveModules" option instead.' + } +}; diff --git a/test/function/samples/deprecations/preserveModules/main.js b/test/function/samples/deprecations/preserveModules/main.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/function/samples/deprecations/preserveModules/main.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/function/samples/dynamic-import-duplicates/_config.js b/test/function/samples/dynamic-import-duplicates/_config.js index 9fd9be2f7c6..8ff6c25a426 100644 --- a/test/function/samples/dynamic-import-duplicates/_config.js +++ b/test/function/samples/dynamic-import-duplicates/_config.js @@ -3,7 +3,7 @@ const assert = require('assert'); module.exports = { description: 'Dynamic import inlining', options: { - inlineDynamicImports: true + output: { inlineDynamicImports: true } }, exports(exports) { assert.equal(exports.x, 41); diff --git a/test/function/samples/dynamic-import-inlining/_config.js b/test/function/samples/dynamic-import-inlining/_config.js index 9fd9be2f7c6..8ff6c25a426 100644 --- a/test/function/samples/dynamic-import-inlining/_config.js +++ b/test/function/samples/dynamic-import-inlining/_config.js @@ -3,7 +3,7 @@ const assert = require('assert'); module.exports = { description: 'Dynamic import inlining', options: { - inlineDynamicImports: true + output: { inlineDynamicImports: true } }, exports(exports) { assert.equal(exports.x, 41); diff --git a/test/function/samples/inline-dynamic-imports-bundle/_config.js b/test/function/samples/inline-dynamic-imports-bundle/_config.js index a53445cff3b..79be84373bc 100644 --- a/test/function/samples/inline-dynamic-imports-bundle/_config.js +++ b/test/function/samples/inline-dynamic-imports-bundle/_config.js @@ -4,7 +4,7 @@ const path = require('path'); module.exports = { description: 'ignores non-bundled modules when inlining dynamic imports', options: { - inlineDynamicImports: true, + output: { inlineDynamicImports: true }, plugins: { generateBundle(options, bundle) { assert.deepStrictEqual(Object.keys(bundle['main.js'].modules), [ diff --git a/test/function/samples/inline-imports-with-manual/_config.js b/test/function/samples/inline-imports-with-manual/_config.js index a05b086b89f..e5e7877082c 100644 --- a/test/function/samples/inline-imports-with-manual/_config.js +++ b/test/function/samples/inline-imports-with-manual/_config.js @@ -2,8 +2,8 @@ module.exports = { description: 'Manual chunks are not supported when inlining dynamic imports', options: { input: ['main.js'], - inlineDynamicImports: true, output: { + inlineDynamicImports: true, manualChunks: { lib: ['lib.js'] } @@ -11,6 +11,6 @@ module.exports = { }, generateError: { code: 'INVALID_OPTION', - message: '"manualChunks" option is not supported for "inlineDynamicImports".' + message: 'The "output.manualChunks" option is not supported for "output.inlineDynamicImports".' } }; diff --git a/test/function/samples/inline-imports-with-multiple-array/_config.js b/test/function/samples/inline-imports-with-multiple-array/_config.js index 4164867fe1c..a1be26d335e 100644 --- a/test/function/samples/inline-imports-with-multiple-array/_config.js +++ b/test/function/samples/inline-imports-with-multiple-array/_config.js @@ -2,10 +2,10 @@ module.exports = { description: 'Having multiple inputs in an array is not supported when inlining dynamic imports', options: { input: ['main.js', 'lib.js'], - inlineDynamicImports: true + output: { inlineDynamicImports: true } }, - error: { + generateError: { code: 'INVALID_OPTION', - message: 'Multiple inputs are not supported for "inlineDynamicImports".' + message: 'Multiple inputs are not supported for "output.inlineDynamicImports".' } }; diff --git a/test/function/samples/inline-imports-with-multiple-object/_config.js b/test/function/samples/inline-imports-with-multiple-object/_config.js index 417b1ccdc15..9a5b1fd1af4 100644 --- a/test/function/samples/inline-imports-with-multiple-object/_config.js +++ b/test/function/samples/inline-imports-with-multiple-object/_config.js @@ -2,10 +2,10 @@ module.exports = { description: 'Having multiple inputs in an object is not supported when inlining dynamic imports', options: { input: { main: 'main.js', lib: 'lib.js' }, - inlineDynamicImports: true + output: { inlineDynamicImports: true } }, - error: { + generateError: { code: 'INVALID_OPTION', - message: 'Multiple inputs are not supported for "inlineDynamicImports".' + message: 'Multiple inputs are not supported for "output.inlineDynamicImports".' } }; diff --git a/test/function/samples/nested-inlined-dynamic-import-1/_config.js b/test/function/samples/nested-inlined-dynamic-import-1/_config.js index b835ea30221..ad243453388 100644 --- a/test/function/samples/nested-inlined-dynamic-import-1/_config.js +++ b/test/function/samples/nested-inlined-dynamic-import-1/_config.js @@ -4,7 +4,7 @@ module.exports = { description: 'deconflicts variables when nested dynamic imports are inlined via inlineDynamicImports', options: { - inlineDynamicImports: true + output: { inlineDynamicImports: true } }, exports(exports) { return exports().then(result => assert.strictEqual(result, 43)); diff --git a/test/function/samples/options-hook/_config.js b/test/function/samples/options-hook/_config.js index fa6eaeaef77..97eb6623de8 100644 --- a/test/function/samples/options-hook/_config.js +++ b/test/function/samples/options-hook/_config.js @@ -18,7 +18,6 @@ module.exports = { acornInjectPlugins: [null, null, null], context: 'undefined', experimentalCacheExpiry: 10, - inlineDynamicImports: false, input: ['used'], perf: false, plugins: [ @@ -27,7 +26,6 @@ module.exports = { } ], preserveEntrySignatures: 'strict', - preserveModules: false, preserveSymlinks: false, shimMissingExports: false, strictDeprecations: true, diff --git a/test/function/samples/output-options-hook/_config.js b/test/function/samples/output-options-hook/_config.js index f5003974f2b..45789085be3 100644 --- a/test/function/samples/output-options-hook/_config.js +++ b/test/function/samples/output-options-hook/_config.js @@ -32,6 +32,7 @@ module.exports = { globals: {}, hoistTransitiveImports: true, indent: true, + inlineDynamicImports: false, interop: true, manualChunks: {}, minifyInternalExports: false, @@ -40,6 +41,7 @@ module.exports = { paths: {}, plugins: [], preferConst: false, + preserveModules: false, sourcemap: false, sourcemapExcludeSources: false, strict: true, diff --git a/test/function/samples/preserve-modules/inline-dynamic-imports/_config.js b/test/function/samples/preserve-modules/inline-dynamic-imports/_config.js index 1f25bd9968d..b315aa96fca 100644 --- a/test/function/samples/preserve-modules/inline-dynamic-imports/_config.js +++ b/test/function/samples/preserve-modules/inline-dynamic-imports/_config.js @@ -2,11 +2,14 @@ module.exports = { description: 'Inlining dynamic imports is not supported when preserving modules', options: { input: ['main.js'], - preserveModules: true, - inlineDynamicImports: true + output: { + preserveModules: true, + inlineDynamicImports: true + } }, - error: { + generateError: { code: 'INVALID_OPTION', - message: '"preserveModules" does not support the "inlineDynamicImports" option.' + message: + 'The "output.inlineDynamicImports" option is not supported for "output.preserveModules".' } }; diff --git a/test/function/samples/preserve-modules/invalid-default-export-mode/_config.js b/test/function/samples/preserve-modules/invalid-default-export-mode/_config.js index e66d62ecc36..3256f5ca2b8 100644 --- a/test/function/samples/preserve-modules/invalid-default-export-mode/_config.js +++ b/test/function/samples/preserve-modules/invalid-default-export-mode/_config.js @@ -2,9 +2,9 @@ module.exports = { description: 'throws when using default export mode with named exports', options: { input: ['main.js'], - preserveModules: true, output: { - exports: 'default' + exports: 'default', + preserveModules: true } }, generateError: { diff --git a/test/function/samples/preserve-modules/invalid-no-preserve-entry-signatures/_config.js b/test/function/samples/preserve-modules/invalid-no-preserve-entry-signatures/_config.js index 7a0e4dfc3a1..dcd159dc9d9 100644 --- a/test/function/samples/preserve-modules/invalid-no-preserve-entry-signatures/_config.js +++ b/test/function/samples/preserve-modules/invalid-no-preserve-entry-signatures/_config.js @@ -2,11 +2,12 @@ module.exports = { description: 'throws when setting preserveEntrySignatures to false', options: { input: ['main.js'], - preserveModules: true, - preserveEntrySignatures: false + preserveEntrySignatures: false, + output: { preserveModules: true } }, - error: { + generateError: { code: 'INVALID_OPTION', - message: '"preserveModules" does not support setting "preserveEntrySignatures" to "false".' + message: + 'Setting "preserveEntrySignatures" to "false" is not supported for "output.preserveModules".' } }; diff --git a/test/function/samples/preserve-modules/invalid-none-export-mode/_config.js b/test/function/samples/preserve-modules/invalid-none-export-mode/_config.js index d8f3412169e..8dfb14e480d 100644 --- a/test/function/samples/preserve-modules/invalid-none-export-mode/_config.js +++ b/test/function/samples/preserve-modules/invalid-none-export-mode/_config.js @@ -2,9 +2,9 @@ module.exports = { description: 'throws when using none export mode with named exports', options: { input: ['main.js'], - preserveModules: true, output: { - exports: 'none' + exports: 'none', + preserveModules: true } }, generateError: { diff --git a/test/function/samples/preserve-modules/manual-chunks/_config.js b/test/function/samples/preserve-modules/manual-chunks/_config.js index dfeceeaba32..5f9f2e6ecd0 100644 --- a/test/function/samples/preserve-modules/manual-chunks/_config.js +++ b/test/function/samples/preserve-modules/manual-chunks/_config.js @@ -2,15 +2,15 @@ module.exports = { description: 'Assigning manual chunks fails when preserving modules', options: { input: ['main.js'], - preserveModules: true, output: { manualChunks: { lib: ['lib.js'] - } + }, + preserveModules: true } }, generateError: { code: 'INVALID_OPTION', - message: '"preserveModules" does not support the "manualChunks" option.' + message: 'The "output.manualChunks" option is not supported for "output.preserveModules".' } }; diff --git a/test/function/samples/preserve-modules/mixed-exports/_config.js b/test/function/samples/preserve-modules/mixed-exports/_config.js index 712148c9874..11e89b8d1e7 100644 --- a/test/function/samples/preserve-modules/mixed-exports/_config.js +++ b/test/function/samples/preserve-modules/mixed-exports/_config.js @@ -4,7 +4,7 @@ module.exports = { description: 'warns for mixed exports in all chunks when preserving modules', options: { input: ['main.js'], - preserveModules: true + output: { preserveModules: true } }, warnings: [ { diff --git a/test/function/samples/preserve-modules/virtual-modules-conflict/_config.js b/test/function/samples/preserve-modules/virtual-modules-conflict/_config.js index 6739c34f66c..2138da5c8aa 100644 --- a/test/function/samples/preserve-modules/virtual-modules-conflict/_config.js +++ b/test/function/samples/preserve-modules/virtual-modules-conflict/_config.js @@ -3,8 +3,6 @@ const assert = require('assert'); module.exports = { description: 'Generates actual files for virtual modules when preserving modules', options: { - input: ['main.js'], - preserveModules: true, plugins: [ { resolveId(id) { @@ -22,7 +20,7 @@ module.exports = { ] }, bundle(bundle) { - return bundle.generate({ format: 'es' }).then(generated => + return bundle.generate({ format: 'es', preserveModules: true }).then(generated => assert.deepEqual( generated.output.map(chunk => chunk.fileName), ['main.js', '_virtual/_virtualModule.js', '_virtual/_virtualModule2.js'] diff --git a/test/function/samples/preserve-modules/virtual-modules/_config.js b/test/function/samples/preserve-modules/virtual-modules/_config.js index 17cbf8b541b..8965977575f 100644 --- a/test/function/samples/preserve-modules/virtual-modules/_config.js +++ b/test/function/samples/preserve-modules/virtual-modules/_config.js @@ -3,8 +3,6 @@ const assert = require('assert'); module.exports = { description: 'Generates actual files for virtual modules when preserving modules', options: { - input: ['main.js'], - preserveModules: true, plugins: [ { resolveId(id) { @@ -22,7 +20,7 @@ module.exports = { ] }, bundle(bundle) { - return bundle.generate({ format: 'es' }).then(generated => + return bundle.generate({ format: 'es', preserveModules: true }).then(generated => assert.deepEqual( generated.output.map(chunk => chunk.fileName), ['main.js', '_virtual/_virtualModule', 'lib/lib.js'] diff --git a/test/misc/optionList.js b/test/misc/optionList.js index 6c85ca494cf..3ab7271f774 100644 --- a/test/misc/optionList.js +++ b/test/misc/optionList.js @@ -1,3 +1,3 @@ exports.input = 'acorn, acornInjectPlugins, cache, context, experimentalCacheExpiry, external, inlineDynamicImports, input, manualChunks, moduleContext, onwarn, perf, plugins, preserveEntrySignatures, preserveModules, preserveSymlinks, shimMissingExports, strictDeprecations, treeshake, watch'; exports.flags = 'acorn, acornInjectPlugins, amd, assetFileNames, banner, c, cache, chunkFileNames, compact, config, context, d, dir, dynamicImportFunction, e, entryFileNames, environment, esModule, experimentalCacheExpiry, exports, extend, external, externalLiveBindings, f, file, footer, format, freeze, g, globals, h, hoistTransitiveImports, i, indent, inlineDynamicImports, input, interop, intro, m, manualChunks, minifyInternalExports, moduleContext, n, name, namespaceToStringTag, noConflict, o, onwarn, outro, p, paths, perf, plugin, plugins, preferConst, preserveEntrySignatures, preserveModules, preserveSymlinks, shimMissingExports, silent, sourcemap, sourcemapExcludeSources, sourcemapFile, stdin, strict, strictDeprecations, systemNullSetters, treeshake, v, w, waitForBundleInput, watch'; -exports.output = 'amd, assetFileNames, banner, chunkFileNames, compact, dir, dynamicImportFunction, entryFileNames, esModule, exports, extend, externalLiveBindings, file, footer, format, freeze, globals, hoistTransitiveImports, indent, interop, intro, manualChunks, minifyInternalExports, name, namespaceToStringTag, noConflict, outro, paths, plugins, preferConst, sourcemap, sourcemapExcludeSources, sourcemapFile, sourcemapPathTransform, strict, systemNullSetters'; +exports.output = 'amd, assetFileNames, banner, chunkFileNames, compact, dir, dynamicImportFunction, entryFileNames, esModule, exports, extend, externalLiveBindings, file, footer, format, freeze, globals, hoistTransitiveImports, indent, inlineDynamicImports, interop, intro, manualChunks, minifyInternalExports, name, namespaceToStringTag, noConflict, outro, paths, plugins, preferConst, preserveModules, sourcemap, sourcemapExcludeSources, sourcemapFile, sourcemapPathTransform, strict, systemNullSetters'; diff --git a/test/misc/sanity-checks.js b/test/misc/sanity-checks.js index e88d2efaadc..4e8d4d0627d 100644 --- a/test/misc/sanity-checks.js +++ b/test/misc/sanity-checks.js @@ -224,17 +224,16 @@ describe('sanity checks', () => { let error = null; const bundle = await rollup.rollup({ input: 'x', - preserveModules: true, plugins: [loader({ x: 'console.log( "x" );' })] }); try { - await bundle.generate({ file: 'x', format: 'es' }); + await bundle.generate({ file: 'x', format: 'es', preserveModules: true }); } catch (generateError) { error = generateError; } assert.strictEqual( error && error.message, - 'You must set "output.dir" instead of "output.file" when using the "preserveModules" option.' + 'You must set "output.dir" instead of "output.file" when using the "output.preserveModules" option.' ); }); }); diff --git a/test/watch/index.js b/test/watch/index.js index f58fe59f8ca..8c005b160ca 100644 --- a/test/watch/index.js +++ b/test/watch/index.js @@ -1199,7 +1199,7 @@ describe('rollup.watch', () => { }); describe('addWatchFile', () => { - it.only('supports adding additional watch files in plugin hooks', () => { + it('supports adding additional watch files in plugin hooks', () => { const watchChangeIds = new Set(); const buildStartFile = path.resolve('test/_tmp/input/buildStart'); const loadFile = path.resolve('test/_tmp/input/load'); From c696c1e37a60247c7d55a6b06b78154388c23f75 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sat, 20 Jun 2020 08:00:50 +0200 Subject: [PATCH 14/20] Deactivate strictDeprecations for now --- rollup.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rollup.config.js b/rollup.config.js index 28445f9c021..3ea255a09c2 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -99,7 +99,8 @@ export default command => { ], treeshake, manualChunks: { rollup: ['src/node-entry.ts'] }, - strictDeprecations: true, + // TODO set this to `true` again once manualChunks has been moved to the output + strictDeprecations: false, output: { banner, chunkFileNames: 'shared/[name].js', From a3b89e5dff76dbb91fc963b4a8da14043165a281 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sat, 20 Jun 2020 21:48:44 +0200 Subject: [PATCH 15/20] Trace sourcemaps in warnings, improve coverage --- src/Module.ts | 76 ++++++++----------- src/utils/error.ts | 15 ++-- .../circular-missed-reexports-2/_config.js | 1 + .../samples/default-not-reexported/_config.js | 1 + .../samples/double-default-export/_config.js | 1 + .../samples/double-named-export/_config.js | 1 + .../samples/double-named-reexport/_config.js | 1 + .../samples/duplicate-import-fails/_config.js | 1 + .../_config.js | 1 + .../_config.js | 1 + .../samples/error-parse-json/_config.js | 1 + .../error-parse-unknown-extension/_config.js | 1 + .../export-not-at-top-level-fails/_config.js | 1 + .../import-not-at-top-level-fails/_config.js | 1 + .../import-of-unexported-fails/_config.js | 1 + .../samples/reassign-import-fails/_config.js | 1 + .../_config.js | 1 + .../samples/reexport-missing-error/_config.js | 1 + .../_config.js | 1 + 19 files changed, 57 insertions(+), 51 deletions(-) diff --git a/src/Module.ts b/src/Module.ts index 7065fa31aff..a88cf041bc9 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -37,11 +37,11 @@ import { PreserveEntrySignaturesOption, ResolvedIdMap, RollupError, + RollupLogProps, RollupWarning, TransformModuleJSON } from './rollup/types'; -import { error, Errors } from './utils/error'; -import getCodeFrame from './utils/getCodeFrame'; +import { augmentCodeLocation, error, Errors } from './utils/error'; import { getId } from './utils/getId'; import { getOriginalLocation } from './utils/getOriginalLocation'; import { makeLegal } from './utils/identifierHelpers'; @@ -89,7 +89,7 @@ export interface AstContext { addImportMeta: (node: MetaProperty) => void; code: string; deoptimizationTracker: PathTracker; - error: (props: RollupError, pos?: number) => never; + error: (props: RollupError, pos: number) => never; fileName: string; getExports: () => string[]; getModuleExecIndex: () => number; @@ -107,7 +107,7 @@ export interface AstContext { traceExport: (name: string) => Variable; traceVariable: (name: string) => Variable | null; usesTopLevelAwait: boolean; - warn: (warning: RollupWarning, pos?: number) => void; + warn: (warning: RollupWarning, pos: number) => void; } function tryParse(module: Module, Parser: typeof acorn.Parser, acornOptions: acorn.Options) { @@ -256,33 +256,8 @@ export default class Module { this.ast.bind(); } - error(props: RollupError, pos?: number): never { - if (typeof pos === 'number') { - props.pos = pos; - let location: { column: number; line: number } = locate(this.code, pos, { offsetLine: 1 }); - try { - location = getOriginalLocation(this.sourcemapChain, location); - } catch (e) { - this.warn({ - code: 'SOURCEMAP_ERROR', - loc: { - column: location.column, - file: this.id, - line: location.line - }, - message: `Error when using sourcemap for reporting an error: ${e.message}`, - pos - }); - } - - props.loc = { - column: location.column, - file: this.id, - line: location.line - }; - props.frame = getCodeFrame(this.originalCode, location.line, location.column); - } - + error(props: RollupError, pos: number): never { + this.addLocationToLogProps(props, pos); return error(props); } @@ -484,7 +459,7 @@ export default class Module { return this.exportShimVariable; } const name = exportDeclaration.localName; - return this.traceVariable(name) || this.graph.scope.findVariable(name); + return this.traceVariable(name)!; } if (name !== 'default') { @@ -756,18 +731,9 @@ export default class Module { return null; } - warn(warning: RollupWarning, pos?: number) { - if (typeof pos === 'number') { - warning.pos = pos; - - const { line, column } = locate(this.code, pos, { offsetLine: 1 }); // TODO trace sourcemaps, cf. error() - - warning.loc = { file: this.id, line, column }; - warning.frame = getCodeFrame(this.code, line, column); - } - - warning.id = this.id; - this.options.onwarn(warning); + warn(props: RollupWarning, pos: number) { + this.addLocationToLogProps(props, pos); + this.options.onwarn(props); } private addDynamicImport(node: ImportExpression) { @@ -877,6 +843,28 @@ export default class Module { this.importMetas.push(node); } + private addLocationToLogProps(props: RollupLogProps, pos: number): void { + props.id = this.id; + props.pos = pos; + let { column, line } = locate(this.code, pos, { offsetLine: 1 }); + try { + ({ column, line } = getOriginalLocation(this.sourcemapChain, { column, line })); + } catch (e) { + this.options.onwarn({ + code: 'SOURCEMAP_ERROR', + id: this.id, + loc: { + column, + file: this.id, + line + }, + message: `Error when using sourcemap for reporting an error: ${e.message}`, + pos + }); + } + augmentCodeLocation(props, { column, line }, this.originalCode, this.id); + } + private addModulesToImportDescriptions(importDescription: { [name: string]: ImportDescription | ReexportDescription; }) { diff --git a/src/utils/error.ts b/src/utils/error.ts index 0b08036c9c6..aa6ede7e27b 100644 --- a/src/utils/error.ts +++ b/src/utils/error.ts @@ -3,6 +3,7 @@ import Module from '../Module'; import { NormalizedInputOptions, RollupError, + RollupLogProps, RollupWarning, WarningHandler } from '../rollup/types'; @@ -15,23 +16,23 @@ export function error(base: Error | RollupError): never { } export function augmentCodeLocation( - object: RollupError | RollupWarning, + props: RollupLogProps, pos: number | { column: number; line: number }, source: string, id: string ): void { if (typeof pos === 'object') { const { line, column } = pos; - object.loc = { file: id, line, column }; + props.loc = { file: id, line, column }; } else { - object.pos = pos; + props.pos = pos; const { line, column } = locate(source, pos, { offsetLine: 1 }); - object.loc = { file: id, line, column }; + props.loc = { file: id, line, column }; } - if (object.frame === undefined) { - const { line, column } = object.loc; - object.frame = getCodeFrame(source, line, column); + if (props.frame === undefined) { + const { line, column } = props.loc; + props.frame = getCodeFrame(source, line, column); } } diff --git a/test/function/samples/circular-missed-reexports-2/_config.js b/test/function/samples/circular-missed-reexports-2/_config.js index e17a190410c..04075a8bb86 100644 --- a/test/function/samples/circular-missed-reexports-2/_config.js +++ b/test/function/samples/circular-missed-reexports-2/_config.js @@ -8,6 +8,7 @@ module.exports = { }, error: { code: 'MISSING_EXPORT', + id: path.resolve(__dirname, 'dep2.js'), frame: ` 1: export { doesNotExist } from './dep1.js'; ^`, diff --git a/test/function/samples/default-not-reexported/_config.js b/test/function/samples/default-not-reexported/_config.js index be866dd0b30..c0800c241c5 100644 --- a/test/function/samples/default-not-reexported/_config.js +++ b/test/function/samples/default-not-reexported/_config.js @@ -5,6 +5,7 @@ module.exports = { error: { code: 'MISSING_EXPORT', message: `'default' is not exported by foo.js, imported by main.js`, + id: path.resolve(__dirname, 'main.js'), pos: 7, watchFiles: [ path.resolve(__dirname, 'main.js'), diff --git a/test/function/samples/double-default-export/_config.js b/test/function/samples/double-default-export/_config.js index 792dad2d2db..9a928a5e040 100644 --- a/test/function/samples/double-default-export/_config.js +++ b/test/function/samples/double-default-export/_config.js @@ -5,6 +5,7 @@ module.exports = { error: { code: 'PARSE_ERROR', message: `Duplicate export 'default'`, + id: path.resolve(__dirname, 'foo.js'), parserError: { loc: { column: 7, diff --git a/test/function/samples/double-named-export/_config.js b/test/function/samples/double-named-export/_config.js index e9d7d5d5f54..7c24f8d04db 100644 --- a/test/function/samples/double-named-export/_config.js +++ b/test/function/samples/double-named-export/_config.js @@ -5,6 +5,7 @@ module.exports = { error: { code: 'PARSE_ERROR', message: `Duplicate export 'foo'`, + id: path.resolve(__dirname, 'foo.js'), parserError: { loc: { column: 9, diff --git a/test/function/samples/double-named-reexport/_config.js b/test/function/samples/double-named-reexport/_config.js index 8fae7ea261a..597181042c6 100644 --- a/test/function/samples/double-named-reexport/_config.js +++ b/test/function/samples/double-named-reexport/_config.js @@ -5,6 +5,7 @@ module.exports = { error: { code: 'PARSE_ERROR', message: `Duplicate export 'foo'`, + id: path.resolve(__dirname, 'foo.js'), parserError: { loc: { column: 9, diff --git a/test/function/samples/duplicate-import-fails/_config.js b/test/function/samples/duplicate-import-fails/_config.js index e31695fba5f..a52a5446a20 100644 --- a/test/function/samples/duplicate-import-fails/_config.js +++ b/test/function/samples/duplicate-import-fails/_config.js @@ -5,6 +5,7 @@ module.exports = { error: { code: 'PARSE_ERROR', message: `Identifier 'a' has already been declared`, + id: path.resolve(__dirname, 'main.js'), parserError: { loc: { column: 9, diff --git a/test/function/samples/duplicate-import-specifier-fails/_config.js b/test/function/samples/duplicate-import-specifier-fails/_config.js index 02e51693dc4..a62bacddad9 100644 --- a/test/function/samples/duplicate-import-specifier-fails/_config.js +++ b/test/function/samples/duplicate-import-specifier-fails/_config.js @@ -5,6 +5,7 @@ module.exports = { error: { code: 'PARSE_ERROR', message: `Identifier 'a' has already been declared`, + id: path.resolve(__dirname, 'main.js'), parserError: { loc: { column: 12, diff --git a/test/function/samples/error-after-transform-should-throw-correct-location/_config.js b/test/function/samples/error-after-transform-should-throw-correct-location/_config.js index 58c2caa9550..9cc9f582a25 100644 --- a/test/function/samples/error-after-transform-should-throw-correct-location/_config.js +++ b/test/function/samples/error-after-transform-should-throw-correct-location/_config.js @@ -21,6 +21,7 @@ module.exports = { error: { code: 'MISSING_EXPORT', message: `'default' is not exported by empty.js, imported by main.js`, + id: path.resolve(__dirname, 'main.js'), pos: 44, watchFiles: [path.resolve(__dirname, 'main.js'), path.resolve(__dirname, 'empty.js')], loc: { diff --git a/test/function/samples/error-parse-json/_config.js b/test/function/samples/error-parse-json/_config.js index 62dbc19fa45..a7d15c32b53 100644 --- a/test/function/samples/error-parse-json/_config.js +++ b/test/function/samples/error-parse-json/_config.js @@ -6,6 +6,7 @@ module.exports = { error: { code: 'PARSE_ERROR', message: 'Unexpected token (Note that you need @rollup/plugin-json to import JSON files)', + id: path.resolve(__dirname, 'file.json'), parserError: { loc: { column: 8, diff --git a/test/function/samples/error-parse-unknown-extension/_config.js b/test/function/samples/error-parse-unknown-extension/_config.js index a9949efb4ef..3f8a81d873b 100644 --- a/test/function/samples/error-parse-unknown-extension/_config.js +++ b/test/function/samples/error-parse-unknown-extension/_config.js @@ -7,6 +7,7 @@ module.exports = { code: 'PARSE_ERROR', message: 'Unexpected token (Note that you need plugins to import files that are not JavaScript)', + id: path.resolve(__dirname, 'file.css'), parserError: { loc: { column: 0, diff --git a/test/function/samples/export-not-at-top-level-fails/_config.js b/test/function/samples/export-not-at-top-level-fails/_config.js index 17680e24306..3ce0c368be7 100644 --- a/test/function/samples/export-not-at-top-level-fails/_config.js +++ b/test/function/samples/export-not-at-top-level-fails/_config.js @@ -5,6 +5,7 @@ module.exports = { error: { code: 'PARSE_ERROR', message: `'import' and 'export' may only appear at the top level`, + id: path.resolve(__dirname, 'main.js'), parserError: { loc: { column: 2, diff --git a/test/function/samples/import-not-at-top-level-fails/_config.js b/test/function/samples/import-not-at-top-level-fails/_config.js index a6da4dffaad..2aef5c09f88 100644 --- a/test/function/samples/import-not-at-top-level-fails/_config.js +++ b/test/function/samples/import-not-at-top-level-fails/_config.js @@ -5,6 +5,7 @@ module.exports = { error: { code: 'PARSE_ERROR', message: `'import' and 'export' may only appear at the top level`, + id: path.resolve(__dirname, 'main.js'), parserError: { loc: { column: 2, diff --git a/test/function/samples/import-of-unexported-fails/_config.js b/test/function/samples/import-of-unexported-fails/_config.js index 6f5fa5552b2..f5f8c261651 100644 --- a/test/function/samples/import-of-unexported-fails/_config.js +++ b/test/function/samples/import-of-unexported-fails/_config.js @@ -5,6 +5,7 @@ module.exports = { error: { code: 'MISSING_EXPORT', message: `'default' is not exported by empty.js, imported by main.js`, + id: path.resolve(__dirname, 'main.js'), pos: 7, watchFiles: [path.resolve(__dirname, 'main.js'), path.resolve(__dirname, 'empty.js')], loc: { diff --git a/test/function/samples/reassign-import-fails/_config.js b/test/function/samples/reassign-import-fails/_config.js index 1f8b3bf9027..f0d28451839 100644 --- a/test/function/samples/reassign-import-fails/_config.js +++ b/test/function/samples/reassign-import-fails/_config.js @@ -5,6 +5,7 @@ module.exports = { error: { code: 'ILLEGAL_REASSIGNMENT', message: `Illegal reassignment to import 'x'`, + id: path.resolve(__dirname, 'main.js'), pos: 113, watchFiles: [path.resolve(__dirname, 'main.js'), path.resolve(__dirname, 'foo.js')], loc: { diff --git a/test/function/samples/reassign-import-not-at-top-level-fails/_config.js b/test/function/samples/reassign-import-not-at-top-level-fails/_config.js index e826b171f13..65c3b8a6170 100644 --- a/test/function/samples/reassign-import-not-at-top-level-fails/_config.js +++ b/test/function/samples/reassign-import-not-at-top-level-fails/_config.js @@ -5,6 +5,7 @@ module.exports = { error: { code: 'ILLEGAL_REASSIGNMENT', message: `Illegal reassignment to import 'x'`, + id: path.resolve(__dirname, 'main.js'), pos: 95, watchFiles: [path.resolve(__dirname, 'main.js'), path.resolve(__dirname, 'foo.js')], loc: { diff --git a/test/function/samples/reexport-missing-error/_config.js b/test/function/samples/reexport-missing-error/_config.js index 5a17f6c2bd5..bf769eccade 100644 --- a/test/function/samples/reexport-missing-error/_config.js +++ b/test/function/samples/reexport-missing-error/_config.js @@ -5,6 +5,7 @@ module.exports = { error: { code: 'MISSING_EXPORT', message: `'foo' is not exported by empty.js, imported by main.js`, + id: path.resolve(__dirname, 'main.js'), pos: 9, watchFiles: [path.resolve(__dirname, 'main.js'), path.resolve(__dirname, 'empty.js')], loc: { diff --git a/test/function/samples/update-expression-of-import-fails/_config.js b/test/function/samples/update-expression-of-import-fails/_config.js index cff3fb53b1d..4911b8316ef 100644 --- a/test/function/samples/update-expression-of-import-fails/_config.js +++ b/test/function/samples/update-expression-of-import-fails/_config.js @@ -5,6 +5,7 @@ module.exports = { error: { code: 'ILLEGAL_REASSIGNMENT', message: `Illegal reassignment to import 'a'`, + id: path.resolve(__dirname, 'main.js'), pos: 28, watchFiles: [path.resolve(__dirname, 'main.js'), path.resolve(__dirname, 'foo.js')], loc: { From 786909a621680da94294f0c8e8280efa6d496d85 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sat, 20 Jun 2020 22:13:01 +0200 Subject: [PATCH 16/20] Improve coverage --- src/Chunk.ts | 21 ++++----- src/Module.ts | 6 ++- src/utils/chunkAssignment.ts | 28 ++++-------- .../custom-module-context-function/_config.js | 7 ++- .../_expected.js | 5 +++ .../_expected/amd.js | 7 --- .../_expected/cjs.js | 5 --- .../_expected/es.js | 3 -- .../_expected/iife.js | 8 ---- .../_expected/system.js | 12 ----- .../_expected/umd.js | 10 ----- .../custom-module-context-function/bar.js | 1 + .../custom-module-context-function/foo.js | 2 +- .../custom-module-context-function/main.js | 3 +- .../side-effects-internal-modules/_config.js | 28 ++++++++++++ .../_expected.js | 3 ++ .../side-effects-internal-modules/main.js | 2 + .../_config.js | 45 +++++++++++++++++++ .../cannot-resolve-sourcemap-warning/main.js | 1 + .../_config.js | 25 +++++++++++ .../chunk.js | 1 + .../main.js | 1 + .../_config.js | 25 +++++++++++ .../chunk.js | 1 + .../main.js | 1 + 25 files changed, 170 insertions(+), 81 deletions(-) create mode 100644 test/form/samples/custom-module-context-function/_expected.js delete mode 100644 test/form/samples/custom-module-context-function/_expected/amd.js delete mode 100644 test/form/samples/custom-module-context-function/_expected/cjs.js delete mode 100644 test/form/samples/custom-module-context-function/_expected/es.js delete mode 100644 test/form/samples/custom-module-context-function/_expected/iife.js delete mode 100644 test/form/samples/custom-module-context-function/_expected/system.js delete mode 100644 test/form/samples/custom-module-context-function/_expected/umd.js create mode 100644 test/form/samples/custom-module-context-function/bar.js create mode 100644 test/form/samples/side-effects-internal-modules/_config.js create mode 100644 test/form/samples/side-effects-internal-modules/_expected.js create mode 100644 test/form/samples/side-effects-internal-modules/main.js create mode 100644 test/function/samples/cannot-resolve-sourcemap-warning/_config.js create mode 100644 test/function/samples/cannot-resolve-sourcemap-warning/main.js create mode 100644 test/function/samples/emit-file/chunk-filename-not-available-buildEnd/_config.js create mode 100644 test/function/samples/emit-file/chunk-filename-not-available-buildEnd/chunk.js create mode 100644 test/function/samples/emit-file/chunk-filename-not-available-buildEnd/main.js create mode 100644 test/function/samples/emit-file/chunk-filename-not-available-renderStart/_config.js create mode 100644 test/function/samples/emit-file/chunk-filename-not-available-renderStart/chunk.js create mode 100644 test/function/samples/emit-file/chunk-filename-not-available-renderStart/main.js diff --git a/src/Chunk.ts b/src/Chunk.ts index bf621090a40..a2492d8ca97 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -895,8 +895,7 @@ export default class Chunk { } else { const variable = this.exportsByName![exportName]; if (variable instanceof SyntheticNamedExportVariable) continue; - const module = variable.module; - if (!module) continue; + const module = variable.module!; if (module instanceof Module) { exportChunk = this.chunkByModule.get(module)!; if (exportChunk === this) continue; @@ -1146,16 +1145,14 @@ export default class Chunk { if (variable instanceof SyntheticNamedExportVariable) { variable = variable.getBaseVariable(); } - if (variable.module) { - const chunk = this.chunkByModule.get(variable.module as Module); - if (chunk !== this) { - this.imports.add(variable); - if ( - !(variable instanceof NamespaceVariable && this.outputOptions.preserveModules) && - variable.module instanceof Module - ) { - chunk!.exports.add(variable); - } + const chunk = this.chunkByModule.get(variable.module as Module); + if (chunk !== this) { + this.imports.add(variable); + if ( + !(variable instanceof NamespaceVariable && this.outputOptions.preserveModules) && + variable.module instanceof Module + ) { + chunk!.exports.add(variable); } } } diff --git a/src/Module.ts b/src/Module.ts index a88cf041bc9..da9eac2d129 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -846,9 +846,11 @@ export default class Module { private addLocationToLogProps(props: RollupLogProps, pos: number): void { props.id = this.id; props.pos = pos; - let { column, line } = locate(this.code, pos, { offsetLine: 1 }); + let code = this.code; + let { column, line } = locate(code, pos, { offsetLine: 1 }); try { ({ column, line } = getOriginalLocation(this.sourcemapChain, { column, line })); + code = this.originalCode; } catch (e) { this.options.onwarn({ code: 'SOURCEMAP_ERROR', @@ -862,7 +864,7 @@ export default class Module { pos }); } - augmentCodeLocation(props, { column, line }, this.originalCode, this.id); + augmentCodeLocation(props, { column, line }, code, this.id); } private addModulesToImportDescriptions(importDescription: { diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index 186cc895ddf..e386ebb7ca8 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -21,10 +21,7 @@ export function getChunkAssignments( } const assignedEntryPointsByModule: DependentModuleMap = new Map(); - const { dependentEntryPointsByModule, dynamicEntryModules } = analyzeModuleGraph( - entryModules, - modulesInManualChunks - ); + const { dependentEntryPointsByModule, dynamicEntryModules } = analyzeModuleGraph(entryModules); const dynamicallyDependentEntryPointsByDynamicEntry: DependentModuleMap = getDynamicDependentEntryPoints( dependentEntryPointsByModule, dynamicEntryModules @@ -59,16 +56,16 @@ export function getChunkAssignments( function areEntryPointsContainedOrDynamicallyDependent( entryPoints: Set, - superSet: Set + containedIn: Set ): boolean { const entriesToCheck = new Set(entryPoints); for (const entry of entriesToCheck) { - if (!superSet.has(entry)) { + if (!containedIn.has(entry)) { if (staticEntries.has(entry)) return false; - const dynamicDependentEntryPoints = dynamicallyDependentEntryPointsByDynamicEntry.get( + const dynamicallyDependentEntryPoints = dynamicallyDependentEntryPointsByDynamicEntry.get( entry )!; - for (const dependentEntry of dynamicDependentEntryPoints) { + for (const dependentEntry of dynamicallyDependentEntryPoints) { entriesToCheck.add(dependentEntry); } } @@ -115,8 +112,7 @@ function addStaticDependenciesToManualChunk( } function analyzeModuleGraph( - entryModules: Module[], - modulesInManualChunks: Set + entryModules: Module[] ): { dependentEntryPointsByModule: DependentModuleMap; dynamicEntryModules: Set; @@ -134,20 +130,14 @@ function analyzeModuleGraph( } } for (const { resolution } of module.dynamicImports) { - if ( - resolution instanceof Module && - resolution.includedDynamicImporters.length > 0 && - !modulesInManualChunks.has(resolution) - ) { + if (resolution instanceof Module && resolution.includedDynamicImporters.length > 0) { dynamicEntryModules.add(resolution); entriesToHandle.add(resolution); } } for (const dependency of module.implicitlyLoadedBefore) { - if (!modulesInManualChunks.has(dependency)) { - dynamicEntryModules.add(dependency); - entriesToHandle.add(dependency); - } + dynamicEntryModules.add(dependency); + entriesToHandle.add(dependency); } } } diff --git a/test/form/samples/custom-module-context-function/_config.js b/test/form/samples/custom-module-context-function/_config.js index e42a80b2638..c10efdfacbe 100644 --- a/test/form/samples/custom-module-context-function/_config.js +++ b/test/form/samples/custom-module-context-function/_config.js @@ -3,7 +3,12 @@ module.exports = { expectedWarnings: ['THIS_IS_UNDEFINED'], options: { moduleContext(id) { - return /main\.js$/.test(id) ? 'lolwut' : 'undefined'; + if (id.endsWith('main.js')) { + return 'window'; + } + if (id.endsWith('foo.js')) { + return 'global'; + } } } }; diff --git a/test/form/samples/custom-module-context-function/_expected.js b/test/form/samples/custom-module-context-function/_expected.js new file mode 100644 index 00000000000..c4918f43758 --- /dev/null +++ b/test/form/samples/custom-module-context-function/_expected.js @@ -0,0 +1,5 @@ +global.prop = 'foo'; + +undefined.prop = 'bar'; + +window.prop = 'main'; diff --git a/test/form/samples/custom-module-context-function/_expected/amd.js b/test/form/samples/custom-module-context-function/_expected/amd.js deleted file mode 100644 index 92747997ff2..00000000000 --- a/test/form/samples/custom-module-context-function/_expected/amd.js +++ /dev/null @@ -1,7 +0,0 @@ -define(function () { 'use strict'; - - undefined.prop = 'nope'; - - lolwut.prop = '???'; - -}); diff --git a/test/form/samples/custom-module-context-function/_expected/cjs.js b/test/form/samples/custom-module-context-function/_expected/cjs.js deleted file mode 100644 index 35a5b08d3a9..00000000000 --- a/test/form/samples/custom-module-context-function/_expected/cjs.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -undefined.prop = 'nope'; - -lolwut.prop = '???'; diff --git a/test/form/samples/custom-module-context-function/_expected/es.js b/test/form/samples/custom-module-context-function/_expected/es.js deleted file mode 100644 index a6903e00c89..00000000000 --- a/test/form/samples/custom-module-context-function/_expected/es.js +++ /dev/null @@ -1,3 +0,0 @@ -undefined.prop = 'nope'; - -lolwut.prop = '???'; diff --git a/test/form/samples/custom-module-context-function/_expected/iife.js b/test/form/samples/custom-module-context-function/_expected/iife.js deleted file mode 100644 index 7926fe6e7ea..00000000000 --- a/test/form/samples/custom-module-context-function/_expected/iife.js +++ /dev/null @@ -1,8 +0,0 @@ -(function () { - 'use strict'; - - undefined.prop = 'nope'; - - lolwut.prop = '???'; - -}()); diff --git a/test/form/samples/custom-module-context-function/_expected/system.js b/test/form/samples/custom-module-context-function/_expected/system.js deleted file mode 100644 index 1e323399d00..00000000000 --- a/test/form/samples/custom-module-context-function/_expected/system.js +++ /dev/null @@ -1,12 +0,0 @@ -System.register([], function () { - 'use strict'; - return { - execute: function () { - - undefined.prop = 'nope'; - - lolwut.prop = '???'; - - } - }; -}); diff --git a/test/form/samples/custom-module-context-function/_expected/umd.js b/test/form/samples/custom-module-context-function/_expected/umd.js deleted file mode 100644 index 79188921edf..00000000000 --- a/test/form/samples/custom-module-context-function/_expected/umd.js +++ /dev/null @@ -1,10 +0,0 @@ -(function (factory) { - typeof define === 'function' && define.amd ? define(factory) : - factory(); -}((function () { 'use strict'; - - undefined.prop = 'nope'; - - lolwut.prop = '???'; - -}))); diff --git a/test/form/samples/custom-module-context-function/bar.js b/test/form/samples/custom-module-context-function/bar.js new file mode 100644 index 00000000000..8fac7db67d4 --- /dev/null +++ b/test/form/samples/custom-module-context-function/bar.js @@ -0,0 +1 @@ +this.prop = 'bar'; diff --git a/test/form/samples/custom-module-context-function/foo.js b/test/form/samples/custom-module-context-function/foo.js index a5a991d6d63..f1342c2914b 100644 --- a/test/form/samples/custom-module-context-function/foo.js +++ b/test/form/samples/custom-module-context-function/foo.js @@ -1 +1 @@ -this.prop = 'nope'; +this.prop = 'foo'; diff --git a/test/form/samples/custom-module-context-function/main.js b/test/form/samples/custom-module-context-function/main.js index 1323b6820ce..87b1865062b 100644 --- a/test/form/samples/custom-module-context-function/main.js +++ b/test/form/samples/custom-module-context-function/main.js @@ -1,2 +1,3 @@ import './foo.js'; -this.prop = '???'; +import './bar.js'; +this.prop = 'main'; diff --git a/test/form/samples/side-effects-internal-modules/_config.js b/test/form/samples/side-effects-internal-modules/_config.js new file mode 100644 index 00000000000..aa9d774424c --- /dev/null +++ b/test/form/samples/side-effects-internal-modules/_config.js @@ -0,0 +1,28 @@ +const assert = require('assert'); +const VIRTUAL_ID = '\0virtual'; + +module.exports = { + description: 'does not pass internal modules to moduleSideEffects', + expectedWarnings: ['EMPTY_BUNDLE'], + options: { + treeshake: { + moduleSideEffects: id => { + assert.notStrictEqual(id, VIRTUAL_ID); + return false; + } + }, + plugins: { + name: 'test-plugin', + resolveId(id) { + if (id === 'virtual') { + return VIRTUAL_ID; + } + }, + load(id) { + if (id === VIRTUAL_ID) { + return "console.log('effect')"; + } + } + } + } +}; diff --git a/test/form/samples/side-effects-internal-modules/_expected.js b/test/form/samples/side-effects-internal-modules/_expected.js new file mode 100644 index 00000000000..49686f47986 --- /dev/null +++ b/test/form/samples/side-effects-internal-modules/_expected.js @@ -0,0 +1,3 @@ +console.log('effect'); + +console.log('main'); diff --git a/test/form/samples/side-effects-internal-modules/main.js b/test/form/samples/side-effects-internal-modules/main.js new file mode 100644 index 00000000000..2a3bd7a3f51 --- /dev/null +++ b/test/form/samples/side-effects-internal-modules/main.js @@ -0,0 +1,2 @@ +import 'virtual'; +console.log('main'); diff --git a/test/function/samples/cannot-resolve-sourcemap-warning/_config.js b/test/function/samples/cannot-resolve-sourcemap-warning/_config.js new file mode 100644 index 00000000000..a803b5b72e8 --- /dev/null +++ b/test/function/samples/cannot-resolve-sourcemap-warning/_config.js @@ -0,0 +1,45 @@ +const path = require('path'); +const ID_MAIN = path.join(__dirname, 'main.js'); + +module.exports = { + description: 'handles when a sourcemap cannot be resolved in a warning', + options: { + plugins: { + name: 'test-plugin', + transform() { + return { code: 'export default this', map: { mappings: 'X' } }; + } + } + }, + warnings: [ + { + code: 'SOURCEMAP_ERROR', + id: ID_MAIN, + loc: { + column: 15, + file: ID_MAIN, + line: 1 + }, + message: + "Error when using sourcemap for reporting an error: Can't resolve original location of error.", + pos: 15 + }, + { + code: 'THIS_IS_UNDEFINED', + frame: ` + 1: export default this + ^ + `, + id: ID_MAIN, + loc: { + column: 15, + file: ID_MAIN, + line: 1 + }, + message: + "The 'this' keyword is equivalent to 'undefined' at the top level of an ES module, and has been rewritten", + pos: 15, + url: 'https://rollupjs.org/guide/en/#error-this-is-undefined' + } + ] +}; diff --git a/test/function/samples/cannot-resolve-sourcemap-warning/main.js b/test/function/samples/cannot-resolve-sourcemap-warning/main.js new file mode 100644 index 00000000000..a9244a453fb --- /dev/null +++ b/test/function/samples/cannot-resolve-sourcemap-warning/main.js @@ -0,0 +1 @@ +throw new Error('Not executed'); diff --git a/test/function/samples/emit-file/chunk-filename-not-available-buildEnd/_config.js b/test/function/samples/emit-file/chunk-filename-not-available-buildEnd/_config.js new file mode 100644 index 00000000000..95688f451a8 --- /dev/null +++ b/test/function/samples/emit-file/chunk-filename-not-available-buildEnd/_config.js @@ -0,0 +1,25 @@ +let chunkId; + +module.exports = { + description: 'Throws when accessing the filename before it has been generated in buildEnd', + options: { + input: 'main.js', + plugins: { + name: 'test-plugin', + buildStart() { + chunkId = this.emitFile({ type: 'chunk', id: 'chunk.js' }); + }, + buildEnd() { + this.getFileName(chunkId); + } + } + }, + error: { + code: 'PLUGIN_ERROR', + hook: 'buildEnd', + message: + 'Plugin error - Unable to get file name for chunk "chunk.js". Ensure that generate is called first.', + plugin: 'test-plugin', + pluginCode: 'CHUNK_NOT_GENERATED' + } +}; diff --git a/test/function/samples/emit-file/chunk-filename-not-available-buildEnd/chunk.js b/test/function/samples/emit-file/chunk-filename-not-available-buildEnd/chunk.js new file mode 100644 index 00000000000..36b1d61dd25 --- /dev/null +++ b/test/function/samples/emit-file/chunk-filename-not-available-buildEnd/chunk.js @@ -0,0 +1 @@ +console.log('chunk'); diff --git a/test/function/samples/emit-file/chunk-filename-not-available-buildEnd/main.js b/test/function/samples/emit-file/chunk-filename-not-available-buildEnd/main.js new file mode 100644 index 00000000000..c0b933d7b56 --- /dev/null +++ b/test/function/samples/emit-file/chunk-filename-not-available-buildEnd/main.js @@ -0,0 +1 @@ +console.log('main'); diff --git a/test/function/samples/emit-file/chunk-filename-not-available-renderStart/_config.js b/test/function/samples/emit-file/chunk-filename-not-available-renderStart/_config.js new file mode 100644 index 00000000000..8a35d9cfc2e --- /dev/null +++ b/test/function/samples/emit-file/chunk-filename-not-available-renderStart/_config.js @@ -0,0 +1,25 @@ +let chunkId; + +module.exports = { + description: 'Throws when accessing the filename before it has been generated in renderStart', + options: { + input: 'main.js', + plugins: { + name: 'test-plugin', + buildStart() { + chunkId = this.emitFile({ type: 'chunk', id: 'chunk.js' }); + }, + renderStart() { + this.getFileName(chunkId); + } + } + }, + generateError: { + code: 'PLUGIN_ERROR', + hook: 'renderStart', + message: + 'Plugin error - Unable to get file name for chunk "chunk.js". Ensure that generate is called first.', + plugin: 'test-plugin', + pluginCode: 'CHUNK_NOT_GENERATED' + } +}; diff --git a/test/function/samples/emit-file/chunk-filename-not-available-renderStart/chunk.js b/test/function/samples/emit-file/chunk-filename-not-available-renderStart/chunk.js new file mode 100644 index 00000000000..36b1d61dd25 --- /dev/null +++ b/test/function/samples/emit-file/chunk-filename-not-available-renderStart/chunk.js @@ -0,0 +1 @@ +console.log('chunk'); diff --git a/test/function/samples/emit-file/chunk-filename-not-available-renderStart/main.js b/test/function/samples/emit-file/chunk-filename-not-available-renderStart/main.js new file mode 100644 index 00000000000..c0b933d7b56 --- /dev/null +++ b/test/function/samples/emit-file/chunk-filename-not-available-renderStart/main.js @@ -0,0 +1 @@ +console.log('main'); From 97f51ceccea7b5334c276de9944f65ea55dc3100 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sun, 21 Jun 2020 07:38:11 +0200 Subject: [PATCH 17/20] Merge generate and write --- src/rollup/rollup.ts | 84 ++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/rollup/rollup.ts b/src/rollup/rollup.ts index 0be0d04d22d..fa732647c43 100644 --- a/src/rollup/rollup.ts +++ b/src/rollup/rollup.ts @@ -65,58 +65,24 @@ export async function rollupInternal( const result: RollupBuild = { cache: useCache ? graph.getCache() : undefined, - // TODO Lukas merge generate and write here async generate(rawOutputOptions: OutputOptions) { - const { - options: outputOptions, - outputPluginDriver, - unsetOptions - } = getOutputOptionsAndPluginDriver( - rawOutputOptions as GenericConfigObject, - graph.pluginDriver, - inputOptions, - unsetInputOptions - ); - const bundle = new Bundle( - outputOptions, - unsetOptions, + return handleGenerateWrite( + false, inputOptions, - outputPluginDriver, + unsetInputOptions, + rawOutputOptions as GenericConfigObject, graph ); - return createOutput(await bundle.generate(false)); }, watchFiles: Object.keys(graph.watchFiles), async write(rawOutputOptions: OutputOptions) { - const { - options: outputOptions, - outputPluginDriver, - unsetOptions - } = getOutputOptionsAndPluginDriver( - rawOutputOptions as GenericConfigObject, - graph.pluginDriver, + return handleGenerateWrite( + true, inputOptions, - unsetInputOptions - ); - if (!outputOptions.dir && !outputOptions.file) { - return error({ - code: 'MISSING_OPTION', - message: 'You must specify "output.file" or "output.dir" for the build.' - }); - } - const bundle = new Bundle( - outputOptions, - unsetOptions, - inputOptions, - outputPluginDriver, + unsetInputOptions, + rawOutputOptions as GenericConfigObject, graph ); - const generated = await bundle.generate(true); - await Promise.all( - Object.keys(generated).map(chunkId => writeOutputFile(generated[chunkId], outputOptions)) - ); - await outputPluginDriver.hookParallel('writeBundle', [outputOptions, generated]); - return createOutput(generated); } }; if (inputOptions.perf) result.getTimings = getTimings; @@ -161,6 +127,40 @@ function normalizePlugins(plugins: Plugin[], anonymousPrefix: string): void { } } +async function handleGenerateWrite( + isWrite: boolean, + inputOptions: NormalizedInputOptions, + unsetInputOptions: Set, + rawOutputOptions: GenericConfigObject, + graph: Graph +): Promise { + const { + options: outputOptions, + outputPluginDriver, + unsetOptions + } = getOutputOptionsAndPluginDriver( + rawOutputOptions, + graph.pluginDriver, + inputOptions, + unsetInputOptions + ); + const bundle = new Bundle(outputOptions, unsetOptions, inputOptions, outputPluginDriver, graph); + const generated = await bundle.generate(isWrite); + if (isWrite) { + if (!outputOptions.dir && !outputOptions.file) { + return error({ + code: 'MISSING_OPTION', + message: 'You must specify "output.file" or "output.dir" for the build.' + }); + } + await Promise.all( + Object.keys(generated).map(chunkId => writeOutputFile(generated[chunkId], outputOptions)) + ); + await outputPluginDriver.hookParallel('writeBundle', [outputOptions, generated]); + } + return createOutput(generated); +} + function getOutputOptionsAndPluginDriver( rawOutputOptions: GenericConfigObject, inputPluginDriver: PluginDriver, From 5acff41c983a8d97bac8a72fa519734c0f4f8be3 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sun, 21 Jun 2020 08:03:56 +0200 Subject: [PATCH 18/20] Structure Bundle.generate --- src/Bundle.ts | 110 +++++++++++++++++++++++++++----------------------- 1 file changed, 60 insertions(+), 50 deletions(-) diff --git a/src/Bundle.ts b/src/Bundle.ts index 9578f303698..d66eace0925 100644 --- a/src/Bundle.ts +++ b/src/Bundle.ts @@ -31,7 +31,6 @@ export default class Bundle { private readonly graph: Graph ) {} - // TODO Lukas make this one nicer by structuring it async generate(isWrite: boolean): Promise { timeStart('GENERATE', 1); const outputBundle: OutputBundleWithPlaceholders = Object.create(null); @@ -45,36 +44,21 @@ export default class Bundle { timeStart('generate chunks', 2); const chunks = await this.generateChunks(); - timeEnd('generate chunks', 2); - - timeStart('render modules', 2); if (chunks.length > 1) { validateOptionsForMultiChunkOutput(this.outputOptions); } - const addons = await createAddons(this.outputOptions, this.pluginDriver); - for (const chunk of chunks) { - chunk.generateExports(); - } const inputBase = commondir(getAbsoluteEntryModulePaths(chunks)); - for (const chunk of chunks) { - chunk.preRender(this.outputOptions, inputBase, this.pluginDriver); - } - timeEnd('render modules', 2); + timeEnd('generate chunks', 2); - this.assignChunkIds(chunks, inputBase, addons, outputBundle); - assignChunksToBundle(chunks, outputBundle); + timeStart('render modules', 2); - await Promise.all( - chunks.map(chunk => { - const outputChunk = outputBundle[chunk.id!] as OutputChunk; - return chunk - .render(this.outputOptions, addons, outputChunk, this.pluginDriver) - .then(rendered => { - outputChunk.code = rendered.code; - outputChunk.map = rendered.map; - }); - }) - ); + // We need to create addons before prerender because at the moment, there + // can be no async code between prerender and render due to internal state + const addons = await createAddons(this.outputOptions, this.pluginDriver); + this.prerenderChunks(chunks, inputBase); + timeEnd('render modules', 2); + + await this.addFinalizedChunksToBundle(chunks, inputBase, addons, outputBundle); } catch (error) { await this.pluginDriver.hookParallel('renderError', [error]); throw error; @@ -84,23 +68,38 @@ export default class Bundle { outputBundle as OutputBundle, isWrite ]); - for (const key of Object.keys(outputBundle)) { - const file = outputBundle[key] as any; - if (!file.type) { - warnDeprecation( - 'A plugin is directly adding properties to the bundle object in the "generateBundle" hook. This is deprecated and will be removed in a future Rollup version, please use "this.emitFile" instead.', - true, - this.inputOptions - ); - file.type = 'asset'; - } - } - this.pluginDriver.finaliseAssets(); + this.finaliseAssets(outputBundle); timeEnd('GENERATE', 1); return outputBundle as OutputBundle; } + private async addFinalizedChunksToBundle( + chunks: Chunk[], + inputBase: string, + addons: Addons, + outputBundle: OutputBundleWithPlaceholders + ): Promise { + this.assignChunkIds(chunks, inputBase, addons, outputBundle); + for (const chunk of chunks) { + const chunkDescription = (outputBundle[ + chunk.id! + ] = chunk.getPrerenderedChunk() as OutputChunk); + chunkDescription.fileName = chunk.id!; + } + await Promise.all( + chunks.map(chunk => { + const outputChunk = outputBundle[chunk.id!] as OutputChunk; + return chunk + .render(this.outputOptions, addons, outputChunk, this.pluginDriver) + .then(rendered => { + outputChunk.code = rendered.code; + outputChunk.map = rendered.map; + }); + }) + ); + } + private async addManualChunks( manualChunks: Record ): Promise> { @@ -170,6 +169,21 @@ export default class Bundle { return manualChunkAliasByEntry; } + private finaliseAssets(outputBundle: OutputBundleWithPlaceholders): void { + for (const key of Object.keys(outputBundle)) { + const file = outputBundle[key] as any; + if (!file.type) { + warnDeprecation( + 'A plugin is directly adding properties to the bundle object in the "generateBundle" hook. This is deprecated and will be removed in a future Rollup version, please use "this.emitFile" instead.', + true, + this.inputOptions + ); + file.type = 'asset'; + } + } + this.pluginDriver.finaliseAssets(); + } + private async generateChunks(): Promise { const { manualChunks } = this.outputOptions; const manualChunkAliasByEntry = @@ -211,6 +225,15 @@ export default class Bundle { } return [...chunks, ...facades]; } + + private prerenderChunks(chunks: Chunk[], inputBase: string): void { + for (const chunk of chunks) { + chunk.generateExports(); + } + for (const chunk of chunks) { + chunk.preRender(this.outputOptions, inputBase, this.pluginDriver); + } + } } function getAbsoluteEntryModulePaths(chunks: Chunk[]): string[] { @@ -245,19 +268,6 @@ function validateOptionsForMultiChunkOutput(outputOptions: NormalizedOutputOptio }); } -function assignChunksToBundle( - chunks: Chunk[], - outputBundle: OutputBundleWithPlaceholders -): OutputBundle { - for (const chunk of chunks) { - const chunkdDescription = (outputBundle[ - chunk.id! - ] = chunk.getPrerenderedChunk() as OutputChunk); - chunkdDescription.fileName = chunk.id!; - } - return outputBundle as OutputBundle; -} - function getIncludedModules(modulesById: Map): Module[] { return [...modulesById.values()].filter( module => From b143cb75eeaa401b7f6f35224f678e772330c3fc Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sun, 21 Jun 2020 20:59:31 +0200 Subject: [PATCH 19/20] Simplify and clean up how fetched module dependencies are linked --- src/Module.ts | 42 ++++++++++++----------- src/ModuleLoader.ts | 84 +++++++++++++++++++++------------------------ 2 files changed, 61 insertions(+), 65 deletions(-) diff --git a/src/Module.ts b/src/Module.ts index da9eac2d129..02b30f5e5ad 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -41,7 +41,7 @@ import { RollupWarning, TransformModuleJSON } from './rollup/types'; -import { augmentCodeLocation, error, Errors } from './utils/error'; +import { augmentCodeLocation, errNamespaceConflict, error, Errors } from './utils/error'; import { getId } from './utils/getId'; import { getOriginalLocation } from './utils/getOriginalLocation'; import { makeLegal } from './utils/identifierHelpers'; @@ -542,29 +542,31 @@ export default class Module { return this.ast.included || this.namespace.included; } - linkDependencies() { - for (const source of this.sources) { - this.dependencies.add(this.graph.modulesById.get(this.resolvedIds[source].id)!); - } - for (const { resolution } of this.dynamicImports) { - if (resolution instanceof Module || resolution instanceof ExternalModule) { - this.dynamicDependencies.add(resolution); - } - } - + linkImports() { this.addModulesToImportDescriptions(this.importDescriptions); this.addModulesToImportDescriptions(this.reexportDescriptions); - + for (const name in this.exports) { + if (name !== 'default') { + this.exportsAll[name] = this.id; + } + } const externalExportAllModules: ExternalModule[] = []; for (const source of this.exportAllSources) { - const module = this.graph.modulesById.get(this.resolvedIds[source].id) as - | Module - | ExternalModule; - (module instanceof ExternalModule ? externalExportAllModules : this.exportAllModules).push( - module - ); + const module = this.graph.modulesById.get(this.resolvedIds[source].id)!; + if (module instanceof ExternalModule) { + externalExportAllModules.push(module); + continue; + } + this.exportAllModules.push(module); + for (const name in module.exportsAll) { + if (name in this.exportsAll) { + this.options.onwarn(errNamespaceConflict(name, this, module)); + } else { + this.exportsAll[name] = module.exportsAll[name]; + } + } } - this.exportAllModules = [...this.exportAllModules, ...externalExportAllModules]; + this.exportAllModules.push(...externalExportAllModules); } render(options: RenderOptions): MagicString { @@ -873,7 +875,7 @@ export default class Module { for (const name of Object.keys(importDescription)) { const specifier = importDescription[name]; const id = this.resolvedIds[specifier.source].id; - specifier.module = this.graph.modulesById.get(id) as Module | ExternalModule; + specifier.module = this.graph.modulesById.get(id)!; } } diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts index e9407e0ee1a..e86cff74e05 100644 --- a/src/ModuleLoader.ts +++ b/src/ModuleLoader.ts @@ -16,7 +16,6 @@ import { errExternalSyntheticExports, errImplicitDependantCannotBeExternal, errInternalIdCannotBeExternal, - errNamespaceConflict, error, errUnresolvedEntry, errUnresolvedImplicitDependant, @@ -239,37 +238,32 @@ export class ModuleLoader { return loadNewModulesPromise; } - private fetchAllDependencies(module: Module): Promise { - return Promise.all([ - ...Array.from(module.sources, async source => { - const resolution = await this.fetchResolvedDependency( - source, - module.id, - (module.resolvedIds[source] = - module.resolvedIds[source] || - this.handleResolveId(await this.resolveId(source, module.id), source, module.id)) - ); - resolution.importers.push(module.id); - }), - ...module.dynamicImports.map(async dynamicImport => { + private async fetchDynamicDependencies(module: Module): Promise { + const dependencies = await Promise.all( + module.dynamicImports.map(async dynamicImport => { const resolvedId = await this.resolveDynamicImport( module, dynamicImport.argument, module.id ); - if (resolvedId === null) return; + if (resolvedId === null) return null; if (typeof resolvedId === 'string') { dynamicImport.resolution = resolvedId; - } else { - const resolution = (dynamicImport.resolution = await this.fetchResolvedDependency( - relativeId(resolvedId.id), - module.id, - resolvedId - )); - resolution.dynamicImporters.push(module.id); + return null; } + return (dynamicImport.resolution = await this.fetchResolvedDependency( + relativeId(resolvedId.id), + module.id, + resolvedId + )); }) - ]); + ); + for (const dependency of dependencies) { + if (dependency) { + module.dynamicDependencies.add(dependency); + dependency.dynamicImporters.push(module.id); + } + } } private async fetchModule( @@ -303,28 +297,11 @@ export class ModuleLoader { this.modulesById.set(id, module); this.graph.watchFiles[id] = true; await this.addModuleSource(id, importer, module); - // TODO Lukas maybe get dependencies from here so that we do not fiddle with sources? - await this.fetchAllDependencies(module); - - for (const name in module.exports) { - if (name !== 'default') { - module.exportsAll[name] = module.id; - } - } - for (const source of module.exportAllSources) { - const id = module.resolvedIds[source].id; - const exportAllModule = this.modulesById.get(id); - if (exportAllModule instanceof ExternalModule) continue; - for (const name in exportAllModule!.exportsAll) { - if (name in module.exportsAll) { - this.options.onwarn(errNamespaceConflict(name, module, exportAllModule!)); - } else { - module.exportsAll[name] = exportAllModule!.exportsAll[name]; - } - } - } - // TODO Lukas can this be merged with the previous and simplified, remove some properties etc.? - module.linkDependencies(); + await Promise.all([ + this.fetchStaticDependencies(module), + this.fetchDynamicDependencies(module) + ]); + module.linkImports(); return module; } @@ -357,6 +334,23 @@ export class ModuleLoader { } } + private async fetchStaticDependencies(module: Module): Promise { + for (const dependency of await Promise.all( + Array.from(module.sources, async source => + this.fetchResolvedDependency( + source, + module.id, + (module.resolvedIds[source] = + module.resolvedIds[source] || + this.handleResolveId(await this.resolveId(source, module.id), source, module.id)) + ) + ) + )) { + module.dependencies.add(dependency); + dependency.importers.push(module.id); + } + } + private handleResolveId( resolvedId: ResolvedId | null, source: string, From c8b71cee763f839a6f8a2e7aeefd661ad34b74f2 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sun, 21 Jun 2020 21:37:25 +0200 Subject: [PATCH 20/20] Update documentation --- docs/01-command-line-reference.md | 6 +- docs/02-javascript-api.md | 6 +- docs/04-tutorial.md | 2 +- docs/06-faqs.md | 4 +- docs/999-big-list-of-options.md | 300 +++++++++++++++--------------- 5 files changed, 163 insertions(+), 155 deletions(-) diff --git a/docs/01-command-line-reference.md b/docs/01-command-line-reference.md index 2a5a6819746..057b6e8cdc0 100755 --- a/docs/01-command-line-reference.md +++ b/docs/01-command-line-reference.md @@ -35,11 +35,8 @@ export default { // can be an array (for multiple inputs) // advanced input options cache, - inlineDynamicImports, - manualChunks, onwarn, preserveEntrySignatures, - preserveModules, strictDeprecations, // danger zone @@ -73,11 +70,14 @@ export default { // can be an array (for multiple inputs) extend, footer, hoistTransitiveImports, + inlineDynamicImports, interop, intro, + manualChunks, minifyInternalExports, outro, paths, + preserveModules, sourcemap, sourcemapExcludeSources, sourcemapFile, diff --git a/docs/02-javascript-api.md b/docs/02-javascript-api.md index cadcae07379..ed03f0a12aa 100755 --- a/docs/02-javascript-api.md +++ b/docs/02-javascript-api.md @@ -83,11 +83,8 @@ const inputOptions = { // advanced input options cache, - inlineDynamicImports, - manualChunks, onwarn, preserveEntrySignatures, - preserveModules, strictDeprecations, // danger zone @@ -129,11 +126,14 @@ const outputOptions = { externalLiveBindings, footer, hoistTransitiveImports, + inlineDynamicImports, interop, intro, + manualChunks, minifyInternalExports, outro, paths, + preserveModules, sourcemap, sourcemapExcludeSources, sourcemapFile, diff --git a/docs/04-tutorial.md b/docs/04-tutorial.md index 9be6fbed265..7829cf3315e 100755 --- a/docs/04-tutorial.md +++ b/docs/04-tutorial.md @@ -282,7 +282,7 @@ var version=function(){"use strict";var n="1.0.0";return function(){console.log( ### Code Splitting -For code splitting, there are cases where Rollup splits code into chunks automatically, like dynamic loading or multiple entry points, and there is a way to explicitly tell Rollup which modules to split into separate chunks via the [`manualChunks`](guide/en/#manualchunks) option. +For code splitting, there are cases where Rollup splits code into chunks automatically, like dynamic loading or multiple entry points, and there is a way to explicitly tell Rollup which modules to split into separate chunks via the [`output.manualChunks`](guide/en/#outputmanualchunks) option. To use the code splitting feature to achieve the lazy dynamic loading (where some imported module(s) is only loaded after executing a function), we go back to the original example and modify `src/main.js` to load `src/foo.js` dynamically instead of statically: diff --git a/docs/06-faqs.md b/docs/06-faqs.md index 3fcb532f70a..fa902b4afa0 100755 --- a/docs/06-faqs.md +++ b/docs/06-faqs.md @@ -61,7 +61,7 @@ With this optimization, a JavaScript engine will discover all transitive depende 2. Load and parse `other-entry.js` and `external`. The import of `other-entry.js` is already loaded and parsed. 3. Execute `main.js`. -There may be situations where this optimization is not desired, in which case you can turn it off via the [`output.hoistTransitiveImports`](guide/en/#outputhoisttransitiveimports) option. This optimization is also never applied when using the [`preserveModules`](guide/en/#preservemodules) option. +There may be situations where this optimization is not desired, in which case you can turn it off via the [`output.hoistTransitiveImports`](guide/en/#outputhoisttransitiveimports) option. This optimization is also never applied when using the [`output.preserveModules`](guide/en/#outputpreservemodules) option. #### How do I add polyfills to a Rollup bundle? @@ -94,7 +94,7 @@ For most code this is not a problem, because Rollup can guarantee: This is however a problem for polyfills, as those usually need to be executed first but it is usually not desired to place an import of the polyfill in every single module. Luckily, this is not needed: 1. If there are no external dependencies that depend on the polyfill, it is enough to add an import of the polyfill as first statement to each static entry point. -2. Otherwise, additionally making the polyfill a separate entry or [manual chunk](guide/en/#manualchunks) will always make sure it is executed first. +2. Otherwise, additionally making the polyfill a separate entry or [manual chunk](guide/en/#outputmanualchunks) will always make sure it is executed first. #### Is Rollup meant for building libraries or applications? diff --git a/docs/999-big-list-of-options.md b/docs/999-big-list-of-options.md index 58270b8758f..52870464e0d 100755 --- a/docs/999-big-list-of-options.md +++ b/docs/999-big-list-of-options.md @@ -316,92 +316,6 @@ buildWithCache() }) ``` -#### inlineDynamicImports -Type: `boolean`
-CLI: `--inlineDynamicImports`/`--no-inlineDynamicImports` -Default: `false` - -This will inline dynamic imports instead of creating new chunks to create a single bundle. Only possible if a single input is provided. - -#### manualChunks -Type: `{ [chunkAlias: string]: string[] } | ((id: string, {getModuleInfo, getModuleIds}) => string | void)` - -Allows the creation of custom shared common chunks. When using the object form, each property represents a chunk that contains the listed modules and all their dependencies if they are part of the module graph unless they are already in another manual chunk. The name of the chunk will be determined by the property key. - -Note that it is not necessary for the listed modules themselves to be be part of the module graph, which is useful if you are working with `@rollup/plugin-node-resolve` and use deep imports from packages. For instance - -``` -manualChunks: { - lodash: ['lodash'] -} -``` - -will put all lodash modules into a manual chunk even if you are only using imports of the form `import get from 'lodash/get'`. - -When using the function form, each resolved module id will be passed to the function. If a string is returned, the module and all its dependency will be added to the manual chunk with the given name. For instance this will create a `vendor` chunk containing all dependencies inside `node_modules`: - -```javascript -manualChunks(id) { - if (id.includes('node_modules')) { - return 'vendor'; - } -} -``` - -Be aware that manual chunks can change the behaviour of the application if side-effects are triggered before the corresponding modules are actually used. - -When using the function form, `manualChunks` will be passed an object as second parameter containing the functions `getModuleInfo` and `getModuleIds` that work the same way as [`this.getModuleInfo`](guide/en/#thisgetmoduleinfomoduleid-string--moduleinfo) and [`this.getModuleIds`](guide/en/#thisgetmoduleids--iterableiteratorstring) on the plugin context. - -This can be used to dynamically determine into which manual chunk a module should be placed depending on its position in the module graph. For instance consider a scenario where you have a set of components, each of which dynamically imports a set of translated strings, i.e. - -```js -// Inside the "foo" component - -function getTranslatedStrings(currentLanguage) { - switch (currentLanguage) { - case 'en': return import('./foo.strings.en.js'); - case 'de': return import('./foo.strings.de.js'); - // ... - } -} -``` - -If a lot of such components are used together, this will result in a lot of dynamic imports of very small chunks: Even though we known that all language files of the same language that are imported by the same chunk will always be used together, Rollup does not have this information. - -The following code will merge all files of the same language that are only used by a single entry point: - -```js -manualChunks(id, { getModuleInfo }) { - const match = /.*\.strings\.(\w+)\.js/.exec(id); - if (match) { - const language = match[1]; // e.g. "en" - const dependentEntryPoints = []; - - // we use a Set here so we handle each module at most once. This - // prevents infinite loops in case of circular dependencies - const idsToHandle = new Set(getModuleInfo(id).dynamicImporters); - - for (const moduleId of idsToHandle) { - const { isEntry, dynamicImporters, importers } = getModuleInfo(moduleId); - if (isEntry || dynamicImporters.length > 0) dependentEntryPoints.push(moduleId); - - // The Set iterator is intelligent enough to iterate over elements that - // are added during iteration - for (const importerId of importers) idsToHandle.add(importerId); - } - - // If there is a unique entry, we put it into into a chunk based on the entry name - if (dependentEntryPoints.length === 1) { - return `${dependentEntryPoints[0].split('/').slice(-1)[0].split('.')[0]}.strings.${language}`; - } - // For multiple entries, we put it into a "shared" chunk - if (dependentEntryPoints.length > 1) { - return `shared.strings.${language}`; - } - } -} -``` - #### onwarn Type: `(warning: RollupWarning, defaultHandler: (warning: string | RollupWarning) => void) => void;` @@ -485,7 +399,7 @@ Default: `"[name]-[hash].js"` The pattern to use for naming shared chunks created when code-splitting. Pattern supports the following placeholders: * `[format]`: The rendering format defined in the output options, e.g. `es` or `cjs`. * `[hash]`: A hash based on the content of the chunk and the content of all its dependencies. - * `[name]`: The name of the chunk. This can be explicitly set via the [`manualChunks`](guide/en/#manualchunks) option or when the chunk is created by a plugin via [`this.emitFile`](guide/en/#thisemitfileemittedfile-emittedchunk--emittedasset--string). Otherwise it will be derived from the chunk contents. + * `[name]`: The name of the chunk. This can be explicitly set via the [`output.manualChunks`](guide/en/#outputmanualchunks) option or when the chunk is created by a plugin via [`this.emitFile`](guide/en/#thisemitfileemittedfile-emittedchunk--emittedasset--string). Otherwise it will be derived from the chunk contents. Forward slashes `/` can be used to place files in sub-directories. See also [`output.assetFileNames`](guide/en/#outputassetfilenames), [`output.entryFileNames`](guide/en/#outputentryfilenames). @@ -508,7 +422,7 @@ The pattern to use for chunks created from entry points. Pattern supports the fo Forward slashes `/` can be used to place files in sub-directories. See also [`output.assetFileNames`](guide/en/#outputassetfilenames), [`output.chunkFileNames`](guide/en/#outputchunkfilenames). -This pattern will also be used when using the [`preserveModules`](guide/en/#preservemodules) option. Here there is a different set of placeholders available, though: +This pattern will also be used when using the [`output.preserveModules`](guide/en/#outputpreservemodules) option. Here there is a different set of placeholders available, though: * `[format]`: The rendering format defined in the output options. * `[name]`: The file name (without extension) of the file. * `[ext]`: The extension of the file. @@ -526,7 +440,14 @@ Type: `boolean`
CLI: `--hoistTransitiveImports`/`--no-hoistTransitiveImports`
Default: `true` -By default when creating multiple chunks, transitive imports of entry chunks will be added as empty imports to the entry chunks. See ["Why do additional imports turn up in my entry chunks when code-splitting?"](guide/en/#why-do-additional-imports-turn-up-in-my-entry-chunks-when-code-splitting) for details and background. Setting this option to `false` will disable this behaviour. This option is ignored when using the [`preserveModules`](guide/en/#preservemodules) option as here, imports will never be hoisted. +By default when creating multiple chunks, transitive imports of entry chunks will be added as empty imports to the entry chunks. See ["Why do additional imports turn up in my entry chunks when code-splitting?"](guide/en/#why-do-additional-imports-turn-up-in-my-entry-chunks-when-code-splitting) for details and background. Setting this option to `false` will disable this behaviour. This option is ignored when using the [`output.preserveModules`](guide/en/#outputpreservemodules) option as here, imports will never be hoisted. + +#### output.inlineDynamicImports +Type: `boolean`
+CLI: `--inlineDynamicImports`/`--no-inlineDynamicImports` +Default: `false` + +This will inline dynamic imports instead of creating new chunks to create a single bundle. Only possible if a single input is provided. Note that this will change the execution order: A module that is only imported dynamically will be executed immediately if the dynamic import is inlined. #### output.interop Type: `boolean`
@@ -551,6 +472,85 @@ export default { }; ``` +#### output.manualChunks +Type: `{ [chunkAlias: string]: string[] } | ((id: string, {getModuleInfo, getModuleIds}) => string | void)` + +Allows the creation of custom shared common chunks. When using the object form, each property represents a chunk that contains the listed modules and all their dependencies if they are part of the module graph unless they are already in another manual chunk. The name of the chunk will be determined by the property key. + +Note that it is not necessary for the listed modules themselves to be be part of the module graph, which is useful if you are working with `@rollup/plugin-node-resolve` and use deep imports from packages. For instance + +``` +manualChunks: { + lodash: ['lodash'] +} +``` + +will put all lodash modules into a manual chunk even if you are only using imports of the form `import get from 'lodash/get'`. + +When using the function form, each resolved module id will be passed to the function. If a string is returned, the module and all its dependency will be added to the manual chunk with the given name. For instance this will create a `vendor` chunk containing all dependencies inside `node_modules`: + +```javascript +manualChunks(id) { + if (id.includes('node_modules')) { + return 'vendor'; + } +} +``` + +Be aware that manual chunks can change the behaviour of the application if side-effects are triggered before the corresponding modules are actually used. + +When using the function form, `manualChunks` will be passed an object as second parameter containing the functions `getModuleInfo` and `getModuleIds` that work the same way as [`this.getModuleInfo`](guide/en/#thisgetmoduleinfomoduleid-string--moduleinfo) and [`this.getModuleIds`](guide/en/#thisgetmoduleids--iterableiteratorstring) on the plugin context. + +This can be used to dynamically determine into which manual chunk a module should be placed depending on its position in the module graph. For instance consider a scenario where you have a set of components, each of which dynamically imports a set of translated strings, i.e. + +```js +// Inside the "foo" component + +function getTranslatedStrings(currentLanguage) { + switch (currentLanguage) { + case 'en': return import('./foo.strings.en.js'); + case 'de': return import('./foo.strings.de.js'); + // ... + } +} +``` + +If a lot of such components are used together, this will result in a lot of dynamic imports of very small chunks: Even though we known that all language files of the same language that are imported by the same chunk will always be used together, Rollup does not have this information. + +The following code will merge all files of the same language that are only used by a single entry point: + +```js +manualChunks(id, { getModuleInfo }) { + const match = /.*\.strings\.(\w+)\.js/.exec(id); + if (match) { + const language = match[1]; // e.g. "en" + const dependentEntryPoints = []; + + // we use a Set here so we handle each module at most once. This + // prevents infinite loops in case of circular dependencies + const idsToHandle = new Set(getModuleInfo(id).dynamicImporters); + + for (const moduleId of idsToHandle) { + const { isEntry, dynamicImporters, importers } = getModuleInfo(moduleId); + if (isEntry || dynamicImporters.length > 0) dependentEntryPoints.push(moduleId); + + // The Set iterator is intelligent enough to iterate over elements that + // are added during iteration + for (const importerId of importers) idsToHandle.add(importerId); + } + + // If there is a unique entry, we put it into into a chunk based on the entry name + if (dependentEntryPoints.length === 1) { + return `${dependentEntryPoints[0].split('/').slice(-1)[0].split('.')[0]}.strings.${language}`; + } + // For multiple entries, we put it into a "shared" chunk + if (dependentEntryPoints.length > 1) { + return `shared.strings.${language}`; + } + } +} +``` + #### output.minifyInternalExports Type: `boolean`
CLI: `--minifyInternalExports`/`--no-minifyInternalExports`
@@ -647,6 +647,54 @@ define(['https://d3js.org/d3.v4.min'], function (d3) { }); ``` +#### output.preserveModules +Type: `boolean`
+CLI: `--preserveModules`/`--no-preserveModules`
+Default: `false` + +Instead of creating as few chunks as possible, this mode will create separate chunks for all modules using the original module names as file names. Requires the [`output.dir`](guide/en/#outputdir) option. Tree-shaking will still be applied, suppressing files that are not used by the provided entry points or do not have side-effects when executed. This mode can be used to transform a file structure to a different module format. + +Note that when transforming to `cjs` or `amd` format, each file will by default be treated as an entry point with [`output.exports`](guide/en/#outputexports) set to `auto`. This means that e.g. for `cjs`, a file that only contains a default export will be rendered as + +```js +// input main.js +export default 42; + +// output main.js +'use strict'; + +var main = 42; + +module.exports = main; +``` + +assigning the value directly to `module.exports`. If someone imports this file, they will get access to the default export via + +```js +const main = require('./main.js'); +console.log(main); // 42 +``` + +As with regular entry points, files that mix default and named exports will produce warnings. You can avoid the warnings by forcing all files to use named export mode via `output.exports: "named"`. In that case, the default export needs to be accessed via the `.default` property of the export: + +```js +// input main.js +export default 42; + +// output main.js +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var main = 42; + +exports.default = main; + +// consuming file +const main = require('./main.js'); +console.log(main.default); // 42 +``` + #### output.sourcemap Type: `boolean | 'inline' | 'hidden'`
CLI: `-m`/`--sourcemap`/`--no-sourcemap`
@@ -769,55 +817,6 @@ console.log(shared); At the moment, the only way to override this setting for individual entry chunks is to use the plugin API and emit those chunks via [`this.emitFile`](guide/en/#thisemitfileemittedfile-emittedchunk--emittedasset--string) instead of using the [`input`](guide/en/#input) option. -#### preserveModules -Type: `boolean`
-CLI: `--preserveModules`/`--no-preserveModules`
-Default: `false` - -Instead of creating as few chunks as possible, this mode will create separate chunks for all modules using the original module names as file names. Requires the [`output.dir`](guide/en/#outputdir) option. Tree-shaking will still be applied, suppressing files that are not used by the provided entry points or do not have side-effects when executed. This mode can be used to transform a file structure to a different module format. - -Note that when transforming to `cjs` or `amd` format, each file will by default be treated as an entry point with [`output.exports`](guide/en/#outputexports) set to `auto`. This means that e.g. for `cjs`, a file that only contains a default export will be rendered as - -```js -// input main.js -export default 42; - -// output main.js -'use strict'; - -var main = 42; - -module.exports = main; -``` - -assigning the value directly to `module.exports`. If someone imports this file, they will get access to the default export via - -```js -const main = require('./main.js'); -console.log(main); // 42 -``` - -As with regular entry points, files that mix default and named exports will produce warnings. You can avoid the warnings by forcing all files to use named export mode via `output.exports: "named"`. In that case, the default export needs to be accessed via the `.default` property of the export: - -```js -// input main.js -export default 42; - -// output main.js -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -var main = 42; - -exports.default = main; - -// consuming file -const main = require('./main.js'); -console.log(main.default); // 42 -``` - - #### strictDeprecations Type: `boolean`
CLI: `--strictDeprecations`/`--no-strictDeprecations`
@@ -1363,6 +1362,23 @@ Whether to skip the `bundle.write()` step when a rebuild is triggered. ☢️ These options have been deprecated and may be removed in a future Rollup version. +#### inlineDynamicImports +_Use the [`output.inlineDynamicImports`](guide/en/#outputinlinedynamicimports) output option instead, which has the same signature._ + +#### manualChunks +_Use the [`output.manualChunks`](guide/en/#outputmanualchunks) output option instead, which has the same signature._ + +#### preserveModules +_Use the [`output.preserveModules`](guide/en/#outputpreservemodules) output option instead, which has the same signature._ + +#### output.dynamicImportFunction +_Use the [`renderDynamicImport`](guide/en/#renderdynamicimport) plugin hook instead._
+Type: `string`
+CLI: `--dynamicImportFunction `
+Default: `import` + +This will rename the dynamic import function to the chosen name when outputting ES bundles. This is useful for generating code that uses a dynamic import polyfill such as [this one](https://github.com/uupaa/dynamic-import-polyfill). + #### treeshake.pureExternalModules _Use [`treeshake.moduleSideEffects: 'no-external'`](guide/en/#treeshake) instead._
Type: `boolean | string[] | (id: string) => boolean | null`
@@ -1391,11 +1407,3 @@ console.log(42); ``` You can also supply a list of external ids to be considered pure or a function that is called whenever an external import could be removed. - -#### output.dynamicImportFunction -_Use the [`renderDynamicImport`](guide/en/#renderdynamicimport) plugin hook instead._
-Type: `string`
-CLI: `--dynamicImportFunction `
-Default: `import` - -This will rename the dynamic import function to the chosen name when outputting ES bundles. This is useful for generating code that uses a dynamic import polyfill such as [this one](https://github.com/uupaa/dynamic-import-polyfill).