webpack 5.76.1 → 5.88.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 (436) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +4 -0
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +12 -8
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +79 -44
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DllEntryPlugin.js +16 -1
  38. package/lib/DllModule.js +17 -2
  39. package/lib/DllModuleFactory.js +1 -1
  40. package/lib/DllReferencePlugin.js +13 -1
  41. package/lib/Entrypoint.js +1 -1
  42. package/lib/ErrorHelpers.js +62 -22
  43. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  44. package/lib/ExportsInfo.js +20 -3
  45. package/lib/ExportsInfoApiPlugin.js +30 -14
  46. package/lib/ExternalModule.js +30 -9
  47. package/lib/FileSystemInfo.js +9 -1
  48. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  49. package/lib/FlagDependencyExportsPlugin.js +336 -348
  50. package/lib/FlagDependencyUsagePlugin.js +9 -9
  51. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  52. package/lib/HookWebpackError.js +1 -1
  53. package/lib/HotModuleReplacementPlugin.js +60 -46
  54. package/lib/IgnoreErrorModuleFactory.js +1 -1
  55. package/lib/InitFragment.js +28 -5
  56. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  57. package/lib/LibManifestPlugin.js +22 -5
  58. package/lib/LoaderOptionsPlugin.js +12 -2
  59. package/lib/MainTemplate.js +2 -2
  60. package/lib/Module.js +44 -12
  61. package/lib/ModuleBuildError.js +9 -0
  62. package/lib/ModuleDependencyError.js +4 -2
  63. package/lib/ModuleDependencyWarning.js +4 -2
  64. package/lib/ModuleError.js +9 -0
  65. package/lib/ModuleFactory.js +1 -1
  66. package/lib/ModuleFilenameHelpers.js +114 -4
  67. package/lib/ModuleGraph.js +33 -23
  68. package/lib/ModuleGraphConnection.js +19 -6
  69. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  70. package/lib/ModuleNotFoundError.js +5 -2
  71. package/lib/ModuleParseError.js +9 -0
  72. package/lib/ModuleProfile.js +1 -0
  73. package/lib/ModuleRestoreError.js +2 -0
  74. package/lib/ModuleStoreError.js +2 -1
  75. package/lib/ModuleTypeConstants.js +169 -0
  76. package/lib/ModuleWarning.js +9 -0
  77. package/lib/MultiWatching.js +4 -0
  78. package/lib/NodeStuffPlugin.js +65 -35
  79. package/lib/NormalModule.js +12 -2
  80. package/lib/NormalModuleFactory.js +56 -8
  81. package/lib/NormalModuleReplacementPlugin.js +5 -3
  82. package/lib/NullFactory.js +1 -1
  83. package/lib/PrefetchPlugin.js +4 -0
  84. package/lib/ProgressPlugin.js +71 -15
  85. package/lib/ProvidePlugin.js +30 -14
  86. package/lib/RawModule.js +13 -2
  87. package/lib/RecordIdsPlugin.js +4 -4
  88. package/lib/RequireJsStuffPlugin.js +22 -15
  89. package/lib/RuntimeGlobals.js +5 -0
  90. package/lib/RuntimeModule.js +12 -11
  91. package/lib/RuntimePlugin.js +10 -3
  92. package/lib/RuntimeTemplate.js +29 -11
  93. package/lib/SelfModuleFactory.js +12 -0
  94. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  95. package/lib/SourceMapDevToolPlugin.js +47 -11
  96. package/lib/Template.js +5 -3
  97. package/lib/UseStrictPlugin.js +29 -11
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  99. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  100. package/lib/WatchIgnorePlugin.js +4 -0
  101. package/lib/WebpackError.js +14 -5
  102. package/lib/WebpackIsIncludedPlugin.js +22 -13
  103. package/lib/WebpackOptionsApply.js +41 -44
  104. package/lib/WebpackOptionsDefaulter.js +10 -3
  105. package/lib/asset/AssetGenerator.js +24 -9
  106. package/lib/asset/AssetModulesPlugin.js +28 -12
  107. package/lib/asset/AssetParser.js +15 -7
  108. package/lib/asset/AssetSourceParser.js +8 -3
  109. package/lib/asset/RawDataUrlModule.js +15 -4
  110. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  111. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  112. package/lib/cache/IdleFileCachePlugin.js +2 -1
  113. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  114. package/lib/cache/PackFileCacheStrategy.js +42 -15
  115. package/lib/cache/ResolverCachePlugin.js +3 -0
  116. package/lib/config/browserslistTargetHandler.js +10 -10
  117. package/lib/config/defaults.js +306 -105
  118. package/lib/config/normalization.js +110 -71
  119. package/lib/config/target.js +37 -10
  120. package/lib/container/ContainerEntryModule.js +11 -1
  121. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  122. package/lib/container/ContainerExposedDependency.js +9 -0
  123. package/lib/container/ContainerPlugin.js +3 -1
  124. package/lib/container/FallbackDependency.js +13 -0
  125. package/lib/container/FallbackItemDependency.js +3 -0
  126. package/lib/container/FallbackModule.js +12 -2
  127. package/lib/container/FallbackModuleFactory.js +1 -1
  128. package/lib/container/RemoteModule.js +11 -1
  129. package/lib/container/RemoteRuntimeModule.js +3 -2
  130. package/lib/container/RemoteToExternalDependency.js +3 -0
  131. package/lib/css/CssExportsGenerator.js +9 -0
  132. package/lib/css/CssGenerator.js +5 -1
  133. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  134. package/lib/css/CssModulesPlugin.js +253 -74
  135. package/lib/css/CssParser.js +697 -282
  136. package/lib/css/walkCssTokens.js +269 -138
  137. package/lib/debug/ProfilingPlugin.js +33 -12
  138. package/lib/dependencies/AMDDefineDependency.js +54 -10
  139. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  140. package/lib/dependencies/AMDPlugin.js +33 -20
  141. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  142. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  143. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  144. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  145. package/lib/dependencies/AMDRequireDependency.js +16 -1
  146. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  147. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  148. package/lib/dependencies/CachedConstDependency.js +14 -0
  149. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  150. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  151. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  152. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  153. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  154. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  155. package/lib/dependencies/CommonJsPlugin.js +51 -26
  156. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  157. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  158. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  159. package/lib/dependencies/ConstDependency.js +11 -2
  160. package/lib/dependencies/ContextDependency.js +15 -2
  161. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  162. package/lib/dependencies/ContextElementDependency.js +8 -0
  163. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  164. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  165. package/lib/dependencies/CssExportDependency.js +8 -0
  166. package/lib/dependencies/CssImportDependency.js +55 -3
  167. package/lib/dependencies/CssLocalIdentifierDependency.js +15 -1
  168. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  169. package/lib/dependencies/CssUrlDependency.js +46 -16
  170. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  171. package/lib/dependencies/DllEntryDependency.js +14 -0
  172. package/lib/dependencies/DynamicExports.js +10 -6
  173. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  174. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  175. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  176. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  177. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  178. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  179. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  180. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  181. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  182. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  183. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  184. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  185. package/lib/dependencies/HarmonyExports.js +11 -5
  186. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  187. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  188. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  189. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  190. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  191. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  192. package/lib/dependencies/ImportContextDependency.js +15 -0
  193. package/lib/dependencies/ImportDependency.js +15 -4
  194. package/lib/dependencies/ImportEagerDependency.js +7 -4
  195. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  196. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  197. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  198. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  199. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  200. package/lib/dependencies/ImportParserPlugin.js +83 -25
  201. package/lib/dependencies/ImportPlugin.js +21 -7
  202. package/lib/dependencies/ImportWeakDependency.js +7 -4
  203. package/lib/dependencies/JsonExportsDependency.js +9 -1
  204. package/lib/dependencies/LocalModule.js +16 -0
  205. package/lib/dependencies/LocalModuleDependency.js +15 -0
  206. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  207. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  208. package/lib/dependencies/ModuleDependency.js +9 -1
  209. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  210. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  211. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  212. package/lib/dependencies/PrefetchDependency.js +3 -0
  213. package/lib/dependencies/ProvidedDependency.js +14 -2
  214. package/lib/dependencies/PureExpressionDependency.js +10 -1
  215. package/lib/dependencies/RequireContextDependency.js +6 -0
  216. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  217. package/lib/dependencies/RequireContextPlugin.js +19 -6
  218. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  219. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  220. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  221. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  222. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  223. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  224. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  225. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  226. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  227. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  228. package/lib/dependencies/RequireResolveDependency.js +6 -0
  229. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  230. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  231. package/lib/dependencies/StaticExportsDependency.js +8 -0
  232. package/lib/dependencies/SystemPlugin.js +48 -21
  233. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  234. package/lib/dependencies/URLDependency.js +13 -4
  235. package/lib/dependencies/URLPlugin.js +31 -18
  236. package/lib/dependencies/UnsupportedDependency.js +13 -0
  237. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  238. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  239. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  240. package/lib/dependencies/WorkerDependency.js +47 -3
  241. package/lib/dependencies/WorkerPlugin.js +105 -32
  242. package/lib/dependencies/getFunctionExpression.js +7 -0
  243. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  244. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  245. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  246. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  247. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  248. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  249. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  250. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  251. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  252. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  253. package/lib/ids/IdHelpers.js +6 -0
  254. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  255. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  256. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  257. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  258. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  259. package/lib/index.js +8 -0
  260. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  261. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  262. package/lib/javascript/ChunkHelpers.js +2 -2
  263. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  264. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  265. package/lib/javascript/JavascriptModulesPlugin.js +194 -194
  266. package/lib/javascript/JavascriptParser.js +941 -256
  267. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  268. package/lib/javascript/StartupHelpers.js +2 -2
  269. package/lib/json/JsonData.js +26 -1
  270. package/lib/json/JsonGenerator.js +21 -7
  271. package/lib/json/JsonModulesPlugin.js +14 -5
  272. package/lib/json/JsonParser.js +27 -13
  273. package/lib/library/AbstractLibraryPlugin.js +4 -0
  274. package/lib/library/AmdLibraryPlugin.js +22 -6
  275. package/lib/library/AssignLibraryPlugin.js +6 -4
  276. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  277. package/lib/library/ModuleLibraryPlugin.js +8 -4
  278. package/lib/library/SystemLibraryPlugin.js +1 -0
  279. package/lib/library/UmdLibraryPlugin.js +4 -0
  280. package/lib/logging/runtime.js +1 -1
  281. package/lib/logging/truncateArgs.js +4 -0
  282. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  283. package/lib/node/NodeTargetPlugin.js +3 -0
  284. package/lib/node/NodeTemplatePlugin.js +10 -2
  285. package/lib/node/NodeWatchFileSystem.js +1 -1
  286. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  287. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  288. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  289. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  290. package/lib/node/nodeConsole.js +2 -4
  291. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  292. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  293. package/lib/optimize/ConcatenatedModule.js +8 -6
  294. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  295. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  296. package/lib/optimize/InnerGraph.js +5 -5
  297. package/lib/optimize/InnerGraphPlugin.js +57 -48
  298. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  299. package/lib/optimize/MangleExportsPlugin.js +1 -1
  300. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  301. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  302. package/lib/optimize/RealContentHashPlugin.js +86 -30
  303. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  304. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  305. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  306. package/lib/optimize/SplitChunksPlugin.js +71 -31
  307. package/lib/performance/SizeLimitsPlugin.js +7 -4
  308. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  309. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  310. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  311. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  312. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  313. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  314. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  315. package/lib/rules/RuleSetCompiler.js +3 -3
  316. package/lib/rules/UseEffectRulePlugin.js +6 -4
  317. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  318. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  319. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  320. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  321. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  322. package/lib/runtime/CompatRuntimeModule.js +7 -2
  323. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  324. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  325. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  326. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  327. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  328. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  329. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  330. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  331. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  332. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  333. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  334. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  335. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  336. package/lib/runtime/NonceRuntimeModule.js +1 -1
  337. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  338. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  339. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  340. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  341. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  342. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  343. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  344. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  345. package/lib/schemes/DataUriPlugin.js +16 -3
  346. package/lib/schemes/HttpUriPlugin.js +38 -0
  347. package/lib/serialization/ArraySerializer.js +22 -6
  348. package/lib/serialization/BinaryMiddleware.js +164 -1
  349. package/lib/serialization/DateObjectSerializer.js +15 -4
  350. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  351. package/lib/serialization/FileMiddleware.js +17 -0
  352. package/lib/serialization/MapObjectSerializer.js +24 -8
  353. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  354. package/lib/serialization/ObjectMiddleware.js +33 -2
  355. package/lib/serialization/PlainObjectSerializer.js +23 -12
  356. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  357. package/lib/serialization/SetObjectSerializer.js +21 -6
  358. package/lib/serialization/types.js +1 -1
  359. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  360. package/lib/sharing/ConsumeSharedModule.js +13 -2
  361. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  362. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  363. package/lib/sharing/ProvideSharedDependency.js +17 -0
  364. package/lib/sharing/ProvideSharedModule.js +11 -1
  365. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  366. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  367. package/lib/sharing/ShareRuntimeModule.js +19 -9
  368. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  369. package/lib/sharing/utils.js +320 -7
  370. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  371. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  372. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  373. package/lib/util/AsyncQueue.js +4 -2
  374. package/lib/util/LazySet.js +10 -2
  375. package/lib/util/MapHelpers.js +19 -5
  376. package/lib/util/ParallelismFactorCalculator.js +10 -0
  377. package/lib/util/Semaphore.js +1 -1
  378. package/lib/util/StackedCacheMap.js +6 -0
  379. package/lib/util/StringXor.js +51 -0
  380. package/lib/util/binarySearchBounds.js +49 -0
  381. package/lib/util/compileBooleanMatcher.js +31 -0
  382. package/lib/util/createHash.js +35 -13
  383. package/lib/util/deprecation.js +18 -3
  384. package/lib/util/deterministicGrouping.js +50 -11
  385. package/lib/util/findGraphRoots.js +4 -2
  386. package/lib/util/hash/md4.js +2 -2
  387. package/lib/util/hash/xxhash64.js +1 -1
  388. package/lib/util/identifier.js +4 -0
  389. package/lib/util/internalSerializables.js +1 -0
  390. package/lib/util/makeSerializable.js +7 -0
  391. package/lib/util/memoize.js +3 -3
  392. package/lib/util/numberHash.js +75 -21
  393. package/lib/util/processAsyncTree.js +7 -1
  394. package/lib/util/propertyAccess.js +9 -54
  395. package/lib/util/propertyName.js +79 -0
  396. package/lib/util/registerExternalSerializer.js +1 -1
  397. package/lib/util/runtime.js +14 -1
  398. package/lib/util/semver.js +1 -1
  399. package/lib/util/serialization.js +10 -0
  400. package/lib/util/smartGrouping.js +1 -1
  401. package/lib/validateSchema.js +6 -2
  402. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  403. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  404. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  405. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  406. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  407. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  408. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  409. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  410. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  411. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  412. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  413. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  414. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  415. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  416. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  417. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  418. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  419. package/lib/webpack.js +12 -3
  420. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  421. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  422. package/module.d.ts +55 -37
  423. package/package.json +59 -56
  424. package/schemas/WebpackOptions.check.js +1 -1
  425. package/schemas/WebpackOptions.json +132 -5
  426. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  427. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  428. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  429. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  430. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  431. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  432. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  433. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  434. package/schemas/plugins/css/CssParserOptions.json +1 -1
  435. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  436. package/types.d.ts +1608 -667
@@ -5,14 +5,24 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
11
+ JAVASCRIPT_MODULE_TYPE_ESM
12
+ } = require("./ModuleTypeConstants");
8
13
  const CachedConstDependency = require("./dependencies/CachedConstDependency");
9
14
  const ConstDependency = require("./dependencies/ConstDependency");
10
15
  const { evaluateToString } = require("./javascript/JavascriptParserHelpers");
11
16
  const { parseResource } = require("./util/identifier");
12
17
 
13
- /** @typedef {import("estree").Expression} ExpressionNode */
14
- /** @typedef {import("estree").Super} SuperNode */
18
+ /** @typedef {import("estree").Expression} Expression */
19
+ /** @typedef {import("estree").SourceLocation} SourceLocation */
20
+ /** @typedef {import("estree").Statement} Statement */
21
+ /** @typedef {import("estree").Super} Super */
15
22
  /** @typedef {import("./Compiler")} Compiler */
23
+ /** @typedef {import("./javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
24
+ /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
25
+ /** @typedef {import("./javascript/JavascriptParser").Range} Range */
16
26
 
17
27
  const collectDeclaration = (declarations, pattern) => {
18
28
  const stack = [pattern];
@@ -108,6 +118,8 @@ const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
108
118
  return Array.from(declarations);
109
119
  };
110
120
 
121
+ const PLUGIN_NAME = "ConstPlugin";
122
+
111
123
  class ConstPlugin {
112
124
  /**
113
125
  * Apply the plugin
@@ -117,7 +129,7 @@ class ConstPlugin {
117
129
  apply(compiler) {
118
130
  const cachedParseResource = parseResource.bindCache(compiler.root);
119
131
  compiler.hooks.compilation.tap(
120
- "ConstPlugin",
132
+ PLUGIN_NAME,
121
133
  (compilation, { normalModuleFactory }) => {
122
134
  compilation.dependencyTemplates.set(
123
135
  ConstDependency,
@@ -129,15 +141,21 @@ class ConstPlugin {
129
141
  new CachedConstDependency.Template()
130
142
  );
131
143
 
144
+ /**
145
+ * @param {JavascriptParser} parser the parser
146
+ */
132
147
  const handler = parser => {
133
- parser.hooks.statementIf.tap("ConstPlugin", statement => {
148
+ parser.hooks.statementIf.tap(PLUGIN_NAME, statement => {
134
149
  if (parser.scope.isAsmJs) return;
135
150
  const param = parser.evaluateExpression(statement.test);
136
151
  const bool = param.asBool();
137
152
  if (typeof bool === "boolean") {
138
153
  if (!param.couldHaveSideEffects()) {
139
- const dep = new ConstDependency(`${bool}`, param.range);
140
- dep.loc = statement.loc;
154
+ const dep = new ConstDependency(
155
+ `${bool}`,
156
+ /** @type {Range} */ (param.range)
157
+ );
158
+ dep.loc = /** @type {SourceLocation} */ (statement.loc);
141
159
  parser.state.module.addPresentationalDependency(dep);
142
160
  } else {
143
161
  parser.walkExpression(statement.test);
@@ -193,24 +211,27 @@ class ConstPlugin {
193
211
  }
194
212
  const dep = new ConstDependency(
195
213
  replacement,
196
- branchToRemove.range
214
+ /** @type {Range} */ (branchToRemove.range)
197
215
  );
198
- dep.loc = branchToRemove.loc;
216
+ dep.loc = /** @type {SourceLocation} */ (branchToRemove.loc);
199
217
  parser.state.module.addPresentationalDependency(dep);
200
218
  }
201
219
  return bool;
202
220
  }
203
221
  });
204
222
  parser.hooks.expressionConditionalOperator.tap(
205
- "ConstPlugin",
223
+ PLUGIN_NAME,
206
224
  expression => {
207
225
  if (parser.scope.isAsmJs) return;
208
226
  const param = parser.evaluateExpression(expression.test);
209
227
  const bool = param.asBool();
210
228
  if (typeof bool === "boolean") {
211
229
  if (!param.couldHaveSideEffects()) {
212
- const dep = new ConstDependency(` ${bool}`, param.range);
213
- dep.loc = expression.loc;
230
+ const dep = new ConstDependency(
231
+ ` ${bool}`,
232
+ /** @type {Range} */ (param.range)
233
+ );
234
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
214
235
  parser.state.module.addPresentationalDependency(dep);
215
236
  } else {
216
237
  parser.walkExpression(expression.test);
@@ -229,15 +250,18 @@ class ConstPlugin {
229
250
  const branchToRemove = bool
230
251
  ? expression.alternate
231
252
  : expression.consequent;
232
- const dep = new ConstDependency("0", branchToRemove.range);
233
- dep.loc = branchToRemove.loc;
253
+ const dep = new ConstDependency(
254
+ "0",
255
+ /** @type {Range} */ (branchToRemove.range)
256
+ );
257
+ dep.loc = /** @type {SourceLocation} */ (branchToRemove.loc);
234
258
  parser.state.module.addPresentationalDependency(dep);
235
259
  return bool;
236
260
  }
237
261
  }
238
262
  );
239
263
  parser.hooks.expressionLogicalOperator.tap(
240
- "ConstPlugin",
264
+ PLUGIN_NAME,
241
265
  expression => {
242
266
  if (parser.scope.isAsmJs) return;
243
267
  if (
@@ -306,8 +330,11 @@ class ConstPlugin {
306
330
  //
307
331
  // returnfalse&&'foo'
308
332
  //
309
- const dep = new ConstDependency(` ${bool}`, param.range);
310
- dep.loc = expression.loc;
333
+ const dep = new ConstDependency(
334
+ ` ${bool}`,
335
+ /** @type {Range} */ (param.range)
336
+ );
337
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
311
338
  parser.state.module.addPresentationalDependency(dep);
312
339
  } else {
313
340
  parser.walkExpression(expression.left);
@@ -315,9 +342,9 @@ class ConstPlugin {
315
342
  if (!keepRight) {
316
343
  const dep = new ConstDependency(
317
344
  "0",
318
- expression.right.range
345
+ /** @type {Range} */ (expression.right.range)
319
346
  );
320
- dep.loc = expression.loc;
347
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
321
348
  parser.state.module.addPresentationalDependency(dep);
322
349
  }
323
350
  return keepRight;
@@ -356,15 +383,18 @@ class ConstPlugin {
356
383
  //
357
384
  // returnnull??'foo'
358
385
  //
359
- const dep = new ConstDependency(" null", param.range);
360
- dep.loc = expression.loc;
386
+ const dep = new ConstDependency(
387
+ " null",
388
+ /** @type {Range} */ (param.range)
389
+ );
390
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
361
391
  parser.state.module.addPresentationalDependency(dep);
362
392
  } else {
363
393
  const dep = new ConstDependency(
364
394
  "0",
365
- expression.right.range
395
+ /** @type {Range} */ (expression.right.range)
366
396
  );
367
- dep.loc = expression.loc;
397
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
368
398
  parser.state.module.addPresentationalDependency(dep);
369
399
  parser.walkExpression(expression.left);
370
400
  }
@@ -374,10 +404,10 @@ class ConstPlugin {
374
404
  }
375
405
  }
376
406
  );
377
- parser.hooks.optionalChaining.tap("ConstPlugin", expr => {
378
- /** @type {ExpressionNode[]} */
407
+ parser.hooks.optionalChaining.tap(PLUGIN_NAME, expr => {
408
+ /** @type {Expression[]} */
379
409
  const optionalExpressionsStack = [];
380
- /** @type {ExpressionNode|SuperNode} */
410
+ /** @type {Expression | Super} */
381
411
  let next = expr.expression;
382
412
 
383
413
  while (
@@ -388,7 +418,7 @@ class ConstPlugin {
388
418
  if (next.optional) {
389
419
  // SuperNode can not be optional
390
420
  optionalExpressionsStack.push(
391
- /** @type {ExpressionNode} */ (next.object)
421
+ /** @type {Expression} */ (next.object)
392
422
  );
393
423
  }
394
424
  next = next.object;
@@ -396,7 +426,7 @@ class ConstPlugin {
396
426
  if (next.optional) {
397
427
  // SuperNode can not be optional
398
428
  optionalExpressionsStack.push(
399
- /** @type {ExpressionNode} */ (next.callee)
429
+ /** @type {Expression} */ (next.callee)
400
430
  );
401
431
  }
402
432
  next = next.callee;
@@ -405,7 +435,9 @@ class ConstPlugin {
405
435
 
406
436
  while (optionalExpressionsStack.length) {
407
437
  const expression = optionalExpressionsStack.pop();
408
- const evaluated = parser.evaluateExpression(expression);
438
+ const evaluated = parser.evaluateExpression(
439
+ /** @type {Expression} */ (expression)
440
+ );
409
441
 
410
442
  if (evaluated.asNullish()) {
411
443
  // ------------------------------------------
@@ -420,8 +452,11 @@ class ConstPlugin {
420
452
  //
421
453
  // ------------------------------------------
422
454
  //
423
- const dep = new ConstDependency(" undefined", expr.range);
424
- dep.loc = expr.loc;
455
+ const dep = new ConstDependency(
456
+ " undefined",
457
+ /** @type {Range} */ (expr.range)
458
+ );
459
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
425
460
  parser.state.module.addPresentationalDependency(dep);
426
461
  return true;
427
462
  }
@@ -429,7 +464,7 @@ class ConstPlugin {
429
464
  });
430
465
  parser.hooks.evaluateIdentifier
431
466
  .for("__resourceQuery")
432
- .tap("ConstPlugin", expr => {
467
+ .tap(PLUGIN_NAME, expr => {
433
468
  if (parser.scope.isAsmJs) return;
434
469
  if (!parser.state.module) return;
435
470
  return evaluateToString(
@@ -438,24 +473,24 @@ class ConstPlugin {
438
473
  });
439
474
  parser.hooks.expression
440
475
  .for("__resourceQuery")
441
- .tap("ConstPlugin", expr => {
476
+ .tap(PLUGIN_NAME, expr => {
442
477
  if (parser.scope.isAsmJs) return;
443
478
  if (!parser.state.module) return;
444
479
  const dep = new CachedConstDependency(
445
480
  JSON.stringify(
446
481
  cachedParseResource(parser.state.module.resource).query
447
482
  ),
448
- expr.range,
483
+ /** @type {Range} */ (expr.range),
449
484
  "__resourceQuery"
450
485
  );
451
- dep.loc = expr.loc;
486
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
452
487
  parser.state.module.addPresentationalDependency(dep);
453
488
  return true;
454
489
  });
455
490
 
456
491
  parser.hooks.evaluateIdentifier
457
492
  .for("__resourceFragment")
458
- .tap("ConstPlugin", expr => {
493
+ .tap(PLUGIN_NAME, expr => {
459
494
  if (parser.scope.isAsmJs) return;
460
495
  if (!parser.state.module) return;
461
496
  return evaluateToString(
@@ -464,31 +499,31 @@ class ConstPlugin {
464
499
  });
465
500
  parser.hooks.expression
466
501
  .for("__resourceFragment")
467
- .tap("ConstPlugin", expr => {
502
+ .tap(PLUGIN_NAME, expr => {
468
503
  if (parser.scope.isAsmJs) return;
469
504
  if (!parser.state.module) return;
470
505
  const dep = new CachedConstDependency(
471
506
  JSON.stringify(
472
507
  cachedParseResource(parser.state.module.resource).fragment
473
508
  ),
474
- expr.range,
509
+ /** @type {Range} */ (expr.range),
475
510
  "__resourceFragment"
476
511
  );
477
- dep.loc = expr.loc;
512
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
478
513
  parser.state.module.addPresentationalDependency(dep);
479
514
  return true;
480
515
  });
481
516
  };
482
517
 
483
518
  normalModuleFactory.hooks.parser
484
- .for("javascript/auto")
485
- .tap("ConstPlugin", handler);
519
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
520
+ .tap(PLUGIN_NAME, handler);
486
521
  normalModuleFactory.hooks.parser
487
- .for("javascript/dynamic")
488
- .tap("ConstPlugin", handler);
522
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
523
+ .tap(PLUGIN_NAME, handler);
489
524
  normalModuleFactory.hooks.parser
490
- .for("javascript/esm")
491
- .tap("ConstPlugin", handler);
525
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
526
+ .tap(PLUGIN_NAME, handler);
492
527
  }
493
528
  );
494
529
  }
@@ -9,6 +9,7 @@ const { OriginalSource, RawSource } = require("webpack-sources");
9
9
  const AsyncDependenciesBlock = require("./AsyncDependenciesBlock");
10
10
  const { makeWebpackError } = require("./HookWebpackError");
11
11
  const Module = require("./Module");
12
+ const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
12
13
  const RuntimeGlobals = require("./RuntimeGlobals");
13
14
  const Template = require("./Template");
14
15
  const WebpackError = require("./WebpackError");
@@ -42,6 +43,8 @@ const makeSerializable = require("./util/makeSerializable");
42
43
  /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
43
44
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
44
45
  /** @typedef {import("./dependencies/ContextElementDependency")} ContextElementDependency */
46
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
47
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
45
48
  /** @template T @typedef {import("./util/LazySet")<T>} LazySet<T> */
46
49
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
47
50
 
@@ -60,7 +63,8 @@ const makeSerializable = require("./util/makeSerializable");
60
63
  * @property {RawChunkGroupOptions=} groupOptions
61
64
  * @property {string=} typePrefix
62
65
  * @property {string=} category
63
- * @property {string[][]=} referencedExports exports referenced from modules (won't be mangled)
66
+ * @property {(string[][] | null)=} referencedExports exports referenced from modules (won't be mangled)
67
+ * @property {string=} layer
64
68
  */
65
69
 
66
70
  /**
@@ -104,8 +108,9 @@ class ContextModule extends Module {
104
108
  const resourceQuery = (options && options.resourceQuery) || parsed.query;
105
109
  const resourceFragment =
106
110
  (options && options.resourceFragment) || parsed.fragment;
111
+ const layer = options && options.layer;
107
112
 
108
- super("javascript/dynamic", resource);
113
+ super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, resource, layer);
109
114
  /** @type {ContextModuleOptions} */
110
115
  this.options = {
111
116
  ...options,
@@ -114,7 +119,7 @@ class ContextModule extends Module {
114
119
  resourceFragment
115
120
  };
116
121
  } else {
117
- super("javascript/dynamic");
122
+ super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, undefined, options.layer);
118
123
  /** @type {ContextModuleOptions} */
119
124
  this.options = {
120
125
  ...options,
@@ -226,6 +231,9 @@ class ContextModule extends Module {
226
231
  } else if (this.options.namespaceObject) {
227
232
  identifier += "|namespace object";
228
233
  }
234
+ if (this.layer) {
235
+ identifier += `|layer: ${this.layer}`;
236
+ }
229
237
 
230
238
  return identifier;
231
239
  }
@@ -637,7 +645,7 @@ class ContextModule extends Module {
637
645
 
638
646
  getReturn(type, asyncModule) {
639
647
  if (type === 9) {
640
- return "__webpack_require__(id)";
648
+ return `${RuntimeGlobals.require}(id)`;
641
649
  }
642
650
  return `${RuntimeGlobals.createFakeNamespaceObject}(id, ${type}${
643
651
  asyncModule ? " | 16" : ""
@@ -796,7 +804,7 @@ module.exports = webpackAsyncContext;`;
796
804
  ? `${arrow ? "id =>" : "function(id)"} {
797
805
  ${this.getReturnModuleObjectSource(fakeMap)}
798
806
  }`
799
- : "__webpack_require__";
807
+ : RuntimeGlobals.require;
800
808
  return `var map = ${JSON.stringify(map, null, "\t")};
801
809
  ${this.getFakeMapInitStatement(fakeMap)}
802
810
 
@@ -847,7 +855,7 @@ module.exports = webpackAsyncContext;`;
847
855
  ? `${arrow ? "id =>" : "function(id)"} {
848
856
  ${this.getReturnModuleObjectSource(fakeMap, true)};
849
857
  }`
850
- : "__webpack_require__";
858
+ : RuntimeGlobals.require;
851
859
 
852
860
  return `var map = ${JSON.stringify(map, null, "\t")};
853
861
  ${this.getFakeMapInitStatement(fakeMap)}
@@ -1150,6 +1158,9 @@ module.exports = webpackEmptyAsyncContext;`;
1150
1158
  return size;
1151
1159
  }
1152
1160
 
1161
+ /**
1162
+ * @param {ObjectSerializerContext} context context
1163
+ */
1153
1164
  serialize(context) {
1154
1165
  const { write } = context;
1155
1166
  write(this._identifier);
@@ -1157,6 +1168,9 @@ module.exports = webpackEmptyAsyncContext;`;
1157
1168
  super.serialize(context);
1158
1169
  }
1159
1170
 
1171
+ /**
1172
+ * @param {ObjectDeserializerContext} context context
1173
+ */
1160
1174
  deserialize(context) {
1161
1175
  const { read } = context;
1162
1176
  this._identifier = read();
@@ -80,7 +80,7 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
80
80
 
81
81
  /**
82
82
  * @param {ModuleFactoryCreateData} data data object
83
- * @param {function(Error=, ModuleFactoryResult=): void} callback callback
83
+ * @param {function((Error | null)=, ModuleFactoryResult=): void} callback callback
84
84
  * @returns {void}
85
85
  */
86
86
  create(data, callback) {
@@ -95,6 +95,7 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
95
95
  {
96
96
  context: context,
97
97
  dependencies: dependencies,
98
+ layer: data.contextInfo.issuerLayer,
98
99
  resolveOptions,
99
100
  fileDependencies,
100
101
  missingDependencies,
@@ -8,7 +8,15 @@
8
8
  const ContextElementDependency = require("./dependencies/ContextElementDependency");
9
9
  const { join } = require("./util/fs");
10
10
 
11
+ /** @typedef {import("./Compiler")} Compiler */
12
+
11
13
  class ContextReplacementPlugin {
14
+ /**
15
+ * @param {RegExp} resourceRegExp A regular expression that determines which files will be selected
16
+ * @param {TODO=} newContentResource A new resource to replace the match
17
+ * @param {TODO=} newContentRecursive If true, all subdirectories are searched for matches
18
+ * @param {TODO=} newContentRegExp A regular expression that determines which files will be selected
19
+ */
12
20
  constructor(
13
21
  resourceRegExp,
14
22
  newContentResource,
@@ -49,6 +57,11 @@ class ContextReplacementPlugin {
49
57
  }
50
58
  }
51
59
 
60
+ /**
61
+ * Apply the plugin
62
+ * @param {Compiler} compiler the compiler instance
63
+ * @returns {void}
64
+ */
52
65
  apply(compiler) {
53
66
  const resourceRegExp = this.resourceRegExp;
54
67
  const newContentCallback = this.newContentCallback;
@@ -0,0 +1,169 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Alexander Krasnoyarov @alexander-akait
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const NormalModule = require("./NormalModule");
9
+ const makeSerializable = require("./util/makeSerializable");
10
+
11
+ /** @typedef {import("./Module")} Module */
12
+ /** @typedef {import("./NormalModule").NormalModuleCreateData} NormalModuleCreateData */
13
+ /** @typedef {import("./RequestShortener")} RequestShortener */
14
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
15
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
16
+
17
+ /** @typedef {string|undefined} CssLayer */
18
+ /** @typedef {string|undefined} Supports */
19
+ /** @typedef {string|undefined} Media */
20
+ /** @typedef {[CssLayer?, Supports?, Media?]} InheritanceItem */
21
+ /** @typedef {Array<InheritanceItem>} Inheritance */
22
+
23
+ /** @typedef {NormalModuleCreateData & { cssLayer: CssLayer|null, supports: Supports|null, media: Media|null, inheritance: Inheritance|null }} CSSModuleCreateData */
24
+
25
+ class CssModule extends NormalModule {
26
+ /**
27
+ * @param {CSSModuleCreateData} options options object
28
+ */
29
+ constructor(options) {
30
+ super(options);
31
+
32
+ // Avoid override `layer` for `Module` class, because it is a feature to run module in specific layer
33
+ this.cssLayer = options.cssLayer;
34
+ this.supports = options.supports;
35
+ this.media = options.media;
36
+ this.inheritance = options.inheritance;
37
+ }
38
+
39
+ /**
40
+ * @returns {string} a unique identifier of the module
41
+ */
42
+ identifier() {
43
+ let identifier = super.identifier();
44
+
45
+ if (this.cssLayer) {
46
+ identifier += `|${this.cssLayer}`;
47
+ }
48
+
49
+ if (this.supports) {
50
+ identifier += `|${this.supports}`;
51
+ }
52
+
53
+ if (this.media) {
54
+ identifier += `|${this.media}`;
55
+ }
56
+
57
+ if (this.inheritance) {
58
+ const inheritance = this.inheritance.map(
59
+ (item, index) =>
60
+ `inheritance_${index}|${item[0] || ""}|${item[1] || ""}|${
61
+ item[2] || ""
62
+ }`
63
+ );
64
+
65
+ identifier += `|${inheritance.join("|")}`;
66
+ }
67
+
68
+ return identifier;
69
+ }
70
+
71
+ /**
72
+ * @param {RequestShortener} requestShortener the request shortener
73
+ * @returns {string} a user readable identifier of the module
74
+ */
75
+ readableIdentifier(requestShortener) {
76
+ const readableIdentifier = super.readableIdentifier(requestShortener);
77
+
78
+ let identifier = `css ${readableIdentifier}`;
79
+
80
+ if (this.cssLayer) {
81
+ identifier += ` (layer: ${this.cssLayer})`;
82
+ }
83
+
84
+ if (this.supports) {
85
+ identifier += ` (supports: ${this.supports})`;
86
+ }
87
+
88
+ if (this.media) {
89
+ identifier += ` (media: ${this.media})`;
90
+ }
91
+
92
+ return identifier;
93
+ }
94
+
95
+ /**
96
+ * Assuming this module is in the cache. Update the (cached) module with
97
+ * the fresh module from the factory. Usually updates internal references
98
+ * and properties.
99
+ * @param {Module} module fresh module
100
+ * @returns {void}
101
+ */
102
+ updateCacheModule(module) {
103
+ super.updateCacheModule(module);
104
+ const m = /** @type {CssModule} */ (module);
105
+ this.cssLayer = m.cssLayer;
106
+ this.supports = m.supports;
107
+ this.media = m.media;
108
+ this.inheritance = m.inheritance;
109
+ }
110
+
111
+ /**
112
+ * @param {ObjectSerializerContext} context context
113
+ */
114
+ serialize(context) {
115
+ const { write } = context;
116
+ write(this.cssLayer);
117
+ write(this.supports);
118
+ write(this.media);
119
+ write(this.inheritance);
120
+ super.serialize(context);
121
+ }
122
+
123
+ /**
124
+ * @param {ObjectDeserializerContext} context context
125
+ * @returns {CssModule} the deserialized object
126
+ */
127
+ static deserialize(context) {
128
+ const obj = new CssModule({
129
+ // will be deserialized by Module
130
+ layer: null,
131
+ type: "",
132
+ // will be filled by updateCacheModule
133
+ resource: "",
134
+ context: "",
135
+ request: null,
136
+ userRequest: null,
137
+ rawRequest: null,
138
+ loaders: null,
139
+ matchResource: null,
140
+ parser: null,
141
+ parserOptions: null,
142
+ generator: null,
143
+ generatorOptions: null,
144
+ resolveOptions: null,
145
+ cssLayer: null,
146
+ supports: null,
147
+ media: null,
148
+ inheritance: null
149
+ });
150
+ obj.deserialize(context);
151
+ return obj;
152
+ }
153
+
154
+ /**
155
+ * @param {ObjectDeserializerContext} context context
156
+ */
157
+ deserialize(context) {
158
+ const { read } = context;
159
+ this.cssLayer = read();
160
+ this.supports = read();
161
+ this.media = read();
162
+ this.inheritance = read();
163
+ super.deserialize(context);
164
+ }
165
+ }
166
+
167
+ makeSerializable(CssModule, "webpack/lib/CssModule");
168
+
169
+ module.exports = CssModule;