webpack 5.97.1 → 5.104.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -0,0 +1,222 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Natsu @xiaoxiaojx
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const { NormalModule } = require("..");
9
+ const ModuleNotFoundError = require("../ModuleNotFoundError");
10
+ const { parseResourceWithoutFragment } = require("../util/identifier");
11
+
12
+ /** @typedef {import("../Compiler")} Compiler */
13
+ /** @typedef {import("../NormalModule")} NormalModule */
14
+
15
+ /**
16
+ * @template T
17
+ * @typedef {import("../../declarations/LoaderContext").LoaderContext<T>} LoaderContext
18
+ */
19
+
20
+ const PLUGIN_NAME = "VirtualUrlPlugin";
21
+ const DEFAULT_SCHEME = "virtual";
22
+
23
+ /** @typedef {(loaderContext: LoaderContext<EXPECTED_ANY>) => Promise<string | Buffer> | string | Buffer} SourceFn */
24
+ /** @typedef {() => string} VersionFn */
25
+
26
+ /**
27
+ * @typedef {object} VirtualModuleConfig
28
+ * @property {string=} type the module type
29
+ * @property {SourceFn} source the source function
30
+ * @property {VersionFn | true | string=} version optional version function or value
31
+ */
32
+
33
+ /**
34
+ * @typedef {string | SourceFn | VirtualModuleConfig} VirtualModuleInput
35
+ */
36
+
37
+ /** @typedef {{ [key: string]: VirtualModuleInput }} VirtualModules */
38
+
39
+ /**
40
+ * Normalizes a virtual module definition into a standard format
41
+ * @param {VirtualModuleInput} virtualConfig The virtual module to normalize
42
+ * @returns {VirtualModuleConfig} The normalized virtual module
43
+ */
44
+ function normalizeModule(virtualConfig) {
45
+ if (typeof virtualConfig === "string") {
46
+ return {
47
+ type: "",
48
+ source() {
49
+ return virtualConfig;
50
+ }
51
+ };
52
+ } else if (typeof virtualConfig === "function") {
53
+ return {
54
+ type: "",
55
+ source: virtualConfig
56
+ };
57
+ }
58
+ return virtualConfig;
59
+ }
60
+
61
+ /**
62
+ * Normalizes all virtual modules with the given scheme
63
+ * @param {VirtualModules} virtualConfigs The virtual modules to normalize
64
+ * @param {string} scheme The URL scheme to use
65
+ * @returns {{ [key: string]: VirtualModuleConfig }} The normalized virtual modules
66
+ */
67
+ function normalizeModules(virtualConfigs, scheme) {
68
+ return Object.keys(virtualConfigs).reduce((pre, id) => {
69
+ pre[toVid(id, scheme)] = normalizeModule(virtualConfigs[id]);
70
+ return pre;
71
+ }, /** @type {{ [key: string]: VirtualModuleConfig }} */ ({}));
72
+ }
73
+
74
+ /**
75
+ * Converts a module id and scheme to a virtual module id
76
+ * @param {string} id The module id
77
+ * @param {string} scheme The URL scheme
78
+ * @returns {string} The virtual module id
79
+ */
80
+ function toVid(id, scheme) {
81
+ return `${scheme}:${id}`;
82
+ }
83
+
84
+ const VALUE_DEP_VERSION = `webpack/${PLUGIN_NAME}/version`;
85
+
86
+ /**
87
+ * Converts a module id and scheme to a cache key
88
+ * @param {string} id The module id
89
+ * @param {string} scheme The URL scheme
90
+ * @returns {string} The cache key
91
+ */
92
+ function toCacheKey(id, scheme) {
93
+ return `${VALUE_DEP_VERSION}/${toVid(id, scheme)}`;
94
+ }
95
+
96
+ /**
97
+ * @typedef {object} VirtualUrlPluginOptions
98
+ * @property {VirtualModules} modules - The virtual modules
99
+ * @property {string=} scheme - The URL scheme to use
100
+ */
101
+
102
+ class VirtualUrlPlugin {
103
+ /**
104
+ * @param {VirtualModules} modules The virtual modules
105
+ * @param {string=} scheme The URL scheme to use
106
+ */
107
+ constructor(modules, scheme) {
108
+ this.scheme = scheme || DEFAULT_SCHEME;
109
+ this.modules = normalizeModules(modules, this.scheme);
110
+ }
111
+
112
+ /**
113
+ * Apply the plugin
114
+ * @param {Compiler} compiler the compiler instance
115
+ * @returns {void}
116
+ */
117
+ apply(compiler) {
118
+ const scheme = this.scheme;
119
+ const cachedParseResourceWithoutFragment =
120
+ parseResourceWithoutFragment.bindCache(compiler.root);
121
+
122
+ compiler.hooks.compilation.tap(
123
+ PLUGIN_NAME,
124
+ (compilation, { normalModuleFactory }) => {
125
+ normalModuleFactory.hooks.resolveForScheme
126
+ .for(scheme)
127
+ .tap(PLUGIN_NAME, (resourceData) => {
128
+ const virtualConfig = this.findVirtualModuleConfigById(
129
+ resourceData.resource
130
+ );
131
+ const url = cachedParseResourceWithoutFragment(
132
+ resourceData.resource
133
+ );
134
+ const path = url.path;
135
+ const type = virtualConfig.type;
136
+ resourceData.path = path + type;
137
+ resourceData.resource = path;
138
+
139
+ if (virtualConfig.version) {
140
+ const cacheKey = toCacheKey(resourceData.resource, scheme);
141
+ const cacheVersion = this.getCacheVersion(virtualConfig.version);
142
+ compilation.valueCacheVersions.set(
143
+ cacheKey,
144
+ /** @type {string} */ (cacheVersion)
145
+ );
146
+ }
147
+
148
+ return true;
149
+ });
150
+
151
+ const hooks = NormalModule.getCompilationHooks(compilation);
152
+ hooks.readResource
153
+ .for(scheme)
154
+ .tapAsync(PLUGIN_NAME, async (loaderContext, callback) => {
155
+ const { resourcePath } = loaderContext;
156
+ const module = /** @type {NormalModule} */ (loaderContext._module);
157
+ const cacheKey = toCacheKey(resourcePath, scheme);
158
+
159
+ const addVersionValueDependency = () => {
160
+ if (!module || !module.buildInfo) return;
161
+
162
+ const buildInfo = module.buildInfo;
163
+ if (!buildInfo.valueDependencies) {
164
+ buildInfo.valueDependencies = new Map();
165
+ }
166
+
167
+ const cacheVersion = compilation.valueCacheVersions.get(cacheKey);
168
+ if (compilation.valueCacheVersions.has(cacheKey)) {
169
+ buildInfo.valueDependencies.set(
170
+ cacheKey,
171
+ /** @type {string} */ (cacheVersion)
172
+ );
173
+ }
174
+ };
175
+
176
+ try {
177
+ const virtualConfig =
178
+ this.findVirtualModuleConfigById(resourcePath);
179
+ const content = await virtualConfig.source(loaderContext);
180
+ addVersionValueDependency();
181
+ callback(null, content);
182
+ } catch (err) {
183
+ callback(/** @type {Error} */ (err));
184
+ }
185
+ });
186
+ }
187
+ );
188
+ }
189
+
190
+ /**
191
+ * @param {string} id The module id
192
+ * @returns {VirtualModuleConfig} The virtual module config
193
+ */
194
+ findVirtualModuleConfigById(id) {
195
+ const config = this.modules[id];
196
+ if (!config) {
197
+ throw new ModuleNotFoundError(
198
+ null,
199
+ new Error(`Can't resolve virtual module ${id}`),
200
+ {
201
+ name: `virtual module ${id}`
202
+ }
203
+ );
204
+ }
205
+ return config;
206
+ }
207
+
208
+ /**
209
+ * Get the cache version for a given version value
210
+ * @param {VersionFn | true | string} version The version value or function
211
+ * @returns {string | undefined} The cache version
212
+ */
213
+ getCacheVersion(version) {
214
+ return version === true
215
+ ? undefined
216
+ : (typeof version === "function" ? version() : version) || "unset";
217
+ }
218
+ }
219
+
220
+ VirtualUrlPlugin.DEFAULT_SCHEME = DEFAULT_SCHEME;
221
+
222
+ module.exports = VirtualUrlPlugin;
@@ -0,0 +1,41 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ */
4
+
5
+ "use strict";
6
+
7
+ /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
+ /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
+
10
+ /** @typedef {Error & { cause?: unknown, errors: EXPECTED_ANY[] }} AggregateError */
11
+
12
+ class AggregateErrorSerializer {
13
+ /**
14
+ * @param {AggregateError} obj error
15
+ * @param {ObjectSerializerContext} context context
16
+ */
17
+ serialize(obj, context) {
18
+ context.write(obj.errors);
19
+ context.write(obj.message);
20
+ context.write(obj.stack);
21
+ context.write(obj.cause);
22
+ }
23
+
24
+ /**
25
+ * @param {ObjectDeserializerContext} context context
26
+ * @returns {AggregateError} error
27
+ */
28
+ deserialize(context) {
29
+ const errors = context.read();
30
+ // eslint-disable-next-line n/no-unsupported-features/es-builtins, n/no-unsupported-features/es-syntax, unicorn/error-message
31
+ const err = new AggregateError(errors);
32
+
33
+ err.message = context.read();
34
+ err.stack = context.read();
35
+ err.cause = context.read();
36
+
37
+ return err;
38
+ }
39
+ }
40
+
41
+ module.exports = AggregateErrorSerializer;
@@ -117,7 +117,7 @@ const MEASURE_END_OPERATION = Symbol("MEASURE_END_OPERATION");
117
117
  * @param {number} n number
118
118
  * @returns {0 | 1 | 2} type of number for serialization
119
119
  */
120
- const identifyNumber = n => {
120
+ const identifyNumber = (n) => {
121
121
  if (n === (n | 0)) {
122
122
  if (n <= 127 && n >= -128) return 0;
123
123
  if (n <= 2147483647 && n >= -2147483648) return 1;
@@ -129,43 +129,49 @@ const identifyNumber = n => {
129
129
  * @param {bigint} n bigint
130
130
  * @returns {0 | 1 | 2} type of bigint for serialization
131
131
  */
132
- const identifyBigInt = n => {
132
+ const identifyBigInt = (n) => {
133
133
  if (n <= BigInt(127) && n >= BigInt(-128)) return 0;
134
134
  if (n <= BigInt(2147483647) && n >= BigInt(-2147483648)) return 1;
135
135
  return 2;
136
136
  };
137
137
 
138
- /** @typedef {TODO} Context */
138
+ /** @typedef {PrimitiveSerializableType[]} DeserializedType */
139
+ /** @typedef {BufferSerializableType[]} SerializedType} */
140
+ /** @typedef {{ retainedBuffer?: (x: Buffer) => Buffer }} Context} */
139
141
 
140
142
  /**
141
- * @typedef {PrimitiveSerializableType[]} DeserializedType
142
- * @typedef {BufferSerializableType[]} SerializedType
143
- * @extends {SerializerMiddleware<DeserializedType, SerializedType>}
143
+ * @template LazyInputValue
144
+ * @template LazyOutputValue
145
+ * @typedef {import("./SerializerMiddleware").LazyFunction<LazyInputValue, LazyOutputValue, BinaryMiddleware, undefined>} LazyFunction
146
+ */
147
+
148
+ /**
149
+ * @extends {SerializerMiddleware<DeserializedType, SerializedType, Context>}
144
150
  */
145
151
  class BinaryMiddleware extends SerializerMiddleware {
146
152
  /**
147
153
  * @param {DeserializedType} data data
148
- * @param {object} context context object
149
- * @returns {SerializedType|Promise<SerializedType>} serialized data
154
+ * @param {Context} context context object
155
+ * @returns {SerializedType | Promise<SerializedType> | null} serialized data
150
156
  */
151
157
  serialize(data, context) {
152
158
  return this._serialize(data, context);
153
159
  }
154
160
 
155
161
  /**
156
- * @param {function(): Promise<any> | any} fn lazy function
157
- * @param {TODO} context serialize function
158
- * @returns {function(): Promise<any> | any} new lazy
162
+ * @param {LazyFunction<DeserializedType, SerializedType>} fn lazy function
163
+ * @param {Context} context serialize function
164
+ * @returns {LazyFunction<SerializedType, DeserializedType>} new lazy
159
165
  */
160
166
  _serializeLazy(fn, context) {
161
- return SerializerMiddleware.serializeLazy(fn, data =>
167
+ return SerializerMiddleware.serializeLazy(fn, (data) =>
162
168
  this._serialize(data, context)
163
169
  );
164
170
  }
165
171
 
166
172
  /**
167
173
  * @param {DeserializedType} data data
168
- * @param {TODO} context context object
174
+ * @param {Context} context context object
169
175
  * @param {{ leftOverBuffer: Buffer | null, allocationSize: number, increaseCounter: number }} allocationScope allocation scope
170
176
  * @returns {SerializedType} serialized data
171
177
  */
@@ -192,7 +198,7 @@ class BinaryMiddleware extends SerializerMiddleware {
192
198
  /**
193
199
  * @param {number} bytesNeeded bytes needed
194
200
  */
195
- const allocate = bytesNeeded => {
201
+ const allocate = (bytesNeeded) => {
196
202
  if (currentBuffer !== null) {
197
203
  if (currentBuffer.length - currentPosition >= bytesNeeded) return;
198
204
  flush();
@@ -209,7 +215,7 @@ class BinaryMiddleware extends SerializerMiddleware {
209
215
  (allocationScope.increaseCounter + 1) % 4) &&
210
216
  allocationScope.allocationSize < 16777216
211
217
  ) {
212
- allocationScope.allocationSize = allocationScope.allocationSize << 1;
218
+ allocationScope.allocationSize <<= 1;
213
219
  }
214
220
  }
215
221
  };
@@ -242,14 +248,14 @@ class BinaryMiddleware extends SerializerMiddleware {
242
248
  /**
243
249
  * @param {number} byte byte
244
250
  */
245
- const writeU8 = byte => {
251
+ const writeU8 = (byte) => {
246
252
  /** @type {Buffer} */
247
253
  (currentBuffer).writeUInt8(byte, currentPosition++);
248
254
  };
249
255
  /**
250
256
  * @param {number} ui32 ui32
251
257
  */
252
- const writeU32 = ui32 => {
258
+ const writeU32 = (ui32) => {
253
259
  /** @type {Buffer} */
254
260
  (currentBuffer).writeUInt32LE(ui32, currentPosition);
255
261
  currentPosition += 4;
@@ -275,9 +281,10 @@ class BinaryMiddleware extends SerializerMiddleware {
275
281
  const thing = data[i];
276
282
  switch (typeof thing) {
277
283
  case "function": {
278
- if (!SerializerMiddleware.isLazy(thing))
284
+ if (!SerializerMiddleware.isLazy(thing)) {
279
285
  throw new Error(`Unexpected function ${thing}`);
280
- /** @type {SerializedType | (() => SerializedType)} */
286
+ }
287
+ /** @type {SerializedType | LazyFunction<SerializedType, DeserializedType> | undefined} */
281
288
  let serializedData =
282
289
  SerializerMiddleware.getLazySerializedValue(thing);
283
290
  if (serializedData === undefined) {
@@ -285,9 +292,8 @@ class BinaryMiddleware extends SerializerMiddleware {
285
292
  flush();
286
293
  allocationScope.leftOverBuffer = leftOverBuffer;
287
294
  const result =
288
- /** @type {(Exclude<PrimitiveSerializableType, Promise<PrimitiveSerializableType>>)[]} */ (
289
- thing()
290
- );
295
+ /** @type {PrimitiveSerializableType[]} */
296
+ (thing());
291
297
  const data = this._serialize(result, context, allocationScope);
292
298
  leftOverBuffer = allocationScope.leftOverBuffer;
293
299
  allocationScope.leftOverBuffer = null;
@@ -644,13 +650,19 @@ class BinaryMiddleware extends SerializerMiddleware {
644
650
 
645
651
  /**
646
652
  * @param {SerializedType} data data
647
- * @param {object} context context object
648
- * @returns {DeserializedType|Promise<DeserializedType>} deserialized data
653
+ * @param {Context} context context object
654
+ * @returns {DeserializedType | Promise<DeserializedType>} deserialized data
649
655
  */
650
656
  deserialize(data, context) {
651
657
  return this._deserialize(data, context);
652
658
  }
653
659
 
660
+ /**
661
+ * @private
662
+ * @param {SerializedType} content content
663
+ * @param {Context} context context object
664
+ * @returns {LazyFunction<DeserializedType, SerializedType>} lazy function
665
+ */
654
666
  _createLazyDeserialized(content, context) {
655
667
  return SerializerMiddleware.createLazy(
656
668
  memoize(() => this._deserialize(content, context)),
@@ -660,15 +672,21 @@ class BinaryMiddleware extends SerializerMiddleware {
660
672
  );
661
673
  }
662
674
 
675
+ /**
676
+ * @private
677
+ * @param {LazyFunction<SerializedType, DeserializedType>} fn lazy function
678
+ * @param {Context} context context object
679
+ * @returns {LazyFunction<DeserializedType, SerializedType>} new lazy
680
+ */
663
681
  _deserializeLazy(fn, context) {
664
- return SerializerMiddleware.deserializeLazy(fn, data =>
682
+ return SerializerMiddleware.deserializeLazy(fn, (data) =>
665
683
  this._deserialize(data, context)
666
684
  );
667
685
  }
668
686
 
669
687
  /**
670
688
  * @param {SerializedType} data data
671
- * @param {TODO} context context object
689
+ * @param {Context} context context object
672
690
  * @returns {DeserializedType} deserialized data
673
691
  */
674
692
  _deserialize(data, context) {
@@ -678,8 +696,7 @@ class BinaryMiddleware extends SerializerMiddleware {
678
696
  let currentIsBuffer = Buffer.isBuffer(currentBuffer);
679
697
  let currentPosition = 0;
680
698
 
681
- /** @type {(x: Buffer) => Buffer} */
682
- const retainedBuffer = context.retainedBuffer || (x => x);
699
+ const retainedBuffer = context.retainedBuffer || ((x) => x);
683
700
 
684
701
  const checkOverflow = () => {
685
702
  if (currentPosition >= /** @type {Buffer} */ (currentBuffer).length) {
@@ -694,7 +711,7 @@ class BinaryMiddleware extends SerializerMiddleware {
694
711
  * @param {number} n n
695
712
  * @returns {boolean} true when in current buffer, otherwise false
696
713
  */
697
- const isInCurrentBuffer = n =>
714
+ const isInCurrentBuffer = (n) =>
698
715
  currentIsBuffer &&
699
716
  n + currentPosition <= /** @type {Buffer} */ (currentBuffer).length;
700
717
  const ensureBuffer = () => {
@@ -711,7 +728,7 @@ class BinaryMiddleware extends SerializerMiddleware {
711
728
  * @param {number} n amount of bytes to read
712
729
  * @returns {Buffer} buffer with bytes
713
730
  */
714
- const read = n => {
731
+ const read = (n) => {
715
732
  ensureBuffer();
716
733
  const rem =
717
734
  /** @type {Buffer} */ (currentBuffer).length - currentPosition;
@@ -743,7 +760,7 @@ class BinaryMiddleware extends SerializerMiddleware {
743
760
  * @param {number} n amount of bytes to read
744
761
  * @returns {Buffer} buffer with bytes
745
762
  */
746
- const readUpTo = n => {
763
+ const readUpTo = (n) => {
747
764
  ensureBuffer();
748
765
  const rem =
749
766
  /** @type {Buffer} */
@@ -785,7 +802,7 @@ class BinaryMiddleware extends SerializerMiddleware {
785
802
  let mask = 1;
786
803
  while (n !== 0) {
787
804
  result.push((data & mask) !== 0);
788
- mask = mask << 1;
805
+ mask <<= 1;
789
806
  n--;
790
807
  }
791
808
  };
@@ -795,6 +812,7 @@ class BinaryMiddleware extends SerializerMiddleware {
795
812
  return () => {
796
813
  const count = readU32();
797
814
  const lengths = Array.from({ length: count }).map(() => readU32());
815
+ /** @type {(Buffer | LazyFunction<SerializedType, DeserializedType>)[]} */
798
816
  const content = [];
799
817
  for (let l of lengths) {
800
818
  if (l === 0) {
@@ -1138,5 +1156,5 @@ class BinaryMiddleware extends SerializerMiddleware {
1138
1156
 
1139
1157
  module.exports = BinaryMiddleware;
1140
1158
 
1141
- module.exports.MEASURE_START_OPERATION = MEASURE_START_OPERATION;
1142
1159
  module.exports.MEASURE_END_OPERATION = MEASURE_END_OPERATION;
1160
+ module.exports.MEASURE_START_OPERATION = MEASURE_START_OPERATION;
@@ -7,6 +7,8 @@
7
7
  /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
8
  /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
9
 
10
+ /** @typedef {Error & { cause?: unknown }} ErrorWithCause */
11
+
10
12
  class ErrorObjectSerializer {
11
13
  /**
12
14
  * @param {ErrorConstructor | EvalErrorConstructor | RangeErrorConstructor | ReferenceErrorConstructor | SyntaxErrorConstructor | TypeErrorConstructor} Type error type
@@ -22,7 +24,10 @@ class ErrorObjectSerializer {
22
24
  serialize(obj, context) {
23
25
  context.write(obj.message);
24
26
  context.write(obj.stack);
25
- context.write(/** @type {Error & { cause: "unknown" }} */ (obj).cause);
27
+ context.write(
28
+ /** @type {ErrorWithCause} */
29
+ (obj).cause
30
+ );
26
31
  }
27
32
 
28
33
  /**
@@ -34,7 +39,7 @@ class ErrorObjectSerializer {
34
39
 
35
40
  err.message = context.read();
36
41
  err.stack = context.read();
37
- /** @type {Error & { cause: "unknown" }} */
42
+ /** @type {ErrorWithCause} */
38
43
  (err).cause = context.read();
39
44
 
40
45
  return err;