webpack 5.107.2 → 5.108.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 (357) hide show
  1. package/hot/dev-server.js +2 -0
  2. package/lib/APIPlugin.js +8 -4
  3. package/lib/CacheFacade.js +7 -0
  4. package/lib/Chunk.js +4 -0
  5. package/lib/ChunkGraph.js +30 -9
  6. package/lib/CircularModulesPlugin.js +190 -0
  7. package/lib/CleanPlugin.js +2 -1
  8. package/lib/Compilation.js +396 -65
  9. package/lib/Compiler.js +25 -11
  10. package/lib/ConcatenationScope.js +10 -3
  11. package/lib/ContextExclusionPlugin.js +1 -0
  12. package/lib/ContextModule.js +92 -47
  13. package/lib/ContextReplacementPlugin.js +4 -0
  14. package/lib/DefinePlugin.js +89 -15
  15. package/lib/Dependency.js +111 -7
  16. package/lib/EntryOptionPlugin.js +39 -2
  17. package/lib/EntryPlugin.js +2 -0
  18. package/lib/ExportsInfo.js +314 -73
  19. package/lib/ExternalModule.js +82 -34
  20. package/lib/ExternalModuleFactoryPlugin.js +1 -0
  21. package/lib/ExternalsPlugin.js +1 -0
  22. package/lib/FileSystemInfo.js +173 -23
  23. package/lib/FlagAllModulesAsUsedPlugin.js +1 -5
  24. package/lib/FlagDependencyExportsPlugin.js +23 -0
  25. package/lib/FlagDependencyUsagePlugin.js +87 -5
  26. package/lib/FlagEntryExportAsUsedPlugin.js +2 -0
  27. package/lib/Generator.js +8 -0
  28. package/lib/HotModuleReplacementPlugin.js +65 -28
  29. package/lib/IgnorePlugin.js +1 -0
  30. package/lib/InitFragment.js +5 -0
  31. package/lib/JavascriptMetaInfoPlugin.js +7 -5
  32. package/lib/LazyBarrel.js +361 -0
  33. package/lib/LoaderTargetPlugin.js +1 -0
  34. package/lib/Module.js +21 -42
  35. package/lib/ModuleGraph.js +3 -2
  36. package/lib/ModuleProfile.js +27 -1
  37. package/lib/ModuleTemplate.js +2 -0
  38. package/lib/MultiCompiler.js +2 -0
  39. package/lib/MultiStats.js +1 -0
  40. package/lib/MultiWatching.js +2 -0
  41. package/lib/NodeStuffPlugin.js +22 -17
  42. package/lib/NormalModule.js +142 -80
  43. package/lib/NormalModuleReplacementPlugin.js +2 -0
  44. package/lib/PrefetchPlugin.js +2 -0
  45. package/lib/ProgressPlugin.js +8 -0
  46. package/lib/ProvidePlugin.js +1 -0
  47. package/lib/RawModule.js +20 -16
  48. package/lib/RecordIdsPlugin.js +1 -0
  49. package/lib/RuntimeGlobals.js +5 -0
  50. package/lib/RuntimePlugin.js +58 -26
  51. package/lib/RuntimeTemplate.js +278 -21
  52. package/lib/SelfModuleFactory.js +1 -0
  53. package/lib/SourceMapDevToolPlugin.js +3 -5
  54. package/lib/Stats.js +1 -0
  55. package/lib/Template.js +8 -2
  56. package/lib/TemplatedPathPlugin.js +473 -131
  57. package/lib/WarnCaseSensitiveModulesPlugin.js +1 -0
  58. package/lib/WarnDeprecatedOptionPlugin.js +4 -0
  59. package/lib/WarnNoModeSetPlugin.js +1 -0
  60. package/lib/WatchIgnorePlugin.js +1 -0
  61. package/lib/Watching.js +9 -0
  62. package/lib/WebpackOptionsApply.js +50 -5
  63. package/lib/asset/AssetBytesGenerator.js +11 -3
  64. package/lib/asset/AssetGenerator.js +47 -22
  65. package/lib/asset/AssetModule.js +47 -0
  66. package/lib/asset/AssetModulesPlugin.js +14 -14
  67. package/lib/asset/AssetParser.js +2 -2
  68. package/lib/asset/AssetSourceGenerator.js +8 -0
  69. package/lib/asset/RawDataUrlModule.js +12 -13
  70. package/lib/buildChunkGraph.js +64 -7
  71. package/lib/bun/BunTargetPlugin.js +48 -0
  72. package/lib/cache/AddBuildDependenciesPlugin.js +1 -0
  73. package/lib/cache/AddManagedPathsPlugin.js +3 -0
  74. package/lib/cache/IdleFileCachePlugin.js +4 -0
  75. package/lib/cache/MemoryWithGcCachePlugin.js +1 -0
  76. package/lib/cache/PackFileCacheStrategy.js +1 -0
  77. package/lib/cache/ResolverCachePlugin.js +2 -0
  78. package/lib/cache/mergeEtags.js +2 -0
  79. package/lib/cli.js +109 -19
  80. package/lib/config/browserslistTargetHandler.js +99 -0
  81. package/lib/config/defaults.js +147 -7
  82. package/lib/config/defineConfig.js +31 -0
  83. package/lib/config/normalization.js +5 -0
  84. package/lib/config/target.js +181 -2
  85. package/lib/container/ContainerEntryModule.js +15 -14
  86. package/lib/container/ContainerExposedDependency.js +2 -2
  87. package/lib/container/ContainerReferencePlugin.js +1 -1
  88. package/lib/container/FallbackDependency.js +5 -7
  89. package/lib/container/FallbackModule.js +10 -9
  90. package/lib/container/RemoteModule.js +20 -10
  91. package/lib/container/RemoteRuntimeModule.js +14 -12
  92. package/lib/css/CssGenerator.js +353 -327
  93. package/lib/css/CssInjectStyleRuntimeModule.js +36 -8
  94. package/lib/css/CssLoadingRuntimeModule.js +118 -47
  95. package/lib/css/CssModule.js +52 -23
  96. package/lib/css/CssModulesPlugin.js +107 -124
  97. package/lib/css/CssParser.js +2759 -2205
  98. package/lib/css/syntax.js +2859 -0
  99. package/lib/debug/ProfilingPlugin.js +2 -0
  100. package/lib/deno/DenoTargetPlugin.js +47 -0
  101. package/lib/dependencies/AMDDefineDependency.js +22 -17
  102. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +1 -0
  103. package/lib/dependencies/AMDRequireArrayDependency.js +7 -11
  104. package/lib/dependencies/AMDRequireContextDependency.js +7 -11
  105. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +1 -0
  106. package/lib/dependencies/AMDRequireDependency.js +24 -20
  107. package/lib/dependencies/CachedConstDependency.js +3 -0
  108. package/lib/dependencies/CommonJsDependencyHelpers.js +1 -0
  109. package/lib/dependencies/CommonJsExportRequireDependency.js +79 -31
  110. package/lib/dependencies/CommonJsExportsDependency.js +21 -16
  111. package/lib/dependencies/CommonJsExportsParserPlugin.js +230 -7
  112. package/lib/dependencies/CommonJsFullRequireDependency.js +27 -19
  113. package/lib/dependencies/CommonJsImportsParserPlugin.js +51 -16
  114. package/lib/dependencies/CommonJsPlugin.js +1 -1
  115. package/lib/dependencies/CommonJsRequireContextDependency.js +10 -13
  116. package/lib/dependencies/CommonJsRequireDependency.js +42 -11
  117. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -14
  118. package/lib/dependencies/ConstDependency.js +16 -11
  119. package/lib/dependencies/ContextDependency.js +4 -0
  120. package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -1
  121. package/lib/dependencies/ContextElementDependency.js +23 -14
  122. package/lib/dependencies/CreateRequireParserPlugin.js +1 -0
  123. package/lib/dependencies/CreateScriptUrlDependency.js +5 -7
  124. package/lib/dependencies/CriticalDependencyWarning.js +1 -0
  125. package/lib/dependencies/CssIcssExportDependency.js +512 -574
  126. package/lib/dependencies/CssIcssImportDependency.js +9 -9
  127. package/lib/dependencies/CssIcssSymbolDependency.js +22 -15
  128. package/lib/dependencies/CssImportDependency.js +25 -1
  129. package/lib/dependencies/CssUrlDependency.js +23 -14
  130. package/lib/dependencies/DllEntryDependency.js +9 -13
  131. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  132. package/lib/dependencies/ExportsInfoDependency.js +12 -12
  133. package/lib/dependencies/ExternalModuleDependency.js +8 -5
  134. package/lib/dependencies/ExternalModuleInitFragment.js +7 -5
  135. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +13 -10
  136. package/lib/dependencies/HarmonyAcceptDependency.js +11 -11
  137. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
  138. package/lib/dependencies/HarmonyDetectionParserPlugin.js +47 -22
  139. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +28 -2
  140. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +46 -22
  141. package/lib/dependencies/HarmonyExportExpressionDependency.js +107 -30
  142. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -9
  143. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +109 -31
  144. package/lib/dependencies/HarmonyExportInitFragment.js +18 -15
  145. package/lib/dependencies/HarmonyExportSpecifierDependency.js +83 -18
  146. package/lib/dependencies/HarmonyExports.js +4 -1
  147. package/lib/dependencies/HarmonyImportDependency.js +24 -0
  148. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +110 -74
  149. package/lib/dependencies/HarmonyImportGuard.js +254 -0
  150. package/lib/dependencies/HarmonyImportSideEffectDependency.js +18 -1
  151. package/lib/dependencies/HarmonyImportSpecifierDependency.js +118 -14
  152. package/lib/dependencies/HarmonyLinkingError.js +1 -0
  153. package/lib/dependencies/HarmonyModulesPlugin.js +1 -0
  154. package/lib/dependencies/{HtmlScriptSrcDependency.js → HtmlEntryDependency.js} +261 -109
  155. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  156. package/lib/dependencies/HtmlInlineScriptDependency.js +17 -13
  157. package/lib/dependencies/HtmlInlineStyleDependency.js +45 -11
  158. package/lib/dependencies/ImportContextDependency.js +5 -9
  159. package/lib/dependencies/ImportDependency.js +44 -2
  160. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
  161. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
  162. package/lib/dependencies/ImportMetaPlugin.js +74 -30
  163. package/lib/dependencies/ImportParserPlugin.js +19 -0
  164. package/lib/dependencies/ImportWeakDependency.js +1 -0
  165. package/lib/dependencies/JsonExportsDependency.js +9 -9
  166. package/lib/dependencies/LoaderImportDependency.js +1 -0
  167. package/lib/dependencies/LocalModule.js +11 -12
  168. package/lib/dependencies/LocalModuleDependency.js +11 -13
  169. package/lib/dependencies/ModuleDecoratorDependency.js +9 -9
  170. package/lib/dependencies/ModuleDependency.js +7 -0
  171. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
  172. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
  173. package/lib/dependencies/ModuleInitFragmentDependency.js +15 -11
  174. package/lib/dependencies/ProvidedDependency.js +31 -27
  175. package/lib/dependencies/PureExpressionDependency.js +7 -9
  176. package/lib/dependencies/RequireEnsureDependency.js +12 -13
  177. package/lib/dependencies/RequireHeaderDependency.js +3 -4
  178. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +3 -0
  179. package/lib/dependencies/RequireResolveContextDependency.js +7 -11
  180. package/lib/dependencies/RequireResolveDependency.js +1 -0
  181. package/lib/dependencies/RequireResolveHeaderDependency.js +3 -5
  182. package/lib/dependencies/RuntimeRequirementsDependency.js +6 -7
  183. package/lib/dependencies/StaticExportsDependency.js +10 -10
  184. package/lib/dependencies/SystemPlugin.js +2 -0
  185. package/lib/dependencies/URLContextDependency.js +5 -7
  186. package/lib/dependencies/URLDependency.js +14 -16
  187. package/lib/dependencies/UnsupportedDependency.js +8 -13
  188. package/lib/dependencies/WebAssemblyExportImportedDependency.js +11 -16
  189. package/lib/dependencies/WebAssemblyImportDependency.js +14 -16
  190. package/lib/dependencies/WebpackIsIncludedDependency.js +1 -0
  191. package/lib/dependencies/WorkerDependency.js +19 -8
  192. package/lib/dependencies/WorkerPlugin.js +22 -6
  193. package/lib/dependencies/processExportInfo.js +13 -11
  194. package/lib/dll/DelegatedModule.js +29 -15
  195. package/lib/dll/DelegatedModuleFactoryPlugin.js +1 -0
  196. package/lib/dll/DelegatedPlugin.js +1 -0
  197. package/lib/dll/DllEntryPlugin.js +3 -0
  198. package/lib/dll/DllModule.js +3 -2
  199. package/lib/dll/DllPlugin.js +16 -0
  200. package/lib/dll/DllReferencePlugin.js +3 -0
  201. package/lib/dll/LibManifestPlugin.js +1 -0
  202. package/lib/electron/ElectronTargetPlugin.js +22 -4
  203. package/lib/errors/ConcurrentCompilationError.js +1 -0
  204. package/lib/errors/HookWebpackError.js +11 -13
  205. package/lib/errors/IgnoreErrorModuleFactory.js +1 -0
  206. package/lib/errors/InvalidDependenciesModuleWarning.js +2 -0
  207. package/lib/errors/JSONParseError.js +9 -8
  208. package/lib/errors/ModuleBuildError.js +16 -13
  209. package/lib/errors/ModuleDependencyError.js +8 -1
  210. package/lib/errors/ModuleDependencyWarning.js +8 -1
  211. package/lib/errors/ModuleError.js +5 -11
  212. package/lib/errors/ModuleHashingError.js +4 -0
  213. package/lib/errors/ModuleNotFoundError.js +3 -0
  214. package/lib/errors/ModuleParseError.js +5 -11
  215. package/lib/errors/ModuleRestoreError.js +2 -0
  216. package/lib/errors/ModuleStoreError.js +3 -0
  217. package/lib/errors/ModuleWarning.js +7 -11
  218. package/lib/errors/NodeStuffInWebError.js +1 -0
  219. package/lib/errors/NonErrorEmittedError.js +2 -0
  220. package/lib/errors/UnhandledSchemeError.js +1 -0
  221. package/lib/esm/ModuleChunkLoadingPlugin.js +0 -1
  222. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +28 -23
  223. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  224. package/lib/hmr/HotModuleReplacementRuntimeModule.js +7 -0
  225. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  226. package/lib/hmr/LazyCompilationPlugin.js +30 -6
  227. package/lib/html/HtmlGenerator.js +217 -23
  228. package/lib/html/HtmlModule.js +40 -0
  229. package/lib/html/HtmlModulesPlugin.js +219 -55
  230. package/lib/html/HtmlParser.js +1108 -1099
  231. package/lib/html/{walkHtmlTokens.js → syntax.js} +4701 -212
  232. package/lib/ids/IdHelpers.js +4 -2
  233. package/lib/index.js +19 -0
  234. package/lib/javascript/BasicEvaluatedExpression.js +1 -0
  235. package/lib/javascript/EnableChunkLoadingPlugin.js +1 -0
  236. package/lib/javascript/JavascriptGenerator.js +6 -2
  237. package/lib/javascript/JavascriptModule.js +54 -0
  238. package/lib/javascript/JavascriptModulesPlugin.js +257 -102
  239. package/lib/javascript/JavascriptParser.js +285 -158
  240. package/lib/json/JsonModule.js +40 -0
  241. package/lib/json/JsonModulesPlugin.js +7 -0
  242. package/lib/json/JsonParser.js +4 -2
  243. package/lib/library/AssignLibraryPlugin.js +5 -3
  244. package/lib/library/ExportPropertyLibraryPlugin.js +1 -0
  245. package/lib/library/FalseIIFEUmdWarning.js +1 -0
  246. package/lib/library/ModuleLibraryPlugin.js +24 -5
  247. package/lib/library/SystemLibraryPlugin.js +3 -3
  248. package/lib/node/NodeTargetPlugin.js +1 -0
  249. package/lib/node/NodeWatchFileSystem.js +1 -0
  250. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -9
  251. package/lib/node/RequireChunkLoadingRuntimeModule.js +18 -16
  252. package/lib/optimize/ConcatenatedModule.js +395 -77
  253. package/lib/optimize/ConstExportsPlugin.js +211 -0
  254. package/lib/optimize/InlineExports.js +178 -0
  255. package/lib/optimize/InnerGraph.js +372 -275
  256. package/lib/optimize/InnerGraphPlugin.js +196 -99
  257. package/lib/optimize/ModuleConcatenationPlugin.js +56 -25
  258. package/lib/optimize/RealContentHashPlugin.js +14 -1
  259. package/lib/optimize/SideEffectsFlagPlugin.js +234 -64
  260. package/lib/runtime/AsyncModuleRuntimeModule.js +32 -30
  261. package/lib/runtime/AutoPublicPathRuntimeModule.js +11 -5
  262. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -1
  263. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +6 -4
  264. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +33 -4
  265. package/lib/runtime/GetChunkFilenameRuntimeModule.js +82 -3
  266. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  267. package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -1
  268. package/lib/runtime/LoadScriptRuntimeModule.js +18 -13
  269. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +39 -26
  270. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -1
  271. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  272. package/lib/runtime/RelativeUrlRuntimeModule.js +3 -2
  273. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -1
  274. package/lib/runtime/StartupEntrypointRuntimeModule.js +4 -3
  275. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  276. package/lib/schemes/HttpUriPlugin.js +3 -2
  277. package/lib/serialization/AggregateErrorSerializer.js +7 -6
  278. package/lib/serialization/ArraySerializer.js +4 -8
  279. package/lib/serialization/BinaryMiddleware.js +538 -468
  280. package/lib/serialization/DateObjectSerializer.js +2 -2
  281. package/lib/serialization/ErrorObjectSerializer.js +7 -6
  282. package/lib/serialization/MapObjectSerializer.js +5 -9
  283. package/lib/serialization/NullPrototypeObjectSerializer.js +7 -9
  284. package/lib/serialization/ObjectMiddleware.js +50 -13
  285. package/lib/serialization/PlainObjectSerializer.js +9 -8
  286. package/lib/serialization/RegExpObjectSerializer.js +2 -2
  287. package/lib/serialization/Serializer.js +1 -0
  288. package/lib/serialization/SetObjectSerializer.js +4 -8
  289. package/lib/sharing/ConsumeSharedModule.js +6 -7
  290. package/lib/sharing/ConsumeSharedPlugin.js +1 -0
  291. package/lib/sharing/ConsumeSharedRuntimeModule.js +46 -41
  292. package/lib/sharing/ProvideSharedDependency.js +30 -15
  293. package/lib/sharing/ProvideSharedModule.js +30 -11
  294. package/lib/sharing/ProvideSharedPlugin.js +4 -2
  295. package/lib/sharing/SharePlugin.js +3 -0
  296. package/lib/sharing/ShareRuntimeModule.js +18 -16
  297. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  298. package/lib/sharing/utils.js +1 -1
  299. package/lib/stats/DefaultStatsFactoryPlugin.js +4 -6
  300. package/lib/stats/DefaultStatsPrinterPlugin.js +14 -14
  301. package/lib/stats/StatsFactory.js +11 -9
  302. package/lib/stats/StatsPrinter.js +9 -2
  303. package/lib/url/URLParserPlugin.js +5 -2
  304. package/lib/util/AsyncQueue.js +10 -0
  305. package/lib/util/LazyBucketSortedSet.js +5 -0
  306. package/lib/util/LazySet.js +6 -4
  307. package/lib/util/LocConverter.js +11 -1
  308. package/lib/util/Semaphore.js +1 -0
  309. package/lib/util/SourceProcessor.js +106 -0
  310. package/lib/util/TupleSet.js +1 -0
  311. package/lib/util/WeakTupleMap.js +27 -1
  312. package/lib/util/chainedImports.js +3 -3
  313. package/lib/util/comparators.js +2 -2
  314. package/lib/util/concatenate.js +31 -7
  315. package/lib/util/createHash.js +0 -1
  316. package/lib/util/deterministicGrouping.js +19 -12
  317. package/lib/util/extractSourceMap.js +1 -1
  318. package/lib/util/findGraphRoots.js +2 -0
  319. package/lib/util/fs.js +10 -5
  320. package/lib/util/hash/DebugHash.js +1 -0
  321. package/lib/util/hash/hash-digest.js +24 -15
  322. package/lib/util/identifier.js +7 -0
  323. package/lib/util/internalSerializables.js +11 -2
  324. package/lib/util/magicComment.js +42 -0
  325. package/lib/util/makeSerializable.js +1 -0
  326. package/lib/util/nonNumericOnlyHash.js +30 -1
  327. package/lib/util/property.js +7 -1
  328. package/lib/util/publicPathPlaceholder.js +64 -0
  329. package/lib/util/registerExternalSerializer.js +4 -4
  330. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  331. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +1 -1
  332. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +1 -96
  333. package/lib/wasm-async/AsyncWebAssemblyParser.js +1 -1
  334. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +1 -1
  335. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  336. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +1 -0
  337. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +6 -3
  338. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -1
  339. package/lib/wasm-sync/WebAssemblyGenerator.js +1 -0
  340. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +2 -0
  341. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -0
  342. package/lib/wasm-sync/WebAssemblyParser.js +7 -3
  343. package/lib/web/JsonpChunkLoadingRuntimeModule.js +45 -39
  344. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +11 -10
  345. package/package.json +35 -27
  346. package/schemas/WebpackOptions.check.js +1 -1
  347. package/schemas/WebpackOptions.json +212 -3
  348. package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -1
  349. package/schemas/plugins/HtmlParserOptions.check.d.ts +7 -0
  350. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  351. package/schemas/plugins/HtmlParserOptions.json +3 -0
  352. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  353. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  354. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  355. package/types.d.ts +1456 -290
  356. package/lib/css/walkCssTokens.js +0 -2020
  357. package/lib/util/AppendOnlyStackedSet.js +0 -93
@@ -0,0 +1,211 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Haijie Xie @hai-x
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const { UsageState } = require("../ExportsInfo");
9
+ const {
10
+ JAVASCRIPT_MODULE_TYPE_AUTO,
11
+ JAVASCRIPT_MODULE_TYPE_ESM
12
+ } = require("../ModuleTypeConstants");
13
+ const BasicEvaluatedExpression = require("../javascript/BasicEvaluatedExpression");
14
+ const { VariableInfoFlags } = require("../javascript/JavascriptParser");
15
+ const {
16
+ InlinedUsedName,
17
+ enableInlineExports,
18
+ toInlinedValue
19
+ } = require("./InlineExports");
20
+
21
+ /** @typedef {import("./InlineExports").InlinedValue} InlinedValue */
22
+ /** @typedef {import("../Compiler")} Compiler */
23
+ /** @typedef {import("../ExportsInfo")} ExportsInfo */
24
+ /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
25
+ /** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildInfo} JavascriptModuleBuildInfo */
26
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
27
+
28
+ /** @typedef {{ inlineExports: boolean }} ConstValueParserPluginOptions */
29
+
30
+ const PLUGIN_NAME = "ConstExportsPlugin";
31
+
32
+ // Parser tag for top-level `const X = <primitive>` bindings
33
+ const CONST_BINDING_TAG = Symbol("const binding");
34
+
35
+ class ConstExportsPlugin {
36
+ /**
37
+ * @param {ConstValueParserPluginOptions} options plugin options
38
+ */
39
+ constructor(options) {
40
+ /** @type {ConstValueParserPluginOptions} */
41
+ this.options = options;
42
+ }
43
+
44
+ /**
45
+ * @param {Compiler} compiler the compiler instance
46
+ * @returns {void}
47
+ */
48
+ apply(compiler) {
49
+ compiler.hooks.compilation.tap(
50
+ PLUGIN_NAME,
51
+ (compilation, { normalModuleFactory }) => {
52
+ /**
53
+ * @param {JavascriptParser} parser the parser
54
+ * @returns {void}
55
+ */
56
+ const handleInlineExports = (parser) => {
57
+ parser.hooks.program.tap(PLUGIN_NAME, () => {
58
+ const buildInfo =
59
+ /** @type {JavascriptModuleBuildInfo | undefined} */
60
+ (parser.state.module.buildInfo);
61
+ if (buildInfo) buildInfo.inlineExports = true;
62
+ });
63
+
64
+ // Propagate inlined constant through evaluator so chained constants and uses see the literal
65
+ parser.hooks.evaluateIdentifier
66
+ .for(CONST_BINDING_TAG)
67
+ .tap(PLUGIN_NAME, (expr) => {
68
+ const tagData =
69
+ /** @type {{ value?: InlinedValue } | undefined} */
70
+ (parser.currentTagData);
71
+ if (!tagData || !tagData.value) return;
72
+ const { value } = tagData;
73
+ const eval_ = new BasicEvaluatedExpression().setRange(
74
+ /** @type {[number, number]} */ (expr.range)
75
+ );
76
+ switch (value.kind) {
77
+ case "null":
78
+ return eval_.setNull();
79
+ case "undefined":
80
+ return eval_.setUndefined();
81
+ case "boolean":
82
+ return eval_.setBoolean(/** @type {boolean} */ (value.value));
83
+ case "number":
84
+ return eval_.setNumber(/** @type {number} */ (value.value));
85
+ case "string":
86
+ return eval_.setString(/** @type {string} */ (value.value));
87
+ }
88
+ });
89
+ };
90
+
91
+ /**
92
+ * @param {JavascriptParser} parser the parser
93
+ * @returns {void}
94
+ */
95
+ const handleConstValue = (parser) => {
96
+ // Only const is tracked; function/class names can be reassigned in sloppy mode.
97
+ // Re-exports always use getters: cross-module bindings may be mutable,
98
+ // and SideEffectsFlagPlugin can rewire connections skipping the template.
99
+ parser.hooks.preDeclarator.tap(
100
+ PLUGIN_NAME,
101
+ (declarator, statement) => {
102
+ // Detect top-level `const` declarations:
103
+ // - Tag ALL const bindings with CONST_BINDING_TAG (for const detection via tag system)
104
+ // - Carry inlined primitive value in tag data when eligible (for inline optimization)
105
+ if (statement.kind !== "const") return;
106
+ if (parser.scope.topLevelScope !== true) return;
107
+
108
+ if (declarator.id.type === "Identifier") {
109
+ let inlinedValue;
110
+ if (this.options.inlineExports && declarator.init) {
111
+ const evaluated = parser.evaluateExpression(declarator.init);
112
+ inlinedValue = toInlinedValue(evaluated);
113
+ }
114
+ parser.tagVariable(
115
+ declarator.id.name,
116
+ CONST_BINDING_TAG,
117
+ inlinedValue ? { value: inlinedValue } : {},
118
+ VariableInfoFlags.Normal
119
+ );
120
+ } else {
121
+ // Handle destructuring patterns (ObjectPattern, ArrayPattern, etc.)
122
+ parser.enterPattern(declarator.id, (name) => {
123
+ parser.tagVariable(
124
+ name,
125
+ CONST_BINDING_TAG,
126
+ {},
127
+ VariableInfoFlags.Normal
128
+ );
129
+ });
130
+ }
131
+ }
132
+ );
133
+ };
134
+
135
+ /**
136
+ * @param {JavascriptParser} parser the parser
137
+ * @returns {void}
138
+ */
139
+ const handler = (parser) => {
140
+ handleConstValue(parser);
141
+ if (this.options.inlineExports) {
142
+ handleInlineExports(parser);
143
+ }
144
+ };
145
+
146
+ normalModuleFactory.hooks.parser
147
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
148
+ .tap(PLUGIN_NAME, handler);
149
+
150
+ normalModuleFactory.hooks.parser
151
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
152
+ .tap(PLUGIN_NAME, handler);
153
+
154
+ if (!this.options.inlineExports) return;
155
+
156
+ // Lets HarmonyImportSpecifierDependency.getCondition skip the inline check
157
+ // (and stay unconditional) when this plugin is not active
158
+ enableInlineExports(compilation.moduleGraph);
159
+
160
+ const moduleGraph = compilation.moduleGraph;
161
+ compilation.hooks.optimizeDependencies.tap(PLUGIN_NAME, (modules) => {
162
+ /** @type {Set<ExportsInfo>} */
163
+ const visited = new Set();
164
+ /** @type {ExportsInfo[]} */
165
+ let queue = [];
166
+ for (const module of modules) {
167
+ queue.push(moduleGraph.getExportsInfo(module));
168
+ }
169
+ while (queue.length > 0) {
170
+ const items = queue;
171
+ queue = [];
172
+ for (const exportsInfo of items) {
173
+ if (visited.has(exportsInfo)) continue;
174
+ visited.add(exportsInfo);
175
+ // Other-export usage means we can't safely inline (some non-statically-known consumer)
176
+ if (
177
+ exportsInfo.otherExportsInfo.getUsed(undefined) !==
178
+ UsageState.Unused
179
+ ) {
180
+ continue;
181
+ }
182
+ for (const exportInfo of exportsInfo.ownedExports) {
183
+ const inlined = exportInfo.canInline();
184
+ const doInline =
185
+ !exportInfo.hasUsedName() &&
186
+ inlined !== undefined &&
187
+ exportInfo.provided === true;
188
+ if (doInline) {
189
+ exportInfo.setUsedName(new InlinedUsedName(inlined));
190
+ exportsInfo.markInlinedExports();
191
+ }
192
+ if (exportInfo.exportsInfoOwned && exportInfo.exportsInfo) {
193
+ const used = exportInfo.getUsed(undefined);
194
+ if (
195
+ used === UsageState.OnlyPropertiesUsed ||
196
+ used === UsageState.Unused
197
+ ) {
198
+ queue.push(exportInfo.exportsInfo);
199
+ }
200
+ }
201
+ }
202
+ }
203
+ }
204
+ });
205
+ }
206
+ );
207
+ }
208
+ }
209
+
210
+ module.exports = ConstExportsPlugin;
211
+ module.exports.CONST_BINDING_TAG = CONST_BINDING_TAG;
@@ -0,0 +1,178 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Haijie Xie @hai-x
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const makeSerializable = require("../util/makeSerializable");
9
+ const { propertyAccess } = require("../util/property");
10
+
11
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
12
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
13
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
14
+ /** @typedef {import("../Module")} Module */
15
+ /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
16
+
17
+ const MAX_INLINE_BYTES = 6;
18
+
19
+ /** @typedef {"null" | "undefined" | "boolean" | "number" | "string"} InlinedValueKind */
20
+
21
+ class InlinedValue {
22
+ /**
23
+ * @param {InlinedValueKind} kind value kind
24
+ * @param {null | undefined | boolean | number | string} value raw value
25
+ */
26
+ constructor(kind, value) {
27
+ /** @type {InlinedValueKind} */
28
+ this.kind = kind;
29
+ /** @type {string | number | boolean | null | undefined} */
30
+ this.value = value;
31
+ }
32
+
33
+ /**
34
+ * @returns {string} rendered literal source
35
+ */
36
+ renderLiteral() {
37
+ switch (this.kind) {
38
+ case "null":
39
+ return "null";
40
+ case "undefined":
41
+ return "undefined";
42
+ case "boolean":
43
+ return this.value ? "true" : "false";
44
+ case "number":
45
+ return String(this.value);
46
+ case "string":
47
+ return JSON.stringify(this.value);
48
+ }
49
+ }
50
+
51
+ /**
52
+ * @param {string} comment leading comment text
53
+ * @returns {string} parenthesized literal with comment
54
+ */
55
+ render(comment) {
56
+ return `(${comment}${this.renderLiteral()})`;
57
+ }
58
+
59
+ /**
60
+ * @param {ObjectSerializerContext} context context
61
+ */
62
+ serialize({ write }) {
63
+ write(this.kind);
64
+ write(this.value);
65
+ }
66
+
67
+ /**
68
+ * @param {ObjectDeserializerContext} context context
69
+ */
70
+ deserialize({ read }) {
71
+ this.kind = read();
72
+ this.value = read();
73
+ }
74
+ }
75
+
76
+ makeSerializable(
77
+ InlinedValue,
78
+ "webpack/lib/optimize/InlineExports",
79
+ "InlinedValue"
80
+ );
81
+
82
+ class InlinedUsedName {
83
+ /**
84
+ * @param {InlinedValue} value inlined value
85
+ * @param {string[]=} suffix nested property access after the literal
86
+ */
87
+ constructor(value, suffix) {
88
+ /** @type {InlinedValue} */
89
+ this.value = value;
90
+ /** @type {string[]} */
91
+ this.suffix = suffix || [];
92
+ }
93
+
94
+ /**
95
+ * @param {string} comment leading comment text
96
+ * @returns {string} rendered literal with property access suffix
97
+ */
98
+ render(comment) {
99
+ return this.value.render(comment) + propertyAccess(this.suffix);
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Convert an evaluated expression into an inlined primitive value if it qualifies.
105
+ * @param {import("../javascript/BasicEvaluatedExpression")} evaluated evaluated expression
106
+ * @returns {InlinedValue | undefined} inlined value or undefined
107
+ */
108
+ const toInlinedValue = (evaluated) => {
109
+ if (!evaluated) return;
110
+ if (evaluated.isNull()) return new InlinedValue("null", null);
111
+ if (evaluated.isUndefined()) return new InlinedValue("undefined", undefined);
112
+ if (evaluated.isBoolean()) {
113
+ return new InlinedValue("boolean", /** @type {boolean} */ (evaluated.bool));
114
+ }
115
+ if (evaluated.isNumber()) {
116
+ const num = /** @type {number} */ (evaluated.number);
117
+ if (String(num).length > MAX_INLINE_BYTES) return;
118
+ return new InlinedValue("number", num);
119
+ }
120
+ if (evaluated.isString()) {
121
+ const str = /** @type {string} */ (evaluated.string);
122
+ if (str.length > MAX_INLINE_BYTES) return;
123
+ return new InlinedValue("string", str);
124
+ }
125
+ };
126
+
127
+ /** @type {WeakSet<ModuleGraph>} */
128
+ const inlineEnabledModuleGraphs = new WeakSet();
129
+
130
+ /**
131
+ * Marks export inlining as active for this module graph (set by InlineExportsPlugin).
132
+ * @param {ModuleGraph} moduleGraph module graph
133
+ * @returns {void}
134
+ */
135
+ const enableInlineExports = (moduleGraph) => {
136
+ inlineEnabledModuleGraphs.add(moduleGraph);
137
+ };
138
+
139
+ /**
140
+ * @param {ModuleGraph} moduleGraph module graph
141
+ * @returns {boolean} true when InlineExportsPlugin is active for this module graph
142
+ */
143
+ const isInlineExportsEnabled = (moduleGraph) =>
144
+ inlineEnabledModuleGraphs.has(moduleGraph);
145
+
146
+ /**
147
+ * @param {Module} module the target module
148
+ * @returns {boolean} true when inlining is enabled for this module
149
+ */
150
+ const isInlineEnabled = (module) =>
151
+ Boolean(
152
+ module.buildInfo &&
153
+ /** @type {import("../Module").BuildInfo} */
154
+ (module.buildInfo).inlineExports
155
+ );
156
+
157
+ /**
158
+ * Check whether an import to `module` for `ids` resolves to an inlined value.
159
+ * @param {ModuleGraph} moduleGraph module graph
160
+ * @param {Module} module the target module
161
+ * @param {string[]} ids import ids
162
+ * @param {RuntimeSpec} runtime runtime
163
+ * @returns {boolean} true if the export is inlined
164
+ */
165
+ const isExportInlined = (moduleGraph, module, ids, runtime) => {
166
+ if (!ids || ids.length === 0) return false;
167
+ if (!isInlineEnabled(module)) return false;
168
+ return moduleGraph.getExportsInfo(module).hasInlinedUsedName(ids, runtime);
169
+ };
170
+
171
+ module.exports.InlinedUsedName = InlinedUsedName;
172
+ module.exports.InlinedValue = InlinedValue;
173
+ module.exports.MAX_INLINE_BYTES = MAX_INLINE_BYTES;
174
+ module.exports.enableInlineExports = enableInlineExports;
175
+ module.exports.isExportInlined = isExportInlined;
176
+ module.exports.isInlineEnabled = isInlineEnabled;
177
+ module.exports.isInlineExportsEnabled = isInlineExportsEnabled;
178
+ module.exports.toInlinedValue = toInlinedValue;