webpack 5.76.1 → 5.88.2

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 (442) 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 +6 -1
  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 +18 -14
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +95 -47
  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/DependencyTemplates.js +1 -1
  38. package/lib/DllEntryPlugin.js +16 -1
  39. package/lib/DllModule.js +17 -2
  40. package/lib/DllModuleFactory.js +1 -1
  41. package/lib/DllReferencePlugin.js +13 -1
  42. package/lib/Entrypoint.js +1 -1
  43. package/lib/ErrorHelpers.js +62 -22
  44. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  45. package/lib/ExportsInfo.js +25 -4
  46. package/lib/ExportsInfoApiPlugin.js +30 -14
  47. package/lib/ExternalModule.js +30 -9
  48. package/lib/FileSystemInfo.js +61 -25
  49. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  50. package/lib/FlagDependencyExportsPlugin.js +336 -348
  51. package/lib/FlagDependencyUsagePlugin.js +9 -9
  52. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  53. package/lib/Generator.js +7 -0
  54. package/lib/HookWebpackError.js +1 -1
  55. package/lib/HotModuleReplacementPlugin.js +60 -46
  56. package/lib/IgnoreErrorModuleFactory.js +1 -1
  57. package/lib/InitFragment.js +28 -5
  58. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  59. package/lib/LibManifestPlugin.js +22 -5
  60. package/lib/LoaderOptionsPlugin.js +12 -2
  61. package/lib/MainTemplate.js +2 -2
  62. package/lib/Module.js +44 -12
  63. package/lib/ModuleBuildError.js +9 -0
  64. package/lib/ModuleDependencyError.js +4 -2
  65. package/lib/ModuleDependencyWarning.js +4 -2
  66. package/lib/ModuleError.js +9 -0
  67. package/lib/ModuleFactory.js +1 -1
  68. package/lib/ModuleFilenameHelpers.js +114 -4
  69. package/lib/ModuleGraph.js +33 -23
  70. package/lib/ModuleGraphConnection.js +19 -6
  71. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  72. package/lib/ModuleNotFoundError.js +5 -2
  73. package/lib/ModuleParseError.js +9 -0
  74. package/lib/ModuleProfile.js +1 -0
  75. package/lib/ModuleRestoreError.js +2 -0
  76. package/lib/ModuleStoreError.js +2 -1
  77. package/lib/ModuleTypeConstants.js +169 -0
  78. package/lib/ModuleWarning.js +9 -0
  79. package/lib/MultiWatching.js +4 -0
  80. package/lib/NodeStuffPlugin.js +65 -35
  81. package/lib/NormalModule.js +12 -2
  82. package/lib/NormalModuleFactory.js +56 -8
  83. package/lib/NormalModuleReplacementPlugin.js +5 -3
  84. package/lib/NullFactory.js +1 -1
  85. package/lib/PrefetchPlugin.js +4 -0
  86. package/lib/ProgressPlugin.js +71 -15
  87. package/lib/ProvidePlugin.js +30 -14
  88. package/lib/RawModule.js +13 -2
  89. package/lib/RecordIdsPlugin.js +4 -4
  90. package/lib/RequireJsStuffPlugin.js +22 -15
  91. package/lib/RuntimeGlobals.js +5 -0
  92. package/lib/RuntimeModule.js +12 -11
  93. package/lib/RuntimePlugin.js +10 -3
  94. package/lib/RuntimeTemplate.js +29 -11
  95. package/lib/SelfModuleFactory.js +12 -0
  96. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  97. package/lib/SourceMapDevToolPlugin.js +47 -11
  98. package/lib/Template.js +5 -3
  99. package/lib/UseStrictPlugin.js +29 -11
  100. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  101. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  102. package/lib/WatchIgnorePlugin.js +4 -0
  103. package/lib/Watching.js +62 -25
  104. package/lib/WebpackError.js +14 -5
  105. package/lib/WebpackIsIncludedPlugin.js +22 -13
  106. package/lib/WebpackOptionsApply.js +41 -44
  107. package/lib/WebpackOptionsDefaulter.js +10 -3
  108. package/lib/asset/AssetGenerator.js +24 -9
  109. package/lib/asset/AssetModulesPlugin.js +28 -12
  110. package/lib/asset/AssetParser.js +15 -7
  111. package/lib/asset/AssetSourceParser.js +8 -3
  112. package/lib/asset/RawDataUrlModule.js +15 -4
  113. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  114. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  115. package/lib/buildChunkGraph.js +37 -21
  116. package/lib/cache/IdleFileCachePlugin.js +2 -1
  117. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  118. package/lib/cache/PackFileCacheStrategy.js +59 -22
  119. package/lib/cache/ResolverCachePlugin.js +3 -0
  120. package/lib/config/browserslistTargetHandler.js +10 -10
  121. package/lib/config/defaults.js +306 -105
  122. package/lib/config/normalization.js +110 -71
  123. package/lib/config/target.js +37 -10
  124. package/lib/container/ContainerEntryModule.js +11 -1
  125. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  126. package/lib/container/ContainerExposedDependency.js +9 -0
  127. package/lib/container/ContainerPlugin.js +3 -1
  128. package/lib/container/FallbackDependency.js +13 -0
  129. package/lib/container/FallbackItemDependency.js +3 -0
  130. package/lib/container/FallbackModule.js +12 -2
  131. package/lib/container/FallbackModuleFactory.js +1 -1
  132. package/lib/container/RemoteModule.js +11 -1
  133. package/lib/container/RemoteRuntimeModule.js +3 -2
  134. package/lib/container/RemoteToExternalDependency.js +3 -0
  135. package/lib/css/CssExportsGenerator.js +9 -0
  136. package/lib/css/CssGenerator.js +5 -1
  137. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  138. package/lib/css/CssModulesPlugin.js +253 -74
  139. package/lib/css/CssParser.js +697 -282
  140. package/lib/css/walkCssTokens.js +269 -138
  141. package/lib/debug/ProfilingPlugin.js +33 -12
  142. package/lib/dependencies/AMDDefineDependency.js +54 -10
  143. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  144. package/lib/dependencies/AMDPlugin.js +33 -20
  145. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  146. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  147. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  148. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  149. package/lib/dependencies/AMDRequireDependency.js +16 -1
  150. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  151. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  152. package/lib/dependencies/CachedConstDependency.js +14 -0
  153. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  154. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  155. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  156. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  157. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  158. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  159. package/lib/dependencies/CommonJsPlugin.js +51 -26
  160. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  161. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  162. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  163. package/lib/dependencies/ConstDependency.js +11 -2
  164. package/lib/dependencies/ContextDependency.js +15 -2
  165. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  166. package/lib/dependencies/ContextElementDependency.js +8 -0
  167. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  168. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  169. package/lib/dependencies/CssExportDependency.js +8 -0
  170. package/lib/dependencies/CssImportDependency.js +55 -3
  171. package/lib/dependencies/CssLocalIdentifierDependency.js +18 -1
  172. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  173. package/lib/dependencies/CssUrlDependency.js +46 -16
  174. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  175. package/lib/dependencies/DllEntryDependency.js +14 -0
  176. package/lib/dependencies/DynamicExports.js +10 -6
  177. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  178. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  179. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  180. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  181. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  182. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  183. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  184. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  185. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  186. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  187. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  188. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  189. package/lib/dependencies/HarmonyExports.js +11 -5
  190. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  191. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  192. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  193. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  194. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  195. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  196. package/lib/dependencies/ImportContextDependency.js +15 -0
  197. package/lib/dependencies/ImportDependency.js +15 -4
  198. package/lib/dependencies/ImportEagerDependency.js +7 -4
  199. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  200. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  201. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  202. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  203. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  204. package/lib/dependencies/ImportParserPlugin.js +83 -25
  205. package/lib/dependencies/ImportPlugin.js +21 -7
  206. package/lib/dependencies/ImportWeakDependency.js +7 -4
  207. package/lib/dependencies/JsonExportsDependency.js +9 -1
  208. package/lib/dependencies/LocalModule.js +16 -0
  209. package/lib/dependencies/LocalModuleDependency.js +15 -0
  210. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  211. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  212. package/lib/dependencies/ModuleDependency.js +9 -1
  213. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  214. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  215. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  216. package/lib/dependencies/PrefetchDependency.js +3 -0
  217. package/lib/dependencies/ProvidedDependency.js +14 -2
  218. package/lib/dependencies/PureExpressionDependency.js +10 -1
  219. package/lib/dependencies/RequireContextDependency.js +6 -0
  220. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  221. package/lib/dependencies/RequireContextPlugin.js +19 -6
  222. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  223. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  224. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  225. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  226. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  227. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  228. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  229. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  230. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  231. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  232. package/lib/dependencies/RequireResolveDependency.js +6 -0
  233. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  234. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  235. package/lib/dependencies/StaticExportsDependency.js +8 -0
  236. package/lib/dependencies/SystemPlugin.js +48 -21
  237. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  238. package/lib/dependencies/URLDependency.js +13 -4
  239. package/lib/dependencies/URLPlugin.js +31 -18
  240. package/lib/dependencies/UnsupportedDependency.js +13 -0
  241. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  242. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  243. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  244. package/lib/dependencies/WorkerDependency.js +47 -3
  245. package/lib/dependencies/WorkerPlugin.js +105 -32
  246. package/lib/dependencies/getFunctionExpression.js +7 -0
  247. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  248. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  249. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  250. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  251. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  252. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  253. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  254. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  255. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  256. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  257. package/lib/ids/IdHelpers.js +6 -0
  258. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  259. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  260. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  261. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  262. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  263. package/lib/index.js +8 -0
  264. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  265. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  266. package/lib/javascript/ChunkHelpers.js +2 -2
  267. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  268. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  269. package/lib/javascript/JavascriptModulesPlugin.js +217 -198
  270. package/lib/javascript/JavascriptParser.js +941 -256
  271. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  272. package/lib/javascript/StartupHelpers.js +2 -2
  273. package/lib/json/JsonData.js +26 -1
  274. package/lib/json/JsonGenerator.js +21 -7
  275. package/lib/json/JsonModulesPlugin.js +14 -5
  276. package/lib/json/JsonParser.js +27 -13
  277. package/lib/library/AbstractLibraryPlugin.js +4 -0
  278. package/lib/library/AmdLibraryPlugin.js +22 -6
  279. package/lib/library/AssignLibraryPlugin.js +19 -5
  280. package/lib/library/EnableLibraryPlugin.js +4 -0
  281. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  282. package/lib/library/ModuleLibraryPlugin.js +8 -4
  283. package/lib/library/SystemLibraryPlugin.js +2 -1
  284. package/lib/library/UmdLibraryPlugin.js +24 -2
  285. package/lib/logging/runtime.js +1 -1
  286. package/lib/logging/truncateArgs.js +4 -0
  287. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  288. package/lib/node/NodeTargetPlugin.js +3 -0
  289. package/lib/node/NodeTemplatePlugin.js +10 -2
  290. package/lib/node/NodeWatchFileSystem.js +1 -1
  291. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  292. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  293. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  294. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  295. package/lib/node/nodeConsole.js +2 -4
  296. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  297. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  298. package/lib/optimize/ConcatenatedModule.js +8 -6
  299. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  300. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  301. package/lib/optimize/InnerGraph.js +5 -5
  302. package/lib/optimize/InnerGraphPlugin.js +57 -48
  303. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  304. package/lib/optimize/MangleExportsPlugin.js +1 -1
  305. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  306. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  307. package/lib/optimize/RealContentHashPlugin.js +86 -30
  308. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  309. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  310. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  311. package/lib/optimize/SplitChunksPlugin.js +71 -31
  312. package/lib/performance/SizeLimitsPlugin.js +7 -4
  313. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  314. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  315. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  316. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  317. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  318. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  319. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  320. package/lib/rules/RuleSetCompiler.js +3 -3
  321. package/lib/rules/UseEffectRulePlugin.js +6 -4
  322. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  323. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  324. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  325. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  326. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  327. package/lib/runtime/CompatRuntimeModule.js +7 -2
  328. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  329. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  330. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  331. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  332. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  333. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  334. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  335. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  336. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  337. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  338. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  339. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  340. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  341. package/lib/runtime/NonceRuntimeModule.js +1 -1
  342. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  343. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  344. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  345. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  346. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  347. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  348. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  349. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  350. package/lib/schemes/DataUriPlugin.js +16 -3
  351. package/lib/schemes/HttpUriPlugin.js +38 -0
  352. package/lib/serialization/ArraySerializer.js +22 -6
  353. package/lib/serialization/BinaryMiddleware.js +164 -1
  354. package/lib/serialization/DateObjectSerializer.js +15 -4
  355. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  356. package/lib/serialization/FileMiddleware.js +17 -0
  357. package/lib/serialization/MapObjectSerializer.js +24 -8
  358. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  359. package/lib/serialization/ObjectMiddleware.js +33 -2
  360. package/lib/serialization/PlainObjectSerializer.js +23 -12
  361. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  362. package/lib/serialization/SetObjectSerializer.js +21 -6
  363. package/lib/serialization/types.js +1 -1
  364. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  365. package/lib/sharing/ConsumeSharedModule.js +13 -2
  366. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  367. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  368. package/lib/sharing/ProvideSharedDependency.js +17 -0
  369. package/lib/sharing/ProvideSharedModule.js +11 -1
  370. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  371. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  372. package/lib/sharing/ShareRuntimeModule.js +19 -9
  373. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  374. package/lib/sharing/utils.js +320 -7
  375. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  376. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  377. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  378. package/lib/util/AsyncQueue.js +4 -2
  379. package/lib/util/LazySet.js +10 -2
  380. package/lib/util/MapHelpers.js +19 -5
  381. package/lib/util/ParallelismFactorCalculator.js +10 -0
  382. package/lib/util/Semaphore.js +1 -1
  383. package/lib/util/StackedCacheMap.js +7 -1
  384. package/lib/util/StringXor.js +51 -0
  385. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  386. package/lib/util/binarySearchBounds.js +49 -0
  387. package/lib/util/compileBooleanMatcher.js +31 -0
  388. package/lib/util/createHash.js +35 -13
  389. package/lib/util/deprecation.js +18 -3
  390. package/lib/util/deterministicGrouping.js +50 -11
  391. package/lib/util/findGraphRoots.js +4 -2
  392. package/lib/util/hash/md4.js +2 -2
  393. package/lib/util/hash/xxhash64.js +1 -1
  394. package/lib/util/identifier.js +4 -0
  395. package/lib/util/internalSerializables.js +1 -0
  396. package/lib/util/makeSerializable.js +7 -0
  397. package/lib/util/memoize.js +3 -3
  398. package/lib/util/numberHash.js +75 -21
  399. package/lib/util/processAsyncTree.js +7 -1
  400. package/lib/util/propertyAccess.js +9 -54
  401. package/lib/util/propertyName.js +79 -0
  402. package/lib/util/registerExternalSerializer.js +1 -1
  403. package/lib/util/runtime.js +84 -21
  404. package/lib/util/semver.js +2 -1
  405. package/lib/util/serialization.js +10 -0
  406. package/lib/util/smartGrouping.js +1 -1
  407. package/lib/validateSchema.js +6 -2
  408. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  409. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  410. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  411. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  412. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  413. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  414. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  415. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  416. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  417. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  418. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  419. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  420. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  421. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  422. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  423. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  424. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  425. package/lib/webpack.js +12 -3
  426. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  427. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  428. package/module.d.ts +55 -37
  429. package/package.json +59 -56
  430. package/schemas/WebpackOptions.check.js +1 -1
  431. package/schemas/WebpackOptions.json +133 -6
  432. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  433. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  434. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  435. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  436. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  437. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  438. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  439. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  440. package/schemas/plugins/css/CssParserOptions.json +1 -1
  441. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  442. package/types.d.ts +1629 -683
@@ -5,19 +5,36 @@
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").AssignmentProperty} AssignmentProperty */
19
+ /** @typedef {import("estree").Expression} Expression */
20
+ /** @typedef {import("estree").Identifier} Identifier */
21
+ /** @typedef {import("estree").Pattern} Pattern */
22
+ /** @typedef {import("estree").SourceLocation} SourceLocation */
23
+ /** @typedef {import("estree").Statement} Statement */
24
+ /** @typedef {import("estree").Super} Super */
15
25
  /** @typedef {import("./Compiler")} Compiler */
26
+ /** @typedef {import("./javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
27
+ /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
28
+ /** @typedef {import("./javascript/JavascriptParser").Range} Range */
16
29
 
30
+ /**
31
+ * @param {Set<string>} declarations set of declarations
32
+ * @param {Identifier | Pattern} pattern pattern to collect declarations from
33
+ */
17
34
  const collectDeclaration = (declarations, pattern) => {
18
35
  const stack = [pattern];
19
36
  while (stack.length > 0) {
20
- const node = stack.pop();
37
+ const node = /** @type {Pattern} */ (stack.pop());
21
38
  switch (node.type) {
22
39
  case "Identifier":
23
40
  declarations.add(node.name);
@@ -34,7 +51,7 @@ const collectDeclaration = (declarations, pattern) => {
34
51
  break;
35
52
  case "ObjectPattern":
36
53
  for (const property of node.properties) {
37
- stack.push(property.value);
54
+ stack.push(/** @type {AssignmentProperty} */ (property).value);
38
55
  }
39
56
  break;
40
57
  case "RestElement":
@@ -44,8 +61,14 @@ const collectDeclaration = (declarations, pattern) => {
44
61
  }
45
62
  };
46
63
 
64
+ /**
65
+ * @param {Statement} branch branch to get hoisted declarations from
66
+ * @param {boolean} includeFunctionDeclarations whether to include function declarations
67
+ * @returns {Array<string>} hoisted declarations
68
+ */
47
69
  const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
48
70
  const declarations = new Set();
71
+ /** @type {Array<TODO | null | undefined>} */
49
72
  const stack = [branch];
50
73
  while (stack.length > 0) {
51
74
  const node = stack.pop();
@@ -93,7 +116,7 @@ const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
93
116
  break;
94
117
  case "FunctionDeclaration":
95
118
  if (includeFunctionDeclarations) {
96
- collectDeclaration(declarations, node.id);
119
+ collectDeclaration(declarations, /** @type {Identifier} */ (node.id));
97
120
  }
98
121
  break;
99
122
  case "VariableDeclaration":
@@ -108,6 +131,8 @@ const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
108
131
  return Array.from(declarations);
109
132
  };
110
133
 
134
+ const PLUGIN_NAME = "ConstPlugin";
135
+
111
136
  class ConstPlugin {
112
137
  /**
113
138
  * Apply the plugin
@@ -117,7 +142,7 @@ class ConstPlugin {
117
142
  apply(compiler) {
118
143
  const cachedParseResource = parseResource.bindCache(compiler.root);
119
144
  compiler.hooks.compilation.tap(
120
- "ConstPlugin",
145
+ PLUGIN_NAME,
121
146
  (compilation, { normalModuleFactory }) => {
122
147
  compilation.dependencyTemplates.set(
123
148
  ConstDependency,
@@ -129,15 +154,21 @@ class ConstPlugin {
129
154
  new CachedConstDependency.Template()
130
155
  );
131
156
 
157
+ /**
158
+ * @param {JavascriptParser} parser the parser
159
+ */
132
160
  const handler = parser => {
133
- parser.hooks.statementIf.tap("ConstPlugin", statement => {
161
+ parser.hooks.statementIf.tap(PLUGIN_NAME, statement => {
134
162
  if (parser.scope.isAsmJs) return;
135
163
  const param = parser.evaluateExpression(statement.test);
136
164
  const bool = param.asBool();
137
165
  if (typeof bool === "boolean") {
138
166
  if (!param.couldHaveSideEffects()) {
139
- const dep = new ConstDependency(`${bool}`, param.range);
140
- dep.loc = statement.loc;
167
+ const dep = new ConstDependency(
168
+ `${bool}`,
169
+ /** @type {Range} */ (param.range)
170
+ );
171
+ dep.loc = /** @type {SourceLocation} */ (statement.loc);
141
172
  parser.state.module.addPresentationalDependency(dep);
142
173
  } else {
143
174
  parser.walkExpression(statement.test);
@@ -193,24 +224,27 @@ class ConstPlugin {
193
224
  }
194
225
  const dep = new ConstDependency(
195
226
  replacement,
196
- branchToRemove.range
227
+ /** @type {Range} */ (branchToRemove.range)
197
228
  );
198
- dep.loc = branchToRemove.loc;
229
+ dep.loc = /** @type {SourceLocation} */ (branchToRemove.loc);
199
230
  parser.state.module.addPresentationalDependency(dep);
200
231
  }
201
232
  return bool;
202
233
  }
203
234
  });
204
235
  parser.hooks.expressionConditionalOperator.tap(
205
- "ConstPlugin",
236
+ PLUGIN_NAME,
206
237
  expression => {
207
238
  if (parser.scope.isAsmJs) return;
208
239
  const param = parser.evaluateExpression(expression.test);
209
240
  const bool = param.asBool();
210
241
  if (typeof bool === "boolean") {
211
242
  if (!param.couldHaveSideEffects()) {
212
- const dep = new ConstDependency(` ${bool}`, param.range);
213
- dep.loc = expression.loc;
243
+ const dep = new ConstDependency(
244
+ ` ${bool}`,
245
+ /** @type {Range} */ (param.range)
246
+ );
247
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
214
248
  parser.state.module.addPresentationalDependency(dep);
215
249
  } else {
216
250
  parser.walkExpression(expression.test);
@@ -229,15 +263,18 @@ class ConstPlugin {
229
263
  const branchToRemove = bool
230
264
  ? expression.alternate
231
265
  : expression.consequent;
232
- const dep = new ConstDependency("0", branchToRemove.range);
233
- dep.loc = branchToRemove.loc;
266
+ const dep = new ConstDependency(
267
+ "0",
268
+ /** @type {Range} */ (branchToRemove.range)
269
+ );
270
+ dep.loc = /** @type {SourceLocation} */ (branchToRemove.loc);
234
271
  parser.state.module.addPresentationalDependency(dep);
235
272
  return bool;
236
273
  }
237
274
  }
238
275
  );
239
276
  parser.hooks.expressionLogicalOperator.tap(
240
- "ConstPlugin",
277
+ PLUGIN_NAME,
241
278
  expression => {
242
279
  if (parser.scope.isAsmJs) return;
243
280
  if (
@@ -306,8 +343,11 @@ class ConstPlugin {
306
343
  //
307
344
  // returnfalse&&'foo'
308
345
  //
309
- const dep = new ConstDependency(` ${bool}`, param.range);
310
- dep.loc = expression.loc;
346
+ const dep = new ConstDependency(
347
+ ` ${bool}`,
348
+ /** @type {Range} */ (param.range)
349
+ );
350
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
311
351
  parser.state.module.addPresentationalDependency(dep);
312
352
  } else {
313
353
  parser.walkExpression(expression.left);
@@ -315,9 +355,9 @@ class ConstPlugin {
315
355
  if (!keepRight) {
316
356
  const dep = new ConstDependency(
317
357
  "0",
318
- expression.right.range
358
+ /** @type {Range} */ (expression.right.range)
319
359
  );
320
- dep.loc = expression.loc;
360
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
321
361
  parser.state.module.addPresentationalDependency(dep);
322
362
  }
323
363
  return keepRight;
@@ -356,15 +396,18 @@ class ConstPlugin {
356
396
  //
357
397
  // returnnull??'foo'
358
398
  //
359
- const dep = new ConstDependency(" null", param.range);
360
- dep.loc = expression.loc;
399
+ const dep = new ConstDependency(
400
+ " null",
401
+ /** @type {Range} */ (param.range)
402
+ );
403
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
361
404
  parser.state.module.addPresentationalDependency(dep);
362
405
  } else {
363
406
  const dep = new ConstDependency(
364
407
  "0",
365
- expression.right.range
408
+ /** @type {Range} */ (expression.right.range)
366
409
  );
367
- dep.loc = expression.loc;
410
+ dep.loc = /** @type {SourceLocation} */ (expression.loc);
368
411
  parser.state.module.addPresentationalDependency(dep);
369
412
  parser.walkExpression(expression.left);
370
413
  }
@@ -374,10 +417,10 @@ class ConstPlugin {
374
417
  }
375
418
  }
376
419
  );
377
- parser.hooks.optionalChaining.tap("ConstPlugin", expr => {
378
- /** @type {ExpressionNode[]} */
420
+ parser.hooks.optionalChaining.tap(PLUGIN_NAME, expr => {
421
+ /** @type {Expression[]} */
379
422
  const optionalExpressionsStack = [];
380
- /** @type {ExpressionNode|SuperNode} */
423
+ /** @type {Expression | Super} */
381
424
  let next = expr.expression;
382
425
 
383
426
  while (
@@ -388,7 +431,7 @@ class ConstPlugin {
388
431
  if (next.optional) {
389
432
  // SuperNode can not be optional
390
433
  optionalExpressionsStack.push(
391
- /** @type {ExpressionNode} */ (next.object)
434
+ /** @type {Expression} */ (next.object)
392
435
  );
393
436
  }
394
437
  next = next.object;
@@ -396,7 +439,7 @@ class ConstPlugin {
396
439
  if (next.optional) {
397
440
  // SuperNode can not be optional
398
441
  optionalExpressionsStack.push(
399
- /** @type {ExpressionNode} */ (next.callee)
442
+ /** @type {Expression} */ (next.callee)
400
443
  );
401
444
  }
402
445
  next = next.callee;
@@ -405,7 +448,9 @@ class ConstPlugin {
405
448
 
406
449
  while (optionalExpressionsStack.length) {
407
450
  const expression = optionalExpressionsStack.pop();
408
- const evaluated = parser.evaluateExpression(expression);
451
+ const evaluated = parser.evaluateExpression(
452
+ /** @type {Expression} */ (expression)
453
+ );
409
454
 
410
455
  if (evaluated.asNullish()) {
411
456
  // ------------------------------------------
@@ -420,8 +465,11 @@ class ConstPlugin {
420
465
  //
421
466
  // ------------------------------------------
422
467
  //
423
- const dep = new ConstDependency(" undefined", expr.range);
424
- dep.loc = expr.loc;
468
+ const dep = new ConstDependency(
469
+ " undefined",
470
+ /** @type {Range} */ (expr.range)
471
+ );
472
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
425
473
  parser.state.module.addPresentationalDependency(dep);
426
474
  return true;
427
475
  }
@@ -429,7 +477,7 @@ class ConstPlugin {
429
477
  });
430
478
  parser.hooks.evaluateIdentifier
431
479
  .for("__resourceQuery")
432
- .tap("ConstPlugin", expr => {
480
+ .tap(PLUGIN_NAME, expr => {
433
481
  if (parser.scope.isAsmJs) return;
434
482
  if (!parser.state.module) return;
435
483
  return evaluateToString(
@@ -438,24 +486,24 @@ class ConstPlugin {
438
486
  });
439
487
  parser.hooks.expression
440
488
  .for("__resourceQuery")
441
- .tap("ConstPlugin", expr => {
489
+ .tap(PLUGIN_NAME, expr => {
442
490
  if (parser.scope.isAsmJs) return;
443
491
  if (!parser.state.module) return;
444
492
  const dep = new CachedConstDependency(
445
493
  JSON.stringify(
446
494
  cachedParseResource(parser.state.module.resource).query
447
495
  ),
448
- expr.range,
496
+ /** @type {Range} */ (expr.range),
449
497
  "__resourceQuery"
450
498
  );
451
- dep.loc = expr.loc;
499
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
452
500
  parser.state.module.addPresentationalDependency(dep);
453
501
  return true;
454
502
  });
455
503
 
456
504
  parser.hooks.evaluateIdentifier
457
505
  .for("__resourceFragment")
458
- .tap("ConstPlugin", expr => {
506
+ .tap(PLUGIN_NAME, expr => {
459
507
  if (parser.scope.isAsmJs) return;
460
508
  if (!parser.state.module) return;
461
509
  return evaluateToString(
@@ -464,31 +512,31 @@ class ConstPlugin {
464
512
  });
465
513
  parser.hooks.expression
466
514
  .for("__resourceFragment")
467
- .tap("ConstPlugin", expr => {
515
+ .tap(PLUGIN_NAME, expr => {
468
516
  if (parser.scope.isAsmJs) return;
469
517
  if (!parser.state.module) return;
470
518
  const dep = new CachedConstDependency(
471
519
  JSON.stringify(
472
520
  cachedParseResource(parser.state.module.resource).fragment
473
521
  ),
474
- expr.range,
522
+ /** @type {Range} */ (expr.range),
475
523
  "__resourceFragment"
476
524
  );
477
- dep.loc = expr.loc;
525
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
478
526
  parser.state.module.addPresentationalDependency(dep);
479
527
  return true;
480
528
  });
481
529
  };
482
530
 
483
531
  normalModuleFactory.hooks.parser
484
- .for("javascript/auto")
485
- .tap("ConstPlugin", handler);
532
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
533
+ .tap(PLUGIN_NAME, handler);
486
534
  normalModuleFactory.hooks.parser
487
- .for("javascript/dynamic")
488
- .tap("ConstPlugin", handler);
535
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
536
+ .tap(PLUGIN_NAME, handler);
489
537
  normalModuleFactory.hooks.parser
490
- .for("javascript/esm")
491
- .tap("ConstPlugin", handler);
538
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
539
+ .tap(PLUGIN_NAME, handler);
492
540
  }
493
541
  );
494
542
  }
@@ -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;