webpack 5.107.1 → 5.108.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 (360) hide show
  1. package/hot/dev-server.js +2 -0
  2. package/lib/APIPlugin.js +8 -4
  3. package/lib/CacheFacade.js +7 -0
  4. package/lib/Chunk.js +4 -0
  5. package/lib/ChunkGraph.js +30 -9
  6. package/lib/CircularModulesPlugin.js +190 -0
  7. package/lib/CleanPlugin.js +2 -1
  8. package/lib/Compilation.js +396 -65
  9. package/lib/Compiler.js +52 -14
  10. package/lib/ConcatenationScope.js +10 -3
  11. package/lib/ContextExclusionPlugin.js +1 -0
  12. package/lib/ContextModule.js +92 -47
  13. package/lib/ContextModuleFactory.js +45 -38
  14. package/lib/ContextReplacementPlugin.js +4 -0
  15. package/lib/DefinePlugin.js +89 -15
  16. package/lib/Dependency.js +111 -7
  17. package/lib/EntryOptionPlugin.js +39 -2
  18. package/lib/EntryPlugin.js +2 -0
  19. package/lib/ExportsInfo.js +314 -73
  20. package/lib/ExternalModule.js +82 -34
  21. package/lib/ExternalModuleFactoryPlugin.js +1 -0
  22. package/lib/ExternalsPlugin.js +1 -0
  23. package/lib/FileSystemInfo.js +173 -23
  24. package/lib/FlagAllModulesAsUsedPlugin.js +1 -5
  25. package/lib/FlagDependencyExportsPlugin.js +23 -0
  26. package/lib/FlagDependencyUsagePlugin.js +87 -5
  27. package/lib/FlagEntryExportAsUsedPlugin.js +2 -0
  28. package/lib/Generator.js +8 -0
  29. package/lib/HotModuleReplacementPlugin.js +65 -28
  30. package/lib/IgnorePlugin.js +1 -0
  31. package/lib/InitFragment.js +5 -0
  32. package/lib/JavascriptMetaInfoPlugin.js +7 -5
  33. package/lib/LazyBarrel.js +361 -0
  34. package/lib/LoaderTargetPlugin.js +1 -0
  35. package/lib/Module.js +21 -42
  36. package/lib/ModuleGraph.js +3 -2
  37. package/lib/ModuleProfile.js +27 -1
  38. package/lib/ModuleTemplate.js +2 -0
  39. package/lib/MultiCompiler.js +16 -0
  40. package/lib/MultiStats.js +1 -0
  41. package/lib/MultiWatching.js +2 -0
  42. package/lib/NodeStuffPlugin.js +22 -17
  43. package/lib/NormalModule.js +557 -77
  44. package/lib/NormalModuleReplacementPlugin.js +2 -0
  45. package/lib/PrefetchPlugin.js +2 -0
  46. package/lib/ProgressPlugin.js +9 -1
  47. package/lib/ProvidePlugin.js +1 -0
  48. package/lib/RawModule.js +20 -16
  49. package/lib/RecordIdsPlugin.js +1 -0
  50. package/lib/RuntimeGlobals.js +5 -0
  51. package/lib/RuntimePlugin.js +58 -26
  52. package/lib/RuntimeTemplate.js +278 -21
  53. package/lib/SelfModuleFactory.js +1 -0
  54. package/lib/SourceMapDevToolPlugin.js +105 -30
  55. package/lib/Stats.js +1 -0
  56. package/lib/Template.js +8 -2
  57. package/lib/TemplatedPathPlugin.js +473 -131
  58. package/lib/WarnCaseSensitiveModulesPlugin.js +1 -0
  59. package/lib/WarnDeprecatedOptionPlugin.js +4 -0
  60. package/lib/WarnNoModeSetPlugin.js +1 -0
  61. package/lib/WatchIgnorePlugin.js +1 -0
  62. package/lib/Watching.js +9 -0
  63. package/lib/WebpackOptionsApply.js +50 -5
  64. package/lib/asset/AssetBytesGenerator.js +11 -3
  65. package/lib/asset/AssetGenerator.js +47 -22
  66. package/lib/asset/AssetModule.js +47 -0
  67. package/lib/asset/AssetModulesPlugin.js +14 -14
  68. package/lib/asset/AssetParser.js +2 -2
  69. package/lib/asset/AssetSourceGenerator.js +8 -0
  70. package/lib/asset/RawDataUrlModule.js +12 -13
  71. package/lib/buildChunkGraph.js +88 -9
  72. package/lib/bun/BunTargetPlugin.js +48 -0
  73. package/lib/cache/AddBuildDependenciesPlugin.js +1 -0
  74. package/lib/cache/AddManagedPathsPlugin.js +3 -0
  75. package/lib/cache/IdleFileCachePlugin.js +4 -0
  76. package/lib/cache/MemoryWithGcCachePlugin.js +1 -0
  77. package/lib/cache/PackFileCacheStrategy.js +1 -0
  78. package/lib/cache/ResolverCachePlugin.js +2 -0
  79. package/lib/cache/getLazyHashedEtag.js +9 -2
  80. package/lib/cache/mergeEtags.js +2 -0
  81. package/lib/cli.js +109 -19
  82. package/lib/config/browserslistTargetHandler.js +99 -0
  83. package/lib/config/defaults.js +147 -7
  84. package/lib/config/defineConfig.js +31 -0
  85. package/lib/config/normalization.js +5 -0
  86. package/lib/config/target.js +181 -2
  87. package/lib/container/ContainerEntryModule.js +15 -14
  88. package/lib/container/ContainerExposedDependency.js +2 -2
  89. package/lib/container/ContainerReferencePlugin.js +1 -1
  90. package/lib/container/FallbackDependency.js +5 -7
  91. package/lib/container/FallbackModule.js +10 -9
  92. package/lib/container/RemoteModule.js +20 -10
  93. package/lib/container/RemoteRuntimeModule.js +14 -12
  94. package/lib/css/CssGenerator.js +353 -327
  95. package/lib/css/CssInjectStyleRuntimeModule.js +36 -8
  96. package/lib/css/CssLoadingRuntimeModule.js +118 -47
  97. package/lib/css/CssModule.js +52 -23
  98. package/lib/css/CssModulesPlugin.js +107 -124
  99. package/lib/css/CssParser.js +2759 -2205
  100. package/lib/css/syntax.js +2859 -0
  101. package/lib/debug/ProfilingPlugin.js +2 -0
  102. package/lib/deno/DenoTargetPlugin.js +47 -0
  103. package/lib/dependencies/AMDDefineDependency.js +22 -17
  104. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +1 -0
  105. package/lib/dependencies/AMDRequireArrayDependency.js +7 -11
  106. package/lib/dependencies/AMDRequireContextDependency.js +7 -11
  107. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +1 -0
  108. package/lib/dependencies/AMDRequireDependency.js +24 -20
  109. package/lib/dependencies/CachedConstDependency.js +3 -0
  110. package/lib/dependencies/CommonJsDependencyHelpers.js +1 -0
  111. package/lib/dependencies/CommonJsExportRequireDependency.js +79 -31
  112. package/lib/dependencies/CommonJsExportsDependency.js +21 -16
  113. package/lib/dependencies/CommonJsExportsParserPlugin.js +230 -7
  114. package/lib/dependencies/CommonJsFullRequireDependency.js +27 -19
  115. package/lib/dependencies/CommonJsImportsParserPlugin.js +51 -16
  116. package/lib/dependencies/CommonJsPlugin.js +1 -1
  117. package/lib/dependencies/CommonJsRequireContextDependency.js +10 -13
  118. package/lib/dependencies/CommonJsRequireDependency.js +42 -11
  119. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -14
  120. package/lib/dependencies/ConstDependency.js +16 -11
  121. package/lib/dependencies/ContextDependency.js +4 -0
  122. package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -1
  123. package/lib/dependencies/ContextElementDependency.js +23 -14
  124. package/lib/dependencies/CreateRequireParserPlugin.js +1 -0
  125. package/lib/dependencies/CreateScriptUrlDependency.js +5 -7
  126. package/lib/dependencies/CriticalDependencyWarning.js +1 -0
  127. package/lib/dependencies/CssIcssExportDependency.js +512 -574
  128. package/lib/dependencies/CssIcssImportDependency.js +9 -9
  129. package/lib/dependencies/CssIcssSymbolDependency.js +22 -15
  130. package/lib/dependencies/CssImportDependency.js +25 -1
  131. package/lib/dependencies/CssUrlDependency.js +23 -14
  132. package/lib/dependencies/DllEntryDependency.js +9 -13
  133. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  134. package/lib/dependencies/ExportsInfoDependency.js +12 -12
  135. package/lib/dependencies/ExternalModuleDependency.js +8 -5
  136. package/lib/dependencies/ExternalModuleInitFragment.js +7 -5
  137. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +13 -10
  138. package/lib/dependencies/HarmonyAcceptDependency.js +11 -11
  139. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
  140. package/lib/dependencies/HarmonyDetectionParserPlugin.js +47 -22
  141. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +28 -2
  142. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +46 -22
  143. package/lib/dependencies/HarmonyExportExpressionDependency.js +107 -30
  144. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -9
  145. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +109 -31
  146. package/lib/dependencies/HarmonyExportInitFragment.js +22 -20
  147. package/lib/dependencies/HarmonyExportSpecifierDependency.js +83 -18
  148. package/lib/dependencies/HarmonyExports.js +4 -1
  149. package/lib/dependencies/HarmonyImportDependency.js +24 -0
  150. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +110 -74
  151. package/lib/dependencies/HarmonyImportGuard.js +254 -0
  152. package/lib/dependencies/HarmonyImportSideEffectDependency.js +18 -1
  153. package/lib/dependencies/HarmonyImportSpecifierDependency.js +118 -14
  154. package/lib/dependencies/HarmonyLinkingError.js +1 -0
  155. package/lib/dependencies/HarmonyModulesPlugin.js +1 -0
  156. package/lib/dependencies/{HtmlScriptSrcDependency.js → HtmlEntryDependency.js} +267 -154
  157. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  158. package/lib/dependencies/HtmlInlineScriptDependency.js +20 -27
  159. package/lib/dependencies/HtmlInlineStyleDependency.js +62 -11
  160. package/lib/dependencies/HtmlSourceDependency.js +18 -0
  161. package/lib/dependencies/ImportContextDependency.js +5 -9
  162. package/lib/dependencies/ImportDependency.js +44 -2
  163. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
  164. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
  165. package/lib/dependencies/ImportMetaPlugin.js +74 -30
  166. package/lib/dependencies/ImportParserPlugin.js +19 -0
  167. package/lib/dependencies/ImportWeakDependency.js +1 -0
  168. package/lib/dependencies/JsonExportsDependency.js +9 -9
  169. package/lib/dependencies/LoaderImportDependency.js +1 -0
  170. package/lib/dependencies/LocalModule.js +11 -12
  171. package/lib/dependencies/LocalModuleDependency.js +11 -13
  172. package/lib/dependencies/ModuleDecoratorDependency.js +9 -9
  173. package/lib/dependencies/ModuleDependency.js +7 -0
  174. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
  175. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
  176. package/lib/dependencies/ModuleInitFragmentDependency.js +15 -11
  177. package/lib/dependencies/ProvidedDependency.js +31 -27
  178. package/lib/dependencies/PureExpressionDependency.js +7 -9
  179. package/lib/dependencies/RequireEnsureDependency.js +12 -13
  180. package/lib/dependencies/RequireHeaderDependency.js +3 -4
  181. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +3 -0
  182. package/lib/dependencies/RequireResolveContextDependency.js +7 -11
  183. package/lib/dependencies/RequireResolveDependency.js +1 -0
  184. package/lib/dependencies/RequireResolveHeaderDependency.js +3 -5
  185. package/lib/dependencies/RuntimeRequirementsDependency.js +6 -7
  186. package/lib/dependencies/StaticExportsDependency.js +10 -10
  187. package/lib/dependencies/SystemPlugin.js +2 -0
  188. package/lib/dependencies/URLContextDependency.js +5 -7
  189. package/lib/dependencies/URLDependency.js +14 -16
  190. package/lib/dependencies/UnsupportedDependency.js +8 -13
  191. package/lib/dependencies/WebAssemblyExportImportedDependency.js +11 -16
  192. package/lib/dependencies/WebAssemblyImportDependency.js +14 -16
  193. package/lib/dependencies/WebpackIsIncludedDependency.js +1 -0
  194. package/lib/dependencies/WorkerDependency.js +19 -8
  195. package/lib/dependencies/WorkerPlugin.js +40 -10
  196. package/lib/dependencies/processExportInfo.js +13 -11
  197. package/lib/dll/DelegatedModule.js +29 -15
  198. package/lib/dll/DelegatedModuleFactoryPlugin.js +1 -0
  199. package/lib/dll/DelegatedPlugin.js +1 -0
  200. package/lib/dll/DllEntryPlugin.js +3 -0
  201. package/lib/dll/DllModule.js +3 -2
  202. package/lib/dll/DllPlugin.js +16 -0
  203. package/lib/dll/DllReferencePlugin.js +3 -0
  204. package/lib/dll/LibManifestPlugin.js +1 -0
  205. package/lib/electron/ElectronTargetPlugin.js +22 -4
  206. package/lib/errors/ConcurrentCompilationError.js +1 -0
  207. package/lib/errors/HookWebpackError.js +11 -13
  208. package/lib/errors/IgnoreErrorModuleFactory.js +1 -0
  209. package/lib/errors/InvalidDependenciesModuleWarning.js +2 -0
  210. package/lib/errors/JSONParseError.js +9 -8
  211. package/lib/errors/ModuleBuildError.js +16 -13
  212. package/lib/errors/ModuleDependencyError.js +8 -1
  213. package/lib/errors/ModuleDependencyWarning.js +8 -1
  214. package/lib/errors/ModuleError.js +5 -11
  215. package/lib/errors/ModuleHashingError.js +4 -0
  216. package/lib/errors/ModuleNotFoundError.js +3 -0
  217. package/lib/errors/ModuleParseError.js +5 -11
  218. package/lib/errors/ModuleRestoreError.js +2 -0
  219. package/lib/errors/ModuleStoreError.js +3 -0
  220. package/lib/errors/ModuleWarning.js +7 -11
  221. package/lib/errors/NodeStuffInWebError.js +1 -0
  222. package/lib/errors/NonErrorEmittedError.js +2 -0
  223. package/lib/errors/UnhandledSchemeError.js +1 -0
  224. package/lib/esm/ModuleChunkLoadingPlugin.js +0 -1
  225. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +28 -23
  226. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  227. package/lib/hmr/HotModuleReplacementRuntimeModule.js +7 -0
  228. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  229. package/lib/hmr/LazyCompilationPlugin.js +134 -6
  230. package/lib/html/HtmlGenerator.js +292 -50
  231. package/lib/html/HtmlModule.js +40 -0
  232. package/lib/html/HtmlModulesPlugin.js +287 -60
  233. package/lib/html/HtmlParser.js +1108 -1099
  234. package/lib/html/{walkHtmlTokens.js → syntax.js} +4701 -212
  235. package/lib/ids/IdHelpers.js +4 -2
  236. package/lib/index.js +19 -0
  237. package/lib/javascript/BasicEvaluatedExpression.js +1 -0
  238. package/lib/javascript/EnableChunkLoadingPlugin.js +1 -0
  239. package/lib/javascript/JavascriptGenerator.js +6 -2
  240. package/lib/javascript/JavascriptModule.js +54 -0
  241. package/lib/javascript/JavascriptModulesPlugin.js +257 -102
  242. package/lib/javascript/JavascriptParser.js +286 -159
  243. package/lib/json/JsonModule.js +40 -0
  244. package/lib/json/JsonModulesPlugin.js +7 -0
  245. package/lib/json/JsonParser.js +4 -2
  246. package/lib/library/AssignLibraryPlugin.js +5 -3
  247. package/lib/library/ExportPropertyLibraryPlugin.js +1 -0
  248. package/lib/library/FalseIIFEUmdWarning.js +1 -0
  249. package/lib/library/ModuleLibraryPlugin.js +54 -29
  250. package/lib/library/SystemLibraryPlugin.js +3 -3
  251. package/lib/node/NodeTargetPlugin.js +1 -0
  252. package/lib/node/NodeWatchFileSystem.js +38 -22
  253. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -9
  254. package/lib/node/RequireChunkLoadingRuntimeModule.js +18 -16
  255. package/lib/optimize/ConcatenatedModule.js +397 -78
  256. package/lib/optimize/ConstExportsPlugin.js +211 -0
  257. package/lib/optimize/InlineExports.js +178 -0
  258. package/lib/optimize/InnerGraph.js +372 -275
  259. package/lib/optimize/InnerGraphPlugin.js +196 -99
  260. package/lib/optimize/ModuleConcatenationPlugin.js +56 -25
  261. package/lib/optimize/RealContentHashPlugin.js +14 -1
  262. package/lib/optimize/SideEffectsFlagPlugin.js +234 -64
  263. package/lib/runtime/AsyncModuleRuntimeModule.js +32 -30
  264. package/lib/runtime/AutoPublicPathRuntimeModule.js +11 -5
  265. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -1
  266. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +6 -4
  267. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +33 -4
  268. package/lib/runtime/GetChunkFilenameRuntimeModule.js +82 -3
  269. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  270. package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -1
  271. package/lib/runtime/LoadScriptRuntimeModule.js +18 -13
  272. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +39 -26
  273. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -1
  274. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  275. package/lib/runtime/RelativeUrlRuntimeModule.js +3 -2
  276. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -1
  277. package/lib/runtime/StartupEntrypointRuntimeModule.js +4 -3
  278. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  279. package/lib/schemes/HttpUriPlugin.js +3 -2
  280. package/lib/serialization/AggregateErrorSerializer.js +7 -6
  281. package/lib/serialization/ArraySerializer.js +4 -8
  282. package/lib/serialization/BinaryMiddleware.js +538 -468
  283. package/lib/serialization/DateObjectSerializer.js +2 -2
  284. package/lib/serialization/ErrorObjectSerializer.js +7 -6
  285. package/lib/serialization/MapObjectSerializer.js +5 -9
  286. package/lib/serialization/NullPrototypeObjectSerializer.js +7 -9
  287. package/lib/serialization/ObjectMiddleware.js +50 -13
  288. package/lib/serialization/PlainObjectSerializer.js +9 -8
  289. package/lib/serialization/RegExpObjectSerializer.js +2 -2
  290. package/lib/serialization/Serializer.js +1 -0
  291. package/lib/serialization/SetObjectSerializer.js +4 -8
  292. package/lib/sharing/ConsumeSharedModule.js +6 -7
  293. package/lib/sharing/ConsumeSharedPlugin.js +1 -0
  294. package/lib/sharing/ConsumeSharedRuntimeModule.js +46 -41
  295. package/lib/sharing/ProvideSharedDependency.js +30 -15
  296. package/lib/sharing/ProvideSharedModule.js +30 -11
  297. package/lib/sharing/ProvideSharedPlugin.js +4 -2
  298. package/lib/sharing/SharePlugin.js +3 -0
  299. package/lib/sharing/ShareRuntimeModule.js +18 -16
  300. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  301. package/lib/sharing/utils.js +1 -1
  302. package/lib/stats/DefaultStatsFactoryPlugin.js +4 -6
  303. package/lib/stats/DefaultStatsPrinterPlugin.js +14 -14
  304. package/lib/stats/StatsFactory.js +11 -9
  305. package/lib/stats/StatsPrinter.js +9 -2
  306. package/lib/url/URLParserPlugin.js +5 -2
  307. package/lib/util/AsyncQueue.js +10 -0
  308. package/lib/util/LazyBucketSortedSet.js +5 -0
  309. package/lib/util/LazySet.js +6 -4
  310. package/lib/util/LocConverter.js +11 -1
  311. package/lib/util/Semaphore.js +1 -0
  312. package/lib/util/SourceProcessor.js +106 -0
  313. package/lib/util/TupleSet.js +1 -0
  314. package/lib/util/WeakTupleMap.js +27 -1
  315. package/lib/util/chainedImports.js +3 -3
  316. package/lib/util/comparators.js +2 -2
  317. package/lib/util/concatenate.js +31 -7
  318. package/lib/util/createHash.js +0 -1
  319. package/lib/util/deterministicGrouping.js +19 -12
  320. package/lib/util/extractSourceMap.js +1 -1
  321. package/lib/util/findGraphRoots.js +2 -0
  322. package/lib/util/fs.js +16 -6
  323. package/lib/util/hash/DebugHash.js +1 -0
  324. package/lib/util/hash/hash-digest.js +24 -15
  325. package/lib/util/identifier.js +7 -0
  326. package/lib/util/internalSerializables.js +11 -2
  327. package/lib/util/magicComment.js +42 -0
  328. package/lib/util/makeSerializable.js +1 -0
  329. package/lib/util/nonNumericOnlyHash.js +30 -1
  330. package/lib/util/property.js +7 -1
  331. package/lib/util/publicPathPlaceholder.js +64 -0
  332. package/lib/util/registerExternalSerializer.js +4 -4
  333. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  334. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +1 -1
  335. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +1 -96
  336. package/lib/wasm-async/AsyncWebAssemblyParser.js +1 -1
  337. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +1 -1
  338. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  339. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +1 -0
  340. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +6 -3
  341. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -1
  342. package/lib/wasm-sync/WebAssemblyGenerator.js +1 -0
  343. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +2 -0
  344. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -0
  345. package/lib/wasm-sync/WebAssemblyParser.js +7 -3
  346. package/lib/web/JsonpChunkLoadingRuntimeModule.js +45 -39
  347. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +11 -10
  348. package/package.json +36 -28
  349. package/schemas/WebpackOptions.check.js +1 -1
  350. package/schemas/WebpackOptions.json +212 -3
  351. package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -1
  352. package/schemas/plugins/HtmlParserOptions.check.d.ts +7 -0
  353. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  354. package/schemas/plugins/HtmlParserOptions.json +3 -0
  355. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  356. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  357. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  358. package/types.d.ts +1592 -314
  359. package/lib/css/walkCssTokens.js +0 -2020
  360. package/lib/util/AppendOnlyStackedSet.js +0 -93
@@ -77,8 +77,34 @@ class CssInjectStyleRuntimeModule extends RuntimeModule {
77
77
  _runtimeRequirements &&
78
78
  _runtimeRequirements.has(RuntimeGlobals.scriptNonce);
79
79
 
80
+ const cst = runtimeTemplate.renderConst();
81
+ const isNeutralPlatform = runtimeTemplate.isNeutralPlatform();
82
+ // universal targets run in node too: collect styles for SSR retrieval
83
+ // instead of touching a DOM that isn't there
84
+ const injectGuard = isNeutralPlatform
85
+ ? [
86
+ "if (typeof document === 'undefined') {",
87
+ Template.indent([
88
+ `${runtimeTemplate.cssServerStyleRegistry()}[identifier] = css;`,
89
+ "return;"
90
+ ]),
91
+ "}"
92
+ ]
93
+ : [];
94
+ const removeGuard = isNeutralPlatform
95
+ ? [
96
+ "if (typeof document === 'undefined') {",
97
+ Template.indent([
98
+ `${cst} styles = ${runtimeTemplate.cssServerStyleRegistry()};`,
99
+ "for (var i = 0; i < identifiers.length; i++) delete styles[identifiers[i]];",
100
+ "return;"
101
+ ]),
102
+ "}"
103
+ ]
104
+ : [];
105
+
80
106
  const createStyleElementCode = Template.asString([
81
- "var style = document.createElement('style');",
107
+ `${cst} style = document.createElement('style');`,
82
108
  "",
83
109
  ...(withScriptNonce
84
110
  ? [
@@ -93,7 +119,7 @@ class CssInjectStyleRuntimeModule extends RuntimeModule {
93
119
  ]);
94
120
 
95
121
  return Template.asString([
96
- `var dataWebpackPrefix = ${uniqueName ? JSON.stringify(`${uniqueName}:`) : '"webpack:"'};`,
122
+ `${cst} dataWebpackPrefix = ${uniqueName ? JSON.stringify(`${uniqueName}:`) : '"webpack:"'};`,
97
123
  "",
98
124
  "function getDataWebpackId(identifier) {",
99
125
  Template.indent("return dataWebpackPrefix + identifier;"),
@@ -101,10 +127,10 @@ class CssInjectStyleRuntimeModule extends RuntimeModule {
101
127
  "",
102
128
  "function findStyleElement(identifier) {",
103
129
  Template.indent([
104
- "var elements = document.getElementsByTagName('style');",
130
+ `${cst} elements = document.getElementsByTagName('style');`,
105
131
  "for (var i = 0; i < elements.length; i++) {",
106
132
  Template.indent([
107
- "var el = elements[i];",
133
+ `${cst} el = elements[i];`,
108
134
  "if (el.getAttribute('data-webpack') === getDataWebpackId(identifier)) {",
109
135
  Template.indent("return el;"),
110
136
  "}"
@@ -130,7 +156,8 @@ class CssInjectStyleRuntimeModule extends RuntimeModule {
130
156
  `${RuntimeGlobals.cssInjectStyle} = ${runtimeTemplate.basicFunction(
131
157
  "identifier, css",
132
158
  [
133
- "var element = findStyleElement(identifier) || insertStyleElement(identifier);",
159
+ ...injectGuard,
160
+ `${cst} element = findStyleElement(identifier) || insertStyleElement(identifier);`,
134
161
  "element.textContent = css;"
135
162
  ]
136
163
  )};`,
@@ -151,11 +178,12 @@ class CssInjectStyleRuntimeModule extends RuntimeModule {
151
178
  "removedModules",
152
179
  [
153
180
  "if (!removedModules) return;",
154
- "var identifiers = Array.isArray(removedModules) ? removedModules : [removedModules];",
181
+ `${cst} identifiers = Array.isArray(removedModules) ? removedModules : [removedModules];`,
182
+ ...removeGuard,
155
183
  "for (var i = 0; i < identifiers.length; i++) {",
156
184
  Template.indent([
157
- "var identifier = identifiers[i];",
158
- "var element = findStyleElement(identifier);",
185
+ `${cst} identifier = identifiers[i];`,
186
+ `${cst} element = findStyleElement(identifier);`,
159
187
  "if (element) {",
160
188
  Template.indent("removeStyleElement(element);"),
161
189
  "}"
@@ -60,6 +60,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
60
60
  constructor(runtimeRequirements) {
61
61
  super("css loading", 10);
62
62
 
63
+ /** @type {ReadOnlyRuntimeRequirements} */
63
64
  this._runtimeRequirements = runtimeRequirements;
64
65
  }
65
66
 
@@ -78,7 +79,8 @@ class CssLoadingRuntimeModule extends RuntimeModule {
78
79
  crossOriginLoading,
79
80
  uniqueName,
80
81
  chunkLoadTimeout: loadTimeout,
81
- charset
82
+ charset,
83
+ importMetaName
82
84
  }
83
85
  } = compilation;
84
86
  const fn = RuntimeGlobals.ensureChunkHandlers;
@@ -171,39 +173,42 @@ class CssLoadingRuntimeModule extends RuntimeModule {
171
173
  : ""
172
174
  ]);
173
175
 
176
+ const cst = runtimeTemplate.renderConst();
177
+ const lt = runtimeTemplate.renderLet();
178
+ const installedChunksObject = `{\n${Template.indent(
179
+ Array.from(initialChunkIds, (id) => `${JSON.stringify(id)}: 0`).join(
180
+ ",\n"
181
+ )
182
+ )}\n}`;
174
183
  return Template.asString([
175
184
  "// object to store loaded and loading chunks",
176
185
  "// undefined = chunk not loaded, null = chunk preloaded/prefetched",
177
186
  "// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded",
178
- `var installedChunks = ${
179
- stateExpression ? `${stateExpression} = ${stateExpression} || ` : ""
180
- }{`,
181
- Template.indent(
182
- Array.from(initialChunkIds, (id) => `${JSON.stringify(id)}: 0`).join(
183
- ",\n"
184
- )
185
- ),
186
- "};",
187
+ `${cst} installedChunks = ${
188
+ stateExpression
189
+ ? runtimeTemplate.assignOr(stateExpression, installedChunksObject)
190
+ : installedChunksObject
191
+ };`,
187
192
  "",
188
193
  uniqueName
189
- ? `var uniqueName = ${JSON.stringify(
194
+ ? `${cst} uniqueName = ${JSON.stringify(
190
195
  runtimeTemplate.outputOptions.uniqueName
191
196
  )};`
192
197
  : "// data-webpack is not used as build has no uniqueName",
193
198
  withLoading || withHmr
194
199
  ? Template.asString([
195
- 'var loadingAttribute = "data-webpack-loading";',
196
- `var loadStylesheet = ${runtimeTemplate.basicFunction(
200
+ `${cst} loadingAttribute = "data-webpack-loading";`,
201
+ `${cst} loadStylesheet = ${runtimeTemplate.basicFunction(
197
202
  `chunkId, url, done${
198
203
  withFetchPriority ? ", fetchPriority" : ""
199
204
  }${withHmr ? ", hmr" : ""}`,
200
205
  [
201
- 'var link, needAttach, key = "chunk-" + chunkId;',
206
+ `${lt} link, needAttach, key = "chunk-" + chunkId;`,
202
207
  withHmr ? "if(!hmr) {" : "",
203
- 'var links = document.getElementsByTagName("link");',
208
+ `${cst} links = document.getElementsByTagName("link");`,
204
209
  "for(var i = 0; i < links.length; i++) {",
205
210
  Template.indent([
206
- "var l = links[i];",
211
+ `${cst} l = links[i];`,
207
212
  `if(l.rel == "stylesheet" && (${
208
213
  withHmr
209
214
  ? 'l.href.startsWith(url) || l.getAttribute("href").startsWith(url)'
@@ -223,7 +228,8 @@ class CssLoadingRuntimeModule extends RuntimeModule {
223
228
  createStylesheet.call(code, /** @type {Chunk} */ (this.chunk))
224
229
  ]),
225
230
  "}",
226
- `var onLinkComplete = ${runtimeTemplate.basicFunction(
231
+ `${lt} timeout;`,
232
+ `${cst} onLinkComplete = ${runtimeTemplate.basicFunction(
227
233
  "prev, event",
228
234
  Template.asString([
229
235
  "link.onerror = link.onload = null;",
@@ -236,7 +242,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
236
242
  )};`,
237
243
  "if(link.getAttribute(loadingAttribute)) {",
238
244
  Template.indent([
239
- `var timeout = setTimeout(onLinkComplete.bind(null, undefined, { type: 'timeout', target: link }), ${loadTimeout});`,
245
+ `timeout = setTimeout(onLinkComplete.bind(null, undefined, { type: 'timeout', target: link }), ${loadTimeout});`,
240
246
  "link.onerror = onLinkComplete.bind(null, link.onerror);",
241
247
  "link.onload = onLinkComplete.bind(null, link.onload);"
242
248
  ]),
@@ -273,7 +279,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
273
279
  `chunkId, promises${withFetchPriority ? " , fetchPriority" : ""}`,
274
280
  [
275
281
  "// css chunk loading",
276
- `var installedChunkData = ${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;`,
282
+ `${lt} installedChunkData = ${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;`,
277
283
  'if(installedChunkData !== 0) { // 0 means "already installed".',
278
284
  Template.indent([
279
285
  "",
@@ -287,17 +293,17 @@ class CssLoadingRuntimeModule extends RuntimeModule {
287
293
  : `if(${hasCssMatcher("chunkId")}) {`,
288
294
  Template.indent([
289
295
  "// setup Promise in chunk cache",
290
- `var promise = new Promise(${runtimeTemplate.expressionFunction(
296
+ `${cst} promise = new Promise(${runtimeTemplate.expressionFunction(
291
297
  "installedChunkData = installedChunks[chunkId] = [resolve, reject]",
292
298
  "resolve, reject"
293
299
  )});`,
294
300
  "promises.push(installedChunkData[2] = promise);",
295
301
  "",
296
302
  "// start chunk loading",
297
- `var url = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkCssFilename}(chunkId);`,
303
+ `${cst} url = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkCssFilename}(chunkId);`,
298
304
  "// create error before stack unwound to get useful stacktrace later",
299
- "var error = new Error();",
300
- `var loadingEnded = ${runtimeTemplate.basicFunction(
305
+ `${cst} error = new Error();`,
306
+ `${cst} loadingEnded = ${runtimeTemplate.basicFunction(
301
307
  "event",
302
308
  [
303
309
  `if(${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId)) {`,
@@ -308,8 +314,8 @@ class CssLoadingRuntimeModule extends RuntimeModule {
308
314
  Template.indent([
309
315
  'if(event.type !== "load") {',
310
316
  Template.indent([
311
- "var errorType = event && event.type;",
312
- "var realHref = event && event.target && event.target.href;",
317
+ `${cst} errorType = event && event.type;`,
318
+ `${cst} realHref = event && event.target && event.target.href;`,
313
319
  "error.message = 'Loading css chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realHref + ')';",
314
320
  "error.name = 'ChunkLoadError';",
315
321
  "error.type = errorType;",
@@ -337,7 +343,25 @@ class CssLoadingRuntimeModule extends RuntimeModule {
337
343
  });`
338
344
  ]),
339
345
  isNeutralPlatform
340
- ? "} else { loadingEnded({ type: 'load' }); }"
346
+ ? Template.asString([
347
+ "} else {",
348
+ Template.indent([
349
+ // no DOM (Node SSR): read the emitted CSS via dynamic import('fs') (works on every node), collect it; never reject on a missing file
350
+ `Promise.all([import('fs'), import('url')]).then(${runtimeTemplate.basicFunction(
351
+ "[{ readFile }, { URL }]",
352
+ [
353
+ `readFile(new URL(url, ${importMetaName}.url), 'utf8', ${runtimeTemplate.basicFunction(
354
+ "err, content",
355
+ [
356
+ `if (!err) ${runtimeTemplate.cssServerStyleRegistry()}["chunk-" + chunkId] = content;`,
357
+ "loadingEnded({ type: 'load' });"
358
+ ]
359
+ )});`
360
+ ]
361
+ )});`
362
+ ]),
363
+ "}"
364
+ ])
341
365
  : ""
342
366
  ]),
343
367
  "} else installedChunks[chunkId] = 0;"
@@ -361,12 +385,13 @@ class CssLoadingRuntimeModule extends RuntimeModule {
361
385
  }) {`,
362
386
  Template.indent([
363
387
  "installedChunks[chunkId] = null;",
388
+ // prefetch is a browser-only resource hint; no-op without a DOM (e.g. node side of a universal build)
364
389
  isNeutralPlatform
365
390
  ? "if (typeof document === 'undefined') return;"
366
391
  : "",
367
392
  linkPrefetch.call(
368
393
  Template.asString([
369
- "var link = document.createElement('link');",
394
+ `${cst} link = document.createElement('link');`,
370
395
  charset ? "link.charset = 'utf-8';" : "",
371
396
  crossOriginLoading
372
397
  ? `link.crossOrigin = ${JSON.stringify(
@@ -401,12 +426,13 @@ class CssLoadingRuntimeModule extends RuntimeModule {
401
426
  }) {`,
402
427
  Template.indent([
403
428
  "installedChunks[chunkId] = null;",
429
+ // preload is a browser-only resource hint; no-op without a DOM (e.g. node side of a universal build)
404
430
  isNeutralPlatform
405
431
  ? "if (typeof document === 'undefined') return;"
406
432
  : "",
407
433
  linkPreload.call(
408
434
  Template.asString([
409
- "var link = document.createElement('link');",
435
+ `${cst} link = document.createElement('link');`,
410
436
  charset ? "link.charset = 'utf-8';" : "",
411
437
  `if (${RuntimeGlobals.scriptNonce}) {`,
412
438
  Template.indent(
@@ -439,26 +465,26 @@ class CssLoadingRuntimeModule extends RuntimeModule {
439
465
  : "// no preloaded",
440
466
  withHmr
441
467
  ? Template.asString([
442
- "var oldTags = [];",
443
- "var newTags = [];",
444
- `var applyHandler = ${runtimeTemplate.basicFunction("options", [
445
- `return { dispose: ${runtimeTemplate.basicFunction("", [
468
+ `${cst} oldTags = [];`,
469
+ `${cst} newTags = [];`,
470
+ `${cst} applyHandler = ${runtimeTemplate.basicFunction("options", [
471
+ `return { ${runtimeTemplate.method("dispose", "", [
446
472
  "while(oldTags.length) {",
447
473
  Template.indent([
448
- "var oldTag = oldTags.pop();",
449
- "if(oldTag && oldTag.parentNode) oldTag.parentNode.removeChild(oldTag);"
474
+ `${cst} oldTag = oldTags.pop();`,
475
+ `if(${runtimeTemplate.optionalChaining("oldTag", "parentNode")}) oldTag.parentNode.removeChild(oldTag);`
450
476
  ]),
451
477
  "}"
452
- ])}, apply: ${runtimeTemplate.basicFunction("", [
478
+ ])}, ${runtimeTemplate.method("apply", "", [
453
479
  "while(newTags.length) {",
454
480
  Template.indent([
455
- "var newTag = newTags.pop();",
481
+ `${cst} newTag = newTags.pop();`,
456
482
  "newTag.sheet.disabled = false"
457
483
  ]),
458
484
  "}"
459
485
  ])} };`
460
486
  ])}`,
461
- `var cssTextKey = ${runtimeTemplate.returningFunction(
487
+ `${cst} cssTextKey = ${runtimeTemplate.returningFunction(
462
488
  `Array.from(link.sheet.cssRules, ${runtimeTemplate.returningFunction(
463
489
  "r.cssText",
464
490
  "r"
@@ -471,33 +497,78 @@ class CssLoadingRuntimeModule extends RuntimeModule {
471
497
  "chunkIds, removedChunks, removedModules, promises, applyHandlers, updatedModulesList, css",
472
498
  [
473
499
  isNeutralPlatform
474
- ? "if (typeof document === 'undefined') return;"
500
+ ? Template.asString([
501
+ "if (typeof document === 'undefined') {",
502
+ Template.indent([
503
+ // node SSR: refresh the server style registry from the re-emitted CSS instead of touching the DOM
504
+ `${cst} cssRemovedChunks = css && css.r;`,
505
+ `${cst} registry = ${runtimeTemplate.cssServerStyleRegistry()};`,
506
+ `chunkIds.forEach(${runtimeTemplate.basicFunction(
507
+ "chunkId",
508
+ [
509
+ `${cst} key = "chunk-" + chunkId;`,
510
+ `if(${runtimeTemplate.optionalChaining(
511
+ "cssRemovedChunks",
512
+ "indexOf(chunkId)"
513
+ )} >= 0) { delete registry[key]; return; }`,
514
+ `${cst} url = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkCssFilename}(chunkId);`,
515
+ `promises.push(Promise.all([import('fs'), import('url')]).then(${runtimeTemplate.basicFunction(
516
+ "[{ readFile }, { URL }]",
517
+ [
518
+ `return new Promise(${runtimeTemplate.basicFunction(
519
+ "resolve",
520
+ [
521
+ // best-effort: a non-file publicPath (e.g. a CDN) can't be read from disk, so skip
522
+ "try {",
523
+ Template.indent([
524
+ `readFile(new URL(url, ${importMetaName}.url), 'utf8', ${runtimeTemplate.basicFunction(
525
+ "err, content",
526
+ [
527
+ "if (!err) registry[key] = content;",
528
+ "resolve();"
529
+ ]
530
+ )});`
531
+ ]),
532
+ "} catch (e) { resolve(); }"
533
+ ]
534
+ )});`
535
+ ]
536
+ )}));`
537
+ ]
538
+ )});`,
539
+ "return;"
540
+ ]),
541
+ "}"
542
+ ])
475
543
  : "",
476
544
  "applyHandlers.push(applyHandler);",
477
545
  "// Read CSS removed chunks from update manifest",
478
- "var cssRemovedChunks = css && css.r;",
546
+ `${cst} cssRemovedChunks = css && css.r;`,
479
547
  `chunkIds.forEach(${runtimeTemplate.basicFunction("chunkId", [
480
- `var filename = ${RuntimeGlobals.getChunkCssFilename}(chunkId);`,
481
- `var url = ${RuntimeGlobals.publicPath} + filename;`,
482
- "var oldTag = loadStylesheet(chunkId, url);",
548
+ `${cst} filename = ${RuntimeGlobals.getChunkCssFilename}(chunkId);`,
549
+ `${cst} url = ${RuntimeGlobals.publicPath} + filename;`,
550
+ `${cst} oldTag = loadStylesheet(chunkId, url);`,
483
551
  `if(!oldTag && !${withHmr} ) return;`,
484
552
  "// Skip if CSS was removed",
485
- "if(cssRemovedChunks && cssRemovedChunks.indexOf(chunkId) >= 0) {",
553
+ `if(${runtimeTemplate.optionalChaining(
554
+ "cssRemovedChunks",
555
+ "indexOf(chunkId)"
556
+ )} >= 0) {`,
486
557
  Template.indent(["oldTags.push(oldTag);", "return;"]),
487
558
  "}",
488
559
  "",
489
560
  "// create error before stack unwound to get useful stacktrace later",
490
- "var error = new Error();",
561
+ `${cst} error = new Error();`,
491
562
  `promises.push(new Promise(${runtimeTemplate.basicFunction(
492
563
  "resolve, reject",
493
564
  [
494
- `var link = loadStylesheet(chunkId, url + (url.indexOf("?") < 0 ? "?" : "&") + "hmr=" + Date.now(), ${runtimeTemplate.basicFunction(
565
+ `${cst} link = loadStylesheet(chunkId, url + (url.indexOf("?") < 0 ? "?" : "&") + "hmr=" + Date.now(), ${runtimeTemplate.basicFunction(
495
566
  "event",
496
567
  [
497
568
  'if(event.type !== "load") {',
498
569
  Template.indent([
499
- "var errorType = event && event.type;",
500
- "var realHref = event && event.target && event.target.href;",
570
+ `${cst} errorType = event && event.type;`,
571
+ `${cst} realHref = event && event.target && event.target.href;`,
501
572
  "error.message = 'Loading css hot update chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realHref + ')';",
502
573
  "error.name = 'ChunkLoadError';",
503
574
  "error.type = errorType;",
@@ -8,11 +8,14 @@
8
8
  const NormalModule = require("../NormalModule");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
+ /** @typedef {import("../DependencyTemplate").CssData} CssData */
11
12
  /** @typedef {import("../Module")} Module */
13
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
14
+ /** @typedef {import("../NormalModule").NormalModuleBuildInfo} NormalModuleBuildInfo */
12
15
  /** @typedef {import("../NormalModule").NormalModuleCreateData} NormalModuleCreateData */
13
16
  /** @typedef {import("../RequestShortener")} RequestShortener */
14
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
15
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
17
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[CssLayer, Supports, Media, Inheritance | undefined, CssParserExportType | undefined]>} ObjectDeserializerContext */
18
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[CssLayer, Supports, Media, Inheritance | undefined, CssParserExportType | undefined]>} ObjectSerializerContext */
16
19
  /** @typedef {import("../../declarations/WebpackOptions").CssParserExportType} CssParserExportType */
17
20
 
18
21
  /** @typedef {string | undefined} CssLayer */
@@ -23,6 +26,24 @@ const makeSerializable = require("../util/makeSerializable");
23
26
 
24
27
  /** @typedef {NormalModuleCreateData & { cssLayer: CssLayer, supports: Supports, media: Media, inheritance?: Inheritance, exportType?: CssParserExportType }} CssModuleCreateData */
25
28
 
29
+ /**
30
+ * Defines the build info properties specific to css modules.
31
+ * @typedef {object} KnownCssModuleBuildInfo
32
+ * @property {CssData=} cssData
33
+ * @property {string=} charset charset at-rule
34
+ */
35
+
36
+ /** @typedef {NormalModuleBuildInfo & KnownCssModuleBuildInfo} CssModuleBuildInfo */
37
+
38
+ /**
39
+ * Defines the build meta properties specific to css modules.
40
+ * @typedef {object} KnownCssModuleBuildMeta
41
+ * @property {boolean=} isCssModule
42
+ * @property {boolean=} needIdInConcatenation
43
+ */
44
+
45
+ /** @typedef {BuildMeta & KnownCssModuleBuildMeta} CssModuleBuildMeta */
46
+
26
47
  class CssModule extends NormalModule {
27
48
  /**
28
49
  * Creates an instance of CssModule.
@@ -31,6 +52,12 @@ class CssModule extends NormalModule {
31
52
  constructor(options) {
32
53
  super(options);
33
54
 
55
+ // Redeclared with the css specific shape
56
+ /** @type {CssModuleBuildInfo | undefined} */
57
+ this.buildInfo = undefined;
58
+ /** @type {CssModuleBuildMeta | undefined} */
59
+ this.buildMeta = undefined;
60
+
34
61
  // Avoid override `layer` for `Module` class, because it is a feature to run module in specific layer
35
62
  /** @type {CssModuleCreateData['cssLayer']} */
36
63
  this.cssLayer = options.cssLayer;
@@ -64,14 +91,13 @@ class CssModule extends NormalModule {
64
91
  }
65
92
 
66
93
  if (this.inheritance) {
67
- const inheritance = this.inheritance.map(
68
- (item, index) =>
69
- `inheritance_${index}|${item[0] || ""}|${item[1] || ""}|${
70
- item[2] || ""
71
- }`
72
- );
73
-
74
- identifier += `|${inheritance.join("|")}`;
94
+ // Append directly — same bytes as `|` + items.join("|"), without the
95
+ // intermediate `.map()` array + per-item strings (`identifier()` is
96
+ // uncached and called repeatedly per module).
97
+ for (let i = 0; i < this.inheritance.length; i++) {
98
+ const item = this.inheritance[i];
99
+ identifier += `|inheritance_${i}|${item[0] || ""}|${item[1] || ""}|${item[2] || ""}`;
100
+ }
75
101
  }
76
102
 
77
103
  if (this.exportType) {
@@ -137,12 +163,12 @@ class CssModule extends NormalModule {
137
163
  * @param {ObjectSerializerContext} context context
138
164
  */
139
165
  serialize(context) {
140
- const { write } = context;
141
- write(this.cssLayer);
142
- write(this.supports);
143
- write(this.media);
144
- write(this.inheritance);
145
- write(this.exportType);
166
+ context
167
+ .write(this.cssLayer)
168
+ .write(this.supports)
169
+ .write(this.media)
170
+ .write(this.inheritance)
171
+ .write(this.exportType);
146
172
  super.serialize(context);
147
173
  }
148
174
 
@@ -185,13 +211,16 @@ class CssModule extends NormalModule {
185
211
  * @param {ObjectDeserializerContext} context context
186
212
  */
187
213
  deserialize(context) {
188
- const { read } = context;
189
- this.cssLayer = read();
190
- this.supports = read();
191
- this.media = read();
192
- this.inheritance = read();
193
- this.exportType = read();
194
- super.deserialize(context);
214
+ this.cssLayer = context.read();
215
+ const c1 = context.rest;
216
+ this.supports = c1.read();
217
+ const c2 = c1.rest;
218
+ this.media = c2.read();
219
+ const c3 = c2.rest;
220
+ this.inheritance = c3.read();
221
+ const c4 = c3.rest;
222
+ this.exportType = c4.read();
223
+ super.deserialize(c4.rest);
195
224
  }
196
225
  }
197
226