webpack 5.92.1 → 5.94.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 (350) hide show
  1. package/README.md +8 -5
  2. package/bin/webpack.js +6 -7
  3. package/hot/log.js +1 -2
  4. package/hot/only-dev-server.js +1 -1
  5. package/hot/poll.js +1 -1
  6. package/hot/signal.js +1 -1
  7. package/lib/APIPlugin.js +4 -3
  8. package/lib/AbstractMethodError.js +10 -5
  9. package/lib/AutomaticPrefetchPlugin.js +1 -1
  10. package/lib/BannerPlugin.js +12 -6
  11. package/lib/Cache.js +8 -10
  12. package/lib/CacheFacade.js +3 -3
  13. package/lib/CaseSensitiveModulesWarning.js +5 -7
  14. package/lib/Chunk.js +14 -11
  15. package/lib/ChunkGraph.js +58 -36
  16. package/lib/ChunkGroup.js +2 -3
  17. package/lib/ChunkTemplate.js +43 -0
  18. package/lib/CleanPlugin.js +10 -11
  19. package/lib/CodeGenerationResults.js +6 -5
  20. package/lib/CommentCompilationWarning.js +0 -1
  21. package/lib/Compilation.js +223 -191
  22. package/lib/Compiler.js +81 -82
  23. package/lib/ConcatenationScope.js +3 -6
  24. package/lib/ConditionalInitFragment.js +6 -7
  25. package/lib/ConstPlugin.js +7 -15
  26. package/lib/ContextExclusionPlugin.js +3 -3
  27. package/lib/ContextModule.js +36 -21
  28. package/lib/ContextModuleFactory.js +89 -44
  29. package/lib/ContextReplacementPlugin.js +10 -9
  30. package/lib/DefinePlugin.js +76 -69
  31. package/lib/DelegatedModule.js +7 -3
  32. package/lib/DelegatedModuleFactoryPlugin.js +36 -22
  33. package/lib/DelegatedPlugin.js +4 -0
  34. package/lib/DependenciesBlock.js +0 -1
  35. package/lib/Dependency.js +10 -14
  36. package/lib/DllEntryPlugin.js +4 -2
  37. package/lib/DllModuleFactory.js +1 -0
  38. package/lib/DllPlugin.js +9 -7
  39. package/lib/DllReferencePlugin.js +30 -15
  40. package/lib/EntryPlugin.js +1 -3
  41. package/lib/EnvironmentPlugin.js +5 -2
  42. package/lib/ErrorHelpers.js +11 -12
  43. package/lib/EvalDevToolModulePlugin.js +10 -12
  44. package/lib/EvalSourceMapDevToolPlugin.js +15 -13
  45. package/lib/ExportsInfo.js +185 -120
  46. package/lib/ExternalModule.js +104 -64
  47. package/lib/ExternalModuleFactoryPlugin.js +23 -10
  48. package/lib/FileSystemInfo.js +791 -422
  49. package/lib/FlagAllModulesAsUsedPlugin.js +1 -1
  50. package/lib/FlagDependencyExportsPlugin.js +12 -11
  51. package/lib/FlagDependencyUsagePlugin.js +1 -1
  52. package/lib/Generator.js +2 -5
  53. package/lib/GraphHelpers.js +3 -2
  54. package/lib/HookWebpackError.js +8 -10
  55. package/lib/HotModuleReplacementPlugin.js +78 -64
  56. package/lib/IgnoreErrorModuleFactory.js +3 -3
  57. package/lib/IgnorePlugin.js +1 -3
  58. package/lib/IgnoreWarningsPlugin.js +6 -9
  59. package/lib/InitFragment.js +2 -3
  60. package/lib/LibManifestPlugin.js +4 -3
  61. package/lib/MainTemplate.js +72 -19
  62. package/lib/Module.js +25 -9
  63. package/lib/ModuleBuildError.js +4 -11
  64. package/lib/ModuleDependencyError.js +5 -5
  65. package/lib/ModuleDependencyWarning.js +5 -5
  66. package/lib/ModuleError.js +1 -5
  67. package/lib/ModuleFilenameHelpers.js +29 -46
  68. package/lib/ModuleGraph.js +7 -6
  69. package/lib/ModuleGraphConnection.js +6 -6
  70. package/lib/ModuleInfoHeaderPlugin.js +82 -30
  71. package/lib/ModuleParseError.js +8 -9
  72. package/lib/ModuleRestoreError.js +1 -1
  73. package/lib/ModuleStoreError.js +1 -1
  74. package/lib/ModuleTemplate.js +33 -1
  75. package/lib/ModuleTypeConstants.js +21 -22
  76. package/lib/ModuleWarning.js +1 -5
  77. package/lib/MultiCompiler.js +24 -26
  78. package/lib/MultiStats.js +73 -31
  79. package/lib/MultiWatching.js +1 -1
  80. package/lib/NormalModule.js +132 -70
  81. package/lib/NormalModuleFactory.js +53 -49
  82. package/lib/OptimizationStages.js +3 -3
  83. package/lib/ProgressPlugin.js +9 -9
  84. package/lib/ProvidePlugin.js +4 -4
  85. package/lib/RuntimeGlobals.js +71 -70
  86. package/lib/RuntimeModule.js +1 -1
  87. package/lib/RuntimePlugin.js +24 -12
  88. package/lib/RuntimeTemplate.js +40 -44
  89. package/lib/SizeFormatHelpers.js +2 -4
  90. package/lib/SourceMapDevToolPlugin.js +42 -34
  91. package/lib/Stats.js +5 -11
  92. package/lib/Template.js +18 -24
  93. package/lib/TemplatedPathPlugin.js +12 -10
  94. package/lib/UseStrictPlugin.js +8 -1
  95. package/lib/WarnDeprecatedOptionPlugin.js +0 -1
  96. package/lib/WatchIgnorePlugin.js +26 -9
  97. package/lib/Watching.js +10 -5
  98. package/lib/WebpackOptionsApply.js +89 -62
  99. package/lib/asset/AssetGenerator.js +107 -42
  100. package/lib/asset/AssetModulesPlugin.js +29 -23
  101. package/lib/asset/AssetSourceGenerator.js +2 -7
  102. package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
  103. package/lib/buildChunkGraph.js +14 -19
  104. package/lib/cache/IdleFileCachePlugin.js +4 -4
  105. package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
  106. package/lib/cache/PackFileCacheStrategy.js +51 -50
  107. package/lib/cache/ResolverCachePlugin.js +6 -6
  108. package/lib/cache/mergeEtags.js +16 -21
  109. package/lib/cli.js +148 -104
  110. package/lib/config/browserslistTargetHandler.js +16 -13
  111. package/lib/config/defaults.js +31 -28
  112. package/lib/config/normalization.js +335 -344
  113. package/lib/config/target.js +42 -52
  114. package/lib/container/ContainerEntryModule.js +2 -2
  115. package/lib/container/ContainerPlugin.js +1 -1
  116. package/lib/container/RemoteRuntimeModule.js +11 -8
  117. package/lib/container/options.js +18 -4
  118. package/lib/css/CssExportsGenerator.js +39 -40
  119. package/lib/css/CssGenerator.js +11 -14
  120. package/lib/css/CssLoadingRuntimeModule.js +10 -10
  121. package/lib/css/CssModulesPlugin.js +127 -47
  122. package/lib/css/CssParser.js +20 -18
  123. package/lib/css/walkCssTokens.js +80 -95
  124. package/lib/debug/ProfilingPlugin.js +19 -20
  125. package/lib/dependencies/AMDDefineDependency.js +1 -1
  126. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
  127. package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
  128. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
  129. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  130. package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
  131. package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
  132. package/lib/dependencies/CommonJsExportsDependency.js +0 -1
  133. package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
  134. package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
  135. package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
  136. package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
  137. package/lib/dependencies/ConstDependency.js +1 -1
  138. package/lib/dependencies/ContextDependency.js +1 -1
  139. package/lib/dependencies/ContextDependencyHelpers.js +31 -34
  140. package/lib/dependencies/ContextElementDependency.js +2 -2
  141. package/lib/dependencies/CriticalDependencyWarning.js +1 -1
  142. package/lib/dependencies/CssExportDependency.js +72 -9
  143. package/lib/dependencies/CssImportDependency.js +0 -2
  144. package/lib/dependencies/CssLocalIdentifierDependency.js +68 -21
  145. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
  146. package/lib/dependencies/CssUrlDependency.js +4 -5
  147. package/lib/dependencies/DynamicExports.js +5 -5
  148. package/lib/dependencies/ExportsInfoDependency.js +1 -2
  149. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
  150. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
  151. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
  152. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  153. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
  154. package/lib/dependencies/HarmonyExports.js +2 -2
  155. package/lib/dependencies/HarmonyImportDependency.js +2 -4
  156. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
  157. package/lib/dependencies/HarmonyImportSpecifierDependency.js +41 -16
  158. package/lib/dependencies/ImportDependency.js +1 -1
  159. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
  160. package/lib/dependencies/ImportMetaPlugin.js +11 -13
  161. package/lib/dependencies/ImportParserPlugin.js +39 -44
  162. package/lib/dependencies/JsonExportsDependency.js +22 -18
  163. package/lib/dependencies/LoaderPlugin.js +47 -36
  164. package/lib/dependencies/LocalModule.js +1 -1
  165. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  166. package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
  167. package/lib/dependencies/ProvidedDependency.js +1 -1
  168. package/lib/dependencies/PureExpressionDependency.js +6 -6
  169. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  170. package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
  171. package/lib/dependencies/SystemPlugin.js +1 -1
  172. package/lib/dependencies/URLDependency.js +3 -3
  173. package/lib/dependencies/URLPlugin.js +66 -12
  174. package/lib/dependencies/WorkerPlugin.js +25 -24
  175. package/lib/dependencies/processExportInfo.js +3 -1
  176. package/lib/electron/ElectronTargetPlugin.js +1 -0
  177. package/lib/esm/ModuleChunkFormatPlugin.js +11 -12
  178. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
  179. package/lib/formatLocation.js +1 -2
  180. package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
  181. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  182. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
  183. package/lib/hmr/LazyCompilationPlugin.js +27 -12
  184. package/lib/hmr/lazyCompilationBackend.js +64 -40
  185. package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
  186. package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
  187. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  188. package/lib/ids/HashedModuleIdsPlugin.js +5 -1
  189. package/lib/ids/IdHelpers.js +29 -39
  190. package/lib/ids/SyncModuleIdsPlugin.js +7 -2
  191. package/lib/index.js +1 -5
  192. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +6 -4
  193. package/lib/javascript/BasicEvaluatedExpression.js +4 -19
  194. package/lib/javascript/ChunkHelpers.js +1 -1
  195. package/lib/javascript/CommonJsChunkFormatPlugin.js +10 -11
  196. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
  197. package/lib/javascript/JavascriptGenerator.js +23 -7
  198. package/lib/javascript/JavascriptModulesPlugin.js +97 -70
  199. package/lib/javascript/JavascriptParser.js +179 -200
  200. package/lib/javascript/JavascriptParserHelpers.js +20 -21
  201. package/lib/javascript/StartupHelpers.js +41 -13
  202. package/lib/json/JsonGenerator.js +7 -13
  203. package/lib/json/JsonModulesPlugin.js +1 -4
  204. package/lib/json/JsonParser.js +5 -3
  205. package/lib/library/AmdLibraryPlugin.js +12 -16
  206. package/lib/library/AssignLibraryPlugin.js +9 -11
  207. package/lib/library/EnableLibraryPlugin.js +25 -15
  208. package/lib/library/ExportPropertyLibraryPlugin.js +8 -2
  209. package/lib/library/JsonpLibraryPlugin.js +2 -1
  210. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  211. package/lib/library/ModuleLibraryPlugin.js +2 -1
  212. package/lib/library/SystemLibraryPlugin.js +2 -1
  213. package/lib/library/UmdLibraryPlugin.js +66 -92
  214. package/lib/logging/Logger.js +32 -4
  215. package/lib/logging/createConsoleLogger.js +12 -13
  216. package/lib/logging/runtime.js +7 -8
  217. package/lib/logging/truncateArgs.js +5 -8
  218. package/lib/node/NodeWatchFileSystem.js +3 -18
  219. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
  220. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
  221. package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
  222. package/lib/node/nodeConsole.js +22 -22
  223. package/lib/optimize/AggressiveMergingPlugin.js +2 -4
  224. package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
  225. package/lib/optimize/ConcatenatedModule.js +144 -61
  226. package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
  227. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
  228. package/lib/optimize/InnerGraph.js +17 -17
  229. package/lib/optimize/InnerGraphPlugin.js +8 -7
  230. package/lib/optimize/LimitChunkCountPlugin.js +2 -3
  231. package/lib/optimize/MangleExportsPlugin.js +1 -0
  232. package/lib/optimize/MinMaxSizeWarning.js +1 -1
  233. package/lib/optimize/ModuleConcatenationPlugin.js +56 -78
  234. package/lib/optimize/RealContentHashPlugin.js +7 -10
  235. package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
  236. package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
  237. package/lib/optimize/SplitChunksPlugin.js +34 -30
  238. package/lib/performance/SizeLimitsPlugin.js +2 -2
  239. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -0
  240. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
  241. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
  242. package/lib/rules/BasicEffectRulePlugin.js +3 -1
  243. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  244. package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
  245. package/lib/rules/RuleSetCompiler.js +41 -22
  246. package/lib/rules/UseEffectRulePlugin.js +36 -32
  247. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  248. package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
  249. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  250. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
  251. package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
  252. package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
  253. package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
  254. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
  255. package/lib/schemes/DataUriPlugin.js +1 -1
  256. package/lib/schemes/HttpUriPlugin.js +241 -126
  257. package/lib/serialization/BinaryMiddleware.js +44 -28
  258. package/lib/serialization/DateObjectSerializer.js +1 -0
  259. package/lib/serialization/ErrorObjectSerializer.js +2 -0
  260. package/lib/serialization/FileMiddleware.js +154 -106
  261. package/lib/serialization/MapObjectSerializer.js +2 -1
  262. package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
  263. package/lib/serialization/ObjectMiddleware.js +52 -56
  264. package/lib/serialization/PlainObjectSerializer.js +32 -6
  265. package/lib/serialization/RegExpObjectSerializer.js +1 -0
  266. package/lib/serialization/Serializer.js +4 -5
  267. package/lib/serialization/SerializerMiddleware.js +6 -6
  268. package/lib/serialization/SetObjectSerializer.js +2 -1
  269. package/lib/sharing/ConsumeSharedModule.js +19 -14
  270. package/lib/sharing/ConsumeSharedPlugin.js +116 -97
  271. package/lib/sharing/ConsumeSharedRuntimeModule.js +108 -141
  272. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  273. package/lib/sharing/ProvideSharedPlugin.js +2 -2
  274. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  275. package/lib/sharing/utils.js +15 -27
  276. package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
  277. package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
  278. package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
  279. package/lib/stats/StatsFactory.js +127 -56
  280. package/lib/stats/StatsPrinter.js +75 -44
  281. package/lib/util/ArrayHelpers.js +8 -4
  282. package/lib/util/ArrayQueue.js +1 -1
  283. package/lib/util/AsyncQueue.js +31 -12
  284. package/lib/util/IterableHelpers.js +3 -4
  285. package/lib/util/LazyBucketSortedSet.js +60 -44
  286. package/lib/util/LazySet.js +1 -0
  287. package/lib/util/MapHelpers.js +1 -3
  288. package/lib/util/ParallelismFactorCalculator.js +1 -1
  289. package/lib/util/Queue.js +1 -1
  290. package/lib/util/Semaphore.js +4 -7
  291. package/lib/util/SetHelpers.js +5 -5
  292. package/lib/util/SortableSet.js +4 -3
  293. package/lib/util/StackedCacheMap.js +4 -6
  294. package/lib/util/StackedMap.js +1 -3
  295. package/lib/util/StringXor.js +0 -5
  296. package/lib/util/TupleQueue.js +1 -1
  297. package/lib/util/TupleSet.js +15 -5
  298. package/lib/util/URLAbsoluteSpecifier.js +7 -7
  299. package/lib/util/WeakTupleMap.js +19 -21
  300. package/lib/util/binarySearchBounds.js +5 -12
  301. package/lib/util/chainedImports.js +1 -1
  302. package/lib/util/cleverMerge.js +21 -19
  303. package/lib/util/comparators.js +57 -52
  304. package/lib/util/compileBooleanMatcher.js +3 -6
  305. package/lib/util/conventions.js +10 -13
  306. package/lib/util/createHash.js +9 -6
  307. package/lib/util/deprecation.js +22 -12
  308. package/lib/util/deterministicGrouping.js +19 -26
  309. package/lib/util/findGraphRoots.js +2 -2
  310. package/lib/util/fs.js +31 -31
  311. package/lib/util/hash/md4.js +2 -2
  312. package/lib/util/hash/wasm-hash.js +7 -7
  313. package/lib/util/hash/xxhash64.js +2 -2
  314. package/lib/util/identifier.js +81 -59
  315. package/lib/util/memoize.js +8 -10
  316. package/lib/util/mergeScope.js +6 -9
  317. package/lib/util/nonNumericOnlyHash.js +2 -2
  318. package/lib/util/numberHash.js +1 -6
  319. package/lib/util/objectToMap.js +0 -1
  320. package/lib/util/propertyAccess.js +2 -5
  321. package/lib/util/propertyName.js +1 -3
  322. package/lib/util/registerExternalSerializer.js +1 -1
  323. package/lib/util/runtime.js +103 -113
  324. package/lib/util/semver.js +29 -27
  325. package/lib/util/serialization.js +16 -1
  326. package/lib/util/smartGrouping.js +5 -5
  327. package/lib/util/source.js +1 -1
  328. package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
  329. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
  330. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
  331. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
  332. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
  333. package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
  334. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  335. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  336. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
  337. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
  338. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  339. package/package.json +17 -16
  340. package/schemas/WebpackOptions.check.js +1 -1
  341. package/schemas/WebpackOptions.json +17 -0
  342. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  343. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  344. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  345. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  346. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  347. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  348. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  349. package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
  350. package/types.d.ts +682 -347
@@ -38,17 +38,23 @@ const { intersectRuntime } = require("../util/runtime");
38
38
  const JavascriptGenerator = require("./JavascriptGenerator");
39
39
  const JavascriptParser = require("./JavascriptParser");
40
40
 
41
+ /** @typedef {import("eslint-scope").Scope} Scope */
41
42
  /** @typedef {import("eslint-scope").Variable} Variable */
42
43
  /** @typedef {import("webpack-sources").Source} Source */
44
+ /** @typedef {import("../../declarations/WebpackOptions").Output} OutputOptions */
43
45
  /** @typedef {import("../Chunk")} Chunk */
44
46
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
45
47
  /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
46
48
  /** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
47
49
  /** @typedef {import("../Compiler")} Compiler */
48
50
  /** @typedef {import("../DependencyTemplates")} DependencyTemplates */
51
+ /** @typedef {import("../Entrypoint")} Entrypoint */
49
52
  /** @typedef {import("../Module")} Module */
53
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
50
54
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
51
55
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
56
+ /** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
57
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
52
58
  /** @typedef {import("../util/Hash")} Hash */
53
59
 
54
60
  /**
@@ -59,9 +65,9 @@ const JavascriptParser = require("./JavascriptParser");
59
65
  const chunkHasJs = (chunk, chunkGraph) => {
60
66
  if (chunkGraph.getNumberOfEntryModules(chunk) > 0) return true;
61
67
 
62
- return chunkGraph.getChunkModulesIterableBySourceType(chunk, "javascript")
63
- ? true
64
- : false;
68
+ return Boolean(
69
+ chunkGraph.getChunkModulesIterableBySourceType(chunk, "javascript")
70
+ );
65
71
  };
66
72
 
67
73
  /**
@@ -96,7 +102,7 @@ const printGeneratedCodeForStack = (module, code) => {
96
102
  * @property {ModuleGraph} moduleGraph the module graph
97
103
  * @property {ChunkGraph} chunkGraph the chunk graph
98
104
  * @property {CodeGenerationResults} codeGenerationResults results of code generation
99
- * @property {boolean} strictMode rendering in strict context
105
+ * @property {boolean | undefined} strictMode rendering in strict context
100
106
  */
101
107
 
102
108
  /**
@@ -108,7 +114,7 @@ const printGeneratedCodeForStack = (module, code) => {
108
114
  * @property {ChunkGraph} chunkGraph the chunk graph
109
115
  * @property {CodeGenerationResults} codeGenerationResults results of code generation
110
116
  * @property {string} hash hash to be used for render call
111
- * @property {boolean} strictMode rendering in strict context
117
+ * @property {boolean | undefined} strictMode rendering in strict context
112
118
  */
113
119
 
114
120
  /**
@@ -120,7 +126,7 @@ const printGeneratedCodeForStack = (module, code) => {
120
126
  * @property {ChunkGraph} chunkGraph the chunk graph
121
127
  * @property {CodeGenerationResults} codeGenerationResults results of code generation
122
128
  * @property {InitFragment<ChunkRenderContext>[]} chunkInitFragments init fragments for the chunk
123
- * @property {boolean} strictMode rendering in strict context
129
+ * @property {boolean | undefined} strictMode rendering in strict context
124
130
  */
125
131
 
126
132
  /**
@@ -158,6 +164,8 @@ const compilationHooksMap = new WeakMap();
158
164
 
159
165
  const PLUGIN_NAME = "JavascriptModulesPlugin";
160
166
 
167
+ /** @typedef {{ header: string[], beforeStartup: string[], startup: string[], afterStartup: string[], allowInlineStartup: boolean }} Bootstrap */
168
+
161
169
  class JavascriptModulesPlugin {
162
170
  /**
163
171
  * @param {Compilation} compilation the compilation
@@ -226,34 +234,22 @@ class JavascriptModulesPlugin {
226
234
  const hooks = JavascriptModulesPlugin.getCompilationHooks(compilation);
227
235
  normalModuleFactory.hooks.createParser
228
236
  .for(JAVASCRIPT_MODULE_TYPE_AUTO)
229
- .tap(PLUGIN_NAME, options => {
230
- return new JavascriptParser("auto");
231
- });
237
+ .tap(PLUGIN_NAME, options => new JavascriptParser("auto"));
232
238
  normalModuleFactory.hooks.createParser
233
239
  .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
234
- .tap(PLUGIN_NAME, options => {
235
- return new JavascriptParser("script");
236
- });
240
+ .tap(PLUGIN_NAME, options => new JavascriptParser("script"));
237
241
  normalModuleFactory.hooks.createParser
238
242
  .for(JAVASCRIPT_MODULE_TYPE_ESM)
239
- .tap(PLUGIN_NAME, options => {
240
- return new JavascriptParser("module");
241
- });
243
+ .tap(PLUGIN_NAME, options => new JavascriptParser("module"));
242
244
  normalModuleFactory.hooks.createGenerator
243
245
  .for(JAVASCRIPT_MODULE_TYPE_AUTO)
244
- .tap(PLUGIN_NAME, () => {
245
- return new JavascriptGenerator();
246
- });
246
+ .tap(PLUGIN_NAME, () => new JavascriptGenerator());
247
247
  normalModuleFactory.hooks.createGenerator
248
248
  .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
249
- .tap(PLUGIN_NAME, () => {
250
- return new JavascriptGenerator();
251
- });
249
+ .tap(PLUGIN_NAME, () => new JavascriptGenerator());
252
250
  normalModuleFactory.hooks.createGenerator
253
251
  .for(JAVASCRIPT_MODULE_TYPE_ESM)
254
- .tap(PLUGIN_NAME, () => {
255
- return new JavascriptGenerator();
256
- });
252
+ .tap(PLUGIN_NAME, () => new JavascriptGenerator());
257
253
  compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
258
254
  const {
259
255
  hash,
@@ -435,6 +431,7 @@ class JavascriptModulesPlugin {
435
431
  chunkGraph.hasChunkEntryDependentChunks(chunk)
436
432
  ) {
437
433
  set.add(RuntimeGlobals.onChunksLoaded);
434
+ set.add(RuntimeGlobals.exports);
438
435
  set.add(RuntimeGlobals.require);
439
436
  }
440
437
  }
@@ -459,12 +456,13 @@ class JavascriptModulesPlugin {
459
456
  moduleObject.exports,
460
457
  context.__webpack_require__
461
458
  );
462
- } catch (e) {
463
- e.stack += printGeneratedCodeForStack(
459
+ } catch (err) {
460
+ /** @type {Error} */
461
+ (err).stack += printGeneratedCodeForStack(
464
462
  options.module,
465
463
  /** @type {string} */ (code)
466
464
  );
467
- throw e;
465
+ throw err;
468
466
  }
469
467
  });
470
468
  compilation.hooks.executeModule.tap(PLUGIN_NAME, (options, context) => {
@@ -481,26 +479,32 @@ class JavascriptModulesPlugin {
481
479
  }
482
480
  );
483
481
  try {
482
+ // eslint-disable-next-line no-useless-call
484
483
  fn.call(null, context.__webpack_require__);
485
- } catch (e) {
486
- e.stack += printGeneratedCodeForStack(options.module, code);
487
- throw e;
484
+ } catch (err) {
485
+ /** @type {Error} */
486
+ (err).stack += printGeneratedCodeForStack(options.module, code);
487
+ throw err;
488
488
  }
489
489
  });
490
490
  }
491
491
  );
492
492
  }
493
493
 
494
+ /**
495
+ * @param {Chunk} chunk chunk
496
+ * @param {OutputOptions} outputOptions output options
497
+ * @returns {TemplatePath} used filename template
498
+ */
494
499
  static getChunkFilenameTemplate(chunk, outputOptions) {
495
500
  if (chunk.filenameTemplate) {
496
501
  return chunk.filenameTemplate;
497
502
  } else if (chunk instanceof HotUpdateChunk) {
498
- return outputOptions.hotUpdateChunkFilename;
503
+ return /** @type {TemplatePath} */ (outputOptions.hotUpdateChunkFilename);
499
504
  } else if (chunk.canBeInitial()) {
500
- return outputOptions.filename;
501
- } else {
502
- return outputOptions.chunkFilename;
505
+ return /** @type {TemplatePath} */ (outputOptions.filename);
503
506
  }
507
+ return /** @type {TemplatePath} */ (outputOptions.chunkFilename);
504
508
  }
505
509
 
506
510
  /**
@@ -508,7 +512,7 @@ class JavascriptModulesPlugin {
508
512
  * @param {ChunkRenderContext} renderContext options object
509
513
  * @param {CompilationHooks} hooks hooks
510
514
  * @param {boolean} factory true: renders as factory method, false: pure module content
511
- * @returns {Source} the newly generated source from rendering
515
+ * @returns {Source | null} the newly generated source from rendering
512
516
  */
513
517
  renderModule(module, renderContext, hooks, factory) {
514
518
  const {
@@ -548,7 +552,9 @@ class JavascriptModulesPlugin {
548
552
  const needThisAsExports = runtimeRequirements.has(
549
553
  RuntimeGlobals.thisAsExports
550
554
  );
551
- const needStrict = module.buildInfo.strict && !strictMode;
555
+ const needStrict =
556
+ /** @type {BuildInfo} */
557
+ (module.buildInfo).strict && !strictMode;
552
558
  const cacheEntry = this._moduleFactoryCache.get(
553
559
  moduleSourcePostContent
554
560
  );
@@ -569,19 +575,19 @@ class JavascriptModulesPlugin {
569
575
  args.push(
570
576
  needModule
571
577
  ? module.moduleArgument
572
- : "__unused_webpack_" + module.moduleArgument
578
+ : `__unused_webpack_${module.moduleArgument}`
573
579
  );
574
580
  if (needExports || needRequire)
575
581
  args.push(
576
582
  needExports
577
583
  ? module.exportsArgument
578
- : "__unused_webpack_" + module.exportsArgument
584
+ : `__unused_webpack_${module.exportsArgument}`
579
585
  );
580
586
  if (needRequire) args.push(RuntimeGlobals.require);
581
587
  if (!needThisAsExports && runtimeTemplate.supportsArrowFunction()) {
582
- factorySource.add("/***/ ((" + args.join(", ") + ") => {\n\n");
588
+ factorySource.add(`/***/ ((${args.join(", ")}) => {\n\n`);
583
589
  } else {
584
- factorySource.add("/***/ (function(" + args.join(", ") + ") {\n\n");
590
+ factorySource.add(`/***/ (function(${args.join(", ")}) {\n\n`);
585
591
  }
586
592
  if (needStrict) {
587
593
  factorySource.add('"use strict";\n');
@@ -614,9 +620,9 @@ class JavascriptModulesPlugin {
614
620
  ),
615
621
  "JavascriptModulesPlugin.getCompilationHooks().renderModulePackage"
616
622
  );
617
- } catch (e) {
618
- e.module = module;
619
- throw e;
623
+ } catch (err) {
624
+ err.module = module;
625
+ throw err;
620
626
  }
621
627
  }
622
628
 
@@ -635,7 +641,10 @@ class JavascriptModulesPlugin {
635
641
  const allModules = modules ? Array.from(modules) : [];
636
642
  let strictHeader;
637
643
  let allStrict = renderContext.strictMode;
638
- if (!allStrict && allModules.every(m => m.buildInfo.strict)) {
644
+ if (
645
+ !allStrict &&
646
+ allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict)
647
+ ) {
639
648
  const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
640
649
  strictHeader = strictBailout
641
650
  ? `// runtime can't be in strict mode because ${strictBailout}.\n`
@@ -717,7 +726,7 @@ class JavascriptModulesPlugin {
717
726
  inlinedModules = new Set(chunkGraph.getChunkEntryModulesIterable(chunk));
718
727
  }
719
728
 
720
- let source = new ConcatSource();
729
+ const source = new ConcatSource();
721
730
  let prefix;
722
731
  if (iife) {
723
732
  if (runtimeTemplate.supportsArrowFunction()) {
@@ -730,16 +739,20 @@ class JavascriptModulesPlugin {
730
739
  prefix = "/******/ ";
731
740
  }
732
741
  let allStrict = renderContext.strictMode;
733
- if (!allStrict && allModules.every(m => m.buildInfo.strict)) {
742
+ if (
743
+ !allStrict &&
744
+ allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict)
745
+ ) {
734
746
  const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
735
747
  if (strictBailout) {
736
748
  source.add(
737
- prefix +
738
- `// runtime can't be in strict mode because ${strictBailout}.\n`
749
+ `${
750
+ prefix
751
+ }// runtime can't be in strict mode because ${strictBailout}.\n`
739
752
  );
740
753
  } else {
741
754
  allStrict = true;
742
- source.add(prefix + '"use strict";\n');
755
+ source.add(`${prefix}"use strict";\n`);
743
756
  }
744
757
  }
745
758
 
@@ -766,7 +779,7 @@ class JavascriptModulesPlugin {
766
779
  runtimeRequirements.has(RuntimeGlobals.moduleFactoriesAddOnly) ||
767
780
  runtimeRequirements.has(RuntimeGlobals.require)
768
781
  ) {
769
- source.add(prefix + "var __webpack_modules__ = (");
782
+ source.add(`${prefix}var __webpack_modules__ = (`);
770
783
  source.add(chunkModules || "{}");
771
784
  source.add(");\n");
772
785
  source.add(
@@ -775,7 +788,7 @@ class JavascriptModulesPlugin {
775
788
  }
776
789
 
777
790
  if (bootstrap.header.length > 0) {
778
- const header = Template.asString(bootstrap.header) + "\n";
791
+ const header = `${Template.asString(bootstrap.header)}\n`;
779
792
  source.add(
780
793
  new PrefixSource(
781
794
  prefix,
@@ -809,7 +822,7 @@ class JavascriptModulesPlugin {
809
822
  }
810
823
  if (inlinedModules) {
811
824
  if (bootstrap.beforeStartup.length > 0) {
812
- const beforeStartup = Template.asString(bootstrap.beforeStartup) + "\n";
825
+ const beforeStartup = `${Template.asString(bootstrap.beforeStartup)}\n`;
813
826
  source.add(
814
827
  new PrefixSource(
815
828
  prefix,
@@ -819,9 +832,13 @@ class JavascriptModulesPlugin {
819
832
  )
820
833
  );
821
834
  }
822
- const lastInlinedModule = last(inlinedModules);
835
+ const lastInlinedModule = /** @type {Module} */ (last(inlinedModules));
823
836
  const startupSource = new ConcatSource();
824
- startupSource.add(`var ${RuntimeGlobals.exports} = {};\n`);
837
+
838
+ if (runtimeRequirements.has(RuntimeGlobals.exports)) {
839
+ startupSource.add(`var ${RuntimeGlobals.exports} = {};\n`);
840
+ }
841
+
825
842
  const renamedInlinedModule = this.renameInlineModule(
826
843
  allModules,
827
844
  renderContext,
@@ -836,7 +853,8 @@ class JavascriptModulesPlugin {
836
853
  this.renderModule(m, chunkRenderContext, hooks, false);
837
854
 
838
855
  if (renderedModule) {
839
- const innerStrict = !allStrict && m.buildInfo.strict;
856
+ const innerStrict =
857
+ !allStrict && /** @type {BuildInfo} */ (m.buildInfo).strict;
840
858
  const runtimeRequirements = chunkGraph.getModuleRuntimeRequirements(
841
859
  m,
842
860
  chunk.runtime
@@ -844,7 +862,7 @@ class JavascriptModulesPlugin {
844
862
  const exports = runtimeRequirements.has(RuntimeGlobals.exports);
845
863
  const webpackExports =
846
864
  exports && m.exportsArgument === RuntimeGlobals.exports;
847
- let iife = innerStrict
865
+ const iife = innerStrict
848
866
  ? "it need to be in strict mode."
849
867
  : inlinedModules.size > 1
850
868
  ? // TODO check globals and top-level declarations of other entries and chunk modules
@@ -894,7 +912,7 @@ class JavascriptModulesPlugin {
894
912
  })
895
913
  );
896
914
  if (bootstrap.afterStartup.length > 0) {
897
- const afterStartup = Template.asString(bootstrap.afterStartup) + "\n";
915
+ const afterStartup = `${Template.asString(bootstrap.afterStartup)}\n`;
898
916
  source.add(
899
917
  new PrefixSource(
900
918
  prefix,
@@ -905,9 +923,10 @@ class JavascriptModulesPlugin {
905
923
  );
906
924
  }
907
925
  } else {
908
- const lastEntryModule = last(
909
- chunkGraph.getChunkEntryModulesIterable(chunk)
910
- );
926
+ const lastEntryModule =
927
+ /** @type {Module} */
928
+ (last(chunkGraph.getChunkEntryModulesIterable(chunk)));
929
+ /** @type {function(string[], string): Source} */
911
930
  const toSource = useSourceMap
912
931
  ? (content, name) =>
913
932
  new OriginalSource(Template.asString(content), name)
@@ -987,7 +1006,8 @@ class JavascriptModulesPlugin {
987
1006
  */
988
1007
  updateHashWithBootstrap(hash, renderContext, hooks) {
989
1008
  const bootstrap = this.renderBootstrap(renderContext, hooks);
990
- for (const key of Object.keys(bootstrap)) {
1009
+ for (const _k of Object.keys(bootstrap)) {
1010
+ const key = /** @type {keyof Bootstrap} */ (_k);
991
1011
  hash.update(key);
992
1012
  if (Array.isArray(bootstrap[key])) {
993
1013
  for (const line of bootstrap[key]) {
@@ -1002,7 +1022,7 @@ class JavascriptModulesPlugin {
1002
1022
  /**
1003
1023
  * @param {RenderBootstrapContext} renderContext options object
1004
1024
  * @param {CompilationHooks} hooks hooks
1005
- * @returns {{ header: string[], beforeStartup: string[], startup: string[], afterStartup: string[], allowInlineStartup: boolean }} the generated source of the bootstrap code
1025
+ * @returns {Bootstrap} the generated source of the bootstrap code
1006
1026
  */
1007
1027
  renderBootstrap(renderContext, hooks) {
1008
1028
  const {
@@ -1042,7 +1062,7 @@ class JavascriptModulesPlugin {
1042
1062
  allowInlineStartup: true
1043
1063
  };
1044
1064
 
1045
- let { header: buf, startup, beforeStartup, afterStartup } = result;
1065
+ const { header: buf, startup, beforeStartup, afterStartup } = result;
1046
1066
 
1047
1067
  if (result.allowInlineStartup && moduleFactories) {
1048
1068
  startup.push(
@@ -1112,7 +1132,9 @@ class JavascriptModulesPlugin {
1112
1132
  entryModule,
1113
1133
  entrypoint
1114
1134
  ] of chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)) {
1115
- const chunks = entrypoint.chunks.filter(c => c !== chunk);
1135
+ const chunks =
1136
+ /** @type {Entrypoint} */
1137
+ (entrypoint).chunks.filter(c => c !== chunk);
1116
1138
  if (result.allowInlineStartup && chunks.length > 0) {
1117
1139
  buf2.push(
1118
1140
  "// This entry module depends on other loaded chunks and execution need to be delayed"
@@ -1409,7 +1431,9 @@ class JavascriptModulesPlugin {
1409
1431
  ) {
1410
1432
  const { runtimeTemplate } = renderContext;
1411
1433
 
1412
- /** @type {Map<Module, { source: Source, ast: any, variables: Set<Variable>, usedInNonInlined: Set<Variable>}>} */
1434
+ /** @typedef {{ source: Source, ast: any, variables: Set<Variable>, usedInNonInlined: Set<Variable>}} InlinedModulesInfo */
1435
+
1436
+ /** @type {Map<Module, InlinedModulesInfo>} */
1413
1437
  const inlinedModulesToInfo = new Map();
1414
1438
  /** @type {Set<string>} */
1415
1439
  const nonInlinedModuleThroughIdentifiers = new Set();
@@ -1422,7 +1446,7 @@ class JavascriptModulesPlugin {
1422
1446
  m,
1423
1447
  chunkRenderContext,
1424
1448
  hooks,
1425
- isInlinedModule ? false : true
1449
+ !isInlinedModule
1426
1450
  );
1427
1451
 
1428
1452
  if (!moduleSource) continue;
@@ -1438,7 +1462,7 @@ class JavascriptModulesPlugin {
1438
1462
  ignoreEval: true
1439
1463
  });
1440
1464
 
1441
- const globalScope = scopeManager.acquire(ast);
1465
+ const globalScope = /** @type {Scope} */ (scopeManager.acquire(ast));
1442
1466
  if (inlinedModules && inlinedModules.has(m)) {
1443
1467
  const moduleScope = globalScope.childScopes[0];
1444
1468
  inlinedModulesToInfo.set(m, {
@@ -1471,7 +1495,10 @@ class JavascriptModulesPlugin {
1471
1495
  }
1472
1496
 
1473
1497
  const usedNames = new Set(
1474
- Array.from(inlinedModulesToInfo.get(m).variables).map(v => v.name)
1498
+ Array.from(
1499
+ /** @type {InlinedModulesInfo} */
1500
+ (inlinedModulesToInfo.get(m)).variables
1501
+ ).map(v => v.name)
1475
1502
  );
1476
1503
 
1477
1504
  for (const variable of usedInNonInlined) {
@@ -1487,7 +1514,7 @@ class JavascriptModulesPlugin {
1487
1514
  );
1488
1515
  usedNames.add(newName);
1489
1516
  for (const identifier of allIdentifiers) {
1490
- const r = identifier.range;
1517
+ const r = /** @type {Range} */ (identifier.range);
1491
1518
  const path = getPathInAst(ast, identifier);
1492
1519
  if (path && path.length > 1) {
1493
1520
  const maybeProperty =
@@ -1525,7 +1552,7 @@ class JavascriptModulesPlugin {
1525
1552
  );
1526
1553
  const splittedInfo = extraInfo.split("/");
1527
1554
  while (splittedInfo.length) {
1528
- name = splittedInfo.pop() + (name ? "_" + name : "");
1555
+ name = splittedInfo.pop() + (name ? `_${name}` : "");
1529
1556
  const nameIdent = Template.toIdentifier(name);
1530
1557
  if (!usedName.has(nameIdent)) {
1531
1558
  return nameIdent;