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.

Files changed (249) hide show
  1. package/README.md +5 -2
  2. package/lib/APIPlugin.js +150 -99
  3. package/lib/AsyncDependenciesBlock.js +3 -3
  4. package/lib/BannerPlugin.js +2 -1
  5. package/lib/CaseSensitiveModulesWarning.js +3 -1
  6. package/lib/Chunk.js +35 -17
  7. package/lib/ChunkGraph.js +4 -4
  8. package/lib/ChunkGroup.js +20 -9
  9. package/lib/CompatibilityPlugin.js +50 -30
  10. package/lib/Compilation.js +2 -1
  11. package/lib/Compiler.js +10 -9
  12. package/lib/ConcatenationScope.js +2 -2
  13. package/lib/ConditionalInitFragment.js +11 -1
  14. package/lib/ConstPlugin.js +73 -32
  15. package/lib/ContextModule.js +8 -3
  16. package/lib/ContextModuleFactory.js +1 -0
  17. package/lib/ContextReplacementPlugin.js +13 -0
  18. package/lib/DelegatedModule.js +15 -3
  19. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  20. package/lib/DependenciesBlock.js +1 -1
  21. package/lib/Dependency.js +11 -5
  22. package/lib/DependencyTemplates.js +1 -1
  23. package/lib/DllEntryPlugin.js +11 -1
  24. package/lib/DllModule.js +6 -0
  25. package/lib/DllReferencePlugin.js +13 -1
  26. package/lib/Entrypoint.js +1 -1
  27. package/lib/ErrorHelpers.js +1 -0
  28. package/lib/EvalSourceMapDevToolPlugin.js +6 -1
  29. package/lib/ExportsInfo.js +22 -4
  30. package/lib/ExportsInfoApiPlugin.js +14 -5
  31. package/lib/ExternalModule.js +20 -8
  32. package/lib/FileSystemInfo.js +52 -24
  33. package/lib/FlagAllModulesAsUsedPlugin.js +6 -1
  34. package/lib/FlagDependencyUsagePlugin.js +3 -1
  35. package/lib/FlagEntryExportAsUsedPlugin.js +4 -0
  36. package/lib/Generator.js +7 -0
  37. package/lib/HotModuleReplacementPlugin.js +8 -0
  38. package/lib/InitFragment.js +28 -5
  39. package/lib/JavascriptMetaInfoPlugin.js +11 -6
  40. package/lib/LibManifestPlugin.js +20 -4
  41. package/lib/Module.js +14 -3
  42. package/lib/ModuleDependencyError.js +4 -2
  43. package/lib/ModuleDependencyWarning.js +4 -2
  44. package/lib/ModuleGraph.js +31 -24
  45. package/lib/ModuleGraphConnection.js +19 -6
  46. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  47. package/lib/ModuleNotFoundError.js +5 -2
  48. package/lib/ModuleProfile.js +1 -0
  49. package/lib/ModuleRestoreError.js +2 -0
  50. package/lib/ModuleStoreError.js +2 -1
  51. package/lib/ModuleTypeConstants.js +7 -0
  52. package/lib/MultiWatching.js +4 -0
  53. package/lib/NodeStuffPlugin.js +32 -6
  54. package/lib/ProgressPlugin.js +71 -15
  55. package/lib/ProvidePlugin.js +13 -4
  56. package/lib/RawModule.js +3 -1
  57. package/lib/RequireJsStuffPlugin.js +7 -0
  58. package/lib/RuntimeGlobals.js +5 -0
  59. package/lib/RuntimeModule.js +3 -3
  60. package/lib/RuntimePlugin.js +6 -3
  61. package/lib/RuntimeTemplate.js +22 -4
  62. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  63. package/lib/SourceMapDevToolPlugin.js +7 -2
  64. package/lib/UseStrictPlugin.js +10 -3
  65. package/lib/Watching.js +62 -25
  66. package/lib/WebpackError.js +6 -5
  67. package/lib/WebpackIsIncludedPlugin.js +6 -4
  68. package/lib/WebpackOptionsApply.js +4 -2
  69. package/lib/WebpackOptionsDefaulter.js +10 -3
  70. package/lib/asset/AssetGenerator.js +2 -1
  71. package/lib/asset/AssetParser.js +11 -6
  72. package/lib/asset/AssetSourceParser.js +8 -3
  73. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  74. package/lib/buildChunkGraph.js +37 -21
  75. package/lib/cache/IdleFileCachePlugin.js +2 -1
  76. package/lib/cache/PackFileCacheStrategy.js +53 -22
  77. package/lib/config/browserslistTargetHandler.js +7 -7
  78. package/lib/config/defaults.js +43 -26
  79. package/lib/container/RemoteRuntimeModule.js +1 -1
  80. package/lib/css/CssExportsGenerator.js +9 -0
  81. package/lib/css/CssGenerator.js +1 -1
  82. package/lib/css/CssLoadingRuntimeModule.js +43 -19
  83. package/lib/css/CssModulesPlugin.js +42 -14
  84. package/lib/css/CssParser.js +22 -0
  85. package/lib/dependencies/AMDDefineDependency.js +34 -4
  86. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +5 -0
  87. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  88. package/lib/dependencies/CommonJsExportsParserPlugin.js +14 -4
  89. package/lib/dependencies/CommonJsImportsParserPlugin.js +169 -59
  90. package/lib/dependencies/CommonJsPlugin.js +13 -8
  91. package/lib/dependencies/CommonJsRequireContextDependency.js +2 -2
  92. package/lib/dependencies/ConstDependency.js +2 -2
  93. package/lib/dependencies/ContextDependency.js +7 -2
  94. package/lib/dependencies/CssImportDependency.js +1 -1
  95. package/lib/dependencies/CssLocalIdentifierDependency.js +5 -0
  96. package/lib/dependencies/CssUrlDependency.js +3 -3
  97. package/lib/dependencies/DllEntryDependency.js +5 -0
  98. package/lib/dependencies/DynamicExports.js +10 -6
  99. package/lib/dependencies/ExportsInfoDependency.js +14 -4
  100. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  101. package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -1
  102. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +12 -5
  103. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +2 -0
  104. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +4 -4
  105. package/lib/dependencies/HarmonyExports.js +9 -5
  106. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +40 -27
  107. package/lib/dependencies/HarmonyImportSideEffectDependency.js +1 -2
  108. package/lib/dependencies/HarmonyImportSpecifierDependency.js +31 -21
  109. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  110. package/lib/dependencies/ImportDependency.js +5 -3
  111. package/lib/dependencies/ImportEagerDependency.js +5 -3
  112. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +19 -0
  113. package/lib/dependencies/ImportMetaPlugin.js +31 -15
  114. package/lib/dependencies/ImportParserPlugin.js +62 -25
  115. package/lib/dependencies/ImportWeakDependency.js +5 -3
  116. package/lib/dependencies/JsonExportsDependency.js +1 -1
  117. package/lib/dependencies/ModuleDependency.js +1 -1
  118. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  119. package/lib/dependencies/ProvidedDependency.js +4 -1
  120. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  121. package/lib/dependencies/RequireEnsureDependenciesBlock.js +5 -2
  122. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  123. package/lib/dependencies/RequireHeaderDependency.js +4 -0
  124. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +26 -5
  125. package/lib/dependencies/RequireResolveHeaderDependency.js +9 -0
  126. package/lib/dependencies/SystemPlugin.js +17 -5
  127. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  128. package/lib/dependencies/URLDependency.js +2 -2
  129. package/lib/dependencies/URLPlugin.js +9 -4
  130. package/lib/dependencies/WebAssemblyImportDependency.js +1 -1
  131. package/lib/dependencies/WorkerPlugin.js +59 -22
  132. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  133. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +1 -1
  134. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  135. package/lib/ids/HashedModuleIdsPlugin.js +1 -1
  136. package/lib/ids/SyncModuleIdsPlugin.js +1 -0
  137. package/lib/javascript/BasicEvaluatedExpression.js +28 -19
  138. package/lib/javascript/CommonJsChunkFormatPlugin.js +6 -2
  139. package/lib/javascript/JavascriptModulesPlugin.js +25 -5
  140. package/lib/javascript/JavascriptParser.js +157 -85
  141. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  142. package/lib/json/JsonData.js +2 -2
  143. package/lib/json/JsonParser.js +25 -12
  144. package/lib/library/AmdLibraryPlugin.js +2 -2
  145. package/lib/library/AssignLibraryPlugin.js +13 -1
  146. package/lib/library/EnableLibraryPlugin.js +4 -0
  147. package/lib/library/SystemLibraryPlugin.js +1 -1
  148. package/lib/library/UmdLibraryPlugin.js +20 -2
  149. package/lib/logging/runtime.js +1 -1
  150. package/lib/logging/truncateArgs.js +4 -0
  151. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -6
  152. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +2 -1
  153. package/lib/node/RequireChunkLoadingRuntimeModule.js +10 -6
  154. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  155. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  156. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  157. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  158. package/lib/optimize/InnerGraph.js +5 -5
  159. package/lib/optimize/InnerGraphPlugin.js +2 -1
  160. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  161. package/lib/optimize/MangleExportsPlugin.js +1 -1
  162. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  163. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  164. package/lib/optimize/RealContentHashPlugin.js +80 -30
  165. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  166. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  167. package/lib/optimize/SideEffectsFlagPlugin.js +10 -1
  168. package/lib/optimize/SplitChunksPlugin.js +71 -31
  169. package/lib/performance/SizeLimitsPlugin.js +7 -4
  170. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  171. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  172. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  173. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  174. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  175. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  176. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  177. package/lib/rules/RuleSetCompiler.js +3 -3
  178. package/lib/rules/UseEffectRulePlugin.js +6 -4
  179. package/lib/runtime/AsyncModuleRuntimeModule.js +8 -5
  180. package/lib/runtime/AutoPublicPathRuntimeModule.js +4 -2
  181. package/lib/runtime/BaseUriRuntimeModule.js +3 -3
  182. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  183. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  184. package/lib/runtime/CompatRuntimeModule.js +7 -2
  185. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  186. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  187. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  188. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  189. package/lib/runtime/EnsureChunkRuntimeModule.js +15 -4
  190. package/lib/runtime/GetChunkFilenameRuntimeModule.js +6 -10
  191. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  192. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  193. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +4 -2
  194. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  195. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  196. package/lib/runtime/LoadScriptRuntimeModule.js +64 -48
  197. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  198. package/lib/runtime/NonceRuntimeModule.js +1 -1
  199. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  200. package/lib/runtime/PublicPathRuntimeModule.js +4 -2
  201. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  202. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  203. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -3
  204. package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -2
  205. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  206. package/lib/serialization/BinaryMiddleware.js +143 -1
  207. package/lib/serialization/ErrorObjectSerializer.js +3 -0
  208. package/lib/serialization/ObjectMiddleware.js +9 -3
  209. package/lib/serialization/types.js +1 -1
  210. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  211. package/lib/sharing/ConsumeSharedRuntimeModule.js +14 -5
  212. package/lib/sharing/ProvideSharedDependency.js +11 -0
  213. package/lib/sharing/ProvideSharedModule.js +4 -0
  214. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  215. package/lib/sharing/ShareRuntimeModule.js +12 -5
  216. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  217. package/lib/sharing/utils.js +32 -5
  218. package/lib/util/AsyncQueue.js +4 -2
  219. package/lib/util/ParallelismFactorCalculator.js +10 -0
  220. package/lib/util/Semaphore.js +1 -1
  221. package/lib/util/StackedCacheMap.js +1 -1
  222. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  223. package/lib/util/createHash.js +30 -9
  224. package/lib/util/deprecation.js +10 -3
  225. package/lib/util/deterministicGrouping.js +50 -11
  226. package/lib/util/findGraphRoots.js +4 -2
  227. package/lib/util/memoize.js +3 -3
  228. package/lib/util/processAsyncTree.js +7 -1
  229. package/lib/util/registerExternalSerializer.js +1 -1
  230. package/lib/util/runtime.js +84 -21
  231. package/lib/util/semver.js +1 -0
  232. package/lib/util/smartGrouping.js +1 -1
  233. package/lib/validateSchema.js +6 -2
  234. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +6 -2
  235. package/lib/wasm-async/AsyncWebAssemblyParser.js +7 -3
  236. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +14 -7
  237. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -1
  238. package/lib/wasm-sync/WebAssemblyGenerator.js +1 -0
  239. package/lib/wasm-sync/WebAssemblyParser.js +6 -2
  240. package/lib/web/JsonpChunkLoadingRuntimeModule.js +14 -4
  241. package/lib/webpack.js +11 -2
  242. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -16
  243. package/module.d.ts +1 -0
  244. package/package.json +5 -4
  245. package/schemas/WebpackOptions.check.js +1 -1
  246. package/schemas/WebpackOptions.json +52 -6
  247. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  248. package/schemas/plugins/css/CssParserOptions.json +1 -1
  249. 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 {Map<string, string | false>} resolveResults result of the resolved build dependencies
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 (Date.now() - oldest.lastAccess > this.maxAge) {
509
- const loc = oldest.location;
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 {Map<string, string | false>} */
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 {Map<string, string | false>} */
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
- // kaios: Not supported
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
- // kaios: Unknown support
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
- // kaios: Unknown support
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
- // kaios: Not supported
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
- // kaios: Not supported
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
- // kaios: Unknown support
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
- // kaios: Not supported
291
+ kaios: [3, 0],
292
292
  node: 14
293
293
  }),
294
294
  templateLiteral: rawChecker({
@@ -15,7 +15,9 @@ const {
15
15
  JAVASCRIPT_MODULE_TYPE_DYNAMIC,
16
16
  WEBASSEMBLY_MODULE_TYPE_SYNC,
17
17
  ASSET_MODULE_TYPE,
18
- CSS_MODULE_TYPE
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 cssRule = {
708
- type: CSS_MODULE_TYPE,
709
- resolve: {
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
- oneOf: [
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
- ...cssModulesRule
724
+ type: CSS_MODULE_TYPE_MODULE,
725
+ resolve
735
726
  });
736
727
  rules.push({
737
728
  mimetype: "text/css",
738
- ...cssRule
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 = ({ cache, context, targetProperties, mode }) => {
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
 
@@ -18,7 +18,7 @@ class RemoteRuntimeModule extends RuntimeModule {
18
18
  }
19
19
 
20
20
  /**
21
- * @returns {string} runtime code
21
+ * @returns {string | null} runtime code
22
22
  */
23
23
  generate() {
24
24
  const { compilation, chunkGraph } = this;
@@ -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
@@ -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
- CssLoadingRuntimeModule.getCompilationHooks(compilation);
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 { if(!link) link = loadStylesheet(chunkId); data = link.sheet.cssRules; data = data[data.length - 1].style; } catch(e) { data = getComputedStyle(document.head); }",
155
- `data = data.getPropertyValue(${
156
- uniqueName
157
- ? runtimeTemplate.concatenation(
158
- "--webpack-",
159
- { expr: "uniqueName" },
160
- "-",
161
- { expr: "chunkId" }
162
- )
163
- : runtimeTemplate.concatenation("--webpack-", { expr: "chunkId" })
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(