webpack 5.99.8 → 5.100.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 (314) hide show
  1. package/README.md +0 -3
  2. package/bin/webpack.js +8 -2
  3. package/hot/log.js +15 -15
  4. package/hot/poll.js +1 -0
  5. package/lib/APIPlugin.js +3 -3
  6. package/lib/AbstractMethodError.js +1 -0
  7. package/lib/AutomaticPrefetchPlugin.js +1 -0
  8. package/lib/BannerPlugin.js +1 -1
  9. package/lib/CacheFacade.js +2 -1
  10. package/lib/CaseSensitiveModulesWarning.js +4 -4
  11. package/lib/Chunk.js +6 -6
  12. package/lib/ChunkGraph.js +37 -32
  13. package/lib/ChunkGroup.js +17 -10
  14. package/lib/ChunkTemplate.js +1 -1
  15. package/lib/CleanPlugin.js +94 -17
  16. package/lib/CodeGenerationResults.js +1 -1
  17. package/lib/CompatibilityPlugin.js +5 -2
  18. package/lib/Compilation.js +77 -71
  19. package/lib/Compiler.js +46 -16
  20. package/lib/ConcatenationScope.js +15 -6
  21. package/lib/ConstPlugin.js +65 -45
  22. package/lib/ContextModule.js +16 -12
  23. package/lib/ContextModuleFactory.js +4 -3
  24. package/lib/ContextReplacementPlugin.js +4 -2
  25. package/lib/CssModule.js +2 -3
  26. package/lib/DefinePlugin.js +111 -3
  27. package/lib/DelegatedModuleFactoryPlugin.js +18 -18
  28. package/lib/Dependency.js +16 -12
  29. package/lib/DependencyTemplate.js +1 -0
  30. package/lib/DllEntryPlugin.js +3 -1
  31. package/lib/DllPlugin.js +4 -3
  32. package/lib/DllReferencePlugin.js +2 -2
  33. package/lib/DynamicEntryPlugin.js +1 -1
  34. package/lib/EntryOptionPlugin.js +5 -0
  35. package/lib/ErrorHelpers.js +4 -4
  36. package/lib/EvalDevToolModulePlugin.js +3 -3
  37. package/lib/EvalSourceMapDevToolPlugin.js +7 -7
  38. package/lib/ExportsInfo.js +48 -39
  39. package/lib/ExternalModule.js +15 -11
  40. package/lib/ExternalModuleFactoryPlugin.js +5 -2
  41. package/lib/FileSystemInfo.js +51 -38
  42. package/lib/FlagDependencyExportsPlugin.js +14 -7
  43. package/lib/FlagDependencyUsagePlugin.js +1 -1
  44. package/lib/Generator.js +14 -1
  45. package/lib/HookWebpackError.js +1 -0
  46. package/lib/HotModuleReplacementPlugin.js +77 -50
  47. package/lib/IgnorePlugin.js +1 -1
  48. package/lib/InvalidDependenciesModuleWarning.js +1 -1
  49. package/lib/JavascriptMetaInfoPlugin.js +0 -1
  50. package/lib/LibManifestPlugin.js +4 -2
  51. package/lib/LoaderOptionsPlugin.js +6 -4
  52. package/lib/MainTemplate.js +2 -2
  53. package/lib/Module.js +21 -6
  54. package/lib/ModuleFactory.js +1 -0
  55. package/lib/ModuleGraph.js +24 -2
  56. package/lib/ModuleGraphConnection.js +5 -5
  57. package/lib/ModuleInfoHeaderPlugin.js +2 -1
  58. package/lib/ModuleParseError.js +1 -0
  59. package/lib/ModuleSourceTypesConstants.js +12 -12
  60. package/lib/ModuleTemplate.js +1 -1
  61. package/lib/ModuleTypeConstants.js +21 -21
  62. package/lib/MultiCompiler.js +6 -6
  63. package/lib/NormalModule.js +61 -56
  64. package/lib/NormalModuleFactory.js +52 -37
  65. package/lib/NormalModuleReplacementPlugin.js +1 -1
  66. package/lib/NullFactory.js +1 -0
  67. package/lib/OptimizationStages.js +1 -1
  68. package/lib/Parser.js +1 -0
  69. package/lib/ProgressPlugin.js +12 -5
  70. package/lib/ProvidePlugin.js +5 -1
  71. package/lib/RecordIdsPlugin.js +3 -3
  72. package/lib/RuntimeGlobals.js +175 -155
  73. package/lib/RuntimeModule.js +1 -0
  74. package/lib/RuntimePlugin.js +34 -8
  75. package/lib/RuntimeTemplate.js +111 -11
  76. package/lib/SourceMapDevToolModuleOptionsPlugin.js +15 -25
  77. package/lib/SourceMapDevToolPlugin.js +19 -17
  78. package/lib/Template.js +2 -2
  79. package/lib/TemplatedPathPlugin.js +1 -1
  80. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  81. package/lib/WatchIgnorePlugin.js +4 -3
  82. package/lib/WebpackIsIncludedPlugin.js +2 -1
  83. package/lib/WebpackOptionsApply.js +115 -27
  84. package/lib/asset/AssetGenerator.js +26 -21
  85. package/lib/asset/AssetModulesPlugin.js +19 -17
  86. package/lib/asset/AssetSourceGenerator.js +11 -9
  87. package/lib/asset/RawDataUrlModule.js +4 -2
  88. package/lib/async-modules/AwaitDependenciesInitFragment.js +1 -1
  89. package/lib/buildChunkGraph.js +6 -3
  90. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  91. package/lib/cache/IdleFileCachePlugin.js +7 -4
  92. package/lib/cache/MemoryCachePlugin.js +1 -0
  93. package/lib/cache/MemoryWithGcCachePlugin.js +1 -0
  94. package/lib/cache/PackFileCacheStrategy.js +26 -20
  95. package/lib/cache/ResolverCachePlugin.js +16 -8
  96. package/lib/cli.js +15 -10
  97. package/lib/config/browserslistTargetHandler.js +3 -3
  98. package/lib/config/defaults.js +25 -17
  99. package/lib/config/normalization.js +2 -1
  100. package/lib/config/target.js +6 -5
  101. package/lib/container/ContainerPlugin.js +1 -1
  102. package/lib/container/ContainerReferencePlugin.js +1 -1
  103. package/lib/container/FallbackModule.js +2 -1
  104. package/lib/container/HoistContainerReferencesPlugin.js +1 -1
  105. package/lib/container/ModuleFederationPlugin.js +2 -2
  106. package/lib/container/RemoteModule.js +1 -1
  107. package/lib/css/CssGenerator.js +9 -6
  108. package/lib/css/CssModulesPlugin.js +44 -31
  109. package/lib/css/CssParser.js +6 -4
  110. package/lib/css/walkCssTokens.js +33 -37
  111. package/lib/debug/ProfilingPlugin.js +6 -6
  112. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +8 -8
  113. package/lib/dependencies/AMDPlugin.js +12 -8
  114. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -26
  115. package/lib/dependencies/CachedConstDependency.js +1 -5
  116. package/lib/dependencies/CommonJsExportRequireDependency.js +6 -4
  117. package/lib/dependencies/CommonJsExportsParserPlugin.js +22 -25
  118. package/lib/dependencies/CommonJsFullRequireDependency.js +1 -9
  119. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -114
  120. package/lib/dependencies/CommonJsPlugin.js +15 -16
  121. package/lib/dependencies/ContextDependencyHelpers.js +2 -1
  122. package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -0
  123. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  124. package/lib/dependencies/CssIcssExportDependency.js +1 -1
  125. package/lib/dependencies/CssLocalIdentifierDependency.js +2 -2
  126. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
  127. package/lib/dependencies/CssUrlDependency.js +1 -1
  128. package/lib/dependencies/DynamicExports.js +9 -9
  129. package/lib/dependencies/ExportsInfoDependency.js +1 -1
  130. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +122 -101
  131. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  132. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +95 -19
  133. package/lib/dependencies/HarmonyExportInitFragment.js +1 -1
  134. package/lib/dependencies/HarmonyImportDependency.js +11 -5
  135. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +238 -162
  136. package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -1
  137. package/lib/dependencies/HarmonyImportSpecifierDependency.js +20 -9
  138. package/lib/dependencies/HarmonyModulesPlugin.js +23 -12
  139. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -0
  140. package/lib/dependencies/ImportMetaContextPlugin.js +2 -1
  141. package/lib/dependencies/ImportMetaPlugin.js +2 -2
  142. package/lib/dependencies/ImportParserPlugin.js +40 -9
  143. package/lib/dependencies/ImportPlugin.js +3 -1
  144. package/lib/dependencies/LoaderPlugin.js +1 -0
  145. package/lib/dependencies/ModuleDependency.js +1 -1
  146. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  147. package/lib/dependencies/RequireContextPlugin.js +3 -1
  148. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +3 -0
  149. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  150. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  151. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  152. package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
  153. package/lib/dependencies/SystemPlugin.js +1 -1
  154. package/lib/dependencies/URLContextDependency.js +65 -0
  155. package/lib/dependencies/URLDependency.js +1 -1
  156. package/lib/dependencies/URLPlugin.js +17 -157
  157. package/lib/dependencies/WorkerPlugin.js +23 -10
  158. package/lib/dependencies/processExportInfo.js +2 -1
  159. package/lib/esm/ModuleChunkFormatPlugin.js +269 -185
  160. package/lib/esm/ModuleChunkLoadingPlugin.js +39 -1
  161. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +73 -6
  162. package/lib/hmr/HotModuleReplacement.runtime.js +0 -1
  163. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  164. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  165. package/lib/hmr/LazyCompilationPlugin.js +4 -2
  166. package/lib/hmr/lazyCompilationBackend.js +4 -2
  167. package/lib/ids/ChunkModuleIdRangePlugin.js +6 -3
  168. package/lib/ids/DeterministicChunkIdsPlugin.js +30 -35
  169. package/lib/ids/DeterministicModuleIdsPlugin.js +4 -3
  170. package/lib/ids/HashedModuleIdsPlugin.js +5 -4
  171. package/lib/ids/IdHelpers.js +21 -17
  172. package/lib/ids/NamedChunkIdsPlugin.js +5 -5
  173. package/lib/ids/NamedModuleIdsPlugin.js +4 -4
  174. package/lib/ids/NaturalChunkIdsPlugin.js +2 -1
  175. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  176. package/lib/ids/OccurrenceChunkIdsPlugin.js +3 -2
  177. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  178. package/lib/ids/SyncModuleIdsPlugin.js +1 -1
  179. package/lib/index.js +13 -3
  180. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +113 -119
  181. package/lib/javascript/BasicEvaluatedExpression.js +2 -1
  182. package/lib/javascript/ChunkHelpers.js +1 -0
  183. package/lib/javascript/CommonJsChunkFormatPlugin.js +121 -136
  184. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -3
  185. package/lib/javascript/JavascriptGenerator.js +14 -2
  186. package/lib/javascript/JavascriptModulesPlugin.js +68 -27
  187. package/lib/javascript/JavascriptParser.js +136 -81
  188. package/lib/javascript/JavascriptParserHelpers.js +41 -41
  189. package/lib/javascript/StartupHelpers.js +17 -17
  190. package/lib/json/JsonGenerator.js +4 -2
  191. package/lib/json/JsonModulesPlugin.js +2 -2
  192. package/lib/json/JsonParser.js +1 -1
  193. package/lib/library/AbstractLibraryPlugin.js +6 -2
  194. package/lib/library/AssignLibraryPlugin.js +21 -6
  195. package/lib/library/EnableLibraryPlugin.js +23 -3
  196. package/lib/library/ModuleLibraryPlugin.js +4 -1
  197. package/lib/library/UmdLibraryPlugin.js +15 -6
  198. package/lib/logging/createConsoleLogger.js +3 -3
  199. package/lib/logging/runtime.js +9 -9
  200. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +4 -22
  201. package/lib/node/RequireChunkLoadingRuntimeModule.js +4 -22
  202. package/lib/node/nodeConsole.js +4 -2
  203. package/lib/optimize/AggressiveMergingPlugin.js +45 -46
  204. package/lib/optimize/AggressiveSplittingPlugin.js +13 -12
  205. package/lib/optimize/ConcatenatedModule.js +227 -57
  206. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  207. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -1
  208. package/lib/optimize/InnerGraph.js +115 -112
  209. package/lib/optimize/InnerGraphPlugin.js +2 -2
  210. package/lib/optimize/LimitChunkCountPlugin.js +4 -2
  211. package/lib/optimize/MangleExportsPlugin.js +4 -3
  212. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  213. package/lib/optimize/MinChunkSizePlugin.js +6 -3
  214. package/lib/optimize/ModuleConcatenationPlugin.js +31 -22
  215. package/lib/optimize/RealContentHashPlugin.js +26 -20
  216. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  217. package/lib/optimize/RemoveParentModulesPlugin.js +1 -0
  218. package/lib/optimize/SideEffectsFlagPlugin.js +6 -3
  219. package/lib/optimize/SplitChunksPlugin.js +16 -13
  220. package/lib/rules/BasicEffectRulePlugin.js +4 -2
  221. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  222. package/lib/rules/ObjectMatcherRulePlugin.js +3 -1
  223. package/lib/rules/RuleSetCompiler.js +7 -4
  224. package/lib/rules/UseEffectRulePlugin.js +3 -1
  225. package/lib/runtime/AsyncModuleRuntimeModule.js +64 -9
  226. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  227. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +214 -0
  228. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  229. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +8 -7
  230. package/lib/schemes/DataUriPlugin.js +3 -1
  231. package/lib/schemes/FileUriPlugin.js +1 -1
  232. package/lib/schemes/HttpUriPlugin.js +27 -19
  233. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  234. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  235. package/lib/serialization/BinaryMiddleware.js +5 -4
  236. package/lib/serialization/FileMiddleware.js +7 -4
  237. package/lib/serialization/ObjectMiddleware.js +14 -8
  238. package/lib/serialization/Serializer.js +5 -3
  239. package/lib/serialization/SerializerMiddleware.js +2 -0
  240. package/lib/sharing/ConsumeSharedModule.js +1 -1
  241. package/lib/sharing/ConsumeSharedPlugin.js +3 -3
  242. package/lib/sharing/ConsumeSharedRuntimeModule.js +2 -2
  243. package/lib/sharing/ProvideSharedModule.js +1 -1
  244. package/lib/sharing/ProvideSharedPlugin.js +6 -3
  245. package/lib/sharing/SharePlugin.js +2 -1
  246. package/lib/sharing/ShareRuntimeModule.js +3 -5
  247. package/lib/sharing/utils.js +34 -34
  248. package/lib/stats/DefaultStatsFactoryPlugin.js +49 -46
  249. package/lib/stats/DefaultStatsPresetPlugin.js +4 -2
  250. package/lib/stats/DefaultStatsPrinterPlugin.js +28 -22
  251. package/lib/stats/StatsFactory.js +4 -2
  252. package/lib/stats/StatsPrinter.js +3 -2
  253. package/lib/url/URLParserPlugin.js +266 -0
  254. package/lib/util/ArrayQueue.js +1 -1
  255. package/lib/util/AsyncQueue.js +1 -1
  256. package/lib/util/Hash.js +2 -0
  257. package/lib/util/IterableHelpers.js +1 -1
  258. package/lib/util/LazyBucketSortedSet.js +2 -1
  259. package/lib/util/LazySet.js +11 -6
  260. package/lib/util/ParallelismFactorCalculator.js +1 -1
  261. package/lib/util/SetHelpers.js +3 -3
  262. package/lib/util/SortableSet.js +2 -2
  263. package/lib/util/StackedCacheMap.js +3 -1
  264. package/lib/util/StackedMap.js +2 -2
  265. package/lib/util/StringXor.js +1 -0
  266. package/lib/util/TupleSet.js +1 -0
  267. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  268. package/lib/util/cleverMerge.js +12 -8
  269. package/lib/util/comparators.js +154 -127
  270. package/lib/util/compileBooleanMatcher.js +8 -3
  271. package/lib/util/concatenate.js +8 -7
  272. package/lib/util/conventions.js +72 -73
  273. package/lib/util/create-schema-validation.js +2 -1
  274. package/lib/util/createHash.js +10 -4
  275. package/lib/util/deprecation.js +69 -66
  276. package/lib/util/deterministicGrouping.js +4 -2
  277. package/lib/util/extractUrlAndGlobal.js +1 -1
  278. package/lib/util/findGraphRoots.js +2 -2
  279. package/lib/util/fs.js +30 -23
  280. package/lib/util/hash/md4.js +2 -2
  281. package/lib/util/hash/wasm-hash.js +4 -2
  282. package/lib/util/identifier.js +13 -12
  283. package/lib/util/internalSerializables.js +2 -0
  284. package/lib/util/magicComment.js +5 -5
  285. package/lib/util/processAsyncTree.js +1 -1
  286. package/lib/util/propertyAccess.js +1 -1
  287. package/lib/util/propertyName.js +1 -1
  288. package/lib/util/registerExternalSerializer.js +1 -2
  289. package/lib/util/removeBOM.js +1 -1
  290. package/lib/util/runtime.js +29 -21
  291. package/lib/util/semver.js +1 -1
  292. package/lib/util/serialization.js +3 -0
  293. package/lib/util/source.js +3 -2
  294. package/lib/validateSchema.js +1 -0
  295. package/lib/wasm/EnableWasmLoadingPlugin.js +6 -3
  296. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +4 -1
  297. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +46 -49
  298. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +2 -2
  299. package/lib/wasm-sync/WebAssemblyGenerator.js +2 -3
  300. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +3 -2
  301. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +3 -0
  302. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  303. package/lib/web/JsonpChunkLoadingRuntimeModule.js +4 -22
  304. package/lib/webpack.js +4 -5
  305. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +1 -0
  306. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -24
  307. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  308. package/package.json +121 -114
  309. package/schemas/WebpackOptions.check.js +1 -1
  310. package/schemas/WebpackOptions.json +17 -0
  311. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  312. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  313. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  314. package/types.d.ts +1261 -366
@@ -5,15 +5,15 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const eslintScope = require("eslint-scope");
9
- const { SyncWaterfallHook, SyncHook, SyncBailHook } = require("tapable");
10
8
  const vm = require("vm");
9
+ const eslintScope = require("eslint-scope");
10
+ const { SyncBailHook, SyncHook, SyncWaterfallHook } = require("tapable");
11
11
  const {
12
+ CachedSource,
12
13
  ConcatSource,
13
14
  OriginalSource,
14
15
  PrefixSource,
15
16
  RawSource,
16
- CachedSource,
17
17
  ReplaceSource
18
18
  } = require("webpack-sources");
19
19
  const Compilation = require("../Compilation");
@@ -33,11 +33,11 @@ const { last, someInIterable } = require("../util/IterableHelpers");
33
33
  const StringXor = require("../util/StringXor");
34
34
  const { compareModulesByIdOrIdentifier } = require("../util/comparators");
35
35
  const {
36
- getPathInAst,
37
- getAllReferences,
38
36
  RESERVED_NAMES,
39
- findNewName,
40
37
  addScopeSymbols,
38
+ findNewName,
39
+ getAllReferences,
40
+ getPathInAst,
41
41
  getUsedNamesInScopeInfo
42
42
  } = require("../util/concatenate");
43
43
  const createHash = require("../util/createHash");
@@ -95,8 +95,9 @@ const chunkHasRuntimeOrJs = (chunk, chunkGraph) => {
95
95
  chunk,
96
96
  WEBPACK_MODULE_TYPE_RUNTIME
97
97
  )
98
- )
98
+ ) {
99
99
  return true;
100
+ }
100
101
 
101
102
  return Boolean(
102
103
  chunkGraph.getChunkModulesIterableBySourceType(chunk, "javascript")
@@ -116,10 +117,10 @@ const printGeneratedCodeForStack = (module, code) => {
116
117
  /**
117
118
  * @param {string} line the line
118
119
  * @param {number} i the index
119
- * @param {string[]} lines the lines
120
+ * @param {string[]} _lines the lines
120
121
  * @returns {string} the line with line number
121
122
  */
122
- (line, i, lines) => {
123
+ (line, i, _lines) => {
123
124
  const iStr = `${i + 1}`;
124
125
  return `${" ".repeat(n - iStr.length)}${iStr} | ${line}`;
125
126
  }
@@ -594,8 +595,9 @@ class JavascriptModulesPlugin {
594
595
  if (codeGenResult.data !== undefined) {
595
596
  const chunkInitFragments = codeGenResult.data.get("chunkInitFragments");
596
597
  if (chunkInitFragments) {
597
- for (const i of chunkInitFragments)
598
+ for (const i of chunkInitFragments) {
598
599
  renderContext.chunkInitFragments.push(i);
600
+ }
599
601
  }
600
602
  }
601
603
  const moduleSourcePostContent = tryRunOrWebpackError(
@@ -636,18 +638,20 @@ class JavascriptModulesPlugin {
636
638
  } else {
637
639
  const factorySource = new ConcatSource();
638
640
  const args = [];
639
- if (needExports || needRequire || needModule)
641
+ if (needExports || needRequire || needModule) {
640
642
  args.push(
641
643
  needModule
642
644
  ? module.moduleArgument
643
645
  : `__unused_webpack_${module.moduleArgument}`
644
646
  );
645
- if (needExports || needRequire)
647
+ }
648
+ if (needExports || needRequire) {
646
649
  args.push(
647
650
  needExports
648
651
  ? module.exportsArgument
649
652
  : `__unused_webpack_${module.exportsArgument}`
650
653
  );
654
+ }
651
655
  if (needRequire) args.push(RuntimeGlobals.require);
652
656
  if (!needThisAsExports && runtimeTemplate.supportsArrowFunction()) {
653
657
  factorySource.add(`/***/ ((${args.join(", ")}) => {\n\n`);
@@ -704,7 +708,7 @@ class JavascriptModulesPlugin {
704
708
  "javascript",
705
709
  compareModulesByIdOrIdentifier(chunkGraph)
706
710
  );
707
- const allModules = modules ? Array.from(modules) : [];
711
+ const allModules = modules ? [...modules] : [];
708
712
  let strictHeader;
709
713
  let allStrict = renderContext.strictMode;
710
714
  if (
@@ -777,13 +781,14 @@ class JavascriptModulesPlugin {
777
781
  const bootstrap = this.renderBootstrap(renderContext, hooks);
778
782
  const useSourceMap = hooks.useSourceMap.call(chunk, renderContext);
779
783
 
780
- const allModules = Array.from(
781
- chunkGraph.getOrderedChunkModulesIterableBySourceType(
784
+ /** @type {Module[]} */
785
+ const allModules = [
786
+ ...(chunkGraph.getOrderedChunkModulesIterableBySourceType(
782
787
  chunk,
783
788
  "javascript",
784
789
  compareModulesByIdOrIdentifier(chunkGraph)
785
- ) || []
786
- );
790
+ ) || [])
791
+ ];
787
792
 
788
793
  const hasEntryModules = chunkGraph.getNumberOfEntryModules(chunk) > 0;
789
794
  /** @type {Set<Module> | undefined} */
@@ -964,12 +969,13 @@ class JavascriptModulesPlugin {
964
969
  footer = "\n";
965
970
  }
966
971
  if (exports) {
967
- if (m !== lastInlinedModule)
972
+ if (m !== lastInlinedModule) {
968
973
  startupSource.add(`var ${m.exportsArgument} = {};\n`);
969
- else if (m.exportsArgument !== RuntimeGlobals.exports)
974
+ } else if (m.exportsArgument !== RuntimeGlobals.exports) {
970
975
  startupSource.add(
971
976
  `var ${m.exportsArgument} = ${RuntimeGlobals.exports};\n`
972
977
  );
978
+ }
973
979
  }
974
980
  startupSource.add(renderedModule);
975
981
  startupSource.add(footer);
@@ -1013,7 +1019,7 @@ class JavascriptModulesPlugin {
1013
1019
  toSource(bootstrap.beforeStartup, "webpack/before-startup"),
1014
1020
  "\n",
1015
1021
  hooks.renderStartup.call(
1016
- toSource(bootstrap.startup.concat(""), "webpack/startup"),
1022
+ toSource([...bootstrap.startup, ""], "webpack/startup"),
1017
1023
  lastEntryModule,
1018
1024
  {
1019
1025
  ...renderContext,
@@ -1162,6 +1168,16 @@ class JavascriptModulesPlugin {
1162
1168
  buf.push("");
1163
1169
  }
1164
1170
 
1171
+ if (runtimeRequirements.has(RuntimeGlobals.makeDeferredNamespaceObject)) {
1172
+ // in order to optimize of DeferredNamespaceObject, we remove all proxy handlers after the module initialize
1173
+ // (see MakeDeferredNamespaceObjectRuntimeModule)
1174
+ // This requires all deferred imports to a module can get the module export object before the module
1175
+ // is evaluated.
1176
+ buf.push("// The deferred module cache");
1177
+ buf.push("var __webpack_module_deferred_exports__ = {};");
1178
+ buf.push("");
1179
+ }
1180
+
1165
1181
  if (useRequire) {
1166
1182
  buf.push("// The require function");
1167
1183
  buf.push(`function ${RuntimeGlobals.require}(moduleId) {`);
@@ -1431,6 +1447,9 @@ class JavascriptModulesPlugin {
1431
1447
  const needModuleLoaded = runtimeRequirements.has(
1432
1448
  RuntimeGlobals.moduleLoaded
1433
1449
  );
1450
+ const needModuleDefer = runtimeRequirements.has(
1451
+ RuntimeGlobals.makeDeferredNamespaceObject
1452
+ );
1434
1453
  const content = Template.asString([
1435
1454
  "// Check if module is in cache",
1436
1455
  "var cachedModule = __webpack_module_cache__[moduleId];",
@@ -1447,7 +1466,9 @@ class JavascriptModulesPlugin {
1447
1466
  Template.indent([
1448
1467
  needModuleId ? "id: moduleId," : "// no module.id needed",
1449
1468
  needModuleLoaded ? "loaded: false," : "// no module.loaded needed",
1450
- "exports: {}"
1469
+ needModuleDefer
1470
+ ? "exports: __webpack_module_deferred_exports__[moduleId] || {}"
1471
+ : "exports: {}"
1451
1472
  ]),
1452
1473
  "};",
1453
1474
  "",
@@ -1456,7 +1477,13 @@ class JavascriptModulesPlugin {
1456
1477
  "// Execute the module function",
1457
1478
  "var threw = true;",
1458
1479
  "try {",
1459
- Template.indent([moduleExecution, "threw = false;"]),
1480
+ Template.indent([
1481
+ moduleExecution,
1482
+ "threw = false;",
1483
+ ...(needModuleDefer
1484
+ ? ["delete __webpack_module_deferred_exports__[moduleId];"]
1485
+ : [])
1486
+ ]),
1460
1487
  "} finally {",
1461
1488
  Template.indent([
1462
1489
  "if(threw) delete __webpack_module_cache__[moduleId];"
@@ -1467,14 +1494,27 @@ class JavascriptModulesPlugin {
1467
1494
  ? Template.asString([
1468
1495
  "// Execute the module function",
1469
1496
  "try {",
1470
- Template.indent(moduleExecution),
1497
+ Template.indent(
1498
+ needModuleDefer
1499
+ ? [
1500
+ moduleExecution,
1501
+ "delete __webpack_module_deferred_exports__[moduleId];"
1502
+ ]
1503
+ : moduleExecution
1504
+ ),
1471
1505
  "} catch(e) {",
1472
1506
  Template.indent(["module.error = e;", "throw e;"]),
1473
1507
  "}"
1474
1508
  ])
1475
1509
  : Template.asString([
1476
1510
  "// Execute the module function",
1477
- moduleExecution
1511
+ moduleExecution,
1512
+ ...(needModuleDefer
1513
+ ? [
1514
+ "// delete __webpack_module_deferred_exports__[module];",
1515
+ "// skipped because strictModuleErrorHandling is not enabled."
1516
+ ]
1517
+ : [])
1478
1518
  ]),
1479
1519
  needModuleLoaded
1480
1520
  ? Template.asString([
@@ -1619,9 +1659,10 @@ class JavascriptModulesPlugin {
1619
1659
 
1620
1660
  if (allUsedNames.has(name) || usedNames.has(name)) {
1621
1661
  const references = getAllReferences(variable);
1622
- const allIdentifiers = new Set(
1623
- references.map(r => r.identifier).concat(variable.identifiers)
1624
- );
1662
+ const allIdentifiers = new Set([
1663
+ ...references.map(r => r.identifier),
1664
+ ...variable.identifiers
1665
+ ]);
1625
1666
  for (const ref of references) {
1626
1667
  addScopeSymbols(
1627
1668
  ref.from,