@depup/webpack 5.110.1-depup.0 → 5.111.1-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 (304) hide show
  1. package/README.md +7 -8
  2. package/changes.json +7 -11
  3. package/lib/APIPlugin.js +26 -11
  4. package/lib/AutomaticPrefetchPlugin.js +1 -1
  5. package/lib/Cache.js +8 -3
  6. package/lib/CacheFacade.js +1 -1
  7. package/lib/ChunkGraph.js +20 -18
  8. package/lib/CircularModulesPlugin.js +157 -55
  9. package/lib/CleanPlugin.js +2 -2
  10. package/lib/CompatibilityPlugin.js +3 -4
  11. package/lib/Compilation.js +337 -338
  12. package/lib/Compiler.js +213 -51
  13. package/lib/ConcatenationScope.js +25 -35
  14. package/lib/ConstPlugin.js +16 -132
  15. package/lib/CopyPlugin.js +1054 -0
  16. package/lib/DefinePlugin.js +24 -8
  17. package/lib/DependencyTemplate.js +2 -1
  18. package/lib/DotenvPlugin.js +64 -40
  19. package/lib/ErrorHelpers.js +113 -0
  20. package/lib/ExportsInfo.js +30 -16
  21. package/lib/ExternalModule.js +47 -22
  22. package/lib/FileSystemInfo.js +17 -14
  23. package/lib/FlagDependencyExportsPlugin.js +53 -34
  24. package/lib/FlagDependencyUsagePlugin.js +17 -15
  25. package/lib/Generator.js +24 -2
  26. package/lib/HotModuleReplacementPlugin.js +55 -7
  27. package/lib/IgnorePlugin.js +1 -1
  28. package/lib/JavascriptMetaInfoPlugin.js +5 -3
  29. package/lib/LoaderOptionsPlugin.js +1 -1
  30. package/lib/MainTemplate.js +5 -1
  31. package/lib/Module.js +19 -10
  32. package/lib/ModuleGraph.js +6 -9
  33. package/lib/MultiCompiler.js +7 -17
  34. package/lib/MultiWatching.js +1 -1
  35. package/lib/NormalModule.js +148 -70
  36. package/lib/NormalModuleFactory.js +1 -1
  37. package/lib/RuntimeGlobals.js +21 -7
  38. package/lib/RuntimeModule.js +28 -12
  39. package/lib/RuntimePlugin.js +33 -3
  40. package/lib/RuntimeTemplate.js +1147 -847
  41. package/lib/SourceMapDevToolPlugin.js +54 -104
  42. package/lib/TemplatedPathPlugin.js +16 -59
  43. package/lib/Watching.js +9 -0
  44. package/lib/WebpackOptionsApply.js +84 -91
  45. package/lib/asset/AssetBytesGenerator.js +7 -1
  46. package/lib/asset/AssetGenerator.js +50 -24
  47. package/lib/asset/AssetModule.js +3 -0
  48. package/lib/asset/AssetSourceGenerator.js +7 -1
  49. package/lib/asset/WebManifestParser.js +7 -5
  50. package/lib/async-modules/AsyncModuleHelpers.js +10 -4
  51. package/lib/buildChunkGraph.js +11 -15
  52. package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
  53. package/lib/cache/IdleFileCachePlugin.js +2 -2
  54. package/lib/cache/MemoryCachePlugin.js +4 -4
  55. package/lib/cache/MemoryWithGcCachePlugin.js +7 -8
  56. package/lib/cache/PackFileCacheStrategy.js +17 -19
  57. package/lib/cache/getLazyHashedEtag.js +3 -5
  58. package/lib/config/browserslistTargetHandler.js +17 -4
  59. package/lib/config/defaults.js +162 -142
  60. package/lib/config/getClaimedAssetTypes.js +10 -11
  61. package/lib/config/normalization.js +100 -20
  62. package/lib/config/target.js +13 -4
  63. package/lib/container/ContainerReferencePlugin.js +6 -0
  64. package/lib/container/RemoteRuntimeModule.js +9 -0
  65. package/lib/container/declaredRemotes.js +39 -0
  66. package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
  67. package/lib/{ContextModule.js → context/ContextModule.js} +54 -115
  68. package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +19 -21
  69. package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
  70. package/lib/css/CssGenerator.js +27 -11
  71. package/lib/css/CssInjectStyleRuntimeModule.js +9 -0
  72. package/lib/css/CssLoadingRuntimeModule.js +92 -15
  73. package/lib/css/CssModule.js +1 -1
  74. package/lib/css/CssModulesPlugin.js +3 -10
  75. package/lib/css/CssParser.js +162 -31
  76. package/lib/css/CssServerStylesRuntimeModule.js +9 -0
  77. package/lib/css/cssMinify.js +43 -32
  78. package/lib/css/data.js +3526 -871
  79. package/lib/css/syntax.js +6455 -1237
  80. package/lib/debug/ProfilingPlugin.js +7 -4
  81. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
  82. package/lib/dependencies/AMDRuntimeModules.js +18 -0
  83. package/lib/dependencies/CommonJsExportRequireDependency.js +13 -12
  84. package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
  85. package/lib/dependencies/CommonJsImportsParserPlugin.js +5 -5
  86. package/lib/dependencies/CommonJsPlugin.js +19 -3
  87. package/lib/dependencies/CommonJsRequireDependency.js +32 -9
  88. package/lib/dependencies/CommonJsSelfReferenceDependency.js +2 -4
  89. package/lib/dependencies/ContextDependency.js +1 -1
  90. package/lib/dependencies/ContextDependencyHelpers.js +3 -9
  91. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +20 -7
  92. package/lib/dependencies/ContextElementDependency.js +1 -1
  93. package/lib/dependencies/CssIcssExportDependency.js +13 -9
  94. package/lib/dependencies/CssIcssImportDependency.js +3 -6
  95. package/lib/dependencies/CssUrlDependency.js +3 -5
  96. package/lib/dependencies/HarmonyCompatibilityDependency.js +67 -22
  97. package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -4
  98. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +10 -4
  99. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +12 -7
  100. package/lib/dependencies/HarmonyExportExpressionDependency.js +47 -33
  101. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +217 -34
  102. package/lib/dependencies/HarmonyExportInitFragment.js +110 -23
  103. package/lib/dependencies/HarmonyExportSpecifierDependency.js +25 -58
  104. package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
  105. package/lib/dependencies/HarmonyImportDependency.js +99 -41
  106. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +198 -25
  107. package/lib/dependencies/HarmonyImportSideEffectDependency.js +117 -4
  108. package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -3
  109. package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
  110. package/lib/dependencies/HtmlEntryDependency.js +136 -104
  111. package/lib/dependencies/HtmlInlineScriptDependency.js +3 -4
  112. package/lib/dependencies/HtmlInlineStyleDependency.js +3 -4
  113. package/lib/dependencies/ImportContextDependency.js +43 -3
  114. package/lib/dependencies/ImportDependency.js +8 -29
  115. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -1
  116. package/lib/dependencies/ImportMetaGlobHelpers.js +1 -1
  117. package/lib/dependencies/ImportMetaMainDependency.js +104 -0
  118. package/lib/dependencies/ImportMetaPlugin.js +67 -25
  119. package/lib/dependencies/ImportParserPlugin.js +25 -15
  120. package/lib/dependencies/LoaderPlugin.js +26 -1
  121. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  122. package/lib/dependencies/RequireHeaderDependency.js +20 -21
  123. package/lib/dependencies/SystemRuntimeModule.js +9 -0
  124. package/lib/dependencies/URLContextDependency.js +1 -1
  125. package/lib/dependencies/URLDependency.js +6 -5
  126. package/lib/dependencies/WorkerAndWorkletPlugin.js +16 -21
  127. package/lib/dependencies/WorkerDependency.js +12 -18
  128. package/lib/dependencies/WorkletDependency.js +12 -20
  129. package/lib/dependencies/importOptionsCheck.js +47 -0
  130. package/lib/dll/DelegatedModule.js +18 -1
  131. package/lib/dll/DllReferencePlugin.js +11 -8
  132. package/lib/dll/LibManifestPlugin.js +1 -1
  133. package/lib/errors/AnalyzableBailoutsWarning.js +41 -0
  134. package/lib/errors/DotenvFileError.js +29 -0
  135. package/lib/errors/DuplicateModulesWarning.js +12 -7
  136. package/lib/errors/EmptyCopyPatternWarning.js +26 -0
  137. package/lib/errors/ExternalStarReexportError.js +44 -0
  138. package/lib/errors/HookWebpackError.js +3 -2
  139. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  140. package/lib/errors/MissingSourceMapsWarning.js +36 -0
  141. package/lib/errors/ModuleParseError.js +2 -1
  142. package/lib/errors/UnusedAssetsWarning.js +36 -0
  143. package/lib/errors/UnusedFederationWarning.js +35 -0
  144. package/lib/errors/UnusedModulesWarning.js +38 -0
  145. package/lib/esm/ExportWebpackRequireRuntimeModule.js +9 -0
  146. package/lib/esm/ModuleChunkFormatPlugin.js +28 -3
  147. package/lib/esm/ModuleChunkLoadingPlugin.js +21 -5
  148. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +91 -53
  149. package/lib/hmr/HotModuleReplacement.runtime.js +8 -2
  150. package/lib/hmr/HotModuleReplacementRuntimeModule.js +9 -0
  151. package/lib/hmr/LazyCompilationPlugin.js +3 -5
  152. package/lib/html/HtmlGenerator.js +72 -87
  153. package/lib/html/HtmlModulesPlugin.js +479 -215
  154. package/lib/html/HtmlParser.js +110 -147
  155. package/lib/html/builtinEmbeddedRenderer.js +107 -0
  156. package/lib/html/data.js +142 -7
  157. package/lib/html/htmlMinify.js +92 -122
  158. package/lib/html/syntax.js +2031 -1556
  159. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  160. package/lib/index.js +49 -3
  161. package/lib/javascript/ChunkFormatHelpers.js +4 -3
  162. package/lib/javascript/JavascriptGenerator.js +8 -1
  163. package/lib/javascript/JavascriptModule.js +1 -0
  164. package/lib/javascript/JavascriptModulesPlugin.js +76 -80
  165. package/lib/javascript/JavascriptParser.js +1970 -900
  166. package/lib/javascript/StartupHelpers.js +27 -3
  167. package/lib/javascript/data.js +172 -0
  168. package/lib/javascript/grammar.js +5546 -0
  169. package/lib/javascript/parser.js +1500 -0
  170. package/lib/javascript/regexp.js +1762 -0
  171. package/lib/javascript/regexpData.js +51 -0
  172. package/lib/javascript/syntax.js +9061 -5262
  173. package/lib/json/JsonGenerator.js +7 -1
  174. package/lib/library/ModuleLibraryPlugin.js +171 -132
  175. package/lib/loaders/LoaderRunner.js +170 -14
  176. package/lib/node/NodeWatchFileSystem.js +3 -9
  177. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
  178. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +8 -15
  179. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
  180. package/lib/optimize/AggressiveMergingPlugin.js +3 -5
  181. package/lib/optimize/ConcatenatedModule.js +222 -125
  182. package/lib/optimize/ConstExportsPlugin.js +50 -34
  183. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -11
  184. package/lib/optimize/InlineExports.js +20 -2
  185. package/lib/optimize/InnerGraphPlugin.js +7 -13
  186. package/lib/optimize/LimitChunkCountPlugin.js +5 -8
  187. package/lib/optimize/MangleExportsPlugin.js +13 -4
  188. package/lib/optimize/ModuleConcatenationPlugin.js +27 -5
  189. package/lib/optimize/RealContentHashPlugin.js +179 -44
  190. package/lib/optimize/SideEffectsFlagPlugin.js +24 -28
  191. package/lib/optimize/SplitChunksPlugin.js +2 -4
  192. package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
  193. package/lib/performance/BroadContextsPlugin.js +1 -1
  194. package/lib/performance/CacheEffectivenessPlugin.js +7 -7
  195. package/lib/performance/DuplicateModulesPlugin.js +57 -13
  196. package/lib/performance/EvalUsagePlugin.js +5 -2
  197. package/lib/performance/MissingSourceMapsPlugin.js +115 -0
  198. package/lib/performance/PureAnnotationsPlugin.js +6 -3
  199. package/lib/performance/SizeLimitsPlugin.js +2 -4
  200. package/lib/performance/TopLevelThisPlugin.js +5 -4
  201. package/lib/performance/UnusedAssetsPlugin.js +109 -0
  202. package/lib/performance/UnusedFederationPlugin.js +147 -0
  203. package/lib/performance/UnusedModulesPlugin.js +141 -0
  204. package/lib/performance/UnusedReexportsPlugin.js +1 -55
  205. package/lib/performance/isOnlyReexported.js +65 -0
  206. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +25 -5
  207. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +8 -8
  208. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +9 -0
  209. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +9 -0
  210. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +9 -0
  211. package/lib/prefetch/ResourceHintPlugin.js +29 -35
  212. package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
  213. package/lib/prefetch/StartupAssetHintRuntimeModule.js +16 -10
  214. package/lib/rules/RuleSetCompiler.js +211 -4
  215. package/lib/runtime/AsyncModuleRuntimeModule.js +103 -67
  216. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -0
  217. package/lib/runtime/BaseUriRuntimeModule.js +9 -0
  218. package/lib/runtime/ChunkNameRuntimeModule.js +9 -0
  219. package/lib/runtime/EnsureChunkRuntimeModule.js +35 -16
  220. package/lib/runtime/GetChunkFilenameRuntimeModule.js +12 -4
  221. package/lib/runtime/GetFullHashRuntimeModule.js +9 -0
  222. package/lib/runtime/GetMainFilenameRuntimeModule.js +9 -0
  223. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +9 -0
  224. package/lib/runtime/GlobalRuntimeModule.js +11 -4
  225. package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
  226. package/lib/runtime/HelperRuntimeModule.js +10 -0
  227. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +313 -222
  228. package/lib/runtime/NonceRuntimeModule.js +9 -0
  229. package/lib/runtime/OnChunksLoadedRuntimeModule.js +67 -20
  230. package/lib/runtime/PublicPathRuntimeModule.js +9 -0
  231. package/lib/runtime/RuntimeIdRuntimeModule.js +9 -0
  232. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +90 -0
  233. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -0
  234. package/lib/runtime/StartupEntrypointRuntimeModule.js +9 -0
  235. package/lib/runtime/SystemContextRuntimeModule.js +9 -0
  236. package/lib/runtime/ToBinaryRuntimeModule.js +9 -0
  237. package/lib/schemes/DataUriPlugin.js +3 -6
  238. package/lib/schemes/HttpUriPlugin.js +22 -5
  239. package/lib/schemes/VirtualUrlPlugin.js +1 -1
  240. package/lib/serialization/BinaryMiddleware.js +9 -9
  241. package/lib/serialization/FileMiddleware.js +31 -18
  242. package/lib/serialization/ObjectMiddleware.js +168 -139
  243. package/lib/sharing/ConsumeSharedPlugin.js +12 -0
  244. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -0
  245. package/lib/sharing/ShareRuntimeModule.js +9 -0
  246. package/lib/sharing/declaredShared.js +47 -0
  247. package/lib/stats/DefaultStatsFactoryPlugin.js +6 -5
  248. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
  249. package/lib/typescript/TypeScriptPlugin.js +10 -13
  250. package/lib/url/URLParserPlugin.js +6 -8
  251. package/lib/util/ArrayQueue.js +3 -3
  252. package/lib/util/LocConverter.js +4 -7
  253. package/lib/util/SourceProcessor.js +115 -99
  254. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  255. package/lib/util/async.js +292 -0
  256. package/lib/util/buildDiagnostics.js +69 -0
  257. package/lib/util/chainedImports.js +3 -4
  258. package/lib/util/concatenate.js +4 -4
  259. package/lib/util/conventions.js +5 -1
  260. package/lib/util/createHooksRegistry.js +1 -2
  261. package/lib/util/createMappings.js +25 -3
  262. package/lib/util/dataURL.js +2 -3
  263. package/lib/util/deterministicGrouping.js +8 -13
  264. package/lib/util/findGraphRoots.js +6 -13
  265. package/lib/util/fs.js +27 -1
  266. package/lib/util/globUtils.js +1 -1
  267. package/lib/util/handlerKeys.js +40 -0
  268. package/lib/util/hash/wasm-hash.js +3 -4
  269. package/lib/util/identifier.js +20 -0
  270. package/lib/util/internalSerializables.js +7 -1
  271. package/lib/util/registerExternalSerializer.js +6 -45
  272. package/lib/util/removeBOM.js +82 -1
  273. package/lib/util/semver.js +5 -3
  274. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +14 -3
  275. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +14 -3
  276. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -1
  277. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -1
  278. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +7 -12
  279. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +12 -4
  280. package/lib/wasm-sync/WebAssemblyGenerator.js +6 -1
  281. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -1
  282. package/lib/wasm-sync/WebAssemblyUtils.js +2 -4
  283. package/lib/web/FetchCompileAsyncWasmPlugin.js +10 -6
  284. package/lib/web/FetchCompileWasmPlugin.js +4 -2
  285. package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
  286. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
  287. package/package.json +55 -46
  288. package/schemas/WebpackOptions.check.js +1 -1
  289. package/schemas/WebpackOptions.json +388 -76
  290. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  291. package/schemas/plugins/ManifestPlugin.check.js +1 -1
  292. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  293. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  294. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  295. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  296. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  297. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  298. package/schemas/plugins/dll/DllReferencePlugin.check.js +1 -1
  299. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -1
  300. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  301. package/types.d.ts +1795 -608
  302. package/lib/dependencies/ExportBindingInitFragment.js +0 -191
  303. package/lib/errors/EntrypointOverlapWarning.js +0 -45
  304. package/lib/performance/EntrypointOverlapPlugin.js +0 -122
@@ -0,0 +1,104 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Alexander Akait @alexander-akait
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const makeSerializable = require("../util/makeSerializable");
9
+ const ConstDependency = require("./ConstDependency");
10
+ const NullDependency = require("./NullDependency");
11
+
12
+ /** @import { ReplaceSource } from "webpack-sources" */
13
+ /** @import Dependency, { UpdateHashContext } from "../Dependency" */
14
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
15
+ /** @import { Range } from "../javascript/JavascriptParser" */
16
+ /**
17
+ * @import {
18
+ * ObjectDeserializerContext,
19
+ * ObjectSerializerContext
20
+ * } from "../serialization/ObjectMiddleware"
21
+ */
22
+ /** @import Hash from "../util/Hash" */
23
+
24
+ /**
25
+ * `import.meta.main` asks whether the module is the entry, which needs the
26
+ * module argument scope hoisting removes. An inner concatenated module is
27
+ * never an entry module, so it answers with a separate constant expression.
28
+ */
29
+ class ImportMetaMainDependency extends ConstDependency {
30
+ /**
31
+ * Creates an instance of ImportMetaMainDependency.
32
+ * @param {string} expression the expression a module outside a concatenation evaluates
33
+ * @param {string} concatenatedExpression the expression an inner concatenated module evaluates
34
+ * @param {Range} range the source range
35
+ * @param {(string[] | null)=} runtimeRequirements runtime requirements of `expression`
36
+ */
37
+ constructor(expression, concatenatedExpression, range, runtimeRequirements) {
38
+ super(expression, range, runtimeRequirements);
39
+ /** @type {string} */
40
+ this.concatenatedExpression = concatenatedExpression;
41
+ }
42
+
43
+ /**
44
+ * Updates the hash with the data contributed by this instance.
45
+ * @param {Hash} hash hash to be updated
46
+ * @param {UpdateHashContext} context context
47
+ * @returns {void}
48
+ */
49
+ updateHash(hash, context) {
50
+ super.updateHash(hash, context);
51
+ hash.update(this.concatenatedExpression);
52
+ }
53
+
54
+ /**
55
+ * Serializes this instance into the provided serializer context.
56
+ * @param {ObjectSerializerContext} context context
57
+ */
58
+ serialize(context) {
59
+ context.write(this.concatenatedExpression);
60
+ super.serialize(context);
61
+ }
62
+
63
+ /**
64
+ * Restores this instance from the provided deserializer context.
65
+ * @param {ObjectDeserializerContext} context context
66
+ */
67
+ deserialize(context) {
68
+ this.concatenatedExpression = context.read();
69
+ super.deserialize(context.rest);
70
+ }
71
+ }
72
+
73
+ makeSerializable(
74
+ ImportMetaMainDependency,
75
+ "webpack/lib/dependencies/ImportMetaMainDependency"
76
+ );
77
+
78
+ ImportMetaMainDependency.Template = class ImportMetaMainDependencyTemplate extends (
79
+ NullDependency.Template
80
+ ) {
81
+ /**
82
+ * Applies the plugin by registering its hooks on the compiler.
83
+ * @param {Dependency} dependency the dependency for which the template should be applied
84
+ * @param {ReplaceSource} source the current replace source which can be modified
85
+ * @param {DependencyTemplateContext} templateContext the context object
86
+ * @returns {void}
87
+ */
88
+ apply(dependency, source, templateContext) {
89
+ const dep = /** @type {ImportMetaMainDependency} */ (dependency);
90
+ const concatenated = templateContext.concatenationScope !== undefined;
91
+ if (!concatenated && dep.runtimeRequirements) {
92
+ for (const req of dep.runtimeRequirements) {
93
+ templateContext.runtimeRequirements.add(req);
94
+ }
95
+ }
96
+ const expression = concatenated
97
+ ? dep.concatenatedExpression
98
+ : dep.expression;
99
+ const range = /** @type {Range} */ (dep.range);
100
+ source.replace(range[0], range[1] - 1, expression);
101
+ }
102
+ };
103
+
104
+ module.exports = ImportMetaMainDependency;
@@ -27,6 +27,7 @@ const createHooksRegistry = require("../util/createHooksRegistry");
27
27
  const { propertyAccess } = require("../util/property");
28
28
  const BuildTimeConstDependency = require("./BuildTimeConstDependency");
29
29
  const ConstDependency = require("./ConstDependency");
30
+ const ImportMetaMainDependency = require("./ImportMetaMainDependency");
30
31
  const ImportMetaResolveDependency = require("./ImportMetaResolveDependency");
31
32
  const ModuleInitFragmentDependency = require("./ModuleInitFragmentDependency");
32
33
 
@@ -92,11 +93,9 @@ const IMPORT_META_FIELDS = new Set([
92
93
  "webpackHot"
93
94
  ]);
94
95
 
95
- // Single source of truth for `import.meta` accesses that only exist in ES modules
96
- // and therefore mark a module as ESM (consumed by HarmonyDetectionParserPlugin).
97
- // `dirname`/`filename` are resolved by NodeStuffPlugin, the rest here. The webpack
98
- // pragmas `import.meta.webpackHot`/`webpackContext` are intentionally excluded:
99
- // they are usable in CommonJS modules and must not force ESM.
96
+ // The `import.meta` accesses that exist only in ES modules, and so mark one.
97
+ // `dirname` and `filename` are resolved by NodeStuffPlugin. The webpack pragmas
98
+ // are excluded: they work in CommonJS too and must not force ESM.
100
99
  const IMPORT_META_NAMES = [
101
100
  IMPORT_META,
102
101
  IMPORT_META_URL,
@@ -108,11 +107,11 @@ const IMPORT_META_NAMES = [
108
107
  IMPORT_META_RESOLVE
109
108
  ];
110
109
 
111
- // Ordering contract for import.meta parser hooks across plugins: ESM detection
112
- // (HarmonyDetectionParserPlugin, non-bailing) must observe every access before
113
- // any bailing replacement; the merged replacements here must run before
114
- // DefinePlugin object defines (default stage 0) and its nested destructuring
115
- // handler (stage 100).
110
+ // WHY: the ordering contract for the `import.meta` parser hooks across plugins.
111
+ // ESM detection (HarmonyDetectionParserPlugin, non-bailing) must observe every
112
+ // access before any bailing replacement, and the merged replacements here must
113
+ // run before DefinePlugin's object defines (default stage 0) and its nested
114
+ // destructuring handler (stage 100).
116
115
  const IMPORT_META_STAGE_ESM_DETECTION = -1000;
117
116
  const IMPORT_META_STAGE_REPLACEMENT = -100;
118
117
 
@@ -154,17 +153,44 @@ const isImportMetaFieldEnabled = (importMeta, field) => {
154
153
  };
155
154
 
156
155
  /**
157
- * Renders the `import.meta.main` comparison and bails out of scope hoisting.
156
+ * Renders the `import.meta.main` comparison, which reads the module argument a
157
+ * scope-hoisted module does not have. A caller that can answer the expression
158
+ * statically for an inner module rules out only the concatenation root.
158
159
  * @param {Parser} parser the parser
160
+ * @param {boolean} staticWhenInner whether an inner concatenated module answers it without the comparison
159
161
  * @returns {string} the comparison expression
160
162
  */
161
- const renderImportMetaMain = (parser) => {
163
+ const renderImportMetaMain = (parser, staticWhenInner) => {
162
164
  const currentModule = parser.state.module;
163
- /** @type {JavascriptModuleBuildInfo} */
164
- (currentModule.buildInfo).moduleConcatenationBailout = IMPORT_META_MAIN;
165
+ const buildInfo =
166
+ /** @type {JavascriptModuleBuildInfo} */
167
+ (currentModule.buildInfo);
168
+ if (staticWhenInner) {
169
+ buildInfo.moduleConcatenationRootBailout = IMPORT_META_MAIN;
170
+ } else {
171
+ buildInfo.moduleConcatenationBailout = IMPORT_META_MAIN;
172
+ }
165
173
  return `${RuntimeGlobals.moduleCache}[${RuntimeGlobals.entryModuleId}] === ${currentModule.moduleArgument}`;
166
174
  };
167
175
 
176
+ const IMPORT_META_VAR = "__webpack_import_meta__";
177
+
178
+ /**
179
+ * The name of the module's synthesized `import.meta` binding, stepped aside when
180
+ * the source already spells it. Re-bundling webpack output is the case that
181
+ * matters: the earlier binding would shadow this one and make it initialize
182
+ * itself.
183
+ * @param {Parser} parser the parser
184
+ * @returns {string} a name no declaration in this module takes
185
+ */
186
+ const importMetaVarName = (parser) => {
187
+ const { source } = parser.state;
188
+ if (!source || !source.includes(IMPORT_META_VAR)) return IMPORT_META_VAR;
189
+ let index = 2;
190
+ while (source.includes(`__webpack_import_meta_${index}__`)) index++;
191
+ return `__webpack_import_meta_${index}__`;
192
+ };
193
+
168
194
  /**
169
195
  * Checks whether the callee is the `import.meta.resolve` member.
170
196
  * @param {Expression | Super} callee call callee
@@ -261,6 +287,10 @@ class ImportMetaPlugin {
261
287
  BuildTimeConstDependency,
262
288
  new BuildTimeConstDependency.Template()
263
289
  );
290
+ compilation.dependencyTemplates.set(
291
+ ImportMetaMainDependency,
292
+ new ImportMetaMainDependency.Template()
293
+ );
264
294
 
265
295
  /**
266
296
  * Returns file url.
@@ -442,7 +472,7 @@ class ImportMetaPlugin {
442
472
  const referencedPropertiesInDestructuring =
443
473
  parser.destructuringAssignmentPropertiesFor(metaProperty);
444
474
  if (!referencedPropertiesInDestructuring) {
445
- const varName = "__webpack_import_meta__";
475
+ const varName = importMetaVarName(parser);
446
476
  const knownProps = [];
447
477
  if (isImportMetaFieldEnabled(importMeta, "url")) {
448
478
  knownProps.push(`url: ${importMetaUrl()}`);
@@ -451,7 +481,9 @@ class ImportMetaPlugin {
451
481
  knownProps.push(`webpack: ${importMetaWebpackVersion()}`);
452
482
  }
453
483
  if (isImportMetaFieldEnabled(importMeta, "main")) {
454
- knownProps.push(`main: ${renderImportMetaMain(parser)}`);
484
+ knownProps.push(
485
+ `main: ${renderImportMetaMain(parser, false)}`
486
+ );
455
487
  }
456
488
  if (isImportMetaFieldEnabled(importMeta, "env")) {
457
489
  addDefinitionValueDependencies();
@@ -471,8 +503,10 @@ class ImportMetaPlugin {
471
503
  const plainInitCode = `var ${varName} = {${knownProps.join(
472
504
  ", "
473
505
  )}};\n`;
506
+ // Each module owns its `import.meta`: it copies the bundle's one
507
+ // and inherits from it, so later host writes stay visible.
474
508
  const initCode = preserveUnknown(importMeta)
475
- ? `var ${varName} = Object.assign(import.meta, {${knownProps.join(
509
+ ? `var ${varName} = Object.assign(Object.create(import.meta), import.meta, {${knownProps.join(
476
510
  ", "
477
511
  )}});\n`
478
512
  : plainInitCode;
@@ -556,7 +590,7 @@ class ImportMetaPlugin {
556
590
  break;
557
591
  case "main":
558
592
  if (fieldEnabled) {
559
- append(`main: ${renderImportMetaMain(parser)},`);
593
+ append(`main: ${renderImportMetaMain(parser, false)},`);
560
594
  runtimeRequirements.push(
561
595
  RuntimeGlobals.moduleCache,
562
596
  RuntimeGlobals.entryModuleId,
@@ -740,13 +774,21 @@ class ImportMetaPlugin {
740
774
  if (isImportMetaFieldEnabled(importMeta, "main")) {
741
775
  parser.hooks.expression
742
776
  .for(IMPORT_META_MAIN)
743
- .tap(PLUGIN_NAME, (expr) =>
744
- toConstantDependency(parser, renderImportMetaMain(parser), [
745
- RuntimeGlobals.moduleCache,
746
- RuntimeGlobals.entryModuleId,
747
- RuntimeGlobals.module
748
- ])(expr)
749
- );
777
+ .tap(PLUGIN_NAME, (expr) => {
778
+ const dep = new ImportMetaMainDependency(
779
+ renderImportMetaMain(parser, true),
780
+ "false",
781
+ /** @type {Range} */ (expr.range),
782
+ [
783
+ RuntimeGlobals.moduleCache,
784
+ RuntimeGlobals.entryModuleId,
785
+ RuntimeGlobals.module
786
+ ]
787
+ );
788
+ dep.loc = parser.getLocation(expr);
789
+ parser.state.module.addPresentationalDependency(dep);
790
+ return true;
791
+ });
750
792
  parser.hooks.typeof
751
793
  .for(IMPORT_META_MAIN)
752
794
  .tap(
@@ -45,7 +45,7 @@ const getCommentCompilationWarning = memoize(() =>
45
45
  * } from "../../declarations/WebpackOptions"
46
46
  */
47
47
  /** @import { RawChunkGroupOptions } from "../ChunkGroup" */
48
- /** @import { ContextMode } from "../ContextModule" */
48
+ /** @import { ContextMode } from "../context/ContextModule" */
49
49
  /** @import { RawReferencedExports } from "../Dependency" */
50
50
  /** @import { BuildMeta } from "../Module" */
51
51
  /**
@@ -209,20 +209,18 @@ const isStaticStringAttributes = (node) => {
209
209
  : key.type === "Literal"
210
210
  ? key.value
211
211
  : undefined;
212
- if (keyName === "with" || keyName === "assert") {
213
- const value = prop.value;
214
- if (value.type !== "ObjectExpression") return false;
215
- for (const attr of value.properties) {
216
- if (attr.type !== "Property" || attr.kind !== "init" || attr.computed) {
217
- return false;
218
- }
219
- const attrValue = attr.value;
220
- if (
221
- attrValue.type !== "Literal" ||
222
- typeof attrValue.value !== "string"
223
- ) {
224
- return false;
225
- }
212
+ // Any other key is an expression webpack cannot account for, and its
213
+ // value still evaluates, so the argument has to stay.
214
+ if (keyName !== "with" && keyName !== "assert") return false;
215
+ const value = prop.value;
216
+ if (value.type !== "ObjectExpression") return false;
217
+ for (const attr of value.properties) {
218
+ if (attr.type !== "Property" || attr.kind !== "init" || attr.computed) {
219
+ return false;
220
+ }
221
+ const attrValue = attr.value;
222
+ if (attrValue.type !== "Literal" || typeof attrValue.value !== "string") {
223
+ return false;
226
224
  }
227
225
  }
228
226
  }
@@ -676,6 +674,18 @@ class ImportParserPlugin {
676
674
  parser
677
675
  );
678
676
  if (!dep) return;
677
+ // The context module ignores the options argument, but the spec
678
+ // evaluates it, so anything but a static attributes object stays.
679
+ const optionsNode = expr.options;
680
+ if (
681
+ optionsNode &&
682
+ optionsNode.range &&
683
+ !isStaticStringAttributes(optionsNode)
684
+ ) {
685
+ /** @type {ImportContextDependency} */ (dep).optionsRange =
686
+ /** @type {Range} */ (optionsNode.range);
687
+ parser.walkExpression(optionsNode);
688
+ }
679
689
  dep.loc = parser.getLocation(expr);
680
690
  dep.optional = Boolean(parser.scope.inTry);
681
691
  parser.state.current.addDependency(dep);
@@ -21,7 +21,7 @@ const LoaderImportDependency = require("./LoaderImportDependency");
21
21
  * } from "../Compilation"
22
22
  */
23
23
  /** @import Compiler from "../Compiler" */
24
- /** @import { BuildInfo } from "../Module" */
24
+ /** @import Module, { BuildInfo } from "../Module" */
25
25
 
26
26
  /**
27
27
  * Defines the import module callback callback.
@@ -39,6 +39,31 @@ const LoaderImportDependency = require("./LoaderImportDependency");
39
39
  * @property {string=} baseUri target base uri
40
40
  */
41
41
 
42
+ /**
43
+ * @callback LoadModuleCallback
44
+ * @param {Error | null} err error object
45
+ * @param {(string | Buffer)=} source source of the loaded module
46
+ * @param {(object | null)=} sourceMap source map of the loaded module
47
+ * @param {Module=} module the loaded module
48
+ * @returns {void}
49
+ */
50
+
51
+ /**
52
+ * `importModule` takes a callback or, given none, answers with a promise, and
53
+ * TypeScript reads an intersection of call signatures as an overload set
54
+ * @typedef {{ (request: string, options: ImportModuleOptions | undefined, callback: ImportModuleCallback): void } & { (request: string, options?: ImportModuleOptions): Promise<ExecuteModuleExports> }} ImportModuleMethod
55
+ */
56
+
57
+ /**
58
+ * These properties are added by the LoaderPlugin
59
+ * @typedef {object} LoaderPluginLoaderContext
60
+ * @property {(request: string, callback: LoadModuleCallback) => void} loadModule Resolves the given request to a module, applies all configured loaders and calls
61
+ * back with the generated source, the sourceMap and the module instance (usually an
62
+ * instance of NormalModule). Use this function if you need to know the source code
63
+ * of another module to generate the result.
64
+ * @property {ImportModuleMethod} importModule
65
+ */
66
+
42
67
  const PLUGIN_NAME = "LoaderPlugin";
43
68
 
44
69
  class LoaderPlugin {
@@ -7,7 +7,7 @@
7
7
 
8
8
  const RequireContextDependency = require("./RequireContextDependency");
9
9
 
10
- /** @import { ContextMode } from "../ContextModule" */
10
+ /** @import { ContextMode } from "../context/ContextModule" */
11
11
  /** @import JavascriptParser, { Range } from "../javascript/JavascriptParser" */
12
12
 
13
13
  const PLUGIN_NAME = "RequireContextDependencyParserPlugin";
@@ -76,30 +76,29 @@ RequireHeaderDependency.Template = class RequireHeaderDependencyTemplate extends
76
76
  { moduleGraph, runtime, runtimeRequirements, concatenationScope }
77
77
  ) {
78
78
  const dep = /** @type {RequireHeaderDependency} */ (dependency);
79
-
80
- // the paired require dependency already replaced the whole call
81
- if (
82
- concatenationScope !== undefined &&
83
- concatenationScope.isInsideReplacedRequire(dep.range[0])
84
- ) {
85
- return;
86
- }
87
-
88
79
  const requireDep = dep.requireDependency;
89
- // Skip when the paired call became `0`; dead-branch still needs the header.
90
80
  if (requireDep) {
91
81
  const connection = moduleGraph.getConnection(requireDep);
92
- if (
93
- connection &&
94
- !connection.isTargetActive(runtime) &&
95
- requireDep.isEvaluationOnly()
96
- ) {
97
- const guards = requireDep.branchGuards;
98
- if (
99
- guards === undefined ||
100
- !HarmonyImportGuard.isDeadByGuards(guards, moduleGraph, runtime)
101
- ) {
102
- return;
82
+ if (connection) {
83
+ if (connection.isTargetActive(runtime)) {
84
+ if (
85
+ concatenationScope !== undefined &&
86
+ requireDep.rendersAsConcatenatedReference(
87
+ connection,
88
+ concatenationScope
89
+ )
90
+ ) {
91
+ return;
92
+ }
93
+ } else if (requireDep.isEvaluationOnly()) {
94
+ // Skip when the paired call became `0`; dead-branch still needs the header.
95
+ const guards = requireDep.branchGuards;
96
+ if (
97
+ guards === undefined ||
98
+ !HarmonyImportGuard.isDeadByGuards(guards, moduleGraph, runtime)
99
+ ) {
100
+ return;
101
+ }
103
102
  }
104
103
  }
105
104
  }
@@ -24,6 +24,15 @@ class SystemRuntimeModule extends RuntimeModule {
24
24
  return false;
25
25
  }
26
26
 
27
+ /**
28
+ * The `[handlerMap, key]` pairs this module installs onto a chunk handler map
29
+ * such as `__webpack_require__.f`, or `null` where it cannot name them.
30
+ * @returns {[string, string][] | null} installed chunk handlers (do not mutate)
31
+ */
32
+ getInstalledChunkHandlers() {
33
+ return RuntimeModule.NO_CHUNK_HANDLERS;
34
+ }
35
+
27
36
  /**
28
37
  * Generates runtime code for this runtime module.
29
38
  * @returns {string | null} runtime code
@@ -9,7 +9,7 @@ const makeSerializable = require("../util/makeSerializable");
9
9
  const ContextDependency = require("./ContextDependency");
10
10
  const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall");
11
11
 
12
- /** @import { ContextOptions } from "../ContextModule" */
12
+ /** @import { ContextOptions } from "../context/ContextModule" */
13
13
  /** @import { Range } from "../javascript/JavascriptParser" */
14
14
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range]>} ObjectDeserializerContext */
15
15
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range]>} ObjectSerializerContext */
@@ -263,11 +263,12 @@ URLDependency.Template = class URLDependencyTemplate extends (
263
263
  return;
264
264
  }
265
265
 
266
- // For ESM module output, emit the analyzable `new URL("./asset", import.meta.url)`
267
- // form (literal specifier, no runtime helpers) so other bundlers and webpack itself
268
- // can statically follow the asset. `url: "relative"` keeps the runtime form.
269
- // A prefetch/preload hint doesn't force it: the `<link>` is emitted separately at
270
- // chunk startup (`StartupAssetHintRuntimeModule`), independent of the call site.
266
+ // WHY: ESM module output emits the analyzable
267
+ // `new URL("./asset", import.meta.url)` form — a literal specifier, no runtime
268
+ // helpers — so other bundlers and webpack itself can statically follow the
269
+ // asset, while `url: "relative"` keeps the runtime form. A prefetch or preload
270
+ // hint does not force it: the `<link>` is emitted separately at chunk startup
271
+ // (`StartupAssetHintRuntimeModule`), independent of the call site.
271
272
  if (
272
273
  !dep.relative &&
273
274
  runtimeTemplate.supportsAnalyzable(
@@ -86,10 +86,9 @@ const WORKER_DEFAULT_SYNTAX = [
86
86
  "Worker from worker_threads"
87
87
  ];
88
88
 
89
- // Worklets are always module scripts loaded through `addModule` and — unlike Web
90
- // Workers — cannot load additional chunks at runtime (no `importScripts`, no
91
- // dynamic `import()`). The WorkletDependency wraps the call so every chunk is
92
- // pre-added via `addModule` from the calling scope (see WorkletDependency).
89
+ // A worklet is always a module script loaded through `addModule`, and unlike a
90
+ // Web Worker cannot load further chunks at runtime, so WorkletDependency wraps
91
+ // the call and pre-adds every chunk from the calling scope.
93
92
  const WORKLET_DEFAULT_SYNTAX = [
94
93
  "*context.audioWorklet.addModule()",
95
94
  "*audioWorklet.addModule()",
@@ -406,10 +405,9 @@ class WorkerAndWorkletPlugin {
406
405
  )
407
406
  );
408
407
  } else {
409
- // `webpackEntryOptions` is user input from a magic
410
- // comment, so copy only safe own keys to avoid
411
- // prototype pollution via `__proto__`/`constructor`/
412
- // `prototype`.
408
+ // `webpackEntryOptions` is user input from a magic comment, so
409
+ // only safe own keys are copied, against prototype pollution
410
+ // through `__proto__` or `constructor`.
413
411
  const userEntryOptions = importOptions.webpackEntryOptions;
414
412
  for (const key of Object.keys(userEntryOptions)) {
415
413
  if (
@@ -502,11 +500,9 @@ class WorkerAndWorkletPlugin {
502
500
 
503
501
  /** @type {ResourceHint | undefined} */
504
502
  let resourceHint;
505
- // Resource-hint comments belong to the asset expression — read
506
- // them from the inner `new URL(...)` range only, never from
507
- // elsewhere inside `new Worker(...)`. When `arg1` is bare
508
- // `import.meta.url` there is no `new URL` and no place for
509
- // the comments to go, so resource hints are skipped.
503
+ // Resource-hint comments belong to the asset expression, so they are
504
+ // read from the inner `new URL(...)` range alone. A bare
505
+ // `import.meta.url` has none, so its hints are skipped.
510
506
  if (arg1.type === "NewExpression") {
511
507
  const { options: urlImportOptions } = parser.parseCommentOptions(
512
508
  /** @type {Range} */ (arg1.range)
@@ -652,10 +648,9 @@ class WorkerAndWorkletPlugin {
652
648
  name: entryOptions.name,
653
649
  circular: false,
654
650
  entryOptions: {
655
- // A module worklet links its split chunks via native `import`
656
- // (resolved by `addModule`), so it keeps the module chunk
657
- // loading. A script worklet can't load chunks at runtime, so its
658
- // chunks use import-scripts and are pre-added from the calling scope.
651
+ // A module worklet links its split chunks through native `import`
652
+ // and keeps module chunk loading. A script worklet loads none at
653
+ // runtime, so its chunks are pre-added from the calling scope.
659
654
  chunkLoading: this._module
660
655
  ? this._chunkLoading
661
656
  : "import-scripts",
@@ -753,6 +748,7 @@ class WorkerAndWorkletPlugin {
753
748
  ) {
754
749
  return;
755
750
  }
751
+ settings.used = true;
756
752
  return handle(expr);
757
753
  });
758
754
  } else {
@@ -799,10 +795,9 @@ class WorkerAndWorkletPlugin {
799
795
  );
800
796
  }
801
797
 
802
- // Worklet parsing is opt-in: unset falls back to the `futureDefaults`
803
- // default, `false` disables it. It is not defaulted in
804
- // `config/defaults.js` because that would splice into the `"..."`
805
- // merge sentinel of a user-provided list.
798
+ // Worklet parsing is opt-in: unset falls back to `futureDefaults` and
799
+ // `false` disables it. Not defaulted in `config/defaults.js`, which
800
+ // would splice into a user list's `"..."` sentinel.
806
801
  const workletOption =
807
802
  parserOptions.worklet === undefined
808
803
  ? this._workletDefault
@@ -131,24 +131,18 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
131
131
  );
132
132
  const chunk = entrypoint.getEntrypointChunk();
133
133
 
134
- // For ESM module output emit the analyzable `new URL("./worker.<name>.js",
135
- // import.meta.url)` form (literal specifier, no runtime helpers) so other bundlers
136
- // and webpack itself can statically follow the worker. A resource hint doesn't
137
- // block it: the `<link>` is emitted at chunk startup instead of wrapping the href,
138
- // which would turn the specifier into a non-analyzable expression.
139
- const analyzableSpecifier = runtimeTemplate.supportsAnalyzable(
140
- "url",
141
- chunkGraph,
142
- templateContext.module
143
- )
144
- ? runtimeTemplate._getAnalyzableChunkSpecifier(
145
- dep.options.publicPath,
146
- chunk,
147
- templateContext.module,
148
- chunkGraph,
149
- runtimeRequirements
150
- )
151
- : null;
134
+ // WHY: ESM module output emits the analyzable
135
+ // `new URL("./worker.<name>.js", import.meta.url)` form — a literal specifier,
136
+ // no runtime helpers — so other bundlers and webpack itself can statically
137
+ // follow the worker. A resource hint does not block it: the `<link>` is
138
+ // emitted at chunk startup instead of wrapping the href, which would turn the
139
+ // specifier into a non-analyzable expression.
140
+ const analyzableSpecifier = runtimeTemplate.getAnalyzableWorkerUrl(
141
+ dep.options.publicPath,
142
+ chunk,
143
+ templateContext.module,
144
+ chunkGraph
145
+ );
152
146
 
153
147
  if (analyzableSpecifier !== null) {
154
148
  // No `<link>` helper is asked for here: this form emits no call, and
@@ -136,21 +136,15 @@ WorkletDependency.Template = class WorkletDependencyTemplate extends (
136
136
  const runtimeChunkId =
137
137
  runtimeChunk && runtimeChunk.id !== null ? runtimeChunk.id : null;
138
138
 
139
- // For ESM module output emit the analyzable `new URL("./worklet.<name>.js",
140
- // import.meta.url)` form (literal specifier, no runtime helpers) so other bundlers
141
- // and webpack itself can statically follow the worklet. The worklet chunk links its
142
- // splits via native `import`, so only the entry chunk is referenced.
143
- const analyzableSpecifier =
144
- runtimeTemplate.supportsAnalyzable("url", chunkGraph, module) &&
145
- entryChunk.id !== null
146
- ? runtimeTemplate._getAnalyzableChunkSpecifier(
147
- dep.options.publicPath,
148
- entryChunk,
149
- module,
150
- chunkGraph,
151
- runtimeRequirements
152
- )
153
- : null;
139
+ // ESM output emits the analyzable `new URL("./worklet.<name>.js",
140
+ // import.meta.url)`, which another bundler can follow statically. Only the
141
+ // entry chunk is named, its splits being linked by native `import`.
142
+ const analyzableSpecifier = runtimeTemplate.getAnalyzableWorkerUrl(
143
+ dep.options.publicPath,
144
+ entryChunk,
145
+ module,
146
+ chunkGraph
147
+ );
154
148
  if (analyzableSpecifier !== null) {
155
149
  source.replace(
156
150
  dep.callRange[0],
@@ -201,11 +195,9 @@ WorkletDependency.Template = class WorkletDependencyTemplate extends (
201
195
  return;
202
196
  }
203
197
 
204
- // A worklet can't load chunks at runtime, so every reachable chunk (initial
205
- // splits and async `import()` targets alike) is pre-added via `addModule`
206
- // from the calling scope. The runtime chunk is added last so it installs the
207
- // chunks pushed before it and runs entry startup with every module present
208
- // (see ImportScriptsChunkLoadingRuntimeModule).
198
+ // A worklet loads no chunks at runtime, so every reachable one is pre-added
199
+ // from the calling scope. The runtime chunk goes last, installing what came
200
+ // before it and running startup with every module present.
209
201
  /** @type {(string | number)[]} */
210
202
  const restChunkIds = [];
211
203
  for (const chunk of referencedChunks) {