webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -13,28 +13,31 @@ const {
13
13
  const { getTrimmedIdsAndRange } = require("../util/chainedImports");
14
14
  const makeSerializable = require("../util/makeSerializable");
15
15
  const propertyAccess = require("../util/propertyAccess");
16
+ const traverseDestructuringAssignmentProperties = require("../util/traverseDestructuringAssignmentProperties");
16
17
  const HarmonyImportDependency = require("./HarmonyImportDependency");
18
+ const { ImportPhaseUtils } = require("./ImportPhase");
17
19
 
18
20
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
19
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
20
- /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
21
21
  /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
22
- /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
23
- /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
22
+ /** @typedef {import("../Dependency").RawReferencedExports} RawReferencedExports */
23
+ /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
24
24
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
25
25
  /** @typedef {import("../Module")} Module */
26
26
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
27
27
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
28
- /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
29
28
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
30
29
  /** @typedef {import("../WebpackError")} WebpackError */
31
- /** @typedef {import("../javascript/JavascriptParser").DestructuringAssignmentProperty} DestructuringAssignmentProperty */
30
+ /** @typedef {import("../javascript/JavascriptParser").DestructuringAssignmentProperties} DestructuringAssignmentProperties */
32
31
  /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
33
32
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
33
+ /** @typedef {import("../optimize/InnerGraph").UsedByExports} UsedByExports */
34
34
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
35
35
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
36
- /** @typedef {import("../util/Hash")} Hash */
37
36
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
37
+ /** @typedef {import("../util/chainedImports").IdRanges} IdRanges */
38
+ /** @typedef {import("./HarmonyImportDependency").ExportPresenceMode} ExportPresenceMode */
39
+ /** @typedef {HarmonyImportDependency.Ids} Ids */
40
+ /** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
38
41
 
39
42
  const idsSymbol = Symbol("HarmonyImportSpecifierDependency.ids");
40
43
 
@@ -44,12 +47,13 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
44
47
  /**
45
48
  * @param {string} request request
46
49
  * @param {number} sourceOrder source order
47
- * @param {string[]} ids ids
50
+ * @param {Ids} ids ids
48
51
  * @param {string} name name
49
52
  * @param {Range} range range
50
- * @param {TODO} exportPresenceMode export presence mode
53
+ * @param {ExportPresenceMode} exportPresenceMode export presence mode
54
+ * @param {ImportPhaseType} phase import phase
51
55
  * @param {ImportAttributes | undefined} attributes import attributes
52
- * @param {Range[] | undefined} idRanges ranges for members of ids; the two arrays are right-aligned
56
+ * @param {IdRanges | undefined} idRanges ranges for members of ids; the two arrays are right-aligned
53
57
  */
54
58
  constructor(
55
59
  request,
@@ -58,10 +62,11 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
58
62
  name,
59
63
  range,
60
64
  exportPresenceMode,
65
+ phase,
61
66
  attributes,
62
67
  idRanges // TODO webpack 6 make this non-optional. It must always be set to properly trim ids.
63
68
  ) {
64
- super(request, sourceOrder, attributes);
69
+ super(request, sourceOrder, phase, attributes);
65
70
  this.ids = ids;
66
71
  this.name = name;
67
72
  this.range = range;
@@ -72,9 +77,9 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
72
77
  this.directImport = undefined;
73
78
  this.shorthand = undefined;
74
79
  this.asiSafe = undefined;
75
- /** @type {Set<string> | boolean | undefined} */
80
+ /** @type {UsedByExports | undefined} */
76
81
  this.usedByExports = undefined;
77
- /** @type {Set<DestructuringAssignmentProperty> | undefined} */
82
+ /** @type {DestructuringAssignmentProperties | undefined} */
78
83
  this.referencedPropertiesInDestructuring = undefined;
79
84
  }
80
85
 
@@ -99,23 +104,22 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
99
104
 
100
105
  /**
101
106
  * @param {ModuleGraph} moduleGraph the module graph
102
- * @returns {string[]} the imported ids
107
+ * @returns {Ids} the imported ids
103
108
  */
104
109
  getIds(moduleGraph) {
105
110
  const meta = moduleGraph.getMetaIfExisting(this);
106
111
  if (meta === undefined) return this.ids;
107
- const ids = meta[/** @type {keyof object} */ (idsSymbol)];
112
+ const ids = meta[idsSymbol];
108
113
  return ids !== undefined ? ids : this.ids;
109
114
  }
110
115
 
111
116
  /**
112
117
  * @param {ModuleGraph} moduleGraph the module graph
113
- * @param {string[]} ids the imported ids
118
+ * @param {Ids} ids the imported ids
114
119
  * @returns {void}
115
120
  */
116
121
  setIds(moduleGraph, ids) {
117
- /** @type {TODO} */
118
- (moduleGraph.getMeta(this))[idsSymbol] = ids;
122
+ moduleGraph.getMeta(this)[idsSymbol] = ids;
119
123
  }
120
124
 
121
125
  /**
@@ -142,7 +146,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
142
146
  * Returns list of exports referenced by this dependency
143
147
  * @param {ModuleGraph} moduleGraph module graph
144
148
  * @param {RuntimeSpec} runtime the runtime for which the module is analysed
145
- * @returns {(string[] | ReferencedExport)[]} referenced exports
149
+ * @returns {ReferencedExports} referenced exports
146
150
  */
147
151
  getReferencedExports(moduleGraph, runtime) {
148
152
  let ids = this.getIds(moduleGraph);
@@ -164,8 +168,9 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
164
168
  ) {
165
169
  case "default-only":
166
170
  case "default-with-named":
167
- if (ids.length === 1)
171
+ if (ids.length === 1) {
168
172
  return this._getReferencedExportsInDestructuring();
173
+ }
169
174
  ids = ids.slice(1);
170
175
  namespaceObjectAsContext = true;
171
176
  break;
@@ -187,15 +192,21 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
187
192
  }
188
193
 
189
194
  /**
190
- * @param {string[]=} ids ids
191
- * @returns {string[][]} referenced exports
195
+ * @param {Ids=} ids ids
196
+ * @returns {RawReferencedExports} referenced exports
192
197
  */
193
198
  _getReferencedExportsInDestructuring(ids) {
194
199
  if (this.referencedPropertiesInDestructuring) {
195
- /** @type {string[][]} */
200
+ /** @type {RawReferencedExports} */
201
+ const refsInDestructuring = [];
202
+ traverseDestructuringAssignmentProperties(
203
+ this.referencedPropertiesInDestructuring,
204
+ (stack) => refsInDestructuring.push(stack.map((p) => p.id))
205
+ );
206
+ /** @type {RawReferencedExports} */
196
207
  const refs = [];
197
- for (const { id } of this.referencedPropertiesInDestructuring) {
198
- refs.push(ids ? ids.concat([id]) : [id]);
208
+ for (const idsInDestructuring of refsInDestructuring) {
209
+ refs.push(ids ? [...ids, ...idsInDestructuring] : idsInDestructuring);
199
210
  }
200
211
  return refs;
201
212
  }
@@ -204,11 +215,12 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
204
215
 
205
216
  /**
206
217
  * @param {ModuleGraph} moduleGraph module graph
207
- * @returns {number} effective mode
218
+ * @returns {ExportPresenceMode} effective mode
208
219
  */
209
220
  _getEffectiveExportPresenceLevel(moduleGraph) {
210
- if (this.exportPresenceMode !== ExportPresenceModes.AUTO)
221
+ if (this.exportPresenceMode !== ExportPresenceModes.AUTO) {
211
222
  return this.exportPresenceMode;
223
+ }
212
224
  const buildMeta =
213
225
  /** @type {BuildMeta} */
214
226
  (
@@ -371,12 +383,23 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
371
383
  }
372
384
  }
373
385
 
374
- for (const {
375
- id,
376
- shorthand,
377
- range
378
- } of dep.referencedPropertiesInDestructuring) {
379
- const concatedIds = prefixedIds.concat([id]);
386
+ /** @type {{ ids: Ids, range: Range, shorthand: boolean | string }[]} */
387
+ const replacementsInDestructuring = [];
388
+ traverseDestructuringAssignmentProperties(
389
+ dep.referencedPropertiesInDestructuring,
390
+ undefined,
391
+ (stack) => {
392
+ const property = stack[stack.length - 1];
393
+ replacementsInDestructuring.push({
394
+ ids: stack.map((p) => p.id),
395
+ range: property.range,
396
+ shorthand: property.shorthand
397
+ });
398
+ }
399
+ );
400
+ for (const { ids, shorthand, range } of replacementsInDestructuring) {
401
+ /** @type {Ids} */
402
+ const concatedIds = [...prefixedIds, ...ids];
380
403
  const module = /** @type {Module} */ (moduleGraph.getModule(dep));
381
404
  const used = moduleGraph
382
405
  .getExportsInfo(module)
@@ -389,10 +412,8 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
389
412
  const comment = `${Template.toNormalComment(name)} `;
390
413
  const key = comment + JSON.stringify(newName);
391
414
  source.replace(
392
- /** @type {Range} */
393
- (range)[0],
394
- /** @type {Range} */
395
- (range)[1] - 1,
415
+ range[0],
416
+ range[1] - 1,
396
417
  shorthand ? `${key}: ${name}` : `${key}`
397
418
  );
398
419
  }
@@ -403,7 +424,7 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
403
424
  * @param {HarmonyImportSpecifierDependency} dep dependency
404
425
  * @param {ReplaceSource} source source
405
426
  * @param {DependencyTemplateContext} templateContext context
406
- * @param {string[]} ids ids
427
+ * @param {Ids} ids ids
407
428
  * @returns {string} generated code
408
429
  */
409
430
  _getCodeForIds(dep, source, templateContext, ids) {
@@ -420,13 +441,15 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
420
441
  exportExpr = concatenationScope.createModuleReference(
421
442
  connection.module,
422
443
  {
423
- asiSafe: dep.asiSafe
444
+ asiSafe: dep.asiSafe,
445
+ deferredImport: ImportPhaseUtils.isDefer(dep.phase)
424
446
  }
425
447
  );
426
448
  } else if (dep.namespaceObjectAsContext && ids.length === 1) {
427
449
  exportExpr =
428
450
  concatenationScope.createModuleReference(connection.module, {
429
- asiSafe: dep.asiSafe
451
+ asiSafe: dep.asiSafe,
452
+ deferredImport: ImportPhaseUtils.isDefer(dep.phase)
430
453
  }) + propertyAccess(ids);
431
454
  } else {
432
455
  exportExpr = concatenationScope.createModuleReference(
@@ -435,7 +458,8 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
435
458
  ids,
436
459
  call: dep.call,
437
460
  directImport: dep.directImport,
438
- asiSafe: dep.asiSafe
461
+ asiSafe: dep.asiSafe,
462
+ deferredImport: ImportPhaseUtils.isDefer(dep.phase)
439
463
  }
440
464
  );
441
465
  }
@@ -448,6 +472,7 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
448
472
  exportExpr = runtimeTemplate.exportFromImport({
449
473
  moduleGraph,
450
474
  module: /** @type {Module} */ (moduleGraph.getModule(dep)),
475
+ chunkGraph: templateContext.chunkGraph,
451
476
  request: dep.request,
452
477
  exportName: ids,
453
478
  originModule: module,
@@ -458,7 +483,8 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
458
483
  importVar: dep.getImportVar(moduleGraph),
459
484
  initFragments,
460
485
  runtime,
461
- runtimeRequirements
486
+ runtimeRequirements,
487
+ dependency: dep
462
488
  });
463
489
  }
464
490
  return exportExpr;
@@ -466,3 +492,4 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
466
492
  };
467
493
 
468
494
  module.exports = HarmonyImportSpecifierDependency;
495
+ module.exports.idsSymbol = idsSymbol;
@@ -5,33 +5,36 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_ESM
11
+ } = require("../ModuleTypeConstants");
8
12
  const HarmonyAcceptDependency = require("./HarmonyAcceptDependency");
9
13
  const HarmonyAcceptImportDependency = require("./HarmonyAcceptImportDependency");
10
14
  const HarmonyCompatibilityDependency = require("./HarmonyCompatibilityDependency");
15
+ const HarmonyDetectionParserPlugin = require("./HarmonyDetectionParserPlugin");
11
16
  const HarmonyEvaluatedImportSpecifierDependency = require("./HarmonyEvaluatedImportSpecifierDependency");
17
+ const HarmonyExportDependencyParserPlugin = require("./HarmonyExportDependencyParserPlugin");
12
18
  const HarmonyExportExpressionDependency = require("./HarmonyExportExpressionDependency");
13
19
  const HarmonyExportHeaderDependency = require("./HarmonyExportHeaderDependency");
14
20
  const HarmonyExportImportedSpecifierDependency = require("./HarmonyExportImportedSpecifierDependency");
15
21
  const HarmonyExportSpecifierDependency = require("./HarmonyExportSpecifierDependency");
22
+ const HarmonyImportDependencyParserPlugin = require("./HarmonyImportDependencyParserPlugin");
16
23
  const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
17
24
  const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
18
25
 
19
- const {
20
- JAVASCRIPT_MODULE_TYPE_AUTO,
21
- JAVASCRIPT_MODULE_TYPE_ESM
22
- } = require("../ModuleTypeConstants");
23
- const HarmonyDetectionParserPlugin = require("./HarmonyDetectionParserPlugin");
24
- const HarmonyExportDependencyParserPlugin = require("./HarmonyExportDependencyParserPlugin");
25
- const HarmonyImportDependencyParserPlugin = require("./HarmonyImportDependencyParserPlugin");
26
26
  const HarmonyTopLevelThisParserPlugin = require("./HarmonyTopLevelThisParserPlugin");
27
27
 
28
28
  /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
29
29
  /** @typedef {import("../Compiler")} Compiler */
30
30
  /** @typedef {import("../javascript/JavascriptParser")} Parser */
31
31
 
32
- const PLUGIN_NAME = "HarmonyModulesPlugin";
32
+ /**
33
+ * @typedef {object} HarmonyModulesPluginOptions
34
+ * @property {boolean=} deferImport
35
+ */
33
36
 
34
- /** @typedef {{ topLevelAwait?: boolean }} HarmonyModulesPluginOptions */
37
+ const PLUGIN_NAME = "HarmonyModulesPlugin";
35
38
 
36
39
  class HarmonyModulesPlugin {
37
40
  /**
@@ -127,10 +130,11 @@ class HarmonyModulesPlugin {
127
130
  */
128
131
  const handler = (parser, parserOptions) => {
129
132
  // TODO webpack 6: rename harmony to esm or module
130
- if (parserOptions.harmony !== undefined && !parserOptions.harmony)
133
+ if (parserOptions.harmony !== undefined && !parserOptions.harmony) {
131
134
  return;
135
+ }
132
136
 
133
- new HarmonyDetectionParserPlugin(this.options).apply(parser);
137
+ new HarmonyDetectionParserPlugin().apply(parser);
134
138
  new HarmonyImportDependencyParserPlugin(parserOptions).apply(parser);
135
139
  new HarmonyExportDependencyParserPlugin(parserOptions).apply(parser);
136
140
  new HarmonyTopLevelThisParserPlugin().apply(parser);
@@ -146,4 +150,5 @@ class HarmonyModulesPlugin {
146
150
  );
147
151
  }
148
152
  }
153
+
149
154
  module.exports = HarmonyModulesPlugin;
@@ -12,27 +12,27 @@ const HarmonyExports = require("./HarmonyExports");
12
12
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
13
13
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
14
14
 
15
+ const PLUGIN_NAME = "HarmonyTopLevelThisParserPlugin";
16
+
15
17
  class HarmonyTopLevelThisParserPlugin {
16
18
  /**
17
19
  * @param {JavascriptParser} parser the parser
18
20
  * @returns {void}
19
21
  */
20
22
  apply(parser) {
21
- parser.hooks.expression
22
- .for("this")
23
- .tap("HarmonyTopLevelThisParserPlugin", node => {
24
- if (!parser.scope.topLevelScope) return;
25
- if (HarmonyExports.isEnabled(parser.state)) {
26
- const dep = new ConstDependency(
27
- "undefined",
28
- /** @type {Range} */ (node.range),
29
- null
30
- );
31
- dep.loc = /** @type {DependencyLocation} */ (node.loc);
32
- parser.state.module.addPresentationalDependency(dep);
33
- return true;
34
- }
35
- });
23
+ parser.hooks.expression.for("this").tap(PLUGIN_NAME, (node) => {
24
+ if (!parser.scope.topLevelScope) return;
25
+ if (HarmonyExports.isEnabled(parser.state)) {
26
+ const dep = new ConstDependency(
27
+ "undefined",
28
+ /** @type {Range} */ (node.range),
29
+ null
30
+ );
31
+ dep.loc = /** @type {DependencyLocation} */ (node.loc);
32
+ parser.state.module.addPresentationalDependency(dep);
33
+ return true;
34
+ }
35
+ });
36
36
  }
37
37
  }
38
38
 
@@ -12,10 +12,11 @@ const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTempl
12
12
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
13
13
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
14
14
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
15
+ /** @typedef {import("./ContextDependency").ContextDependencyOptions} ContextDependencyOptions */
15
16
 
16
17
  class ImportContextDependency extends ContextDependency {
17
18
  /**
18
- * @param {TODO} options options
19
+ * @param {ContextDependencyOptions} options options
19
20
  * @param {Range} range range
20
21
  * @param {Range} valueRange value range
21
22
  */
@@ -34,6 +35,19 @@ class ImportContextDependency extends ContextDependency {
34
35
  return "esm";
35
36
  }
36
37
 
38
+ /**
39
+ * @returns {string | null} an identifier to merge equal requests
40
+ */
41
+ getResourceIdentifier() {
42
+ let str = super.getResourceIdentifier();
43
+
44
+ if (this.options.attributes) {
45
+ str += `|importAttributes${JSON.stringify(this.options.attributes)}`;
46
+ }
47
+
48
+ return str;
49
+ }
50
+
37
51
  /**
38
52
  * @param {ObjectSerializerContext} context context
39
53
  */
@@ -11,7 +11,8 @@ const ModuleDependency = require("./ModuleDependency");
11
11
 
12
12
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
13
13
  /** @typedef {import("../AsyncDependenciesBlock")} AsyncDependenciesBlock */
14
- /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
14
+ /** @typedef {import("../Dependency").RawReferencedExports} RawReferencedExports */
15
+ /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
15
16
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
16
17
  /** @typedef {import("../Module")} Module */
17
18
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
@@ -21,19 +22,22 @@ const ModuleDependency = require("./ModuleDependency");
21
22
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
22
23
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
23
24
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
25
+ /** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
24
26
 
25
27
  class ImportDependency extends ModuleDependency {
26
28
  /**
27
29
  * @param {string} request the request
28
30
  * @param {Range} range expression range
29
- * @param {(string[][] | null)=} referencedExports list of referenced exports
31
+ * @param {RawReferencedExports | null} referencedExports list of referenced exports
32
+ * @param {ImportPhaseType} phase import phase
30
33
  * @param {ImportAttributes=} attributes import attributes
31
34
  */
32
- constructor(request, range, referencedExports, attributes) {
35
+ constructor(request, range, referencedExports, phase, attributes) {
33
36
  super(request);
34
37
  this.range = range;
35
38
  this.referencedExports = referencedExports;
36
- this.assertions = attributes;
39
+ this.phase = phase;
40
+ this.attributes = attributes;
37
41
  }
38
42
 
39
43
  get type() {
@@ -44,11 +48,22 @@ class ImportDependency extends ModuleDependency {
44
48
  return "esm";
45
49
  }
46
50
 
51
+ /**
52
+ * @returns {string | null} an identifier to merge equal requests
53
+ */
54
+ getResourceIdentifier() {
55
+ let str = super.getResourceIdentifier();
56
+ if (this.attributes) {
57
+ str += `|importAttributes${JSON.stringify(this.attributes)}`;
58
+ }
59
+ return str;
60
+ }
61
+
47
62
  /**
48
63
  * Returns list of exports referenced by this dependency
49
64
  * @param {ModuleGraph} moduleGraph module graph
50
65
  * @param {RuntimeSpec} runtime the runtime for which the module is analysed
51
- * @returns {(string[] | ReferencedExport)[]} referenced exports
66
+ * @returns {ReferencedExports} referenced exports
52
67
  */
53
68
  getReferencedExports(moduleGraph, runtime) {
54
69
  if (!this.referencedExports) return Dependency.EXPORTS_OBJECT_REFERENCED;
@@ -87,7 +102,8 @@ class ImportDependency extends ModuleDependency {
87
102
  serialize(context) {
88
103
  context.write(this.range);
89
104
  context.write(this.referencedExports);
90
- context.write(this.assertions);
105
+ context.write(this.phase);
106
+ context.write(this.attributes);
91
107
  super.serialize(context);
92
108
  }
93
109
 
@@ -97,7 +113,8 @@ class ImportDependency extends ModuleDependency {
97
113
  deserialize(context) {
98
114
  this.range = context.read();
99
115
  this.referencedExports = context.read();
100
- this.assertions = context.read();
116
+ this.phase = context.read();
117
+ this.attributes = context.read();
101
118
  super.deserialize(context);
102
119
  }
103
120
  }
@@ -128,6 +145,7 @@ ImportDependency.Template = class ImportDependencyTemplate extends (
128
145
  module: /** @type {Module} */ (moduleGraph.getModule(dep)),
129
146
  request: dep.request,
130
147
  strict: /** @type {BuildMeta} */ (module.buildMeta).strictHarmonyModule,
148
+ dependency: dep,
131
149
  message: "import()",
132
150
  runtimeRequirements
133
151
  });
@@ -10,23 +10,24 @@ const ImportDependency = require("./ImportDependency");
10
10
 
11
11
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
12
  /** @typedef {import("../Dependency")} Dependency */
13
- /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
14
13
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
14
  /** @typedef {import("../Module")} Module */
16
15
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
17
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
18
16
  /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
19
17
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
18
+ /** @typedef {ImportDependency.RawReferencedExports} RawReferencedExports */
19
+ /** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
20
20
 
21
21
  class ImportEagerDependency extends ImportDependency {
22
22
  /**
23
23
  * @param {string} request the request
24
24
  * @param {Range} range expression range
25
- * @param {(string[][] | null)=} referencedExports list of referenced exports
25
+ * @param {RawReferencedExports | null} referencedExports list of referenced exports
26
+ * @param {ImportPhaseType} phase import phase
26
27
  * @param {ImportAttributes=} attributes import attributes
27
28
  */
28
- constructor(request, range, referencedExports, attributes) {
29
- super(request, range, referencedExports, attributes);
29
+ constructor(request, range, referencedExports, phase, attributes) {
30
+ super(request, range, referencedExports, phase, attributes);
30
31
  }
31
32
 
32
33
  get type() {
@@ -64,6 +65,7 @@ ImportEagerDependency.Template = class ImportEagerDependencyTemplate extends (
64
65
  request: dep.request,
65
66
  strict: /** @type {BuildMeta} */ (module.buildMeta).strictHarmonyModule,
66
67
  message: "import() eager",
68
+ dependency: dep,
67
69
  runtimeRequirements
68
70
  });
69
71
 
@@ -14,26 +14,32 @@ const ImportMetaContextDependency = require("./ImportMetaContextDependency");
14
14
  /** @typedef {import("estree").Expression} Expression */
15
15
  /** @typedef {import("estree").ObjectExpression} ObjectExpression */
16
16
  /** @typedef {import("estree").Property} Property */
17
- /** @typedef {import("estree").SourceLocation} SourceLocation */
17
+ /** @typedef {import("estree").Identifier} Identifier */
18
18
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
19
19
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
20
20
  /** @typedef {import("../ContextModule").ContextModuleOptions} ContextModuleOptions */
21
+ /** @typedef {import("../ContextModule").ContextMode} ContextMode */
22
+ /** @typedef {import("../Chunk").ChunkName} ChunkName */
21
23
  /** @typedef {import("../ChunkGroup").RawChunkGroupOptions} RawChunkGroupOptions */
24
+ /** @typedef {import("../Dependency").RawReferencedExports} RawReferencedExports */
22
25
  /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
23
26
  /** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
24
- /** @typedef {Pick<ContextModuleOptions, 'mode'|'recursive'|'regExp'|'include'|'exclude'|'chunkName'>&{groupOptions: RawChunkGroupOptions, exports?: ContextModuleOptions["referencedExports"]}} ImportMetaContextOptions */
27
+
28
+ /** @typedef {Pick<ContextModuleOptions, "mode" | "recursive" | "regExp" | "include" | "exclude" | "chunkName"> & { groupOptions: RawChunkGroupOptions, exports?: RawReferencedExports }} ImportMetaContextOptions */
25
29
 
26
30
  /**
27
- * @param {TODO} prop property
31
+ * @param {Property} prop property
28
32
  * @param {string} expect except message
29
33
  * @returns {WebpackError} error
30
34
  */
31
35
  function createPropertyParseError(prop, expect) {
32
36
  return createError(
33
37
  `Parsing import.meta.webpackContext options failed. Unknown value for property ${JSON.stringify(
34
- prop.key.name
38
+ /** @type {Identifier} */
39
+ (prop.key).name
35
40
  )}, expected type ${expect}.`,
36
- prop.value.loc
41
+ /** @type {DependencyLocation} */
42
+ (prop.value.loc)
37
43
  );
38
44
  }
39
45
 
@@ -49,6 +55,8 @@ function createError(msg, loc) {
49
55
  return error;
50
56
  }
51
57
 
58
+ const PLUGIN_NAME = "ImportMetaContextDependencyParserPlugin";
59
+
52
60
  module.exports = class ImportMetaContextDependencyParserPlugin {
53
61
  /**
54
62
  * @param {JavascriptParser} parser the parser
@@ -57,7 +65,7 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
57
65
  apply(parser) {
58
66
  parser.hooks.evaluateIdentifier
59
67
  .for("import.meta.webpackContext")
60
- .tap("ImportMetaContextDependencyParserPlugin", expr =>
68
+ .tap(PLUGIN_NAME, (expr) =>
61
69
  evaluateToIdentifier(
62
70
  "import.meta.webpackContext",
63
71
  "import.meta",
@@ -67,7 +75,7 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
67
75
  );
68
76
  parser.hooks.call
69
77
  .for("import.meta.webpackContext")
70
- .tap("ImportMetaContextDependencyParserPlugin", expr => {
78
+ .tap(PLUGIN_NAME, (expr) => {
71
79
  if (expr.arguments.length < 1 || expr.arguments.length > 2) return;
72
80
  const [directoryNode, optionsNode] = expr.arguments;
73
81
  if (optionsNode && optionsNode.type !== "ObjectExpression") return;
@@ -79,7 +87,7 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
79
87
  const errors = [];
80
88
  let regExp = /^\.\/.*$/;
81
89
  let recursive = true;
82
- /** @type {ContextModuleOptions["mode"]} */
90
+ /** @type {ContextMode} */
83
91
  let mode = "sync";
84
92
  /** @type {ContextModuleOptions["include"]} */
85
93
  let include;
@@ -87,9 +95,9 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
87
95
  let exclude;
88
96
  /** @type {RawChunkGroupOptions} */
89
97
  const groupOptions = {};
90
- /** @type {ContextModuleOptions["chunkName"]} */
98
+ /** @type {ChunkName | undefined} */
91
99
  let chunkName;
92
- /** @type {ContextModuleOptions["referencedExports"]} */
100
+ /** @type {RawReferencedExports | undefined} */
93
101
  let exports;
94
102
  if (optionsNode) {
95
103
  for (const prop of /** @type {ObjectExpression} */ (optionsNode)
@@ -98,7 +106,8 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
98
106
  errors.push(
99
107
  createError(
100
108
  "Parsing import.meta.webpackContext options failed.",
101
- /** @type {DependencyLocation} */ (optionsNode.loc)
109
+ /** @type {DependencyLocation} */
110
+ (optionsNode.loc)
102
111
  )
103
112
  );
104
113
  break;
@@ -172,14 +181,15 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
172
181
  /** @type {BasicEvaluatedExpression[]} */
173
182
  (expr.items);
174
183
  if (
175
- items.every(i => {
184
+ items.every((i) => {
176
185
  if (!i.isArray()) return false;
177
186
  const innerItems =
178
187
  /** @type {BasicEvaluatedExpression[]} */ (i.items);
179
- return innerItems.every(i => i.isString());
188
+ return innerItems.every((i) => i.isString());
180
189
  })
181
190
  ) {
182
191
  exports = [];
192
+
183
193
  for (const i1 of items) {
184
194
  /** @type {string[]} */
185
195
  const export_ = [];
@@ -14,7 +14,6 @@ const ImportMetaContextDependency = require("./ImportMetaContextDependency");
14
14
  const ImportMetaContextDependencyParserPlugin = require("./ImportMetaContextDependencyParserPlugin");
15
15
 
16
16
  /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
17
- /** @typedef {import("../../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
18
17
  /** @typedef {import("../Compiler")} Compiler */
19
18
  /** @typedef {import("../javascript/JavascriptParser")} Parser */
20
19
 
@@ -52,8 +51,9 @@ class ImportMetaContextPlugin {
52
51
  if (
53
52
  parserOptions.importMetaContext !== undefined &&
54
53
  !parserOptions.importMetaContext
55
- )
54
+ ) {
56
55
  return;
56
+ }
57
57
 
58
58
  new ImportMetaContextDependencyParserPlugin().apply(parser);
59
59
  };