@depup/webpack 5.106.0-depup.0 → 5.109.0-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/README.md +9 -11
  2. package/changes.json +16 -24
  3. package/hot/dev-server.js +2 -0
  4. package/lib/APIPlugin.js +60 -35
  5. package/lib/AsyncDependenciesBlock.js +3 -0
  6. package/lib/AutomaticPrefetchPlugin.js +6 -1
  7. package/lib/BannerPlugin.js +13 -5
  8. package/lib/Cache.js +27 -5
  9. package/lib/CacheFacade.js +41 -0
  10. package/lib/Chunk.js +71 -25
  11. package/lib/ChunkGraph.js +141 -9
  12. package/lib/ChunkGroup.js +115 -28
  13. package/lib/ChunkTemplate.js +9 -0
  14. package/lib/CircularModulesPlugin.js +190 -0
  15. package/lib/CleanPlugin.js +23 -26
  16. package/lib/CodeGenerationResults.js +19 -0
  17. package/lib/CompatibilityPlugin.js +54 -37
  18. package/lib/Compilation.js +635 -107
  19. package/lib/Compiler.js +93 -31
  20. package/lib/ConcatenationScope.js +34 -4
  21. package/lib/ConditionalInitFragment.js +6 -0
  22. package/lib/ConstPlugin.js +15 -12
  23. package/lib/ContextExclusionPlugin.js +3 -1
  24. package/lib/ContextModule.js +345 -55
  25. package/lib/ContextModuleFactory.js +193 -51
  26. package/lib/ContextReplacementPlugin.js +8 -1
  27. package/lib/DefinePlugin.js +498 -127
  28. package/lib/DependenciesBlock.js +6 -1
  29. package/lib/Dependency.js +159 -11
  30. package/lib/DependencyTemplate.js +7 -1
  31. package/lib/DependencyTemplates.js +4 -0
  32. package/lib/DotenvPlugin.js +3 -0
  33. package/lib/DynamicEntryPlugin.js +3 -1
  34. package/lib/EntryOptionPlugin.js +42 -2
  35. package/lib/EntryPlugin.js +4 -1
  36. package/lib/Entrypoint.js +5 -1
  37. package/lib/EnvironmentPlugin.js +3 -2
  38. package/lib/ErrorHelpers.js +7 -0
  39. package/lib/EvalDevToolModulePlugin.js +3 -1
  40. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  41. package/lib/ExportsInfo.js +399 -108
  42. package/lib/ExportsInfoApiPlugin.js +4 -3
  43. package/lib/ExternalModule.js +376 -78
  44. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  45. package/lib/ExternalsPlugin.js +3 -1
  46. package/lib/FileSystemInfo.js +575 -149
  47. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  48. package/lib/FlagDependencyExportsPlugin.js +82 -9
  49. package/lib/FlagDependencyUsagePlugin.js +92 -6
  50. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  51. package/lib/Generator.js +24 -3
  52. package/lib/HotModuleReplacementPlugin.js +110 -44
  53. package/lib/IgnorePlugin.js +5 -2
  54. package/lib/IgnoreWarningsPlugin.js +2 -1
  55. package/lib/InitFragment.js +15 -0
  56. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  57. package/lib/LazyBarrel.js +389 -0
  58. package/lib/LibraryTemplatePlugin.js +2 -1
  59. package/lib/LoaderOptionsPlugin.js +3 -1
  60. package/lib/LoaderTargetPlugin.js +3 -1
  61. package/lib/MainTemplate.js +15 -0
  62. package/lib/ManifestPlugin.js +9 -2
  63. package/lib/Module.js +121 -60
  64. package/lib/ModuleFactory.js +6 -1
  65. package/lib/ModuleFilenameHelpers.js +5 -2
  66. package/lib/ModuleGraph.js +69 -2
  67. package/lib/ModuleGraphConnection.js +9 -0
  68. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  69. package/lib/ModuleNotFoundError.js +3 -83
  70. package/lib/ModuleProfile.js +27 -1
  71. package/lib/ModuleSourceTypeConstants.js +52 -19
  72. package/lib/ModuleTemplate.js +10 -0
  73. package/lib/ModuleTypeConstants.js +20 -4
  74. package/lib/MultiCompiler.js +59 -4
  75. package/lib/MultiStats.js +9 -0
  76. package/lib/MultiWatching.js +6 -0
  77. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  78. package/lib/NodeStuffPlugin.js +78 -46
  79. package/lib/NormalModule.js +485 -181
  80. package/lib/NormalModuleFactory.js +148 -29
  81. package/lib/NormalModuleReplacementPlugin.js +3 -1
  82. package/lib/NullFactory.js +1 -0
  83. package/lib/OptionsApply.js +1 -0
  84. package/lib/Parser.js +3 -1
  85. package/lib/PlatformPlugin.js +2 -1
  86. package/lib/PrefetchPlugin.js +4 -1
  87. package/lib/ProgressPlugin.js +351 -161
  88. package/lib/ProvidePlugin.js +6 -3
  89. package/lib/RawModule.js +32 -16
  90. package/lib/RecordIdsPlugin.js +9 -0
  91. package/lib/RequestShortener.js +8 -0
  92. package/lib/ResolverFactory.js +5 -0
  93. package/lib/RuntimeGlobals.js +58 -5
  94. package/lib/RuntimeModule.js +22 -7
  95. package/lib/RuntimePlugin.js +104 -26
  96. package/lib/RuntimeTemplate.js +616 -37
  97. package/lib/SelfModuleFactory.js +3 -0
  98. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  99. package/lib/SourceMapDevToolPlugin.js +341 -63
  100. package/lib/Stats.js +6 -0
  101. package/lib/Template.js +29 -3
  102. package/lib/TemplatedPathPlugin.js +505 -138
  103. package/lib/UseStrictPlugin.js +3 -2
  104. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  105. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  106. package/lib/WarnNoModeSetPlugin.js +18 -2
  107. package/lib/WatchIgnorePlugin.js +5 -1
  108. package/lib/Watching.js +25 -3
  109. package/lib/WebpackError.js +3 -74
  110. package/lib/WebpackIsIncludedPlugin.js +4 -2
  111. package/lib/WebpackOptionsApply.js +88 -25
  112. package/lib/WebpackOptionsDefaulter.js +1 -0
  113. package/lib/asset/AssetBytesGenerator.js +28 -10
  114. package/lib/asset/AssetBytesParser.js +1 -0
  115. package/lib/asset/AssetGenerator.js +199 -60
  116. package/lib/asset/AssetModule.js +47 -0
  117. package/lib/asset/AssetModulesPlugin.js +115 -24
  118. package/lib/asset/AssetParser.js +4 -2
  119. package/lib/asset/AssetSourceGenerator.js +26 -8
  120. package/lib/asset/AssetSourceParser.js +1 -0
  121. package/lib/asset/RawDataUrlModule.js +23 -13
  122. package/lib/asset/WebManifestGenerator.js +164 -0
  123. package/lib/asset/WebManifestParser.js +130 -0
  124. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  125. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  126. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  127. package/lib/async-modules/isGeneratorLowered.js +26 -0
  128. package/lib/buildChunkGraph.js +107 -15
  129. package/lib/bun/BunTargetPlugin.js +42 -0
  130. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  131. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  132. package/lib/cache/IdleFileCachePlugin.js +6 -1
  133. package/lib/cache/MemoryCachePlugin.js +1 -1
  134. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  135. package/lib/cache/PackFileCacheStrategy.js +43 -7
  136. package/lib/cache/ResolverCachePlugin.js +12 -1
  137. package/lib/cache/getLazyHashedEtag.js +13 -2
  138. package/lib/cache/mergeEtags.js +4 -0
  139. package/lib/cli.js +142 -20
  140. package/lib/config/browserslistTargetHandler.js +141 -0
  141. package/lib/config/defaults.js +591 -41
  142. package/lib/config/defineConfig.js +31 -0
  143. package/lib/config/normalization.js +46 -1
  144. package/lib/config/target.js +200 -2
  145. package/lib/container/ContainerEntryDependency.js +2 -0
  146. package/lib/container/ContainerEntryModule.js +27 -14
  147. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  148. package/lib/container/ContainerExposedDependency.js +6 -2
  149. package/lib/container/ContainerPlugin.js +2 -1
  150. package/lib/container/ContainerReferencePlugin.js +3 -2
  151. package/lib/container/FallbackDependency.js +9 -7
  152. package/lib/container/FallbackItemDependency.js +1 -0
  153. package/lib/container/FallbackModule.js +22 -9
  154. package/lib/container/FallbackModuleFactory.js +1 -0
  155. package/lib/container/ModuleFederationPlugin.js +12 -26
  156. package/lib/container/RemoteModule.js +33 -10
  157. package/lib/container/RemoteRuntimeModule.js +15 -12
  158. package/lib/container/RemoteToExternalDependency.js +1 -0
  159. package/lib/container/options.js +7 -0
  160. package/lib/css/CssGenerator.js +534 -272
  161. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  162. package/lib/css/CssLoadingRuntimeModule.js +156 -77
  163. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  164. package/lib/css/CssModulesPlugin.js +356 -204
  165. package/lib/css/CssParser.js +3452 -1950
  166. package/lib/css/syntax.js +4058 -0
  167. package/lib/debug/ProfilingPlugin.js +33 -2
  168. package/lib/deno/DenoTargetPlugin.js +41 -0
  169. package/lib/dependencies/AMDDefineDependency.js +29 -17
  170. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  171. package/lib/dependencies/AMDPlugin.js +6 -3
  172. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  173. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  174. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  175. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  176. package/lib/dependencies/AMDRequireDependency.js +28 -20
  177. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  178. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  179. package/lib/dependencies/CachedConstDependency.js +9 -1
  180. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  181. package/lib/dependencies/CommonJsExportRequireDependency.js +138 -38
  182. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  183. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  184. package/lib/dependencies/CommonJsFullRequireDependency.js +62 -27
  185. package/lib/dependencies/CommonJsImportsParserPlugin.js +187 -24
  186. package/lib/dependencies/CommonJsPlugin.js +7 -4
  187. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  188. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  189. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  190. package/lib/dependencies/ConstDependency.js +22 -12
  191. package/lib/dependencies/ContextDependency.js +13 -2
  192. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  193. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  194. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  195. package/lib/dependencies/ContextElementDependency.js +27 -14
  196. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  197. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  198. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  199. package/lib/dependencies/CssIcssExportDependency.js +682 -368
  200. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  201. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  202. package/lib/dependencies/CssImportDependency.js +37 -1
  203. package/lib/dependencies/CssUrlDependency.js +87 -14
  204. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  205. package/lib/dependencies/DllEntryDependency.js +12 -13
  206. package/lib/dependencies/DynamicExports.js +5 -0
  207. package/lib/dependencies/EntryDependency.js +1 -0
  208. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  209. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  210. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  211. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  212. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  213. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  214. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  215. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  216. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  217. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -2
  218. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  219. package/lib/dependencies/HarmonyExportExpressionDependency.js +140 -46
  220. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  221. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +253 -37
  222. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  223. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  224. package/lib/dependencies/HarmonyExports.js +6 -1
  225. package/lib/dependencies/HarmonyImportDependency.js +59 -3
  226. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  227. package/lib/dependencies/HarmonyImportGuard.js +426 -0
  228. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  229. package/lib/dependencies/HarmonyImportSpecifierDependency.js +136 -17
  230. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  231. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  233. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  234. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  235. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  236. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  237. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  238. package/lib/dependencies/ImportContextDependency.js +9 -9
  239. package/lib/dependencies/ImportDependency.js +92 -3
  240. package/lib/dependencies/ImportEagerDependency.js +2 -0
  241. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  242. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  243. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  244. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  245. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  246. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  247. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  248. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  249. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  250. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  251. package/lib/dependencies/ImportParserPlugin.js +114 -27
  252. package/lib/dependencies/ImportPhase.js +17 -11
  253. package/lib/dependencies/ImportPlugin.js +2 -1
  254. package/lib/dependencies/ImportWeakDependency.js +3 -0
  255. package/lib/dependencies/JsonExportsDependency.js +15 -10
  256. package/lib/dependencies/LoaderDependency.js +2 -0
  257. package/lib/dependencies/LoaderImportDependency.js +3 -0
  258. package/lib/dependencies/LoaderPlugin.js +9 -2
  259. package/lib/dependencies/LocalModule.js +15 -12
  260. package/lib/dependencies/LocalModuleDependency.js +15 -13
  261. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  262. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  263. package/lib/dependencies/ModuleDependency.js +14 -0
  264. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  265. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  266. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  267. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  268. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  269. package/lib/dependencies/NullDependency.js +2 -0
  270. package/lib/dependencies/PrefetchDependency.js +1 -0
  271. package/lib/dependencies/ProvidedDependency.js +36 -27
  272. package/lib/dependencies/PureExpressionDependency.js +14 -10
  273. package/lib/dependencies/RequireContextDependency.js +1 -0
  274. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  275. package/lib/dependencies/RequireContextPlugin.js +2 -1
  276. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  277. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  278. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  279. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  280. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  281. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  282. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  283. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  284. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  285. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  286. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  287. package/lib/dependencies/RequireResolveDependency.js +2 -0
  288. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  289. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  290. package/lib/dependencies/StaticExportsDependency.js +13 -10
  291. package/lib/dependencies/SystemPlugin.js +9 -6
  292. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  293. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  294. package/lib/dependencies/URLContextDependency.js +8 -7
  295. package/lib/dependencies/URLDependency.js +157 -33
  296. package/lib/dependencies/URLPlugin.js +2 -0
  297. package/lib/dependencies/UnsupportedDependency.js +12 -13
  298. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  299. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  300. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  301. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  302. package/lib/dependencies/WorkerDependency.js +111 -27
  303. package/lib/dependencies/WorkletDependency.js +278 -0
  304. package/lib/dependencies/getFunctionExpression.js +1 -0
  305. package/lib/dependencies/processExportInfo.js +14 -11
  306. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  307. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  308. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  309. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  310. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  311. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  312. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  313. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  314. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  315. package/lib/electron/ElectronTargetPlugin.js +24 -5
  316. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  317. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  318. package/lib/errors/BuildCycleError.js +1 -1
  319. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  320. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  321. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  322. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  323. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  324. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  325. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  326. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  327. package/lib/errors/JSONParseError.js +115 -0
  328. package/lib/errors/LoaderLoadingError.js +20 -0
  329. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  330. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  331. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  332. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  333. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  334. package/lib/errors/ModuleNotFoundError.js +94 -0
  335. package/lib/errors/ModuleParseError.js +141 -0
  336. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  337. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  338. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  339. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  340. package/lib/errors/NonErrorEmittedError.js +30 -0
  341. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  342. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  343. package/lib/errors/WebpackError.js +84 -0
  344. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  345. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  346. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  347. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +71 -49
  348. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  349. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  350. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  351. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  352. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  353. package/lib/hmr/lazyCompilationBackend.js +34 -8
  354. package/lib/html/HtmlGenerator.js +1470 -0
  355. package/lib/html/HtmlModule.js +41 -0
  356. package/lib/html/HtmlModulesPlugin.js +1111 -0
  357. package/lib/html/HtmlParser.js +1970 -0
  358. package/lib/html/favicon.svg +1 -0
  359. package/lib/html/syntax.js +9020 -0
  360. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  361. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  362. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  363. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  364. package/lib/ids/IdHelpers.js +25 -2
  365. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  366. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  367. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  368. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  369. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  370. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  371. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  372. package/lib/index.js +66 -15
  373. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  374. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  375. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  376. package/lib/javascript/ChunkHelpers.js +1 -0
  377. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  378. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  379. package/lib/javascript/JavascriptGenerator.js +213 -51
  380. package/lib/javascript/JavascriptModule.js +54 -0
  381. package/lib/javascript/JavascriptModulesPlugin.js +579 -183
  382. package/lib/javascript/JavascriptParser.js +1289 -462
  383. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  384. package/lib/javascript/StartupHelpers.js +5 -0
  385. package/lib/javascript/syntax.js +4380 -0
  386. package/lib/json/JsonData.js +5 -0
  387. package/lib/json/JsonGenerator.js +21 -0
  388. package/lib/json/JsonModule.js +40 -0
  389. package/lib/json/JsonModulesPlugin.js +8 -1
  390. package/lib/json/JsonParser.js +18 -27
  391. package/lib/library/AbstractLibraryPlugin.js +17 -2
  392. package/lib/library/AmdLibraryPlugin.js +8 -0
  393. package/lib/library/AssignLibraryPlugin.js +21 -3
  394. package/lib/library/EnableLibraryPlugin.js +8 -2
  395. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  396. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  397. package/lib/library/JsonpLibraryPlugin.js +8 -0
  398. package/lib/library/ModuleLibraryPlugin.js +154 -7
  399. package/lib/library/SystemLibraryPlugin.js +11 -3
  400. package/lib/library/UmdLibraryPlugin.js +16 -0
  401. package/lib/loaders/LoaderRunner.js +714 -0
  402. package/lib/loaders/loadLoader.js +100 -0
  403. package/lib/logging/Logger.js +17 -0
  404. package/lib/logging/createConsoleLogger.js +7 -0
  405. package/lib/logging/runtime.js +2 -0
  406. package/lib/logging/truncateArgs.js +2 -0
  407. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  408. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  409. package/lib/node/NodeSourcePlugin.js +1 -1
  410. package/lib/node/NodeTargetPlugin.js +4 -63
  411. package/lib/node/NodeTemplatePlugin.js +3 -1
  412. package/lib/node/NodeWatchFileSystem.js +40 -22
  413. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  414. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +23 -1
  415. package/lib/node/ReadFileCompileWasmPlugin.js +18 -1
  416. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  417. package/lib/node/nodeBuiltins.js +80 -0
  418. package/lib/node/nodeConsole.js +116 -64
  419. package/lib/optimize/AggressiveMergingPlugin.js +3 -1
  420. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  421. package/lib/optimize/ConcatenatedModule.js +585 -116
  422. package/lib/optimize/ConstExportsPlugin.js +211 -0
  423. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  424. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  425. package/lib/optimize/InlineExports.js +178 -0
  426. package/lib/optimize/InnerGraph.js +374 -262
  427. package/lib/optimize/InnerGraphPlugin.js +246 -117
  428. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  429. package/lib/optimize/MangleExportsPlugin.js +5 -1
  430. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  431. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  432. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  433. package/lib/optimize/ModuleConcatenationPlugin.js +159 -34
  434. package/lib/optimize/RealContentHashPlugin.js +125 -50
  435. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  436. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  437. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  438. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  439. package/lib/optimize/SplitChunksPlugin.js +54 -6
  440. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  441. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  442. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  443. package/lib/performance/SizeLimitsPlugin.js +8 -2
  444. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  445. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  446. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  448. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  449. package/lib/prefetch/ResourceHintPlugin.js +663 -0
  450. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  451. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  452. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  453. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  454. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  455. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  456. package/lib/rules/RuleSetCompiler.js +132 -0
  457. package/lib/rules/UseEffectRulePlugin.js +10 -3
  458. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  459. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  460. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  461. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  462. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  463. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  464. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  465. package/lib/runtime/CompatRuntimeModule.js +2 -0
  466. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  467. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  468. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  469. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  470. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  471. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  472. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  473. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  474. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  475. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  476. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  477. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  478. package/lib/runtime/HelperRuntimeModule.js +5 -0
  479. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  480. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  481. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  482. package/lib/runtime/NonceRuntimeModule.js +1 -0
  483. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  484. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  485. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  486. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  487. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  488. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  489. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  490. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  491. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  492. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  493. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  494. package/lib/schemes/DataUriPlugin.js +14 -2
  495. package/lib/schemes/FileUriPlugin.js +1 -1
  496. package/lib/schemes/HttpUriPlugin.js +86 -4
  497. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  498. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  499. package/lib/serialization/ArraySerializer.js +6 -8
  500. package/lib/serialization/BinaryMiddleware.js +552 -463
  501. package/lib/serialization/DateObjectSerializer.js +4 -2
  502. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  503. package/lib/serialization/FileMiddleware.js +50 -3
  504. package/lib/serialization/MapObjectSerializer.js +7 -9
  505. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  506. package/lib/serialization/ObjectMiddleware.js +73 -13
  507. package/lib/serialization/PlainObjectSerializer.js +16 -8
  508. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  509. package/lib/serialization/Serializer.js +6 -0
  510. package/lib/serialization/SerializerMiddleware.js +14 -2
  511. package/lib/serialization/SetObjectSerializer.js +6 -8
  512. package/lib/serialization/SingleItemMiddleware.js +3 -0
  513. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  514. package/lib/sharing/ConsumeSharedModule.js +21 -7
  515. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  516. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  517. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  518. package/lib/sharing/ProvideSharedDependency.js +34 -15
  519. package/lib/sharing/ProvideSharedModule.js +42 -12
  520. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  521. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  522. package/lib/sharing/SharePlugin.js +5 -1
  523. package/lib/sharing/ShareRuntimeModule.js +19 -16
  524. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  525. package/lib/sharing/utils.js +9 -1
  526. package/lib/stats/DefaultStatsFactoryPlugin.js +94 -12
  527. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  528. package/lib/stats/DefaultStatsPrinterPlugin.js +64 -18
  529. package/lib/stats/StatsFactory.js +39 -18
  530. package/lib/stats/StatsPrinter.js +16 -2
  531. package/lib/typescript/TypeScriptPlugin.js +210 -0
  532. package/lib/url/URLParserPlugin.js +111 -23
  533. package/lib/util/ArrayHelpers.js +1 -0
  534. package/lib/util/ArrayQueue.js +10 -5
  535. package/lib/util/AsyncQueue.js +154 -74
  536. package/lib/util/Hash.js +2 -2
  537. package/lib/util/IterableHelpers.js +3 -0
  538. package/lib/util/LazyBucketSortedSet.js +26 -0
  539. package/lib/util/LazySet.js +45 -4
  540. package/lib/util/LocConverter.js +64 -0
  541. package/lib/util/ParallelismFactorCalculator.js +1 -0
  542. package/lib/util/Queue.js +6 -3
  543. package/lib/util/Semaphore.js +15 -1
  544. package/lib/util/SetHelpers.js +4 -1
  545. package/lib/util/SortableSet.js +7 -1
  546. package/lib/util/SourceProcessor.js +119 -0
  547. package/lib/util/StackedCacheMap.js +20 -3
  548. package/lib/util/StackedMap.js +162 -43
  549. package/lib/util/StringXor.js +1 -1
  550. package/lib/util/TupleQueue.js +7 -3
  551. package/lib/util/TupleSet.js +14 -0
  552. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  553. package/lib/util/WeakTupleMap.js +60 -1
  554. package/lib/util/binarySearchBounds.js +3 -2
  555. package/lib/util/chainedImports.js +3 -3
  556. package/lib/util/cleverMerge.js +19 -2
  557. package/lib/util/comparators.js +35 -4
  558. package/lib/util/compileBooleanMatcher.js +9 -0
  559. package/lib/util/concatenate.js +80 -24
  560. package/lib/util/conventions.js +46 -1
  561. package/lib/util/createHash.js +0 -1
  562. package/lib/util/createHooksRegistry.js +43 -0
  563. package/lib/util/createMappings.js +118 -0
  564. package/lib/util/dataURL.js +3 -2
  565. package/lib/util/deprecation.js +19 -0
  566. package/lib/util/deterministicGrouping.js +46 -17
  567. package/lib/util/extractSourceMap.js +2 -1
  568. package/lib/util/extractUrlAndGlobal.js +1 -0
  569. package/lib/util/findGraphRoots.js +7 -0
  570. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  571. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  572. package/lib/util/fs.js +87 -14
  573. package/lib/util/generateDebugId.js +1 -0
  574. package/lib/util/globUtils.js +710 -0
  575. package/lib/util/hash/BatchedHash.js +1 -0
  576. package/lib/util/hash/BulkUpdateHash.js +1 -0
  577. package/lib/util/hash/DebugHash.js +1 -0
  578. package/lib/util/hash/hash-digest.js +32 -15
  579. package/lib/util/hash/md4.js +1 -1
  580. package/lib/util/hash/wasm-hash.js +5 -0
  581. package/lib/util/hash/xxhash64.js +1 -1
  582. package/lib/util/identifier.js +97 -6
  583. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  584. package/lib/util/internalSerializables.js +102 -60
  585. package/lib/util/magicComment.js +149 -7
  586. package/lib/util/makeSerializable.js +7 -0
  587. package/lib/util/memoize.js +2 -0
  588. package/lib/util/mimeTypes.js +176 -0
  589. package/lib/util/nonNumericOnlyHash.js +31 -1
  590. package/lib/util/numberHash.js +2 -2
  591. package/lib/util/parseJson.js +41 -0
  592. package/lib/util/processAsyncTree.js +8 -0
  593. package/lib/util/property.js +9 -2
  594. package/lib/util/publicPathPlaceholder.js +64 -0
  595. package/lib/util/registerExternalSerializer.js +24 -4
  596. package/lib/util/removeBOM.js +1 -0
  597. package/lib/util/runtime.js +32 -0
  598. package/lib/util/semver.js +15 -0
  599. package/lib/util/serialization.js +2 -0
  600. package/lib/util/smartGrouping.js +8 -0
  601. package/lib/util/source.js +23 -0
  602. package/lib/util/topologicalSort.js +69 -0
  603. package/lib/validateSchema.js +1 -0
  604. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  605. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  606. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  607. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  608. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  609. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  610. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  611. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  612. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  613. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  614. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  615. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  616. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  617. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  618. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  619. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  620. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  621. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  622. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  623. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  624. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  625. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  626. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  627. package/lib/web/JsonpTemplatePlugin.js +2 -1
  628. package/lib/webpack.js +78 -1
  629. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  630. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  631. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  632. package/module.d.ts +21 -0
  633. package/package.json +79 -77
  634. package/schemas/WebpackOptions.check.js +1 -1
  635. package/schemas/WebpackOptions.json +1117 -79
  636. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  637. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  638. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  639. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  640. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  641. package/schemas/plugins/HtmlParserOptions.json +3 -0
  642. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  643. package/schemas/plugins/ProgressPlugin.json +38 -0
  644. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  645. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  646. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  647. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  648. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  649. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  650. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  652. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  653. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  654. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  655. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  656. package/types.d.ts +8608 -1159
  657. package/lib/CaseSensitiveModulesWarning.js +0 -72
  658. package/lib/GraphHelpers.js +0 -46
  659. package/lib/ModuleParseError.js +0 -125
  660. package/lib/NoModeWarning.js +0 -23
  661. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  662. package/lib/css/walkCssTokens.js +0 -1843
  663. package/lib/util/AppendOnlyStackedSet.js +0 -78
  664. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  665. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  666. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -6,12 +6,15 @@
6
6
  "use strict";
7
7
 
8
8
  const Dependency = require("../Dependency");
9
+ const Template = require("../Template");
9
10
  const makeSerializable = require("../util/makeSerializable");
11
+ const memoize = require("../util/memoize");
10
12
  const { ImportPhaseUtils } = require("./ImportPhase");
11
13
  const ModuleDependency = require("./ModuleDependency");
12
14
 
13
15
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
14
16
  /** @typedef {import("../AsyncDependenciesBlock")} AsyncDependenciesBlock */
17
+ /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
15
18
  /** @typedef {import("../Dependency").RawReferencedExports} RawReferencedExports */
16
19
  /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
17
20
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
@@ -23,10 +26,14 @@ const ModuleDependency = require("./ModuleDependency");
23
26
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
24
27
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
25
28
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
29
+ /** @typedef {import("./HarmonyImportGuard").DependencyGuard} DependencyGuard */
26
30
  /** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
27
31
 
32
+ const getHarmonyImportGuard = memoize(() => require("./HarmonyImportGuard"));
33
+
28
34
  class ImportDependency extends ModuleDependency {
29
35
  /**
36
+ * Creates an instance of ImportDependency.
30
37
  * @param {string} request the request
31
38
  * @param {Range} range expression range
32
39
  * @param {RawReferencedExports | null} referencedExports list of referenced exports
@@ -36,9 +43,19 @@ class ImportDependency extends ModuleDependency {
36
43
  constructor(request, range, referencedExports, phase, attributes) {
37
44
  super(request);
38
45
  this.range = range;
46
+ /** @type {RawReferencedExports | null} */
39
47
  this.referencedExports = referencedExports;
48
+ /** @type {ImportPhaseType} */
40
49
  this.phase = phase;
50
+ /** @type {ImportAttributes | undefined} */
41
51
  this.attributes = attributes;
52
+ /** @type {DependencyGuard[] | undefined} */
53
+ this.branchGuards = undefined;
54
+ // Range of the `import(specifier, options)` second argument, set only when
55
+ // it is not a statically extractable attributes object and must therefore
56
+ // be evaluated and validated at runtime.
57
+ /** @type {Range | undefined} */
58
+ this.optionsRange = undefined;
42
59
  }
43
60
 
44
61
  get type() {
@@ -50,6 +67,19 @@ class ImportDependency extends ModuleDependency {
50
67
  }
51
68
 
52
69
  /**
70
+ * Returns function to determine if the connection is active.
71
+ * @param {ModuleGraph} moduleGraph module graph
72
+ * @returns {null | false | GetConditionFn} function to determine if the connection is active
73
+ */
74
+ getCondition(moduleGraph) {
75
+ const guards = this.branchGuards;
76
+ if (guards === undefined) return null;
77
+ return (connection, runtime) =>
78
+ !getHarmonyImportGuard().isDeadByGuards(guards, moduleGraph, runtime);
79
+ }
80
+
81
+ /**
82
+ * Returns an identifier to merge equal requests.
53
83
  * @returns {string | null} an identifier to merge equal requests
54
84
  */
55
85
  getResourceIdentifier() {
@@ -96,13 +126,15 @@ class ImportDependency extends ModuleDependency {
96
126
  }
97
127
  refs.push({
98
128
  name: referencedExport,
99
- canMangle: false
129
+ canMangle: false,
130
+ canInline: false
100
131
  });
101
132
  }
102
133
  return refs;
103
134
  }
104
135
 
105
136
  /**
137
+ * Serializes this instance into the provided serializer context.
106
138
  * @param {ObjectSerializerContext} context context
107
139
  */
108
140
  serialize(context) {
@@ -110,10 +142,13 @@ class ImportDependency extends ModuleDependency {
110
142
  context.write(this.referencedExports);
111
143
  context.write(this.phase);
112
144
  context.write(this.attributes);
145
+ context.write(this.branchGuards);
146
+ context.write(this.optionsRange);
113
147
  super.serialize(context);
114
148
  }
115
149
 
116
150
  /**
151
+ * Restores this instance from the provided deserializer context.
117
152
  * @param {ObjectDeserializerContext} context context
118
153
  */
119
154
  deserialize(context) {
@@ -121,6 +156,8 @@ class ImportDependency extends ModuleDependency {
121
156
  this.referencedExports = context.read();
122
157
  this.phase = context.read();
123
158
  this.attributes = context.read();
159
+ this.branchGuards = context.read();
160
+ this.optionsRange = context.read();
124
161
  super.deserialize(context);
125
162
  }
126
163
  }
@@ -131,6 +168,7 @@ ImportDependency.Template = class ImportDependencyTemplate extends (
131
168
  ModuleDependency.Template
132
169
  ) {
133
170
  /**
171
+ * Applies the plugin by registering its hooks on the compiler.
134
172
  * @param {Dependency} dependency the dependency for which the template should be applied
135
173
  * @param {ReplaceSource} source the current replace source which can be modified
136
174
  * @param {DependencyTemplateContext} templateContext the context object
@@ -139,9 +177,26 @@ ImportDependency.Template = class ImportDependencyTemplate extends (
139
177
  apply(
140
178
  dependency,
141
179
  source,
142
- { runtimeTemplate, module, moduleGraph, chunkGraph, runtimeRequirements }
180
+ {
181
+ runtimeTemplate,
182
+ module,
183
+ moduleGraph,
184
+ chunkGraph,
185
+ runtimeRequirements,
186
+ runtime
187
+ }
143
188
  ) {
144
189
  const dep = /** @type {ImportDependency} */ (dependency);
190
+ const connection = moduleGraph.getConnection(dep);
191
+ // Dead branch: module is excluded and has no id; code is never executed.
192
+ if (connection && !connection.isTargetActive(runtime)) {
193
+ source.replace(
194
+ dep.range[0],
195
+ dep.range[1] - 1,
196
+ "Promise.resolve(/* dead branch */)"
197
+ );
198
+ return;
199
+ }
145
200
  const block = /** @type {AsyncDependenciesBlock} */ (
146
201
  moduleGraph.getParentBlock(dep)
147
202
  );
@@ -153,7 +208,8 @@ ImportDependency.Template = class ImportDependencyTemplate extends (
153
208
  strict: /** @type {BuildMeta} */ (module.buildMeta).strictHarmonyModule,
154
209
  dependency: dep,
155
210
  message: "import()",
156
- runtimeRequirements
211
+ runtimeRequirements,
212
+ originModule: module
157
213
  });
158
214
 
159
215
  // For source phase imports, unwrap the default export
@@ -165,6 +221,39 @@ ImportDependency.Template = class ImportDependencyTemplate extends (
165
221
  )})`;
166
222
  }
167
223
 
224
+ // A non-static second argument must still be evaluated (for its side
225
+ // effects and evaluation order) and validated per spec. Keep it in place
226
+ // and wrap it in an inline validator that mirrors the runtime checks of
227
+ // the spec's `import(specifier, options)` evaluation.
228
+ if (dep.optionsRange) {
229
+ const validator = runtimeTemplate.basicFunction("o", [
230
+ "try {",
231
+ Template.indent([
232
+ "if (o !== undefined) {",
233
+ Template.indent([
234
+ 'if ((typeof o !== "object" && typeof o !== "function") || o === null) throw new TypeError("The second argument to import() must be an object");',
235
+ 'var a = o["with"];',
236
+ "if (a !== undefined) {",
237
+ Template.indent([
238
+ 'if ((typeof a !== "object" && typeof a !== "function") || a === null) throw new TypeError("The \'with\' option must be an object");',
239
+ "for (var k = Object.keys(a), i = 0; i < k.length; i++) {",
240
+ Template.indent([
241
+ 'if (typeof a[k[i]] !== "string") throw new TypeError("Import attribute values must be strings");'
242
+ ]),
243
+ "}"
244
+ ]),
245
+ "}"
246
+ ]),
247
+ "}"
248
+ ]),
249
+ "} catch (e) { return Promise.reject(e); }",
250
+ `return ${content};`
251
+ ]);
252
+ source.replace(dep.range[0], dep.optionsRange[0] - 1, `(${validator})(`);
253
+ source.replace(dep.optionsRange[1], dep.range[1] - 1, ")");
254
+ return;
255
+ }
256
+
168
257
  source.replace(dep.range[0], dep.range[1] - 1, content);
169
258
  }
170
259
  };
@@ -20,6 +20,7 @@ const ImportDependency = require("./ImportDependency");
20
20
 
21
21
  class ImportEagerDependency extends ImportDependency {
22
22
  /**
23
+ * Creates an instance of ImportEagerDependency.
23
24
  * @param {string} request the request
24
25
  * @param {Range} range expression range
25
26
  * @param {RawReferencedExports | null} referencedExports list of referenced exports
@@ -48,6 +49,7 @@ ImportEagerDependency.Template = class ImportEagerDependencyTemplate extends (
48
49
  ImportDependency.Template
49
50
  ) {
50
51
  /**
52
+ * Applies the plugin by registering its hooks on the compiler.
51
53
  * @param {Dependency} dependency the dependency for which the template should be applied
52
54
  * @param {ReplaceSource} source the current replace source which can be modified
53
55
  * @param {DependencyTemplateContext} templateContext the context object
@@ -14,6 +14,7 @@ const ModuleDependencyTemplateAsRequireId = require("./ModuleDependencyTemplateA
14
14
 
15
15
  class ImportMetaContextDependency extends ContextDependency {
16
16
  /**
17
+ * Creates an instance of ImportMetaContextDependency.
17
18
  * @param {ContextDependencyOptions} options options
18
19
  * @param {Range} range range
19
20
  */
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const WebpackError = require("../WebpackError");
8
+ const WebpackError = require("../errors/WebpackError");
9
9
  const {
10
10
  evaluateToIdentifier
11
11
  } = require("../javascript/JavascriptParserHelpers");
@@ -28,22 +28,24 @@ const ImportMetaContextDependency = require("./ImportMetaContextDependency");
28
28
  /** @typedef {Pick<ContextModuleOptions, "mode" | "recursive" | "regExp" | "include" | "exclude" | "chunkName"> & { groupOptions: RawChunkGroupOptions, exports?: RawReferencedExports }} ImportMetaContextOptions */
29
29
 
30
30
  /**
31
+ * Creates a property parse error.
32
+ * @param {JavascriptParser} parser the parser
31
33
  * @param {Property} prop property
32
34
  * @param {string} expect except message
33
35
  * @returns {WebpackError} error
34
36
  */
35
- function createPropertyParseError(prop, expect) {
37
+ function createPropertyParseError(parser, prop, expect) {
36
38
  return createError(
37
39
  `Parsing import.meta.webpackContext options failed. Unknown value for property ${JSON.stringify(
38
40
  /** @type {Identifier} */
39
41
  (prop.key).name
40
42
  )}, expected type ${expect}.`,
41
- /** @type {DependencyLocation} */
42
- (prop.value.loc)
43
+ parser.getLocation(prop.value)
43
44
  );
44
45
  }
45
46
 
46
47
  /**
48
+ * Creates an error from the provided msg.
47
49
  * @param {string} msg message
48
50
  * @param {DependencyLocation} loc location
49
51
  * @returns {WebpackError} error
@@ -59,6 +61,7 @@ const PLUGIN_NAME = "ImportMetaContextDependencyParserPlugin";
59
61
 
60
62
  module.exports = class ImportMetaContextDependencyParserPlugin {
61
63
  /**
64
+ * Applies the plugin by registering its hooks on the compiler.
62
65
  * @param {JavascriptParser} parser the parser
63
66
  * @returns {void}
64
67
  */
@@ -107,8 +110,7 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
107
110
  errors.push(
108
111
  createError(
109
112
  "Parsing import.meta.webpackContext options failed.",
110
- /** @type {DependencyLocation} */
111
- (optionsNode.loc)
113
+ parser.getLocation(optionsNode)
112
114
  )
113
115
  );
114
116
  break;
@@ -119,7 +121,7 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
119
121
  /** @type {Expression} */ (prop.value)
120
122
  );
121
123
  if (!regExpExpr.isRegExp()) {
122
- errors.push(createPropertyParseError(prop, "RegExp"));
124
+ errors.push(createPropertyParseError(parser, prop, "RegExp"));
123
125
  } else {
124
126
  regExp = /** @type {RegExp} */ (regExpExpr.regExp);
125
127
  }
@@ -130,7 +132,7 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
130
132
  /** @type {Expression} */ (prop.value)
131
133
  );
132
134
  if (!regExpExpr.isRegExp()) {
133
- errors.push(createPropertyParseError(prop, "RegExp"));
135
+ errors.push(createPropertyParseError(parser, prop, "RegExp"));
134
136
  } else {
135
137
  include = regExpExpr.regExp;
136
138
  }
@@ -141,7 +143,7 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
141
143
  /** @type {Expression} */ (prop.value)
142
144
  );
143
145
  if (!regExpExpr.isRegExp()) {
144
- errors.push(createPropertyParseError(prop, "RegExp"));
146
+ errors.push(createPropertyParseError(parser, prop, "RegExp"));
145
147
  } else {
146
148
  exclude = regExpExpr.regExp;
147
149
  }
@@ -152,7 +154,7 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
152
154
  /** @type {Expression} */ (prop.value)
153
155
  );
154
156
  if (!modeExpr.isString()) {
155
- errors.push(createPropertyParseError(prop, "string"));
157
+ errors.push(createPropertyParseError(parser, prop, "string"));
156
158
  } else {
157
159
  mode = /** @type {ContextModuleOptions["mode"]} */ (
158
160
  modeExpr.string
@@ -165,7 +167,7 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
165
167
  /** @type {Expression} */ (prop.value)
166
168
  );
167
169
  if (!expr.isString()) {
168
- errors.push(createPropertyParseError(prop, "string"));
170
+ errors.push(createPropertyParseError(parser, prop, "string"));
169
171
  } else {
170
172
  chunkName = expr.string;
171
173
  }
@@ -203,12 +205,16 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
203
205
  }
204
206
  } else {
205
207
  errors.push(
206
- createPropertyParseError(prop, "string|string[][]")
208
+ createPropertyParseError(
209
+ parser,
210
+ prop,
211
+ "string|string[][]"
212
+ )
207
213
  );
208
214
  }
209
215
  } else {
210
216
  errors.push(
211
- createPropertyParseError(prop, "string|string[][]")
217
+ createPropertyParseError(parser, prop, "string|string[][]")
212
218
  );
213
219
  }
214
220
  break;
@@ -222,7 +228,9 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
222
228
  } else if (expr.isNumber()) {
223
229
  groupOptions.prefetchOrder = expr.number;
224
230
  } else {
225
- errors.push(createPropertyParseError(prop, "boolean|number"));
231
+ errors.push(
232
+ createPropertyParseError(parser, prop, "boolean|number")
233
+ );
226
234
  }
227
235
  break;
228
236
  }
@@ -235,7 +243,9 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
235
243
  } else if (expr.isNumber()) {
236
244
  groupOptions.preloadOrder = expr.number;
237
245
  } else {
238
- errors.push(createPropertyParseError(prop, "boolean|number"));
246
+ errors.push(
247
+ createPropertyParseError(parser, prop, "boolean|number")
248
+ );
239
249
  }
240
250
  break;
241
251
  }
@@ -255,7 +265,11 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
255
265
  );
256
266
  } else {
257
267
  errors.push(
258
- createPropertyParseError(prop, '"high"|"low"|"auto"')
268
+ createPropertyParseError(
269
+ parser,
270
+ prop,
271
+ '"high"|"low"|"auto"'
272
+ )
259
273
  );
260
274
  }
261
275
  break;
@@ -265,7 +279,9 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
265
279
  /** @type {Expression} */ (prop.value)
266
280
  );
267
281
  if (!recursiveExpr.isBoolean()) {
268
- errors.push(createPropertyParseError(prop, "boolean"));
282
+ errors.push(
283
+ createPropertyParseError(parser, prop, "boolean")
284
+ );
269
285
  } else {
270
286
  recursive = /** @type {boolean} */ (recursiveExpr.bool);
271
287
  }
@@ -277,7 +293,7 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
277
293
  `Parsing import.meta.webpackContext options failed. Unknown property ${JSON.stringify(
278
294
  prop.key.name
279
295
  )}.`,
280
- /** @type {DependencyLocation} */ (optionsNode.loc)
296
+ parser.getLocation(optionsNode)
281
297
  )
282
298
  );
283
299
  }
@@ -303,7 +319,7 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
303
319
  },
304
320
  /** @type {Range} */ (expr.range)
305
321
  );
306
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
322
+ dep.loc = parser.getLocation(expr);
307
323
  dep.optional = Boolean(parser.scope.inTry);
308
324
  parser.state.current.addDependency(dep);
309
325
  return true;
@@ -12,6 +12,9 @@ const {
12
12
  const ContextElementDependency = require("./ContextElementDependency");
13
13
  const ImportMetaContextDependency = require("./ImportMetaContextDependency");
14
14
  const ImportMetaContextDependencyParserPlugin = require("./ImportMetaContextDependencyParserPlugin");
15
+ const ImportMetaGlobDependency = require("./ImportMetaGlobDependency");
16
+ const ImportMetaGlobDependencyParserPlugin = require("./ImportMetaGlobDependencyParserPlugin");
17
+ const { isImportMetaFieldEnabled } = require("./ImportMetaPlugin");
15
18
 
16
19
  /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
17
20
  /** @typedef {import("../Compiler")} Compiler */
@@ -19,9 +22,31 @@ const ImportMetaContextDependencyParserPlugin = require("./ImportMetaContextDepe
19
22
 
20
23
  const PLUGIN_NAME = "ImportMetaContextPlugin";
21
24
 
25
+ /** @type {(parserOptions: JavascriptParserOptions) => boolean} */
26
+ const isImportMetaContextEnabled = (parserOptions) => {
27
+ const importMeta = parserOptions.importMeta;
28
+ if (
29
+ Boolean(importMeta) &&
30
+ typeof importMeta === "object" &&
31
+ Object.prototype.hasOwnProperty.call(importMeta, "webpackContext")
32
+ ) {
33
+ return isImportMetaFieldEnabled(importMeta, "webpackContext");
34
+ }
35
+ if (parserOptions.importMetaContext === false) {
36
+ return false;
37
+ }
38
+ return isImportMetaFieldEnabled(importMeta, "webpackContext");
39
+ };
40
+
41
+ // Gated only by the `importMeta.glob` field — independent of the legacy
42
+ // `importMetaContext` toggle, which controls `import.meta.webpackContext`.
43
+ /** @type {(parserOptions: JavascriptParserOptions) => boolean} */
44
+ const isImportMetaGlobEnabled = (parserOptions) =>
45
+ isImportMetaFieldEnabled(parserOptions.importMeta, "glob");
46
+
22
47
  class ImportMetaContextPlugin {
23
48
  /**
24
- * Apply the plugin
49
+ * Applies the plugin by registering its hooks on the compiler.
25
50
  * @param {Compiler} compiler the compiler instance
26
51
  * @returns {void}
27
52
  */
@@ -37,25 +62,32 @@ class ImportMetaContextPlugin {
37
62
  ImportMetaContextDependency,
38
63
  new ImportMetaContextDependency.Template()
39
64
  );
65
+ compilation.dependencyFactories.set(
66
+ ImportMetaGlobDependency,
67
+ contextModuleFactory
68
+ );
69
+ compilation.dependencyTemplates.set(
70
+ ImportMetaGlobDependency,
71
+ new ImportMetaGlobDependency.Template()
72
+ );
40
73
  compilation.dependencyFactories.set(
41
74
  ContextElementDependency,
42
75
  normalModuleFactory
43
76
  );
44
77
 
45
78
  /**
79
+ * Handles the hook callback for this code path.
46
80
  * @param {Parser} parser parser parser
47
81
  * @param {JavascriptParserOptions} parserOptions parserOptions
48
82
  * @returns {void}
49
83
  */
50
84
  const handler = (parser, parserOptions) => {
51
- if (
52
- parserOptions.importMetaContext !== undefined &&
53
- !parserOptions.importMetaContext
54
- ) {
55
- return;
85
+ if (isImportMetaContextEnabled(parserOptions)) {
86
+ new ImportMetaContextDependencyParserPlugin().apply(parser);
87
+ }
88
+ if (isImportMetaGlobEnabled(parserOptions)) {
89
+ new ImportMetaGlobDependencyParserPlugin().apply(parser);
56
90
  }
57
-
58
- new ImportMetaContextDependencyParserPlugin().apply(parser);
59
91
  };
60
92
 
61
93
  normalModuleFactory.hooks.parser
@@ -0,0 +1,81 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Natsu @xiaoxiaojx
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const makeSerializable = require("../util/makeSerializable");
9
+ const ContextDependency = require("./ContextDependency");
10
+ const ModuleDependencyTemplateAsRequireId = require("./ModuleDependencyTemplateAsRequireId");
11
+
12
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
13
+ /** @typedef {import("./ContextDependency").ContextDependencyOptions} ContextDependencyOptions */
14
+
15
+ /**
16
+ * @typedef {ContextDependencyOptions & {
17
+ * patterns: string[],
18
+ * requestContext: string,
19
+ * importName?: string,
20
+ * exhaustive?: boolean,
21
+ * caseSensitive?: boolean,
22
+ * }} ImportMetaGlobDependencyOptions
23
+ */
24
+
25
+ class ImportMetaGlobDependency extends ContextDependency {
26
+ /**
27
+ * @param {ImportMetaGlobDependencyOptions} options options
28
+ * @param {Range} range range
29
+ */
30
+ constructor(options, range) {
31
+ super(options, options ? options.requestContext : undefined);
32
+
33
+ this.range = range;
34
+ }
35
+
36
+ get category() {
37
+ return "esm";
38
+ }
39
+
40
+ get type() {
41
+ return `import.meta.glob ${this.options.mode}`;
42
+ }
43
+
44
+ /**
45
+ * Returns an identifier to merge equal requests.
46
+ * @returns {string | null} an identifier to merge equal requests
47
+ */
48
+ getResourceIdentifier() {
49
+ const {
50
+ patterns,
51
+ request,
52
+ recursive,
53
+ mode,
54
+ exhaustive,
55
+ caseSensitive,
56
+ importName,
57
+ referencedExports
58
+ } = /** @type {ImportMetaGlobDependencyOptions} */ (this.options);
59
+ return (
60
+ `context${this.getContext() || ""}|glob request${request} ` +
61
+ `${recursive} ${patterns.join(",")} ` +
62
+ `${mode}${exhaustive ? " exhaustive" : ""}` +
63
+ `${caseSensitive === false ? " case-insensitive" : ""}` +
64
+ `${importName ? ` import:${importName}` : ""}` +
65
+ `${
66
+ referencedExports
67
+ ? ` referencedExports:${JSON.stringify(referencedExports)}`
68
+ : ""
69
+ }`
70
+ );
71
+ }
72
+ }
73
+
74
+ makeSerializable(
75
+ ImportMetaGlobDependency,
76
+ "webpack/lib/dependencies/ImportMetaGlobDependency"
77
+ );
78
+
79
+ ImportMetaGlobDependency.Template = ModuleDependencyTemplateAsRequireId;
80
+
81
+ module.exports = ImportMetaGlobDependency;
@@ -0,0 +1,78 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Natsu @xiaoxiaojx
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const {
9
+ evaluateToIdentifier
10
+ } = require("../javascript/JavascriptParserHelpers");
11
+ const ImportMetaGlobDependency = require("./ImportMetaGlobDependency");
12
+ const { parseImportMetaGlobCall } = require("./ImportMetaGlobHelpers");
13
+
14
+ /** @typedef {import("estree").CallExpression} CallExpression */
15
+ /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
16
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
17
+
18
+ const PLUGIN_NAME = "ImportMetaGlobDependencyParserPlugin";
19
+
20
+ module.exports = class ImportMetaGlobDependencyParserPlugin {
21
+ /**
22
+ * Applies the plugin by registering its hooks on the compiler.
23
+ * @param {JavascriptParser} parser the parser
24
+ * @returns {void}
25
+ */
26
+ apply(parser) {
27
+ parser.hooks.evaluateIdentifier
28
+ .for("import.meta.glob")
29
+ .tap(PLUGIN_NAME, (expr) =>
30
+ evaluateToIdentifier(
31
+ "import.meta.glob",
32
+ "import.meta",
33
+ () => ["glob"],
34
+ true
35
+ )(expr)
36
+ );
37
+ parser.hooks.call.for("import.meta.glob").tap(PLUGIN_NAME, (expr) => {
38
+ const {
39
+ options: globOptions,
40
+ errors,
41
+ warnings
42
+ } = parseImportMetaGlobCall(/** @type {CallExpression} */ (expr), parser);
43
+ for (const warning of warnings) {
44
+ parser.state.module.addWarning(warning);
45
+ }
46
+ if (errors.length) {
47
+ for (const error of errors) parser.state.current.addError(error);
48
+ return;
49
+ }
50
+ if (!globOptions) return;
51
+ const dep = new ImportMetaGlobDependency(
52
+ {
53
+ request: `${globOptions.baseDir}${globOptions.query}`,
54
+ recursive: globOptions.recursive,
55
+ regExp: false,
56
+ patterns: globOptions.patterns,
57
+ requestContext: globOptions.requestContext,
58
+ importName: globOptions.importName,
59
+ exhaustive: globOptions.exhaustive,
60
+ caseSensitive: globOptions.caseSensitive,
61
+ referencedExports: globOptions.referencedExports,
62
+ namespaceObject:
63
+ /** @type {import("../Module").BuildMeta} */
64
+ (parser.state.module.buildMeta).strictHarmonyModule
65
+ ? "strict"
66
+ : true,
67
+ mode: globOptions.mode,
68
+ category: "esm"
69
+ },
70
+ globOptions.range
71
+ );
72
+ dep.loc = parser.getLocation(expr);
73
+ dep.optional = Boolean(parser.scope.inTry);
74
+ parser.state.current.addDependency(dep);
75
+ return true;
76
+ });
77
+ }
78
+ };