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
@@ -10,56 +10,18 @@ const ConstDependency = require("../dependencies/ConstDependency");
10
10
  const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
11
11
 
12
12
  /** @typedef {import("estree").Expression} Expression */
13
- /** @typedef {import("estree").Node} Node */
14
13
  /** @typedef {import("estree").SourceLocation} SourceLocation */
15
14
  /** @typedef {import("./JavascriptParser")} JavascriptParser */
16
15
  /** @typedef {import("./JavascriptParser").Range} Range */
16
+ /** @typedef {import("./BasicEvaluatedExpression").GetMembers} GetMembers */
17
17
 
18
- /**
19
- * @param {JavascriptParser} parser the parser
20
- * @param {string} value the const value
21
- * @param {(string[] | null)=} runtimeRequirements runtime requirements
22
- * @returns {function(Expression): true} plugin function
23
- */
24
- module.exports.toConstantDependency = (parser, value, runtimeRequirements) =>
25
- function constDependency(expr) {
26
- const dep = new ConstDependency(
27
- value,
28
- /** @type {Range} */ (expr.range),
29
- runtimeRequirements
30
- );
31
- dep.loc = /** @type {SourceLocation} */ (expr.loc);
32
- parser.state.module.addPresentationalDependency(dep);
33
- return true;
34
- };
35
-
36
- /**
37
- * @param {string} value the string value
38
- * @returns {function(Expression): BasicEvaluatedExpression} plugin function
39
- */
40
- module.exports.evaluateToString = value =>
41
- function stringExpression(expr) {
42
- return new BasicEvaluatedExpression()
43
- .setString(value)
44
- .setRange(/** @type {Range} */ (expr.range));
45
- };
46
-
47
- /**
48
- * @param {number} value the number value
49
- * @returns {function(Expression): BasicEvaluatedExpression} plugin function
50
- */
51
- module.exports.evaluateToNumber = value =>
52
- function stringExpression(expr) {
53
- return new BasicEvaluatedExpression()
54
- .setNumber(value)
55
- .setRange(/** @type {Range} */ (expr.range));
56
- };
18
+ module.exports.approve = () => true;
57
19
 
58
20
  /**
59
21
  * @param {boolean} value the boolean value
60
- * @returns {function(Expression): BasicEvaluatedExpression} plugin function
22
+ * @returns {(expression: Expression) => BasicEvaluatedExpression} plugin function
61
23
  */
62
- module.exports.evaluateToBoolean = value =>
24
+ module.exports.evaluateToBoolean = (value) =>
63
25
  function booleanExpression(expr) {
64
26
  return new BasicEvaluatedExpression()
65
27
  .setBoolean(value)
@@ -69,9 +31,9 @@ module.exports.evaluateToBoolean = value =>
69
31
  /**
70
32
  * @param {string} identifier identifier
71
33
  * @param {string} rootInfo rootInfo
72
- * @param {function(): string[]} getMembers getMembers
73
- * @param {boolean|null=} truthy is truthy, null if nullish
74
- * @returns {function(Expression): BasicEvaluatedExpression} callback
34
+ * @param {GetMembers} getMembers getMembers
35
+ * @param {boolean | null=} truthy is truthy, null if nullish
36
+ * @returns {(expression: Expression) => BasicEvaluatedExpression} callback
75
37
  */
76
38
  module.exports.evaluateToIdentifier = (
77
39
  identifier,
@@ -99,10 +61,32 @@ module.exports.evaluateToIdentifier = (
99
61
  return evaluatedExpression;
100
62
  };
101
63
 
64
+ /**
65
+ * @param {number} value the number value
66
+ * @returns {(expression: Expression) => BasicEvaluatedExpression} plugin function
67
+ */
68
+ module.exports.evaluateToNumber = (value) =>
69
+ function stringExpression(expr) {
70
+ return new BasicEvaluatedExpression()
71
+ .setNumber(value)
72
+ .setRange(/** @type {Range} */ (expr.range));
73
+ };
74
+
75
+ /**
76
+ * @param {string} value the string value
77
+ * @returns {(expression: Expression) => BasicEvaluatedExpression} plugin function
78
+ */
79
+ module.exports.evaluateToString = (value) =>
80
+ function stringExpression(expr) {
81
+ return new BasicEvaluatedExpression()
82
+ .setString(value)
83
+ .setRange(/** @type {Range} */ (expr.range));
84
+ };
85
+
102
86
  /**
103
87
  * @param {JavascriptParser} parser the parser
104
88
  * @param {string} message the message
105
- * @returns {function(Expression): boolean | undefined} callback to handle unsupported expression
89
+ * @returns {(expression: Expression) => boolean | undefined} callback to handle unsupported expression
106
90
  */
107
91
  module.exports.expressionIsUnsupported = (parser, message) =>
108
92
  function unsupportedExpression(expr) {
@@ -125,4 +109,21 @@ module.exports.expressionIsUnsupported = (parser, message) =>
125
109
 
126
110
  module.exports.skipTraversal = () => true;
127
111
 
128
- module.exports.approve = () => true;
112
+ /**
113
+ * @param {JavascriptParser} parser the parser
114
+ * @param {string} value the const value
115
+ * @param {(string[] | null)=} runtimeRequirements runtime requirements
116
+ * @returns {(expression: Expression) => true} plugin function
117
+ */
118
+ module.exports.toConstantDependency = (parser, value, runtimeRequirements) =>
119
+ function constDependency(expr) {
120
+ const dep = new ConstDependency(
121
+ value,
122
+ /** @type {Range} */
123
+ (expr.range),
124
+ runtimeRequirements
125
+ );
126
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
127
+ parser.state.module.addPresentationalDependency(dep);
128
+ return true;
129
+ };
@@ -13,14 +13,11 @@ const { getAllChunks } = require("./ChunkHelpers");
13
13
  /** @typedef {import("../util/Hash")} Hash */
14
14
  /** @typedef {import("../Chunk")} Chunk */
15
15
  /** @typedef {import("../Chunk").ChunkId} ChunkId */
16
- /** @typedef {import("../Compilation")} Compilation */
17
16
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
18
17
  /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
19
18
  /** @typedef {import("../Entrypoint")} Entrypoint */
20
19
  /** @typedef {import("../ChunkGraph").EntryModuleWithChunkGroup} EntryModuleWithChunkGroup */
21
- /** @typedef {import("../ChunkGroup")} ChunkGroup */
22
20
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
23
- /** @typedef {(string|number)[]} EntryItem */
24
21
 
25
22
  const EXPORT_PREFIX = `var ${RuntimeGlobals.exports} = `;
26
23
 
@@ -54,7 +51,7 @@ module.exports.generateEntryStartup = (
54
51
  * @param {ModuleId} id id
55
52
  * @returns {string} fn to execute
56
53
  */
57
- const runModule = id => `__webpack_exec__(${JSON.stringify(id)})`;
54
+ const runModule = (id) => `__webpack_exec__(${JSON.stringify(id)})`;
58
55
  /**
59
56
  * @param {Chunks} chunks chunks
60
57
  * @param {ModuleIds} moduleIds module ids
@@ -74,7 +71,7 @@ module.exports.generateEntryStartup = (
74
71
  passive
75
72
  ? RuntimeGlobals.onChunksLoaded
76
73
  : RuntimeGlobals.startupEntrypoint
77
- }(0, ${JSON.stringify(Array.from(chunks, c => c.id))}, ${fn});`
74
+ }(0, ${JSON.stringify(Array.from(chunks, (c) => c.id))}, ${fn});`
78
75
  );
79
76
  if (final && passive) {
80
77
  runtime.push(`${EXPORT_PREFIX}${RuntimeGlobals.onChunksLoaded}();`);
@@ -88,6 +85,9 @@ module.exports.generateEntryStartup = (
88
85
  let currentModuleIds;
89
86
 
90
87
  for (const [module, entrypoint] of entries) {
88
+ if (!chunkGraph.getModuleSourceTypes(module).has("javascript")) {
89
+ continue;
90
+ }
91
91
  const runtimeChunk =
92
92
  /** @type {Entrypoint} */
93
93
  (entrypoint).getRuntimeChunk();
@@ -130,6 +130,24 @@ module.exports.generateEntryStartup = (
130
130
  return Template.asString(runtime);
131
131
  };
132
132
 
133
+ /**
134
+ * @param {Chunk} chunk the chunk
135
+ * @param {ChunkGraph} chunkGraph the chunk graph
136
+ * @param {(chunk: Chunk, chunkGraph: ChunkGraph) => boolean} filterFn filter function
137
+ * @returns {Set<ChunkId>} initially fulfilled chunk ids
138
+ */
139
+ module.exports.getInitialChunkIds = (chunk, chunkGraph, filterFn) => {
140
+ /** @type {Set<ChunkId>} */
141
+ const initialChunkIds = new Set(chunk.ids);
142
+ for (const c of chunk.getAllInitialChunks()) {
143
+ if (c === chunk || filterFn(c, chunkGraph)) continue;
144
+ for (const id of /** @type {ChunkId[]} */ (c.ids)) {
145
+ initialChunkIds.add(id);
146
+ }
147
+ }
148
+ return initialChunkIds;
149
+ };
150
+
133
151
  /**
134
152
  * @param {Hash} hash the hash to update
135
153
  * @param {ChunkGraph} chunkGraph chunkGraph
@@ -158,20 +176,3 @@ module.exports.updateHashForEntryStartup = (
158
176
  }
159
177
  }
160
178
  };
161
-
162
- /**
163
- * @param {Chunk} chunk the chunk
164
- * @param {ChunkGraph} chunkGraph the chunk graph
165
- * @param {function(Chunk, ChunkGraph): boolean} filterFn filter function
166
- * @returns {Set<number | string>} initially fulfilled chunk ids
167
- */
168
- module.exports.getInitialChunkIds = (chunk, chunkGraph, filterFn) => {
169
- const initialChunkIds = new Set(chunk.ids);
170
- for (const c of chunk.getAllInitialChunks()) {
171
- if (c === chunk || filterFn(c, chunkGraph)) continue;
172
- for (const id of /** @type {ChunkId[]} */ (c.ids)) {
173
- initialChunkIds.add(id);
174
- }
175
- }
176
- return initialChunkIds;
177
- };
@@ -10,16 +10,16 @@ const { register } = require("../util/serialization");
10
10
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
11
11
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
12
12
  /** @typedef {import("../util/Hash")} Hash */
13
- /** @typedef {import("./JsonModulesPlugin").RawJsonData} RawJsonData */
13
+ /** @typedef {import("../util/fs").JsonValue} JsonValue */
14
14
 
15
15
  class JsonData {
16
16
  /**
17
- * @param {Buffer | RawJsonData} data JSON data
17
+ * @param {Buffer | JsonValue} data JSON data
18
18
  */
19
19
  constructor(data) {
20
20
  /** @type {Buffer | undefined} */
21
21
  this._buffer = undefined;
22
- /** @type {RawJsonData | undefined} */
22
+ /** @type {JsonValue | undefined} */
23
23
  this._data = undefined;
24
24
  if (Buffer.isBuffer(data)) {
25
25
  this._buffer = data;
@@ -29,7 +29,7 @@ class JsonData {
29
29
  }
30
30
 
31
31
  /**
32
- * @returns {RawJsonData|undefined} Raw JSON data
32
+ * @returns {JsonValue | undefined} Raw JSON data
33
33
  */
34
34
  get() {
35
35
  if (this._data === undefined && this._buffer !== undefined) {
@@ -9,59 +9,68 @@ const { RawSource } = require("webpack-sources");
9
9
  const ConcatenationScope = require("../ConcatenationScope");
10
10
  const { UsageState } = require("../ExportsInfo");
11
11
  const Generator = require("../Generator");
12
- const { JS_TYPES } = require("../ModuleSourceTypesConstants");
12
+ const { JAVASCRIPT_TYPES } = require("../ModuleSourceTypeConstants");
13
13
  const RuntimeGlobals = require("../RuntimeGlobals");
14
14
 
15
15
  /** @typedef {import("webpack-sources").Source} Source */
16
+ /** @typedef {import("../../declarations/WebpackOptions").JsonGeneratorOptions} JsonGeneratorOptions */
16
17
  /** @typedef {import("../ExportsInfo")} ExportsInfo */
17
18
  /** @typedef {import("../Generator").GenerateContext} GenerateContext */
18
19
  /** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
20
+ /** @typedef {import("../Module").SourceType} SourceType */
19
21
  /** @typedef {import("../Module").SourceTypes} SourceTypes */
20
22
  /** @typedef {import("../NormalModule")} NormalModule */
21
23
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
22
- /** @typedef {import("./JsonData")} JsonData */
23
- /** @typedef {import("./JsonModulesPlugin").RawJsonData} RawJsonData */
24
+ /** @typedef {import("../util/fs").JsonArray} JsonArray */
25
+ /** @typedef {import("../util/fs").JsonObject} JsonObject */
26
+ /** @typedef {import("../util/fs").JsonValue} JsonValue */
24
27
 
25
28
  /**
26
- * @param {RawJsonData} data Raw JSON data
27
- * @returns {undefined|string} stringified data
29
+ * @param {JsonValue} data Raw JSON data
30
+ * @returns {undefined | string} stringified data
28
31
  */
29
- const stringifySafe = data => {
32
+ const stringifySafe = (data) => {
30
33
  const stringified = JSON.stringify(data);
31
34
  if (!stringified) {
32
35
  return; // Invalid JSON
33
36
  }
34
37
 
35
- return stringified.replace(/\u2028|\u2029/g, str =>
38
+ return stringified.replace(/\u2028|\u2029/g, (str) =>
36
39
  str === "\u2029" ? "\\u2029" : "\\u2028"
37
40
  ); // invalid in JavaScript but valid JSON
38
41
  };
39
42
 
40
43
  /**
41
- * @param {RawJsonData} data Raw JSON data (always an object or array)
44
+ * @param {JsonObject | JsonArray} data Raw JSON data (always an object or array)
42
45
  * @param {ExportsInfo} exportsInfo exports info
43
46
  * @param {RuntimeSpec} runtime the runtime
44
- * @returns {RawJsonData} reduced data
47
+ * @returns {JsonObject | JsonArray} reduced data
45
48
  */
46
49
  const createObjectForExportsInfo = (data, exportsInfo, runtime) => {
47
- if (exportsInfo.otherExportsInfo.getUsed(runtime) !== UsageState.Unused)
50
+ if (exportsInfo.otherExportsInfo.getUsed(runtime) !== UsageState.Unused) {
48
51
  return data;
52
+ }
49
53
  const isArray = Array.isArray(data);
50
- /** @type {RawJsonData} */
54
+ /** @type {JsonObject | JsonArray} */
51
55
  const reducedData = isArray ? [] : {};
52
56
  for (const key of Object.keys(data)) {
53
57
  const exportInfo = exportsInfo.getReadOnlyExportInfo(key);
54
58
  const used = exportInfo.getUsed(runtime);
55
59
  if (used === UsageState.Unused) continue;
56
60
 
57
- /** @type {RawJsonData} */
61
+ // The real type is `JsonObject | JsonArray`, but typescript doesn't work `Object.keys(['string', 'other-string', 'etc'])` properly
62
+ const newData = /** @type {JsonObject} */ (data)[key];
58
63
  const value =
59
- used === UsageState.OnlyPropertiesUsed && exportInfo.exportsInfo
60
- ? createObjectForExportsInfo(data[key], exportInfo.exportsInfo, runtime)
61
- : data[key];
64
+ used === UsageState.OnlyPropertiesUsed &&
65
+ exportInfo.exportsInfo &&
66
+ typeof newData === "object" &&
67
+ newData
68
+ ? createObjectForExportsInfo(newData, exportInfo.exportsInfo, runtime)
69
+ : newData;
62
70
 
63
71
  const name = /** @type {string} */ (exportInfo.getUsedName(key, runtime));
64
- /** @type {Record<string, RawJsonData>} */ (reducedData)[name] = value;
72
+ /** @type {JsonObject} */
73
+ (reducedData)[name] = value;
65
74
  }
66
75
  if (isArray) {
67
76
  const arrayLengthWhenUsed =
@@ -71,8 +80,11 @@ const createObjectForExportsInfo = (data, exportsInfo, runtime) => {
71
80
  : undefined;
72
81
 
73
82
  let sizeObjectMinusArray = 0;
74
- for (let i = 0; i < reducedData.length; i++) {
75
- if (reducedData[i] === undefined) {
83
+ const reducedDataLength =
84
+ /** @type {JsonArray} */
85
+ (reducedData).length;
86
+ for (let i = 0; i < reducedDataLength; i++) {
87
+ if (/** @type {JsonArray} */ (reducedData)[i] === undefined) {
76
88
  sizeObjectMinusArray -= 2;
77
89
  } else {
78
90
  sizeObjectMinusArray += `${i}`.length + 3;
@@ -82,23 +94,25 @@ const createObjectForExportsInfo = (data, exportsInfo, runtime) => {
82
94
  sizeObjectMinusArray +=
83
95
  `${arrayLengthWhenUsed}`.length +
84
96
  8 -
85
- (arrayLengthWhenUsed - reducedData.length) * 2;
97
+ (arrayLengthWhenUsed - reducedDataLength) * 2;
86
98
  }
87
- if (sizeObjectMinusArray < 0)
99
+ if (sizeObjectMinusArray < 0) {
88
100
  return Object.assign(
89
101
  arrayLengthWhenUsed === undefined
90
102
  ? {}
91
103
  : { length: arrayLengthWhenUsed },
92
104
  reducedData
93
105
  );
106
+ }
94
107
  /** @type {number} */
95
108
  const generatedLength =
96
109
  arrayLengthWhenUsed !== undefined
97
- ? Math.max(arrayLengthWhenUsed, reducedData.length)
98
- : reducedData.length;
110
+ ? Math.max(arrayLengthWhenUsed, reducedDataLength)
111
+ : reducedDataLength;
99
112
  for (let i = 0; i < generatedLength; i++) {
100
- if (reducedData[i] === undefined) {
101
- reducedData[i] = 0;
113
+ if (/** @type {JsonArray} */ (reducedData)[i] === undefined) {
114
+ /** @type {JsonArray} */
115
+ (reducedData)[i] = 0;
102
116
  }
103
117
  }
104
118
  }
@@ -106,21 +120,29 @@ const createObjectForExportsInfo = (data, exportsInfo, runtime) => {
106
120
  };
107
121
 
108
122
  class JsonGenerator extends Generator {
123
+ /**
124
+ * @param {JsonGeneratorOptions} options options
125
+ */
126
+ constructor(options) {
127
+ super();
128
+ this.options = options;
129
+ }
130
+
109
131
  /**
110
132
  * @param {NormalModule} module fresh module
111
133
  * @returns {SourceTypes} available types (do not mutate)
112
134
  */
113
135
  getTypes(module) {
114
- return JS_TYPES;
136
+ return JAVASCRIPT_TYPES;
115
137
  }
116
138
 
117
139
  /**
118
140
  * @param {NormalModule} module the module
119
- * @param {string=} type source type
141
+ * @param {SourceType=} type source type
120
142
  * @returns {number} estimate size of the module
121
143
  */
122
144
  getSize(module, type) {
123
- /** @type {RawJsonData | undefined} */
145
+ /** @type {JsonValue | undefined} */
124
146
  const data =
125
147
  module.buildInfo &&
126
148
  module.buildInfo.jsonData &&
@@ -153,7 +175,7 @@ class JsonGenerator extends Generator {
153
175
  concatenationScope
154
176
  }
155
177
  ) {
156
- /** @type {RawJsonData | undefined} */
178
+ /** @type {JsonValue | undefined} */
157
179
  const data =
158
180
  module.buildInfo &&
159
181
  module.buildInfo.jsonData &&
@@ -166,7 +188,7 @@ class JsonGenerator extends Generator {
166
188
  );
167
189
  }
168
190
  const exportsInfo = moduleGraph.getExportsInfo(module);
169
- /** @type {RawJsonData} */
191
+ /** @type {JsonValue} */
170
192
  const finalJson =
171
193
  typeof data === "object" &&
172
194
  data &&
@@ -176,13 +198,15 @@ class JsonGenerator extends Generator {
176
198
  // Use JSON because JSON.parse() is much faster than JavaScript evaluation
177
199
  const jsonStr = /** @type {string} */ (stringifySafe(finalJson));
178
200
  const jsonExpr =
179
- jsonStr.length > 20 && typeof finalJson === "object"
201
+ this.options.JSONParse &&
202
+ jsonStr.length > 20 &&
203
+ typeof finalJson === "object"
180
204
  ? `/*#__PURE__*/JSON.parse('${jsonStr.replace(/[\\']/g, "\\$&")}')`
181
- : jsonStr;
205
+ : jsonStr.replace(/"__proto__":/g, '["__proto__"]:');
182
206
  /** @type {string} */
183
207
  let content;
184
208
  if (concatenationScope) {
185
- content = `${runtimeTemplate.supportsConst() ? "const" : "var"} ${
209
+ content = `${runtimeTemplate.renderConst()} ${
186
210
  ConcatenationScope.NAMESPACE_OBJECT_EXPORT
187
211
  } = ${jsonExpr};`;
188
212
  concatenationScope.registerNamespaceExport(
@@ -194,6 +218,16 @@ class JsonGenerator extends Generator {
194
218
  }
195
219
  return new RawSource(content);
196
220
  }
221
+
222
+ /**
223
+ * @param {Error} error the error
224
+ * @param {NormalModule} module module for which the code should be generated
225
+ * @param {GenerateContext} generateContext context for generate
226
+ * @returns {Source | null} generated code
227
+ */
228
+ generateError(error, module, generateContext) {
229
+ return new RawSource(`throw new Error(${JSON.stringify(error.message)});`);
230
+ }
197
231
  }
198
232
 
199
233
  module.exports = JsonGenerator;
@@ -11,17 +11,25 @@ const JsonGenerator = require("./JsonGenerator");
11
11
  const JsonParser = require("./JsonParser");
12
12
 
13
13
  /** @typedef {import("../Compiler")} Compiler */
14
- /** @typedef {Record<string, any>} RawJsonData */
15
14
 
16
15
  const validate = createSchemaValidation(
17
- require("../../schemas/plugins/JsonModulesPluginParser.check.js"),
18
- () => require("../../schemas/plugins/JsonModulesPluginParser.json"),
16
+ require("../../schemas/plugins/json/JsonModulesPluginParser.check"),
17
+ () => require("../../schemas/plugins/json/JsonModulesPluginParser.json"),
19
18
  {
20
19
  name: "Json Modules Plugin",
21
20
  baseDataPath: "parser"
22
21
  }
23
22
  );
24
23
 
24
+ const validateGenerator = createSchemaValidation(
25
+ require("../../schemas/plugins/json/JsonModulesPluginGenerator.check"),
26
+ () => require("../../schemas/plugins/json/JsonModulesPluginGenerator.json"),
27
+ {
28
+ name: "Json Modules Plugin",
29
+ baseDataPath: "generator"
30
+ }
31
+ );
32
+
25
33
  const PLUGIN_NAME = "JsonModulesPlugin";
26
34
 
27
35
  /**
@@ -40,14 +48,16 @@ class JsonModulesPlugin {
40
48
  (compilation, { normalModuleFactory }) => {
41
49
  normalModuleFactory.hooks.createParser
42
50
  .for(JSON_MODULE_TYPE)
43
- .tap(PLUGIN_NAME, parserOptions => {
51
+ .tap(PLUGIN_NAME, (parserOptions) => {
44
52
  validate(parserOptions);
45
-
46
53
  return new JsonParser(parserOptions);
47
54
  });
48
55
  normalModuleFactory.hooks.createGenerator
49
56
  .for(JSON_MODULE_TYPE)
50
- .tap(PLUGIN_NAME, () => new JsonGenerator());
57
+ .tap(PLUGIN_NAME, (generatorOptions) => {
58
+ validateGenerator(generatorOptions);
59
+ return new JsonGenerator(generatorOptions);
60
+ });
51
61
  }
52
62
  );
53
63
  }
@@ -15,7 +15,9 @@ const JsonData = require("./JsonData");
15
15
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
16
16
  /** @typedef {import("../Parser").ParserState} ParserState */
17
17
  /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
18
- /** @typedef {import("./JsonModulesPlugin").RawJsonData} RawJsonData */
18
+ /** @typedef {import("../util/fs").JsonValue} JsonValue */
19
+
20
+ /** @typedef {(input: string) => Buffer | JsonValue} ParseFn */
19
21
 
20
22
  const getParseJson = memoize(() => require("json-parse-even-better-errors"));
21
23
 
@@ -35,15 +37,15 @@ class JsonParser extends Parser {
35
37
  */
36
38
  parse(source, state) {
37
39
  if (Buffer.isBuffer(source)) {
38
- source = source.toString("utf-8");
40
+ source = source.toString("utf8");
39
41
  }
40
42
 
41
- /** @type {NonNullable<JsonModulesPluginParserOptions["parse"]>} */
43
+ /** @type {ParseFn} */
42
44
  const parseFn =
43
45
  typeof this.options.parse === "function"
44
46
  ? this.options.parse
45
47
  : getParseJson();
46
- /** @type {Buffer | RawJsonData | undefined} */
48
+ /** @type {Buffer | JsonValue | undefined} */
47
49
  let data;
48
50
  try {
49
51
  data =
@@ -52,18 +54,31 @@ class JsonParser extends Parser {
52
54
  : parseFn(source[0] === "\uFEFF" ? source.slice(1) : source);
53
55
  } catch (err) {
54
56
  throw new Error(
55
- `Cannot parse JSON: ${/** @type {Error} */ (err).message}`
57
+ `Cannot parse JSON: ${/** @type {Error} */ (err).message}`,
58
+ { cause: err }
56
59
  );
57
60
  }
58
- const jsonData = new JsonData(/** @type {Buffer | RawJsonData} */ (data));
61
+ const jsonData = new JsonData(/** @type {Buffer | JsonValue} */ (data));
59
62
  const buildInfo = /** @type {BuildInfo} */ (state.module.buildInfo);
60
63
  buildInfo.jsonData = jsonData;
61
64
  buildInfo.strict = true;
62
65
  const buildMeta = /** @type {BuildMeta} */ (state.module.buildMeta);
63
66
  buildMeta.exportsType = "default";
64
67
  buildMeta.defaultObject =
65
- typeof data === "object" ? "redirect-warn" : false;
66
- state.module.addDependency(new JsonExportsDependency(jsonData));
68
+ typeof data === "object"
69
+ ? this.options.namedExports === false
70
+ ? false
71
+ : this.options.namedExports === true
72
+ ? "redirect"
73
+ : "redirect-warn"
74
+ : false;
75
+ state.module.addDependency(
76
+ new JsonExportsDependency(
77
+ jsonData,
78
+ /** @type {number} */
79
+ (this.options.exportsDepth)
80
+ )
81
+ );
67
82
  return state;
68
83
  }
69
84
  }