webpack 5.95.0 → 5.96.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/AsyncDependenciesBlock.js +1 -1
- package/lib/BannerPlugin.js +2 -1
- package/lib/Chunk.js +30 -0
- package/lib/ChunkGraph.js +11 -6
- package/lib/ChunkGroup.js +2 -2
- package/lib/CleanPlugin.js +4 -5
- package/lib/CodeGenerationResults.js +6 -5
- package/lib/Compilation.js +71 -48
- package/lib/Compiler.js +7 -5
- package/lib/ConcatenationScope.js +7 -20
- package/lib/ContextModule.js +7 -8
- package/lib/CssModule.js +25 -21
- package/lib/DefinePlugin.js +14 -8
- package/lib/DelegatedModule.js +3 -3
- package/lib/DllModule.js +4 -4
- package/lib/DynamicEntryPlugin.js +29 -22
- package/lib/EvalDevToolModulePlugin.js +5 -2
- package/lib/EvalSourceMapDevToolPlugin.js +5 -2
- package/lib/ExternalModule.js +40 -7
- package/lib/ExternalModuleFactoryPlugin.js +33 -9
- package/lib/FileSystemInfo.js +12 -8
- package/lib/Generator.js +5 -4
- package/lib/HotModuleReplacementPlugin.js +8 -6
- package/lib/IgnorePlugin.js +19 -1
- package/lib/LoaderOptionsPlugin.js +3 -1
- package/lib/Module.js +9 -8
- package/lib/ModuleSourceTypesConstants.js +100 -0
- package/lib/NormalModule.js +27 -17
- package/lib/NormalModuleFactory.js +38 -22
- package/lib/OptionsApply.js +12 -1
- package/lib/ProgressPlugin.js +50 -10
- package/lib/RawModule.js +3 -4
- package/lib/RuntimeModule.js +3 -4
- package/lib/RuntimePlugin.js +11 -4
- package/lib/RuntimeTemplate.js +13 -42
- package/lib/SourceMapDevToolPlugin.js +10 -7
- package/lib/Watching.js +2 -2
- package/lib/WebpackOptionsApply.js +42 -21
- package/lib/asset/AssetGenerator.js +347 -194
- package/lib/asset/AssetModulesPlugin.js +2 -1
- package/lib/asset/AssetSourceGenerator.js +82 -27
- package/lib/asset/RawDataUrlModule.js +5 -4
- package/lib/buildChunkGraph.js +2 -2
- package/lib/cache/PackFileCacheStrategy.js +69 -31
- package/lib/cache/ResolverCachePlugin.js +248 -173
- package/lib/config/defaults.js +134 -126
- package/lib/container/ContainerEntryModule.js +3 -4
- package/lib/container/ContainerPlugin.js +8 -0
- package/lib/container/FallbackModule.js +2 -2
- package/lib/container/HoistContainerReferencesPlugin.js +250 -0
- package/lib/container/ModuleFederationPlugin.js +38 -1
- package/lib/container/RemoteModule.js +4 -2
- package/lib/container/RemoteRuntimeModule.js +4 -2
- package/lib/css/CssExportsGenerator.js +16 -12
- package/lib/css/CssGenerator.js +22 -16
- package/lib/css/CssLoadingRuntimeModule.js +7 -6
- package/lib/css/CssModulesPlugin.js +122 -77
- package/lib/css/CssParser.js +655 -526
- package/lib/css/walkCssTokens.js +1168 -338
- package/lib/debug/ProfilingPlugin.js +5 -0
- package/lib/dependencies/CommonJsExportsParserPlugin.js +5 -2
- package/lib/dependencies/CommonJsImportsParserPlugin.js +3 -6
- package/lib/dependencies/CssExportDependency.js +3 -3
- package/lib/dependencies/CssLocalIdentifierDependency.js +26 -17
- package/lib/dependencies/CssUrlDependency.js +33 -3
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +3 -3
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +39 -14
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +15 -82
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +5 -2
- package/lib/dependencies/ImportParserPlugin.js +9 -7
- package/lib/dependencies/LoaderPlugin.js +19 -0
- package/lib/dependencies/SystemPlugin.js +2 -1
- package/lib/dependencies/URLPlugin.js +7 -1
- package/lib/dependencies/WorkerPlugin.js +1 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +4 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +1 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +1 -0
- package/lib/hmr/LazyCompilationPlugin.js +16 -4
- package/lib/hmr/lazyCompilationBackend.js +1 -7
- package/lib/index.js +35 -6
- package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
- package/lib/javascript/JavascriptGenerator.js +8 -8
- package/lib/javascript/JavascriptModulesPlugin.js +126 -73
- package/lib/javascript/JavascriptParser.js +338 -117
- package/lib/json/JsonGenerator.js +5 -5
- package/lib/library/EnableLibraryPlugin.js +2 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +1 -1
- package/lib/library/UmdLibraryPlugin.js +16 -8
- package/lib/logging/Logger.js +11 -11
- package/lib/logging/createConsoleLogger.js +14 -14
- package/lib/logging/truncateArgs.js +1 -1
- package/lib/node/NodeWatchFileSystem.js +3 -1
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +20 -18
- package/lib/node/ReadFileCompileWasmPlugin.js +1 -2
- package/lib/node/nodeConsole.js +11 -8
- package/lib/optimize/AggressiveSplittingPlugin.js +21 -7
- package/lib/optimize/ConcatenatedModule.js +43 -145
- package/lib/optimize/FlagIncludedChunksPlugin.js +6 -0
- package/lib/optimize/InnerGraphPlugin.js +57 -16
- package/lib/optimize/LimitChunkCountPlugin.js +2 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +4 -2
- package/lib/optimize/RealContentHashPlugin.js +1 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +6 -3
- package/lib/rules/RuleSetCompiler.js +2 -2
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +2 -2
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +32 -19
- package/lib/serialization/ObjectMiddleware.js +23 -9
- package/lib/serialization/SerializerMiddleware.js +3 -2
- package/lib/serialization/types.js +2 -2
- package/lib/sharing/ConsumeSharedModule.js +2 -3
- package/lib/sharing/ConsumeSharedRuntimeModule.js +3 -1
- package/lib/sharing/ProvideSharedModule.js +2 -3
- package/lib/stats/DefaultStatsFactoryPlugin.js +22 -20
- package/lib/stats/StatsFactory.js +12 -12
- package/lib/stats/StatsPrinter.js +7 -7
- package/lib/util/AsyncQueue.js +17 -1
- package/lib/util/IterableHelpers.js +1 -1
- package/lib/util/SetHelpers.js +1 -1
- package/lib/util/cleverMerge.js +48 -24
- package/lib/util/concatenate.js +227 -0
- package/lib/util/create-schema-validation.js +22 -9
- package/lib/util/deprecation.js +86 -28
- package/lib/util/fs.js +9 -9
- package/lib/util/hash/wasm-hash.js +12 -1
- package/lib/util/magicComment.js +21 -0
- package/lib/util/makeSerializable.js +24 -1
- package/lib/util/memoize.js +2 -1
- package/lib/util/runtime.js +4 -1
- package/lib/util/semver.js +130 -23
- package/lib/wasm/EnableWasmLoadingPlugin.js +2 -2
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +5 -5
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -5
- package/lib/wasm-sync/WebAssemblyGenerator.js +8 -9
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -5
- package/lib/web/FetchCompileAsyncWasmPlugin.js +1 -2
- package/lib/web/FetchCompileWasmPlugin.js +1 -2
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
- package/package.json +17 -18
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +8 -2
- package/types.d.ts +801 -259
- package/lib/util/mergeScope.js +0 -76
@@ -31,13 +31,21 @@ const Template = require("../Template");
|
|
31
31
|
const { last, someInIterable } = require("../util/IterableHelpers");
|
32
32
|
const StringXor = require("../util/StringXor");
|
33
33
|
const { compareModulesByIdentifier } = require("../util/comparators");
|
34
|
+
const {
|
35
|
+
getPathInAst,
|
36
|
+
getAllReferences,
|
37
|
+
RESERVED_NAMES,
|
38
|
+
findNewName,
|
39
|
+
addScopeSymbols,
|
40
|
+
getUsedNamesInScopeInfo
|
41
|
+
} = require("../util/concatenate");
|
34
42
|
const createHash = require("../util/createHash");
|
35
|
-
const { getPathInAst, getAllReferences } = require("../util/mergeScope");
|
36
43
|
const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
|
37
44
|
const { intersectRuntime } = require("../util/runtime");
|
38
45
|
const JavascriptGenerator = require("./JavascriptGenerator");
|
39
46
|
const JavascriptParser = require("./JavascriptParser");
|
40
47
|
|
48
|
+
/** @typedef {import("eslint-scope").Reference} Reference */
|
41
49
|
/** @typedef {import("eslint-scope").Scope} Scope */
|
42
50
|
/** @typedef {import("eslint-scope").Variable} Variable */
|
43
51
|
/** @typedef {import("webpack-sources").Source} Source */
|
@@ -46,6 +54,7 @@ const JavascriptParser = require("./JavascriptParser");
|
|
46
54
|
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
47
55
|
/** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
|
48
56
|
/** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
|
57
|
+
/** @typedef {import("../Compilation").ModuleObject} ModuleObject */
|
49
58
|
/** @typedef {import("../Compiler")} Compiler */
|
50
59
|
/** @typedef {import("../DependencyTemplates")} DependencyTemplates */
|
51
60
|
/** @typedef {import("../Entrypoint")} Entrypoint */
|
@@ -54,8 +63,10 @@ const JavascriptParser = require("./JavascriptParser");
|
|
54
63
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
55
64
|
/** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
|
56
65
|
/** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
|
66
|
+
/** @typedef {import("../WebpackError")} WebpackError */
|
57
67
|
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
58
68
|
/** @typedef {import("../util/Hash")} Hash */
|
69
|
+
/** @typedef {import("../util/createHash").Algorithm} Algorithm */
|
59
70
|
|
60
71
|
/**
|
61
72
|
* @param {Chunk} chunk a chunk
|
@@ -70,6 +81,25 @@ const chunkHasJs = (chunk, chunkGraph) => {
|
|
70
81
|
);
|
71
82
|
};
|
72
83
|
|
84
|
+
/**
|
85
|
+
* @param {Chunk} chunk a chunk
|
86
|
+
* @param {ChunkGraph} chunkGraph the chunk graph
|
87
|
+
* @returns {boolean} true, when a JS file is needed for this chunk
|
88
|
+
*/
|
89
|
+
const chunkHasRuntimeOrJs = (chunk, chunkGraph) => {
|
90
|
+
if (
|
91
|
+
chunkGraph.getChunkModulesIterableBySourceType(
|
92
|
+
chunk,
|
93
|
+
WEBPACK_MODULE_TYPE_RUNTIME
|
94
|
+
)
|
95
|
+
)
|
96
|
+
return true;
|
97
|
+
|
98
|
+
return Boolean(
|
99
|
+
chunkGraph.getChunkModulesIterableBySourceType(chunk, "javascript")
|
100
|
+
);
|
101
|
+
};
|
102
|
+
|
73
103
|
/**
|
74
104
|
* @param {Module} module a module
|
75
105
|
* @param {string} code the code
|
@@ -152,11 +182,11 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
152
182
|
* @property {SyncWaterfallHook<[Source, RenderContext]>} render
|
153
183
|
* @property {SyncWaterfallHook<[Source, Module, StartupRenderContext]>} renderStartup
|
154
184
|
* @property {SyncWaterfallHook<[string, RenderBootstrapContext]>} renderRequire
|
155
|
-
* @property {SyncBailHook<[Module, RenderBootstrapContext], string>} inlineInRuntimeBailout
|
185
|
+
* @property {SyncBailHook<[Module, RenderBootstrapContext], string | void>} inlineInRuntimeBailout
|
156
186
|
* @property {SyncBailHook<[Module, RenderContext], string | void>} embedInRuntimeBailout
|
157
187
|
* @property {SyncBailHook<[RenderContext], string | void>} strictRuntimeBailout
|
158
188
|
* @property {SyncHook<[Chunk, Hash, ChunkHashContext]>} chunkHash
|
159
|
-
* @property {SyncBailHook<[Chunk, RenderContext], boolean>} useSourceMap
|
189
|
+
* @property {SyncBailHook<[Chunk, RenderContext], boolean | void>} useSourceMap
|
160
190
|
*/
|
161
191
|
|
162
192
|
/** @type {WeakMap<Compilation, CompilationHooks>} */
|
@@ -263,13 +293,14 @@ class JavascriptModulesPlugin {
|
|
263
293
|
} = options;
|
264
294
|
|
265
295
|
const hotUpdateChunk = chunk instanceof HotUpdateChunk ? chunk : null;
|
266
|
-
|
267
|
-
let render;
|
268
296
|
const filenameTemplate =
|
269
297
|
JavascriptModulesPlugin.getChunkFilenameTemplate(
|
270
298
|
chunk,
|
271
299
|
outputOptions
|
272
300
|
);
|
301
|
+
|
302
|
+
let render;
|
303
|
+
|
273
304
|
if (hotUpdateChunk) {
|
274
305
|
render = () =>
|
275
306
|
this.renderChunk(
|
@@ -285,6 +316,10 @@ class JavascriptModulesPlugin {
|
|
285
316
|
hooks
|
286
317
|
);
|
287
318
|
} else if (chunk.hasRuntime()) {
|
319
|
+
if (!chunkHasRuntimeOrJs(chunk, chunkGraph)) {
|
320
|
+
return result;
|
321
|
+
}
|
322
|
+
|
288
323
|
render = () =>
|
289
324
|
this.renderMain(
|
290
325
|
{
|
@@ -370,7 +405,7 @@ class JavascriptModulesPlugin {
|
|
370
405
|
hashFunction
|
371
406
|
}
|
372
407
|
} = compilation;
|
373
|
-
const hash = createHash(hashFunction);
|
408
|
+
const hash = createHash(/** @type {Algorithm} */ (hashFunction));
|
374
409
|
if (hashSalt) hash.update(hashSalt);
|
375
410
|
if (chunk.hasRuntime()) {
|
376
411
|
this.updateHashWithBootstrap(
|
@@ -420,7 +455,8 @@ class JavascriptModulesPlugin {
|
|
420
455
|
const digest = /** @type {string} */ (hash.digest(hashDigest));
|
421
456
|
chunk.contentHash.javascript = nonNumericOnlyHash(
|
422
457
|
digest,
|
423
|
-
|
458
|
+
/** @type {number} */
|
459
|
+
(hashDigestLength)
|
424
460
|
);
|
425
461
|
});
|
426
462
|
compilation.hooks.additionalTreeRuntimeRequirements.tap(
|
@@ -439,7 +475,7 @@ class JavascriptModulesPlugin {
|
|
439
475
|
compilation.hooks.executeModule.tap(PLUGIN_NAME, (options, context) => {
|
440
476
|
const source = options.codeGenerationResult.sources.get("javascript");
|
441
477
|
if (source === undefined) return;
|
442
|
-
const { module
|
478
|
+
const { module } = options;
|
443
479
|
const code = source.source();
|
444
480
|
|
445
481
|
const fn = vm.runInThisContext(
|
@@ -449,6 +485,11 @@ class JavascriptModulesPlugin {
|
|
449
485
|
lineOffset: -1
|
450
486
|
}
|
451
487
|
);
|
488
|
+
|
489
|
+
const moduleObject =
|
490
|
+
/** @type {ModuleObject} */
|
491
|
+
(options.moduleObject);
|
492
|
+
|
452
493
|
try {
|
453
494
|
fn.call(
|
454
495
|
moduleObject.exports,
|
@@ -621,7 +662,8 @@ class JavascriptModulesPlugin {
|
|
621
662
|
"JavascriptModulesPlugin.getCompilationHooks().renderModulePackage"
|
622
663
|
);
|
623
664
|
} catch (err) {
|
624
|
-
|
665
|
+
/** @type {WebpackError} */
|
666
|
+
(err).module = module;
|
625
667
|
throw err;
|
626
668
|
}
|
627
669
|
}
|
@@ -870,20 +912,20 @@ class JavascriptModulesPlugin {
|
|
870
912
|
const webpackExports =
|
871
913
|
exports && m.exportsArgument === RuntimeGlobals.exports;
|
872
914
|
const iife = innerStrict
|
873
|
-
? "it
|
915
|
+
? "it needs to be in strict mode."
|
874
916
|
: inlinedModules.size > 1
|
875
917
|
? // TODO check globals and top-level declarations of other entries and chunk modules
|
876
918
|
// to make a better decision
|
877
|
-
"it
|
919
|
+
"it needs to be isolated against other entry modules."
|
878
920
|
: chunkModules && !renamedInlinedModule
|
879
|
-
? "it
|
921
|
+
? "it needs to be isolated against other modules in the chunk."
|
880
922
|
: exports && !webpackExports
|
881
923
|
? `it uses a non-standard name for the exports (${m.exportsArgument}).`
|
882
924
|
: hooks.embedInRuntimeBailout.call(m, renderContext);
|
883
925
|
let footer;
|
884
926
|
if (iife !== undefined) {
|
885
927
|
startupSource.add(
|
886
|
-
`// This entry
|
928
|
+
`// This entry needs to be wrapped in an IIFE because ${iife}\n`
|
887
929
|
);
|
888
930
|
const arrow = runtimeTemplate.supportsArrowFunction();
|
889
931
|
if (arrow) {
|
@@ -1141,6 +1183,10 @@ class JavascriptModulesPlugin {
|
|
1141
1183
|
entryModule,
|
1142
1184
|
entrypoint
|
1143
1185
|
] of chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)) {
|
1186
|
+
if (!chunkGraph.getModuleSourceTypes(entryModule).has("javascript")) {
|
1187
|
+
i--;
|
1188
|
+
continue;
|
1189
|
+
}
|
1144
1190
|
const chunks =
|
1145
1191
|
/** @type {Entrypoint} */
|
1146
1192
|
(entrypoint).chunks.filter(c => c !== chunk);
|
@@ -1429,7 +1475,7 @@ class JavascriptModulesPlugin {
|
|
1429
1475
|
* @param {Set<Module>} inlinedModules inlinedModules
|
1430
1476
|
* @param {ChunkRenderContext} chunkRenderContext chunkRenderContext
|
1431
1477
|
* @param {CompilationHooks} hooks hooks
|
1432
|
-
* @param {boolean} allStrict allStrict
|
1478
|
+
* @param {boolean | undefined} allStrict allStrict
|
1433
1479
|
* @param {boolean} hasChunkModules hasChunkModules
|
1434
1480
|
* @returns {Map<Module, Source> | false} renamed inlined modules
|
1435
1481
|
*/
|
@@ -1442,7 +1488,9 @@ class JavascriptModulesPlugin {
|
|
1442
1488
|
allStrict,
|
1443
1489
|
hasChunkModules
|
1444
1490
|
) {
|
1445
|
-
const innerStrict =
|
1491
|
+
const innerStrict =
|
1492
|
+
!allStrict &&
|
1493
|
+
allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict);
|
1446
1494
|
const isMultipleEntries = inlinedModules.size > 1;
|
1447
1495
|
const singleEntryWithModules = inlinedModules.size === 1 && hasChunkModules;
|
1448
1496
|
|
@@ -1458,8 +1506,8 @@ class JavascriptModulesPlugin {
|
|
1458
1506
|
const renamedInlinedModules = new Map();
|
1459
1507
|
const { runtimeTemplate } = renderContext;
|
1460
1508
|
|
1461
|
-
/** @typedef {{ source: Source, ast: any, variables: Set<Variable>, usedInNonInlined: Set<Variable
|
1462
|
-
/** @type {Map<Module,
|
1509
|
+
/** @typedef {{ source: Source, module: Module, ast: any, variables: Set<Variable>, through: Set<Reference>, usedInNonInlined: Set<Variable>, moduleScope: Scope }} Info */
|
1510
|
+
/** @type {Map<Module, Info>} */
|
1463
1511
|
const inlinedModulesToInfo = new Map();
|
1464
1512
|
/** @type {Set<string>} */
|
1465
1513
|
const nonInlinedModuleThroughIdentifiers = new Set();
|
@@ -1493,8 +1541,11 @@ class JavascriptModulesPlugin {
|
|
1493
1541
|
inlinedModulesToInfo.set(m, {
|
1494
1542
|
source: moduleSource,
|
1495
1543
|
ast,
|
1544
|
+
module: m,
|
1496
1545
|
variables: new Set(moduleScope.variables),
|
1497
|
-
|
1546
|
+
through: new Set(moduleScope.through),
|
1547
|
+
usedInNonInlined: new Set(),
|
1548
|
+
moduleScope
|
1498
1549
|
});
|
1499
1550
|
} else {
|
1500
1551
|
for (const ref of globalScope.through) {
|
@@ -1505,7 +1556,10 @@ class JavascriptModulesPlugin {
|
|
1505
1556
|
|
1506
1557
|
for (const [, { variables, usedInNonInlined }] of inlinedModulesToInfo) {
|
1507
1558
|
for (const variable of variables) {
|
1508
|
-
if (
|
1559
|
+
if (
|
1560
|
+
nonInlinedModuleThroughIdentifiers.has(variable.name) ||
|
1561
|
+
RESERVED_NAMES.has(variable.name)
|
1562
|
+
) {
|
1509
1563
|
usedInNonInlined.add(variable);
|
1510
1564
|
}
|
1511
1565
|
}
|
@@ -1519,39 +1573,70 @@ class JavascriptModulesPlugin {
|
|
1519
1573
|
continue;
|
1520
1574
|
}
|
1521
1575
|
|
1522
|
-
const
|
1523
|
-
|
1524
|
-
|
1525
|
-
(inlinedModulesToInfo.get(m)).variables
|
1526
|
-
).map(v => v.name)
|
1576
|
+
const info = /** @type {Info} */ (inlinedModulesToInfo.get(m));
|
1577
|
+
const allUsedNames = new Set(
|
1578
|
+
Array.from(info.through, v => v.identifier.name)
|
1527
1579
|
);
|
1528
1580
|
|
1529
1581
|
for (const variable of usedInNonInlined) {
|
1582
|
+
allUsedNames.add(variable.name);
|
1583
|
+
}
|
1584
|
+
|
1585
|
+
for (const variable of info.variables) {
|
1586
|
+
allUsedNames.add(variable.name);
|
1530
1587
|
const references = getAllReferences(variable);
|
1531
1588
|
const allIdentifiers = new Set(
|
1532
1589
|
references.map(r => r.identifier).concat(variable.identifiers)
|
1533
1590
|
);
|
1534
1591
|
|
1535
|
-
const
|
1536
|
-
|
1537
|
-
|
1538
|
-
|
1592
|
+
const usedNamesInScopeInfo = new Map();
|
1593
|
+
const ignoredScopes = new Set();
|
1594
|
+
|
1595
|
+
const name = variable.name;
|
1596
|
+
const { usedNames, alreadyCheckedScopes } = getUsedNamesInScopeInfo(
|
1597
|
+
usedNamesInScopeInfo,
|
1598
|
+
info.module.identifier(),
|
1599
|
+
name
|
1539
1600
|
);
|
1540
|
-
|
1541
|
-
|
1542
|
-
const
|
1543
|
-
const
|
1544
|
-
|
1545
|
-
|
1546
|
-
|
1547
|
-
|
1548
|
-
|
1549
|
-
|
1550
|
-
|
1551
|
-
|
1601
|
+
|
1602
|
+
if (allUsedNames.has(name) || usedNames.has(name)) {
|
1603
|
+
const references = getAllReferences(variable);
|
1604
|
+
for (const ref of references) {
|
1605
|
+
addScopeSymbols(
|
1606
|
+
ref.from,
|
1607
|
+
usedNames,
|
1608
|
+
alreadyCheckedScopes,
|
1609
|
+
ignoredScopes
|
1610
|
+
);
|
1611
|
+
}
|
1612
|
+
|
1613
|
+
const newName = findNewName(
|
1614
|
+
variable.name,
|
1615
|
+
allUsedNames,
|
1616
|
+
usedNames,
|
1617
|
+
m.readableIdentifier(runtimeTemplate.requestShortener)
|
1618
|
+
);
|
1619
|
+
allUsedNames.add(newName);
|
1620
|
+
for (const identifier of allIdentifiers) {
|
1621
|
+
const r = /** @type {Range} */ (identifier.range);
|
1622
|
+
const path = getPathInAst(ast, identifier);
|
1623
|
+
if (path && path.length > 1) {
|
1624
|
+
const maybeProperty =
|
1625
|
+
path[1].type === "AssignmentPattern" && path[1].left === path[0]
|
1626
|
+
? path[2]
|
1627
|
+
: path[1];
|
1628
|
+
if (
|
1629
|
+
maybeProperty.type === "Property" &&
|
1630
|
+
maybeProperty.shorthand
|
1631
|
+
) {
|
1632
|
+
source.insert(r[1], `: ${newName}`);
|
1633
|
+
continue;
|
1634
|
+
}
|
1552
1635
|
}
|
1636
|
+
source.replace(r[0], r[1] - 1, newName);
|
1553
1637
|
}
|
1554
|
-
|
1638
|
+
} else {
|
1639
|
+
allUsedNames.add(name);
|
1555
1640
|
}
|
1556
1641
|
}
|
1557
1642
|
|
@@ -1560,38 +1645,6 @@ class JavascriptModulesPlugin {
|
|
1560
1645
|
|
1561
1646
|
return renamedInlinedModules;
|
1562
1647
|
}
|
1563
|
-
|
1564
|
-
/**
|
1565
|
-
* @param {string} oldName oldName
|
1566
|
-
* @param {Set<string>} usedName usedName
|
1567
|
-
* @param {string} extraInfo extraInfo
|
1568
|
-
* @returns {string} extraInfo
|
1569
|
-
*/
|
1570
|
-
findNewName(oldName, usedName, extraInfo) {
|
1571
|
-
let name = oldName;
|
1572
|
-
|
1573
|
-
// Remove uncool stuff
|
1574
|
-
extraInfo = extraInfo.replace(
|
1575
|
-
/\.+\/|(\/index)?\.([a-zA-Z0-9]{1,4})($|\s|\?)|\s*\+\s*\d+\s*modules/g,
|
1576
|
-
""
|
1577
|
-
);
|
1578
|
-
const splittedInfo = extraInfo.split("/");
|
1579
|
-
while (splittedInfo.length) {
|
1580
|
-
name = splittedInfo.pop() + (name ? `_${name}` : "");
|
1581
|
-
const nameIdent = Template.toIdentifier(name);
|
1582
|
-
if (!usedName.has(nameIdent)) {
|
1583
|
-
return nameIdent;
|
1584
|
-
}
|
1585
|
-
}
|
1586
|
-
|
1587
|
-
let i = 0;
|
1588
|
-
let nameWithNumber = Template.toIdentifier(`${name}_${i}`);
|
1589
|
-
while (usedName.has(nameWithNumber)) {
|
1590
|
-
i++;
|
1591
|
-
nameWithNumber = Template.toIdentifier(`${name}_${i}`);
|
1592
|
-
}
|
1593
|
-
return nameWithNumber;
|
1594
|
-
}
|
1595
1648
|
}
|
1596
1649
|
|
1597
1650
|
module.exports = JavascriptModulesPlugin;
|