@depup/webpack 5.106.1-depup.0 → 5.109.2-depup.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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -7,13 +7,14 @@
7
7
 
8
8
  const { pathToFileURL } = require("url");
9
9
  const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
10
- const CommentCompilationWarning = require("../CommentCompilationWarning");
11
10
  const {
12
11
  JAVASCRIPT_MODULE_TYPE_AUTO,
13
12
  JAVASCRIPT_MODULE_TYPE_ESM
14
13
  } = require("../ModuleTypeConstants");
15
- const UnsupportedFeatureWarning = require("../UnsupportedFeatureWarning");
14
+ const CommentCompilationWarning = require("../errors/CommentCompilationWarning");
15
+ const UnsupportedFeatureWarning = require("../errors/UnsupportedFeatureWarning");
16
16
  const EnableChunkLoadingPlugin = require("../javascript/EnableChunkLoadingPlugin");
17
+ const parseResourceHintOptions = require("../prefetch/parseResourceHintOptions");
17
18
  const { equals } = require("../util/ArrayHelpers");
18
19
  const createHash = require("../util/createHash");
19
20
  const { contextify } = require("../util/identifier");
@@ -23,7 +24,9 @@ const CreateScriptUrlDependency = require("./CreateScriptUrlDependency");
23
24
  const {
24
25
  harmonySpecifierTag
25
26
  } = require("./HarmonyImportDependencyParserPlugin");
27
+ const { isImportMetaFieldEnabled } = require("./ImportMetaPlugin");
26
28
  const WorkerDependency = require("./WorkerDependency");
29
+ const WorkletDependency = require("./WorkletDependency");
27
30
 
28
31
  /** @typedef {import("estree").CallExpression} CallExpression */
29
32
  /** @typedef {import("estree").Expression} Expression */
@@ -46,43 +49,72 @@ const WorkerDependency = require("./WorkerDependency");
46
49
  /** @typedef {import("../javascript/JavascriptParser").JavascriptParserState} JavascriptParserState */
47
50
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
48
51
  /** @typedef {import("./HarmonyImportDependencyParserPlugin").HarmonySettings} HarmonySettings */
52
+ /** @typedef {import("./WorkerDependency").ResourceHint} ResourceHint */
49
53
 
50
54
  /**
55
+ * Returns url.
51
56
  * @param {NormalModule} module module
52
57
  * @returns {string} url
53
58
  */
54
59
  const getUrl = (module) => pathToFileURL(module.resource).toString();
55
60
 
56
61
  const WorkerSpecifierTag = Symbol("worker specifier tag");
62
+ const WorkletSpecifierTag = Symbol("worklet specifier tag");
57
63
 
58
- const DEFAULT_SYNTAX = [
64
+ const WORKER_DEFAULT_SYNTAX = [
59
65
  "Worker",
60
66
  "SharedWorker",
61
67
  "navigator.serviceWorker.register()",
62
68
  "Worker from worker_threads"
63
69
  ];
64
70
 
71
+ // Worklets are always module scripts loaded through `addModule` and — unlike Web
72
+ // Workers — cannot load additional chunks at runtime (no `importScripts`, no
73
+ // dynamic `import()`). The WorkletDependency wraps the call so every chunk is
74
+ // pre-added via `addModule` from the calling scope (see WorkletDependency).
75
+ const WORKLET_DEFAULT_SYNTAX = [
76
+ "*context.audioWorklet.addModule()",
77
+ "*audioWorklet.addModule()",
78
+ "CSS.paintWorklet.addModule()",
79
+ "CSS.layoutWorklet.addModule()",
80
+ "CSS.animationWorklet.addModule()"
81
+ ];
82
+
65
83
  /** @type {WeakMap<JavascriptParserState, number>} */
66
84
  const workerIndexMap = new WeakMap();
67
85
 
68
- const PLUGIN_NAME = "WorkerPlugin";
86
+ const PLUGIN_NAME = "WorkerAndWorkletPlugin";
69
87
 
70
- class WorkerPlugin {
88
+ class WorkerAndWorkletPlugin {
71
89
  /**
90
+ * Creates an instance of WorkerAndWorkletPlugin.
72
91
  * @param {ChunkLoading=} chunkLoading chunk loading
73
92
  * @param {WasmLoading=} wasmLoading wasm loading
74
93
  * @param {OutputModule=} module output module
75
94
  * @param {WorkerPublicPath=} workerPublicPath worker public path
95
+ * @param {boolean=} workletDefault whether worklet parsing is on when `parser.worklet` is unset (enabled by `futureDefaults`)
76
96
  */
77
- constructor(chunkLoading, wasmLoading, module, workerPublicPath) {
97
+ constructor(
98
+ chunkLoading,
99
+ wasmLoading,
100
+ module,
101
+ workerPublicPath,
102
+ workletDefault
103
+ ) {
104
+ /** @type {ChunkLoading | undefined} */
78
105
  this._chunkLoading = chunkLoading;
106
+ /** @type {WasmLoading | undefined} */
79
107
  this._wasmLoading = wasmLoading;
108
+ /** @type {boolean | undefined} */
80
109
  this._module = module;
110
+ /** @type {string | undefined} */
81
111
  this._workerPublicPath = workerPublicPath;
112
+ /** @type {boolean} */
113
+ this._workletDefault = Boolean(workletDefault);
82
114
  }
83
115
 
84
116
  /**
85
- * Apply the plugin
117
+ * Applies the plugin by registering its hooks on the compiler.
86
118
  * @param {Compiler} compiler the compiler instance
87
119
  * @returns {void}
88
120
  */
@@ -108,21 +140,54 @@ class WorkerPlugin {
108
140
  WorkerDependency,
109
141
  new WorkerDependency.Template()
110
142
  );
143
+ compilation.dependencyFactories.set(
144
+ WorkletDependency,
145
+ normalModuleFactory
146
+ );
147
+ compilation.dependencyTemplates.set(
148
+ WorkletDependency,
149
+ new WorkletDependency.Template()
150
+ );
111
151
  compilation.dependencyTemplates.set(
112
152
  CreateScriptUrlDependency,
113
153
  new CreateScriptUrlDependency.Template()
114
154
  );
115
155
 
116
156
  /**
157
+ * Checks whether the expression is `import.meta.url`.
158
+ * @param {JavascriptParser} parser the parser
159
+ * @param {MemberExpression} expr expression
160
+ * @returns {boolean} is `import.meta.url`
161
+ */
162
+ const isMetaUrl = (parser, expr) => {
163
+ const chain = parser.extractMemberExpressionChain(expr);
164
+
165
+ if (
166
+ chain.members.length !== 1 ||
167
+ chain.object.type !== "MetaProperty" ||
168
+ chain.object.meta.name !== "import" ||
169
+ chain.object.property.name !== "meta" ||
170
+ chain.members[0] !== "url"
171
+ ) {
172
+ return false;
173
+ }
174
+
175
+ return true;
176
+ };
177
+
178
+ /**
179
+ * Resolves a `new URL(..., import.meta.url)` argument to its module url.
117
180
  * @param {JavascriptParser} parser the parser
118
181
  * @param {Expression} expr expression
182
+ * @param {boolean} importMetaUrlEnabled true when import.meta.url should be handled
119
183
  * @returns {[string, Range] | void} parsed
120
184
  */
121
- const parseModuleUrl = (parser, expr) => {
185
+ const parseModuleUrl = (parser, expr, importMetaUrlEnabled) => {
122
186
  if (expr.type !== "NewExpression" || expr.callee.type === "Super") {
123
187
  return;
124
188
  }
125
189
  if (
190
+ importMetaUrlEnabled &&
126
191
  expr.arguments.length === 1 &&
127
192
  expr.arguments[0].type === "MemberExpression" &&
128
193
  isMetaUrl(parser, expr.arguments[0])
@@ -163,30 +228,10 @@ class WorkerPlugin {
163
228
  }
164
229
  };
165
230
 
166
- /**
167
- * @param {JavascriptParser} parser the parser
168
- * @param {MemberExpression} expr expression
169
- * @returns {boolean} is `import.meta.url`
170
- */
171
- const isMetaUrl = (parser, expr) => {
172
- const chain = parser.extractMemberExpressionChain(expr);
173
-
174
- if (
175
- chain.members.length !== 1 ||
176
- chain.object.type !== "MetaProperty" ||
177
- chain.object.meta.name !== "import" ||
178
- chain.object.property.name !== "meta" ||
179
- chain.members[0] !== "url"
180
- ) {
181
- return false;
182
- }
183
-
184
- return true;
185
- };
186
-
187
231
  /** @typedef {Record<string, EXPECTED_ANY>} Values */
188
232
 
189
233
  /**
234
+ * Parses object expression.
190
235
  * @param {JavascriptParser} parser the parser
191
236
  * @param {ObjectExpression} expr expression
192
237
  * @returns {{ expressions: Record<string, Expression | Pattern>, otherElements: (Property | SpreadElement)[], values: Values, spread: boolean, insertType: "comma" | "single", insertLocation: number }} parsed object
@@ -223,9 +268,12 @@ class WorkerPlugin {
223
268
  }
224
269
  }
225
270
  const insertType = expr.properties.length > 0 ? "comma" : "single";
226
- const insertLocation = /** @type {Range} */ (
227
- expr.properties[expr.properties.length - 1].range
228
- )[1];
271
+ const insertLocation =
272
+ expr.properties.length > 0
273
+ ? /** @type {Range} */ (
274
+ expr.properties[expr.properties.length - 1].range
275
+ )[1]
276
+ : /** @type {Range} */ (expr.range)[0] + 1;
229
277
  return {
230
278
  expressions,
231
279
  otherElements,
@@ -237,20 +285,23 @@ class WorkerPlugin {
237
285
  };
238
286
 
239
287
  /**
288
+ * Processes the provided parser.
240
289
  * @param {Parser} parser parser parser
241
290
  * @param {JavascriptParserOptions} parserOptions parserOptions
242
291
  * @returns {void}
243
292
  */
244
293
  const parserPlugin = (parser, parserOptions) => {
245
- if (parserOptions.worker === false) return;
246
- const options = !Array.isArray(parserOptions.worker)
247
- ? ["..."]
248
- : parserOptions.worker;
294
+ const importMetaUrlEnabled = isImportMetaFieldEnabled(
295
+ parserOptions.importMeta,
296
+ "url"
297
+ );
298
+
249
299
  /**
300
+ * Resolves the url argument (the `new URL(...)` / bare `import.meta.url`).
250
301
  * @param {CallExpression} expr expression
251
- * @returns {boolean | void} true when handled
302
+ * @returns {{ url: string, range: Range, needNewUrl: boolean, arg1: Expression | SpreadElement, arg2: Expression | SpreadElement | undefined } | void} resolved url info
252
303
  */
253
- const handleNewWorker = (expr) => {
304
+ const resolveWorkerUrl = (expr) => {
254
305
  if (expr.arguments.length === 0 || expr.arguments.length > 2) {
255
306
  return;
256
307
  }
@@ -262,10 +313,13 @@ class WorkerPlugin {
262
313
  let url;
263
314
  /** @type {Range} */
264
315
  let range;
265
- /** @type {boolean} */
266
316
  let needNewUrl = false;
267
317
 
268
- if (arg1.type === "MemberExpression" && isMetaUrl(parser, arg1)) {
318
+ if (
319
+ arg1.type === "MemberExpression" &&
320
+ importMetaUrlEnabled &&
321
+ isMetaUrl(parser, arg1)
322
+ ) {
269
323
  url = getUrl(parser.state.module);
270
324
  range = [
271
325
  /** @type {Range} */ (arg1.range)[0],
@@ -273,32 +327,24 @@ class WorkerPlugin {
273
327
  ];
274
328
  needNewUrl = true;
275
329
  } else {
276
- const parsedUrl = parseModuleUrl(parser, arg1);
330
+ const parsedUrl = parseModuleUrl(
331
+ parser,
332
+ arg1,
333
+ importMetaUrlEnabled
334
+ );
277
335
  if (!parsedUrl) return;
278
336
  [url, range] = parsedUrl;
279
337
  }
280
338
 
281
- const {
282
- expressions,
283
- otherElements,
284
- values: options,
285
- spread: hasSpreadInOptions,
286
- insertType,
287
- insertLocation
288
- } = arg2 && arg2.type === "ObjectExpression"
289
- ? parseObjectExpression(parser, arg2)
290
- : {
291
- expressions:
292
- /** @type {Record<string, Expression | Pattern>} */ ({}),
293
- otherElements: [],
294
- /** @type {Values} */
295
- values: {},
296
- spread: false,
297
- insertType: arg2 ? "spread" : "argument",
298
- insertLocation: arg2
299
- ? /** @type {Range} */ (arg2.range)
300
- : /** @type {Range} */ (arg1.range)[1]
301
- };
339
+ return { url, range, needNewUrl, arg1, arg2 };
340
+ };
341
+
342
+ /**
343
+ * Reads the magic-comment entry options for the matched expression.
344
+ * @param {CallExpression} expr expression
345
+ * @returns {EntryOptions | false} entry options, or false when `webpackIgnore`
346
+ */
347
+ const parseEntryOptions = (expr) => {
302
348
  const { options: importOptions, errors: commentErrors } =
303
349
  parser.parseCommentOptions(/** @type {Range} */ (expr.range));
304
350
 
@@ -308,7 +354,7 @@ class WorkerPlugin {
308
354
  parser.state.module.addWarning(
309
355
  new CommentCompilationWarning(
310
356
  `Compilation error while processing magic comment(-s): /*${comment.value}*/: ${e.message}`,
311
- /** @type {DependencyLocation} */ (comment.loc)
357
+ parser.getLocation(comment)
312
358
  )
313
359
  );
314
360
  }
@@ -323,7 +369,7 @@ class WorkerPlugin {
323
369
  parser.state.module.addWarning(
324
370
  new UnsupportedFeatureWarning(
325
371
  `\`webpackIgnore\` expected a boolean, but received: ${importOptions.webpackIgnore}.`,
326
- /** @type {DependencyLocation} */ (expr.loc)
372
+ parser.getLocation(expr)
327
373
  )
328
374
  );
329
375
  } else if (importOptions.webpackIgnore) {
@@ -338,14 +384,28 @@ class WorkerPlugin {
338
384
  parser.state.module.addWarning(
339
385
  new UnsupportedFeatureWarning(
340
386
  `\`webpackEntryOptions\` expected a object, but received: ${importOptions.webpackEntryOptions}.`,
341
- /** @type {DependencyLocation} */ (expr.loc)
387
+ parser.getLocation(expr)
342
388
  )
343
389
  );
344
390
  } else {
345
- Object.assign(
346
- entryOptions,
347
- importOptions.webpackEntryOptions
348
- );
391
+ // `webpackEntryOptions` is user input from a magic
392
+ // comment, so copy only safe own keys to avoid
393
+ // prototype pollution via `__proto__`/`constructor`/
394
+ // `prototype`.
395
+ const userEntryOptions = importOptions.webpackEntryOptions;
396
+ for (const key of Object.keys(userEntryOptions)) {
397
+ if (
398
+ key === "__proto__" ||
399
+ key === "constructor" ||
400
+ key === "prototype"
401
+ ) {
402
+ continue;
403
+ }
404
+ /** @type {EXPECTED_ANY} */
405
+ (entryOptions)[key] = /** @type {EXPECTED_ANY} */ (
406
+ userEntryOptions
407
+ )[key];
408
+ }
349
409
  }
350
410
  }
351
411
  if (importOptions.webpackChunkName !== undefined) {
@@ -353,7 +413,7 @@ class WorkerPlugin {
353
413
  parser.state.module.addWarning(
354
414
  new UnsupportedFeatureWarning(
355
415
  `\`webpackChunkName\` expected a string, but received: ${importOptions.webpackChunkName}.`,
356
- /** @type {DependencyLocation} */ (expr.loc)
416
+ parser.getLocation(expr)
357
417
  )
358
418
  );
359
419
  } else {
@@ -362,6 +422,94 @@ class WorkerPlugin {
362
422
  }
363
423
  }
364
424
 
425
+ return entryOptions;
426
+ };
427
+
428
+ /**
429
+ * Assigns a unique runtime to the entry so each worker gets its own runtime chunk.
430
+ * @param {EntryOptions} entryOptions entry options
431
+ * @returns {void}
432
+ */
433
+ const ensureRuntime = (entryOptions) => {
434
+ if (entryOptions.runtime !== undefined) return;
435
+ const i = workerIndexMap.get(parser.state) || 0;
436
+ workerIndexMap.set(parser.state, i + 1);
437
+ const name = `${cachedContextify(
438
+ parser.state.module.identifier()
439
+ )}|${i}`;
440
+ const hash = createHash(compilation.outputOptions.hashFunction);
441
+ hash.update(name);
442
+ const digest = hash.digest(compilation.outputOptions.hashDigest);
443
+ entryOptions.runtime = digest.slice(
444
+ 0,
445
+ compilation.outputOptions.hashDigestLength
446
+ );
447
+ };
448
+
449
+ /**
450
+ * Handles a matched `new Worker(...)` expression.
451
+ * @param {CallExpression} expr expression
452
+ * @param {boolean=} isGlobalWorker matched the global `new Worker()` syntax (eligible for universal rewrite)
453
+ * @returns {boolean | void} true when handled
454
+ */
455
+ const handleNewWorker = (expr, isGlobalWorker = false) => {
456
+ const parsedUrl = resolveWorkerUrl(expr);
457
+ if (!parsedUrl) return;
458
+ const { url, range, needNewUrl, arg1, arg2 } = parsedUrl;
459
+
460
+ const {
461
+ expressions,
462
+ otherElements,
463
+ values: options,
464
+ spread: hasSpreadInOptions,
465
+ insertType,
466
+ insertLocation
467
+ } = arg2 && arg2.type === "ObjectExpression"
468
+ ? parseObjectExpression(parser, arg2)
469
+ : {
470
+ expressions:
471
+ /** @type {Record<string, Expression | Pattern>} */ ({}),
472
+ otherElements: [],
473
+ /** @type {Values} */
474
+ values: {},
475
+ spread: false,
476
+ insertType: arg2 ? "spread" : "argument",
477
+ insertLocation: arg2
478
+ ? /** @type {Range} */ (arg2.range)
479
+ : /** @type {Range} */ (arg1.range)[1]
480
+ };
481
+
482
+ const entryOptions = parseEntryOptions(expr);
483
+ if (entryOptions === false) return false;
484
+
485
+ /** @type {ResourceHint | undefined} */
486
+ let resourceHint;
487
+ // Resource-hint comments belong to the asset expression — read
488
+ // them from the inner `new URL(...)` range only, never from
489
+ // elsewhere inside `new Worker(...)`. When `arg1` is bare
490
+ // `import.meta.url` there is no `new URL` and no place for
491
+ // the comments to go, so resource hints are skipped.
492
+ if (arg1.type === "NewExpression") {
493
+ const { options: urlImportOptions } = parser.parseCommentOptions(
494
+ /** @type {Range} */ (arg1.range)
495
+ );
496
+ const hints = parseResourceHintOptions(
497
+ urlImportOptions,
498
+ parser.state.module,
499
+ /** @type {DependencyLocation} */ (expr.loc)
500
+ );
501
+ if (hints.prefetch || hints.preload) {
502
+ resourceHint = {
503
+ prefetch: hints.prefetch,
504
+ preload: hints.preload,
505
+ fetchPriority: hints.fetchPriority,
506
+ as: hints.as,
507
+ type: hints.type,
508
+ media: hints.media
509
+ };
510
+ }
511
+ }
512
+
365
513
  if (
366
514
  !Object.prototype.hasOwnProperty.call(entryOptions, "name") &&
367
515
  options &&
@@ -370,20 +518,7 @@ class WorkerPlugin {
370
518
  entryOptions.name = options.name;
371
519
  }
372
520
 
373
- if (entryOptions.runtime === undefined) {
374
- const i = workerIndexMap.get(parser.state) || 0;
375
- workerIndexMap.set(parser.state, i + 1);
376
- const name = `${cachedContextify(
377
- parser.state.module.identifier()
378
- )}|${i}`;
379
- const hash = createHash(compilation.outputOptions.hashFunction);
380
- hash.update(name);
381
- const digest = hash.digest(compilation.outputOptions.hashDigest);
382
- entryOptions.runtime = digest.slice(
383
- 0,
384
- compilation.outputOptions.hashDigestLength
385
- );
386
- }
521
+ ensureRuntime(entryOptions);
387
522
 
388
523
  const block = new AsyncDependenciesBlock({
389
524
  name: entryOptions.name,
@@ -391,15 +526,20 @@ class WorkerPlugin {
391
526
  entryOptions: {
392
527
  chunkLoading: this._chunkLoading,
393
528
  wasmLoading: this._wasmLoading,
394
- ...entryOptions
529
+ ...entryOptions,
530
+ worker: true
395
531
  }
396
532
  });
397
- block.loc = expr.loc;
533
+ block.loc = parser.getLocation(expr);
398
534
  const dep = new WorkerDependency(url, range, {
399
535
  publicPath: this._workerPublicPath,
400
- needNewUrl
536
+ needNewUrl,
537
+ workerConstructorRange: isGlobalWorker
538
+ ? /** @type {Range} */ (expr.callee.range)
539
+ : undefined,
540
+ resourceHint
401
541
  });
402
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
542
+ dep.loc = parser.getLocation(expr);
403
543
  block.addDependency(dep);
404
544
  parser.state.module.addBlock(block);
405
545
 
@@ -407,7 +547,7 @@ class WorkerPlugin {
407
547
  const dep = new CreateScriptUrlDependency(
408
548
  /** @type {Range} */ (expr.arguments[0].range)
409
549
  );
410
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
550
+ dep.loc = parser.getLocation(expr);
411
551
  parser.state.module.addDependency(dep);
412
552
  }
413
553
 
@@ -418,7 +558,7 @@ class WorkerPlugin {
418
558
  this._module ? '"module"' : "undefined",
419
559
  /** @type {Range} */ (expr.range)
420
560
  );
421
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
561
+ dep.loc = parser.getLocation(expr);
422
562
  parser.state.module.addPresentationalDependency(dep);
423
563
  /** @type {EXPECTED_ANY} */
424
564
  (expressions).type = undefined;
@@ -429,20 +569,23 @@ class WorkerPlugin {
429
569
  `, type: ${this._module ? '"module"' : "undefined"}`,
430
570
  insertLocation
431
571
  );
432
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
572
+ dep.loc = parser.getLocation(expr);
433
573
  parser.state.module.addPresentationalDependency(dep);
434
574
  }
435
575
  } else if (insertType === "spread") {
576
+ const type = this._module ? '"module"' : "undefined";
577
+ // `{ ...(opts), type }` is equivalent to `Object.assign({}, opts, { type })`
578
+ const useSpread = compilation.outputOptions.environment.spread;
436
579
  const dep1 = new ConstDependency(
437
- "Object.assign({}, ",
580
+ useSpread ? "{ ...(" : "Object.assign({}, ",
438
581
  /** @type {Range} */ (insertLocation)[0]
439
582
  );
440
583
  const dep2 = new ConstDependency(
441
- `, { type: ${this._module ? '"module"' : "undefined"} })`,
584
+ useSpread ? `), type: ${type} }` : `, { type: ${type} })`,
442
585
  /** @type {Range} */ (insertLocation)[1]
443
586
  );
444
- dep1.loc = /** @type {DependencyLocation} */ (expr.loc);
445
- dep2.loc = /** @type {DependencyLocation} */ (expr.loc);
587
+ dep1.loc = parser.getLocation(expr);
588
+ dep2.loc = parser.getLocation(expr);
446
589
  parser.state.module.addPresentationalDependency(dep1);
447
590
  parser.state.module.addPresentationalDependency(dep2);
448
591
  } else if (insertType === "argument" && this._module) {
@@ -450,7 +593,7 @@ class WorkerPlugin {
450
593
  ', { type: "module" }',
451
594
  insertLocation
452
595
  );
453
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
596
+ dep.loc = parser.getLocation(expr);
454
597
  parser.state.module.addPresentationalDependency(dep);
455
598
  }
456
599
 
@@ -468,15 +611,75 @@ class WorkerPlugin {
468
611
  parser.walkProperty(prop);
469
612
  }
470
613
  if (insertType === "spread") {
471
- parser.walkExpression(arg2);
614
+ parser.walkExpression(/** @type {Expression} */ (arg2));
472
615
  }
473
616
 
474
617
  return true;
475
618
  };
619
+
476
620
  /**
621
+ * Handles a matched `addModule(...)` worklet expression.
622
+ * @param {CallExpression} expr expression
623
+ * @returns {boolean | void} true when handled
624
+ */
625
+ const handleNewWorklet = (expr) => {
626
+ const parsedUrl = resolveWorkerUrl(expr);
627
+ if (!parsedUrl) return;
628
+ const { url } = parsedUrl;
629
+
630
+ const entryOptions = parseEntryOptions(expr);
631
+ if (entryOptions === false) return false;
632
+
633
+ const block = new AsyncDependenciesBlock({
634
+ name: entryOptions.name,
635
+ circular: false,
636
+ entryOptions: {
637
+ // A module worklet links its split chunks via native `import`
638
+ // (resolved by `addModule`), so it keeps the module chunk
639
+ // loading. A script worklet can't load chunks at runtime, so its
640
+ // chunks use import-scripts and are pre-added from the calling scope.
641
+ chunkLoading: this._module
642
+ ? this._chunkLoading
643
+ : "import-scripts",
644
+ wasmLoading: false,
645
+ ...entryOptions,
646
+ worker: true,
647
+ // `addModule` always loads the chunk as a module, so its
648
+ // auto public-path can read `import.meta.url` (no shim needed).
649
+ worklet: true
650
+ }
651
+ });
652
+ block.loc = parser.getLocation(expr);
653
+ // The dependency rewrites the call site: the fast path swaps the URL
654
+ // argument directly, the multi-chunk path wraps it in a bootstrap.
655
+ const dep = new WorkletDependency(
656
+ url,
657
+ [
658
+ /** @type {Range} */ (expr.range)[0],
659
+ /** @type {Range} */ (expr.range)[0]
660
+ ],
661
+ [
662
+ /** @type {Range} */ (expr.callee.range)[1],
663
+ /** @type {Range} */ (expr.range)[1]
664
+ ],
665
+ { publicPath: this._workerPublicPath }
666
+ );
667
+ dep.loc = parser.getLocation(expr);
668
+ block.addDependency(dep);
669
+ parser.state.module.addBlock(block);
670
+
671
+ parser.walkExpression(expr.callee);
672
+
673
+ return true;
674
+ };
675
+
676
+ /**
677
+ * Registers the parser hooks matching a single syntax item.
477
678
  * @param {string} item item
679
+ * @param {(expr: CallExpression, isGlobalWorker?: boolean) => boolean | void} handle handler invoked on a match
680
+ * @param {symbol} specifierTag tag used for `*variable` syntax
478
681
  */
479
- const processItem = (item) => {
682
+ const processItem = (item, handle, specifierTag) => {
480
683
  if (
481
684
  item.startsWith("*") &&
482
685
  item.includes(".") &&
@@ -493,28 +696,26 @@ class WorkerPlugin {
493
696
  decl.id.type === "Identifier" &&
494
697
  decl.id.name === pattern
495
698
  ) {
496
- parser.tagVariable(decl.id.name, WorkerSpecifierTag);
699
+ parser.tagVariable(decl.id.name, specifierTag);
497
700
  return true;
498
701
  }
499
702
  }
500
703
  );
501
704
  parser.hooks.pattern.for(pattern).tap(PLUGIN_NAME, (pattern) => {
502
- parser.tagVariable(pattern.name, WorkerSpecifierTag);
705
+ parser.tagVariable(pattern.name, specifierTag);
503
706
  return true;
504
707
  });
505
708
  parser.hooks.callMemberChain
506
- .for(WorkerSpecifierTag)
709
+ .for(specifierTag)
507
710
  .tap(PLUGIN_NAME, (expression, members) => {
508
711
  if (itemMembers !== members.join(".")) {
509
712
  return;
510
713
  }
511
714
 
512
- return handleNewWorker(expression);
715
+ return handle(expression);
513
716
  });
514
717
  } else if (item.endsWith("()")) {
515
- parser.hooks.call
516
- .for(item.slice(0, -2))
517
- .tap(PLUGIN_NAME, handleNewWorker);
718
+ parser.hooks.call.for(item.slice(0, -2)).tap(PLUGIN_NAME, handle);
518
719
  } else {
519
720
  const match = /^(.+?)(\(\))?\s+from\s+(.+)$/.exec(item);
520
721
  if (match) {
@@ -534,21 +735,70 @@ class WorkerPlugin {
534
735
  ) {
535
736
  return;
536
737
  }
537
- return handleNewWorker(expr);
738
+ return handle(expr);
538
739
  });
539
740
  } else {
540
- parser.hooks.new.for(item).tap(PLUGIN_NAME, handleNewWorker);
741
+ parser.hooks.new
742
+ .for(item)
743
+ .tap(PLUGIN_NAME, (expr) => handle(expr, item === "Worker"));
541
744
  }
542
745
  }
543
746
  };
544
- for (const item of options) {
545
- if (item === "...") {
546
- for (const itemFromDefault of DEFAULT_SYNTAX) {
547
- processItem(itemFromDefault);
747
+
748
+ /**
749
+ * Expands and registers a syntax list.
750
+ * @param {string[]} syntaxList syntax list (may contain "...")
751
+ * @param {string[]} defaultSyntax default syntax used for "..."
752
+ * @param {(expr: CallExpression, isGlobalWorker?: boolean) => boolean | void} handle handler
753
+ * @param {symbol} specifierTag tag used for `*variable` syntax
754
+ */
755
+ const processList = (
756
+ syntaxList,
757
+ defaultSyntax,
758
+ handle,
759
+ specifierTag
760
+ ) => {
761
+ for (const item of syntaxList) {
762
+ if (item === "...") {
763
+ for (const itemFromDefault of defaultSyntax) {
764
+ processItem(itemFromDefault, handle, specifierTag);
765
+ }
766
+ } else {
767
+ processItem(item, handle, specifierTag);
548
768
  }
549
- } else {
550
- processItem(item);
551
769
  }
770
+ };
771
+
772
+ if (parserOptions.worker !== false) {
773
+ const workerSyntax = !Array.isArray(parserOptions.worker)
774
+ ? ["..."]
775
+ : parserOptions.worker;
776
+ processList(
777
+ workerSyntax,
778
+ WORKER_DEFAULT_SYNTAX,
779
+ handleNewWorker,
780
+ WorkerSpecifierTag
781
+ );
782
+ }
783
+
784
+ // Worklet parsing is opt-in: unset falls back to the `futureDefaults`
785
+ // default, `false` disables it. It is not defaulted in
786
+ // `config/defaults.js` because that would splice into the `"..."`
787
+ // merge sentinel of a user-provided list.
788
+ const workletOption =
789
+ parserOptions.worklet === undefined
790
+ ? this._workletDefault
791
+ : parserOptions.worklet;
792
+ if (workletOption) {
793
+ const workletSyntax = !Array.isArray(workletOption)
794
+ ? ["..."]
795
+ : workletOption;
796
+ processList(
797
+ workletSyntax,
798
+ WORKLET_DEFAULT_SYNTAX,
799
+ handleNewWorklet,
800
+ WorkletSpecifierTag
801
+ );
552
802
  }
553
803
  };
554
804
  normalModuleFactory.hooks.parser
@@ -562,4 +812,4 @@ class WorkerPlugin {
562
812
  }
563
813
  }
564
814
 
565
- module.exports = WorkerPlugin;
815
+ module.exports = WorkerAndWorkletPlugin;