webpack 5.111.0 → 5.112.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (781) hide show
  1. package/README.md +1 -1
  2. package/lib/Chunk.js +3 -966
  3. package/lib/Compilation.js +237 -138
  4. package/lib/Compiler.js +23 -24
  5. package/lib/Dependency.js +3 -551
  6. package/lib/DependencyTemplate.js +3 -69
  7. package/lib/EntryPlugin.js +3 -68
  8. package/lib/Entrypoint.js +3 -121
  9. package/lib/ExternalsPlugin.js +3 -92
  10. package/lib/FileSystemInfo.js +3 -4629
  11. package/lib/InitFragment.js +3 -204
  12. package/lib/LibraryTemplatePlugin.js +3 -46
  13. package/lib/ModuleFilenameHelpers.js +3 -400
  14. package/lib/ModuleNotFoundError.js +2 -2
  15. package/lib/MultiCompiler.js +43 -24
  16. package/lib/NormalModule.js +3 -2190
  17. package/lib/NullFactory.js +3 -22
  18. package/lib/ProgressPlugin.js +3 -908
  19. package/lib/RawModule.js +3 -197
  20. package/lib/RequestShortener.js +3 -37
  21. package/lib/SingleEntryPlugin.js +1 -1
  22. package/lib/WebpackError.js +2 -2
  23. package/lib/asset/AssetBytesGenerator.js +15 -9
  24. package/lib/asset/AssetBytesParser.js +3 -3
  25. package/lib/asset/AssetGenerator.js +61 -38
  26. package/lib/asset/AssetModule.js +2 -2
  27. package/lib/asset/AssetModulesPlugin.js +6 -9
  28. package/lib/asset/AssetParser.js +3 -3
  29. package/lib/asset/AssetSourceGenerator.js +15 -9
  30. package/lib/asset/AssetSourceParser.js +3 -3
  31. package/lib/asset/RawDataUrlModule.js +17 -10
  32. package/lib/asset/WebManifestGenerator.js +7 -7
  33. package/lib/asset/WebManifestParser.js +5 -5
  34. package/lib/async-modules/AsyncModuleHelpers.js +6 -5
  35. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
  36. package/lib/async-modules/InferAsyncModulesPlugin.js +4 -3
  37. package/lib/async-modules/isGeneratorLowered.js +3 -3
  38. package/lib/bun/BunTargetPlugin.js +1 -1
  39. package/lib/cache/AddBuildDependenciesPlugin.js +2 -19
  40. package/lib/{Cache.js → cache/Cache.js} +1 -1
  41. package/lib/{CacheFacade.js → cache/CacheFacade.js} +5 -5
  42. package/lib/cache/IdleFileCachePlugin.js +2 -2
  43. package/lib/cache/MemoryCachePlugin.js +6 -6
  44. package/lib/cache/MemoryWithGcCachePlugin.js +9 -10
  45. package/lib/cache/PackFileCacheStrategy.js +11 -28
  46. package/lib/cache/ResolverCachePlugin.js +8 -4
  47. package/lib/cache/getLazyHashedEtag.js +3 -5
  48. package/lib/cache/mergeEtags.js +1 -1
  49. package/lib/{OptionsApply.js → config/OptionsApply.js} +3 -3
  50. package/lib/{PlatformPlugin.js → config/PlatformPlugin.js} +2 -2
  51. package/lib/{WebpackOptionsApply.js → config/WebpackOptionsApply.js} +217 -200
  52. package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
  53. package/lib/config/browserslistTargetHandler.js +3 -9
  54. package/lib/{cli.js → config/cli.js} +5 -158
  55. package/lib/config/defaults.js +192 -122
  56. package/lib/config/getClaimedAssetTypes.js +28 -21
  57. package/lib/config/normalization.js +18 -7
  58. package/lib/config/target.js +13 -4
  59. package/lib/container/ContainerEntryDependency.js +1 -1
  60. package/lib/container/ContainerEntryModule.js +13 -11
  61. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  62. package/lib/container/ContainerExposedDependency.js +1 -1
  63. package/lib/container/ContainerPlugin.js +178 -5
  64. package/lib/container/ContainerReferencePlugin.js +75 -14
  65. package/lib/container/FallbackDependency.js +1 -1
  66. package/lib/container/FallbackItemDependency.js +1 -1
  67. package/lib/container/FallbackModule.js +12 -10
  68. package/lib/container/FallbackModuleFactory.js +2 -2
  69. package/lib/container/HoistContainerReferencesPlugin.js +10 -11
  70. package/lib/container/ModuleFederationPlugin.js +306 -7
  71. package/lib/container/RemoteModule.js +14 -10
  72. package/lib/container/RemoteRuntimeModule.js +5 -5
  73. package/lib/container/RemoteToExternalDependency.js +1 -1
  74. package/lib/container/moduleFederationHooks.js +1 -1
  75. package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
  76. package/lib/{ContextModule.js → context/ContextModule.js} +50 -36
  77. package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +25 -24
  78. package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
  79. package/lib/css/CssGenerator.js +57 -42
  80. package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
  81. package/lib/css/CssLoadingRuntimeModule.js +77 -44
  82. package/lib/css/CssModule.js +27 -29
  83. package/lib/css/CssModulesPlugin.js +128 -44
  84. package/lib/css/CssParser.js +700 -311
  85. package/lib/css/CssServerStylesRuntimeModule.js +3 -3
  86. package/lib/css/cssMinify.js +130 -54
  87. package/lib/css/data.js +7017 -4648
  88. package/lib/css/syntax-parser.js +19873 -0
  89. package/lib/css/syntax-printer.js +6037 -0
  90. package/lib/css/syntax.js +37 -17370
  91. package/lib/debug/ProfilingPlugin.js +55 -23
  92. package/lib/{DefinePlugin.js → define/DefinePlugin.js} +407 -41
  93. package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +25 -29
  94. package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +2 -2
  95. package/lib/deno/DenoTargetPlugin.js +1 -1
  96. package/lib/dependencies/ConstDependency.js +3 -120
  97. package/lib/dependencies/ContextElementDependency.js +5 -172
  98. package/lib/dependencies/NullDependency.js +3 -37
  99. package/lib/dependencies/{AMDDefineDependency.js → amd/AMDDefineDependency.js} +12 -11
  100. package/lib/dependencies/{AMDDefineDependencyParserPlugin.js → amd/AMDDefineDependencyParserPlugin.js} +10 -10
  101. package/lib/dependencies/{AMDPlugin.js → amd/AMDPlugin.js} +11 -11
  102. package/lib/dependencies/{AMDRequireArrayDependency.js → amd/AMDRequireArrayDependency.js} +15 -13
  103. package/lib/dependencies/{AMDRequireContextDependency.js → amd/AMDRequireContextDependency.js} +11 -10
  104. package/lib/dependencies/{AMDRequireDependenciesBlock.js → amd/AMDRequireDependenciesBlock.js} +7 -6
  105. package/lib/dependencies/{AMDRequireDependenciesBlockParserPlugin.js → amd/AMDRequireDependenciesBlockParserPlugin.js} +10 -10
  106. package/lib/dependencies/{AMDRequireDependency.js → amd/AMDRequireDependency.js} +13 -12
  107. package/lib/dependencies/{AMDRequireItemDependency.js → amd/AMDRequireItemDependency.js} +8 -7
  108. package/lib/dependencies/{AMDRuntimeModules.js → amd/AMDRuntimeModules.js} +3 -3
  109. package/lib/dependencies/{LocalModule.js → amd/LocalModule.js} +8 -4
  110. package/lib/dependencies/{LocalModuleDependency.js → amd/LocalModuleDependency.js} +17 -10
  111. package/lib/dependencies/{LocalModulesHelpers.js → amd/LocalModulesHelpers.js} +1 -1
  112. package/lib/dependencies/{RequireJsStuffPlugin.js → amd/RequireJsStuffPlugin.js} +9 -9
  113. package/lib/dependencies/{UnsupportedDependency.js → amd/UnsupportedDependency.js} +11 -10
  114. package/lib/dependencies/{CommonJsDependencyHelpers.js → commonjs/CommonJsDependencyHelpers.js} +8 -9
  115. package/lib/dependencies/{CommonJsExportRequireDependency.js → commonjs/CommonJsExportRequireDependency.js} +176 -44
  116. package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
  117. package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +138 -61
  118. package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
  119. package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +39 -35
  120. package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +13 -12
  121. package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +47 -35
  122. package/lib/dependencies/{CommonJsRequireContextDependency.js → commonjs/CommonJsRequireContextDependency.js} +15 -14
  123. package/lib/dependencies/{CommonJsRequireDependency.js → commonjs/CommonJsRequireDependency.js} +33 -25
  124. package/lib/dependencies/{CommonJsSelfReferenceDependency.js → commonjs/CommonJsSelfReferenceDependency.js} +19 -20
  125. package/lib/dependencies/{ModuleDecoratorDependency.js → commonjs/ModuleDecoratorDependency.js} +16 -15
  126. package/lib/dependencies/{RequireEnsureDependenciesBlock.js → commonjs/RequireEnsureDependenciesBlock.js} +8 -7
  127. package/lib/dependencies/{RequireEnsureDependenciesBlockParserPlugin.js → commonjs/RequireEnsureDependenciesBlockParserPlugin.js} +5 -5
  128. package/lib/dependencies/{RequireEnsureDependency.js → commonjs/RequireEnsureDependency.js} +13 -12
  129. package/lib/dependencies/{RequireEnsureItemDependency.js → commonjs/RequireEnsureItemDependency.js} +7 -6
  130. package/lib/dependencies/{RequireEnsurePlugin.js → commonjs/RequireEnsurePlugin.js} +8 -8
  131. package/lib/dependencies/{RequireHeaderDependency.js → commonjs/RequireHeaderDependency.js} +14 -13
  132. package/lib/dependencies/{RequireIncludeDependency.js → commonjs/RequireIncludeDependency.js} +13 -12
  133. package/lib/dependencies/{RequireIncludeDependencyParserPlugin.js → commonjs/RequireIncludeDependencyParserPlugin.js} +3 -27
  134. package/lib/dependencies/{RequireIncludePlugin.js → commonjs/RequireIncludePlugin.js} +4 -4
  135. package/lib/dependencies/{RequireResolveContextDependency.js → commonjs/RequireResolveContextDependency.js} +11 -10
  136. package/lib/dependencies/{RequireResolveDependency.js → commonjs/RequireResolveDependency.js} +12 -11
  137. package/lib/dependencies/{RequireResolveHeaderDependency.js → commonjs/RequireResolveHeaderDependency.js} +13 -12
  138. package/lib/dependencies/commonjs/TopLevelThisParserPlugin.js +59 -0
  139. package/lib/dependencies/{ContextDependency.js → context/ContextDependency.js} +15 -14
  140. package/lib/dependencies/{ContextDependencyHelpers.js → context/ContextDependencyHelpers.js} +34 -18
  141. package/lib/dependencies/{ContextDependencyTemplateAsId.js → context/ContextDependencyTemplateAsId.js} +3 -3
  142. package/lib/dependencies/{ContextDependencyTemplateAsRequireCall.js → context/ContextDependencyTemplateAsRequireCall.js} +3 -3
  143. package/lib/dependencies/context/ContextElementDependency.js +198 -0
  144. package/lib/dependencies/{ImportMetaContextDependency.js → context/ImportMetaContextDependency.js} +7 -6
  145. package/lib/dependencies/{ImportMetaContextDependencyParserPlugin.js → context/ImportMetaContextDependencyParserPlugin.js} +9 -9
  146. package/lib/dependencies/{ImportMetaContextPlugin.js → context/ImportMetaContextPlugin.js} +5 -5
  147. package/lib/dependencies/{ImportMetaGlobDependency.js → context/ImportMetaGlobDependency.js} +7 -6
  148. package/lib/dependencies/{ImportMetaGlobDependencyParserPlugin.js → context/ImportMetaGlobDependencyParserPlugin.js} +4 -4
  149. package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +9 -9
  150. package/lib/dependencies/{RequireContextDependency.js → context/RequireContextDependency.js} +7 -6
  151. package/lib/dependencies/{RequireContextDependencyParserPlugin.js → context/RequireContextDependencyParserPlugin.js} +2 -2
  152. package/lib/dependencies/{RequireContextPlugin.js → context/RequireContextPlugin.js} +5 -5
  153. package/lib/dependencies/{CachedConstDependency.js → core/CachedConstDependency.js} +12 -11
  154. package/lib/dependencies/core/ConstDependency.js +131 -0
  155. package/lib/dependencies/{ImportPhase.js → core/ImportPhase.js} +5 -4
  156. package/lib/dependencies/{ModuleDependency.js → core/ModuleDependency.js} +10 -7
  157. package/lib/dependencies/{ModuleDependencyTemplateAsId.js → core/ModuleDependencyTemplateAsId.js} +3 -3
  158. package/lib/dependencies/{ModuleDependencyTemplateAsRequireId.js → core/ModuleDependencyTemplateAsRequireId.js} +2 -2
  159. package/lib/dependencies/{ModuleInitFragmentDependency.js → core/ModuleInitFragmentDependency.js} +10 -9
  160. package/lib/dependencies/core/NullDependency.js +44 -0
  161. package/lib/dependencies/{RuntimeRequirementsDependency.js → core/RuntimeRequirementsDependency.js} +10 -9
  162. package/lib/dependencies/{StaticExportsDependency.js → core/StaticExportsDependency.js} +15 -8
  163. package/lib/dependencies/{CssIcssExportDependency.js → css/CssIcssExportDependency.js} +375 -100
  164. package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +26 -22
  165. package/lib/dependencies/{CssIcssSymbolDependency.js → css/CssIcssSymbolDependency.js} +13 -12
  166. package/lib/dependencies/{CssImportDependency.js → css/CssImportDependency.js} +15 -11
  167. package/lib/dependencies/{CssUrlDependency.js → css/CssUrlDependency.js} +26 -21
  168. package/lib/dependencies/{CreateRequireParserPlugin.js → esm/CreateRequireParserPlugin.js} +9 -9
  169. package/lib/dependencies/{HarmonyAcceptDependency.js → esm/ESMAcceptDependency.js} +41 -38
  170. package/lib/dependencies/esm/ESMAcceptImportDependency.js +39 -0
  171. package/lib/dependencies/{HarmonyCompatibilityDependency.js → esm/ESMCompatibilityDependency.js} +40 -41
  172. package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +22 -21
  173. package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
  174. package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +62 -93
  175. package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +83 -49
  176. package/lib/dependencies/{HarmonyExportHeaderDependency.js → esm/ESMExportHeaderDependency.js} +17 -15
  177. package/lib/dependencies/esm/ESMExportImportedSideEffectDependency.js +37 -0
  178. package/lib/dependencies/{HarmonyExportImportedSpecifierDependency.js → esm/ESMExportImportedSpecifierDependency.js} +136 -122
  179. package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +68 -43
  180. package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +68 -65
  181. package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -4
  182. package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
  183. package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +74 -71
  184. package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +199 -97
  185. package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +26 -29
  186. package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +86 -43
  187. package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +110 -61
  188. package/lib/dependencies/esm/ESMModulesPlugin.js +207 -0
  189. package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
  190. package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -11
  191. package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +2 -2
  192. package/lib/{util → dependencies/helpers}/chainedImports.js +8 -9
  193. package/lib/dependencies/{processExportInfo.js → helpers/processExportInfo.js} +4 -4
  194. package/lib/{util → dependencies/helpers}/traverseDestructuringAssignmentProperties.js +1 -1
  195. package/lib/dependencies/{ImportMetaHotAcceptDependency.js → hmr/ImportMetaHotAcceptDependency.js} +8 -7
  196. package/lib/dependencies/{ImportMetaHotDeclineDependency.js → hmr/ImportMetaHotDeclineDependency.js} +8 -7
  197. package/lib/dependencies/{ModuleHotAcceptDependency.js → hmr/ModuleHotAcceptDependency.js} +8 -7
  198. package/lib/dependencies/{ModuleHotDeclineDependency.js → hmr/ModuleHotDeclineDependency.js} +8 -7
  199. package/lib/dependencies/{HtmlEntryDependency.js → html/HtmlEntryDependency.js} +125 -243
  200. package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -12
  201. package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +72 -23
  202. package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +53 -19
  203. package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
  204. package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
  205. package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
  206. package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
  207. package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +20 -20
  208. package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
  209. package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
  210. package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
  211. package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
  212. package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
  213. package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +126 -107
  214. package/lib/dependencies/{SystemPlugin.js → system/SystemPlugin.js} +11 -38
  215. package/lib/dependencies/{SystemRuntimeModule.js → system/SystemRuntimeModule.js} +3 -3
  216. package/lib/dependencies/{ImportMetaResolveDependency.js → url/ImportMetaResolveDependency.js} +9 -8
  217. package/lib/dependencies/{URLContextDependency.js → url/URLContextDependency.js} +11 -10
  218. package/lib/dependencies/{URLDependency.js → url/URLDependency.js} +34 -25
  219. package/lib/{url → dependencies/url}/URLParserPlugin.js +22 -26
  220. package/lib/dependencies/{URLPlugin.js → url/URLPlugin.js} +6 -7
  221. package/lib/dependencies/{WebAssemblyExportImportedDependency.js → wasm/WebAssemblyExportImportedDependency.js} +18 -11
  222. package/lib/dependencies/{WebAssemblyImportDependency.js → wasm/WebAssemblyImportDependency.js} +19 -12
  223. package/lib/dependencies/{CreateScriptUrlDependency.js → worker/CreateScriptUrlDependency.js} +12 -11
  224. package/lib/dependencies/{WorkerAndWorkletPlugin.js → worker/WorkerAndWorkletPlugin.js} +46 -54
  225. package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +28 -20
  226. package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +25 -27
  227. package/lib/{EvalDevToolModulePlugin.js → devtool/EvalDevToolModulePlugin.js} +20 -6
  228. package/lib/{EvalSourceMapDevToolPlugin.js → devtool/EvalSourceMapDevToolPlugin.js} +32 -24
  229. package/lib/devtool/ModuleFilenameHelpers.js +413 -0
  230. package/lib/{SourceMapDevToolModuleOptionsPlugin.js → devtool/SourceMapDevToolModuleOptionsPlugin.js} +10 -3
  231. package/lib/{SourceMapDevToolPlugin.js → devtool/SourceMapDevToolPlugin.js} +207 -129
  232. package/lib/{util → devtool}/generateDebugId.js +1 -1
  233. package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
  234. package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
  235. package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
  236. package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
  237. package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
  238. package/lib/dll/DelegatedModule.js +20 -18
  239. package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
  240. package/lib/dll/DelegatedPlugin.js +1 -1
  241. package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
  242. package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
  243. package/lib/dll/DllEntryPlugin.js +3 -3
  244. package/lib/dll/DllModule.js +11 -9
  245. package/lib/dll/DllModuleFactory.js +3 -3
  246. package/lib/dll/DllPlugin.js +18 -6
  247. package/lib/dll/DllReferencePlugin.js +102 -26
  248. package/lib/dll/LibManifestPlugin.js +9 -7
  249. package/lib/electron/ElectronTargetPlugin.js +2 -2
  250. package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
  251. package/lib/{dependencies → entry}/EntryDependency.js +11 -2
  252. package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
  253. package/lib/entry/EntryPlugin.js +75 -0
  254. package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
  255. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  256. package/lib/errors/BuildCycleError.js +1 -1
  257. package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
  258. package/lib/errors/ChunkRenderError.js +1 -1
  259. package/lib/errors/CodeGenerationError.js +1 -1
  260. package/lib/errors/CommentCompilationWarning.js +1 -1
  261. package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
  262. package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
  263. package/lib/errors/DeprecatedOptionWarning.js +30 -0
  264. package/lib/errors/DllManifestError.js +26 -0
  265. package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
  266. package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
  267. package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
  268. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  269. package/lib/errors/ErrorHelpers.js +222 -0
  270. package/lib/errors/ExternalStarReexportError.js +2 -2
  271. package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
  272. package/lib/errors/HookWebpackError.js +6 -5
  273. package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
  274. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  275. package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
  276. package/lib/errors/ModuleBuildError.js +1 -1
  277. package/lib/errors/ModuleDependencyError.js +2 -2
  278. package/lib/errors/ModuleDependencyWarning.js +2 -2
  279. package/lib/errors/ModuleError.js +1 -1
  280. package/lib/errors/ModuleHashingError.js +1 -1
  281. package/lib/errors/ModuleNotFoundError.js +3 -3
  282. package/lib/errors/ModuleParseError.js +1 -1
  283. package/lib/errors/ModuleRestoreError.js +1 -1
  284. package/lib/errors/ModuleStoreError.js +1 -1
  285. package/lib/errors/ModuleWarning.js +1 -1
  286. package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
  287. package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
  288. package/lib/errors/NodeStuffInWebError.js +7 -2
  289. package/lib/errors/PathVariableError.js +31 -0
  290. package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
  291. package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
  292. package/lib/errors/RuntimeModuleGenerationError.js +51 -0
  293. package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
  294. package/lib/errors/SystemImportDeprecationWarning.js +43 -0
  295. package/lib/errors/UnmergeableEntryExportsError.js +34 -0
  296. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  297. package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
  298. package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
  299. package/lib/errors/WebpackError.js +12 -3
  300. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
  301. package/lib/esm/ModuleChunkFormatPlugin.js +19 -19
  302. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
  303. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
  304. package/lib/{ExternalModule.js → externals/ExternalModule.js} +85 -63
  305. package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +41 -39
  306. package/lib/externals/ExternalsPlugin.js +99 -0
  307. package/lib/fs/FileSystemInfo.js +4642 -0
  308. package/lib/{util → fs}/fs.js +22 -9
  309. package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
  310. package/lib/graph/Chunk.js +985 -0
  311. package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +187 -80
  312. package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
  313. package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
  314. package/lib/graph/Dependency.js +628 -0
  315. package/lib/graph/Entrypoint.js +136 -0
  316. package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +151 -99
  317. package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
  318. package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +36 -39
  319. package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
  320. package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +163 -72
  321. package/lib/{util → graph}/findGraphRoots.js +20 -21
  322. package/lib/graph/isDependencyKind.js +23 -0
  323. package/lib/hmr/HotModuleReplacement.runtime.js +2 -2
  324. package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +49 -47
  325. package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
  326. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +10 -8
  327. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
  328. package/lib/hmr/LazyCompilationPlugin.js +34 -26
  329. package/lib/html/HtmlGenerator.js +168 -125
  330. package/lib/html/HtmlModule.js +6 -2
  331. package/lib/html/HtmlModulesPlugin.js +260 -215
  332. package/lib/html/HtmlParser.js +598 -292
  333. package/lib/html/builtinEmbeddedRenderer.js +60 -13
  334. package/lib/html/data.js +23 -1
  335. package/lib/html/htmlMinify.js +120 -51
  336. package/lib/html/syntax-parser.js +15796 -0
  337. package/lib/html/syntax-printer.js +1034 -0
  338. package/lib/html/syntax.js +37 -14062
  339. package/lib/html/xmlMinify.js +67 -0
  340. package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
  341. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  342. package/lib/ids/HashedModuleIdsPlugin.js +31 -4
  343. package/lib/ids/IdHelpers.js +4 -4
  344. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  345. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
  346. package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
  347. package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
  348. package/lib/ids/SyncModuleIdsPlugin.js +3 -3
  349. package/lib/{util → ids}/numberHash.js +1 -1
  350. package/lib/index.js +348 -99
  351. package/lib/{APIPlugin.js → javascript/APIPlugin.js} +29 -30
  352. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
  353. package/lib/javascript/BasicEvaluatedExpression.js +4 -4
  354. package/lib/javascript/ChunkHelpers.js +64 -4
  355. package/lib/javascript/CommonJsChunkFormatPlugin.js +4 -7
  356. package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +10 -11
  357. package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +90 -139
  358. package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
  359. package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
  360. package/lib/javascript/JavascriptGenerator.js +25 -18
  361. package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +7 -7
  362. package/lib/javascript/JavascriptModule.js +4 -3
  363. package/lib/javascript/JavascriptModulesPlugin.js +458 -256
  364. package/lib/javascript/JavascriptParser.js +916 -287
  365. package/lib/javascript/JavascriptParserHelpers.js +1 -1
  366. package/lib/javascript/MergedEntryExports.js +196 -0
  367. package/lib/javascript/ScopeAnalyzer.js +3840 -5
  368. package/lib/javascript/StartupHelpers.js +6 -6
  369. package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +12 -15
  370. package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
  371. package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
  372. package/lib/javascript/data.js +533 -122
  373. package/lib/javascript/jsMinify.js +272 -0
  374. package/lib/javascript/regexp.js +67 -32
  375. package/lib/javascript/syntax-parser.js +18561 -0
  376. package/lib/javascript/syntax-printer-data.js +933 -0
  377. package/lib/javascript/syntax-printer.js +47106 -0
  378. package/lib/javascript/syntax.js +20 -10946
  379. package/lib/json/JsonData.js +1 -1
  380. package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
  381. package/lib/json/JsonGenerator.js +17 -11
  382. package/lib/json/JsonModule.js +2 -2
  383. package/lib/json/JsonModulesPlugin.js +1 -1
  384. package/lib/json/JsonParser.js +5 -5
  385. package/lib/json/jsonMinify.js +69 -0
  386. package/lib/library/AbstractLibraryPlugin.js +28 -15
  387. package/lib/library/AmdLibraryPlugin.js +4 -4
  388. package/lib/library/AssignLibraryPlugin.js +27 -11
  389. package/lib/library/EnableLibraryPlugin.js +1 -1
  390. package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
  391. package/lib/library/JsonpLibraryPlugin.js +1 -1
  392. package/lib/library/LibraryTemplatePlugin.js +53 -0
  393. package/lib/library/ModuleLibraryPlugin.js +207 -285
  394. package/lib/library/SystemLibraryPlugin.js +6 -8
  395. package/lib/library/UmdLibraryPlugin.js +3 -4
  396. package/lib/{dependencies → loaders}/LoaderDependency.js +3 -3
  397. package/lib/{dependencies → loaders}/LoaderImportDependency.js +9 -3
  398. package/lib/{LoaderOptionsPlugin.js → loaders/LoaderOptionsPlugin.js} +30 -12
  399. package/lib/{dependencies → loaders}/LoaderPlugin.js +27 -2
  400. package/lib/loaders/LoaderRunner.js +160 -22
  401. package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
  402. package/lib/logging/Logger.js +7 -9
  403. package/lib/logging/ProgressPlugin.js +957 -0
  404. package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
  405. package/lib/{Generator.js → module/Generator.js} +38 -14
  406. package/lib/{Module.js → module/Module.js} +122 -54
  407. package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
  408. package/lib/module/NormalModule.js +2348 -0
  409. package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +53 -54
  410. package/lib/module/NullFactory.js +29 -0
  411. package/lib/{Parser.js → module/Parser.js} +3 -3
  412. package/lib/module/RawModule.js +208 -0
  413. package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
  414. package/lib/{util → module}/extractSourceMap.js +2 -2
  415. package/lib/{util → module}/findCaseMismatch.js +2 -2
  416. package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
  417. package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
  418. package/lib/{dependencies → node}/ExternalModuleInitFragment.js +6 -5
  419. package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
  420. package/lib/node/NodeEnvironmentPlugin.js +11 -1
  421. package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
  422. package/lib/node/NodeTargetPlugin.js +1 -1
  423. package/lib/node/NodeWatchFileSystem.js +61 -15
  424. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
  425. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +9 -7
  426. package/lib/node/ReadFileCompileWasmPlugin.js +7 -5
  427. package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
  428. package/lib/node/nodeConsole.js +2 -4
  429. package/lib/optimize/AggressiveMergingPlugin.js +5 -7
  430. package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
  431. package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +13 -13
  432. package/lib/optimize/ConcatenatedModule.js +305 -309
  433. package/lib/{ConcatenationScope.js → optimize/ConcatenationScope.js} +39 -6
  434. package/lib/optimize/ConstExportsPlugin.js +7 -7
  435. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  436. package/lib/{FlagAllModulesAsUsedPlugin.js → optimize/FlagAllModulesAsUsedPlugin.js} +3 -3
  437. package/lib/{FlagDependencyExportsPlugin.js → optimize/FlagDependencyExportsPlugin.js} +25 -30
  438. package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +26 -30
  439. package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
  440. package/lib/optimize/FlagIncludedChunksPlugin.js +5 -13
  441. package/lib/optimize/InlineExports.js +11 -3
  442. package/lib/optimize/InnerGraph.js +5 -13
  443. package/lib/optimize/InnerGraphPlugin.js +17 -23
  444. package/lib/optimize/LazyBarrels.js +584 -0
  445. package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
  446. package/lib/optimize/LimitChunkCountPlugin.js +21 -15
  447. package/lib/optimize/MangleExportsPlugin.js +8 -9
  448. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
  449. package/lib/optimize/MinChunkSizePlugin.js +9 -6
  450. package/lib/optimize/ModuleConcatenationPlugin.js +23 -16
  451. package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
  452. package/lib/optimize/RealContentHashPlugin.js +16 -7
  453. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  454. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  455. package/lib/optimize/SideEffectsFlagPlugin.js +25 -37
  456. package/lib/optimize/SplitChunksPlugin.js +715 -159
  457. package/lib/{util → optimize}/TupleQueue.js +9 -9
  458. package/lib/optimize/chunkSetIntersections.js +437 -0
  459. package/lib/{util → optimize}/deterministicGrouping.js +25 -30
  460. package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
  461. package/lib/{CleanPlugin.js → output/CleanPlugin.js} +66 -24
  462. package/lib/{CopyPlugin.js → output/CopyPlugin.js} +142 -67
  463. package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
  464. package/lib/output/SSRManifestPlugin.js +349 -0
  465. package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
  466. package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
  467. package/lib/performance/BroadContextsPlugin.js +4 -4
  468. package/lib/performance/CacheEffectivenessPlugin.js +5 -7
  469. package/lib/performance/ConflictingResourceHintsPlugin.js +1 -1
  470. package/lib/performance/DuplicateModulesPlugin.js +3 -4
  471. package/lib/performance/DuplicatePackagesPlugin.js +3 -3
  472. package/lib/performance/DynamicExportsPlugin.js +2 -2
  473. package/lib/performance/EvalUsagePlugin.js +3 -3
  474. package/lib/performance/HotspotsPlugin.js +11 -10
  475. package/lib/performance/LargeModulesPlugin.js +2 -3
  476. package/lib/performance/LegacyJavascriptPlugin.js +1 -2
  477. package/lib/performance/MissingSideEffectsPlugin.js +2 -3
  478. package/lib/performance/MissingSourceMapsPlugin.js +5 -6
  479. package/lib/performance/PureAnnotationsPlugin.js +3 -3
  480. package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
  481. package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
  482. package/lib/performance/SizeLimitsPlugin.js +13 -16
  483. package/lib/performance/TopLevelThisPlugin.js +8 -7
  484. package/lib/performance/UnsplitVendorsPlugin.js +1 -2
  485. package/lib/performance/UnusedAliasesPlugin.js +6 -7
  486. package/lib/performance/UnusedAssetsPlugin.js +5 -5
  487. package/lib/performance/UnusedDefinesPlugin.js +2 -2
  488. package/lib/performance/UnusedExternalsPlugin.js +3 -4
  489. package/lib/performance/UnusedFederationPlugin.js +2 -4
  490. package/lib/performance/UnusedModulesPlugin.js +5 -4
  491. package/lib/performance/getModuleSize.js +1 -1
  492. package/lib/performance/hasOnlyUnusedExports.js +4 -4
  493. package/lib/performance/isOnlyReexported.js +7 -6
  494. package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
  495. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
  496. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +7 -9
  497. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +4 -4
  498. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -4
  499. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -4
  500. package/lib/{dependencies → prefetch}/PrefetchDependency.js +1 -1
  501. package/lib/{PrefetchPlugin.js → prefetch/PrefetchPlugin.js} +2 -2
  502. package/lib/prefetch/ResourceHintPlugin.js +82 -65
  503. package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
  504. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -13
  505. package/lib/prefetch/parseResourceHintOptions.js +4 -3
  506. package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
  507. package/lib/{dependencies → provide}/ProvidedDependency.js +14 -13
  508. package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
  509. package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
  510. package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
  511. package/lib/resolve/getResolveOptionsKey.js +59 -0
  512. package/lib/rules/RuleSetCompiler.js +27 -46
  513. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
  514. package/lib/runtime/AsyncModuleRuntimeModule.js +10 -9
  515. package/lib/runtime/AutoPublicPathRuntimeModule.js +5 -5
  516. package/lib/runtime/BaseUriRuntimeModule.js +3 -3
  517. package/lib/runtime/ChunkNameRuntimeModule.js +2 -2
  518. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -2
  519. package/lib/runtime/CompatRuntimeModule.js +4 -4
  520. package/lib/runtime/ConcatenationWrapRuntimeModule.js +2 -2
  521. package/lib/runtime/ConstructRequireRuntimeModule.js +2 -2
  522. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  523. package/lib/runtime/CreateScriptRuntimeModule.js +2 -2
  524. package/lib/runtime/CreateScriptUrlRuntimeModule.js +2 -2
  525. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -6
  526. package/lib/runtime/EnsureChunkRuntimeModule.js +4 -4
  527. package/lib/runtime/GetChunkFilenameRuntimeModule.js +9 -10
  528. package/lib/runtime/GetFullHashRuntimeModule.js +2 -2
  529. package/lib/runtime/GetMainFilenameRuntimeModule.js +4 -4
  530. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +3 -3
  531. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +3 -3
  532. package/lib/runtime/GlobalRuntimeModule.js +5 -7
  533. package/lib/runtime/HasOwnPropertyRuntimeModule.js +3 -3
  534. package/lib/runtime/HelperRuntimeModule.js +16 -1
  535. package/lib/runtime/LoadScriptRuntimeModule.js +3 -3
  536. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +135 -102
  537. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -2
  538. package/lib/runtime/NonceRuntimeModule.js +2 -2
  539. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  540. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  541. package/lib/runtime/RelativeUrlRuntimeModule.js +2 -2
  542. package/lib/{RuntimeGlobals.js → runtime/RuntimeGlobals.js} +18 -1
  543. package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
  544. package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
  545. package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +48 -50
  546. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
  547. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
  548. package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
  549. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
  550. package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
  551. package/lib/runtime/SystemContextRuntimeModule.js +2 -2
  552. package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
  553. package/lib/runtime/WorkerRuntimeModule.js +1 -1
  554. package/lib/runtime/baseUri.js +1 -1
  555. package/lib/schemes/DataUriPlugin.js +4 -7
  556. package/lib/schemes/HttpUriPlugin.js +67 -11
  557. package/lib/schemes/VirtualUrlPlugin.js +50 -16
  558. package/lib/serialization/AggregateErrorSerializer.js +2 -2
  559. package/lib/serialization/BinaryMiddleware.js +9 -9
  560. package/lib/serialization/FileMiddleware.js +19 -19
  561. package/lib/serialization/ObjectMiddleware.js +77 -49
  562. package/lib/serialization/SerializerMiddleware.js +2 -2
  563. package/lib/serialization/SingleItemMiddleware.js +4 -2
  564. package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
  565. package/lib/sharing/ConsumeSharedModule.js +18 -14
  566. package/lib/sharing/ConsumeSharedPlugin.js +148 -42
  567. package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
  568. package/lib/sharing/ProvideForSharedDependency.js +9 -1
  569. package/lib/sharing/ProvideSharedDependency.js +1 -1
  570. package/lib/sharing/ProvideSharedModule.js +11 -9
  571. package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
  572. package/lib/sharing/ProvideSharedPlugin.js +111 -20
  573. package/lib/sharing/SharePlugin.js +102 -9
  574. package/lib/sharing/ShareRuntimeModule.js +6 -6
  575. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  576. package/lib/{util → sharing}/semver.js +19 -19
  577. package/lib/sharing/utils.js +59 -2
  578. package/lib/stats/DefaultStatsFactoryPlugin.js +25 -23
  579. package/lib/stats/DefaultStatsPresetPlugin.js +1 -1
  580. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -3
  581. package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
  582. package/lib/{Stats.js → stats/Stats.js} +4 -4
  583. package/lib/stats/StatsFactory.js +14 -13
  584. package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
  585. package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
  586. package/lib/template/DependencyTemplate.js +77 -0
  587. package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
  588. package/lib/template/InitFragment.js +223 -0
  589. package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
  590. package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
  591. package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
  592. package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +178 -106
  593. package/lib/{Template.js → template/Template.js} +13 -11
  594. package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +35 -82
  595. package/lib/typescript/TypeScriptPlugin.js +5 -6
  596. package/lib/util/LocConverter.js +4 -7
  597. package/lib/util/RequestShortener.js +44 -0
  598. package/lib/util/SortableSet.js +87 -22
  599. package/lib/util/SourceProcessor.js +364 -66
  600. package/lib/util/TupleSet.js +27 -27
  601. package/lib/util/WeakTupleMap.js +10 -12
  602. package/lib/util/buildDiagnostics.js +2 -2
  603. package/lib/util/comparators.js +10 -10
  604. package/lib/util/concatenate.js +32 -151
  605. package/lib/util/createHooksRegistry.js +1 -2
  606. package/lib/util/createMappings.js +111 -0
  607. package/lib/util/dataURL.js +96 -18
  608. package/lib/util/deprecation.js +1 -1
  609. package/lib/util/extractComments.js +118 -0
  610. package/lib/util/formatLocation.js +1 -1
  611. package/lib/util/globUtils.js +197 -16
  612. package/lib/util/haltVisitors.js +51 -0
  613. package/lib/util/handlerKeys.js +2 -2
  614. package/lib/util/hash/wasm-hash.js +3 -4
  615. package/lib/util/identifier.js +117 -1
  616. package/lib/util/implicitTypeLoaderFallback.js +6 -4
  617. package/lib/util/internalSerializables.js +295 -103
  618. package/lib/util/magicComment.js +12 -7
  619. package/lib/util/makeSerializable.js +23 -4
  620. package/lib/util/parseJson.js +1 -1
  621. package/lib/util/preloadModuleType.js +5 -2
  622. package/lib/util/registerExternalSerializer.js +2 -2
  623. package/lib/util/removeBOM.js +1 -1
  624. package/lib/util/runtime.js +1 -1
  625. package/lib/util/serialization.js +4 -1
  626. package/lib/util/source.js +2 -2
  627. package/lib/util/terminalColors.js +161 -0
  628. package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
  629. package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
  630. package/lib/{wasm-async → wasm}/AsyncWasmModule.js +9 -5
  631. package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +11 -6
  632. package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +16 -11
  633. package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
  634. package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +8 -8
  635. package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
  636. package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +9 -7
  637. package/lib/wasm/wasmModuleFilename.js +2 -2
  638. package/lib/wasm-sync/SyncWasmModule.js +3 -3
  639. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +11 -12
  640. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
  641. package/lib/wasm-sync/WebAssemblyGenerator.js +15 -9
  642. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +19 -16
  643. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
  644. package/lib/wasm-sync/WebAssemblyParser.js +6 -6
  645. package/lib/wasm-sync/WebAssemblyUtils.js +8 -9
  646. package/lib/{MultiWatching.js → watch/MultiWatching.js} +3 -3
  647. package/lib/{WatchIgnorePlugin.js → watch/WatchIgnorePlugin.js} +43 -9
  648. package/lib/{Watching.js → watch/Watching.js} +8 -8
  649. package/lib/web/FetchCompileAsyncWasmPlugin.js +8 -6
  650. package/lib/web/FetchCompileWasmPlugin.js +6 -4
  651. package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
  652. package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
  653. package/lib/web/JsonpTemplatePlugin.js +1 -1
  654. package/lib/webpack.js +27 -17
  655. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
  656. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
  657. package/package.json +70 -40
  658. package/schemas/WebpackOptions.check.js +2 -1
  659. package/schemas/WebpackOptions.d.json.ts +2 -0
  660. package/schemas/WebpackOptions.json +294 -74
  661. package/schemas/plugins/BannerPlugin.check.js +2 -1
  662. package/schemas/plugins/BannerPlugin.json +29 -2
  663. package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -0
  664. package/schemas/plugins/HtmlParserOptions.check.js +2 -1
  665. package/schemas/plugins/IgnorePlugin.check.js +1 -0
  666. package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
  667. package/schemas/plugins/IgnorePlugin.json +1 -1
  668. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -0
  669. package/schemas/plugins/ManifestPlugin.check.js +1 -0
  670. package/schemas/plugins/ManifestPlugin.json +3 -3
  671. package/schemas/plugins/ProgressPlugin.check.js +2 -1
  672. package/schemas/plugins/ProgressPlugin.json +2 -7
  673. package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
  674. package/schemas/plugins/SSRManifestPlugin.json +20 -0
  675. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -1
  676. package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
  677. package/schemas/plugins/WatchIgnorePlugin.check.js +2 -1
  678. package/schemas/plugins/WatchIgnorePlugin.json +12 -3
  679. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -0
  680. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -0
  681. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -0
  682. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -0
  683. package/schemas/plugins/container/ContainerPlugin.check.js +2 -1
  684. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  685. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -0
  686. package/schemas/plugins/container/ExternalsType.check.js +1 -0
  687. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -1
  688. package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
  689. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -0
  690. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -0
  691. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -0
  692. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -0
  693. package/schemas/plugins/css/CssParserOptions.check.js +1 -0
  694. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -0
  695. package/schemas/plugins/dll/DllPlugin.check.js +1 -0
  696. package/schemas/plugins/dll/DllReferencePlugin.check.js +2 -1
  697. package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
  698. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -0
  699. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -0
  700. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -0
  701. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +1 -0
  702. package/schemas/plugins/json/JsonModulesPluginParser.check.js +1 -0
  703. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -0
  704. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -0
  705. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -0
  706. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -0
  707. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -0
  708. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +1 -0
  709. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +2 -1
  710. package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
  711. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +2 -1
  712. package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
  713. package/schemas/plugins/sharing/SharePlugin.check.js +2 -1
  714. package/schemas/plugins/sharing/SharePlugin.json +32 -0
  715. package/types.d.ts +13915 -8414
  716. package/lib/ErrorHelpers.js +0 -107
  717. package/lib/LazyBarrel.js +0 -388
  718. package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -39
  719. package/lib/dependencies/HarmonyModulesPlugin.js +0 -192
  720. package/lib/javascript/ChunkFormatHelpers.js +0 -71
  721. package/lib/javascript/grammar.js +0 -5546
  722. package/lib/javascript/parser.js +0 -1494
  723. package/lib/javascript/regexpData.js +0 -51
  724. package/lib/performance/getSourceModules.js +0 -22
  725. package/lib/util/Semaphore.js +0 -65
  726. package/lib/util/objectToMap.js +0 -15
  727. package/schemas/WebpackOptions.check.d.ts +0 -7
  728. package/schemas/_container.json +0 -155
  729. package/schemas/_sharing.json +0 -118
  730. package/schemas/plugins/BannerPlugin.check.d.ts +0 -7
  731. package/schemas/plugins/HtmlGeneratorOptions.check.d.ts +0 -7
  732. package/schemas/plugins/HtmlParserOptions.check.d.ts +0 -7
  733. package/schemas/plugins/IgnorePlugin.check.d.ts +0 -7
  734. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +0 -7
  735. package/schemas/plugins/ManifestPlugin.check.d.ts +0 -7
  736. package/schemas/plugins/ProgressPlugin.check.d.ts +0 -7
  737. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +0 -7
  738. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +0 -7
  739. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +0 -7
  740. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +0 -7
  741. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +0 -7
  742. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +0 -7
  743. package/schemas/plugins/container/ContainerPlugin.check.d.ts +0 -7
  744. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +0 -7
  745. package/schemas/plugins/container/ExternalsType.check.d.ts +0 -7
  746. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +0 -7
  747. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +0 -7
  748. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +0 -7
  749. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +0 -7
  750. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +0 -7
  751. package/schemas/plugins/css/CssParserOptions.check.d.ts +0 -7
  752. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +0 -7
  753. package/schemas/plugins/dll/DllPlugin.check.d.ts +0 -7
  754. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +0 -7
  755. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +0 -7
  756. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +0 -7
  757. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +0 -7
  758. package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +0 -7
  759. package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +0 -7
  760. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +0 -7
  761. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +0 -7
  762. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +0 -7
  763. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +0 -7
  764. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +0 -7
  765. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +0 -7
  766. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +0 -7
  767. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +0 -7
  768. package/schemas/plugins/sharing/SharePlugin.check.d.ts +0 -7
  769. /package/lib/{validateSchema.js → config/validateSchema.js} +0 -0
  770. /package/lib/{util → css}/conventions.js +0 -0
  771. /package/lib/{util → css}/topologicalSort.js +0 -0
  772. /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
  773. /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
  774. /package/lib/{util → fs}/StackedCacheMap.js +0 -0
  775. /package/lib/{util → javascript}/StackedMap.js +0 -0
  776. /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
  777. /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
  778. /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
  779. /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
  780. /package/lib/{util → optimize}/Queue.js +0 -0
  781. /package/lib/{util → stats}/smartGrouping.js +0 -0
@@ -39,14 +39,14 @@ const decodeDataURI = (uri) => {
39
39
 
40
40
  /**
41
41
  * A `data:` URI split into the parts a caller has to put back together.
42
- * `payload` is the text after the comma, still in the form it was written.
43
- * @typedef {{ mediaType: string, base64: boolean, payload: string }} ParsedDataURI
42
+ * `parameters` is every `;…` after the media type (`;base64` included) and
43
+ * `payload` the text after the comma, both in the form they were written.
44
+ * @typedef {{ mediaType: string, parameters: string, base64: boolean, payload: string }} ParsedDataURI
44
45
  */
45
46
 
46
47
  // `URIRegEx`'s `.` stops at a newline, which a raw `<svg>` payload carries, and
47
- // its `base64` group is optional in a way that reads `;charset=utf8` as one.
48
- // This one is the strict split a rewriter needs; that one stays as the matcher
49
- // module requests are recognized by.
48
+ // its optional `base64` group reads `;charset=utf8` as one. This is the strict
49
+ // split a rewriter needs; that one stays as the matcher for module requests.
50
50
  const STRICT_URI_REGEXP = /^data:([^,;]*)((?:;[^,;]*)*),([\s\S]*)$/i;
51
51
 
52
52
  const JSON_TYPE = "json";
@@ -120,22 +120,56 @@ const parseDataURI = (uri) => {
120
120
  if (match === null) return null;
121
121
  return {
122
122
  mediaType: match[1],
123
+ parameters: match[2],
123
124
  base64: /;base64$/i.test(match[2]),
124
125
  payload: match[3]
125
126
  };
126
127
  };
127
128
 
129
+ // A charset other than UTF-8 names bytes this cannot read back as text.
130
+ const FOREIGN_CHARSET_REGEXP = /;charset=(?!(?:utf-?8|us-ascii)(?:;|$))/i;
131
+
128
132
  /**
129
- * The payload as text, or `null` when reading it would not round-trip. A
130
- * percent-escaped payload is declined rather than decoded: how much of it the
131
- * author escaped is not recorded anywhere in the URI, so re-escaping would
132
- * rewrite bytes nothing asked to change.
133
+ * Decode a payload's percent-escapes the way the URL parser does: a `%` and two
134
+ * hex digits is the byte they name, and any other `%` is itself.
135
+ * @param {string} payload the payload as written
136
+ * @returns {Buffer} the bytes it names
137
+ */
138
+ const percentDecode = (payload) => {
139
+ const input = Buffer.from(payload, "utf8");
140
+ const output = Buffer.allocUnsafe(input.length);
141
+ let length = 0;
142
+ for (let i = 0; i < input.length; i++) {
143
+ const byte = input[i];
144
+ if (byte === 0x25 && i + 2 < input.length) {
145
+ const digits = String.fromCharCode(input[i + 1], input[i + 2]);
146
+ if (/^[0-9a-f]{2}$/i.test(digits)) {
147
+ output[length++] = Number.parseInt(digits, 16);
148
+ i += 2;
149
+ continue;
150
+ }
151
+ }
152
+ output[length++] = byte;
153
+ }
154
+ return output.subarray(0, length);
155
+ };
156
+
157
+ /**
158
+ * The payload as text, or `null` when reading it would not round-trip. A raw
159
+ * `#` is read as content, as webpack's own `data:` modules read it, so a
160
+ * rebuilt URI escapes it rather than cutting the payload short.
133
161
  * @param {ParsedDataURI} parsed the split URI
134
162
  * @returns {string | null} the payload as text
135
163
  */
136
164
  const decodeDataURIPayload = (parsed) => {
137
165
  if (!parsed.base64) {
138
- return parsed.payload.includes("%") ? null : parsed.payload;
166
+ const { payload } = parsed;
167
+ if (!payload.includes("%")) return payload;
168
+ if (FOREIGN_CHARSET_REGEXP.test(parsed.parameters)) return null;
169
+ const bytes = percentDecode(payload);
170
+ const text = bytes.toString("utf8");
171
+ // Bytes that are no UTF-8 text are not written back as the same bytes.
172
+ return Buffer.from(text, "utf8").equals(bytes) ? text : null;
139
173
  }
140
174
  // Decoding is lenient rather than throwing, so garbage decodes to something
141
175
  // that does not round-trip, which is the same answer: leave it alone.
@@ -145,6 +179,51 @@ const decodeDataURIPayload = (parsed) => {
145
179
  : null;
146
180
  };
147
181
 
182
+ /**
183
+ * A `data:` URI's payload as text, for a caller that will render it, with the
184
+ * language its media type names. `null` when there is nothing to offer: not a
185
+ * `data:` URI, a media type naming no language, a payload that would not
186
+ * round-trip, or a raw `#`, where a browser reads the rest as a fragment.
187
+ * @param {string} uri the URI, unquoted and unescaped
188
+ * @returns {{ parsed: ParsedDataURI, type: string, payload: string } | null} what it holds, or null
189
+ */
190
+ const readEmbeddedDataURI = (uri) => {
191
+ if (uri.includes("#")) return null;
192
+ const parsed = parseDataURI(uri);
193
+ if (parsed === null) return null;
194
+ const type = languageOfMediaType(parsed.mediaType);
195
+ if (type === undefined) return null;
196
+ const payload = decodeDataURIPayload(parsed);
197
+ if (payload === null || payload === "") return null;
198
+ return { parsed, type, payload };
199
+ };
200
+
201
+ /**
202
+ * Escape a payload for a `data:` URI written without `base64`, touching only
203
+ * what would change what the URI means. The host's own quoting is the caller's.
204
+ * @param {string} text the payload as text
205
+ * @returns {string} the escaped payload
206
+ */
207
+ const encodeDataURIPayload = (text) => {
208
+ // WHY: `%` starts an escape and `#` a fragment. The URL parser drops every
209
+ // tab and newline and strips C0 controls and spaces off the end, so those
210
+ // are escaped too, or the payload read back is not the one written.
211
+ let trailing = text.length;
212
+ while (trailing > 0 && text.charCodeAt(trailing - 1) === 0x20) trailing--;
213
+ let out = "";
214
+ let start = 0;
215
+ for (let i = 0; i < text.length; i++) {
216
+ const c = text.charCodeAt(i);
217
+ if (c > 0x20 && c !== 0x7f && c !== 0x25 && c !== 0x23) continue;
218
+ if (c === 0x20 && i < trailing) continue;
219
+ out += `${text.slice(start, i)}%${c < 0x10 ? "0" : ""}${c
220
+ .toString(16)
221
+ .toUpperCase()}`;
222
+ start = i + 1;
223
+ }
224
+ return start === 0 ? text : out + text.slice(start);
225
+ };
226
+
148
227
  /**
149
228
  * Rebuild a `data:` URI around a new payload, in the form it was written in.
150
229
  * @param {ParsedDataURI} parsed the split URI
@@ -152,14 +231,12 @@ const decodeDataURIPayload = (parsed) => {
152
231
  * @returns {string} the rebuilt URI
153
232
  */
154
233
  const buildDataURI = (parsed, text) => {
155
- const head = `data:${parsed.mediaType}${parsed.base64 ? ";base64" : ""},`;
234
+ // A `;charset=` names how the payload decodes, so it is kept as written.
235
+ const head = `data:${parsed.mediaType}${parsed.parameters},`;
156
236
  if (parsed.base64) {
157
237
  return head + Buffer.from(text, "utf8").toString("base64");
158
238
  }
159
- // Only the two that would change what the URI means: `%` starts an escape and
160
- // `#` starts a fragment. Everything else stays as the renderer wrote it, and
161
- // the url token's own quoting is the caller's to apply.
162
- return head + text.replace(/%/g, "%25").replace(/#/g, "%23");
239
+ return head + encodeDataURIPayload(text);
163
240
  };
164
241
 
165
242
  /**
@@ -209,8 +286,7 @@ const collectEmbeddedDiagnostics = (reported) => {
209
286
 
210
287
  /**
211
288
  * What a renderer made of one embedded body: the minified text, and anything it
212
- * has to report about it. A bare string is the text alone, `undefined` a
213
- * renderer that declined.
289
+ * has to report about it. A bare string is the text alone.
214
290
  * @typedef {{ code?: string, warnings?: (Error | string)[], errors?: (Error | string)[] }} EmbeddedSourceResult
215
291
  */
216
292
 
@@ -258,7 +334,9 @@ module.exports = {
258
334
  decodeDataURI,
259
335
  decodeDataURIPayload,
260
336
  embeddedText,
337
+ encodeDataURIPayload,
261
338
  languageOfFilename,
262
339
  languageOfMediaType,
263
- parseDataURI
340
+ parseDataURI,
341
+ readEmbeddedDataURI
264
342
  };
@@ -203,7 +203,7 @@ module.exports.arrayToSetDeprecation = (set, name) => {
203
203
  * Returns } SetDeprecatedArray.
204
204
  * @template T
205
205
  * @param {string} name name
206
- * @returns {{ new <T = EXPECTED_ANY>(values?: ReadonlyArray<T> | null): SetDeprecatedArray<T> }} SetDeprecatedArray
206
+ * @returns {{ new <T>(values?: ReadonlyArray<T> | null): SetDeprecatedArray<T> }} SetDeprecatedArray
207
207
  */
208
208
  module.exports.createArrayToSetDeprecationSet = (name) => {
209
209
  let initialized = false;
@@ -0,0 +1,118 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author sheo13666q @sheo13666q
4
+ */
5
+
6
+ "use strict";
7
+
8
+ /**
9
+ * A condition in the minimizer plugin's `extractComments`. A function's arguments
10
+ * are each minimizer's own, so these minifiers hand it what `MinimizeExtractCommentsCondition` names.
11
+ * @typedef {boolean | string | RegExp | ((...args: never[]) => boolean)} PluginExtractCommentsCondition
12
+ */
13
+ /**
14
+ * The minimizer plugin's `extractComments`, as far as these minifiers read it: a
15
+ * condition, or an object holding one.
16
+ * @typedef {PluginExtractCommentsCondition | { condition?: PluginExtractCommentsCondition }} PluginExtractComments
17
+ */
18
+ /** @typedef {import("../../declarations/WebpackOptions").OptimizationMinimizeExtractComments} MinimizeExtractComments */
19
+ /** @typedef {import("../../declarations/WebpackOptions").OptimizationMinimizeExtractCommentsCondition} MinimizeExtractCommentsCondition */
20
+ /** @typedef {boolean | string | RegExp | ((comment: string) => boolean)} CommentsOption */
21
+ /** @typedef {(comment: string, line: number, column: number) => boolean} CommentPredicate */
22
+
23
+ /**
24
+ * How one language writes a comment, and which it keeps where nothing is extracted.
25
+ * @typedef {object} CommentSyntax
26
+ * @property {string} open what opens a comment, e.g. `/*`
27
+ * @property {string} close what closes it
28
+ * @property {(comment: string) => boolean} some what the `comments: "some"` level keeps
29
+ * @property {(comment: string) => boolean} unstated what is kept when `comments` is unset
30
+ */
31
+
32
+ /**
33
+ * A `comments` value as the predicate over a comment's text it stands for.
34
+ * @param {CommentsOption} comments as configured
35
+ * @param {(comment: string) => boolean} some what `"some"` keeps
36
+ * @returns {(comment: string) => boolean} whether a comment is kept
37
+ */
38
+ const keepCondition = (comments, some) => {
39
+ if (typeof comments === "function") return comments;
40
+ if (comments === true || comments === "all") return () => true;
41
+ if (comments === false) return () => false;
42
+ if (comments === "some") return some;
43
+ const pattern = comments instanceof RegExp ? comments : new RegExp(comments);
44
+ return (comment) => pattern.test(comment);
45
+ };
46
+
47
+ /**
48
+ * Which comments `extractComments` takes out, read as terser-webpack-plugin
49
+ * reads it: `true`, `"some"` or an object without a condition is terser's `some`
50
+ * bar IE's `@cc_on`, which marks conditional compilation rather than a license.
51
+ * @param {PluginExtractComments | MinimizeExtractComments | undefined} option as configured
52
+ * @returns {CommentPredicate | undefined} the condition, or undefined when nothing is extracted
53
+ */
54
+ const extractCondition = (option) => {
55
+ if (option === undefined || option === false) return undefined;
56
+ /** @type {PluginExtractComments | MinimizeExtractComments} */
57
+ let condition = option;
58
+ if (typeof option === "object" && !(option instanceof RegExp)) {
59
+ // Extracting with a condition nothing meets still drops what is not kept.
60
+ condition = option.condition === undefined ? true : option.condition;
61
+ if (condition === false) return () => false;
62
+ }
63
+ if (condition === true || condition === "some") {
64
+ return (comment) => /@preserve|@lic|^\**!/i.test(comment);
65
+ }
66
+ if (typeof condition === "function") {
67
+ // No node to hand it, nor a second kind of comment: the predicate is asked
68
+ // about the comment alone, its text and place.
69
+ const predicate = /** @type {MinimizeExtractCommentsCondition} */ (
70
+ condition
71
+ );
72
+ return (comment, line, col) =>
73
+ predicate({ value: comment, line, col }) === true;
74
+ }
75
+ // an object option was unwrapped to its condition above
76
+ const keep = keepCondition(
77
+ /** @type {string | RegExp} */ (condition),
78
+ () => false
79
+ );
80
+ return (comment) => keep(comment);
81
+ };
82
+
83
+ /**
84
+ * The `comments` predicate a print takes to extract comments, and the list
85
+ * they are collected into, deduplicated and written with their delimiters.
86
+ * @param {PluginExtractComments | MinimizeExtractComments | undefined} option `extractComments` as configured
87
+ * @param {CommentsOption | undefined} comments the language's `comments` option
88
+ * @param {CommentSyntax} syntax how the language writes and keeps comments
89
+ * @returns {{ comments: CommentPredicate, extracted: string[] } | undefined} undefined when nothing is extracted
90
+ */
91
+ const extractComments = (option, comments, syntax) => {
92
+ const extract = extractCondition(option);
93
+ if (extract === undefined) return undefined;
94
+ // As terser does: where the comments kept are not stated, extracting leaves
95
+ // only what the language must keep.
96
+ const keep =
97
+ comments === undefined
98
+ ? syntax.unstated
99
+ : keepCondition(comments, syntax.some);
100
+ /** @type {string[]} */
101
+ const extracted = [];
102
+ const seen = new Set();
103
+ return {
104
+ comments: (comment, line, column) => {
105
+ if (!extract(comment, line, column)) return keep(comment);
106
+ const text = `${syntax.open}${comment}${syntax.close}`;
107
+ if (!seen.has(text)) {
108
+ seen.add(text);
109
+ extracted.push(text);
110
+ }
111
+ return false;
112
+ },
113
+ extracted
114
+ };
115
+ };
116
+
117
+ module.exports.extractComments = extractComments;
118
+ module.exports.keepCondition = keepCondition;
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @import { DependencyLocation, SourcePosition } from "../Dependency" */
8
+ /** @import { DependencyLocation, SourcePosition } from "../graph/Dependency" */
9
9
 
10
10
  /**
11
11
  * Returns formatted position.
@@ -6,7 +6,7 @@
6
6
  "use strict";
7
7
 
8
8
  const path = require("path");
9
- const { join: joinPath } = require("./fs");
9
+ const { join: joinPath } = require("../fs/fs");
10
10
  const {
11
11
  ABSOLUTE_PATH_REGEXP,
12
12
  WINDOWS_PATH_SEPARATOR_REGEXP
@@ -22,6 +22,9 @@ const getGlobToRegExpSource = memoize(
22
22
  );
23
23
 
24
24
  /** @typedef {{ caseSensitive?: boolean, requireLiteralLeadingDot?: boolean }} GlobMatchOptions */
25
+ /** @typedef {(str: string) => boolean} GlobMatcher */
26
+ /** @typedef {import("../../declarations/WebpackOptions").GlobCondition} GlobCondition */
27
+ /** @import Module from "../module/Module" */
25
28
 
26
29
  /**
27
30
  * @param {string} s string
@@ -518,10 +521,12 @@ const segmentGlobToRegExpSource = (segment) => {
518
521
  * `path.matchesGlob` semantics: `*`, `?` and classes stay within a segment,
519
522
  * a whole-segment `**` spans segments, and neither crosses a dot segment.
520
523
  * @param {string} glob brace-free glob
524
+ * @param {boolean} lazy whether `**` spans as few segments as it can
521
525
  * @returns {string} regexp source without anchors
522
526
  */
523
- const braceFreeGlobToPathRegExpSource = (glob) => {
527
+ const braceFreeGlobToPathRegExpSource = (glob, lazy) => {
524
528
  const segments = optimizeGlobSegments(glob.split("/"));
529
+ const repeat = lazy ? "*?" : "*";
525
530
  let source = "";
526
531
  let needSeparator = false;
527
532
  for (let i = 0; i < segments.length; i++) {
@@ -536,8 +541,8 @@ const braceFreeGlobToPathRegExpSource = (glob) => {
536
541
  source += isLast
537
542
  ? `${needSeparator ? "/" : ""}(?:${NON_DOT_SEGMENT}(?:/${NON_DOT_SEGMENT})*)?`
538
543
  : needSeparator
539
- ? `(?:/${NON_DOT_SEGMENT})*`
540
- : `/?(?:${NON_DOT_SEGMENT}/)*`;
544
+ ? `(?:/${NON_DOT_SEGMENT})${repeat}`
545
+ : `/?(?:${NON_DOT_SEGMENT}/)${repeat}`;
541
546
  needSeparator = !isLast && needSeparator;
542
547
  continue;
543
548
  }
@@ -553,17 +558,10 @@ const braceFreeGlobToPathRegExpSource = (glob) => {
553
558
  };
554
559
 
555
560
  /**
556
- * Compiles a glob into a matcher over OS-independent paths: `\` is a path
557
- * separator in both the pattern and the tested path (never an escape, so a
558
- * pattern built with `path.resolve` works everywhere; use `[*]` to match a
559
- * literal `*`), and a relative pattern matches at any depth. Matching follows
560
- * `path.matchesGlob`, except where its minimatch shows through — see the
561
- * divergences listed above the corpus in `test/globUtils.unittest.js`.
562
561
  * @param {string} pattern glob pattern
563
- * @param {GlobMatchOptions=} options options
564
- * @returns {((str: string) => boolean) | null} matcher, null for un-compilable patterns
562
+ * @returns {string} regexp source matching a normalized path, unanchored
565
563
  */
566
- const createPathGlobMatcher = (pattern, options = {}) => {
564
+ const pathGlobToRegExpSource = (pattern) => {
567
565
  let normalizedPattern = normalizePathSeparatorsForPath(pattern);
568
566
  while (normalizedPattern.startsWith("./")) {
569
567
  normalizedPattern = normalizedPattern.slice(2);
@@ -574,10 +572,40 @@ const createPathGlobMatcher = (pattern, options = {}) => {
574
572
  ) {
575
573
  normalizedPattern = `**/${normalizedPattern}`;
576
574
  }
577
- const sources = expandGlobBraces(normalizedPattern).map(
578
- braceFreeGlobToPathRegExpSource
575
+ const sources = expandGlobBraces(normalizedPattern).map((glob) =>
576
+ braceFreeGlobToPathRegExpSource(glob, false)
579
577
  );
580
- const source = sources.length === 1 ? sources[0] : `(?:${sources.join("|")})`;
578
+ return sources.length === 1 ? sources[0] : `(?:${sources.join("|")})`;
579
+ };
580
+
581
+ // a separator in a path regexp source, which a native path may spell `\`
582
+ const PATH_SOURCE_SEPARATOR_REGEXP = /\\[\s\S]|\[\^\/|\//g;
583
+ /** @type {Record<string, string>} */
584
+ const PATH_SOURCE_SEPARATORS = { "/": "[\\\\/]", "[^/": "[^\\\\/" };
585
+
586
+ /**
587
+ * @param {string} source regexp source over `/`-separated paths
588
+ * @returns {string} the same source, also accepting `\` as a separator
589
+ */
590
+ const toNativePathSource = (source) =>
591
+ source.replace(
592
+ PATH_SOURCE_SEPARATOR_REGEXP,
593
+ (match) => PATH_SOURCE_SEPARATORS[match] || match
594
+ );
595
+
596
+ /**
597
+ * Compiles a glob into a matcher over OS-independent paths: `\` is a path
598
+ * separator in both the pattern and the tested path (never an escape, so a
599
+ * pattern built with `path.resolve` works everywhere; use `[*]` to match a
600
+ * literal `*`), and a relative pattern matches at any depth. Matching follows
601
+ * `path.matchesGlob`, except where its minimatch shows through — see the
602
+ * divergences listed above the corpus in `test/unitCases/globUtils.unittest.js`.
603
+ * @param {string} pattern glob pattern
604
+ * @param {GlobMatchOptions=} options options
605
+ * @returns {((str: string) => boolean) | null} matcher, null for un-compilable patterns
606
+ */
607
+ const createPathGlobMatcher = (pattern, options = {}) => {
608
+ const source = pathGlobToRegExpSource(pattern);
581
609
  /** @type {RegExp} */
582
610
  let regexp;
583
611
  try {
@@ -598,6 +626,153 @@ const createPathGlobMatcher = (pattern, options = {}) => {
598
626
  };
599
627
  };
600
628
 
629
+ /**
630
+ * @param {GlobMatcher[]} positive patterns that select
631
+ * @param {GlobMatcher[]} negative patterns that subtract
632
+ * @returns {GlobMatcher} matcher
633
+ */
634
+ const combineGlobMatchers = (positive, negative) => {
635
+ /** @type {GlobMatcher} */
636
+ const matchPositive =
637
+ positive.length === 0
638
+ ? () => true
639
+ : positive.length === 1
640
+ ? positive[0]
641
+ : (str) => positive.some((match) => match(str));
642
+ if (negative.length === 0) return matchPositive;
643
+ /** @type {GlobMatcher} */
644
+ const matchNegative =
645
+ negative.length === 1
646
+ ? negative[0]
647
+ : (str) => negative.some((match) => match(str));
648
+ return (str) => matchPositive(str) && !matchNegative(str);
649
+ };
650
+
651
+ /**
652
+ * Compiles glob patterns into one matcher: patterns are OR-ed and a `!` prefix
653
+ * subtracts, as in `module.rules[].glob`.
654
+ * @param {string[]} globs glob patterns
655
+ * @param {(pattern: string, index: number) => never} onInvalid throws for an un-compilable pattern
656
+ * @returns {GlobMatcher} matcher
657
+ */
658
+ const compileGlobList = (globs, onInvalid) => {
659
+ /** @type {GlobMatcher[]} */
660
+ const positive = [];
661
+ /** @type {GlobMatcher[]} */
662
+ const negative = [];
663
+ for (let i = 0; i < globs.length; i++) {
664
+ const pattern = globs[i];
665
+ const negated = pattern.startsWith("!");
666
+ const match = createPathGlobMatcher(negated ? pattern.slice(1) : pattern);
667
+ if (match === null) onInvalid(pattern, i);
668
+ (negated ? negative : positive).push(/** @type {GlobMatcher} */ (match));
669
+ }
670
+ return combineGlobMatchers(positive, negative);
671
+ };
672
+
673
+ /**
674
+ * @param {string} pattern glob pattern
675
+ * @returns {never} never returns
676
+ */
677
+ const throwInvalidGlob = (pattern) => {
678
+ throw new Error(`Invalid glob pattern: ${pattern}`);
679
+ };
680
+
681
+ /** @type {WeakMap<GlobCondition, GlobMatcher>} */
682
+ const globConditionMatchers = new WeakMap();
683
+
684
+ /**
685
+ * Tests a path against `{ glob }`, compiled once per condition object.
686
+ * @param {GlobCondition} condition glob condition
687
+ * @param {string} str path
688
+ * @returns {boolean} true, when the path matches
689
+ */
690
+ const matchGlobCondition = (condition, str) => {
691
+ let match = globConditionMatchers.get(condition);
692
+ if (match === undefined) {
693
+ match = compileGlobList(
694
+ Array.isArray(condition.glob) ? condition.glob : [condition.glob],
695
+ throwInvalidGlob
696
+ );
697
+ globConditionMatchers.set(condition, match);
698
+ }
699
+ return match(str);
700
+ };
701
+
702
+ /**
703
+ * Tests a module's `nameForCondition()` against `{ glob }`; a module without one never matches.
704
+ * @param {GlobCondition} condition glob condition
705
+ * @param {Module} module module
706
+ * @returns {boolean} true, when the module matches
707
+ */
708
+ const matchModuleGlobCondition = (condition, module) => {
709
+ const name = module.nameForCondition();
710
+ return name ? matchGlobCondition(condition, name) : false;
711
+ };
712
+
713
+ /**
714
+ * Compiles each relative path of a path option as a glob, leaving absolute paths and RegExps as they are.
715
+ * @template T, R
716
+ * @param {(T | string)[]} paths option value
717
+ * @param {(pattern: string) => R} compile glob compiler
718
+ * @returns {(T | R | string)[]} paths with relative globs compiled
719
+ */
720
+ const compileRelativeGlobPaths = (paths, compile) =>
721
+ paths.map((item) =>
722
+ typeof item === "string" && !ABSOLUTE_PATH_REGEXP.test(item)
723
+ ? compile(item)
724
+ : item
725
+ );
726
+
727
+ /**
728
+ * Compiles a glob into a RegExp matching what `createPathGlobMatcher` matches,
729
+ * for an option handed to code that only calls `.test()` on a native path.
730
+ * @param {string} pattern glob pattern
731
+ * @returns {RegExp} regexp
732
+ */
733
+ const createPathGlobRegExp = (pattern) =>
734
+ new RegExp(`^${toNativePathSource(pathGlobToRegExpSource(pattern))}$`);
735
+
736
+ /**
737
+ * Compiles a relative glob into a RegExp whose first group is the outermost
738
+ * directory it matches at the start of a path, trailing separator included — the
739
+ * shape `snapshot.managedPaths` and its siblings read. Like `module.rules[].glob`
740
+ * it matches at any depth, unless a leading `./` or `../` anchors it to `context`.
741
+ * @param {string} pattern relative glob pattern
742
+ * @param {string} context directory a `./` or `../` pattern is relative to
743
+ * @returns {RegExp} prefix regexp
744
+ */
745
+ const createPathGlobPrefixRegExp = (pattern, context) => {
746
+ let glob = normalizePathSeparatorsForPath(pattern);
747
+ let baseSource = "";
748
+ if (glob.startsWith("./") || glob.startsWith("../")) {
749
+ let base = context;
750
+ for (;;) {
751
+ if (glob.startsWith("./")) {
752
+ glob = glob.slice(2);
753
+ } else if (glob.startsWith("../")) {
754
+ base = path.dirname(base);
755
+ glob = glob.slice(3);
756
+ } else {
757
+ break;
758
+ }
759
+ }
760
+ for (const c of path.join(base, "/")) {
761
+ baseSource += c === "/" || c === "\\" ? "[\\\\/]" : quoteRegExpChar(c);
762
+ }
763
+ } else if (!glob.startsWith("**/")) {
764
+ glob = `**/${glob}`;
765
+ }
766
+ if (!glob.endsWith("/")) glob += "/";
767
+ const sources = expandGlobBraces(glob).map((brace) =>
768
+ braceFreeGlobToPathRegExpSource(brace, true)
769
+ );
770
+ const source = toNativePathSource(
771
+ sources.length === 1 ? sources[0] : `(?:${sources.join("|")})`
772
+ );
773
+ return new RegExp(`^(${baseSource}${source})`);
774
+ };
775
+
601
776
  /**
602
777
  * @param {string} path path
603
778
  * @param {string} baseDir base directory
@@ -961,7 +1136,11 @@ const globPatternBaseReachesDir = (patterns, dirPath) => {
961
1136
 
962
1137
  module.exports = {
963
1138
  commonGlobBaseDir,
1139
+ compileGlobList,
1140
+ compileRelativeGlobPaths,
964
1141
  createPathGlobMatcher,
1142
+ createPathGlobPrefixRegExp,
1143
+ createPathGlobRegExp,
965
1144
  escapeGlobPattern,
966
1145
  extractGlobBaseDir,
967
1146
  getGlobToRegExpSource,
@@ -976,6 +1155,8 @@ module.exports = {
976
1155
  isNonExhaustiveImportMetaGlobSkippedDir,
977
1156
  joinImportMetaGlobFsPath,
978
1157
  joinImportMetaGlobPath,
1158
+ matchGlobCondition,
1159
+ matchModuleGlobCondition,
979
1160
  normalizePathSeparators,
980
1161
  normalizePathSeparatorsForPath,
981
1162
  patternHasExplicitDotFor,
@@ -0,0 +1,51 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Alexander Akait @alexander-akait
4
+ */
5
+
6
+ "use strict";
7
+
8
+ /**
9
+ * @template T
10
+ * @typedef {import("./SourceProcessor").VisitorFn<T>} VisitorFn
11
+ */
12
+ /**
13
+ * @template T
14
+ * @typedef {import("./SourceProcessor").CompiledVisitorBucket<T>} CompiledVisitorBucket
15
+ */
16
+
17
+ /**
18
+ * Empty every bucket of a compiled visitor map in place, so a dispatch loop
19
+ * running over one ends after the visitor that asked and none fires again.
20
+ * @template TPath
21
+ * @param {CompiledVisitorBucket<TPath>[]} map the map a walk dispatches from
22
+ * @returns {VisitorFn<TPath>[][]} each emptied list followed by its visitors, for {@link resumeVisitors}
23
+ */
24
+ const haltVisitors = (map) => {
25
+ /** @type {VisitorFn<TPath>[][]} */
26
+ const halted = [];
27
+ for (let type = 0; type < map.length; type++) {
28
+ const bucket = map[type];
29
+ if (bucket === undefined) continue;
30
+ halted.push(bucket.enter, [...bucket.enter], bucket.exit, [...bucket.exit]);
31
+ bucket.enter.length = 0;
32
+ bucket.exit.length = 0;
33
+ }
34
+ return halted;
35
+ };
36
+
37
+ /**
38
+ * Put back what {@link haltVisitors} emptied, so the next walk fires them all.
39
+ * @template TPath
40
+ * @param {VisitorFn<TPath>[][]} halted what `haltVisitors` returned
41
+ */
42
+ const resumeVisitors = (halted) => {
43
+ for (let i = 0; i < halted.length; i += 2) {
44
+ const list = halted[i];
45
+ const visitors = halted[i + 1];
46
+ for (let k = 0; k < visitors.length; k++) list.push(visitors[k]);
47
+ }
48
+ };
49
+
50
+ module.exports.haltVisitors = haltVisitors;
51
+ module.exports.resumeVisitors = resumeVisitors;
@@ -4,7 +4,7 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- /** @import RuntimeModule from "../RuntimeModule" */
7
+ /** @import RuntimeModule from "../runtime/RuntimeModule" */
8
8
 
9
9
  /**
10
10
  * The one key a chunk's runtime modules install on a handler map, or `null` when
@@ -20,7 +20,7 @@ const getOnlyHandlerKey = (runtimeModule, handlers) => {
20
20
  /** @type {string | null} */
21
21
  let only = null;
22
22
  for (const module of chunkGraph.getChunkRuntimeModulesIterable(chunk)) {
23
- // TODO webpack 6: call it directly, every runtime module answers by then. A
23
+ // TODO in the next major release: call it directly, every runtime module answers by then. A
24
24
  // module built against an older webpack extends a base class without it.
25
25
  const installed =
26
26
  typeof module.getInstalledChunkHandlers === "function"
@@ -7,10 +7,9 @@
7
7
 
8
8
  const Hash = require("../Hash");
9
9
 
10
- // 65536 is the size of a wasm memory page
11
- // 64 is the maximum chunk size for every possible wasm hash implementation
12
- // 4 is the maximum number of bytes per char for string encoding (max is utf-8)
13
- // ~3 makes sure that it's always a block of 4 chars, so avoid partially encoded bytes for base64
10
+ // 65536 is a wasm memory page, 64 the largest chunk size any wasm hash
11
+ // implementation takes, 4 the most bytes utf-8 spends on one char, and `& ~3`
12
+ // keeps it a whole block of 4 chars so base64 never sees a partial encoding.
14
13
  const MAX_SHORT_STRING = Math.floor((65536 - 64) / 4) & ~3;
15
14
 
16
15
  /**