webpack 5.108.4 → 5.109.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.
Files changed (186) hide show
  1. package/lib/APIPlugin.js +48 -29
  2. package/lib/CacheFacade.js +8 -0
  3. package/lib/ChunkGroup.js +1 -0
  4. package/lib/CompatibilityPlugin.js +31 -29
  5. package/lib/Compilation.js +49 -4
  6. package/lib/ConstPlugin.js +11 -11
  7. package/lib/ContextModule.js +239 -6
  8. package/lib/ContextModuleFactory.js +139 -14
  9. package/lib/DefinePlugin.js +396 -101
  10. package/lib/Entrypoint.js +1 -1
  11. package/lib/ExportsInfoApiPlugin.js +2 -2
  12. package/lib/ExternalModule.js +107 -5
  13. package/lib/ExternalModuleFactoryPlugin.js +20 -1
  14. package/lib/FileSystemInfo.js +130 -74
  15. package/lib/HotModuleReplacementPlugin.js +18 -15
  16. package/lib/Module.js +3 -0
  17. package/lib/ModuleFilenameHelpers.js +2 -2
  18. package/lib/ModuleTypeConstants.js +8 -1
  19. package/lib/MultiCompiler.js +13 -2
  20. package/lib/MultiWatching.js +1 -0
  21. package/lib/NodeStuffPlugin.js +51 -33
  22. package/lib/NormalModule.js +169 -401
  23. package/lib/NormalModuleFactory.js +76 -2
  24. package/lib/ProgressPlugin.js +211 -119
  25. package/lib/ProvidePlugin.js +2 -2
  26. package/lib/RuntimeGlobals.js +47 -0
  27. package/lib/RuntimePlugin.js +33 -0
  28. package/lib/RuntimeTemplate.js +304 -16
  29. package/lib/UseStrictPlugin.js +1 -1
  30. package/lib/WebpackIsIncludedPlugin.js +1 -1
  31. package/lib/WebpackOptionsApply.js +24 -19
  32. package/lib/asset/AssetGenerator.js +110 -28
  33. package/lib/asset/AssetModulesPlugin.js +92 -2
  34. package/lib/asset/WebManifestGenerator.js +164 -0
  35. package/lib/asset/WebManifestParser.js +130 -0
  36. package/lib/async-modules/AwaitDependenciesInitFragment.js +14 -4
  37. package/lib/async-modules/isGeneratorLowered.js +26 -0
  38. package/lib/cache/PackFileCacheStrategy.js +9 -3
  39. package/lib/config/browserslistTargetHandler.js +40 -0
  40. package/lib/config/defaults.js +219 -29
  41. package/lib/config/normalization.js +26 -0
  42. package/lib/config/target.js +9 -1
  43. package/lib/css/CssGenerator.js +40 -31
  44. package/lib/css/CssLoadingRuntimeModule.js +5 -1
  45. package/lib/css/CssModulesPlugin.js +13 -0
  46. package/lib/css/CssParser.js +594 -263
  47. package/lib/css/syntax.js +875 -462
  48. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -6
  49. package/lib/dependencies/AMDPlugin.js +2 -2
  50. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +13 -13
  51. package/lib/dependencies/CommonJsDependencyHelpers.js +39 -0
  52. package/lib/dependencies/CommonJsExportsDependency.js +47 -2
  53. package/lib/dependencies/CommonJsExportsParserPlugin.js +10 -10
  54. package/lib/dependencies/CommonJsImportsParserPlugin.js +18 -18
  55. package/lib/dependencies/CommonJsPlugin.js +2 -2
  56. package/lib/dependencies/CommonJsRequireDependency.js +26 -1
  57. package/lib/dependencies/CommonJsSelfReferenceDependency.js +32 -1
  58. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  59. package/lib/dependencies/CreateRequireParserPlugin.js +6 -6
  60. package/lib/dependencies/CssIcssExportDependency.js +162 -71
  61. package/lib/dependencies/CssUrlDependency.js +35 -4
  62. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +2 -2
  63. package/lib/dependencies/HarmonyCompatibilityDependency.js +32 -14
  64. package/lib/dependencies/HarmonyDetectionParserPlugin.js +43 -13
  65. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +7 -19
  66. package/lib/dependencies/HarmonyImportDependency.js +12 -1
  67. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +11 -11
  68. package/lib/dependencies/HarmonyModulesPlugin.js +6 -0
  69. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -1
  70. package/lib/dependencies/HtmlEntryDependency.js +797 -172
  71. package/lib/dependencies/HtmlSourceDependency.js +26 -0
  72. package/lib/dependencies/ImportDependency.js +43 -1
  73. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +31 -18
  74. package/lib/dependencies/ImportMetaContextPlugin.js +38 -7
  75. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  76. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  77. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  78. package/lib/dependencies/ImportMetaPlugin.js +532 -180
  79. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  80. package/lib/dependencies/ImportParserPlugin.js +80 -17
  81. package/lib/dependencies/ImportPhase.js +10 -8
  82. package/lib/dependencies/LoaderPlugin.js +5 -1
  83. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  84. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +3 -6
  85. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +4 -11
  86. package/lib/dependencies/SystemPlugin.js +2 -4
  87. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  88. package/lib/dependencies/URLDependency.js +141 -21
  89. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +324 -112
  90. package/lib/dependencies/WorkerDependency.js +86 -18
  91. package/lib/dependencies/WorkletDependency.js +278 -0
  92. package/lib/dll/DelegatedModuleFactoryPlugin.js +19 -0
  93. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +1 -1
  94. package/lib/errors/LoaderLoadingError.js +20 -0
  95. package/lib/errors/ModuleParseError.js +39 -22
  96. package/lib/errors/NodeStuffInWebError.js +1 -1
  97. package/lib/esm/ModuleChunkFormatPlugin.js +47 -14
  98. package/lib/esm/ModuleChunkLoadingPlugin.js +8 -1
  99. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +29 -1
  100. package/lib/hmr/lazyCompilationBackend.js +32 -8
  101. package/lib/html/HtmlGenerator.js +887 -15
  102. package/lib/html/HtmlModule.js +2 -2
  103. package/lib/html/HtmlModulesPlugin.js +610 -166
  104. package/lib/html/HtmlParser.js +603 -247
  105. package/lib/html/favicon.svg +1 -0
  106. package/lib/html/syntax.js +1264 -661
  107. package/lib/ids/IdHelpers.js +1 -1
  108. package/lib/index.js +6 -0
  109. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
  110. package/lib/javascript/BasicEvaluatedExpression.js +366 -48
  111. package/lib/javascript/JavascriptGenerator.js +197 -49
  112. package/lib/javascript/JavascriptModulesPlugin.js +178 -24
  113. package/lib/javascript/JavascriptParser.js +701 -355
  114. package/lib/javascript/JavascriptParserHelpers.js +3 -6
  115. package/lib/javascript/syntax.js +4380 -0
  116. package/lib/library/ModuleLibraryPlugin.js +38 -1
  117. package/lib/loaders/LoaderRunner.js +714 -0
  118. package/lib/loaders/loadLoader.js +100 -0
  119. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +19 -0
  120. package/lib/node/ReadFileCompileWasmPlugin.js +14 -0
  121. package/lib/optimize/ConcatenatedModule.js +120 -16
  122. package/lib/optimize/FlagIncludedChunksPlugin.js +13 -3
  123. package/lib/optimize/InnerGraphPlugin.js +50 -30
  124. package/lib/optimize/ModuleConcatenationPlugin.js +69 -3
  125. package/lib/optimize/SideEffectsFlagPlugin.js +86 -43
  126. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +15 -0
  127. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +24 -13
  128. package/lib/prefetch/ResourceHintPlugin.js +663 -0
  129. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  130. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  131. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  132. package/lib/rules/RuleSetCompiler.js +114 -0
  133. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  134. package/lib/runtime/AsyncModuleRuntimeModule.js +24 -8
  135. package/lib/runtime/AutoPublicPathRuntimeModule.js +7 -1
  136. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  137. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  138. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +204 -8
  139. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +4 -1
  140. package/lib/schemes/HttpUriPlugin.js +40 -1
  141. package/lib/schemes/VirtualUrlPlugin.js +1 -2
  142. package/lib/serialization/FileMiddleware.js +29 -3
  143. package/lib/stats/DefaultStatsFactoryPlugin.js +32 -3
  144. package/lib/stats/DefaultStatsPresetPlugin.js +2 -0
  145. package/lib/stats/DefaultStatsPrinterPlugin.js +12 -2
  146. package/lib/stats/StatsFactory.js +15 -8
  147. package/lib/url/URLParserPlugin.js +66 -13
  148. package/lib/util/AsyncQueue.js +122 -72
  149. package/lib/util/SetHelpers.js +1 -1
  150. package/lib/util/StackedMap.js +122 -48
  151. package/lib/util/binarySearchBounds.js +2 -2
  152. package/lib/util/concatenate.js +40 -14
  153. package/lib/util/createHooksRegistry.js +13 -5
  154. package/lib/util/dataURL.js +2 -2
  155. package/lib/util/deterministicGrouping.js +7 -5
  156. package/lib/util/formatSize.js +6 -2
  157. package/lib/util/globUtils.js +710 -0
  158. package/lib/util/identifier.js +23 -6
  159. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  160. package/lib/util/internalSerializables.js +88 -71
  161. package/lib/util/magicComment.js +121 -25
  162. package/lib/util/numberHash.js +2 -2
  163. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +24 -18
  164. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +33 -22
  165. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +79 -16
  166. package/lib/web/FetchCompileAsyncWasmPlugin.js +19 -0
  167. package/lib/web/FetchCompileWasmPlugin.js +14 -0
  168. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -0
  169. package/lib/webpack.js +65 -0
  170. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +3 -0
  171. package/module.d.ts +21 -0
  172. package/package.json +13 -12
  173. package/schemas/WebpackOptions.check.js +1 -1
  174. package/schemas/WebpackOptions.json +759 -36
  175. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  176. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  177. package/schemas/plugins/ProgressPlugin.json +17 -1
  178. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  179. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  180. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  181. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  182. package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
  183. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  184. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  185. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  186. package/types.d.ts +1213 -96
@@ -5,16 +5,23 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ ASSET_URL_TYPE,
10
+ JAVASCRIPT_TYPE
11
+ } = require("../ModuleSourceTypeConstants");
8
12
  const RuntimeGlobals = require("../RuntimeGlobals");
9
13
  const RawDataUrlModule = require("../asset/RawDataUrlModule");
10
14
  const {
11
15
  getDependencyUsedByExportsCondition
12
16
  } = require("../optimize/InnerGraph");
17
+ const { toJsStringLiteral } = require("../util/identifier");
13
18
  const makeSerializable = require("../util/makeSerializable");
14
19
  const memoize = require("../util/memoize");
15
20
  const ModuleDependency = require("./ModuleDependency");
16
21
 
17
22
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
23
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
24
+ /** @typedef {import("../Compilation")} Compilation */
18
25
  /** @typedef {import("../Dependency")} Dependency */
19
26
  /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
20
27
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
@@ -22,13 +29,71 @@ const ModuleDependency = require("./ModuleDependency");
22
29
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
23
30
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
24
31
  /** @typedef {import("../optimize/InnerGraph").UsedByExports} UsedByExports */
25
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range, boolean, UsedByExports | undefined]>} ObjectDeserializerContext */
26
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range, boolean, UsedByExports | undefined]>} ObjectSerializerContext */
32
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range, boolean, UsedByExports | undefined, true | undefined, true | undefined, ("high" | "low" | "auto" | undefined), string | undefined, string | undefined, string | undefined]>} ObjectDeserializerContext */
33
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range, boolean, UsedByExports | undefined, true | undefined, true | undefined, ("high" | "low" | "auto" | undefined), string | undefined, string | undefined, string | undefined]>} ObjectSerializerContext */
27
34
 
28
35
  const getIgnoredRawDataUrlModule = memoize(
29
36
  () => new RawDataUrlModule("data:,", "ignored-asset", "(ignored asset)")
30
37
  );
31
38
 
39
+ /**
40
+ * Resolves the static literal specifier (already quoted) for `new URL(<here>, import.meta.url)`,
41
+ * or `null` when the asset url can't be determined statically (e.g. a runtime/dynamic publicPath).
42
+ * @param {URLDependency} dep the dependency
43
+ * @param {DependencyTemplateContext} templateContext the template context
44
+ * @returns {string | null} a JS string literal, or `null` to fall back to the runtime form
45
+ */
46
+ const getAnalyzableUrlSpecifier = (dep, templateContext) => {
47
+ const {
48
+ module: consumingModule,
49
+ moduleGraph,
50
+ chunkGraph,
51
+ runtime,
52
+ codeGenerationResults,
53
+ runtimeTemplate
54
+ } = templateContext;
55
+ const assetModule = moduleGraph.getModule(dep);
56
+ if (!assetModule || !codeGenerationResults.has(assetModule, runtime)) {
57
+ return null;
58
+ }
59
+ const urlData = codeGenerationResults.getData(assetModule, runtime, "url");
60
+ if (!urlData) return null;
61
+
62
+ const jsUrl = urlData[JAVASCRIPT_TYPE];
63
+ if (typeof jsUrl === "string") {
64
+ // The asset concatenates the runtime publicPath; rebuild a literal from the
65
+ // resolved filename. The base is the consuming chunk (`import.meta.url`).
66
+ if (jsUrl.includes(RuntimeGlobals.require)) {
67
+ const filename = codeGenerationResults.getData(
68
+ assetModule,
69
+ runtime,
70
+ "filename"
71
+ );
72
+ if (typeof filename !== "string") return null;
73
+ const { publicPath } = runtimeTemplate.outputOptions;
74
+ if (publicPath === "auto") {
75
+ const undo = runtimeTemplate._getModuleUndoPath(
76
+ consumingModule,
77
+ chunkGraph
78
+ );
79
+ return undo === null ? null : toJsStringLiteral(undo + filename);
80
+ }
81
+ if (typeof publicPath === "string" && !publicPath.includes("[")) {
82
+ return toJsStringLiteral(publicPath + filename);
83
+ }
84
+ return null;
85
+ }
86
+ // An already-quoted literal (generator `publicPath` / data: url) is used as-is;
87
+ // a raw value (external asset) is normalized to a quoted string.
88
+ return jsUrl.startsWith('"') ? jsUrl : toJsStringLiteral(jsUrl);
89
+ }
90
+
91
+ // Wrapper dropped: the asset is consumed as `asset-url` (absolute publicPath),
92
+ // so its resolved url is already a chunk-independent literal.
93
+ const assetUrl = urlData[ASSET_URL_TYPE];
94
+ return typeof assetUrl === "string" ? toJsStringLiteral(assetUrl) : null;
95
+ };
96
+
32
97
  class URLDependency extends ModuleDependency {
33
98
  /**
34
99
  * Creates an instance of URLDependency.
@@ -45,6 +110,18 @@ class URLDependency extends ModuleDependency {
45
110
  this.relative = relative || false;
46
111
  /** @type {UsedByExports | undefined} */
47
112
  this.usedByExports = undefined;
113
+ /** @type {true | undefined} */
114
+ this.prefetch = undefined;
115
+ /** @type {true | undefined} */
116
+ this.preload = undefined;
117
+ /** @type {"high" | "low" | "auto" | undefined} */
118
+ this.fetchPriority = undefined;
119
+ /** @type {string | undefined} */
120
+ this.asAttribute = undefined;
121
+ /** @type {string | undefined} */
122
+ this.typeAttribute = undefined;
123
+ /** @type {string | undefined} */
124
+ this.mediaAttribute = undefined;
48
125
  }
49
126
 
50
127
  get type() {
@@ -81,7 +158,13 @@ class URLDependency extends ModuleDependency {
81
158
  context
82
159
  .write(this.outerRange)
83
160
  .write(this.relative)
84
- .write(this.usedByExports);
161
+ .write(this.usedByExports)
162
+ .write(this.prefetch)
163
+ .write(this.preload)
164
+ .write(this.fetchPriority)
165
+ .write(this.asAttribute)
166
+ .write(this.typeAttribute)
167
+ .write(this.mediaAttribute);
85
168
  super.serialize(context);
86
169
  }
87
170
 
@@ -95,7 +178,19 @@ class URLDependency extends ModuleDependency {
95
178
  this.relative = c1.read();
96
179
  const c2 = c1.rest;
97
180
  this.usedByExports = c2.read();
98
- super.deserialize(c2.rest);
181
+ const c3 = c2.rest;
182
+ this.prefetch = c3.read();
183
+ const c4 = c3.rest;
184
+ this.preload = c4.read();
185
+ const c5 = c4.rest;
186
+ this.fetchPriority = c5.read();
187
+ const c6 = c5.rest;
188
+ this.asAttribute = c6.read();
189
+ const c7 = c6.rest;
190
+ this.typeAttribute = c7.read();
191
+ const c8 = c7.rest;
192
+ this.mediaAttribute = c8.read();
193
+ super.deserialize(c8.rest);
99
194
  }
100
195
  }
101
196
 
@@ -129,36 +224,61 @@ URLDependency.Template = class URLDependencyTemplate extends (
129
224
  return;
130
225
  }
131
226
 
227
+ // For ESM module output, emit the analyzable `new URL("./asset", import.meta.url)`
228
+ // form (literal specifier, no runtime helpers) so other bundlers and webpack itself
229
+ // can statically follow the asset. `url: "relative"` and prefetch/preload hints
230
+ // (which need the runtime asset reference) keep the runtime form.
231
+ if (
232
+ !dep.relative &&
233
+ !dep.prefetch &&
234
+ !dep.preload &&
235
+ runtimeTemplate.supportsAnalyzableEsm()
236
+ ) {
237
+ const specifier = getAnalyzableUrlSpecifier(dep, templateContext);
238
+ if (specifier !== null) {
239
+ source.replace(
240
+ dep.range[0],
241
+ dep.range[1] - 1,
242
+ `/* asset import */ ${specifier}, ${runtimeTemplate.outputOptions.importMetaName}.url`
243
+ );
244
+ return;
245
+ }
246
+ }
247
+
132
248
  runtimeRequirements.add(RuntimeGlobals.require);
133
249
 
250
+ const module = moduleGraph.getModule(dep);
251
+ const moduleRaw = runtimeTemplate.moduleRaw({
252
+ chunkGraph,
253
+ module,
254
+ request: dep.request,
255
+ runtimeRequirements,
256
+ weak: false
257
+ });
258
+
259
+ // Resource hints fire eagerly at chunk startup via the marker
260
+ // requirement / `StartupAssetHintRuntimeModule`; the call site stays
261
+ // a plain URL expression, so the browser is already prefetching by
262
+ // the time user code reaches this line.
263
+ if (dep.prefetch || dep.preload) {
264
+ runtimeRequirements.add(RuntimeGlobals.startupAssetHints);
265
+ if (dep.prefetch) runtimeRequirements.add(RuntimeGlobals.prefetchAsset);
266
+ if (dep.preload) runtimeRequirements.add(RuntimeGlobals.preloadAsset);
267
+ }
268
+
134
269
  if (dep.relative) {
135
270
  runtimeRequirements.add(RuntimeGlobals.relativeUrl);
136
271
  source.replace(
137
272
  dep.outerRange[0],
138
273
  dep.outerRange[1] - 1,
139
- `/* asset import */ new ${
140
- RuntimeGlobals.relativeUrl
141
- }(${runtimeTemplate.moduleRaw({
142
- chunkGraph,
143
- module: moduleGraph.getModule(dep),
144
- request: dep.request,
145
- runtimeRequirements,
146
- weak: false
147
- })})`
274
+ `/* asset import */ new ${RuntimeGlobals.relativeUrl}(${moduleRaw})`
148
275
  );
149
276
  } else {
150
277
  runtimeRequirements.add(RuntimeGlobals.baseURI);
151
-
152
278
  source.replace(
153
279
  dep.range[0],
154
280
  dep.range[1] - 1,
155
- `/* asset import */ ${runtimeTemplate.moduleRaw({
156
- chunkGraph,
157
- module: moduleGraph.getModule(dep),
158
- request: dep.request,
159
- runtimeRequirements,
160
- weak: false
161
- })}, ${RuntimeGlobals.baseURI}`
281
+ `/* asset import */ ${moduleRaw}, ${RuntimeGlobals.baseURI}`
162
282
  );
163
283
  }
164
284
  }