webpack 5.85.0 → 5.88.1
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.
Potentially problematic release.
This version of webpack might be problematic. Click here for more details.
- package/README.md +5 -2
- package/lib/APIPlugin.js +150 -99
- package/lib/AsyncDependenciesBlock.js +3 -3
- package/lib/BannerPlugin.js +2 -1
- package/lib/CaseSensitiveModulesWarning.js +3 -1
- package/lib/Chunk.js +35 -17
- package/lib/ChunkGraph.js +4 -4
- package/lib/ChunkGroup.js +20 -9
- package/lib/CompatibilityPlugin.js +50 -30
- package/lib/Compilation.js +2 -1
- package/lib/Compiler.js +10 -9
- package/lib/ConcatenationScope.js +2 -2
- package/lib/ConditionalInitFragment.js +11 -1
- package/lib/ConstPlugin.js +73 -32
- package/lib/ContextModule.js +8 -3
- package/lib/ContextModuleFactory.js +1 -0
- package/lib/ContextReplacementPlugin.js +13 -0
- package/lib/DelegatedModule.js +15 -3
- package/lib/DelegatedModuleFactoryPlugin.js +6 -0
- package/lib/DependenciesBlock.js +1 -1
- package/lib/Dependency.js +11 -5
- package/lib/DependencyTemplates.js +1 -1
- package/lib/DllEntryPlugin.js +11 -1
- package/lib/DllModule.js +6 -0
- package/lib/DllReferencePlugin.js +13 -1
- package/lib/Entrypoint.js +1 -1
- package/lib/ErrorHelpers.js +1 -0
- package/lib/EvalSourceMapDevToolPlugin.js +6 -1
- package/lib/ExportsInfo.js +22 -4
- package/lib/ExportsInfoApiPlugin.js +14 -5
- package/lib/ExternalModule.js +20 -8
- package/lib/FileSystemInfo.js +52 -24
- package/lib/FlagAllModulesAsUsedPlugin.js +6 -1
- package/lib/FlagDependencyUsagePlugin.js +3 -1
- package/lib/FlagEntryExportAsUsedPlugin.js +4 -0
- package/lib/Generator.js +7 -0
- package/lib/HotModuleReplacementPlugin.js +8 -0
- package/lib/InitFragment.js +28 -5
- package/lib/JavascriptMetaInfoPlugin.js +11 -6
- package/lib/LibManifestPlugin.js +20 -4
- package/lib/Module.js +14 -3
- package/lib/ModuleDependencyError.js +4 -2
- package/lib/ModuleDependencyWarning.js +4 -2
- package/lib/ModuleGraph.js +31 -24
- package/lib/ModuleGraphConnection.js +19 -6
- package/lib/ModuleInfoHeaderPlugin.js +9 -2
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +2 -0
- package/lib/ModuleStoreError.js +2 -1
- package/lib/ModuleTypeConstants.js +7 -0
- package/lib/MultiWatching.js +4 -0
- package/lib/NodeStuffPlugin.js +32 -6
- package/lib/ProgressPlugin.js +71 -15
- package/lib/ProvidePlugin.js +13 -4
- package/lib/RawModule.js +3 -1
- package/lib/RequireJsStuffPlugin.js +7 -0
- package/lib/RuntimeGlobals.js +5 -0
- package/lib/RuntimeModule.js +3 -3
- package/lib/RuntimePlugin.js +6 -3
- package/lib/RuntimeTemplate.js +22 -4
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +7 -2
- package/lib/UseStrictPlugin.js +10 -3
- package/lib/Watching.js +62 -25
- package/lib/WebpackError.js +6 -5
- package/lib/WebpackIsIncludedPlugin.js +6 -4
- package/lib/WebpackOptionsApply.js +4 -2
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +2 -1
- package/lib/asset/AssetParser.js +11 -6
- package/lib/asset/AssetSourceParser.js +8 -3
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
- package/lib/buildChunkGraph.js +37 -21
- package/lib/cache/IdleFileCachePlugin.js +2 -1
- package/lib/cache/PackFileCacheStrategy.js +53 -22
- package/lib/config/browserslistTargetHandler.js +7 -7
- package/lib/config/defaults.js +43 -26
- package/lib/container/RemoteRuntimeModule.js +1 -1
- package/lib/css/CssExportsGenerator.js +9 -0
- package/lib/css/CssGenerator.js +1 -1
- package/lib/css/CssLoadingRuntimeModule.js +43 -19
- package/lib/css/CssModulesPlugin.js +42 -14
- package/lib/css/CssParser.js +22 -0
- package/lib/dependencies/AMDDefineDependency.js +34 -4
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +5 -0
- package/lib/dependencies/AMDRuntimeModules.js +2 -2
- package/lib/dependencies/CommonJsExportsParserPlugin.js +14 -4
- package/lib/dependencies/CommonJsImportsParserPlugin.js +169 -59
- package/lib/dependencies/CommonJsPlugin.js +13 -8
- package/lib/dependencies/CommonJsRequireContextDependency.js +2 -2
- package/lib/dependencies/ConstDependency.js +2 -2
- package/lib/dependencies/ContextDependency.js +7 -2
- package/lib/dependencies/CssImportDependency.js +1 -1
- package/lib/dependencies/CssLocalIdentifierDependency.js +5 -0
- package/lib/dependencies/CssUrlDependency.js +3 -3
- package/lib/dependencies/DllEntryDependency.js +5 -0
- package/lib/dependencies/DynamicExports.js +10 -6
- package/lib/dependencies/ExportsInfoDependency.js +14 -4
- package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -1
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +12 -5
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +2 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +4 -4
- package/lib/dependencies/HarmonyExports.js +9 -5
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +40 -27
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +1 -2
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +31 -21
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportDependency.js +5 -3
- package/lib/dependencies/ImportEagerDependency.js +5 -3
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +19 -0
- package/lib/dependencies/ImportMetaPlugin.js +31 -15
- package/lib/dependencies/ImportParserPlugin.js +62 -25
- package/lib/dependencies/ImportWeakDependency.js +5 -3
- package/lib/dependencies/JsonExportsDependency.js +1 -1
- package/lib/dependencies/ModuleDependency.js +1 -1
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ProvidedDependency.js +4 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +5 -2
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
- package/lib/dependencies/RequireHeaderDependency.js +4 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +26 -5
- package/lib/dependencies/RequireResolveHeaderDependency.js +9 -0
- package/lib/dependencies/SystemPlugin.js +17 -5
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +2 -2
- package/lib/dependencies/URLPlugin.js +9 -4
- package/lib/dependencies/WebAssemblyImportDependency.js +1 -1
- package/lib/dependencies/WorkerPlugin.js +59 -22
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +1 -1
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +1 -1
- package/lib/ids/SyncModuleIdsPlugin.js +1 -0
- package/lib/javascript/BasicEvaluatedExpression.js +28 -19
- package/lib/javascript/CommonJsChunkFormatPlugin.js +6 -2
- package/lib/javascript/JavascriptModulesPlugin.js +25 -5
- package/lib/javascript/JavascriptParser.js +157 -85
- package/lib/javascript/JavascriptParserHelpers.js +37 -15
- package/lib/json/JsonData.js +2 -2
- package/lib/json/JsonParser.js +25 -12
- package/lib/library/AmdLibraryPlugin.js +2 -2
- package/lib/library/AssignLibraryPlugin.js +13 -1
- package/lib/library/EnableLibraryPlugin.js +4 -0
- package/lib/library/SystemLibraryPlugin.js +1 -1
- package/lib/library/UmdLibraryPlugin.js +20 -2
- package/lib/logging/runtime.js +1 -1
- package/lib/logging/truncateArgs.js +4 -0
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -6
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +2 -1
- package/lib/node/RequireChunkLoadingRuntimeModule.js +10 -6
- package/lib/optimize/AggressiveMergingPlugin.js +8 -0
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
- package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
- package/lib/optimize/InnerGraph.js +5 -5
- package/lib/optimize/InnerGraphPlugin.js +2 -1
- package/lib/optimize/LimitChunkCountPlugin.js +29 -4
- package/lib/optimize/MangleExportsPlugin.js +1 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -0
- package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
- package/lib/optimize/RealContentHashPlugin.js +80 -30
- package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
- package/lib/optimize/RuntimeChunkPlugin.js +9 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +10 -1
- package/lib/optimize/SplitChunksPlugin.js +71 -31
- package/lib/performance/SizeLimitsPlugin.js +7 -4
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
- package/lib/rules/BasicEffectRulePlugin.js +4 -0
- package/lib/rules/BasicMatcherRulePlugin.js +5 -0
- package/lib/rules/RuleSetCompiler.js +3 -3
- package/lib/rules/UseEffectRulePlugin.js +6 -4
- package/lib/runtime/AsyncModuleRuntimeModule.js +8 -5
- package/lib/runtime/AutoPublicPathRuntimeModule.js +4 -2
- package/lib/runtime/BaseUriRuntimeModule.js +3 -3
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
- package/lib/runtime/CompatRuntimeModule.js +7 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
- package/lib/runtime/EnsureChunkRuntimeModule.js +15 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +6 -10
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +4 -2
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +64 -48
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +1 -1
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
- package/lib/runtime/PublicPathRuntimeModule.js +4 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -3
- package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -2
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +143 -1
- package/lib/serialization/ErrorObjectSerializer.js +3 -0
- package/lib/serialization/ObjectMiddleware.js +9 -3
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedRuntimeModule.js +14 -5
- package/lib/sharing/ProvideSharedDependency.js +11 -0
- package/lib/sharing/ProvideSharedModule.js +4 -0
- package/lib/sharing/ProvideSharedPlugin.js +22 -21
- package/lib/sharing/ShareRuntimeModule.js +12 -5
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/sharing/utils.js +32 -5
- package/lib/util/AsyncQueue.js +4 -2
- package/lib/util/ParallelismFactorCalculator.js +10 -0
- package/lib/util/Semaphore.js +1 -1
- package/lib/util/StackedCacheMap.js +1 -1
- package/lib/util/URLAbsoluteSpecifier.js +1 -1
- package/lib/util/createHash.js +30 -9
- package/lib/util/deprecation.js +10 -3
- package/lib/util/deterministicGrouping.js +50 -11
- package/lib/util/findGraphRoots.js +4 -2
- package/lib/util/memoize.js +3 -3
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/registerExternalSerializer.js +1 -1
- package/lib/util/runtime.js +84 -21
- package/lib/util/semver.js +1 -0
- package/lib/util/smartGrouping.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +6 -2
- package/lib/wasm-async/AsyncWebAssemblyParser.js +7 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +14 -7
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -1
- package/lib/wasm-sync/WebAssemblyGenerator.js +1 -0
- package/lib/wasm-sync/WebAssemblyParser.js +6 -2
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +14 -4
- package/lib/webpack.js +11 -2
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -16
- package/module.d.ts +1 -0
- package/package.json +5 -4
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +52 -6
- package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
- package/schemas/plugins/css/CssParserOptions.json +1 -1
- package/types.d.ts +606 -292
@@ -20,17 +20,22 @@ const {
|
|
20
20
|
/** @typedef {import("../../declarations/WebpackOptions").SnapshotOptions} SnapshotOptions */
|
21
21
|
/** @typedef {import("../Cache").Etag} Etag */
|
22
22
|
/** @typedef {import("../Compiler")} Compiler */
|
23
|
+
/** @typedef {import("../FileSystemInfo").ResolveBuildDependenciesResult} ResolveBuildDependenciesResult */
|
23
24
|
/** @typedef {import("../FileSystemInfo").Snapshot} Snapshot */
|
24
25
|
/** @typedef {import("../logging/Logger").Logger} Logger */
|
26
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
27
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
25
28
|
/** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
|
26
29
|
|
30
|
+
/** @typedef {Map<string, string | false>} ResolveResults */
|
31
|
+
|
27
32
|
class PackContainer {
|
28
33
|
/**
|
29
34
|
* @param {Object} data stored data
|
30
35
|
* @param {string} version version identifier
|
31
36
|
* @param {Snapshot} buildSnapshot snapshot of all build dependencies
|
32
37
|
* @param {Set<string>} buildDependencies list of all unresolved build dependencies captured
|
33
|
-
* @param {
|
38
|
+
* @param {ResolveResults} resolveResults result of the resolved build dependencies
|
34
39
|
* @param {Snapshot} resolveBuildDependenciesSnapshot snapshot of the dependencies of the build dependencies resolving
|
35
40
|
*/
|
36
41
|
constructor(
|
@@ -58,6 +63,9 @@ class PackContainer {
|
|
58
63
|
writeLazy(this.data);
|
59
64
|
}
|
60
65
|
|
66
|
+
/**
|
67
|
+
* @param {ObjectDeserializerContext} context context
|
68
|
+
*/
|
61
69
|
deserialize({ read }) {
|
62
70
|
this.version = read();
|
63
71
|
this.buildSnapshot = read();
|
@@ -99,7 +107,7 @@ class Pack {
|
|
99
107
|
constructor(logger, maxAge) {
|
100
108
|
/** @type {Map<string, PackItemInfo>} */
|
101
109
|
this.itemInfo = new Map();
|
102
|
-
/** @type {string[]} */
|
110
|
+
/** @type {(string | undefined)[]} */
|
103
111
|
this.requests = [];
|
104
112
|
this.requestsTimeout = undefined;
|
105
113
|
/** @type {Map<string, PackItemInfo>} */
|
@@ -111,6 +119,9 @@ class Pack {
|
|
111
119
|
this.maxAge = maxAge;
|
112
120
|
}
|
113
121
|
|
122
|
+
/**
|
123
|
+
* @param {string} identifier identifier
|
124
|
+
*/
|
114
125
|
_addRequest(identifier) {
|
115
126
|
this.requests.push(identifier);
|
116
127
|
if (this.requestsTimeout === undefined) {
|
@@ -149,7 +160,7 @@ class Pack {
|
|
149
160
|
if (!this.content[loc]) {
|
150
161
|
return undefined;
|
151
162
|
}
|
152
|
-
return this.content[loc].get(identifier);
|
163
|
+
return /** @type {PackContent} */ (this.content[loc]).get(identifier);
|
153
164
|
}
|
154
165
|
}
|
155
166
|
|
@@ -175,7 +186,7 @@ class Pack {
|
|
175
186
|
if (loc >= 0) {
|
176
187
|
this._addRequest(identifier);
|
177
188
|
this.freshContent.set(identifier, info);
|
178
|
-
const content = this.content[loc];
|
189
|
+
const content = /** @type {PackContent} */ (this.content[loc]);
|
179
190
|
content.delete(identifier);
|
180
191
|
if (content.items.size === 0) {
|
181
192
|
this.content[loc] = undefined;
|
@@ -351,11 +362,12 @@ class Pack {
|
|
351
362
|
mergedIndices = smallUnusedContents;
|
352
363
|
} else return;
|
353
364
|
|
365
|
+
/** @type {PackContent[] } */
|
354
366
|
const mergedContent = [];
|
355
367
|
|
356
368
|
// 3. Remove old content entries
|
357
369
|
for (const i of mergedIndices) {
|
358
|
-
mergedContent.push(this.content[i]);
|
370
|
+
mergedContent.push(/** @type {PackContent} */ (this.content[i]));
|
359
371
|
this.content[i] = undefined;
|
360
372
|
}
|
361
373
|
|
@@ -364,7 +376,7 @@ class Pack {
|
|
364
376
|
const mergedItems = new Set();
|
365
377
|
/** @type {Set<string>} */
|
366
378
|
const mergedUsedItems = new Set();
|
367
|
-
/** @type {(function(Map<string, any>): Promise)[]} */
|
379
|
+
/** @type {(function(Map<string, any>): Promise<void>)[]} */
|
368
380
|
const addToMergedMap = [];
|
369
381
|
for (const content of mergedContent) {
|
370
382
|
for (const identifier of content.items) {
|
@@ -498,17 +510,20 @@ class Pack {
|
|
498
510
|
* Only runs for one content to avoid large invalidation.
|
499
511
|
*/
|
500
512
|
_gcOldestContent() {
|
501
|
-
/** @type {PackItemInfo} */
|
513
|
+
/** @type {PackItemInfo | undefined} */
|
502
514
|
let oldest = undefined;
|
503
515
|
for (const info of this.itemInfo.values()) {
|
504
516
|
if (oldest === undefined || info.lastAccess < oldest.lastAccess) {
|
505
517
|
oldest = info;
|
506
518
|
}
|
507
519
|
}
|
508
|
-
if (
|
509
|
-
|
520
|
+
if (
|
521
|
+
Date.now() - /** @type {PackItemInfo} */ (oldest).lastAccess >
|
522
|
+
this.maxAge
|
523
|
+
) {
|
524
|
+
const loc = /** @type {PackItemInfo} */ (oldest).location;
|
510
525
|
if (loc < 0) return;
|
511
|
-
const content = this.content[loc];
|
526
|
+
const content = /** @type {PackContent} */ (this.content[loc]);
|
512
527
|
const items = new Set(content.items);
|
513
528
|
const usedItems = new Set(content.used);
|
514
529
|
this._gcAndUpdateLocation(items, usedItems, loc);
|
@@ -771,6 +786,7 @@ class PackContent {
|
|
771
786
|
|
772
787
|
// We are in state B
|
773
788
|
const { lazyName } = this;
|
789
|
+
/** @type {string | undefined} */
|
774
790
|
let timeMessage;
|
775
791
|
if (lazyName) {
|
776
792
|
// only log once
|
@@ -811,7 +827,7 @@ class PackContent {
|
|
811
827
|
|
812
828
|
/**
|
813
829
|
* @param {string} reason explanation why unpack is necessary
|
814
|
-
* @returns {void | Promise} maybe a promise if lazy
|
830
|
+
* @returns {void | Promise<void>} maybe a promise if lazy
|
815
831
|
*/
|
816
832
|
unpack(reason) {
|
817
833
|
if (this.content) return;
|
@@ -819,6 +835,7 @@ class PackContent {
|
|
819
835
|
// Move from state B to C
|
820
836
|
if (this.lazy) {
|
821
837
|
const { lazyName } = this;
|
838
|
+
/** @type {string | undefined} */
|
822
839
|
let timeMessage;
|
823
840
|
if (lazyName) {
|
824
841
|
// only log once
|
@@ -862,6 +879,9 @@ class PackContent {
|
|
862
879
|
return size;
|
863
880
|
}
|
864
881
|
|
882
|
+
/**
|
883
|
+
* @param {string} identifier identifier
|
884
|
+
*/
|
865
885
|
delete(identifier) {
|
866
886
|
this.items.delete(identifier);
|
867
887
|
this.used.delete(identifier);
|
@@ -906,6 +926,7 @@ class PackContent {
|
|
906
926
|
}
|
907
927
|
// State B2
|
908
928
|
const { lazyName } = this;
|
929
|
+
/** @type {string | undefined} */
|
909
930
|
let timeMessage;
|
910
931
|
if (lazyName) {
|
911
932
|
// only log once
|
@@ -959,6 +980,10 @@ class PackContent {
|
|
959
980
|
}
|
960
981
|
}
|
961
982
|
|
983
|
+
/**
|
984
|
+
* @param {Buffer} buf buffer
|
985
|
+
* @returns {Buffer} buffer that can be collected
|
986
|
+
*/
|
962
987
|
const allowCollectingMemory = buf => {
|
963
988
|
const wasted = buf.buffer.byteLength - buf.byteLength;
|
964
989
|
if (wasted > 8192 && (wasted > 1048576 || wasted > buf.byteLength)) {
|
@@ -978,10 +1003,10 @@ class PackFileCacheStrategy {
|
|
978
1003
|
* @param {Logger} options.logger a logger
|
979
1004
|
* @param {SnapshotOptions} options.snapshot options regarding snapshotting
|
980
1005
|
* @param {number} options.maxAge max age of cache items
|
981
|
-
* @param {boolean} options.profile track and log detailed timing information for individual cache items
|
982
|
-
* @param {boolean} options.allowCollectingMemory allow to collect unused memory created during deserialization
|
983
|
-
* @param {false | "gzip" | "brotli"} options.compression compression used
|
984
|
-
* @param {boolean} options.readonly disable storing cache into filesystem
|
1006
|
+
* @param {boolean | undefined} options.profile track and log detailed timing information for individual cache items
|
1007
|
+
* @param {boolean | undefined} options.allowCollectingMemory allow to collect unused memory created during deserialization
|
1008
|
+
* @param {false | "gzip" | "brotli" | undefined} options.compression compression used
|
1009
|
+
* @param {boolean | undefined} options.readonly disable storing cache into filesystem
|
985
1010
|
*/
|
986
1011
|
constructor({
|
987
1012
|
compiler,
|
@@ -1028,17 +1053,20 @@ class PackFileCacheStrategy {
|
|
1028
1053
|
this.buildDependencies = new Set();
|
1029
1054
|
/** @type {LazySet<string>} */
|
1030
1055
|
this.newBuildDependencies = new LazySet();
|
1031
|
-
/** @type {Snapshot} */
|
1056
|
+
/** @type {Snapshot | undefined} */
|
1032
1057
|
this.resolveBuildDependenciesSnapshot = undefined;
|
1033
|
-
/** @type {
|
1058
|
+
/** @type {ResolveResults | undefined} */
|
1034
1059
|
this.resolveResults = undefined;
|
1035
|
-
/** @type {Snapshot} */
|
1060
|
+
/** @type {Snapshot | undefined} */
|
1036
1061
|
this.buildSnapshot = undefined;
|
1037
|
-
/** @type {Promise<Pack>} */
|
1062
|
+
/** @type {Promise<Pack> | undefined} */
|
1038
1063
|
this.packPromise = this._openPack();
|
1039
1064
|
this.storePromise = Promise.resolve();
|
1040
1065
|
}
|
1041
1066
|
|
1067
|
+
/**
|
1068
|
+
* @returns {Promise<Pack>} pack
|
1069
|
+
*/
|
1042
1070
|
_getPack() {
|
1043
1071
|
if (this.packPromise === undefined) {
|
1044
1072
|
this.packPromise = this.storePromise.then(() => this._openPack());
|
@@ -1059,7 +1087,7 @@ class PackFileCacheStrategy {
|
|
1059
1087
|
let newBuildDependencies;
|
1060
1088
|
/** @type {Snapshot} */
|
1061
1089
|
let resolveBuildDependenciesSnapshot;
|
1062
|
-
/** @type {
|
1090
|
+
/** @type {ResolveResults | undefined} */
|
1063
1091
|
let resolveResults;
|
1064
1092
|
logger.time("restore cache container");
|
1065
1093
|
return this.fileSerializer
|
@@ -1243,6 +1271,9 @@ class PackFileCacheStrategy {
|
|
1243
1271
|
});
|
1244
1272
|
}
|
1245
1273
|
|
1274
|
+
/**
|
1275
|
+
* @param {LazySet<string>} dependencies dependencies to store
|
1276
|
+
*/
|
1246
1277
|
storeBuildDependencies(dependencies) {
|
1247
1278
|
if (this.readonly) return;
|
1248
1279
|
this.newBuildDependencies.addAll(dependencies);
|
@@ -1288,7 +1319,7 @@ class PackFileCacheStrategy {
|
|
1288
1319
|
missing,
|
1289
1320
|
resolveResults,
|
1290
1321
|
resolveDependencies
|
1291
|
-
} = result;
|
1322
|
+
} = /** @type {ResolveBuildDependenciesResult} */ (result);
|
1292
1323
|
if (this.resolveResults) {
|
1293
1324
|
for (const [key, value] of resolveResults) {
|
1294
1325
|
this.resolveResults.set(key, value);
|
@@ -1383,7 +1414,7 @@ class PackFileCacheStrategy {
|
|
1383
1414
|
const content = new PackContainer(
|
1384
1415
|
pack,
|
1385
1416
|
this.version,
|
1386
|
-
this.buildSnapshot,
|
1417
|
+
/** @type {Snapshot} */ (this.buildSnapshot),
|
1387
1418
|
updatedBuildDependencies,
|
1388
1419
|
this.resolveResults,
|
1389
1420
|
this.resolveBuildDependenciesSnapshot
|
@@ -120,7 +120,7 @@ const resolve = browsers => {
|
|
120
120
|
and_qq: [10, 4],
|
121
121
|
// baidu: Not supported
|
122
122
|
// and_uc: Not supported
|
123
|
-
|
123
|
+
kaios: [3, 0],
|
124
124
|
node: [12, 17]
|
125
125
|
});
|
126
126
|
|
@@ -187,7 +187,7 @@ const resolve = browsers => {
|
|
187
187
|
// and_qq: Unknown support
|
188
188
|
// baidu: Unknown support
|
189
189
|
// and_uc: Unknown support
|
190
|
-
|
190
|
+
kaios: [3, 0],
|
191
191
|
node: [0, 12]
|
192
192
|
}),
|
193
193
|
destructuring: rawChecker({
|
@@ -206,7 +206,7 @@ const resolve = browsers => {
|
|
206
206
|
// and_qq: Unknown support
|
207
207
|
// baidu: Unknown support
|
208
208
|
// and_uc: Unknown support
|
209
|
-
|
209
|
+
kaios: [2, 5],
|
210
210
|
node: [6, 0]
|
211
211
|
}),
|
212
212
|
bigIntLiteral: rawChecker({
|
@@ -225,7 +225,7 @@ const resolve = browsers => {
|
|
225
225
|
// and_qq: Not supported
|
226
226
|
// baidu: Not supported
|
227
227
|
// and_uc: Not supported
|
228
|
-
|
228
|
+
kaios: [3, 0],
|
229
229
|
node: [10, 4]
|
230
230
|
}),
|
231
231
|
// Support syntax `import` and `export` and no limitations and bugs on Node.js
|
@@ -246,7 +246,7 @@ const resolve = browsers => {
|
|
246
246
|
and_qq: [10, 4],
|
247
247
|
// baidu: Not supported
|
248
248
|
// and_uc: Not supported
|
249
|
-
|
249
|
+
kaios: [3, 0],
|
250
250
|
node: [12, 17]
|
251
251
|
}),
|
252
252
|
dynamicImport: es6DynamicImport,
|
@@ -269,7 +269,7 @@ const resolve = browsers => {
|
|
269
269
|
// and_qq: Unknown support
|
270
270
|
// baidu: Unknown support
|
271
271
|
// and_uc: Unknown support
|
272
|
-
|
272
|
+
kaios: [3, 0],
|
273
273
|
node: 12
|
274
274
|
}),
|
275
275
|
optionalChaining: rawChecker({
|
@@ -288,7 +288,7 @@ const resolve = browsers => {
|
|
288
288
|
// and_qq: Not supported
|
289
289
|
// baidu: Not supported
|
290
290
|
// and_uc: Not supported
|
291
|
-
|
291
|
+
kaios: [3, 0],
|
292
292
|
node: 14
|
293
293
|
}),
|
294
294
|
templateLiteral: rawChecker({
|
package/lib/config/defaults.js
CHANGED
@@ -15,7 +15,9 @@ const {
|
|
15
15
|
JAVASCRIPT_MODULE_TYPE_DYNAMIC,
|
16
16
|
WEBASSEMBLY_MODULE_TYPE_SYNC,
|
17
17
|
ASSET_MODULE_TYPE,
|
18
|
-
|
18
|
+
CSS_MODULE_TYPE_AUTO,
|
19
|
+
CSS_MODULE_TYPE,
|
20
|
+
CSS_MODULE_TYPE_MODULE
|
19
21
|
} = require("../ModuleTypeConstants");
|
20
22
|
const Template = require("../Template");
|
21
23
|
const { cleverMerge } = require("../util/cleverMerge");
|
@@ -298,7 +300,10 @@ const applyWebpackOptionsDefaults = options => {
|
|
298
300
|
cache,
|
299
301
|
context: /** @type {Context} */ (options.context),
|
300
302
|
targetProperties,
|
301
|
-
mode: /** @type {Mode} */ (options.mode)
|
303
|
+
mode: /** @type {Mode} */ (options.mode),
|
304
|
+
css:
|
305
|
+
/** @type {NonNullable<ExperimentsNormalized["css"]>} */
|
306
|
+
(options.experiments.css)
|
302
307
|
}),
|
303
308
|
options.resolve
|
304
309
|
);
|
@@ -533,6 +538,7 @@ const applyJavascriptParserOptionsDefaults = (
|
|
533
538
|
D(parserOptions, "dynamicImportMode", "lazy");
|
534
539
|
D(parserOptions, "dynamicImportPrefetch", false);
|
535
540
|
D(parserOptions, "dynamicImportPreload", false);
|
541
|
+
D(parserOptions, "dynamicImportFetchPriority", false);
|
536
542
|
D(parserOptions, "createRequire", isNode);
|
537
543
|
if (futureDefaults) D(parserOptions, "exportsPresence", "error");
|
538
544
|
};
|
@@ -704,38 +710,24 @@ const applyModuleDefaults = (
|
|
704
710
|
});
|
705
711
|
}
|
706
712
|
if (css) {
|
707
|
-
const
|
708
|
-
|
709
|
-
|
710
|
-
fullySpecified: true,
|
711
|
-
preferRelative: true
|
712
|
-
}
|
713
|
-
};
|
714
|
-
const cssModulesRule = {
|
715
|
-
type: "css/module",
|
716
|
-
resolve: {
|
717
|
-
fullySpecified: true
|
718
|
-
}
|
713
|
+
const resolve = {
|
714
|
+
fullySpecified: true,
|
715
|
+
preferRelative: true
|
719
716
|
};
|
720
717
|
rules.push({
|
721
718
|
test: /\.css$/i,
|
722
|
-
|
723
|
-
|
724
|
-
test: /\.module\.css$/i,
|
725
|
-
...cssModulesRule
|
726
|
-
},
|
727
|
-
{
|
728
|
-
...cssRule
|
729
|
-
}
|
730
|
-
]
|
719
|
+
type: CSS_MODULE_TYPE_AUTO,
|
720
|
+
resolve
|
731
721
|
});
|
732
722
|
rules.push({
|
733
723
|
mimetype: "text/css+module",
|
734
|
-
|
724
|
+
type: CSS_MODULE_TYPE_MODULE,
|
725
|
+
resolve
|
735
726
|
});
|
736
727
|
rules.push({
|
737
728
|
mimetype: "text/css",
|
738
|
-
|
729
|
+
type: CSS_MODULE_TYPE,
|
730
|
+
resolve
|
739
731
|
});
|
740
732
|
}
|
741
733
|
rules.push(
|
@@ -1398,9 +1390,16 @@ const applyOptimizationDefaults = (
|
|
1398
1390
|
* @param {string} options.context build context
|
1399
1391
|
* @param {TargetProperties | false} options.targetProperties target properties
|
1400
1392
|
* @param {Mode} options.mode mode
|
1393
|
+
* @param {CssExperimentOptions|false} options.css is css enabled
|
1401
1394
|
* @returns {ResolveOptions} resolve options
|
1402
1395
|
*/
|
1403
|
-
const getResolveDefaults = ({
|
1396
|
+
const getResolveDefaults = ({
|
1397
|
+
cache,
|
1398
|
+
context,
|
1399
|
+
targetProperties,
|
1400
|
+
mode,
|
1401
|
+
css
|
1402
|
+
}) => {
|
1404
1403
|
/** @type {string[]} */
|
1405
1404
|
const conditions = ["webpack"];
|
1406
1405
|
|
@@ -1468,6 +1467,24 @@ const getResolveDefaults = ({ cache, context, targetProperties, mode }) => {
|
|
1468
1467
|
}
|
1469
1468
|
};
|
1470
1469
|
|
1470
|
+
if (css) {
|
1471
|
+
const styleConditions = [];
|
1472
|
+
|
1473
|
+
styleConditions.push("webpack");
|
1474
|
+
styleConditions.push(mode === "development" ? "development" : "production");
|
1475
|
+
styleConditions.push("style");
|
1476
|
+
|
1477
|
+
resolveOptions.byDependency["css-import"] = {
|
1478
|
+
// We avoid using any main files because we have to be consistent with CSS `@import`
|
1479
|
+
// and CSS `@import` does not handle `main` files in directories,
|
1480
|
+
// you should always specify the full URL for styles
|
1481
|
+
mainFiles: [],
|
1482
|
+
mainFields: ["style", "..."],
|
1483
|
+
conditionNames: styleConditions,
|
1484
|
+
extensions: [".css"]
|
1485
|
+
};
|
1486
|
+
}
|
1487
|
+
|
1471
1488
|
return resolveOptions;
|
1472
1489
|
};
|
1473
1490
|
|
@@ -19,6 +19,11 @@ const Template = require("../Template");
|
|
19
19
|
/** @typedef {import("../NormalModule")} NormalModule */
|
20
20
|
/** @typedef {import("../util/Hash")} Hash */
|
21
21
|
|
22
|
+
/**
|
23
|
+
* @template T
|
24
|
+
* @typedef {import("../InitFragment")<T>} InitFragment
|
25
|
+
*/
|
26
|
+
|
22
27
|
const TYPES = new Set(["javascript"]);
|
23
28
|
|
24
29
|
class CssExportsGenerator extends Generator {
|
@@ -36,6 +41,7 @@ class CssExportsGenerator extends Generator {
|
|
36
41
|
*/
|
37
42
|
generate(module, generateContext) {
|
38
43
|
const source = new ReplaceSource(new RawSource(""));
|
44
|
+
/** @type {InitFragment<TODO>[]} */
|
39
45
|
const initFragments = [];
|
40
46
|
const cssExports = new Map();
|
41
47
|
|
@@ -57,6 +63,9 @@ class CssExportsGenerator extends Generator {
|
|
57
63
|
cssExports
|
58
64
|
};
|
59
65
|
|
66
|
+
/**
|
67
|
+
* @param {Dependency} dependency the dependency
|
68
|
+
*/
|
60
69
|
const handleDependency = dependency => {
|
61
70
|
const constructor = /** @type {new (...args: any[]) => Dependency} */ (
|
62
71
|
dependency.constructor
|
package/lib/css/CssGenerator.js
CHANGED
@@ -30,7 +30,7 @@ class CssGenerator extends Generator {
|
|
30
30
|
* @returns {Source} generated code
|
31
31
|
*/
|
32
32
|
generate(module, generateContext) {
|
33
|
-
const originalSource = module.originalSource();
|
33
|
+
const originalSource = /** @type {Source} */ (module.originalSource());
|
34
34
|
const source = new ReplaceSource(originalSource);
|
35
35
|
/** @type {InitFragment[]} */
|
36
36
|
const initFragments = [];
|
@@ -14,6 +14,7 @@ const compileBooleanMatcher = require("../util/compileBooleanMatcher");
|
|
14
14
|
const { chunkHasCss } = require("./CssModulesPlugin");
|
15
15
|
|
16
16
|
/** @typedef {import("../Chunk")} Chunk */
|
17
|
+
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
17
18
|
/** @typedef {import("../Compilation").RuntimeRequirementsContext} RuntimeRequirementsContext */
|
18
19
|
|
19
20
|
/**
|
@@ -55,7 +56,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
|
|
55
56
|
}
|
56
57
|
|
57
58
|
/**
|
58
|
-
* @returns {string} runtime code
|
59
|
+
* @returns {string | null} runtime code
|
59
60
|
*/
|
60
61
|
generate() {
|
61
62
|
const { compilation, chunk, _runtimeRequirements } = this;
|
@@ -67,10 +68,15 @@ class CssLoadingRuntimeModule extends RuntimeModule {
|
|
67
68
|
uniqueName,
|
68
69
|
chunkLoadTimeout: loadTimeout
|
69
70
|
}
|
70
|
-
} = compilation;
|
71
|
+
} = /** @type {Compilation} */ (compilation);
|
71
72
|
const fn = RuntimeGlobals.ensureChunkHandlers;
|
72
73
|
const conditionMap = chunkGraph.getChunkConditionMap(
|
73
|
-
chunk,
|
74
|
+
/** @type {Chunk} */ (chunk),
|
75
|
+
/**
|
76
|
+
* @param {Chunk} chunk the chunk
|
77
|
+
* @param {ChunkGraph} chunkGraph the chunk graph
|
78
|
+
* @returns {boolean} true, if the chunk has css
|
79
|
+
*/
|
74
80
|
(chunk, chunkGraph) =>
|
75
81
|
!!chunkGraph.getChunkModulesIterableBySourceType(chunk, "css")
|
76
82
|
);
|
@@ -87,7 +93,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
|
|
87
93
|
const initialChunkIdsWithCss = new Set();
|
88
94
|
/** @type {Set<number | string | null>} */
|
89
95
|
const initialChunkIdsWithoutCss = new Set();
|
90
|
-
for (const c of chunk.getAllInitialChunks()) {
|
96
|
+
for (const c of /** @type {Chunk} */ (chunk).getAllInitialChunks()) {
|
91
97
|
(chunkHasCss(c, chunkGraph)
|
92
98
|
? initialChunkIdsWithCss
|
93
99
|
: initialChunkIdsWithoutCss
|
@@ -98,8 +104,9 @@ class CssLoadingRuntimeModule extends RuntimeModule {
|
|
98
104
|
return null;
|
99
105
|
}
|
100
106
|
|
101
|
-
const { createStylesheet } =
|
102
|
-
|
107
|
+
const { createStylesheet } = CssLoadingRuntimeModule.getCompilationHooks(
|
108
|
+
/** @type {Compilation} */ (compilation)
|
109
|
+
);
|
103
110
|
|
104
111
|
const stateExpression = withHmr
|
105
112
|
? `${RuntimeGlobals.hmrRuntimeStatePrefix}_css`
|
@@ -128,6 +135,14 @@ class CssLoadingRuntimeModule extends RuntimeModule {
|
|
128
135
|
|
129
136
|
/** @type {(str: string) => number} */
|
130
137
|
const cc = str => str.charCodeAt(0);
|
138
|
+
const name = uniqueName
|
139
|
+
? runtimeTemplate.concatenation(
|
140
|
+
"--webpack-",
|
141
|
+
{ expr: "uniqueName" },
|
142
|
+
"-",
|
143
|
+
{ expr: "chunkId" }
|
144
|
+
)
|
145
|
+
: runtimeTemplate.concatenation("--webpack-", { expr: "chunkId" });
|
131
146
|
|
132
147
|
return Template.asString([
|
133
148
|
"// object to store loaded and loading chunks",
|
@@ -150,18 +165,27 @@ class CssLoadingRuntimeModule extends RuntimeModule {
|
|
150
165
|
[
|
151
166
|
`var data, token = "", token2, exports = {}, exportsWithId = [], exportsWithDashes = [], ${
|
152
167
|
withHmr ? "moduleIds = [], " : ""
|
153
|
-
}i = 0, cc = 1;`,
|
154
|
-
"try {
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
168
|
+
}name = ${name}, i = 0, cc = 1;`,
|
169
|
+
"try {",
|
170
|
+
Template.indent([
|
171
|
+
"if(!link) link = loadStylesheet(chunkId);",
|
172
|
+
// `link.sheet.rules` for legacy browsers
|
173
|
+
"var cssRules = link.sheet.cssRules || link.sheet.rules;",
|
174
|
+
"var j = cssRules.length - 1;",
|
175
|
+
"while(j > -1 && !data) {",
|
176
|
+
Template.indent([
|
177
|
+
"var style = cssRules[j--].style;",
|
178
|
+
"if(!style) continue;",
|
179
|
+
`data = style.getPropertyValue(name);`
|
180
|
+
]),
|
181
|
+
"}"
|
182
|
+
]),
|
183
|
+
"}catch(e){}",
|
184
|
+
"if(!data) {",
|
185
|
+
Template.indent([
|
186
|
+
"data = getComputedStyle(document.head).getPropertyValue(name);"
|
187
|
+
]),
|
188
|
+
"}",
|
165
189
|
"if(!data) return [];",
|
166
190
|
"for(; cc; i++) {",
|
167
191
|
Template.indent([
|
@@ -239,7 +263,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
|
|
239
263
|
"if(!link) {",
|
240
264
|
Template.indent([
|
241
265
|
"needAttach = true;",
|
242
|
-
createStylesheet.call(code, this.chunk)
|
266
|
+
createStylesheet.call(code, /** @type {Chunk} */ (this.chunk))
|
243
267
|
]),
|
244
268
|
"}",
|
245
269
|
`var onLinkComplete = ${runtimeTemplate.basicFunction(
|