@depup/webpack 5.106.1-depup.0 → 5.109.2-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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -0,0 +1,714 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const { readFile } = require("fs");
9
+ const { parseResource } = require("../util/identifier");
10
+ const loadLoader = require("./loadLoader");
11
+
12
+ /** @typedef {string | ({ loader: string } & Record<string, EXPECTED_ANY>)} LoaderItemInput */
13
+
14
+ /**
15
+ * @typedef {object} ProcessOptions
16
+ * @property {Buffer | null} resourceBuffer the raw resource buffer
17
+ * @property {(loaderContext: EXPECTED_ANY, resource: string, callback: (err: Error | null, ...args: EXPECTED_ANY[]) => void) => void} processResource read and process the resource
18
+ */
19
+
20
+ /**
21
+ * @typedef {object} RunLoaderOptions
22
+ * @property {string=} resource the resource (with query and fragment)
23
+ * @property {LoaderItemInput[]=} loaders the loaders to run
24
+ * @property {EXPECTED_ANY=} context the loader context to augment and pass to loaders
25
+ * @property {ProcessOptions["processResource"]=} processResource custom resource reader/processor
26
+ * @property {((path: string, callback: (err: Error | null, result?: Buffer) => void) => void)=} readResource custom file reader
27
+ */
28
+
29
+ /**
30
+ * @typedef {object} RunLoaderResult
31
+ * @property {EXPECTED_ANY=} result the loader pipeline result
32
+ * @property {Buffer | null=} resourceBuffer the raw resource buffer
33
+ * @property {boolean} cacheable whether the request is cacheable
34
+ * @property {string[]} notCacheableReasons reasons why the request is not cacheable (e.g. paths of loaders that marked it)
35
+ * @property {string[]} fileDependencies file dependencies
36
+ * @property {string[]} contextDependencies context (directory) dependencies
37
+ * @property {string[]} missingDependencies missing dependencies
38
+ */
39
+
40
+ /** @typedef {(...args: EXPECTED_ANY[]) => void} LoaderCallback */
41
+
42
+ /** @typedef {import("../../declarations/LoaderContext").LoaderRunnerLoaderContext<EXPECTED_ANY>} LoaderRunnerLoaderContext */
43
+
44
+ /**
45
+ * The loader context as the runner sees and mutates it: the canonical
46
+ * `LoaderRunnerLoaderContext` shape (not re-declared here), with only the fields
47
+ * the runner assigns internally before a loader runs widened to their mutable
48
+ * form (nullable `context`/`callback`/`async`, `LoaderObject` loaders).
49
+ * @typedef {Omit<LoaderRunnerLoaderContext, "context" | "callback" | "async" | "loaders"> & { context: string | null, callback: LoaderCallback | null, async: (() => LoaderCallback | undefined) | null, loaders: LoaderObject[] }} LoaderContext
50
+ */
51
+
52
+ const HASH_ESCAPE_REGEXP = /#/g;
53
+
54
+ // UTF-8 encoding of the BOM: EF BB BF
55
+ const UTF8_BOM_0 = 0xef;
56
+ const UTF8_BOM_1 = 0xbb;
57
+ const UTF8_BOM_2 = 0xbf;
58
+
59
+ /**
60
+ * @param {Buffer} buf buffer
61
+ * @returns {string} string, with a leading UTF-8 BOM skipped at the buffer level
62
+ */
63
+ function utf8BufferToString(buf) {
64
+ if (
65
+ buf.length >= 3 &&
66
+ buf[0] === UTF8_BOM_0 &&
67
+ buf[1] === UTF8_BOM_1 &&
68
+ buf[2] === UTF8_BOM_2
69
+ ) {
70
+ return buf.toString("utf8", 3);
71
+ }
72
+ return buf.toString("utf8");
73
+ }
74
+
75
+ /**
76
+ * Escape `#` with a preceding `\0` byte; short-circuits when there is no `#`.
77
+ * @param {string} str input string
78
+ * @returns {string} escaped string
79
+ */
80
+ function escapeHash(str) {
81
+ return str.includes("#") ? str.replace(HASH_ESCAPE_REGEXP, "\0#") : str;
82
+ }
83
+
84
+ /**
85
+ * @param {string} path path
86
+ * @returns {string} directory name
87
+ */
88
+ function dirname(path) {
89
+ if (path === "/") return "/";
90
+ const i = path.lastIndexOf("/");
91
+ const j = path.lastIndexOf("\\");
92
+ const i2 = path.indexOf("/");
93
+ const j2 = path.indexOf("\\");
94
+ const idx = i > j ? i : j;
95
+ const idx2 = i > j ? i2 : j2;
96
+ if (idx < 0) return path;
97
+ if (idx === idx2) return path.slice(0, idx + 1);
98
+ return path.slice(0, idx);
99
+ }
100
+
101
+ /**
102
+ * A single loader in the pipeline. `request` is an accessor: reading it
103
+ * serializes path/query/fragment; assigning a string or descriptor parses it.
104
+ */
105
+ class LoaderObject {
106
+ /**
107
+ * @param {LoaderItemInput} loader loader request or descriptor
108
+ */
109
+ constructor(loader) {
110
+ /** @type {string} */
111
+ this.path = "";
112
+ /** @type {string} */
113
+ this.query = "";
114
+ /** @type {string} */
115
+ this.fragment = "";
116
+ /** @type {string | { [key: string]: EXPECTED_ANY } | null=} */
117
+ this.options = null;
118
+ /** @type {string | null=} */
119
+ this.ident = null;
120
+ /** @type {string=} */
121
+ this.type = undefined;
122
+ /** @type {EXPECTED_FUNCTION | null=} */
123
+ this.normal = null;
124
+ /** @type {EXPECTED_FUNCTION | null=} */
125
+ this.pitch = null;
126
+ /** @type {boolean | null=} */
127
+ this.raw = null;
128
+ /** @type {EXPECTED_OBJECT | null=} */
129
+ this.data = null;
130
+ this.pitchExecuted = false;
131
+ this.normalExecuted = false;
132
+ // enumerable own accessor: class getters are non-enumerable and would be
133
+ // dropped when the loader object is serialized (loaders rely on `request`)
134
+ Object.defineProperty(this, "request", REQUEST_DESCRIPTOR);
135
+ this.request = loader;
136
+ Object.preventExtensions(this);
137
+ }
138
+
139
+ /**
140
+ * @returns {string} the loader request (path + query + fragment)
141
+ */
142
+ get request() {
143
+ return escapeHash(this.path) + escapeHash(this.query) + this.fragment;
144
+ }
145
+
146
+ /**
147
+ * @param {LoaderItemInput} value loader request or descriptor
148
+ */
149
+ set request(value) {
150
+ if (typeof value === "string") {
151
+ const { path, query, fragment } = parseResource(value);
152
+ this.path = path;
153
+ this.query = query;
154
+ this.fragment = fragment;
155
+ this.options = undefined;
156
+ this.ident = undefined;
157
+ return;
158
+ }
159
+
160
+ if (!value.loader) {
161
+ throw new Error(
162
+ `request should be a string or object with loader and options (${JSON.stringify(
163
+ value
164
+ )})`
165
+ );
166
+ }
167
+
168
+ const { loader: path, fragment, type, options, ident } = value;
169
+ this.path = path;
170
+ this.fragment = fragment || "";
171
+ this.type = type;
172
+ this.options = options;
173
+ this.ident = ident;
174
+
175
+ if (options === null || options === undefined) {
176
+ this.query = "";
177
+ } else if (typeof options === "string") {
178
+ this.query = `?${options}`;
179
+ } else if (ident) {
180
+ this.query = `??${ident}`;
181
+ } else if (typeof options === "object" && options.ident) {
182
+ this.query = `??${options.ident}`;
183
+ } else {
184
+ this.query = `?${JSON.stringify(options)}`;
185
+ }
186
+ }
187
+ }
188
+
189
+ // Shared enumerable descriptor reusing the prototype's `request` accessor.
190
+ const REQUEST_DESCRIPTOR = {
191
+ .../** @type {PropertyDescriptor} */ (
192
+ Object.getOwnPropertyDescriptor(LoaderObject.prototype, "request")
193
+ ),
194
+ enumerable: true
195
+ };
196
+
197
+ /**
198
+ * @param {EXPECTED_FUNCTION} fn the loader function
199
+ * @param {LoaderContext} context the loader context
200
+ * @param {EXPECTED_ANY[]} args arguments
201
+ * @param {LoaderCallback} callback callback
202
+ * @returns {void}
203
+ */
204
+ function runSyncOrAsync(fn, context, args, callback) {
205
+ let isSync = true;
206
+ let isDone = false;
207
+ let isError = false; // internal error
208
+ let reportedError = false;
209
+
210
+ /**
211
+ * @param {...EXPECTED_ANY} callbackArgs callback args
212
+ * @returns {void}
213
+ */
214
+ function innerCallback(...callbackArgs) {
215
+ if (isDone) {
216
+ if (reportedError) return; // ignore
217
+ throw new Error("callback(): The callback was already called.");
218
+ }
219
+
220
+ isDone = true;
221
+ isSync = false;
222
+
223
+ try {
224
+ callback(...callbackArgs);
225
+ } catch (err) {
226
+ isError = true;
227
+ throw err;
228
+ }
229
+ }
230
+ context.callback = innerCallback;
231
+
232
+ context.async = function async() {
233
+ if (isDone) {
234
+ if (reportedError) return; // ignore
235
+ throw new Error("async(): The callback was already called.");
236
+ }
237
+
238
+ isSync = false;
239
+
240
+ return innerCallback;
241
+ };
242
+
243
+ try {
244
+ const result = (function LOADER_EXECUTION() {
245
+ return fn.apply(context, args);
246
+ })();
247
+ if (isSync) {
248
+ isDone = true;
249
+ if (result === undefined) return callback(null);
250
+ if (
251
+ result &&
252
+ typeof result === "object" &&
253
+ typeof result.then === "function"
254
+ ) {
255
+ return result.then((/** @type {EXPECTED_ANY} */ r) => {
256
+ callback(null, r);
257
+ }, callback);
258
+ }
259
+ return callback(null, result);
260
+ }
261
+ } catch (err) {
262
+ if (isError) throw err;
263
+ if (isDone) {
264
+ // loader already finished; print the error since the callback is spent.
265
+ if (typeof err === "object" && /** @type {Error} */ (err).stack) {
266
+ // eslint-disable-next-line no-console
267
+ console.error(/** @type {Error} */ (err).stack);
268
+ } else {
269
+ // eslint-disable-next-line no-console
270
+ console.error(err);
271
+ }
272
+ return;
273
+ }
274
+ isDone = true;
275
+ reportedError = true;
276
+ callback(/** @type {Error} */ (err));
277
+ }
278
+ }
279
+
280
+ /**
281
+ * @param {EXPECTED_ANY[]} args arguments
282
+ * @param {boolean | null=} raw whether the loader wants a Buffer
283
+ * @returns {void}
284
+ */
285
+ function convertArgs(args, raw) {
286
+ if (!raw && Buffer.isBuffer(args[0])) {
287
+ args[0] = utf8BufferToString(args[0]);
288
+ } else if (raw && typeof args[0] === "string") {
289
+ args[0] = Buffer.from(args[0], "utf8");
290
+ }
291
+ }
292
+
293
+ /**
294
+ * @param {ProcessOptions} options process options
295
+ * @param {LoaderContext} loaderContext the loader context
296
+ * @param {EXPECTED_ANY[]} args arguments
297
+ * @param {(err: Error | null, args?: EXPECTED_ANY[]) => void} callback callback
298
+ * @returns {void}
299
+ */
300
+ function iterateNormalLoaders(options, loaderContext, args, callback) {
301
+ while (loaderContext.loaderIndex >= 0) {
302
+ const currentLoaderObject =
303
+ loaderContext.loaders[loaderContext.loaderIndex];
304
+
305
+ if (currentLoaderObject.normalExecuted) {
306
+ loaderContext.loaderIndex--;
307
+ continue;
308
+ }
309
+
310
+ const fn = currentLoaderObject.normal;
311
+ currentLoaderObject.normalExecuted = true;
312
+
313
+ if (!fn) {
314
+ loaderContext.loaderIndex--;
315
+ continue;
316
+ }
317
+
318
+ convertArgs(args, currentLoaderObject.raw);
319
+
320
+ return runSyncOrAsync(fn, loaderContext, args, (err, ...nextArgs) => {
321
+ if (err) return callback(err);
322
+ iterateNormalLoaders(options, loaderContext, nextArgs, callback);
323
+ });
324
+ }
325
+
326
+ return callback(null, args);
327
+ }
328
+
329
+ /**
330
+ * @param {ProcessOptions} options process options
331
+ * @param {LoaderContext} loaderContext the loader context
332
+ * @param {(err: Error | null, args?: EXPECTED_ANY[]) => void} callback callback
333
+ * @returns {void}
334
+ */
335
+ function processResource(options, loaderContext, callback) {
336
+ // set loader index to last loader
337
+ loaderContext.loaderIndex = loaderContext.loaders.length - 1;
338
+
339
+ const { resourcePath } = loaderContext;
340
+
341
+ if (!resourcePath) {
342
+ return iterateNormalLoaders(options, loaderContext, [null], callback);
343
+ }
344
+
345
+ options.processResource(loaderContext, resourcePath, (err, ...args) => {
346
+ if (err) return callback(err);
347
+
348
+ options.resourceBuffer = args[0];
349
+
350
+ iterateNormalLoaders(options, loaderContext, args, callback);
351
+ });
352
+ }
353
+
354
+ /**
355
+ * @param {ProcessOptions} options process options
356
+ * @param {LoaderContext} loaderContext the loader context
357
+ * @param {(err: Error | null, args?: EXPECTED_ANY[]) => void} callback callback
358
+ * @returns {void}
359
+ */
360
+ function iteratePitchingLoaders(options, loaderContext, callback) {
361
+ // Iterative walk over already-pitched loaders without recursion.
362
+ while (loaderContext.loaderIndex < loaderContext.loaders.length) {
363
+ const currentLoaderObject =
364
+ loaderContext.loaders[loaderContext.loaderIndex];
365
+
366
+ if (currentLoaderObject.pitchExecuted) {
367
+ loaderContext.loaderIndex++;
368
+ continue;
369
+ }
370
+
371
+ return loadLoader(currentLoaderObject, (err) => {
372
+ if (err) {
373
+ loaderContext.cacheable(false);
374
+ return callback(err);
375
+ }
376
+ const fn = currentLoaderObject.pitch;
377
+ currentLoaderObject.pitchExecuted = true;
378
+ if (!fn) return iteratePitchingLoaders(options, loaderContext, callback);
379
+
380
+ runSyncOrAsync(
381
+ fn,
382
+ loaderContext,
383
+ [
384
+ loaderContext.remainingRequest,
385
+ loaderContext.previousRequest,
386
+ (currentLoaderObject.data = {})
387
+ ],
388
+ (pitchErr, ...args) => {
389
+ if (pitchErr) return callback(pitchErr);
390
+ // Continue pitching unless the pitch yielded a value (checked by
391
+ // value, not arity, to support sync and async usage).
392
+ let hasArg = false;
393
+ for (let i = 0; i < args.length; i++) {
394
+ if (args[i] !== undefined) {
395
+ hasArg = true;
396
+ break;
397
+ }
398
+ }
399
+ if (hasArg) {
400
+ loaderContext.loaderIndex--;
401
+ iterateNormalLoaders(options, loaderContext, args, callback);
402
+ } else {
403
+ iteratePitchingLoaders(options, loaderContext, callback);
404
+ }
405
+ }
406
+ );
407
+ });
408
+ }
409
+
410
+ // Reached the end: move on to processing the resource itself.
411
+ return processResource(options, loaderContext, callback);
412
+ }
413
+
414
+ /**
415
+ * Join loader requests into a single `!`-separated string for a range of indices.
416
+ * @param {LoaderObject[]} loaders loader objects
417
+ * @param {number} start inclusive start index
418
+ * @param {number} end exclusive end index
419
+ * @param {string} resource resource string
420
+ * @returns {string} joined request
421
+ */
422
+ function joinRequests(loaders, start, end, resource) {
423
+ let result = "";
424
+ for (let i = start; i < end; i++) {
425
+ result += `${loaders[i].request}!`;
426
+ }
427
+ return result + resource;
428
+ }
429
+
430
+ module.exports.LoaderObject = LoaderObject;
431
+
432
+ module.exports.createLoaderContext = createLoaderContext;
433
+
434
+ /**
435
+ * @param {string} resource resource
436
+ * @returns {string} the context (directory) of the resource
437
+ */
438
+ module.exports.getContext = function getContext(resource) {
439
+ return dirname(parseResource(resource).path);
440
+ };
441
+
442
+ /**
443
+ * @typedef {object} LoaderState
444
+ * @property {boolean} cacheable whether the request is cacheable
445
+ * @property {string[]} notCacheableReasons reasons why the request is not cacheable (e.g. paths of loaders that marked it)
446
+ * @property {string[]} fileDependencies collected file dependencies
447
+ * @property {string[]} contextDependencies collected context dependencies
448
+ * @property {string[]} missingDependencies collected missing dependencies
449
+ */
450
+
451
+ // Carries the mutable result state off the loader-visible surface, so loaders
452
+ // and JSON serialization of the context never see it.
453
+ const LOADER_STATE = Symbol("loader context state");
454
+
455
+ /**
456
+ * @param {LoaderContext} loaderContext loader context
457
+ * @returns {LoaderState} the hidden mutable state carried under `LOADER_STATE`
458
+ */
459
+ function getState(loaderContext) {
460
+ return /** @type {EXPECTED_ANY} */ (loaderContext)[LOADER_STATE];
461
+ }
462
+
463
+ /**
464
+ * Phase 1 of loader-context construction (the single place the context shape is
465
+ * defined): augments `base` in place with fresh result state and the dependency
466
+ * methods. Phase 2 lives in `runLoaders`, which sets the resource-derived fields
467
+ * and the `request` accessors once host hooks have populated the context, then
468
+ * freezes it — the accessors are added last so V8 keeps the context in
469
+ * fast-properties mode. Returned unfrozen.
470
+ * @param {EXPECTED_ANY=} base object to augment (the caller's context), if any
471
+ * @returns {LoaderContext} the loader context
472
+ */
473
+ function createLoaderContext(base) {
474
+ /** @type {LoaderState} */
475
+ const state = {
476
+ cacheable: true,
477
+ notCacheableReasons: [],
478
+ fileDependencies: [],
479
+ contextDependencies: [],
480
+ missingDependencies: []
481
+ };
482
+
483
+ const loaderContext = /** @type {LoaderContext} */ (base || {});
484
+ // resource-derived fields and loaders are set by runLoaders (after hooks)
485
+ loaderContext.context = null;
486
+ loaderContext.loaderIndex = 0;
487
+ loaderContext.loaders = [];
488
+ loaderContext.resourcePath = "";
489
+ loaderContext.resourceQuery = "";
490
+ loaderContext.resourceFragment = "";
491
+ loaderContext.async = null;
492
+ loaderContext.callback = null;
493
+ // closures over `state` (not `this`-based): loaders pass these as detached
494
+ // callbacks, e.g. `deps.forEach(this.addDependency)`, so they must not rely on
495
+ // the receiver
496
+ loaderContext.cacheable = (flag) => {
497
+ if (flag === false) {
498
+ state.cacheable = false;
499
+ // attribute the flag to the running loader; absent when the host marks
500
+ // the request outside the loader run (e.g. in a beforeLoaders hook)
501
+ const currentLoader = loaderContext.loaders[loaderContext.loaderIndex];
502
+ if (
503
+ currentLoader &&
504
+ !state.notCacheableReasons.includes(currentLoader.path)
505
+ ) {
506
+ state.notCacheableReasons.push(currentLoader.path);
507
+ }
508
+ }
509
+ };
510
+ loaderContext.dependency = loaderContext.addDependency = (file) => {
511
+ state.fileDependencies.push(file);
512
+ };
513
+ loaderContext.addContextDependency = (context) => {
514
+ state.contextDependencies.push(context);
515
+ };
516
+ loaderContext.addMissingDependency = (missing) => {
517
+ state.missingDependencies.push(missing);
518
+ };
519
+ loaderContext.getDependencies = () => [...state.fileDependencies];
520
+ loaderContext.getContextDependencies = () => [...state.contextDependencies];
521
+ loaderContext.getMissingDependencies = () => [...state.missingDependencies];
522
+ loaderContext.clearDependencies = () => {
523
+ state.fileDependencies.length = 0;
524
+ state.contextDependencies.length = 0;
525
+ state.missingDependencies.length = 0;
526
+ state.cacheable = true;
527
+ state.notCacheableReasons.length = 0;
528
+ };
529
+ Object.defineProperty(loaderContext, LOADER_STATE, { value: state });
530
+ return loaderContext;
531
+ }
532
+
533
+ /**
534
+ * Marks the request as not cacheable with the given reasons instead of
535
+ * attributing the currently running loader (used by the host when the cause
536
+ * lives outside the loader, e.g. in a child compilation of `importModule`).
537
+ * @param {LoaderRunnerLoaderContext} loaderContext loader context
538
+ * @param {string[]} reasons reasons why the request is not cacheable
539
+ * @returns {void}
540
+ */
541
+ module.exports.markNotCacheable = (loaderContext, reasons) => {
542
+ const state = getState(/** @type {LoaderContext} */ (loaderContext));
543
+ state.cacheable = false;
544
+ for (const reason of reasons) {
545
+ if (!state.notCacheableReasons.includes(reason)) {
546
+ state.notCacheableReasons.push(reason);
547
+ }
548
+ }
549
+ };
550
+
551
+ /**
552
+ * The `request`-family accessors. Enumerable because loaders serialize the
553
+ * context; shared (no per-context closures) and `this`-based. Added last, via
554
+ * `Object.defineProperties`, to keep the context in fast-properties mode. Shared
555
+ * (same descriptors), so re-defining them on a reused context is a harmless no-op.
556
+ * @type {PropertyDescriptorMap & ThisType<LoaderContext>}
557
+ */
558
+ const ACCESSORS = {
559
+ resource: {
560
+ enumerable: true,
561
+ get() {
562
+ return (
563
+ escapeHash(this.resourcePath) +
564
+ escapeHash(this.resourceQuery) +
565
+ this.resourceFragment
566
+ );
567
+ },
568
+ set(value) {
569
+ const splitted = value && parseResource(value);
570
+ this.resourcePath = splitted ? splitted.path : "";
571
+ this.resourceQuery = splitted ? splitted.query : "";
572
+ this.resourceFragment = splitted ? splitted.fragment : "";
573
+ }
574
+ },
575
+ request: {
576
+ enumerable: true,
577
+ get() {
578
+ return joinRequests(
579
+ this.loaders,
580
+ 0,
581
+ this.loaders.length,
582
+ this.resource || ""
583
+ );
584
+ }
585
+ },
586
+ remainingRequest: {
587
+ enumerable: true,
588
+ get() {
589
+ return joinRequests(
590
+ this.loaders,
591
+ this.loaderIndex + 1,
592
+ this.loaders.length,
593
+ this.resource
594
+ );
595
+ }
596
+ },
597
+ currentRequest: {
598
+ enumerable: true,
599
+ get() {
600
+ return joinRequests(
601
+ this.loaders,
602
+ this.loaderIndex,
603
+ this.loaders.length,
604
+ this.resource
605
+ );
606
+ }
607
+ },
608
+ previousRequest: {
609
+ enumerable: true,
610
+ get() {
611
+ const { loaders } = this;
612
+ const end = this.loaderIndex;
613
+ if (end === 0) return "";
614
+ let result = loaders[0].request;
615
+ for (let i = 1; i < end; i++) {
616
+ result += `!${loaders[i].request}`;
617
+ }
618
+ return result;
619
+ }
620
+ },
621
+ query: {
622
+ enumerable: true,
623
+ get() {
624
+ const entry = this.loaders[this.loaderIndex];
625
+ return entry.options && typeof entry.options === "object"
626
+ ? entry.options
627
+ : entry.query;
628
+ }
629
+ },
630
+ data: {
631
+ enumerable: true,
632
+ get() {
633
+ return this.loaders[this.loaderIndex].data;
634
+ }
635
+ }
636
+ };
637
+
638
+ /**
639
+ * @param {RunLoaderOptions} options run options
640
+ * @param {(err: Error | null, result: RunLoaderResult) => void} callback callback
641
+ * @returns {void}
642
+ */
643
+ module.exports.runLoaders = function runLoaders(options, callback) {
644
+ // reuse a context already prepared by createLoaderContext (e.g. from
645
+ // NormalModule), else augment the caller-provided context (or a fresh object)
646
+ // in place. State is intentionally preserved across the handoff, so host hooks
647
+ // (e.g. beforeLoaders) can pre-add dependencies or mark the request
648
+ // non-cacheable before the run; a caller re-running on the same context should
649
+ // clearDependencies() first to avoid accumulating stale dependencies.
650
+ const provided = /** @type {EXPECTED_ANY} */ (options.context);
651
+ const loaderContext =
652
+ provided && provided[LOADER_STATE]
653
+ ? /** @type {LoaderContext} */ (provided)
654
+ : createLoaderContext(provided);
655
+ const state = getState(loaderContext);
656
+
657
+ // (re)set iteration + resource fields and map loaders now, after host hooks
658
+ // (e.g. NormalModule's loader/beforeLoaders) have run and may have changed them
659
+ loaderContext.loaderIndex = 0;
660
+ const resource = options.resource || "";
661
+ const splittedResource = resource && parseResource(resource);
662
+ loaderContext.resourcePath = splittedResource ? splittedResource.path : "";
663
+ loaderContext.resourceQuery = splittedResource ? splittedResource.query : "";
664
+ loaderContext.resourceFragment = splittedResource
665
+ ? splittedResource.fragment
666
+ : "";
667
+ loaderContext.context = loaderContext.resourcePath
668
+ ? dirname(loaderContext.resourcePath)
669
+ : null;
670
+ loaderContext.loaders = (options.loaders || []).map(
671
+ (loader) => new LoaderObject(loader)
672
+ );
673
+
674
+ const processResourceFn =
675
+ options.processResource ||
676
+ /** @type {(readResource: EXPECTED_FUNCTION, context: EXPECTED_ANY, res: string, cb: (err: Error | null, ...args: EXPECTED_ANY[]) => void) => void} */
677
+ (
678
+ (readResource, context, res, cb) => {
679
+ context.addDependency(res);
680
+ readResource(res, cb);
681
+ }
682
+ ).bind(null, options.readResource || readFile);
683
+
684
+ // add accessors last (keeps fast properties) and freeze, now that callers
685
+ // (e.g. NormalModule's beforeLoaders) have populated the context
686
+ Object.defineProperties(loaderContext, ACCESSORS);
687
+ Object.preventExtensions(loaderContext);
688
+
689
+ /** @type {ProcessOptions} */
690
+ const processOptions = {
691
+ resourceBuffer: null,
692
+ processResource: processResourceFn
693
+ };
694
+ iteratePitchingLoaders(processOptions, loaderContext, (err, result) => {
695
+ if (err) {
696
+ return callback(err, {
697
+ cacheable: state.cacheable,
698
+ notCacheableReasons: state.notCacheableReasons,
699
+ fileDependencies: state.fileDependencies,
700
+ contextDependencies: state.contextDependencies,
701
+ missingDependencies: state.missingDependencies
702
+ });
703
+ }
704
+ callback(null, {
705
+ result,
706
+ resourceBuffer: processOptions.resourceBuffer,
707
+ cacheable: state.cacheable,
708
+ notCacheableReasons: state.notCacheableReasons,
709
+ fileDependencies: state.fileDependencies,
710
+ contextDependencies: state.contextDependencies,
711
+ missingDependencies: state.missingDependencies
712
+ });
713
+ });
714
+ };