webpack 5.112.0 → 5.112.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.
Files changed (263) hide show
  1. package/bin/webpack.js +13 -7
  2. package/lib/Compilation.js +152 -60
  3. package/lib/Compiler.js +12 -25
  4. package/lib/asset/AssetBytesGenerator.js +14 -6
  5. package/lib/asset/AssetBytesParser.js +10 -8
  6. package/lib/asset/AssetGenerator.js +36 -48
  7. package/lib/asset/AssetModule.js +11 -0
  8. package/lib/asset/AssetModulesPlugin.js +5 -4
  9. package/lib/asset/AssetParser.js +8 -8
  10. package/lib/asset/AssetSourceGenerator.js +16 -8
  11. package/lib/asset/AssetSourceParser.js +10 -8
  12. package/lib/asset/WebManifestGenerator.js +11 -6
  13. package/lib/asset/WebManifestParser.js +3 -3
  14. package/lib/async-modules/AsyncModuleHelpers.js +8 -2
  15. package/lib/async-modules/InferAsyncModulesPlugin.js +7 -2
  16. package/lib/cache/CacheFacade.js +1 -1
  17. package/lib/cache/PackFileCacheStrategy.js +6 -10
  18. package/lib/cache/ResolverCachePlugin.js +58 -8
  19. package/lib/config/WebpackOptionsApply.js +8 -28
  20. package/lib/config/cli.js +9 -6
  21. package/lib/config/defaults.js +24 -13
  22. package/lib/config/getClaimedAssetTypes.js +2 -2
  23. package/lib/config/target.js +1 -1
  24. package/lib/context/ContextModule.js +1 -1
  25. package/lib/context/ContextModuleFactory.js +1 -1
  26. package/lib/context/ContextReplacementPlugin.js +3 -9
  27. package/lib/css/CssGenerator.js +40 -37
  28. package/lib/css/CssModule.js +10 -0
  29. package/lib/css/CssModulesPlugin.js +2 -2
  30. package/lib/css/CssParser.js +33 -32
  31. package/lib/css/conventions.js +1 -1
  32. package/lib/css/data.js +224 -219
  33. package/lib/css/syntax-parser.js +1159 -298
  34. package/lib/css/syntax-printer.js +90 -35
  35. package/lib/debug/ProfilingPlugin.js +65 -43
  36. package/lib/define/DefinePlugin.js +10 -15
  37. package/lib/define/DotenvPlugin.js +10 -6
  38. package/lib/define/EnvironmentPlugin.js +4 -2
  39. package/lib/dependencies/amd/AMDDefineDependencyParserPlugin.js +1 -2
  40. package/lib/dependencies/amd/AMDRequireDependenciesBlockParserPlugin.js +4 -1
  41. package/lib/dependencies/commonjs/CommonJsExportRequireDependency.js +1 -4
  42. package/lib/dependencies/commonjs/CommonJsExportsParserPlugin.js +18 -33
  43. package/lib/dependencies/commonjs/CommonJsImportsParserPlugin.js +1 -3
  44. package/lib/dependencies/commonjs/CommonJsObjectExportDependency.js +4 -4
  45. package/lib/dependencies/commonjs/CommonJsPlugin.js +2 -5
  46. package/lib/dependencies/commonjs/RequireEnsureDependenciesBlockParserPlugin.js +4 -1
  47. package/lib/dependencies/context/ImportMetaContextDependencyParserPlugin.js +1 -2
  48. package/lib/dependencies/context/ImportMetaGlobDependencyParserPlugin.js +4 -7
  49. package/lib/dependencies/context/ImportMetaGlobHelpers.js +8 -10
  50. package/lib/dependencies/core/CachedConstDependency.js +9 -6
  51. package/lib/dependencies/css/CssIcssExportDependency.js +6 -7
  52. package/lib/dependencies/css/CssIcssImportDependency.js +1 -3
  53. package/lib/dependencies/css/CssUrlDependency.js +2 -6
  54. package/lib/dependencies/esm/ESMDetectionParserPlugin.js +2 -4
  55. package/lib/dependencies/esm/ESMExportExpressionDependency.js +2 -2
  56. package/lib/dependencies/esm/ESMExportImportedSpecifierDependency.js +16 -18
  57. package/lib/dependencies/esm/ESMExportSpecifierDependency.js +20 -3
  58. package/lib/dependencies/esm/ESMExports.js +2 -10
  59. package/lib/dependencies/esm/ESMImportDependency.js +17 -2
  60. package/lib/dependencies/esm/ESMImportDependencyParserPlugin.js +6 -17
  61. package/lib/dependencies/esm/ESMImportGuard.js +11 -23
  62. package/lib/dependencies/esm/ESMImportSideEffectDependency.js +1 -1
  63. package/lib/dependencies/esm/ESMImportSpecifierDependency.js +4 -1
  64. package/lib/dependencies/esm/ESMLiveExportDependency.js +311 -0
  65. package/lib/dependencies/esm/ESMLiveExportParserPlugin.js +862 -0
  66. package/lib/dependencies/esm/ESMModulesPlugin.js +1 -3
  67. package/lib/dependencies/esm/TopLevelAwaitDependency.js +1 -8
  68. package/lib/dependencies/helpers/DynamicExports.js +4 -6
  69. package/lib/dependencies/html/HtmlEntryDependency.js +5 -14
  70. package/lib/dependencies/html/HtmlInlineHtmlDependency.js +1 -4
  71. package/lib/dependencies/html/HtmlInlineScriptDependency.js +2 -6
  72. package/lib/dependencies/html/HtmlInlineStyleDependency.js +1 -4
  73. package/lib/dependencies/import/ImportParserPlugin.js +3 -6
  74. package/lib/dependencies/import-meta/ImportMetaPlugin.js +4 -6
  75. package/lib/dependencies/url/URLParserPlugin.js +1 -1
  76. package/lib/dependencies/worker/WorkerAndWorkletPlugin.js +51 -20
  77. package/lib/devtool/ModuleFilenameHelpers.js +1 -1
  78. package/lib/devtool/SourceMapDevToolPlugin.js +1 -1
  79. package/lib/dll/DelegatedModule.js +3 -3
  80. package/lib/dll/DllModule.js +3 -1
  81. package/lib/dll/DllReferencePlugin.js +1 -4
  82. package/lib/errors/AbstractMethodError.js +1 -1
  83. package/lib/errors/ErrorHelpers.js +2 -1
  84. package/lib/errors/HookWebpackError.js +2 -1
  85. package/lib/errors/JSONParseError.js +4 -4
  86. package/lib/errors/WebpackError.js +3 -2
  87. package/lib/esm/ModuleChunkFormatPlugin.js +36 -1
  88. package/lib/externals/ExternalModule.js +12 -9
  89. package/lib/externals/ExternalModuleFactoryPlugin.js +1 -2
  90. package/lib/externals/ExternalsPlugin.js +1 -1
  91. package/lib/fs/FileSystemInfo.js +4 -4
  92. package/lib/graph/AsyncDependenciesBlock.js +1 -1
  93. package/lib/graph/ChunkGraph.js +5 -0
  94. package/lib/graph/Dependency.js +8 -2
  95. package/lib/graph/ExportsInfo.js +1 -1
  96. package/lib/graph/ModuleGraph.js +14 -3
  97. package/lib/graph/buildChunkGraph.js +17 -19
  98. package/lib/graph/findGraphRoots.js +1 -1
  99. package/lib/hmr/HotModuleReplacement.runtime.js +10 -9
  100. package/lib/hmr/HotModuleReplacementPlugin.js +5 -11
  101. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +16 -19
  102. package/lib/hmr/LazyCompilationPlugin.js +1 -7
  103. package/lib/html/HtmlGenerator.js +25 -17
  104. package/lib/html/HtmlModule.js +11 -1
  105. package/lib/html/HtmlModulesPlugin.js +12 -11
  106. package/lib/html/HtmlParser.js +10 -9
  107. package/lib/html/builtinEmbeddedRenderer.js +31 -33
  108. package/lib/html/data.js +42 -21
  109. package/lib/html/htmlMinify.js +4 -1
  110. package/lib/html/syntax-parser.js +34 -35
  111. package/lib/html/syntax-printer.js +2 -3
  112. package/lib/html/xmlMinify.js +4 -1
  113. package/lib/ids/HashedModuleIdsPlugin.js +1 -1
  114. package/lib/index.js +13 -12
  115. package/lib/javascript/APIPlugin.js +7 -13
  116. package/lib/javascript/BasicEvaluatedExpression.js +5 -5
  117. package/lib/javascript/CommonJsChunkFormatPlugin.js +2 -7
  118. package/lib/javascript/ConstPlugin.js +1 -1
  119. package/lib/javascript/JavascriptGenerator.js +16 -11
  120. package/lib/javascript/JavascriptMetaInfoPlugin.js +3 -15
  121. package/lib/javascript/JavascriptModule.js +10 -0
  122. package/lib/javascript/JavascriptModulesPlugin.js +2 -4
  123. package/lib/javascript/JavascriptParser.js +99 -11
  124. package/lib/javascript/ScopeAnalyzer.js +183 -107
  125. package/lib/javascript/UseStrictPlugin.js +2 -5
  126. package/lib/javascript/jsMinify.js +1 -1
  127. package/lib/javascript/regexp.js +2 -2
  128. package/lib/javascript/syntax-parser.js +2114 -1506
  129. package/lib/javascript/syntax-printer-data.js +167 -1
  130. package/lib/javascript/syntax-printer.js +9554 -2782
  131. package/lib/json/JsonGenerator.js +15 -7
  132. package/lib/json/JsonModule.js +11 -0
  133. package/lib/json/JsonParser.js +7 -6
  134. package/lib/library/AssignLibraryPlugin.js +1 -1
  135. package/lib/library/JsonpLibraryPlugin.js +1 -1
  136. package/lib/library/ModuleLibraryPlugin.js +399 -23
  137. package/lib/loaders/LoaderRunner.js +76 -38
  138. package/lib/loaders/loadLoader.js +16 -10
  139. package/lib/module/Generator.js +17 -9
  140. package/lib/module/Module.js +2 -2
  141. package/lib/module/NormalModule.js +7 -5
  142. package/lib/module/NormalModuleFactory.js +11 -17
  143. package/lib/module/Parser.js +9 -2
  144. package/lib/module/extractSourceMap.js +69 -18
  145. package/lib/module/findCaseMismatch.js +2 -2
  146. package/lib/node/ExternalModuleInitFragment.js +2 -2
  147. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +4 -12
  148. package/lib/node/ReadFileCompileWasmPlugin.js +2 -6
  149. package/lib/node/nodeConsole.js +4 -3
  150. package/lib/optimize/CircularModulesPlugin.js +1 -1
  151. package/lib/optimize/ConcatenatedModule.js +2 -6
  152. package/lib/optimize/FlagDependencyExportsPlugin.js +6 -11
  153. package/lib/optimize/FlagDependencyUsagePlugin.js +28 -3
  154. package/lib/optimize/InlineExports.js +4 -7
  155. package/lib/optimize/LazyBarrels.js +41 -5
  156. package/lib/optimize/ModuleConcatenationPlugin.js +8 -10
  157. package/lib/optimize/RealContentHashPlugin.js +2 -6
  158. package/lib/optimize/SideEffectsFlagPlugin.js +7 -21
  159. package/lib/optimize/SplitChunksPlugin.js +11 -24
  160. package/lib/optimize/TupleQueue.js +1 -1
  161. package/lib/output/CleanPlugin.js +3 -1
  162. package/lib/output/CopyPlugin.js +3 -4
  163. package/lib/performance/EvalUsagePlugin.js +1 -3
  164. package/lib/performance/HotspotsPlugin.js +33 -9
  165. package/lib/performance/PureAnnotationsPlugin.js +16 -10
  166. package/lib/performance/TopLevelThisPlugin.js +17 -9
  167. package/lib/prefetch/ResourceHintPlugin.js +1 -1
  168. package/lib/provide/ProvidedDependency.js +36 -4
  169. package/lib/rules/BasicEffectRulePlugin.js +1 -1
  170. package/lib/rules/RuleSetCompiler.js +15 -5
  171. package/lib/rules/UseEffectRulePlugin.js +1 -3
  172. package/lib/runtime/AsyncModuleRuntimeModule.js +7 -1
  173. package/lib/runtime/GetChunkFilenameRuntimeModule.js +1 -5
  174. package/lib/runtime/RuntimeGlobals.js +6 -0
  175. package/lib/runtime/RuntimePlugin.js +2 -0
  176. package/lib/schemes/HttpUriPlugin.js +1 -2
  177. package/lib/schemes/VirtualUrlPlugin.js +3 -1
  178. package/lib/serialization/AggregateErrorSerializer.js +3 -3
  179. package/lib/serialization/BinaryMiddleware.js +4 -1
  180. package/lib/serialization/ErrorObjectSerializer.js +2 -5
  181. package/lib/serialization/ObjectMiddleware.js +17 -15
  182. package/lib/serialization/PlainObjectSerializer.js +3 -7
  183. package/lib/serialization/Serializer.js +21 -11
  184. package/lib/serialization/SerializerMiddleware.js +8 -6
  185. package/lib/stats/DefaultStatsFactoryPlugin.js +35 -35
  186. package/lib/stats/DefaultStatsPresetPlugin.js +2 -6
  187. package/lib/stats/DefaultStatsPrinterPlugin.js +12 -11
  188. package/lib/stats/StatsFactory.js +194 -24
  189. package/lib/stats/StatsPrinter.js +126 -13
  190. package/lib/template/DependencyTemplate.js +1 -1
  191. package/lib/template/RuntimeTemplate.js +13 -32
  192. package/lib/template/Template.js +1 -1
  193. package/lib/util/SourceProcessor.js +98 -15
  194. package/lib/util/WeakTupleMap.js +10 -4
  195. package/lib/util/cleverMerge.js +61 -33
  196. package/lib/util/comparators.js +9 -5
  197. package/lib/util/dataURL.js +2 -0
  198. package/lib/util/deprecation.js +4 -3
  199. package/lib/util/globUtils.js +1 -4
  200. package/lib/util/internalSerializables.js +2 -0
  201. package/lib/util/makeSerializable.js +6 -4
  202. package/lib/util/memoize.js +1 -1
  203. package/lib/util/parseJson.js +2 -2
  204. package/lib/util/serialization.js +31 -27
  205. package/lib/wasm/AsyncWasmModule.js +12 -2
  206. package/lib/wasm/AsyncWebAssemblyGenerator.js +12 -4
  207. package/lib/wasm/AsyncWebAssemblyJavascriptGenerator.js +13 -5
  208. package/lib/wasm/AsyncWebAssemblyParser.js +7 -5
  209. package/lib/wasm/UniversalCompileAsyncWasmPlugin.js +2 -6
  210. package/lib/wasm-sync/SyncWasmModule.js +16 -1
  211. package/lib/wasm-sync/WebAssemblyGenerator.js +15 -10
  212. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +13 -5
  213. package/lib/wasm-sync/WebAssemblyParser.js +10 -12
  214. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -12
  215. package/lib/web/FetchCompileWasmPlugin.js +2 -6
  216. package/package.json +16 -18
  217. package/schemas/WebpackOptions.check.js +3 -3
  218. package/schemas/WebpackOptions.json +2 -2
  219. package/schemas/plugins/BannerPlugin.check.js +3 -3
  220. package/schemas/plugins/HtmlGeneratorOptions.check.js +3 -3
  221. package/schemas/plugins/HtmlParserOptions.check.js +3 -3
  222. package/schemas/plugins/IgnorePlugin.check.js +3 -3
  223. package/schemas/plugins/LoaderOptionsPlugin.check.js +3 -3
  224. package/schemas/plugins/ManifestPlugin.check.js +3 -3
  225. package/schemas/plugins/ProgressPlugin.check.js +3 -3
  226. package/schemas/plugins/SSRManifestPlugin.check.js +3 -3
  227. package/schemas/plugins/SourceMapDevToolPlugin.check.js +3 -3
  228. package/schemas/plugins/WatchIgnorePlugin.check.js +3 -3
  229. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +3 -3
  230. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +3 -3
  231. package/schemas/plugins/asset/AssetParserOptions.check.js +3 -3
  232. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +3 -3
  233. package/schemas/plugins/container/ContainerPlugin.check.js +3 -3
  234. package/schemas/plugins/container/ContainerReferencePlugin.check.js +3 -3
  235. package/schemas/plugins/container/ExternalsType.check.js +3 -3
  236. package/schemas/plugins/container/ModuleFederationPlugin.check.js +3 -3
  237. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +3 -3
  238. package/schemas/plugins/css/CssGeneratorOptions.check.js +3 -3
  239. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +3 -3
  240. package/schemas/plugins/css/CssModuleParserOptions.check.js +3 -3
  241. package/schemas/plugins/css/CssParserOptions.check.js +3 -3
  242. package/schemas/plugins/debug/ProfilingPlugin.check.js +3 -3
  243. package/schemas/plugins/define/DotenvPluginOptions.check.js +7 -0
  244. package/schemas/plugins/define/DotenvPluginOptions.json +3 -0
  245. package/schemas/plugins/dll/DllPlugin.check.js +3 -3
  246. package/schemas/plugins/dll/DllReferencePlugin.check.js +3 -3
  247. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +3 -3
  248. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +3 -3
  249. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +3 -3
  250. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +3 -3
  251. package/schemas/plugins/json/JsonModulesPluginParser.check.js +3 -3
  252. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +3 -3
  253. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +3 -3
  254. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +3 -3
  255. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +3 -3
  256. package/schemas/plugins/output/CleanOptions.check.js +7 -0
  257. package/schemas/plugins/output/CleanOptions.json +3 -0
  258. package/schemas/plugins/schemes/HttpUriPlugin.check.js +3 -3
  259. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +3 -3
  260. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +3 -3
  261. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +3 -3
  262. package/schemas/plugins/sharing/SharePlugin.check.js +3 -3
  263. package/types.d.ts +1482 -358
@@ -93,7 +93,9 @@ const compareIds = (a, b) => {
93
93
  */
94
94
  const compareIterables = (elementComparator) => {
95
95
  const cacheEntry = compareIteratorsCache.get(elementComparator);
96
- if (cacheEntry !== undefined) return cacheEntry;
96
+ if (cacheEntry !== undefined) {
97
+ return /** @type {Comparator<Iterable<T>>} */ (cacheEntry);
98
+ }
97
99
  /**
98
100
  * Returns compare result.
99
101
  * @param {Iterable<T>} a first value
@@ -419,7 +421,7 @@ class TwoKeyWeakMap {
419
421
  }
420
422
  }
421
423
 
422
- /** @type {TwoKeyWeakMap<Comparator<EXPECTED_ANY>, Comparator<EXPECTED_ANY>, Comparator<EXPECTED_ANY>>}} */
424
+ /** @type {TwoKeyWeakMap<Comparator<never>, Comparator<never>, Comparator<never>>} */
423
425
  const concatComparatorsCache = new TwoKeyWeakMap();
424
426
 
425
427
  /**
@@ -460,7 +462,7 @@ const concatComparators = (c1, c2, ...cRest) => {
460
462
  * @typedef {(input: A) => B | undefined | null} Selector
461
463
  */
462
464
 
463
- /** @type {TwoKeyWeakMap<Selector<EXPECTED_ANY, EXPECTED_ANY>, Comparator<EXPECTED_ANY>, Comparator<EXPECTED_ANY>>}} */
465
+ /** @type {TwoKeyWeakMap<(input: never) => void, Comparator<never>, Comparator<never>>} */
464
466
  const compareSelectCache = new TwoKeyWeakMap();
465
467
 
466
468
  /**
@@ -473,7 +475,9 @@ const compareSelectCache = new TwoKeyWeakMap();
473
475
  */
474
476
  const compareSelect = (getter, comparator) => {
475
477
  const cacheEntry = compareSelectCache.get(getter, comparator);
476
- if (cacheEntry !== undefined) return cacheEntry;
478
+ if (cacheEntry !== undefined) {
479
+ return /** @type {Comparator<T>} */ (cacheEntry);
480
+ }
477
481
  /**
478
482
  * Returns compare result.
479
483
  * @param {T} a first value
@@ -530,7 +534,7 @@ const compareErrors = concatComparators(
530
534
  )
531
535
  );
532
536
 
533
- /** @type {WeakMap<Comparator<EXPECTED_ANY>, Comparator<Iterable<EXPECTED_ANY>>>} */
537
+ /** @type {WeakMap<Comparator<never>, Comparator<Iterable<never>>>} */
534
538
  const compareIteratorsCache = new WeakMap();
535
539
 
536
540
  // TODO this is no longer needed when minimum node.js version is >= 12
@@ -327,6 +327,8 @@ const askEmbeddedRenderer = async (render, hole, reported) => {
327
327
 
328
328
  module.exports = {
329
329
  EMBEDDED_LANGUAGES,
330
+ JSON_TYPE,
331
+ SVG_TYPE,
330
332
  URIRegEx,
331
333
  askEmbeddedRenderer,
332
334
  buildDataURI,
@@ -96,7 +96,7 @@ module.exports.arrayToSetDeprecation = (set, name) => {
96
96
  `${name} was changed from Array to Set (using Array method '${method}' is deprecated)`,
97
97
  "ARRAY_TO_SET"
98
98
  );
99
- /** @type {EXPECTED_ANY} */
99
+ /** @type {Set<T> & Record<COPY_METHODS_NAMES, (this: Set<T>) => void>} */
100
100
  (set)[method] =
101
101
  // eslint-disable-next-line func-names
102
102
  function () {
@@ -318,10 +318,11 @@ module.exports.soonFrozenObjectDeprecation = (obj, name, code, note = "") => {
318
318
  set: util.deprecate(
319
319
  /**
320
320
  * Handles the callback logic for this hook.
321
+ * @template V
321
322
  * @param {object} target target
322
323
  * @param {string | symbol} property property
323
- * @param {EXPECTED_ANY} value value
324
- * @param {EXPECTED_ANY} receiver receiver
324
+ * @param {V} value value
325
+ * @param {T} receiver receiver
325
326
  * @returns {boolean} result
326
327
  */
327
328
  (target, property, value, receiver) =>
@@ -15,10 +15,7 @@ const memoize = require("./memoize");
15
15
 
16
16
  // watchpack's glob-to-regexp core, loaded only when a glob is translated
17
17
  const getGlobToRegExpSource = memoize(
18
- () =>
19
- /** @type {{ util: { globToRegExp: (glob: string) => string } }} */ (
20
- /** @type {unknown} */ (require("watchpack"))
21
- ).util.globToRegExp
18
+ () => require("watchpack").util.globToRegExp
22
19
  );
23
20
 
24
21
  /** @typedef {{ caseSensitive?: boolean, requireLiteralLeadingDot?: boolean }} GlobMatchOptions */
@@ -315,6 +315,8 @@ module.exports = {
315
315
  require("../dependencies/esm/ESMImportSideEffectDependency"),
316
316
  "dependencies/esm/ESMImportSpecifierDependency": () =>
317
317
  require("../dependencies/esm/ESMImportSpecifierDependency"),
318
+ "dependencies/esm/ESMLiveExportDependency": () =>
319
+ require("../dependencies/esm/ESMLiveExportDependency"),
318
320
  "dependencies/esm/TopLevelAwaitDependency": () =>
319
321
  require("../dependencies/esm/TopLevelAwaitDependency"),
320
322
  "dependencies/hmr/ImportMetaHotAcceptDependency": () =>
@@ -8,7 +8,6 @@ const { register, registerLegacyRequest } = require("./serialization");
8
8
 
9
9
  /**
10
10
  * @import {
11
- * Constructor,
12
11
  * ObjectDeserializerContext,
13
12
  * ObjectSerializerContext
14
13
  * } from "../serialization/ObjectMiddleware"
@@ -18,7 +17,7 @@ const { register, registerLegacyRequest } = require("./serialization");
18
17
  /**
19
18
  * Defines the serializable class constructor type used by this module.
20
19
  * @template {SerializableClass} T
21
- * @typedef {(new (...params: EXPECTED_ANY[]) => T) & { deserialize?: (context: ObjectDeserializerContext) => T }} SerializableClassConstructor
20
+ * @typedef {(new (...params: never[]) => T) & { deserialize?: (context: ObjectDeserializerContext) => T }} SerializableClassConstructor
22
21
  */
23
22
 
24
23
  /**
@@ -64,7 +63,7 @@ class ClassSerializer {
64
63
  * keep requests the class was written under before a move readable: the first
65
64
  * is the one it is written under now, the rest restore older cache packs; a
66
65
  * historical entry written under another name pairs its request with it.
67
- * @template {Constructor} T
66
+ * @template {new (...params: never[]) => EXPECTED_OBJECT} T
68
67
  * @param {T} Constructor the constructor
69
68
  * @param {string | (string | [string, string | null])[]} request the request which will be required when deserializing, current one first
70
69
  * @param {string | null=} name the name to make multiple serializer unique when sharing a request
@@ -75,7 +74,10 @@ module.exports = (Constructor, request, name = null) => {
75
74
  Constructor,
76
75
  /** @type {string} */ (requests[0]),
77
76
  name,
78
- new ClassSerializer(Constructor)
77
+ new ClassSerializer(
78
+ /** @type {SerializableClassConstructor<SerializableClass>} */
79
+ (Constructor)
80
+ )
79
81
  );
80
82
  // TODO in the next major release: remove, dropping every request but the
81
83
  // first from each caller, which stops pre-move cache packs loading
@@ -31,7 +31,7 @@ const memoize = (fn) => {
31
31
  // and all dependent resources
32
32
  /** @type {FunctionReturning<T> | undefined} */
33
33
  (fn) = undefined;
34
- return /** @type {T} */ (result);
34
+ return result;
35
35
  };
36
36
  };
37
37
 
@@ -8,7 +8,7 @@ const memoize = require("./memoize");
8
8
 
9
9
  const getJSONParseError = memoize(() => require("../errors/JSONParseError"));
10
10
 
11
- /** @import { JsonValue } from "../fs/fs" */
11
+ /** @import { JsonArray, JsonObject, JsonValue } from "../fs/fs" */
12
12
 
13
13
  // Inspired by https://github.com/npm/json-parse-even-better-errors
14
14
 
@@ -25,7 +25,7 @@ const stripBOM = (txt) => String(txt).replace(/^\uFEFF/, "");
25
25
  * @template [R=JsonValue]
26
26
  * @callback ParseJsonFn
27
27
  * @param {string} raw text
28
- * @param {(this: EXPECTED_ANY, key: string, value: EXPECTED_ANY) => EXPECTED_ANY=} reviver reviver
28
+ * @param {(this: JsonObject | JsonArray, key: string, value: JsonValue) => JsonValue=} reviver reviver
29
29
  * @returns {R} parsed JSON
30
30
  */
31
31
 
@@ -54,6 +54,12 @@ const registerSerializers = memoize(() => {
54
54
  */
55
55
  /** @import { HashFunction } from "../util/Hash" */
56
56
  /** @import { IntermediateFileSystem } from "../fs/fs" */
57
+ /**
58
+ * @import {
59
+ * BufferSerializableType,
60
+ * ComplexSerializableType
61
+ * } from "../serialization/types"
62
+ */
57
63
 
58
64
  /**
59
65
  * Defines the serializer type used by this module.
@@ -62,7 +68,7 @@ const registerSerializers = memoize(() => {
62
68
  */
63
69
 
64
70
  /**
65
- * @type {Serializer<EXPECTED_ANY, EXPECTED_ANY, EXPECTED_ANY>}
71
+ * @type {Serializer<ComplexSerializableType, BufferSerializableType[], EXPECTED_OBJECT>}
66
72
  */
67
73
  let buffersSerializer;
68
74
 
@@ -97,7 +103,7 @@ module.exports = {
97
103
  const Serializer = getSerializer();
98
104
  const binaryMiddleware = getBinaryMiddlewareInstance();
99
105
  const SingleItemMiddleware = getSingleItemMiddleware();
100
- return /** @type {Serializer<EXPECTED_ANY, EXPECTED_ANY, EXPECTED_ANY>} */ (
106
+ return /** @type {Serializer<ComplexSerializableType, BufferSerializableType[], EXPECTED_OBJECT>} */ (
101
107
  buffersSerializer = new Serializer([
102
108
  new SingleItemMiddleware(),
103
109
  new ObjectMiddleware((context) => {
@@ -129,30 +135,28 @@ module.exports = {
129
135
  const fileMiddleware = new FileMiddleware(fs, hashFunction);
130
136
  const binaryMiddleware = getBinaryMiddlewareInstance();
131
137
  const SingleItemMiddleware = getSingleItemMiddleware();
132
- return /** @type {Serializer<D, S, C>} */ (
133
- new Serializer([
134
- new SingleItemMiddleware(),
135
- new ObjectMiddleware((context) => {
136
- if ("write" in context) {
137
- context.writeLazy = (value) => {
138
- context.write(
139
- SerializerMiddleware.createLazy(value, binaryMiddleware)
140
- );
141
- };
142
- context.writeSeparate = (value, options) => {
143
- const lazy = SerializerMiddleware.createLazy(
144
- value,
145
- fileMiddleware,
146
- options
147
- );
148
- context.write(lazy);
149
- return lazy;
150
- };
151
- }
152
- }, hashFunction),
153
- binaryMiddleware,
154
- fileMiddleware
155
- ])
156
- );
138
+ return new Serializer([
139
+ new SingleItemMiddleware(),
140
+ new ObjectMiddleware((context) => {
141
+ if ("write" in context) {
142
+ context.writeLazy = (value) => {
143
+ context.write(
144
+ SerializerMiddleware.createLazy(value, binaryMiddleware)
145
+ );
146
+ };
147
+ context.writeSeparate = (value, options) => {
148
+ const lazy = SerializerMiddleware.createLazy(
149
+ value,
150
+ fileMiddleware,
151
+ options
152
+ );
153
+ context.write(lazy);
154
+ return lazy;
155
+ };
156
+ }
157
+ }, hashFunction),
158
+ binaryMiddleware,
159
+ fileMiddleware
160
+ ]);
157
161
  }
158
162
  };
@@ -7,12 +7,22 @@
7
7
  const NormalModule = require("../module/NormalModule");
8
8
  const makeSerializable = require("../util/makeSerializable");
9
9
 
10
- /** @import Module from "../module/Module" */
11
- /** @import { NormalModuleCreateData } from "../module/NormalModule" */
10
+ /** @import Module, { BuildMeta } from "../module/Module" */
11
+ /**
12
+ * @import {
13
+ * NormalModuleBuildInfo,
14
+ * NormalModuleCreateData
15
+ * } from "../module/NormalModule"
16
+ */
12
17
  /** @import { ImportPhaseName } from "../dependencies/core/ImportPhase" */
13
18
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[ImportPhaseName | undefined]>} ObjectDeserializerContext */
14
19
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[ImportPhaseName | undefined]>} ObjectSerializerContext */
15
20
 
21
+ /**
22
+ * A built async wasm module, typed with its build info and build meta.
23
+ * @typedef {NormalModule & { buildInfo: NormalModuleBuildInfo, buildMeta: BuildMeta }} BuiltAsyncWasmModule
24
+ */
25
+
16
26
  /**
17
27
  * Module class for `webassembly/async` modules. Wasm-specific properties should live here instead of `NormalModule`.
18
28
  */
@@ -20,6 +20,14 @@ const { WEBASSEMBLY_TYPES } = require("../module/ModuleSourceTypeConstants");
20
20
  * @property {boolean=} mangleImports mangle imports
21
21
  */
22
22
 
23
+ /**
24
+ * The module type the JSDoc inherited from `Generator` names.
25
+ * @typedef {NormalModule} TModule
26
+ */
27
+
28
+ /**
29
+ * @extends {Generator<TModule>}
30
+ */
23
31
  class AsyncWebAssemblyGenerator extends Generator {
24
32
  /**
25
33
  * Creates an instance of AsyncWebAssemblyGenerator.
@@ -33,7 +41,7 @@ class AsyncWebAssemblyGenerator extends Generator {
33
41
 
34
42
  /**
35
43
  * Returns the source types available for this module.
36
- * @param {NormalModule} module fresh module
44
+ * @param {TModule} module fresh module
37
45
  * @returns {SourceTypes} available types (do not mutate)
38
46
  */
39
47
  getTypes(module) {
@@ -42,7 +50,7 @@ class AsyncWebAssemblyGenerator extends Generator {
42
50
 
43
51
  /**
44
52
  * Returns the estimated size for the requested source type.
45
- * @param {NormalModule} module the module
53
+ * @param {TModule} module the module
46
54
  * @param {SourceType=} type source type
47
55
  * @returns {number} estimate size of the module
48
56
  */
@@ -56,7 +64,7 @@ class AsyncWebAssemblyGenerator extends Generator {
56
64
 
57
65
  /**
58
66
  * Generates generated code for this runtime module.
59
- * @param {NormalModule} module module for which the code should be generated
67
+ * @param {TModule} module module for which the code should be generated
60
68
  * @param {GenerateContext} generateContext context for generate
61
69
  * @returns {Source | null} generated code
62
70
  */
@@ -67,7 +75,7 @@ class AsyncWebAssemblyGenerator extends Generator {
67
75
  /**
68
76
  * Generates fallback output for the provided error condition.
69
77
  * @param {Error} error the error
70
- * @param {NormalModule} module module for which the code should be generated
78
+ * @param {TModule} module module for which the code should be generated
71
79
  * @param {GenerateContext} generateContext context for generate
72
80
  * @returns {Source | null} generated code
73
81
  */
@@ -25,10 +25,18 @@ const Template = require("../template/Template");
25
25
  * @typedef {{ request: string, importVar: string, dependency: WebAssemblyImportDependency }} ImportObjRequestItem
26
26
  */
27
27
 
28
+ /**
29
+ * The module type the JSDoc inherited from `Generator` names.
30
+ * @typedef {NormalModule} TModule
31
+ */
32
+
33
+ /**
34
+ * @extends {Generator<TModule>}
35
+ */
28
36
  class AsyncWebAssemblyJavascriptGenerator extends Generator {
29
37
  /**
30
38
  * Returns the source types available for this module.
31
- * @param {NormalModule} module fresh module
39
+ * @param {TModule} module fresh module
32
40
  * @returns {SourceTypes} available types (do not mutate)
33
41
  */
34
42
  getTypes(module) {
@@ -37,7 +45,7 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
37
45
 
38
46
  /**
39
47
  * Returns the estimated size for the requested source type.
40
- * @param {NormalModule} module the module
48
+ * @param {TModule} module the module
41
49
  * @param {SourceType=} type source type
42
50
  * @returns {number} estimate size of the module
43
51
  */
@@ -53,7 +61,7 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
53
61
 
54
62
  /**
55
63
  * Generates generated code for this runtime module.
56
- * @param {NormalModule} module module for which the code should be generated
64
+ * @param {TModule} module module for which the code should be generated
57
65
  * @param {GenerateContext} generateContext context for generate
58
66
  * @returns {Source | null} generated code
59
67
  */
@@ -236,7 +244,7 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
236
244
 
237
245
  /**
238
246
  * Generate code for source phase import (returns WebAssembly.Module)
239
- * @param {NormalModule} module module for which the code should be generated
247
+ * @param {TModule} module module for which the code should be generated
240
248
  * @param {GenerateContext} generateContext context for generate
241
249
  * @returns {Source} generated code
242
250
  */
@@ -298,7 +306,7 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
298
306
  /**
299
307
  * Generates fallback output for the provided error condition.
300
308
  * @param {Error} error the error
301
- * @param {NormalModule} module module for which the code should be generated
309
+ * @param {TModule} module module for which the code should be generated
302
310
  * @param {GenerateContext} generateContext context for generate
303
311
  * @returns {Source | null} generated code
304
312
  */
@@ -16,8 +16,7 @@ const getEnvironmentNotSupportAsyncWarning = memoize(() =>
16
16
  require("../errors/EnvironmentNotSupportAsyncWarning")
17
17
  );
18
18
 
19
- /** @import AsyncWasmModule from "./AsyncWasmModule" */
20
- /** @import { BuildInfo, BuildMeta } from "../module/Module" */
19
+ /** @import AsyncWasmModule, { BuiltAsyncWasmModule } from "./AsyncWasmModule" */
21
20
  /** @import { ParserState, PreparsedAst } from "../module/Parser" */
22
21
 
23
22
  const WASM_HEADER = Buffer.from([0x00, 0x61, 0x73, 0x6d]);
@@ -30,6 +29,9 @@ const decoderOpts = {
30
29
  ignoreCustomNameSection: true
31
30
  };
32
31
 
32
+ /**
33
+ * @extends {Parser<BuiltAsyncWasmModule>}
34
+ */
33
35
  class AsyncWebAssemblyParser extends Parser {
34
36
  /**
35
37
  * Parses the provided source and updates the parser state.
@@ -42,7 +44,9 @@ class AsyncWebAssemblyParser extends Parser {
42
44
  throw new Error("AsyncWebAssemblyParser input must be a Buffer");
43
45
  }
44
46
 
45
- const buildMeta = /** @type {BuildMeta} */ (state.module.buildMeta);
47
+ const { buildInfo, buildMeta } = /** @type {BuiltAsyncWasmModule} */ (
48
+ state.module
49
+ );
46
50
  buildMeta.exportsType = "namespace";
47
51
  buildMeta.async = true;
48
52
 
@@ -53,8 +57,6 @@ class AsyncWebAssemblyParser extends Parser {
53
57
  );
54
58
 
55
59
  // flag it as async module
56
- const buildInfo = /** @type {BuildInfo} */ (state.module.buildInfo);
57
-
58
60
  buildInfo.strict = true;
59
61
 
60
62
  if (/** @type {AsyncWasmModule} */ (state.module).phase === "source") {
@@ -119,9 +119,7 @@ class UniversalCompileAsyncWasmPlugin {
119
119
  chunk,
120
120
  new AsyncWasmLoadingRuntimeModule({
121
121
  fullHashDigest: usesFullHashDigest(
122
- /** @type {string} */ (
123
- compilation.outputOptions.webassemblyModuleFilename
124
- )
122
+ compilation.outputOptions.webassemblyModuleFilename
125
123
  ),
126
124
  generateBeforeLoadBinaryCode,
127
125
  generateLoadBinaryCode,
@@ -147,9 +145,7 @@ class UniversalCompileAsyncWasmPlugin {
147
145
  chunk,
148
146
  new AsyncWasmCompileRuntimeModule({
149
147
  fullHashDigest: usesFullHashDigest(
150
- /** @type {string} */ (
151
- compilation.outputOptions.webassemblyModuleFilename
152
- )
148
+ compilation.outputOptions.webassemblyModuleFilename
153
149
  ),
154
150
  generateBeforeLoadBinaryCode,
155
151
  generateLoadBinaryCode,
@@ -8,7 +8,12 @@ const NormalModule = require("../module/NormalModule");
8
8
  const makeSerializable = require("../util/makeSerializable");
9
9
 
10
10
  /** @import { BuildMeta } from "../module/Module" */
11
- /** @import { NormalModuleCreateData } from "../module/NormalModule" */
11
+ /**
12
+ * @import {
13
+ * NormalModuleBuildInfo,
14
+ * NormalModuleCreateData
15
+ * } from "../module/NormalModule"
16
+ */
12
17
 
13
18
  /**
14
19
  * Defines the build meta properties specific to sync wasm modules.
@@ -18,6 +23,16 @@ const makeSerializable = require("../util/makeSerializable");
18
23
 
19
24
  /** @typedef {BuildMeta & KnownSyncWasmModuleBuildMeta} SyncWasmModuleBuildMeta */
20
25
 
26
+ /**
27
+ * A sync wasm module before or after its build, typed with its build meta.
28
+ * @typedef {NormalModule & { buildMeta?: SyncWasmModuleBuildMeta }} SyncWasmNormalModule
29
+ */
30
+
31
+ /**
32
+ * A built sync wasm module, typed with its build info and build meta.
33
+ * @typedef {NormalModule & { buildInfo: NormalModuleBuildInfo, buildMeta: SyncWasmModuleBuildMeta }} BuiltSyncWasmModule
34
+ */
35
+
21
36
  /**
22
37
  * Module class for `webassembly/sync` modules. Wasm-specific properties should live here instead of `NormalModule`.
23
38
  */
@@ -15,12 +15,11 @@ const Generator = require("../module/Generator");
15
15
  const { WEBASSEMBLY_TYPES } = require("../module/ModuleSourceTypeConstants");
16
16
  const WebAssemblyUtils = require("./WebAssemblyUtils");
17
17
 
18
- /** @import WebAssemblyExportImportedDependency from "../dependencies/wasm/WebAssemblyExportImportedDependency" */
18
+ /** @import { SyncWasmNormalModule } from "./SyncWasmModule" */
19
19
  /** @import { Source } from "webpack-sources" */
20
20
  /** @import { GenerateContext, UpdateHashContext } from "../module/Generator" */
21
21
  /** @import Module, { SourceType, SourceTypes } from "../module/Module" */
22
22
  /** @import ModuleGraph from "../graph/ModuleGraph" */
23
- /** @import NormalModule from "../module/NormalModule" */
24
23
  /** @import Hash from "../util/Hash" */
25
24
  /** @import { RuntimeSpec } from "../util/runtime" */
26
25
  /** @import { UsedWasmDependency } from "./WebAssemblyUtils" */
@@ -421,6 +420,14 @@ const getUsedDependencyMap = (moduleGraph, module, mangle) => {
421
420
  * @property {boolean=} mangleImports mangle imports
422
421
  */
423
422
 
423
+ /**
424
+ * The module type the JSDoc inherited from `Generator` names.
425
+ * @typedef {SyncWasmNormalModule} TModule
426
+ */
427
+
428
+ /**
429
+ * @extends {Generator<TModule>}
430
+ */
424
431
  class WebAssemblyGenerator extends Generator {
425
432
  /**
426
433
  * Creates an instance of WebAssemblyGenerator.
@@ -434,7 +441,7 @@ class WebAssemblyGenerator extends Generator {
434
441
 
435
442
  /**
436
443
  * Returns the source types available for this module.
437
- * @param {NormalModule} module fresh module
444
+ * @param {TModule} module fresh module
438
445
  * @returns {SourceTypes} available types (do not mutate)
439
446
  */
440
447
  getTypes(module) {
@@ -443,7 +450,7 @@ class WebAssemblyGenerator extends Generator {
443
450
 
444
451
  /**
445
452
  * Returns the estimated size for the requested source type.
446
- * @param {NormalModule} module the module
453
+ * @param {TModule} module the module
447
454
  * @param {SourceType=} type source type
448
455
  * @returns {number} estimate size of the module
449
456
  */
@@ -457,7 +464,7 @@ class WebAssemblyGenerator extends Generator {
457
464
 
458
465
  /**
459
466
  * Generates generated code for this runtime module.
460
- * @param {NormalModule} module module for which the code should be generated
467
+ * @param {TModule} module module for which the code should be generated
461
468
  * @param {GenerateContext} generateContext context for generate
462
469
  * @returns {Source | null} generated code
463
470
  */
@@ -492,9 +499,7 @@ class WebAssemblyGenerator extends Generator {
492
499
  module.dependencies
493
500
  .filter((d) => isDependencyKind(d, "webassembly-export-imported"))
494
501
  .map((d) => {
495
- const wasmDep = /** @type {WebAssemblyExportImportedDependency} */ (
496
- d
497
- );
502
+ const wasmDep = d;
498
503
  return wasmDep.exportName;
499
504
  })
500
505
  );
@@ -540,7 +545,7 @@ class WebAssemblyGenerator extends Generator {
540
545
  /**
541
546
  * Generates fallback output for the provided error condition.
542
547
  * @param {Error} error the error
543
- * @param {NormalModule} module module for which the code should be generated
548
+ * @param {TModule} module module for which the code should be generated
544
549
  * @param {GenerateContext} generateContext context for generate
545
550
  * @returns {Source | null} generated code
546
551
  */
@@ -556,7 +561,7 @@ class WebAssemblyGenerator extends Generator {
556
561
  /**
557
562
  * Updates the hash with the data contributed by this instance.
558
563
  * @param {Hash} hash hash that will be modified
559
- * @param {UpdateHashContext} updateHashContext context for updating hash
564
+ * @param {UpdateHashContext<TModule>} updateHashContext context for updating hash
560
565
  */
561
566
  updateHash(hash, updateHashContext) {
562
567
  if (this.options.mangleImports) {
@@ -14,16 +14,24 @@ const RuntimeGlobals = require("../runtime/RuntimeGlobals");
14
14
  const InitFragment = require("../template/InitFragment");
15
15
  const Template = require("../template/Template");
16
16
 
17
+ /** @import { SyncWasmNormalModule } from "./SyncWasmModule" */
17
18
  /** @import { Source } from "webpack-sources" */
18
19
  /** @import { GenerateContext } from "../module/Generator" */
19
20
  /** @import ModuleDependency from "../dependencies/core/ModuleDependency" */
20
21
  /** @import Module, { SourceType, SourceTypes } from "../module/Module" */
21
- /** @import NormalModule from "../module/NormalModule" */
22
22
 
23
+ /**
24
+ * The module type the JSDoc inherited from `Generator` names.
25
+ * @typedef {SyncWasmNormalModule} TModule
26
+ */
27
+
28
+ /**
29
+ * @extends {Generator<TModule>}
30
+ */
23
31
  class WebAssemblyJavascriptGenerator extends Generator {
24
32
  /**
25
33
  * Returns the source types available for this module.
26
- * @param {NormalModule} module fresh module
34
+ * @param {TModule} module fresh module
27
35
  * @returns {SourceTypes} available types (do not mutate)
28
36
  */
29
37
  getTypes(module) {
@@ -32,7 +40,7 @@ class WebAssemblyJavascriptGenerator extends Generator {
32
40
 
33
41
  /**
34
42
  * Returns the estimated size for the requested source type.
35
- * @param {NormalModule} module the module
43
+ * @param {TModule} module the module
36
44
  * @param {SourceType=} type source type
37
45
  * @returns {number} estimate size of the module
38
46
  */
@@ -42,7 +50,7 @@ class WebAssemblyJavascriptGenerator extends Generator {
42
50
 
43
51
  /**
44
52
  * Generates generated code for this runtime module.
45
- * @param {NormalModule} module module for which the code should be generated
53
+ * @param {TModule} module module for which the code should be generated
46
54
  * @param {GenerateContext} generateContext context for generate
47
55
  * @returns {Source | null} generated code
48
56
  */
@@ -225,7 +233,7 @@ class WebAssemblyJavascriptGenerator extends Generator {
225
233
  /**
226
234
  * Generates fallback output for the provided error condition.
227
235
  * @param {Error} error the error
228
- * @param {NormalModule} module module for which the code should be generated
236
+ * @param {TModule} module module for which the code should be generated
229
237
  * @param {GenerateContext} generateContext context for generate
230
238
  * @returns {Source | null} generated code
231
239
  */