webpack 5.90.3 → 5.92.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.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (257) hide show
  1. package/README.md +5 -5
  2. package/bin/webpack.js +6 -3
  3. package/lib/APIPlugin.js +14 -6
  4. package/lib/AutomaticPrefetchPlugin.js +1 -1
  5. package/lib/BannerPlugin.js +3 -1
  6. package/lib/Cache.js +8 -2
  7. package/lib/CacheFacade.js +3 -3
  8. package/lib/Chunk.js +7 -4
  9. package/lib/ChunkGraph.js +52 -25
  10. package/lib/ChunkGroup.js +23 -17
  11. package/lib/CleanPlugin.js +8 -6
  12. package/lib/Compilation.js +295 -120
  13. package/lib/Compiler.js +223 -87
  14. package/lib/ConcatenationScope.js +3 -3
  15. package/lib/ConditionalInitFragment.js +4 -5
  16. package/lib/ContextModule.js +95 -41
  17. package/lib/ContextModuleFactory.js +4 -2
  18. package/lib/ContextReplacementPlugin.js +3 -2
  19. package/lib/DefinePlugin.js +18 -6
  20. package/lib/Dependency.js +12 -10
  21. package/lib/DependencyTemplate.js +17 -7
  22. package/lib/DllModule.js +1 -0
  23. package/lib/DllReferencePlugin.js +7 -3
  24. package/lib/EntryOptionPlugin.js +4 -1
  25. package/lib/EntryPlugin.js +6 -1
  26. package/lib/Entrypoint.js +1 -1
  27. package/lib/EvalDevToolModulePlugin.js +11 -0
  28. package/lib/ExportsInfo.js +23 -8
  29. package/lib/ExternalModule.js +160 -35
  30. package/lib/ExternalModuleFactoryPlugin.js +37 -2
  31. package/lib/FileSystemInfo.js +69 -42
  32. package/lib/FlagDependencyExportsPlugin.js +21 -7
  33. package/lib/Generator.js +4 -4
  34. package/lib/HookWebpackError.js +2 -2
  35. package/lib/HotModuleReplacementPlugin.js +108 -45
  36. package/lib/IgnorePlugin.js +4 -1
  37. package/lib/InitFragment.js +5 -3
  38. package/lib/LibManifestPlugin.js +17 -9
  39. package/lib/Module.js +41 -14
  40. package/lib/ModuleFactory.js +3 -3
  41. package/lib/ModuleFilenameHelpers.js +30 -17
  42. package/lib/ModuleGraph.js +60 -31
  43. package/lib/ModuleGraphConnection.js +2 -1
  44. package/lib/MultiCompiler.js +62 -9
  45. package/lib/NodeStuffPlugin.js +14 -3
  46. package/lib/NormalModule.js +13 -13
  47. package/lib/NormalModuleFactory.js +18 -9
  48. package/lib/NormalModuleReplacementPlugin.js +5 -1
  49. package/lib/Parser.js +1 -1
  50. package/lib/PlatformPlugin.js +39 -0
  51. package/lib/ProgressPlugin.js +1 -1
  52. package/lib/ProvidePlugin.js +3 -1
  53. package/lib/RawModule.js +2 -1
  54. package/lib/RecordIdsPlugin.js +4 -4
  55. package/lib/ResolverFactory.js +6 -4
  56. package/lib/RuntimeModule.js +4 -4
  57. package/lib/RuntimePlugin.js +1 -0
  58. package/lib/RuntimeTemplate.js +124 -52
  59. package/lib/SourceMapDevToolPlugin.js +4 -1
  60. package/lib/Stats.js +11 -4
  61. package/lib/Template.js +5 -5
  62. package/lib/TemplatedPathPlugin.js +48 -7
  63. package/lib/Watching.js +67 -60
  64. package/lib/WebpackError.js +6 -6
  65. package/lib/WebpackOptionsApply.js +18 -5
  66. package/lib/asset/AssetGenerator.js +15 -0
  67. package/lib/asset/RawDataUrlModule.js +3 -1
  68. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  69. package/lib/buildChunkGraph.js +120 -67
  70. package/lib/cache/IdleFileCachePlugin.js +8 -3
  71. package/lib/cache/MemoryCachePlugin.js +1 -1
  72. package/lib/cache/MemoryWithGcCachePlugin.js +6 -2
  73. package/lib/cache/PackFileCacheStrategy.js +51 -18
  74. package/lib/cache/ResolverCachePlugin.js +22 -14
  75. package/lib/cache/getLazyHashedEtag.js +2 -2
  76. package/lib/cli.js +5 -5
  77. package/lib/config/browserslistTargetHandler.js +7 -1
  78. package/lib/config/defaults.js +108 -34
  79. package/lib/config/normalization.js +3 -1
  80. package/lib/config/target.js +18 -11
  81. package/lib/container/ContainerEntryDependency.js +2 -1
  82. package/lib/container/ContainerEntryModule.js +4 -2
  83. package/lib/container/ContainerPlugin.js +14 -10
  84. package/lib/container/FallbackModule.js +1 -1
  85. package/lib/container/RemoteRuntimeModule.js +12 -3
  86. package/lib/css/CssExportsGenerator.js +68 -25
  87. package/lib/css/CssGenerator.js +34 -6
  88. package/lib/css/CssLoadingRuntimeModule.js +217 -98
  89. package/lib/css/CssModulesPlugin.js +238 -107
  90. package/lib/css/CssParser.js +24 -15
  91. package/lib/css/walkCssTokens.js +1 -1
  92. package/lib/debug/ProfilingPlugin.js +28 -3
  93. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +9 -5
  94. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +4 -1
  95. package/lib/dependencies/CommonJsDependencyHelpers.js +2 -1
  96. package/lib/dependencies/CommonJsExportRequireDependency.js +33 -18
  97. package/lib/dependencies/CommonJsExportsDependency.js +13 -5
  98. package/lib/dependencies/CommonJsExportsParserPlugin.js +20 -15
  99. package/lib/dependencies/CommonJsImportsParserPlugin.js +1 -2
  100. package/lib/dependencies/ContextDependencyHelpers.js +49 -29
  101. package/lib/dependencies/ContextElementDependency.js +8 -1
  102. package/lib/dependencies/CssExportDependency.js +2 -2
  103. package/lib/dependencies/CssLocalIdentifierDependency.js +71 -9
  104. package/lib/dependencies/CssUrlDependency.js +10 -7
  105. package/lib/dependencies/ExportsInfoDependency.js +5 -4
  106. package/lib/dependencies/ExternalModuleDependency.js +4 -2
  107. package/lib/dependencies/ExternalModuleInitFragment.js +5 -3
  108. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -4
  109. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +43 -23
  110. package/lib/dependencies/HarmonyExportHeaderDependency.js +1 -1
  111. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +73 -32
  112. package/lib/dependencies/HarmonyExportInitFragment.js +10 -2
  113. package/lib/dependencies/HarmonyImportDependency.js +28 -12
  114. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +70 -19
  115. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -6
  116. package/lib/dependencies/HarmonyImportSpecifierDependency.js +47 -35
  117. package/lib/dependencies/ImportDependency.js +9 -2
  118. package/lib/dependencies/ImportEagerDependency.js +4 -2
  119. package/lib/dependencies/ImportMetaContextDependency.js +7 -0
  120. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +25 -14
  121. package/lib/dependencies/ImportMetaPlugin.js +1 -1
  122. package/lib/dependencies/ImportParserPlugin.js +15 -5
  123. package/lib/dependencies/ImportWeakDependency.js +4 -2
  124. package/lib/dependencies/LoaderDependency.js +2 -1
  125. package/lib/dependencies/LoaderImportDependency.js +2 -1
  126. package/lib/dependencies/LoaderPlugin.js +2 -2
  127. package/lib/dependencies/ModuleDependency.js +4 -5
  128. package/lib/dependencies/PureExpressionDependency.js +64 -47
  129. package/lib/dependencies/RequireContextPlugin.js +1 -1
  130. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +26 -14
  131. package/lib/dependencies/RequireEnsureDependency.js +1 -1
  132. package/lib/dependencies/URLDependency.js +7 -4
  133. package/lib/dependencies/WorkerDependency.js +1 -1
  134. package/lib/dependencies/WorkerPlugin.js +2 -1
  135. package/lib/dependencies/getFunctionExpression.js +3 -1
  136. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +92 -3
  137. package/lib/hmr/LazyCompilationPlugin.js +2 -2
  138. package/lib/ids/ChunkModuleIdRangePlugin.js +1 -1
  139. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  140. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  141. package/lib/ids/IdHelpers.js +6 -6
  142. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  143. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  144. package/lib/ids/SyncModuleIdsPlugin.js +2 -2
  145. package/lib/index.js +11 -0
  146. package/lib/javascript/BasicEvaluatedExpression.js +2 -2
  147. package/lib/javascript/ChunkHelpers.js +2 -2
  148. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  149. package/lib/javascript/JavascriptGenerator.js +0 -1
  150. package/lib/javascript/JavascriptModulesPlugin.js +174 -17
  151. package/lib/javascript/JavascriptParser.js +204 -71
  152. package/lib/javascript/JavascriptParserHelpers.js +1 -1
  153. package/lib/javascript/StartupHelpers.js +22 -5
  154. package/lib/library/AbstractLibraryPlugin.js +2 -2
  155. package/lib/library/AmdLibraryPlugin.js +2 -2
  156. package/lib/library/AssignLibraryPlugin.js +3 -3
  157. package/lib/library/ExportPropertyLibraryPlugin.js +2 -2
  158. package/lib/library/JsonpLibraryPlugin.js +2 -2
  159. package/lib/library/ModuleLibraryPlugin.js +2 -2
  160. package/lib/library/SystemLibraryPlugin.js +2 -2
  161. package/lib/library/UmdLibraryPlugin.js +33 -12
  162. package/lib/logging/Logger.js +27 -2
  163. package/lib/logging/createConsoleLogger.js +13 -9
  164. package/lib/node/CommonJsChunkLoadingPlugin.js +2 -1
  165. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  166. package/lib/node/NodeTemplatePlugin.js +1 -1
  167. package/lib/node/NodeWatchFileSystem.js +37 -26
  168. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -1
  169. package/lib/node/ReadFileCompileWasmPlugin.js +1 -1
  170. package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -1
  171. package/lib/node/nodeConsole.js +24 -1
  172. package/lib/optimize/AggressiveMergingPlugin.js +1 -1
  173. package/lib/optimize/AggressiveSplittingPlugin.js +1 -0
  174. package/lib/optimize/ConcatenatedModule.js +140 -121
  175. package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
  176. package/lib/optimize/InnerGraph.js +8 -3
  177. package/lib/optimize/InnerGraphPlugin.js +36 -13
  178. package/lib/optimize/LimitChunkCountPlugin.js +1 -2
  179. package/lib/optimize/ModuleConcatenationPlugin.js +13 -3
  180. package/lib/optimize/RealContentHashPlugin.js +3 -3
  181. package/lib/optimize/RemoveParentModulesPlugin.js +1 -0
  182. package/lib/optimize/RuntimeChunkPlugin.js +6 -1
  183. package/lib/optimize/SideEffectsFlagPlugin.js +48 -17
  184. package/lib/optimize/SplitChunksPlugin.js +10 -10
  185. package/lib/performance/SizeLimitsPlugin.js +13 -2
  186. package/lib/rules/ObjectMatcherRulePlugin.js +15 -1
  187. package/lib/rules/RuleSetCompiler.js +9 -7
  188. package/lib/runtime/EnsureChunkRuntimeModule.js +2 -1
  189. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  190. package/lib/runtime/LoadScriptRuntimeModule.js +1 -1
  191. package/lib/runtime/StartupChunkDependenciesPlugin.js +1 -1
  192. package/lib/schemes/HttpUriPlugin.js +1 -1
  193. package/lib/serialization/BinaryMiddleware.js +4 -4
  194. package/lib/serialization/FileMiddleware.js +4 -3
  195. package/lib/serialization/NullPrototypeObjectSerializer.js +2 -2
  196. package/lib/serialization/ObjectMiddleware.js +8 -5
  197. package/lib/serialization/PlainObjectSerializer.js +2 -2
  198. package/lib/serialization/Serializer.js +19 -0
  199. package/lib/serialization/SerializerMiddleware.js +2 -2
  200. package/lib/serialization/SingleItemMiddleware.js +2 -2
  201. package/lib/serialization/types.js +1 -1
  202. package/lib/sharing/ConsumeSharedModule.js +2 -2
  203. package/lib/sharing/ConsumeSharedPlugin.js +17 -3
  204. package/lib/sharing/ConsumeSharedRuntimeModule.js +9 -2
  205. package/lib/sharing/ProvideSharedPlugin.js +13 -6
  206. package/lib/sharing/resolveMatchedConfigs.js +3 -3
  207. package/lib/sharing/utils.js +13 -6
  208. package/lib/stats/DefaultStatsFactoryPlugin.js +20 -20
  209. package/lib/stats/DefaultStatsPrinterPlugin.js +1 -1
  210. package/lib/stats/StatsFactory.js +2 -2
  211. package/lib/stats/StatsPrinter.js +6 -6
  212. package/lib/util/ArrayQueue.js +14 -21
  213. package/lib/util/AsyncQueue.js +1 -1
  214. package/lib/util/Queue.js +8 -2
  215. package/lib/util/SortableSet.js +16 -4
  216. package/lib/util/StackedCacheMap.js +26 -0
  217. package/lib/util/TupleQueue.js +8 -2
  218. package/lib/util/WeakTupleMap.js +57 -13
  219. package/lib/util/binarySearchBounds.js +1 -1
  220. package/lib/util/cleverMerge.js +26 -13
  221. package/lib/util/comparators.js +37 -15
  222. package/lib/util/conventions.js +129 -0
  223. package/lib/util/createHash.js +3 -5
  224. package/lib/util/deprecation.js +3 -3
  225. package/lib/util/deterministicGrouping.js +2 -2
  226. package/lib/util/findGraphRoots.js +1 -1
  227. package/lib/util/fs.js +383 -69
  228. package/lib/util/hash/BatchedHash.js +3 -0
  229. package/lib/util/hash/xxhash64.js +2 -2
  230. package/lib/util/identifier.js +5 -5
  231. package/lib/util/mergeScope.js +79 -0
  232. package/lib/util/runtime.js +2 -17
  233. package/lib/util/semver.js +3 -0
  234. package/lib/util/smartGrouping.js +3 -3
  235. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +4 -2
  236. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +1 -1
  237. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +4 -2
  238. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
  239. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +16 -7
  240. package/lib/wasm-sync/WebAssemblyGenerator.js +40 -19
  241. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +1 -1
  242. package/lib/wasm-sync/WebAssemblyParser.js +7 -4
  243. package/lib/wasm-sync/WebAssemblyUtils.js +2 -1
  244. package/lib/web/FetchCompileWasmPlugin.js +1 -1
  245. package/lib/web/JsonpChunkLoadingRuntimeModule.js +3 -2
  246. package/lib/webpack.js +19 -6
  247. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +2 -1
  248. package/package.json +40 -39
  249. package/schemas/WebpackOptions.check.js +1 -1
  250. package/schemas/WebpackOptions.json +97 -8
  251. package/schemas/plugins/BannerPlugin.check.js +1 -1
  252. package/schemas/plugins/BannerPlugin.json +5 -1
  253. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +1 -1
  254. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  255. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +1 -1
  256. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -1
  257. package/types.d.ts +1826 -639
@@ -5,18 +5,72 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const createHash = require("../util/createHash");
9
+ const { makePathsRelative } = require("../util/identifier");
8
10
  const makeSerializable = require("../util/makeSerializable");
9
11
  const NullDependency = require("./NullDependency");
10
12
 
11
13
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
14
+ /** @typedef {import("../../declarations/WebpackOptions").CssGeneratorExportsConvention} CssGeneratorExportsConvention */
15
+ /** @typedef {import("../../declarations/WebpackOptions").CssGeneratorLocalIdentName} CssGeneratorLocalIdentName */
16
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
17
+ /** @typedef {import("../CssModule")} CssModule */
12
18
  /** @typedef {import("../Dependency")} Dependency */
13
19
  /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
14
20
  /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
15
21
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
22
+ /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
23
+ /** @typedef {import("../css/CssExportsGenerator")} CssExportsGenerator */
24
+ /** @typedef {import("../css/CssGenerator")} CssGenerator */
16
25
  /** @typedef {import("../css/CssParser").Range} Range */
17
26
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
18
27
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
19
28
 
29
+ /**
30
+ * @param {string} local css local
31
+ * @param {CssModule} module module
32
+ * @param {ChunkGraph} chunkGraph chunk graph
33
+ * @param {RuntimeTemplate} runtimeTemplate runtime template
34
+ * @returns {string} local ident
35
+ */
36
+ const getLocalIdent = (local, module, chunkGraph, runtimeTemplate) => {
37
+ const localIdentName =
38
+ /** @type {CssGenerator | CssExportsGenerator} */
39
+ (module.generator).localIdentName;
40
+ const relativeResourcePath = makePathsRelative(
41
+ /** @type {string} */ (module.context),
42
+ module.resourceResolveData.path
43
+ );
44
+ const { hashFunction, hashDigest, hashDigestLength, hashSalt, uniqueName } =
45
+ runtimeTemplate.outputOptions;
46
+ const hash = createHash(hashFunction);
47
+ if (hashSalt) {
48
+ hash.update(hashSalt);
49
+ }
50
+ hash.update(relativeResourcePath);
51
+ if (!/\[local\]/.test(localIdentName)) {
52
+ hash.update(local);
53
+ }
54
+ const localIdentHash = /** @type {string} */ (hash.digest(hashDigest))
55
+ // Remove all leading digits
56
+ .replace(/^\d+/, "")
57
+ // Replace all slashes with underscores (same as in base64url)
58
+ .replace(/\//g, "_")
59
+ // Remove everything that is not an alphanumeric or underscore
60
+ .replace(/[^A-Za-z0-9_]+/g, "_")
61
+ .slice(0, hashDigestLength);
62
+ return runtimeTemplate.compilation
63
+ .getPath(localIdentName, {
64
+ filename: relativeResourcePath,
65
+ hash: localIdentHash,
66
+ contentHash: localIdentHash,
67
+ chunkGraph,
68
+ module
69
+ })
70
+ .replace(/\[local\]/g, local)
71
+ .replace(/\[uniqueName\]/g, uniqueName);
72
+ };
73
+
20
74
  class CssLocalIdentifierDependency extends NullDependency {
21
75
  /**
22
76
  * @param {string} name name
@@ -103,7 +157,14 @@ CssLocalIdentifierDependency.Template = class CssLocalIdentifierDependencyTempla
103
157
  apply(
104
158
  dependency,
105
159
  source,
106
- { module, moduleGraph, chunkGraph, runtime, runtimeTemplate, cssExports }
160
+ {
161
+ module,
162
+ moduleGraph,
163
+ chunkGraph,
164
+ runtime,
165
+ runtimeTemplate,
166
+ cssExportsData
167
+ }
107
168
  ) {
108
169
  const dep = /** @type {CssLocalIdentifierDependency} */ (dependency);
109
170
  const used = moduleGraph
@@ -112,19 +173,20 @@ CssLocalIdentifierDependency.Template = class CssLocalIdentifierDependencyTempla
112
173
 
113
174
  if (!used) return;
114
175
 
115
- const moduleId = chunkGraph.getModuleId(module);
116
- const identifier =
176
+ const localIdent =
117
177
  dep.prefix +
118
- (runtimeTemplate.outputOptions.uniqueName
119
- ? runtimeTemplate.outputOptions.uniqueName + "-"
120
- : "") +
121
- (used ? moduleId + "-" + used : "-");
178
+ getLocalIdent(
179
+ used,
180
+ /** @type {CssModule} */ (module),
181
+ chunkGraph,
182
+ runtimeTemplate
183
+ );
122
184
  source.replace(
123
185
  dep.range[0],
124
186
  dep.range[1] - 1,
125
- escapeCssIdentifier(identifier, dep.prefix)
187
+ escapeCssIdentifier(localIdent, dep.prefix)
126
188
  );
127
- if (used) cssExports.set(used, identifier);
189
+ if (used) cssExportsData.exports.set(used, localIdent);
128
190
  }
129
191
  };
130
192
 
@@ -5,6 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const RawDataUrlModule = require("../asset/RawDataUrlModule");
8
9
  const makeSerializable = require("../util/makeSerializable");
9
10
  const memoize = require("../util/memoize");
10
11
  const ModuleDependency = require("./ModuleDependency");
@@ -24,7 +25,9 @@ const ModuleDependency = require("./ModuleDependency");
24
25
  /** @typedef {import("../util/Hash")} Hash */
25
26
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
26
27
 
27
- const getRawDataUrlModule = memoize(() => require("../asset/RawDataUrlModule"));
28
+ const getIgnoredRawDataUrlModule = memoize(() => {
29
+ return new RawDataUrlModule("data:,", `ignored-asset`, `(ignored asset)`);
30
+ });
28
31
 
29
32
  class CssUrlDependency extends ModuleDependency {
30
33
  /**
@@ -51,8 +54,7 @@ class CssUrlDependency extends ModuleDependency {
51
54
  * @returns {Module | null} a module
52
55
  */
53
56
  createIgnoredModule(context) {
54
- const RawDataUrlModule = getRawDataUrlModule();
55
- return new RawDataUrlModule("data:,", `ignored-asset`, `(ignored asset)`);
57
+ return getIgnoredRawDataUrlModule();
56
58
  }
57
59
 
58
60
  /**
@@ -124,6 +126,7 @@ CssUrlDependency.Template = class CssUrlDependencyTemplate extends (
124
126
  { moduleGraph, runtimeTemplate, codeGenerationResults }
125
127
  ) {
126
128
  const dep = /** @type {CssUrlDependency} */ (dependency);
129
+ const module = /** @type {Module} */ (moduleGraph.getModule(dep));
127
130
 
128
131
  /** @type {string | undefined} */
129
132
  let newValue;
@@ -132,8 +135,7 @@ CssUrlDependency.Template = class CssUrlDependencyTemplate extends (
132
135
  case "string":
133
136
  newValue = cssEscapeString(
134
137
  runtimeTemplate.assetUrl({
135
- publicPath: "",
136
- module: /** @type {Module} */ (moduleGraph.getModule(dep)),
138
+ module,
137
139
  codeGenerationResults
138
140
  })
139
141
  );
@@ -141,8 +143,7 @@ CssUrlDependency.Template = class CssUrlDependencyTemplate extends (
141
143
  case "url":
142
144
  newValue = `url(${cssEscapeString(
143
145
  runtimeTemplate.assetUrl({
144
- publicPath: "",
145
- module: /** @type {Module} */ (moduleGraph.getModule(dep)),
146
+ module,
146
147
  codeGenerationResults
147
148
  })
148
149
  )})`;
@@ -159,4 +160,6 @@ CssUrlDependency.Template = class CssUrlDependencyTemplate extends (
159
160
 
160
161
  makeSerializable(CssUrlDependency, "webpack/lib/dependencies/CssUrlDependency");
161
162
 
163
+ CssUrlDependency.PUBLIC_PATH_AUTO = "__WEBPACK_CSS_PUBLIC_PATH_AUTO__";
164
+
162
165
  module.exports = CssUrlDependency;
@@ -25,13 +25,13 @@ const NullDependency = require("./NullDependency");
25
25
  /**
26
26
  * @param {ModuleGraph} moduleGraph the module graph
27
27
  * @param {Module} module the module
28
- * @param {string[] | null} exportName name of the export if any
28
+ * @param {string[] | null} _exportName name of the export if any
29
29
  * @param {string | null} property name of the requested property
30
30
  * @param {RuntimeSpec} runtime for which runtime
31
31
  * @returns {any} value of the property
32
32
  */
33
- const getProperty = (moduleGraph, module, exportName, property, runtime) => {
34
- if (!exportName) {
33
+ const getProperty = (moduleGraph, module, _exportName, property, runtime) => {
34
+ if (!_exportName) {
35
35
  switch (property) {
36
36
  case "usedExports": {
37
37
  const usedExports = moduleGraph
@@ -48,10 +48,11 @@ const getProperty = (moduleGraph, module, exportName, property, runtime) => {
48
48
  }
49
49
  }
50
50
  }
51
+ const exportName = /** @type {string[]} */ (_exportName);
51
52
  switch (property) {
52
53
  case "canMangle": {
53
54
  const exportsInfo = moduleGraph.getExportsInfo(module);
54
- const exportInfo = exportsInfo.getExportInfo(exportName[0]);
55
+ const exportInfo = exportsInfo.getReadOnlyExportInfoRecursive(exportName);
55
56
  if (exportInfo) return exportInfo.canMangle;
56
57
  return exportsInfo.otherExportsInfo.canMangle;
57
58
  }
@@ -92,11 +92,13 @@ ExternalModuleDependency.Template = class ExternalModuleDependencyTemplate exten
92
92
  apply(dependency, source, templateContext) {
93
93
  super.apply(dependency, source, templateContext);
94
94
  const dep = /** @type {ExternalModuleDependency} */ (dependency);
95
- const { chunkInitFragments } = templateContext;
95
+ const { chunkInitFragments, runtimeTemplate } = templateContext;
96
96
 
97
97
  chunkInitFragments.push(
98
98
  new ExternalModuleInitFragment(
99
- dep.importedModule,
99
+ `${runtimeTemplate.supportNodePrefixForCoreModules() ? "node:" : ""}${
100
+ dep.importedModule
101
+ }`,
100
102
  dep.specifiers,
101
103
  dep.default
102
104
  )
@@ -20,7 +20,7 @@ const makeSerializable = require("../util/makeSerializable");
20
20
  class ExternalModuleInitFragment extends InitFragment {
21
21
  /**
22
22
  * @param {string} importedModule imported module
23
- * @param {Array<{ name: string, value?: string }>|ImportSpecifiers} specifiers import specifiers
23
+ * @param {Array<{ name: string, value?: string }> | ImportSpecifiers} specifiers import specifiers
24
24
  * @param {string=} defaultImport default import
25
25
  */
26
26
  constructor(importedModule, specifiers, defaultImport) {
@@ -56,7 +56,9 @@ class ExternalModuleInitFragment extends InitFragment {
56
56
  const newSpecifiersMap = new Map(this.specifiers);
57
57
  for (const [name, specifiers] of other.specifiers) {
58
58
  if (newSpecifiersMap.has(name)) {
59
- const currentSpecifiers = newSpecifiersMap.get(name);
59
+ const currentSpecifiers =
60
+ /** @type {Set<string>} */
61
+ (newSpecifiersMap.get(name));
60
62
  for (const spec of specifiers) currentSpecifiers.add(spec);
61
63
  } else {
62
64
  newSpecifiersMap.set(name, specifiers);
@@ -71,7 +73,7 @@ class ExternalModuleInitFragment extends InitFragment {
71
73
 
72
74
  /**
73
75
  * @param {GenerateContext} context context
74
- * @returns {string | Source} the source code that will be included as initialization code
76
+ * @returns {string | Source | undefined} the source code that will be included as initialization code
75
77
  */
76
78
  getContent({ runtimeRequirements }) {
77
79
  const namedImports = [];
@@ -14,7 +14,7 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
14
14
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
15
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
16
16
  /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
17
- /** @typedef {import("../javascript/JavascriptParser").Assertions} Assertions */
17
+ /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
18
18
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
19
19
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
20
20
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
@@ -33,11 +33,11 @@ class HarmonyEvaluatedImportSpecifierDependency extends HarmonyImportSpecifierDe
33
33
  * @param {TODO} ids ids
34
34
  * @param {TODO} name name
35
35
  * @param {Range} range location in source code
36
- * @param {Assertions} assertions assertions
36
+ * @param {ImportAttributes} attributes import assertions
37
37
  * @param {string} operator operator
38
38
  */
39
- constructor(request, sourceOrder, ids, name, range, assertions, operator) {
40
- super(request, sourceOrder, ids, name, range, false, assertions, []);
39
+ constructor(request, sourceOrder, ids, name, range, attributes, operator) {
40
+ super(request, sourceOrder, ids, name, range, false, attributes, []);
41
41
  this.operator = operator;
42
42
  }
43
43
 
@@ -14,11 +14,14 @@ const HarmonyExportSpecifierDependency = require("./HarmonyExportSpecifierDepend
14
14
  const { ExportPresenceModes } = require("./HarmonyImportDependency");
15
15
  const {
16
16
  harmonySpecifierTag,
17
- getAssertions
17
+ getAttributes
18
18
  } = require("./HarmonyImportDependencyParserPlugin");
19
19
  const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
20
20
 
21
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
21
22
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
23
+ /** @typedef {import("../javascript/JavascriptParser").FunctionDeclaration} FunctionDeclaration */
24
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
22
25
 
23
26
  const { HarmonyStarExportsList } = HarmonyExportImportedSpecifierDependency;
24
27
 
@@ -37,16 +40,24 @@ module.exports = class HarmonyExportDependencyParserPlugin {
37
40
  : ExportPresenceModes.AUTO;
38
41
  }
39
42
 
43
+ /**
44
+ * @param {JavascriptParser} parser the parser
45
+ * @returns {void}
46
+ */
40
47
  apply(parser) {
41
48
  const { exportPresenceMode } = this;
42
49
  parser.hooks.export.tap(
43
50
  "HarmonyExportDependencyParserPlugin",
44
51
  statement => {
45
52
  const dep = new HarmonyExportHeaderDependency(
46
- statement.declaration && statement.declaration.range,
47
- statement.range
53
+ /** @type {Range | false} */ (
54
+ statement.declaration && statement.declaration.range
55
+ ),
56
+ /** @type {Range} */ (statement.range)
57
+ );
58
+ dep.loc = Object.create(
59
+ /** @type {DependencyLocation} */ (statement.loc)
48
60
  );
49
- dep.loc = Object.create(statement.loc);
50
61
  dep.loc.index = -1;
51
62
  parser.state.module.addPresentationalDependency(dep);
52
63
  return true;
@@ -57,16 +68,21 @@ module.exports = class HarmonyExportDependencyParserPlugin {
57
68
  (statement, source) => {
58
69
  parser.state.lastHarmonyImportOrder =
59
70
  (parser.state.lastHarmonyImportOrder || 0) + 1;
60
- const clearDep = new ConstDependency("", statement.range);
61
- clearDep.loc = Object.create(statement.loc);
71
+ const clearDep = new ConstDependency(
72
+ "",
73
+ /** @type {Range} */ (statement.range)
74
+ );
75
+ clearDep.loc = /** @type {DependencyLocation} */ (statement.loc);
62
76
  clearDep.loc.index = -1;
63
77
  parser.state.module.addPresentationalDependency(clearDep);
64
78
  const sideEffectDep = new HarmonyImportSideEffectDependency(
65
- source,
79
+ /** @type {string} */ (source),
66
80
  parser.state.lastHarmonyImportOrder,
67
- getAssertions(statement)
81
+ getAttributes(statement)
82
+ );
83
+ sideEffectDep.loc = Object.create(
84
+ /** @type {DependencyLocation} */ (statement.loc)
68
85
  );
69
- sideEffectDep.loc = Object.create(statement.loc);
70
86
  sideEffectDep.loc.index = -1;
71
87
  parser.state.current.addDependency(sideEffectDep);
72
88
  return true;
@@ -76,13 +92,12 @@ module.exports = class HarmonyExportDependencyParserPlugin {
76
92
  "HarmonyExportDependencyParserPlugin",
77
93
  (statement, expr) => {
78
94
  const isFunctionDeclaration = expr.type === "FunctionDeclaration";
79
- const comments = parser.getComments([
80
- statement.range[0],
81
- expr.range[0]
82
- ]);
95
+ const exprRange = /** @type {Range} */ (expr.range);
96
+ const statementRange = /** @type {Range} */ (statement.range);
97
+ const comments = parser.getComments([statementRange[0], exprRange[0]]);
83
98
  const dep = new HarmonyExportExpressionDependency(
84
- expr.range,
85
- statement.range,
99
+ exprRange,
100
+ statementRange,
86
101
  comments
87
102
  .map(c => {
88
103
  switch (c.type) {
@@ -98,12 +113,11 @@ module.exports = class HarmonyExportDependencyParserPlugin {
98
113
  ? expr.id.name
99
114
  : isFunctionDeclaration
100
115
  ? {
101
- id: expr.id ? expr.id.name : undefined,
102
116
  range: [
103
- expr.range[0],
117
+ exprRange[0],
104
118
  expr.params.length > 0
105
- ? expr.params[0].range[0]
106
- : expr.body.range[0]
119
+ ? /** @type {Range} */ (expr.params[0].range)[0]
120
+ : /** @type {Range} */ (expr.body.range)[0]
107
121
  ],
108
122
  prefix: `${expr.async ? "async " : ""}function${
109
123
  expr.generator ? "*" : ""
@@ -112,7 +126,9 @@ module.exports = class HarmonyExportDependencyParserPlugin {
112
126
  }
113
127
  : undefined
114
128
  );
115
- dep.loc = Object.create(statement.loc);
129
+ dep.loc = Object.create(
130
+ /** @type {DependencyLocation} */ (statement.loc)
131
+ );
116
132
  dep.loc.index = -1;
117
133
  parser.state.current.addDependency(dep);
118
134
  InnerGraph.addVariableUsage(
@@ -149,7 +165,9 @@ module.exports = class HarmonyExportDependencyParserPlugin {
149
165
  } else {
150
166
  dep = new HarmonyExportSpecifierDependency(id, name);
151
167
  }
152
- dep.loc = Object.create(statement.loc);
168
+ dep.loc = Object.create(
169
+ /** @type {DependencyLocation} */ (statement.loc)
170
+ );
153
171
  dep.loc.index = idx;
154
172
  parser.state.current.addDependency(dep);
155
173
  return true;
@@ -168,7 +186,7 @@ module.exports = class HarmonyExportDependencyParserPlugin {
168
186
  parser.state.harmonyStarExports || new HarmonyStarExportsList();
169
187
  }
170
188
  const dep = new HarmonyExportImportedSpecifierDependency(
171
- source,
189
+ /** @type {string} */ (source),
172
190
  parser.state.lastHarmonyImportOrder,
173
191
  id ? [id] : [],
174
192
  name,
@@ -180,7 +198,9 @@ module.exports = class HarmonyExportDependencyParserPlugin {
180
198
  if (harmonyStarExports) {
181
199
  harmonyStarExports.push(dep);
182
200
  }
183
- dep.loc = Object.create(statement.loc);
201
+ dep.loc = Object.create(
202
+ /** @type {DependencyLocation} */ (statement.loc)
203
+ );
184
204
  dep.loc.index = idx;
185
205
  parser.state.current.addDependency(dep);
186
206
  return true;
@@ -17,7 +17,7 @@ const NullDependency = require("./NullDependency");
17
17
 
18
18
  class HarmonyExportHeaderDependency extends NullDependency {
19
19
  /**
20
- * @param {Range} range range
20
+ * @param {Range | false} range range
21
21
  * @param {Range} rangeStatement range statement
22
22
  */
23
23
  constructor(range, rangeStatement) {