@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
@@ -10,6 +10,7 @@ const {
10
10
  compareModulesByPreOrderIndexOrIdentifier
11
11
  } = require("../util/comparators");
12
12
  const createHash = require("../util/createHash");
13
+ const { fileUrlToPath } = require("../util/identifier");
13
14
  const {
14
15
  getFullModuleName,
15
16
  getUsedModuleIdsAndModules
@@ -58,7 +59,7 @@ class HashedModuleIdsPlugin {
58
59
  compilation.hooks.moduleIds.tap(PLUGIN_NAME, () => {
59
60
  const chunkGraph = compilation.chunkGraph;
60
61
  const context = this.options.context
61
- ? this.options.context
62
+ ? fileUrlToPath(this.options.context)
62
63
  : compiler.context;
63
64
 
64
65
  const [usedIds, modules] = getUsedModuleIdsAndModules(compilation);
package/lib/index.js CHANGED
@@ -38,7 +38,7 @@ const memoize = require("./util/memoize");
38
38
  /** @typedef {import("./asset/AssetModule").AssetModuleBuildInfo} AssetModuleBuildInfo */
39
39
  /** @typedef {import("./ChunkGroup")} ChunkGroup */
40
40
  /** @typedef {import("./Compiler").AssetEmittedInfo} AssetEmittedInfo */
41
- /** @typedef {import("./ContextModule").ContextModuleBuildInfo} ContextModuleBuildInfo */
41
+ /** @typedef {import("./context/ContextModule").ContextModuleBuildInfo} ContextModuleBuildInfo */
42
42
  /** @typedef {import("./css/CssModule").CssModuleBuildInfo} CssModuleBuildInfo */
43
43
  /** @typedef {import("./css/CssModule").CssModuleBuildMeta} CssModuleBuildMeta */
44
44
  /** @typedef {import("./ExternalModule").ExternalModuleBuildInfo} ExternalModuleBuildInfo */
@@ -237,10 +237,13 @@ module.exports = mergeExports(fn, {
237
237
  return require("./ConcatenationScope");
238
238
  },
239
239
  get ContextExclusionPlugin() {
240
- return require("./ContextExclusionPlugin");
240
+ return require("./context/ContextExclusionPlugin");
241
241
  },
242
242
  get ContextReplacementPlugin() {
243
- return require("./ContextReplacementPlugin");
243
+ return require("./context/ContextReplacementPlugin");
244
+ },
245
+ get CopyPlugin() {
246
+ return require("./CopyPlugin");
244
247
  },
245
248
  get DefinePlugin() {
246
249
  return require("./DefinePlugin");
@@ -740,3 +743,46 @@ module.exports = mergeExports(fn, {
740
743
  }
741
744
  }
742
745
  });
746
+
747
+ /**
748
+ * The loader-authoring types, re-exported here because this file is what
749
+ * `generate-types.js` reads webpack's public type surface from
750
+ * @template [OptionsType={}]
751
+ * @template [ContextAdditions={}]
752
+ * @typedef {import("./loaders/LoaderRunner").LoaderModule<OptionsType, ContextAdditions>} LoaderModule
753
+ */
754
+
755
+ /**
756
+ * @template [OptionsType={}]
757
+ * @template [ContextAdditions={}]
758
+ * @typedef {import("./loaders/LoaderRunner").RawLoaderDefinition<OptionsType, ContextAdditions>} RawLoaderDefinition
759
+ */
760
+
761
+ /**
762
+ * @template [OptionsType={}]
763
+ * @template [ContextAdditions={}]
764
+ * @typedef {import("./loaders/LoaderRunner").LoaderDefinition<OptionsType, ContextAdditions>} LoaderDefinition
765
+ */
766
+
767
+ /**
768
+ * @template [OptionsType={}]
769
+ * @template [ContextAdditions={}]
770
+ * @typedef {import("./loaders/LoaderRunner").LoaderDefinitionFunction<OptionsType, ContextAdditions>} LoaderDefinitionFunction
771
+ */
772
+
773
+ /**
774
+ * @template [OptionsType={}]
775
+ * @template [ContextAdditions={}]
776
+ * @typedef {import("./loaders/LoaderRunner").PitchLoaderDefinitionFunction<OptionsType, ContextAdditions>} PitchLoaderDefinitionFunction
777
+ */
778
+
779
+ /**
780
+ * @template [OptionsType={}]
781
+ * @template [ContextAdditions={}]
782
+ * @typedef {import("./loaders/LoaderRunner").RawLoaderDefinitionFunction<OptionsType, ContextAdditions>} RawLoaderDefinitionFunction
783
+ */
784
+
785
+ /**
786
+ * @template OptionsType
787
+ * @typedef {import("./NormalModule").LoaderContext<OptionsType>} LoaderContext
788
+ */
@@ -55,10 +55,11 @@ function createChunkHashHandler(name) {
55
55
  hash.update(name);
56
56
  hash.update("1");
57
57
  if (runtimeChunk && runtimeChunk.hash) {
58
- // https://github.com/webpack/webpack/issues/19439
59
- // Any change to runtimeChunk should trigger a hash update,
60
- // we shouldn't depend on or inspect its internal implementation.
58
+ // WHY: any change to the runtime chunk must move this hash, and its
59
+ // internal implementation is not ours to depend on or inspect — the import
60
+ // names its hashed filename:
61
61
  // import __webpack_require__ from "./runtime-main.e9400aee33633a3973bd.js";
62
+ // https://github.com/webpack/webpack/issues/19439
62
63
  hash.update(runtimeChunk.hash);
63
64
  }
64
65
  updateHashForEntryStartup(hash, chunkGraph, entries, chunk);
@@ -256,6 +256,7 @@ class JavascriptGenerator extends Generator {
256
256
  /** @type {NonNullable<GenerateContext["codeGenerationResults"]>} */
257
257
  (generateContext.codeGenerationResults),
258
258
  initFragments,
259
+ getData: generateContext.getData,
259
260
  get chunkInitFragments() {
260
261
  if (!chunkInitFragments) {
261
262
  const data =
@@ -332,7 +333,13 @@ class JavascriptGenerator extends Generator {
332
333
  * @returns {Source | null} generated code
333
334
  */
334
335
  generateError(error, module, generateContext) {
335
- return new RawSource(Generator.throwBuildErrorCode(error));
336
+ return new RawSource(
337
+ Generator.throwBuildErrorCode(
338
+ error,
339
+ undefined,
340
+ generateContext.runtimeTemplate.requestShortener
341
+ )
342
+ );
336
343
  }
337
344
  }
338
345
 
@@ -19,6 +19,7 @@ const makeSerializable = require("../util/makeSerializable");
19
19
  * Defines the build info properties specific to javascript modules.
20
20
  * @typedef {object} KnownJavascriptModuleBuildInfo
21
21
  * @property {string=} moduleConcatenationBailout using in CommonJs
22
+ * @property {string=} moduleConcatenationRootBailout what rules the module out as a concatenation root, while it may still be an inner module
22
23
  * @property {boolean=} needCreateRequire using in APIPlugin
23
24
  * @property {boolean=} usingPublicPathOverride module reassigns `__webpack_public_path__` at runtime, using in APIPlugin
24
25
  * @property {Set<string>=} pureFunctions names of locally declared functions known to be free of side effects
@@ -50,34 +50,19 @@ const {
50
50
  const createHash = require("../util/createHash");
51
51
  const createHooksRegistry = require("../util/createHooksRegistry");
52
52
  const { digestNonNumericOnlyWithFull } = require("../util/nonNumericOnlyHash");
53
- const removeBOM = require("../util/removeBOM");
53
+ const { removeBOMFromResult } = require("../util/removeBOM");
54
54
  const { intersectRuntime } = require("../util/runtime");
55
55
  const { getAllChunks } = require("./ChunkHelpers");
56
56
  const JavascriptGenerator = require("./JavascriptGenerator");
57
57
  const JavascriptModule = require("./JavascriptModule");
58
58
  const JavascriptParser = require("./JavascriptParser");
59
59
  const analyzeScope = require("./ScopeAnalyzer");
60
+ const { renderAwaitedEntries } = require("./StartupHelpers");
61
+ const { releaseParserCaches } = require("./syntax");
60
62
 
61
63
  /**
62
64
  * @import {
63
- * Program,
64
- * Node,
65
- * Identifier,
66
- * CatchClause,
67
- * ClassDeclaration,
68
- * ClassExpression,
69
- * FunctionDeclaration,
70
- * FunctionExpression,
71
- * ArrowFunctionExpression,
72
- * VariableDeclarator,
73
- * VariableDeclaration,
74
- * ImportDeclaration,
75
- * ImportSpecifier,
76
- * ImportDefaultSpecifier,
77
- * ImportNamespaceSpecifier,
78
- * AssignmentExpression,
79
- * ForInStatement,
80
- * ForOfStatement
65
+ * Program
81
66
  * } from "estree"
82
67
  */
83
68
  /** @import { Source } from "webpack-sources" */
@@ -93,7 +78,6 @@ const analyzeScope = require("./ScopeAnalyzer");
93
78
  /** @import DependencyTemplates from "../DependencyTemplates" */
94
79
  /** @import Entrypoint from "../Entrypoint" */
95
80
  /** @import Module, { BuildInfo, CodeGenerationResultData } from "../Module" */
96
- /** @import { RuntimeSpec } from "../util/runtime" */
97
81
  /** @import ModuleGraph from "../ModuleGraph" */
98
82
  /** @import RuntimeTemplate from "../RuntimeTemplate" */
99
83
  /** @import WebpackError from "../errors/WebpackError" */
@@ -347,18 +331,6 @@ const createCompilationHooks = () => ({
347
331
  * @since 5.22.0
348
332
  */
349
333
  inlineInRuntimeBailout: new SyncBailHook(["module", "renderContext"]),
350
- /**
351
- * Offers a module's rendered export-definition call to a consumer that can place
352
- * it better — a library whose entry exports the same bindings natively takes it
353
- * over and emits it only where the module is wrapped. Return true to take it.
354
- * @type {SyncBailHook<[Module, RuntimeSpec, string, boolean], boolean | void>}
355
- */
356
- onDemandExportsGeneration: new SyncBailHook([
357
- "module",
358
- "runtime",
359
- "source",
360
- "placeAtEnd"
361
- ]),
362
334
  /**
363
335
  * @type {SyncBailHook<[Module, RenderContext], string | void>}
364
336
  * @since 5.22.0
@@ -470,6 +442,10 @@ class JavascriptModulesPlugin {
470
442
  * @returns {void}
471
443
  */
472
444
  apply(compiler) {
445
+ // the parser's shared string caches only pay off while modules parse —
446
+ // drop them when the build ends so an idle process retains no parser state
447
+ compiler.hooks.done.tap(PLUGIN_NAME, releaseParserCaches);
448
+ compiler.hooks.failed.tap(PLUGIN_NAME, releaseParserCaches);
473
449
  compiler.hooks.compilation.tap(
474
450
  PLUGIN_NAME,
475
451
  (compilation, { normalModuleFactory }) => {
@@ -528,15 +504,8 @@ class JavascriptModulesPlugin {
528
504
 
529
505
  NormalModule.getCompilationHooks(compilation).processResult.tap(
530
506
  PLUGIN_NAME,
531
- (result, module) => {
532
- if (module.type === type) {
533
- const [source, ...rest] = result;
534
-
535
- return [removeBOM(source), ...rest];
536
- }
537
-
538
- return result;
539
- }
507
+ (result, module) =>
508
+ module.type === type ? removeBOMFromResult(result) : result
540
509
  );
541
510
  }
542
511
 
@@ -1615,17 +1584,14 @@ class JavascriptModulesPlugin {
1615
1584
  }
1616
1585
 
1617
1586
  if (runtimeRequirements.has(RuntimeGlobals.makeDeferredNamespaceObject)) {
1618
- // in order to optimize of DeferredNamespaceObject, we remove all proxy handlers after the module initialize
1619
- // (see MakeDeferredNamespaceObjectRuntimeModule)
1620
- // This requires all deferred imports to a module can get the module export object before the module
1621
- // is evaluated.
1587
+ // The deferred namespace drops its proxy handlers once the module has
1588
+ // initialized, which needs every deferred import of it to reach the exports
1589
+ // object before evaluation.
1622
1590
  buf.push("// The deferred module cache");
1623
1591
  buf.push(`${bootstrapCst} __webpack_module_deferred_exports__ = {};`);
1624
- // Per the TC39 import-defer spec, every defer-import call site for
1625
- // the same module must yield the same Deferred Module Namespace
1626
- // Exotic Object (and a distinct one from any eager namespace).
1627
- // Cache the deferred namespace proxy here so calls from different
1628
- // files share identity.
1592
+ // Every defer-import site for one module must yield the same Deferred
1593
+ // Module Namespace, distinct from any eager one, so the proxy is cached
1594
+ // here for call sites in different files to share.
1629
1595
  buf.push("// The deferred namespace cache");
1630
1596
  buf.push(
1631
1597
  `${bootstrapCst} __webpack_module_deferred_namespace_cache__ = {};`
@@ -1687,6 +1653,27 @@ class JavascriptModulesPlugin {
1687
1653
  continue;
1688
1654
  }
1689
1655
  }
1656
+ const entryOptions = chunk.getEntryOptions();
1657
+ const library =
1658
+ entryOptions && entryOptions.library !== undefined
1659
+ ? entryOptions.library
1660
+ : runtimeTemplate.outputOptions.library;
1661
+ // A module library awaits the entry itself, in `ModuleLibraryPlugin`.
1662
+ const awaitedByLibrary =
1663
+ library !== undefined && library.type === "module";
1664
+ // `await` is legal only at an ESM chunk's top level, never in the
1665
+ // startup function below, and only where the target parses it.
1666
+ const canAwaitEntry =
1667
+ runtimeTemplate.isModule() &&
1668
+ runtimeTemplate.supportsTopLevelAwait() &&
1669
+ !awaitedByLibrary &&
1670
+ !runtimeRequirements.has(RuntimeGlobals.startup) &&
1671
+ !(
1672
+ runtimeRequirements.has(RuntimeGlobals.startupOnlyBefore) &&
1673
+ runtimeRequirements.has(RuntimeGlobals.startupOnlyAfter)
1674
+ );
1675
+ /** @type {string[]} */
1676
+ const awaitedEntries = [];
1690
1677
  let i = jsEntries.length;
1691
1678
  for (const [entryModule, entrypoint] of jsEntries) {
1692
1679
  const chunks =
@@ -1794,30 +1781,45 @@ class JavascriptModulesPlugin {
1794
1781
  result.allowInlineStartup = false;
1795
1782
  }
1796
1783
 
1797
- // `__webpack_exports__` may be reassigned later — by the
1798
- // `onChunksLoaded` wrapper below, by an inlined entry
1799
- // module that uses top-level `await` (the emitted
1800
- // bridge reassigns `__webpack_exports__` to the awaited
1801
- // value), or by other downstream codegen. Always declare
1802
- // with `let` (or `var` if `let` is unsupported) so
1803
- // reassignment is allowed.
1784
+ // `__webpack_exports__` may be reassigned later, by the
1785
+ // `onChunksLoaded` wrapper, a top-level `await` bridge or other
1786
+ // codegen, so it is never declared as a constant.
1804
1787
  const exportsDecl = runtimeTemplate.renderLet();
1805
1788
  if (chunks.length > 0) {
1789
+ const awaitEntry =
1790
+ canAwaitEntry && moduleGraph.isAsync(entryModule);
1791
+ const target =
1792
+ i === 0
1793
+ ? RuntimeGlobals.exports
1794
+ : `${RuntimeGlobals.exports}_${i}`;
1795
+ // The wrapper hands back nothing until the flush below runs the
1796
+ // entry, so an awaited one is caught by the entry call itself.
1797
+ if (awaitEntry && i !== 0) buf2.push(`${exportsDecl} ${target};`);
1798
+ const entryCall = `${RuntimeGlobals.require}(${moduleIdExpr})`;
1806
1799
  buf2.push(
1807
1800
  `${i === 0 ? `${exportsDecl} ${RuntimeGlobals.exports} = ` : ""}${
1808
1801
  RuntimeGlobals.onChunksLoaded
1809
1802
  }(undefined, ${JSON.stringify(
1810
1803
  chunks.map((c) => c.id)
1811
1804
  )}, ${runtimeTemplate.returningFunction(
1812
- `${RuntimeGlobals.require}(${moduleIdExpr})`
1805
+ awaitEntry ? `(${target} = ${entryCall})` : entryCall
1813
1806
  )})`
1814
1807
  );
1808
+ if (awaitEntry) awaitedEntries.push(target);
1815
1809
  } else if (useRequire) {
1810
+ // An async entry nobody awaits settles after the bundle did,
1811
+ // which orphans its rejection.
1812
+ const awaitEntry =
1813
+ canAwaitEntry && moduleGraph.isAsync(entryModule);
1814
+ const target =
1815
+ i === 0
1816
+ ? RuntimeGlobals.exports
1817
+ : `${RuntimeGlobals.exports}_${i}`;
1818
+ const needsDecl = i === 0 || awaitEntry;
1816
1819
  buf2.push(
1817
- `${i === 0 ? `${exportsDecl} ${RuntimeGlobals.exports} = ` : ""}${
1818
- RuntimeGlobals.require
1819
- }(${moduleIdExpr});`
1820
+ `${needsDecl ? `${exportsDecl} ${target} = ` : ""}${RuntimeGlobals.require}(${moduleIdExpr});`
1820
1821
  );
1822
+ if (awaitEntry) awaitedEntries.push(target);
1821
1823
  } else {
1822
1824
  if (i === 0) {
1823
1825
  buf2.push(`${exportsDecl} ${RuntimeGlobals.exports} = {};`);
@@ -1860,6 +1862,7 @@ class JavascriptModulesPlugin {
1860
1862
  `${RuntimeGlobals.exports} = ${RuntimeGlobals.onChunksLoaded}(${RuntimeGlobals.exports});`
1861
1863
  );
1862
1864
  }
1865
+ buf2.push(...renderAwaitedEntries(awaitedEntries));
1863
1866
  if (
1864
1867
  runtimeRequirements.has(RuntimeGlobals.startup) ||
1865
1868
  (runtimeRequirements.has(RuntimeGlobals.startupOnlyBefore) &&
@@ -1989,11 +1992,9 @@ class JavascriptModulesPlugin {
1989
1992
  const needModuleDefer = runtimeRequirements.has(
1990
1993
  RuntimeGlobals.makeDeferredNamespaceObject
1991
1994
  );
1992
- // Both deferred-namespace runtimes re-invoke `__webpack_require__` on
1993
- // access, so a module's evaluation error must be retained and re-thrown
1994
- // (a Cyclic Module Record's [[EvaluationError]]); the optimized variant
1995
- // does not use `__webpack_module_deferred_exports__`, so it is tracked
1996
- // separately from `needModuleDefer`.
1995
+ // Both deferred-namespace runtimes re-invoke `__webpack_require__` on access,
1996
+ // so an evaluation error must be retained and re-thrown. The optimized one
1997
+ // skips the deferred exports object, hence the separate flag.
1997
1998
  const needModuleDeferAny =
1998
1999
  needModuleDefer ||
1999
2000
  runtimeRequirements.has(
@@ -2121,10 +2122,9 @@ class JavascriptModulesPlugin {
2121
2122
  allModules.every((m) => /** @type {BuildInfo} */ (m.buildInfo).strict);
2122
2123
  const isMultipleEntries = inlinedModules.size > 1;
2123
2124
  const singleEntryWithModules = inlinedModules.size === 1 && hasChunkModules;
2124
- // This step is before the IIFE reason calculation; it only runs for the
2125
- // cases whose IIFE reason it can remove: multiple inlined entry modules, or a
2126
- // single inlined entry alongside other chunk modules. The remaining reason
2127
- // ('it uses a non-standard name for the exports') is not handled here.
2125
+ // Runs before the IIFE reason is calculated, and only for the cases whose
2126
+ // reason it can remove: several inlined entries, or one beside other chunk
2127
+ // modules. A non-standard exports name is not handled here.
2128
2128
  if (innerStrict || (!isMultipleEntries && !singleEntryWithModules)) {
2129
2129
  return false;
2130
2130
  }
@@ -2183,11 +2183,9 @@ class JavascriptModulesPlugin {
2183
2183
  }
2184
2184
  }
2185
2185
 
2186
- // Fast path: codegen reports each inlined entry's rendered top-level
2187
- // declarations and free names (post-concatenation), so when no declaration
2188
- // collides with a free name of any other module, another entry's
2189
- // declarations, or a reserved name, no renaming is needed and the entries
2190
- // don't have to be parsed at all.
2186
+ // Codegen reports each inlined entry's rendered top-level declarations and
2187
+ // free names, so where nothing collides there is no renaming to do and the
2188
+ // entries need not be parsed at all.
2191
2189
  fastPath: {
2192
2190
  const { codeGenerationResults, chunk } = renderContext;
2193
2191
  /** @type {Set<string>} */
@@ -2272,11 +2270,9 @@ class JavascriptModulesPlugin {
2272
2270
  }
2273
2271
  }
2274
2272
 
2275
- // Multiple inlined entry modules share the chunk's startup scope. Rename any
2276
- // top-level declaration that would collide with another inlined module's
2277
- // declaration, with any inlined or non-inlined module's free (global)
2278
- // reference, or with a reserved name, so the modules can be emitted without a
2279
- // per-entry IIFE.
2273
+ // Several inlined entries share the chunk's startup scope, so any top-level
2274
+ // declaration colliding with another's declaration, any module's free
2275
+ // reference or a reserved name is renamed, sparing them a per-entry IIFE.
2280
2276
  if (isMultipleEntries) {
2281
2277
  /** @type {Set<string>} */
2282
2278
  const allUsedNames = new Set(nonInlinedModuleThroughIdentifiers);