@depup/webpack 5.105.4-depup.37

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 (709) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +38 -0
  3. package/bin/webpack.js +196 -0
  4. package/hot/dev-server.js +90 -0
  5. package/hot/emitter-event-target.js +7 -0
  6. package/hot/emitter.js +2 -0
  7. package/hot/lazy-compilation-node.js +66 -0
  8. package/hot/lazy-compilation-universal.js +18 -0
  9. package/hot/lazy-compilation-web.js +93 -0
  10. package/hot/load-http.js +7 -0
  11. package/hot/log-apply-result.js +49 -0
  12. package/hot/log.js +78 -0
  13. package/hot/only-dev-server.js +118 -0
  14. package/hot/poll.js +41 -0
  15. package/hot/signal.js +66 -0
  16. package/lib/APIPlugin.js +392 -0
  17. package/lib/AbstractMethodError.js +56 -0
  18. package/lib/AsyncDependenciesBlock.js +128 -0
  19. package/lib/AsyncDependencyToInitialChunkError.js +34 -0
  20. package/lib/AutomaticPrefetchPlugin.js +66 -0
  21. package/lib/BannerPlugin.js +138 -0
  22. package/lib/Cache.js +168 -0
  23. package/lib/CacheFacade.js +349 -0
  24. package/lib/CaseSensitiveModulesWarning.js +72 -0
  25. package/lib/Chunk.js +899 -0
  26. package/lib/ChunkGraph.js +1968 -0
  27. package/lib/ChunkGroup.js +615 -0
  28. package/lib/ChunkRenderError.js +38 -0
  29. package/lib/ChunkTemplate.js +181 -0
  30. package/lib/CleanPlugin.js +495 -0
  31. package/lib/CodeGenerationError.js +35 -0
  32. package/lib/CodeGenerationResults.js +167 -0
  33. package/lib/CommentCompilationWarning.js +33 -0
  34. package/lib/CompatibilityPlugin.js +240 -0
  35. package/lib/Compilation.js +5876 -0
  36. package/lib/Compiler.js +1413 -0
  37. package/lib/ConcatenationScope.js +181 -0
  38. package/lib/ConcurrentCompilationError.js +18 -0
  39. package/lib/ConditionalInitFragment.js +120 -0
  40. package/lib/ConstPlugin.js +567 -0
  41. package/lib/ContextExclusionPlugin.js +33 -0
  42. package/lib/ContextModule.js +1411 -0
  43. package/lib/ContextModuleFactory.js +514 -0
  44. package/lib/ContextReplacementPlugin.js +227 -0
  45. package/lib/CssModule.js +179 -0
  46. package/lib/DefinePlugin.js +878 -0
  47. package/lib/DelegatedModule.js +279 -0
  48. package/lib/DelegatedModuleFactoryPlugin.js +116 -0
  49. package/lib/DelegatedPlugin.js +49 -0
  50. package/lib/DependenciesBlock.js +120 -0
  51. package/lib/Dependency.js +390 -0
  52. package/lib/DependencyTemplate.js +71 -0
  53. package/lib/DependencyTemplates.js +67 -0
  54. package/lib/DllEntryPlugin.js +76 -0
  55. package/lib/DllModule.js +175 -0
  56. package/lib/DllModuleFactory.js +38 -0
  57. package/lib/DllPlugin.js +73 -0
  58. package/lib/DllReferencePlugin.js +189 -0
  59. package/lib/DotenvPlugin.js +468 -0
  60. package/lib/DynamicEntryPlugin.js +93 -0
  61. package/lib/EntryOptionPlugin.js +98 -0
  62. package/lib/EntryPlugin.js +72 -0
  63. package/lib/Entrypoint.js +120 -0
  64. package/lib/EnvironmentNotSupportAsyncWarning.js +51 -0
  65. package/lib/EnvironmentPlugin.js +74 -0
  66. package/lib/ErrorHelpers.js +100 -0
  67. package/lib/EvalDevToolModulePlugin.js +135 -0
  68. package/lib/EvalSourceMapDevToolPlugin.js +252 -0
  69. package/lib/ExportsInfo.js +1663 -0
  70. package/lib/ExportsInfoApiPlugin.js +87 -0
  71. package/lib/ExternalModule.js +1169 -0
  72. package/lib/ExternalModuleFactoryPlugin.js +370 -0
  73. package/lib/ExternalsPlugin.js +93 -0
  74. package/lib/FalseIIFEUmdWarning.js +20 -0
  75. package/lib/FileSystemInfo.js +4131 -0
  76. package/lib/FlagAllModulesAsUsedPlugin.js +55 -0
  77. package/lib/FlagDependencyExportsPlugin.js +437 -0
  78. package/lib/FlagDependencyUsagePlugin.js +348 -0
  79. package/lib/FlagEntryExportAsUsedPlugin.js +56 -0
  80. package/lib/Generator.js +188 -0
  81. package/lib/GraphHelpers.js +46 -0
  82. package/lib/HarmonyLinkingError.js +17 -0
  83. package/lib/HookWebpackError.js +121 -0
  84. package/lib/HotModuleReplacementPlugin.js +930 -0
  85. package/lib/HotUpdateChunk.js +16 -0
  86. package/lib/IgnoreErrorModuleFactory.js +39 -0
  87. package/lib/IgnorePlugin.js +105 -0
  88. package/lib/IgnoreWarningsPlugin.js +41 -0
  89. package/lib/InitFragment.js +204 -0
  90. package/lib/InvalidDependenciesModuleWarning.js +44 -0
  91. package/lib/JavascriptMetaInfoPlugin.js +78 -0
  92. package/lib/LibManifestPlugin.js +144 -0
  93. package/lib/LibraryTemplatePlugin.js +48 -0
  94. package/lib/LoaderOptionsPlugin.js +81 -0
  95. package/lib/LoaderTargetPlugin.js +39 -0
  96. package/lib/MainTemplate.js +371 -0
  97. package/lib/ManifestPlugin.js +242 -0
  98. package/lib/Module.js +1319 -0
  99. package/lib/ModuleBuildError.js +83 -0
  100. package/lib/ModuleDependencyError.js +44 -0
  101. package/lib/ModuleDependencyWarning.js +49 -0
  102. package/lib/ModuleError.js +69 -0
  103. package/lib/ModuleFactory.js +57 -0
  104. package/lib/ModuleFilenameHelpers.js +388 -0
  105. package/lib/ModuleGraph.js +1024 -0
  106. package/lib/ModuleGraphConnection.js +199 -0
  107. package/lib/ModuleHashingError.js +31 -0
  108. package/lib/ModuleInfoHeaderPlugin.js +318 -0
  109. package/lib/ModuleNotFoundError.js +90 -0
  110. package/lib/ModuleParseError.js +125 -0
  111. package/lib/ModuleProfile.js +108 -0
  112. package/lib/ModuleRestoreError.js +46 -0
  113. package/lib/ModuleSourceTypeConstants.js +179 -0
  114. package/lib/ModuleStoreError.js +45 -0
  115. package/lib/ModuleTemplate.js +173 -0
  116. package/lib/ModuleTypeConstants.js +190 -0
  117. package/lib/ModuleWarning.js +68 -0
  118. package/lib/MultiCompiler.js +678 -0
  119. package/lib/MultiStats.js +213 -0
  120. package/lib/MultiWatching.js +77 -0
  121. package/lib/NoEmitOnErrorsPlugin.js +30 -0
  122. package/lib/NoModeWarning.js +23 -0
  123. package/lib/NodeStuffInWebError.js +35 -0
  124. package/lib/NodeStuffPlugin.js +587 -0
  125. package/lib/NormalModule.js +1798 -0
  126. package/lib/NormalModuleFactory.js +1455 -0
  127. package/lib/NormalModuleReplacementPlugin.js +75 -0
  128. package/lib/NullFactory.js +24 -0
  129. package/lib/OptimizationStages.js +10 -0
  130. package/lib/OptionsApply.js +24 -0
  131. package/lib/Parser.js +40 -0
  132. package/lib/PlatformPlugin.js +41 -0
  133. package/lib/PrefetchPlugin.js +56 -0
  134. package/lib/ProgressPlugin.js +712 -0
  135. package/lib/ProvidePlugin.js +121 -0
  136. package/lib/RawModule.js +180 -0
  137. package/lib/RecordIdsPlugin.js +216 -0
  138. package/lib/RequestShortener.js +36 -0
  139. package/lib/RequireJsStuffPlugin.js +84 -0
  140. package/lib/ResolverFactory.js +156 -0
  141. package/lib/RuntimeGlobals.js +450 -0
  142. package/lib/RuntimeModule.js +242 -0
  143. package/lib/RuntimePlugin.js +547 -0
  144. package/lib/RuntimeTemplate.js +1288 -0
  145. package/lib/SelfModuleFactory.js +33 -0
  146. package/lib/SingleEntryPlugin.js +8 -0
  147. package/lib/SizeFormatHelpers.js +25 -0
  148. package/lib/SourceMapDevToolModuleOptionsPlugin.js +52 -0
  149. package/lib/SourceMapDevToolPlugin.js +646 -0
  150. package/lib/Stats.js +89 -0
  151. package/lib/Template.js +427 -0
  152. package/lib/TemplatedPathPlugin.js +400 -0
  153. package/lib/UnhandledSchemeError.js +34 -0
  154. package/lib/UnsupportedFeatureWarning.js +35 -0
  155. package/lib/UseStrictPlugin.js +81 -0
  156. package/lib/WarnCaseSensitiveModulesPlugin.js +64 -0
  157. package/lib/WarnDeprecatedOptionPlugin.js +60 -0
  158. package/lib/WarnNoModeSetPlugin.js +27 -0
  159. package/lib/WatchIgnorePlugin.js +155 -0
  160. package/lib/Watching.js +531 -0
  161. package/lib/WebpackError.js +81 -0
  162. package/lib/WebpackIsIncludedPlugin.js +93 -0
  163. package/lib/WebpackOptionsApply.js +941 -0
  164. package/lib/WebpackOptionsDefaulter.js +26 -0
  165. package/lib/asset/AssetBytesGenerator.js +172 -0
  166. package/lib/asset/AssetBytesParser.js +37 -0
  167. package/lib/asset/AssetGenerator.js +816 -0
  168. package/lib/asset/AssetModulesPlugin.js +358 -0
  169. package/lib/asset/AssetParser.js +73 -0
  170. package/lib/asset/AssetSourceGenerator.js +171 -0
  171. package/lib/asset/AssetSourceParser.js +37 -0
  172. package/lib/asset/RawDataUrlModule.js +179 -0
  173. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  174. package/lib/async-modules/AwaitDependenciesInitFragment.js +90 -0
  175. package/lib/async-modules/InferAsyncModulesPlugin.js +54 -0
  176. package/lib/buildChunkGraph.js +1392 -0
  177. package/lib/cache/AddBuildDependenciesPlugin.js +32 -0
  178. package/lib/cache/AddManagedPathsPlugin.js +40 -0
  179. package/lib/cache/IdleFileCachePlugin.js +242 -0
  180. package/lib/cache/MemoryCachePlugin.js +57 -0
  181. package/lib/cache/MemoryWithGcCachePlugin.js +142 -0
  182. package/lib/cache/PackFileCacheStrategy.js +1600 -0
  183. package/lib/cache/ResolverCachePlugin.js +450 -0
  184. package/lib/cache/getLazyHashedEtag.js +91 -0
  185. package/lib/cache/mergeEtags.js +71 -0
  186. package/lib/cli.js +859 -0
  187. package/lib/config/browserslistTargetHandler.js +388 -0
  188. package/lib/config/defaults.js +2086 -0
  189. package/lib/config/normalization.js +681 -0
  190. package/lib/config/target.js +389 -0
  191. package/lib/container/ContainerEntryDependency.js +50 -0
  192. package/lib/container/ContainerEntryModule.js +303 -0
  193. package/lib/container/ContainerEntryModuleFactory.js +27 -0
  194. package/lib/container/ContainerExposedDependency.js +62 -0
  195. package/lib/container/ContainerPlugin.js +118 -0
  196. package/lib/container/ContainerReferencePlugin.js +139 -0
  197. package/lib/container/FallbackDependency.js +66 -0
  198. package/lib/container/FallbackItemDependency.js +34 -0
  199. package/lib/container/FallbackModule.js +193 -0
  200. package/lib/container/FallbackModuleFactory.js +27 -0
  201. package/lib/container/HoistContainerReferencesPlugin.js +256 -0
  202. package/lib/container/ModuleFederationPlugin.js +131 -0
  203. package/lib/container/RemoteModule.js +225 -0
  204. package/lib/container/RemoteRuntimeModule.js +144 -0
  205. package/lib/container/RemoteToExternalDependency.js +33 -0
  206. package/lib/container/options.js +105 -0
  207. package/lib/css/CssGenerator.js +587 -0
  208. package/lib/css/CssLoadingRuntimeModule.js +513 -0
  209. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  210. package/lib/css/CssModulesPlugin.js +939 -0
  211. package/lib/css/CssParser.js +2621 -0
  212. package/lib/css/walkCssTokens.js +1740 -0
  213. package/lib/debug/ProfilingPlugin.js +589 -0
  214. package/lib/dependencies/AMDDefineDependency.js +267 -0
  215. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +504 -0
  216. package/lib/dependencies/AMDPlugin.js +243 -0
  217. package/lib/dependencies/AMDRequireArrayDependency.js +124 -0
  218. package/lib/dependencies/AMDRequireContextDependency.js +69 -0
  219. package/lib/dependencies/AMDRequireDependenciesBlock.js +28 -0
  220. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +425 -0
  221. package/lib/dependencies/AMDRequireDependency.js +189 -0
  222. package/lib/dependencies/AMDRequireItemDependency.js +41 -0
  223. package/lib/dependencies/AMDRuntimeModules.js +50 -0
  224. package/lib/dependencies/CachedConstDependency.js +135 -0
  225. package/lib/dependencies/CommonJsDependencyHelpers.js +65 -0
  226. package/lib/dependencies/CommonJsExportRequireDependency.js +416 -0
  227. package/lib/dependencies/CommonJsExportsDependency.js +184 -0
  228. package/lib/dependencies/CommonJsExportsParserPlugin.js +425 -0
  229. package/lib/dependencies/CommonJsFullRequireDependency.js +162 -0
  230. package/lib/dependencies/CommonJsImportsParserPlugin.js +611 -0
  231. package/lib/dependencies/CommonJsPlugin.js +316 -0
  232. package/lib/dependencies/CommonJsRequireContextDependency.js +73 -0
  233. package/lib/dependencies/CommonJsRequireDependency.js +42 -0
  234. package/lib/dependencies/CommonJsSelfReferenceDependency.js +156 -0
  235. package/lib/dependencies/ConstDependency.js +118 -0
  236. package/lib/dependencies/ContextDependency.js +183 -0
  237. package/lib/dependencies/ContextDependencyHelpers.js +277 -0
  238. package/lib/dependencies/ContextDependencyTemplateAsId.js +63 -0
  239. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +62 -0
  240. package/lib/dependencies/ContextElementDependency.js +147 -0
  241. package/lib/dependencies/CreateRequireParserPlugin.js +356 -0
  242. package/lib/dependencies/CreateScriptUrlDependency.js +75 -0
  243. package/lib/dependencies/CriticalDependencyWarning.js +29 -0
  244. package/lib/dependencies/CssIcssExportDependency.js +539 -0
  245. package/lib/dependencies/CssIcssImportDependency.js +183 -0
  246. package/lib/dependencies/CssIcssSymbolDependency.js +131 -0
  247. package/lib/dependencies/CssImportDependency.js +120 -0
  248. package/lib/dependencies/CssUrlDependency.js +189 -0
  249. package/lib/dependencies/DelegatedSourceDependency.js +33 -0
  250. package/lib/dependencies/DllEntryDependency.js +61 -0
  251. package/lib/dependencies/DynamicExports.js +73 -0
  252. package/lib/dependencies/EntryDependency.js +30 -0
  253. package/lib/dependencies/ExportsInfoDependency.js +161 -0
  254. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  255. package/lib/dependencies/ExternalModuleInitFragment.js +137 -0
  256. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +87 -0
  257. package/lib/dependencies/HarmonyAcceptDependency.js +237 -0
  258. package/lib/dependencies/HarmonyAcceptImportDependency.js +37 -0
  259. package/lib/dependencies/HarmonyCompatibilityDependency.js +91 -0
  260. package/lib/dependencies/HarmonyDetectionParserPlugin.js +103 -0
  261. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +165 -0
  262. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +254 -0
  263. package/lib/dependencies/HarmonyExportExpressionDependency.js +211 -0
  264. package/lib/dependencies/HarmonyExportHeaderDependency.js +78 -0
  265. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +1494 -0
  266. package/lib/dependencies/HarmonyExportInitFragment.js +191 -0
  267. package/lib/dependencies/HarmonyExportSpecifierDependency.js +127 -0
  268. package/lib/dependencies/HarmonyExports.js +46 -0
  269. package/lib/dependencies/HarmonyImportDependency.js +459 -0
  270. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +576 -0
  271. package/lib/dependencies/HarmonyImportSideEffectDependency.js +91 -0
  272. package/lib/dependencies/HarmonyImportSpecifierDependency.js +514 -0
  273. package/lib/dependencies/HarmonyModulesPlugin.js +158 -0
  274. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +39 -0
  275. package/lib/dependencies/ImportContextDependency.js +81 -0
  276. package/lib/dependencies/ImportDependency.js +158 -0
  277. package/lib/dependencies/ImportEagerDependency.js +76 -0
  278. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  279. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +312 -0
  280. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  281. package/lib/dependencies/ImportMetaHotAcceptDependency.js +41 -0
  282. package/lib/dependencies/ImportMetaHotDeclineDependency.js +42 -0
  283. package/lib/dependencies/ImportMetaPlugin.js +447 -0
  284. package/lib/dependencies/ImportParserPlugin.js +602 -0
  285. package/lib/dependencies/ImportPhase.js +125 -0
  286. package/lib/dependencies/ImportPlugin.js +98 -0
  287. package/lib/dependencies/ImportWeakDependency.js +74 -0
  288. package/lib/dependencies/JsonExportsDependency.js +137 -0
  289. package/lib/dependencies/LoaderDependency.js +38 -0
  290. package/lib/dependencies/LoaderImportDependency.js +39 -0
  291. package/lib/dependencies/LoaderPlugin.js +294 -0
  292. package/lib/dependencies/LocalModule.js +60 -0
  293. package/lib/dependencies/LocalModuleDependency.js +84 -0
  294. package/lib/dependencies/LocalModulesHelpers.js +68 -0
  295. package/lib/dependencies/ModuleDecoratorDependency.js +136 -0
  296. package/lib/dependencies/ModuleDependency.js +100 -0
  297. package/lib/dependencies/ModuleDependencyTemplateAsId.js +35 -0
  298. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +39 -0
  299. package/lib/dependencies/ModuleHotAcceptDependency.js +41 -0
  300. package/lib/dependencies/ModuleHotDeclineDependency.js +42 -0
  301. package/lib/dependencies/ModuleInitFragmentDependency.js +87 -0
  302. package/lib/dependencies/NullDependency.js +42 -0
  303. package/lib/dependencies/PrefetchDependency.js +27 -0
  304. package/lib/dependencies/ProvidedDependency.js +156 -0
  305. package/lib/dependencies/PureExpressionDependency.js +161 -0
  306. package/lib/dependencies/RequireContextDependency.js +38 -0
  307. package/lib/dependencies/RequireContextDependencyParserPlugin.js +69 -0
  308. package/lib/dependencies/RequireContextPlugin.js +167 -0
  309. package/lib/dependencies/RequireEnsureDependenciesBlock.js +29 -0
  310. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +145 -0
  311. package/lib/dependencies/RequireEnsureDependency.js +115 -0
  312. package/lib/dependencies/RequireEnsureItemDependency.js +36 -0
  313. package/lib/dependencies/RequireEnsurePlugin.js +86 -0
  314. package/lib/dependencies/RequireHeaderDependency.js +70 -0
  315. package/lib/dependencies/RequireIncludeDependency.js +79 -0
  316. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +100 -0
  317. package/lib/dependencies/RequireIncludePlugin.js +63 -0
  318. package/lib/dependencies/RequireResolveContextDependency.js +67 -0
  319. package/lib/dependencies/RequireResolveDependency.js +58 -0
  320. package/lib/dependencies/RequireResolveHeaderDependency.js +81 -0
  321. package/lib/dependencies/RuntimeRequirementsDependency.js +85 -0
  322. package/lib/dependencies/StaticExportsDependency.js +72 -0
  323. package/lib/dependencies/SystemPlugin.js +168 -0
  324. package/lib/dependencies/SystemRuntimeModule.js +35 -0
  325. package/lib/dependencies/URLContextDependency.js +65 -0
  326. package/lib/dependencies/URLDependency.js +165 -0
  327. package/lib/dependencies/URLPlugin.js +67 -0
  328. package/lib/dependencies/UnsupportedDependency.js +82 -0
  329. package/lib/dependencies/WebAssemblyExportImportedDependency.js +93 -0
  330. package/lib/dependencies/WebAssemblyImportDependency.js +108 -0
  331. package/lib/dependencies/WebpackIsIncludedDependency.js +84 -0
  332. package/lib/dependencies/WorkerDependency.js +141 -0
  333. package/lib/dependencies/WorkerPlugin.js +565 -0
  334. package/lib/dependencies/getFunctionExpression.js +66 -0
  335. package/lib/dependencies/processExportInfo.js +67 -0
  336. package/lib/electron/ElectronTargetPlugin.js +71 -0
  337. package/lib/errors/BuildCycleError.js +30 -0
  338. package/lib/esm/ExportWebpackRequireRuntimeModule.js +30 -0
  339. package/lib/esm/ModuleChunkFormatPlugin.js +273 -0
  340. package/lib/esm/ModuleChunkLoadingPlugin.js +143 -0
  341. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +426 -0
  342. package/lib/formatLocation.js +67 -0
  343. package/lib/hmr/HotModuleReplacement.runtime.js +419 -0
  344. package/lib/hmr/HotModuleReplacementRuntimeModule.js +42 -0
  345. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +471 -0
  346. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  347. package/lib/hmr/LazyCompilationPlugin.js +473 -0
  348. package/lib/hmr/lazyCompilationBackend.js +167 -0
  349. package/lib/ids/ChunkModuleIdRangePlugin.js +94 -0
  350. package/lib/ids/DeterministicChunkIdsPlugin.js +73 -0
  351. package/lib/ids/DeterministicModuleIdsPlugin.js +98 -0
  352. package/lib/ids/HashedModuleIdsPlugin.js +85 -0
  353. package/lib/ids/IdHelpers.js +492 -0
  354. package/lib/ids/NamedChunkIdsPlugin.js +92 -0
  355. package/lib/ids/NamedModuleIdsPlugin.js +68 -0
  356. package/lib/ids/NaturalChunkIdsPlugin.js +35 -0
  357. package/lib/ids/NaturalModuleIdsPlugin.js +40 -0
  358. package/lib/ids/OccurrenceChunkIdsPlugin.js +86 -0
  359. package/lib/ids/OccurrenceModuleIdsPlugin.js +168 -0
  360. package/lib/ids/SyncModuleIdsPlugin.js +161 -0
  361. package/lib/index.js +681 -0
  362. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +153 -0
  363. package/lib/javascript/BasicEvaluatedExpression.js +603 -0
  364. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  365. package/lib/javascript/ChunkHelpers.js +45 -0
  366. package/lib/javascript/CommonJsChunkFormatPlugin.js +148 -0
  367. package/lib/javascript/EnableChunkLoadingPlugin.js +127 -0
  368. package/lib/javascript/JavascriptGenerator.js +277 -0
  369. package/lib/javascript/JavascriptModulesPlugin.js +1905 -0
  370. package/lib/javascript/JavascriptParser.js +5476 -0
  371. package/lib/javascript/JavascriptParserHelpers.js +129 -0
  372. package/lib/javascript/StartupHelpers.js +178 -0
  373. package/lib/json/JsonData.js +74 -0
  374. package/lib/json/JsonGenerator.js +234 -0
  375. package/lib/json/JsonModulesPlugin.js +66 -0
  376. package/lib/json/JsonParser.js +93 -0
  377. package/lib/library/AbstractLibraryPlugin.js +339 -0
  378. package/lib/library/AmdLibraryPlugin.js +181 -0
  379. package/lib/library/AssignLibraryPlugin.js +445 -0
  380. package/lib/library/EnableLibraryPlugin.js +306 -0
  381. package/lib/library/ExportPropertyLibraryPlugin.js +116 -0
  382. package/lib/library/JsonpLibraryPlugin.js +92 -0
  383. package/lib/library/ModuleLibraryPlugin.js +438 -0
  384. package/lib/library/SystemLibraryPlugin.js +256 -0
  385. package/lib/library/UmdLibraryPlugin.js +355 -0
  386. package/lib/logging/Logger.js +223 -0
  387. package/lib/logging/createConsoleLogger.js +217 -0
  388. package/lib/logging/runtime.js +45 -0
  389. package/lib/logging/truncateArgs.js +83 -0
  390. package/lib/node/CommonJsChunkLoadingPlugin.js +120 -0
  391. package/lib/node/NodeEnvironmentPlugin.js +73 -0
  392. package/lib/node/NodeSourcePlugin.js +19 -0
  393. package/lib/node/NodeTargetPlugin.js +102 -0
  394. package/lib/node/NodeTemplatePlugin.js +42 -0
  395. package/lib/node/NodeWatchFileSystem.js +198 -0
  396. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +286 -0
  397. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +123 -0
  398. package/lib/node/ReadFileCompileWasmPlugin.js +127 -0
  399. package/lib/node/RequireChunkLoadingRuntimeModule.js +239 -0
  400. package/lib/node/nodeConsole.js +185 -0
  401. package/lib/optimize/AggressiveMergingPlugin.js +98 -0
  402. package/lib/optimize/AggressiveSplittingPlugin.js +352 -0
  403. package/lib/optimize/ConcatenatedModule.js +2290 -0
  404. package/lib/optimize/EnsureChunkConditionsPlugin.js +88 -0
  405. package/lib/optimize/FlagIncludedChunksPlugin.js +137 -0
  406. package/lib/optimize/InnerGraph.js +368 -0
  407. package/lib/optimize/InnerGraphPlugin.js +455 -0
  408. package/lib/optimize/LimitChunkCountPlugin.js +302 -0
  409. package/lib/optimize/MangleExportsPlugin.js +194 -0
  410. package/lib/optimize/MergeDuplicateChunksPlugin.js +138 -0
  411. package/lib/optimize/MinChunkSizePlugin.js +121 -0
  412. package/lib/optimize/MinMaxSizeWarning.js +35 -0
  413. package/lib/optimize/ModuleConcatenationPlugin.js +971 -0
  414. package/lib/optimize/RealContentHashPlugin.js +488 -0
  415. package/lib/optimize/RemoveEmptyChunksPlugin.js +60 -0
  416. package/lib/optimize/RemoveParentModulesPlugin.js +216 -0
  417. package/lib/optimize/RuntimeChunkPlugin.js +52 -0
  418. package/lib/optimize/SideEffectsFlagPlugin.js +417 -0
  419. package/lib/optimize/SplitChunksPlugin.js +1836 -0
  420. package/lib/performance/AssetsOverSizeLimitWarning.js +37 -0
  421. package/lib/performance/EntrypointsOverSizeLimitWarning.js +40 -0
  422. package/lib/performance/NoAsyncChunksWarning.js +21 -0
  423. package/lib/performance/SizeLimitsPlugin.js +183 -0
  424. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +46 -0
  425. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +95 -0
  426. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +56 -0
  427. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +52 -0
  428. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +46 -0
  429. package/lib/rules/BasicEffectRulePlugin.js +56 -0
  430. package/lib/rules/BasicMatcherRulePlugin.js +68 -0
  431. package/lib/rules/ObjectMatcherRulePlugin.js +79 -0
  432. package/lib/rules/RuleSetCompiler.js +447 -0
  433. package/lib/rules/UseEffectRulePlugin.js +236 -0
  434. package/lib/runtime/AsyncModuleRuntimeModule.js +199 -0
  435. package/lib/runtime/AutoPublicPathRuntimeModule.js +90 -0
  436. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  437. package/lib/runtime/ChunkNameRuntimeModule.js +28 -0
  438. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +40 -0
  439. package/lib/runtime/CompatRuntimeModule.js +83 -0
  440. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +69 -0
  441. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  442. package/lib/runtime/CreateScriptUrlRuntimeModule.js +38 -0
  443. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +42 -0
  444. package/lib/runtime/EnsureChunkRuntimeModule.js +69 -0
  445. package/lib/runtime/GetChunkFilenameRuntimeModule.js +299 -0
  446. package/lib/runtime/GetFullHashRuntimeModule.js +31 -0
  447. package/lib/runtime/GetMainFilenameRuntimeModule.js +49 -0
  448. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +99 -0
  449. package/lib/runtime/GlobalRuntimeModule.js +47 -0
  450. package/lib/runtime/HasOwnPropertyRuntimeModule.js +35 -0
  451. package/lib/runtime/HelperRuntimeModule.js +18 -0
  452. package/lib/runtime/LoadScriptRuntimeModule.js +174 -0
  453. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +232 -0
  454. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +39 -0
  455. package/lib/runtime/NonceRuntimeModule.js +24 -0
  456. package/lib/runtime/OnChunksLoadedRuntimeModule.js +78 -0
  457. package/lib/runtime/PublicPathRuntimeModule.js +38 -0
  458. package/lib/runtime/RelativeUrlRuntimeModule.js +44 -0
  459. package/lib/runtime/RuntimeIdRuntimeModule.js +33 -0
  460. package/lib/runtime/StartupChunkDependenciesPlugin.js +88 -0
  461. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +77 -0
  462. package/lib/runtime/StartupEntrypointRuntimeModule.js +54 -0
  463. package/lib/runtime/SystemContextRuntimeModule.js +23 -0
  464. package/lib/runtime/ToBinaryRuntimeModule.js +72 -0
  465. package/lib/schemes/DataUriPlugin.js +47 -0
  466. package/lib/schemes/FileUriPlugin.js +54 -0
  467. package/lib/schemes/HttpUriPlugin.js +1410 -0
  468. package/lib/schemes/VirtualUrlPlugin.js +248 -0
  469. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  470. package/lib/serialization/ArraySerializer.js +38 -0
  471. package/lib/serialization/BinaryMiddleware.js +1164 -0
  472. package/lib/serialization/DateObjectSerializer.js +28 -0
  473. package/lib/serialization/ErrorObjectSerializer.js +49 -0
  474. package/lib/serialization/FileMiddleware.js +766 -0
  475. package/lib/serialization/MapObjectSerializer.js +48 -0
  476. package/lib/serialization/NullPrototypeObjectSerializer.js +53 -0
  477. package/lib/serialization/ObjectMiddleware.js +877 -0
  478. package/lib/serialization/PlainObjectSerializer.js +119 -0
  479. package/lib/serialization/RegExpObjectSerializer.js +29 -0
  480. package/lib/serialization/Serializer.js +82 -0
  481. package/lib/serialization/SerializerMiddleware.js +226 -0
  482. package/lib/serialization/SetObjectSerializer.js +40 -0
  483. package/lib/serialization/SingleItemMiddleware.js +36 -0
  484. package/lib/serialization/types.js +13 -0
  485. package/lib/sharing/ConsumeSharedFallbackDependency.js +33 -0
  486. package/lib/sharing/ConsumeSharedModule.js +344 -0
  487. package/lib/sharing/ConsumeSharedPlugin.js +380 -0
  488. package/lib/sharing/ConsumeSharedRuntimeModule.js +358 -0
  489. package/lib/sharing/ProvideForSharedDependency.js +33 -0
  490. package/lib/sharing/ProvideSharedDependency.js +80 -0
  491. package/lib/sharing/ProvideSharedModule.js +196 -0
  492. package/lib/sharing/ProvideSharedModuleFactory.js +37 -0
  493. package/lib/sharing/ProvideSharedPlugin.js +248 -0
  494. package/lib/sharing/SharePlugin.js +91 -0
  495. package/lib/sharing/ShareRuntimeModule.js +152 -0
  496. package/lib/sharing/resolveMatchedConfigs.js +106 -0
  497. package/lib/sharing/utils.js +421 -0
  498. package/lib/stats/DefaultStatsFactoryPlugin.js +2791 -0
  499. package/lib/stats/DefaultStatsPresetPlugin.js +417 -0
  500. package/lib/stats/DefaultStatsPrinterPlugin.js +1860 -0
  501. package/lib/stats/StatsFactory.js +406 -0
  502. package/lib/stats/StatsPrinter.js +300 -0
  503. package/lib/url/URLParserPlugin.js +266 -0
  504. package/lib/util/AppendOnlyStackedSet.js +78 -0
  505. package/lib/util/ArrayHelpers.js +46 -0
  506. package/lib/util/ArrayQueue.js +104 -0
  507. package/lib/util/AsyncQueue.js +411 -0
  508. package/lib/util/Hash.js +68 -0
  509. package/lib/util/IterableHelpers.js +46 -0
  510. package/lib/util/LazyBucketSortedSet.js +272 -0
  511. package/lib/util/LazySet.js +236 -0
  512. package/lib/util/MapHelpers.js +34 -0
  513. package/lib/util/ParallelismFactorCalculator.js +70 -0
  514. package/lib/util/Queue.js +52 -0
  515. package/lib/util/Semaphore.js +51 -0
  516. package/lib/util/SetHelpers.js +94 -0
  517. package/lib/util/SortableSet.js +176 -0
  518. package/lib/util/StackedCacheMap.js +140 -0
  519. package/lib/util/StackedMap.js +164 -0
  520. package/lib/util/StringXor.js +103 -0
  521. package/lib/util/TupleQueue.js +70 -0
  522. package/lib/util/TupleSet.js +185 -0
  523. package/lib/util/URLAbsoluteSpecifier.js +86 -0
  524. package/lib/util/WeakTupleMap.js +227 -0
  525. package/lib/util/binarySearchBounds.js +136 -0
  526. package/lib/util/chainedImports.js +99 -0
  527. package/lib/util/cleverMerge.js +676 -0
  528. package/lib/util/comparators.js +645 -0
  529. package/lib/util/compileBooleanMatcher.js +313 -0
  530. package/lib/util/concatenate.js +232 -0
  531. package/lib/util/conventions.js +126 -0
  532. package/lib/util/create-schema-validation.js +41 -0
  533. package/lib/util/createHash.js +91 -0
  534. package/lib/util/dataURL.js +39 -0
  535. package/lib/util/deprecation.js +350 -0
  536. package/lib/util/deterministicGrouping.js +561 -0
  537. package/lib/util/extractSourceMap.js +318 -0
  538. package/lib/util/extractUrlAndGlobal.js +18 -0
  539. package/lib/util/findGraphRoots.js +211 -0
  540. package/lib/util/fs.js +675 -0
  541. package/lib/util/generateDebugId.js +33 -0
  542. package/lib/util/hash/BatchedHash.js +115 -0
  543. package/lib/util/hash/BulkUpdateHash.js +145 -0
  544. package/lib/util/hash/DebugHash.js +75 -0
  545. package/lib/util/hash/hash-digest.js +217 -0
  546. package/lib/util/hash/md4.js +20 -0
  547. package/lib/util/hash/wasm-hash.js +232 -0
  548. package/lib/util/hash/xxhash64.js +20 -0
  549. package/lib/util/identifier.js +471 -0
  550. package/lib/util/internalSerializables.js +222 -0
  551. package/lib/util/magicComment.js +25 -0
  552. package/lib/util/makeSerializable.js +60 -0
  553. package/lib/util/memoize.js +36 -0
  554. package/lib/util/nonNumericOnlyHash.js +22 -0
  555. package/lib/util/numberHash.js +95 -0
  556. package/lib/util/objectToMap.js +15 -0
  557. package/lib/util/processAsyncTree.js +68 -0
  558. package/lib/util/propertyAccess.js +30 -0
  559. package/lib/util/propertyName.js +76 -0
  560. package/lib/util/registerExternalSerializer.js +334 -0
  561. package/lib/util/removeBOM.js +25 -0
  562. package/lib/util/runtime.js +717 -0
  563. package/lib/util/semver.js +604 -0
  564. package/lib/util/serialization.js +153 -0
  565. package/lib/util/smartGrouping.js +221 -0
  566. package/lib/util/source.js +62 -0
  567. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  568. package/lib/validateSchema.js +177 -0
  569. package/lib/wasm/EnableWasmLoadingPlugin.js +146 -0
  570. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +154 -0
  571. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +74 -0
  572. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +212 -0
  573. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +209 -0
  574. package/lib/wasm-async/AsyncWebAssemblyParser.js +80 -0
  575. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +107 -0
  576. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +20 -0
  577. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +422 -0
  578. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +91 -0
  579. package/lib/wasm-sync/WebAssemblyGenerator.js +535 -0
  580. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +111 -0
  581. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +236 -0
  582. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +151 -0
  583. package/lib/wasm-sync/WebAssemblyParser.js +201 -0
  584. package/lib/wasm-sync/WebAssemblyUtils.js +66 -0
  585. package/lib/web/FetchCompileAsyncWasmPlugin.js +70 -0
  586. package/lib/web/FetchCompileWasmPlugin.js +86 -0
  587. package/lib/web/JsonpChunkLoadingPlugin.js +101 -0
  588. package/lib/web/JsonpChunkLoadingRuntimeModule.js +455 -0
  589. package/lib/web/JsonpTemplatePlugin.js +37 -0
  590. package/lib/webpack.js +227 -0
  591. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +110 -0
  592. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +231 -0
  593. package/lib/webworker/WebWorkerTemplatePlugin.js +26 -0
  594. package/module.d.ts +238 -0
  595. package/package.json +258 -0
  596. package/schemas/WebpackOptions.check.d.ts +7 -0
  597. package/schemas/WebpackOptions.check.js +6 -0
  598. package/schemas/WebpackOptions.json +6179 -0
  599. package/schemas/_container.json +155 -0
  600. package/schemas/_sharing.json +118 -0
  601. package/schemas/plugins/BannerPlugin.check.d.ts +7 -0
  602. package/schemas/plugins/BannerPlugin.check.js +6 -0
  603. package/schemas/plugins/BannerPlugin.json +115 -0
  604. package/schemas/plugins/DllPlugin.check.d.ts +7 -0
  605. package/schemas/plugins/DllPlugin.check.js +6 -0
  606. package/schemas/plugins/DllPlugin.json +36 -0
  607. package/schemas/plugins/DllReferencePlugin.check.d.ts +7 -0
  608. package/schemas/plugins/DllReferencePlugin.check.js +6 -0
  609. package/schemas/plugins/DllReferencePlugin.json +206 -0
  610. package/schemas/plugins/IgnorePlugin.check.d.ts +7 -0
  611. package/schemas/plugins/IgnorePlugin.check.js +6 -0
  612. package/schemas/plugins/IgnorePlugin.json +34 -0
  613. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +7 -0
  614. package/schemas/plugins/LoaderOptionsPlugin.check.js +6 -0
  615. package/schemas/plugins/LoaderOptionsPlugin.json +27 -0
  616. package/schemas/plugins/ManifestPlugin.check.d.ts +7 -0
  617. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  618. package/schemas/plugins/ManifestPlugin.json +98 -0
  619. package/schemas/plugins/ProgressPlugin.check.d.ts +7 -0
  620. package/schemas/plugins/ProgressPlugin.check.js +6 -0
  621. package/schemas/plugins/ProgressPlugin.json +65 -0
  622. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +7 -0
  623. package/schemas/plugins/SourceMapDevToolPlugin.check.js +6 -0
  624. package/schemas/plugins/SourceMapDevToolPlugin.json +168 -0
  625. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +7 -0
  626. package/schemas/plugins/WatchIgnorePlugin.check.js +6 -0
  627. package/schemas/plugins/WatchIgnorePlugin.json +25 -0
  628. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +7 -0
  629. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +6 -0
  630. package/schemas/plugins/asset/AssetGeneratorOptions.json +3 -0
  631. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +7 -0
  632. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +6 -0
  633. package/schemas/plugins/asset/AssetInlineGeneratorOptions.json +3 -0
  634. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +7 -0
  635. package/schemas/plugins/asset/AssetParserOptions.check.js +6 -0
  636. package/schemas/plugins/asset/AssetParserOptions.json +3 -0
  637. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +7 -0
  638. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +6 -0
  639. package/schemas/plugins/asset/AssetResourceGeneratorOptions.json +3 -0
  640. package/schemas/plugins/container/ContainerPlugin.check.d.ts +7 -0
  641. package/schemas/plugins/container/ContainerPlugin.check.js +6 -0
  642. package/schemas/plugins/container/ContainerPlugin.json +294 -0
  643. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +7 -0
  644. package/schemas/plugins/container/ContainerReferencePlugin.check.js +6 -0
  645. package/schemas/plugins/container/ContainerReferencePlugin.json +132 -0
  646. package/schemas/plugins/container/ExternalsType.check.d.ts +7 -0
  647. package/schemas/plugins/container/ExternalsType.check.js +6 -0
  648. package/schemas/plugins/container/ExternalsType.json +3 -0
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +7 -0
  650. package/schemas/plugins/container/ModuleFederationPlugin.check.js +6 -0
  651. package/schemas/plugins/container/ModuleFederationPlugin.json +525 -0
  652. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  653. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  654. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  655. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  656. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  657. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  658. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  659. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  660. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  661. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  662. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  663. package/schemas/plugins/css/CssParserOptions.json +3 -0
  664. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +7 -0
  665. package/schemas/plugins/debug/ProfilingPlugin.check.js +6 -0
  666. package/schemas/plugins/debug/ProfilingPlugin.json +12 -0
  667. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  668. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  669. package/schemas/plugins/ids/HashedModuleIdsPlugin.json +57 -0
  670. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +7 -0
  671. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +6 -0
  672. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.json +11 -0
  673. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +7 -0
  674. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +6 -0
  675. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.json +11 -0
  676. package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +7 -0
  677. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  678. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  679. package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +7 -0
  680. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  681. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  682. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +7 -0
  683. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +6 -0
  684. package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +23 -0
  685. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +7 -0
  686. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +6 -0
  687. package/schemas/plugins/optimize/LimitChunkCountPlugin.json +21 -0
  688. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +7 -0
  689. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +6 -0
  690. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.json +11 -0
  691. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +7 -0
  692. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +6 -0
  693. package/schemas/plugins/optimize/MinChunkSizePlugin.json +20 -0
  694. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +7 -0
  695. package/schemas/plugins/schemes/HttpUriPlugin.check.js +6 -0
  696. package/schemas/plugins/schemes/HttpUriPlugin.json +74 -0
  697. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  698. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  699. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  700. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +7 -0
  701. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +6 -0
  702. package/schemas/plugins/sharing/ConsumeSharedPlugin.json +120 -0
  703. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +7 -0
  704. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +6 -0
  705. package/schemas/plugins/sharing/ProvideSharedPlugin.json +94 -0
  706. package/schemas/plugins/sharing/SharePlugin.check.d.ts +7 -0
  707. package/schemas/plugins/sharing/SharePlugin.check.js +6 -0
  708. package/schemas/plugins/sharing/SharePlugin.json +133 -0
  709. package/types.d.ts +20217 -0
@@ -0,0 +1,1410 @@
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 EventEmitter = require("events");
9
+ const { basename, extname } = require("path");
10
+ const {
11
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
12
+ createBrotliDecompress,
13
+ createGunzip,
14
+ createInflate
15
+ } = require("zlib");
16
+ const NormalModule = require("../NormalModule");
17
+ const createSchemaValidation = require("../util/create-schema-validation");
18
+ const createHash = require("../util/createHash");
19
+ const { dirname, join, mkdirp } = require("../util/fs");
20
+ const memoize = require("../util/memoize");
21
+
22
+ /** @typedef {import("http").IncomingMessage} IncomingMessage */
23
+ /** @typedef {import("http").OutgoingHttpHeaders} OutgoingHttpHeaders */
24
+ /** @typedef {import("http").RequestOptions} RequestOptions */
25
+ /** @typedef {import("net").Socket} Socket */
26
+ /** @typedef {import("stream").Readable} Readable */
27
+ /** @typedef {import("../../declarations/plugins/schemes/HttpUriPlugin").HttpUriPluginOptions} HttpUriPluginOptions */
28
+ /** @typedef {import("../Compiler")} Compiler */
29
+ /** @typedef {import("../FileSystemInfo").Snapshot} Snapshot */
30
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
31
+ /** @typedef {import("../NormalModuleFactory").ResourceDataWithData} ResourceDataWithData */
32
+ /** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
33
+
34
+ const getHttp = memoize(() => require("http"));
35
+ const getHttps = memoize(() => require("https"));
36
+
37
+ const MAX_REDIRECTS = 5;
38
+
39
+ /** @typedef {(url: URL, requestOptions: RequestOptions, callback: (incomingMessage: IncomingMessage) => void) => EventEmitter} Fetch */
40
+
41
+ /**
42
+ * @typedef {object} EventsMap
43
+ * @property {[Error]} error
44
+ */
45
+
46
+ /**
47
+ * @param {typeof import("http") | typeof import("https")} request request
48
+ * @param {string | URL | undefined} proxy proxy
49
+ * @returns {Fetch} fn
50
+ */
51
+ const proxyFetch = (request, proxy) => (url, options, callback) => {
52
+ /** @type {EventEmitter<EventsMap>} */
53
+ const eventEmitter = new EventEmitter();
54
+
55
+ /**
56
+ * @param {Socket=} socket socket
57
+ * @returns {void}
58
+ */
59
+ const doRequest = (socket) => {
60
+ request
61
+ .get(url, { ...options, ...(socket && { socket }) }, callback)
62
+ .on("error", eventEmitter.emit.bind(eventEmitter, "error"));
63
+ };
64
+
65
+ if (proxy) {
66
+ const { hostname: host, port } = new URL(proxy);
67
+
68
+ getHttp()
69
+ .request({
70
+ host, // IP address of proxy server
71
+ port, // port of proxy server
72
+ method: "CONNECT",
73
+ path: url.host
74
+ })
75
+ .on("connect", (res, socket) => {
76
+ if (res.statusCode === 200) {
77
+ // connected to proxy server
78
+ doRequest(socket);
79
+ }
80
+ })
81
+ .on("error", (err) => {
82
+ eventEmitter.emit(
83
+ "error",
84
+ new Error(
85
+ `Failed to connect to proxy server "${proxy}": ${err.message}`
86
+ )
87
+ );
88
+ })
89
+ .end();
90
+ } else {
91
+ doRequest();
92
+ }
93
+
94
+ return eventEmitter;
95
+ };
96
+
97
+ /** @typedef {() => void} InProgressWriteItem */
98
+ /** @type {InProgressWriteItem[] | undefined} */
99
+ let inProgressWrite;
100
+
101
+ const validate = createSchemaValidation(
102
+ require("../../schemas/plugins/schemes/HttpUriPlugin.check"),
103
+ () => require("../../schemas/plugins/schemes/HttpUriPlugin.json"),
104
+ {
105
+ name: "Http Uri Plugin",
106
+ baseDataPath: "options"
107
+ }
108
+ );
109
+
110
+ /**
111
+ * @param {string} str path
112
+ * @returns {string} safe path
113
+ */
114
+ const toSafePath = (str) =>
115
+ str.replace(/^[^a-z0-9]+|[^a-z0-9]+$/gi, "").replace(/[^a-z0-9._-]+/gi, "_");
116
+
117
+ /**
118
+ * @param {Buffer} content content
119
+ * @returns {string} integrity
120
+ */
121
+ const computeIntegrity = (content) => {
122
+ const hash = createHash("sha512");
123
+ hash.update(content);
124
+ const integrity = `sha512-${hash.digest("base64")}`;
125
+ return integrity;
126
+ };
127
+
128
+ /**
129
+ * @param {Buffer} content content
130
+ * @param {string} integrity integrity
131
+ * @returns {boolean} true, if integrity matches
132
+ */
133
+ const verifyIntegrity = (content, integrity) => {
134
+ if (integrity === "ignore") return true;
135
+ return computeIntegrity(content) === integrity;
136
+ };
137
+
138
+ /**
139
+ * @param {string} str input
140
+ * @returns {Record<string, string>} parsed
141
+ */
142
+ const parseKeyValuePairs = (str) => {
143
+ /** @type {Record<string, string>} */
144
+ const result = {};
145
+ for (const item of str.split(",")) {
146
+ const i = item.indexOf("=");
147
+ if (i >= 0) {
148
+ const key = item.slice(0, i).trim();
149
+ const value = item.slice(i + 1).trim();
150
+ result[key] = value;
151
+ } else {
152
+ const key = item.trim();
153
+ if (!key) continue;
154
+ result[key] = key;
155
+ }
156
+ }
157
+ return result;
158
+ };
159
+
160
+ /**
161
+ * @param {string | undefined} cacheControl Cache-Control header
162
+ * @param {number} requestTime timestamp of request
163
+ * @returns {{ storeCache: boolean, storeLock: boolean, validUntil: number }} Logic for storing in cache and lockfile cache
164
+ */
165
+ const parseCacheControl = (cacheControl, requestTime) => {
166
+ // When false resource is not stored in cache
167
+ let storeCache = true;
168
+ // When false resource is not stored in lockfile cache
169
+ let storeLock = true;
170
+ // Resource is only revalidated, after that timestamp and when upgrade is chosen
171
+ let validUntil = 0;
172
+ if (cacheControl) {
173
+ const parsed = parseKeyValuePairs(cacheControl);
174
+ if (parsed["no-cache"]) storeCache = storeLock = false;
175
+ if (parsed["max-age"] && !Number.isNaN(Number(parsed["max-age"]))) {
176
+ validUntil = requestTime + Number(parsed["max-age"]) * 1000;
177
+ }
178
+ if (parsed["must-revalidate"]) validUntil = 0;
179
+ }
180
+ return {
181
+ storeLock,
182
+ storeCache,
183
+ validUntil
184
+ };
185
+ };
186
+
187
+ /**
188
+ * @typedef {object} LockfileEntry
189
+ * @property {string} resolved
190
+ * @property {string} integrity
191
+ * @property {string} contentType
192
+ */
193
+
194
+ /**
195
+ * @param {LockfileEntry} a first lockfile entry
196
+ * @param {LockfileEntry} b second lockfile entry
197
+ * @returns {boolean} true when equal, otherwise false
198
+ */
199
+ const areLockfileEntriesEqual = (a, b) =>
200
+ a.resolved === b.resolved &&
201
+ a.integrity === b.integrity &&
202
+ a.contentType === b.contentType;
203
+
204
+ /**
205
+ * @param {LockfileEntry} entry lockfile entry
206
+ * @returns {`resolved: ${string}, integrity: ${string}, contentType: ${string}`} stringified entry
207
+ */
208
+ const entryToString = (entry) =>
209
+ `resolved: ${entry.resolved}, integrity: ${entry.integrity}, contentType: ${entry.contentType}`;
210
+
211
+ /**
212
+ * Sanitize URL for inclusion in error messages
213
+ * @param {string} href URL string to sanitize
214
+ * @returns {string} sanitized URL text for logs/errors
215
+ */
216
+ const sanitizeUrlForError = (href) => {
217
+ try {
218
+ const u = new URL(href);
219
+ return `${u.protocol}//${u.host}`;
220
+ } catch (_err) {
221
+ return String(href)
222
+ .slice(0, 200)
223
+ .replace(/[\r\n]/g, "");
224
+ }
225
+ };
226
+
227
+ class Lockfile {
228
+ constructor() {
229
+ /** @type {number} */
230
+ this.version = 1;
231
+ /** @type {Map<string, LockfileEntry | "ignore" | "no-cache">} */
232
+ this.entries = new Map();
233
+ }
234
+
235
+ /**
236
+ * @param {string} content content of the lockfile
237
+ * @returns {Lockfile} lockfile
238
+ */
239
+ static parse(content) {
240
+ // TODO handle merge conflicts
241
+ const data = JSON.parse(content);
242
+ if (data.version !== 1) {
243
+ throw new Error(`Unsupported lockfile version ${data.version}`);
244
+ }
245
+ const lockfile = new Lockfile();
246
+ for (const key of Object.keys(data)) {
247
+ if (key === "version") continue;
248
+ const entry = data[key];
249
+ lockfile.entries.set(
250
+ key,
251
+ typeof entry === "string"
252
+ ? entry
253
+ : {
254
+ resolved: key,
255
+ ...entry
256
+ }
257
+ );
258
+ }
259
+ return lockfile;
260
+ }
261
+
262
+ /**
263
+ * @returns {string} stringified lockfile
264
+ */
265
+ toString() {
266
+ let str = "{\n";
267
+ const entries = [...this.entries].sort(([a], [b]) => (a < b ? -1 : 1));
268
+ for (const [key, entry] of entries) {
269
+ if (typeof entry === "string") {
270
+ str += ` ${JSON.stringify(key)}: ${JSON.stringify(entry)},\n`;
271
+ } else {
272
+ str += ` ${JSON.stringify(key)}: { `;
273
+ if (entry.resolved !== key) {
274
+ str += `"resolved": ${JSON.stringify(entry.resolved)}, `;
275
+ }
276
+ str += `"integrity": ${JSON.stringify(
277
+ entry.integrity
278
+ )}, "contentType": ${JSON.stringify(entry.contentType)} },\n`;
279
+ }
280
+ }
281
+ str += ` "version": ${this.version}\n}\n`;
282
+ return str;
283
+ }
284
+ }
285
+
286
+ /**
287
+ * @template R
288
+ * @typedef {(err: Error | null, result?: R) => void} FnWithoutKeyCallback
289
+ */
290
+
291
+ /**
292
+ * @template R
293
+ * @typedef {(callback: FnWithoutKeyCallback<R>) => void} FnWithoutKey
294
+ */
295
+
296
+ /**
297
+ * @template R
298
+ * @param {FnWithoutKey<R>} fn function
299
+ * @returns {FnWithoutKey<R>} cached function
300
+ */
301
+ const cachedWithoutKey = (fn) => {
302
+ let inFlight = false;
303
+ /** @type {Error | undefined} */
304
+ let cachedError;
305
+ /** @type {R | undefined} */
306
+ let cachedResult;
307
+ /** @type {FnWithoutKeyCallback<R>[] | undefined} */
308
+ let cachedCallbacks;
309
+ return (callback) => {
310
+ if (inFlight) {
311
+ if (cachedResult !== undefined) return callback(null, cachedResult);
312
+ if (cachedError !== undefined) return callback(cachedError);
313
+ if (cachedCallbacks === undefined) cachedCallbacks = [callback];
314
+ else cachedCallbacks.push(callback);
315
+ return;
316
+ }
317
+ inFlight = true;
318
+ fn((err, result) => {
319
+ if (err) cachedError = err;
320
+ else cachedResult = result;
321
+ const callbacks = cachedCallbacks;
322
+ cachedCallbacks = undefined;
323
+ callback(err, result);
324
+ if (callbacks !== undefined) for (const cb of callbacks) cb(err, result);
325
+ });
326
+ };
327
+ };
328
+
329
+ /**
330
+ * @template R
331
+ * @typedef {(err: Error | null, result?: R) => void} FnWithKeyCallback
332
+ */
333
+
334
+ /**
335
+ * @template T
336
+ * @template R
337
+ * @typedef {(item: T, callback: FnWithKeyCallback<R>) => void} FnWithKey
338
+ */
339
+
340
+ /**
341
+ * @template T
342
+ * @template R
343
+ * @param {FnWithKey<T, R>} fn function
344
+ * @param {FnWithKey<T, R>=} forceFn function for the second try
345
+ * @returns {FnWithKey<T, R> & { force: FnWithKey<T, R> }} cached function
346
+ */
347
+ const cachedWithKey = (fn, forceFn = fn) => {
348
+ /**
349
+ * @template R
350
+ * @typedef {{ result?: R, error?: Error, callbacks?: FnWithKeyCallback<R>[], force?: true }} CacheEntry
351
+ */
352
+ /** @type {Map<T, CacheEntry<R>>} */
353
+ const cache = new Map();
354
+ /**
355
+ * @param {T} arg arg
356
+ * @param {FnWithKeyCallback<R>} callback callback
357
+ * @returns {void}
358
+ */
359
+ const resultFn = (arg, callback) => {
360
+ const cacheEntry = cache.get(arg);
361
+ if (cacheEntry !== undefined) {
362
+ if (cacheEntry.result !== undefined) {
363
+ return callback(null, cacheEntry.result);
364
+ }
365
+ if (cacheEntry.error !== undefined) return callback(cacheEntry.error);
366
+ if (cacheEntry.callbacks === undefined) cacheEntry.callbacks = [callback];
367
+ else cacheEntry.callbacks.push(callback);
368
+ return;
369
+ }
370
+ /** @type {CacheEntry<R>} */
371
+ const newCacheEntry = {
372
+ result: undefined,
373
+ error: undefined,
374
+ callbacks: undefined
375
+ };
376
+ cache.set(arg, newCacheEntry);
377
+ fn(arg, (err, result) => {
378
+ if (err) newCacheEntry.error = err;
379
+ else newCacheEntry.result = result;
380
+ const callbacks = newCacheEntry.callbacks;
381
+ newCacheEntry.callbacks = undefined;
382
+ callback(err, result);
383
+ if (callbacks !== undefined) for (const cb of callbacks) cb(err, result);
384
+ });
385
+ };
386
+ /**
387
+ * @param {T} arg arg
388
+ * @param {FnWithKeyCallback<R>} callback callback
389
+ * @returns {void}
390
+ */
391
+ resultFn.force = (arg, callback) => {
392
+ const cacheEntry = cache.get(arg);
393
+ if (cacheEntry !== undefined && cacheEntry.force) {
394
+ if (cacheEntry.result !== undefined) {
395
+ return callback(null, cacheEntry.result);
396
+ }
397
+ if (cacheEntry.error !== undefined) return callback(cacheEntry.error);
398
+ if (cacheEntry.callbacks === undefined) cacheEntry.callbacks = [callback];
399
+ else cacheEntry.callbacks.push(callback);
400
+ return;
401
+ }
402
+ /** @type {CacheEntry<R>} */
403
+ const newCacheEntry = {
404
+ result: undefined,
405
+ error: undefined,
406
+ callbacks: undefined,
407
+ force: true
408
+ };
409
+ cache.set(arg, newCacheEntry);
410
+ forceFn(arg, (err, result) => {
411
+ if (err) newCacheEntry.error = err;
412
+ else newCacheEntry.result = result;
413
+ const callbacks = newCacheEntry.callbacks;
414
+ newCacheEntry.callbacks = undefined;
415
+ callback(err, result);
416
+ if (callbacks !== undefined) for (const cb of callbacks) cb(err, result);
417
+ });
418
+ };
419
+ return resultFn;
420
+ };
421
+
422
+ /**
423
+ * @typedef {object} LockfileCache
424
+ * @property {Lockfile} lockfile lockfile
425
+ * @property {Snapshot} snapshot snapshot
426
+ */
427
+
428
+ /**
429
+ * @typedef {object} ResolveContentResult
430
+ * @property {LockfileEntry} entry lockfile entry
431
+ * @property {Buffer} content content
432
+ * @property {boolean} storeLock need store lockfile
433
+ */
434
+
435
+ /** @typedef {{ storeCache: boolean, storeLock: boolean, validUntil: number, etag: string | undefined, fresh: boolean }} FetchResultMeta */
436
+ /** @typedef {FetchResultMeta & { location: string }} RedirectFetchResult */
437
+ /** @typedef {FetchResultMeta & { entry: LockfileEntry, content: Buffer }} ContentFetchResult */
438
+ /** @typedef {RedirectFetchResult | ContentFetchResult} FetchResult */
439
+
440
+ /** @typedef {(uri: string) => boolean} AllowedUriFn */
441
+
442
+ const PLUGIN_NAME = "HttpUriPlugin";
443
+
444
+ class HttpUriPlugin {
445
+ /**
446
+ * @param {HttpUriPluginOptions} options options
447
+ */
448
+ constructor(options) {
449
+ validate(options);
450
+ /** @type {HttpUriPluginOptions} */
451
+ this.options = options;
452
+ }
453
+
454
+ /**
455
+ * Apply the plugin
456
+ * @param {Compiler} compiler the compiler instance
457
+ * @returns {void}
458
+ */
459
+ apply(compiler) {
460
+ const proxy =
461
+ this.options.proxy || process.env.http_proxy || process.env.HTTP_PROXY;
462
+ /**
463
+ * @type {{ scheme: "http" | "https", fetch: Fetch }[]}
464
+ */
465
+ const schemes = [
466
+ {
467
+ scheme: "http",
468
+ fetch: proxyFetch(getHttp(), proxy)
469
+ },
470
+ {
471
+ scheme: "https",
472
+ fetch: proxyFetch(getHttps(), proxy)
473
+ }
474
+ ];
475
+ /** @type {LockfileCache} */
476
+ let lockfileCache;
477
+ compiler.hooks.compilation.tap(
478
+ PLUGIN_NAME,
479
+ (compilation, { normalModuleFactory }) => {
480
+ const intermediateFs =
481
+ /** @type {IntermediateFileSystem} */
482
+ (compiler.intermediateFileSystem);
483
+ const fs = compilation.inputFileSystem;
484
+ const cache = compilation.getCache(`webpack.${PLUGIN_NAME}`);
485
+ const logger = compilation.getLogger(`webpack.${PLUGIN_NAME}`);
486
+ /** @type {string} */
487
+ const lockfileLocation =
488
+ this.options.lockfileLocation ||
489
+ join(
490
+ intermediateFs,
491
+ compiler.context,
492
+ compiler.name
493
+ ? `${toSafePath(compiler.name)}.webpack.lock`
494
+ : "webpack.lock"
495
+ );
496
+ /** @type {string | false} */
497
+ const cacheLocation =
498
+ this.options.cacheLocation !== undefined
499
+ ? this.options.cacheLocation
500
+ : `${lockfileLocation}.data`;
501
+ const upgrade = this.options.upgrade || false;
502
+ const frozen = this.options.frozen || false;
503
+ const hashFunction = "sha512";
504
+ const hashDigest = "hex";
505
+ const hashDigestLength = 20;
506
+ const allowedUris = this.options.allowedUris;
507
+
508
+ let warnedAboutEol = false;
509
+
510
+ /** @type {Map<string, string>} */
511
+ const cacheKeyCache = new Map();
512
+ /**
513
+ * @param {string} url the url
514
+ * @returns {string} the key
515
+ */
516
+ const getCacheKey = (url) => {
517
+ const cachedResult = cacheKeyCache.get(url);
518
+ if (cachedResult !== undefined) return cachedResult;
519
+ const result = _getCacheKey(url);
520
+ cacheKeyCache.set(url, result);
521
+ return result;
522
+ };
523
+
524
+ /**
525
+ * @param {string} url the url
526
+ * @returns {string} the key
527
+ */
528
+ const _getCacheKey = (url) => {
529
+ const parsedUrl = new URL(url);
530
+ const folder = toSafePath(parsedUrl.origin);
531
+ const name = toSafePath(parsedUrl.pathname);
532
+ const query = toSafePath(parsedUrl.search);
533
+ let ext = extname(name);
534
+ if (ext.length > 20) ext = "";
535
+ const basename = ext ? name.slice(0, -ext.length) : name;
536
+ const hash = createHash(hashFunction);
537
+ hash.update(url);
538
+ const digest = hash.digest(hashDigest).slice(0, hashDigestLength);
539
+ return `${folder.slice(-50)}/${`${basename}${
540
+ query ? `_${query}` : ""
541
+ }`.slice(0, 150)}_${digest}${ext}`;
542
+ };
543
+
544
+ const getLockfile = cachedWithoutKey(
545
+ /**
546
+ * @param {(err: Error | null, lockfile?: Lockfile) => void} callback callback
547
+ * @returns {void}
548
+ */
549
+ (callback) => {
550
+ const readLockfile = () => {
551
+ intermediateFs.readFile(lockfileLocation, (err, buffer) => {
552
+ if (err && err.code !== "ENOENT") {
553
+ compilation.missingDependencies.add(lockfileLocation);
554
+ return callback(err);
555
+ }
556
+ compilation.fileDependencies.add(lockfileLocation);
557
+ compilation.fileSystemInfo.createSnapshot(
558
+ compiler.fsStartTime,
559
+ buffer ? [lockfileLocation] : [],
560
+ [],
561
+ buffer ? [] : [lockfileLocation],
562
+ { timestamp: true },
563
+ (err, s) => {
564
+ if (err) return callback(err);
565
+ const lockfile = buffer
566
+ ? Lockfile.parse(buffer.toString("utf8"))
567
+ : new Lockfile();
568
+ lockfileCache = {
569
+ lockfile,
570
+ snapshot: /** @type {Snapshot} */ (s)
571
+ };
572
+ callback(null, lockfile);
573
+ }
574
+ );
575
+ });
576
+ };
577
+ if (lockfileCache) {
578
+ compilation.fileSystemInfo.checkSnapshotValid(
579
+ lockfileCache.snapshot,
580
+ (err, valid) => {
581
+ if (err) return callback(err);
582
+ if (!valid) return readLockfile();
583
+ callback(null, lockfileCache.lockfile);
584
+ }
585
+ );
586
+ } else {
587
+ readLockfile();
588
+ }
589
+ }
590
+ );
591
+
592
+ /** @typedef {Map<string, LockfileEntry | "ignore" | "no-cache">} LockfileUpdates */
593
+
594
+ /** @type {LockfileUpdates | undefined} */
595
+ let lockfileUpdates;
596
+
597
+ /**
598
+ * @param {Lockfile} lockfile lockfile instance
599
+ * @param {string} url url to store
600
+ * @param {LockfileEntry | "ignore" | "no-cache"} entry lockfile entry
601
+ */
602
+ const storeLockEntry = (lockfile, url, entry) => {
603
+ const oldEntry = lockfile.entries.get(url);
604
+ if (lockfileUpdates === undefined) lockfileUpdates = new Map();
605
+ lockfileUpdates.set(url, entry);
606
+ lockfile.entries.set(url, entry);
607
+ if (!oldEntry) {
608
+ logger.log(`${url} added to lockfile`);
609
+ } else if (typeof oldEntry === "string") {
610
+ if (typeof entry === "string") {
611
+ logger.log(`${url} updated in lockfile: ${oldEntry} -> ${entry}`);
612
+ } else {
613
+ logger.log(
614
+ `${url} updated in lockfile: ${oldEntry} -> ${entry.resolved}`
615
+ );
616
+ }
617
+ } else if (typeof entry === "string") {
618
+ logger.log(
619
+ `${url} updated in lockfile: ${oldEntry.resolved} -> ${entry}`
620
+ );
621
+ } else if (oldEntry.resolved !== entry.resolved) {
622
+ logger.log(
623
+ `${url} updated in lockfile: ${oldEntry.resolved} -> ${entry.resolved}`
624
+ );
625
+ } else if (oldEntry.integrity !== entry.integrity) {
626
+ logger.log(`${url} updated in lockfile: content changed`);
627
+ } else if (oldEntry.contentType !== entry.contentType) {
628
+ logger.log(
629
+ `${url} updated in lockfile: ${oldEntry.contentType} -> ${entry.contentType}`
630
+ );
631
+ } else {
632
+ logger.log(`${url} updated in lockfile`);
633
+ }
634
+ };
635
+
636
+ /**
637
+ * @param {Lockfile} lockfile lockfile
638
+ * @param {string} url url
639
+ * @param {ResolveContentResult} result result
640
+ * @param {(err: Error | null, result?: ResolveContentResult) => void} callback callback
641
+ * @returns {void}
642
+ */
643
+ const storeResult = (lockfile, url, result, callback) => {
644
+ if (result.storeLock) {
645
+ storeLockEntry(lockfile, url, result.entry);
646
+ if (!cacheLocation || !result.content) {
647
+ return callback(null, result);
648
+ }
649
+ const key = getCacheKey(result.entry.resolved);
650
+ const filePath = join(intermediateFs, cacheLocation, key);
651
+ mkdirp(intermediateFs, dirname(intermediateFs, filePath), (err) => {
652
+ if (err) return callback(err);
653
+ intermediateFs.writeFile(filePath, result.content, (err) => {
654
+ if (err) return callback(err);
655
+ callback(null, result);
656
+ });
657
+ });
658
+ } else {
659
+ storeLockEntry(lockfile, url, "no-cache");
660
+ callback(null, result);
661
+ }
662
+ };
663
+
664
+ for (const { scheme, fetch } of schemes) {
665
+ /**
666
+ * @param {string} location Location header value (relative or absolute)
667
+ * @param {string} base current absolute URL
668
+ * @returns {string} absolute, validated redirect target
669
+ */
670
+ const validateRedirectLocation = (location, base) => {
671
+ /** @type {URL} */
672
+ let nextUrl;
673
+ try {
674
+ nextUrl = new URL(location, base);
675
+ } catch (err) {
676
+ throw new Error(
677
+ `Invalid redirect URL: ${sanitizeUrlForError(location)}`,
678
+ { cause: err }
679
+ );
680
+ }
681
+ if (nextUrl.protocol !== "http:" && nextUrl.protocol !== "https:") {
682
+ throw new Error(
683
+ `Redirected URL uses disallowed protocol: ${sanitizeUrlForError(nextUrl.href)}`
684
+ );
685
+ }
686
+ if (!isAllowed(nextUrl.href)) {
687
+ throw new Error(
688
+ `${nextUrl.href} doesn't match the allowedUris policy after redirect. These URIs are allowed:\n${allowedUris
689
+ .map((uri) => ` - ${uri}`)
690
+ .join("\n")}`
691
+ );
692
+ }
693
+ return nextUrl.href;
694
+ };
695
+ /**
696
+ * @param {string} url URL
697
+ * @param {string | null} integrity integrity
698
+ * @param {(err: Error | null, resolveContentResult?: ResolveContentResult) => void} callback callback
699
+ * @param {number=} redirectCount number of followed redirects
700
+ */
701
+ const resolveContent = (
702
+ url,
703
+ integrity,
704
+ callback,
705
+ redirectCount = 0
706
+ ) => {
707
+ /**
708
+ * @param {Error | null} err error
709
+ * @param {FetchResult=} _result fetch result
710
+ * @returns {void}
711
+ */
712
+ const handleResult = (err, _result) => {
713
+ if (err) return callback(err);
714
+
715
+ const result = /** @type {FetchResult} */ (_result);
716
+
717
+ if ("location" in result) {
718
+ // Validate redirect target before following
719
+ /** @type {string} */
720
+ let absolute;
721
+ try {
722
+ absolute = validateRedirectLocation(result.location, url);
723
+ } catch (err_) {
724
+ return callback(/** @type {Error} */ (err_));
725
+ }
726
+ if (redirectCount >= MAX_REDIRECTS) {
727
+ return callback(new Error("Too many redirects"));
728
+ }
729
+ return resolveContent(
730
+ absolute,
731
+ integrity,
732
+ (err, innerResult) => {
733
+ if (err) return callback(err);
734
+ const { entry, content, storeLock } =
735
+ /** @type {ResolveContentResult} */ (innerResult);
736
+ callback(null, {
737
+ entry,
738
+ content,
739
+ storeLock: storeLock && result.storeLock
740
+ });
741
+ },
742
+ redirectCount + 1
743
+ );
744
+ }
745
+
746
+ if (
747
+ !result.fresh &&
748
+ integrity &&
749
+ result.entry.integrity !== integrity &&
750
+ !verifyIntegrity(result.content, integrity)
751
+ ) {
752
+ return fetchContent.force(url, handleResult);
753
+ }
754
+
755
+ return callback(null, {
756
+ entry: result.entry,
757
+ content: result.content,
758
+ storeLock: result.storeLock
759
+ });
760
+ };
761
+
762
+ fetchContent(url, handleResult);
763
+ };
764
+
765
+ /**
766
+ * @param {string} url URL
767
+ * @param {FetchResult | RedirectFetchResult | undefined} cachedResult result from cache
768
+ * @param {(err: Error | null, fetchResult?: FetchResult) => void} callback callback
769
+ * @returns {void}
770
+ */
771
+ const fetchContentRaw = (url, cachedResult, callback) => {
772
+ const requestTime = Date.now();
773
+ /** @type {OutgoingHttpHeaders} */
774
+ const headers = {
775
+ "accept-encoding": "gzip, deflate, br",
776
+ "user-agent": "webpack"
777
+ };
778
+
779
+ if (cachedResult && cachedResult.etag) {
780
+ headers["if-none-match"] = cachedResult.etag;
781
+ }
782
+
783
+ fetch(new URL(url), { headers }, (res) => {
784
+ const etag = res.headers.etag;
785
+ const location = res.headers.location;
786
+ const cacheControl = res.headers["cache-control"];
787
+ const { storeLock, storeCache, validUntil } = parseCacheControl(
788
+ cacheControl,
789
+ requestTime
790
+ );
791
+ /**
792
+ * @param {Partial<Pick<FetchResultMeta, "fresh">> & (Pick<RedirectFetchResult, "location"> | Pick<ContentFetchResult, "content" | "entry">)} partialResult result
793
+ * @returns {void}
794
+ */
795
+ const finishWith = (partialResult) => {
796
+ if ("location" in partialResult) {
797
+ logger.debug(
798
+ `GET ${url} [${res.statusCode}] -> ${partialResult.location}`
799
+ );
800
+ } else {
801
+ logger.debug(
802
+ `GET ${url} [${res.statusCode}] ${Math.ceil(
803
+ partialResult.content.length / 1024
804
+ )} kB${!storeLock ? " no-cache" : ""}`
805
+ );
806
+ }
807
+ const result = {
808
+ ...partialResult,
809
+ fresh: true,
810
+ storeLock,
811
+ storeCache,
812
+ validUntil,
813
+ etag
814
+ };
815
+ if (!storeCache) {
816
+ logger.log(
817
+ `${url} can't be stored in cache, due to Cache-Control header: ${cacheControl}`
818
+ );
819
+ return callback(null, result);
820
+ }
821
+ cache.store(
822
+ url,
823
+ null,
824
+ {
825
+ ...result,
826
+ fresh: false
827
+ },
828
+ (err) => {
829
+ if (err) {
830
+ logger.warn(
831
+ `${url} can't be stored in cache: ${err.message}`
832
+ );
833
+ logger.debug(err.stack);
834
+ }
835
+ callback(null, result);
836
+ }
837
+ );
838
+ };
839
+ if (res.statusCode === 304) {
840
+ const result = /** @type {FetchResult} */ (cachedResult);
841
+ if (
842
+ result.validUntil < validUntil ||
843
+ result.storeLock !== storeLock ||
844
+ result.storeCache !== storeCache ||
845
+ result.etag !== etag
846
+ ) {
847
+ return finishWith(result);
848
+ }
849
+ logger.debug(`GET ${url} [${res.statusCode}] (unchanged)`);
850
+ return callback(null, { ...result, fresh: true });
851
+ }
852
+ if (
853
+ location &&
854
+ res.statusCode &&
855
+ res.statusCode >= 301 &&
856
+ res.statusCode <= 308
857
+ ) {
858
+ /** @type {string} */
859
+ let absolute;
860
+ try {
861
+ absolute = validateRedirectLocation(location, url);
862
+ } catch (err) {
863
+ logger.log(
864
+ `GET ${url} [${res.statusCode}] -> ${String(location)} (rejected: ${/** @type {Error} */ (err).message})`
865
+ );
866
+ return callback(/** @type {Error} */ (err));
867
+ }
868
+ const result = { location: absolute };
869
+ if (
870
+ !cachedResult ||
871
+ !("location" in cachedResult) ||
872
+ cachedResult.location !== result.location ||
873
+ cachedResult.validUntil < validUntil ||
874
+ cachedResult.storeLock !== storeLock ||
875
+ cachedResult.storeCache !== storeCache ||
876
+ cachedResult.etag !== etag
877
+ ) {
878
+ return finishWith(result);
879
+ }
880
+ logger.debug(`GET ${url} [${res.statusCode}] (unchanged)`);
881
+ return callback(null, {
882
+ ...result,
883
+ fresh: true,
884
+ storeLock,
885
+ storeCache,
886
+ validUntil,
887
+ etag
888
+ });
889
+ }
890
+ const contentType = res.headers["content-type"] || "";
891
+ /** @type {Buffer[]} */
892
+ const bufferArr = [];
893
+
894
+ const contentEncoding = res.headers["content-encoding"];
895
+ /** @type {Readable} */
896
+ let stream = res;
897
+ if (contentEncoding === "gzip") {
898
+ stream = stream.pipe(createGunzip());
899
+ } else if (contentEncoding === "br") {
900
+ stream = stream.pipe(createBrotliDecompress());
901
+ } else if (contentEncoding === "deflate") {
902
+ stream = stream.pipe(createInflate());
903
+ }
904
+
905
+ stream.on(
906
+ "data",
907
+ /**
908
+ * @param {Buffer} chunk chunk
909
+ */
910
+ (chunk) => {
911
+ bufferArr.push(chunk);
912
+ }
913
+ );
914
+
915
+ stream.on("end", () => {
916
+ if (!res.complete) {
917
+ logger.log(`GET ${url} [${res.statusCode}] (terminated)`);
918
+ return callback(new Error(`${url} request was terminated`));
919
+ }
920
+
921
+ const content = Buffer.concat(bufferArr);
922
+
923
+ if (res.statusCode !== 200) {
924
+ logger.log(`GET ${url} [${res.statusCode}]`);
925
+ return callback(
926
+ new Error(
927
+ `${url} request status code = ${
928
+ res.statusCode
929
+ }\n${content.toString("utf8")}`
930
+ )
931
+ );
932
+ }
933
+
934
+ const integrity = computeIntegrity(content);
935
+ const entry = { resolved: url, integrity, contentType };
936
+
937
+ finishWith({
938
+ entry,
939
+ content
940
+ });
941
+ });
942
+ }).on("error", (err) => {
943
+ logger.log(`GET ${url} (error)`);
944
+ err.message += `\nwhile fetching ${url}`;
945
+ callback(err);
946
+ });
947
+ };
948
+
949
+ const fetchContent = cachedWithKey(
950
+ /**
951
+ * @param {string} url URL
952
+ * @param {(err: Error | null, result?: FetchResult) => void} callback callback
953
+ * @returns {void}
954
+ */
955
+ (url, callback) => {
956
+ cache.get(url, null, (err, cachedResult) => {
957
+ if (err) return callback(err);
958
+ if (cachedResult) {
959
+ const isValid = cachedResult.validUntil >= Date.now();
960
+ if (isValid) return callback(null, cachedResult);
961
+ }
962
+ fetchContentRaw(url, cachedResult, callback);
963
+ });
964
+ },
965
+ (url, callback) => fetchContentRaw(url, undefined, callback)
966
+ );
967
+
968
+ /**
969
+ * @param {string} uri uri
970
+ * @returns {boolean} true when allowed, otherwise false
971
+ */
972
+ const isAllowed = (uri) => {
973
+ /** @type {URL} */
974
+ let parsedUri;
975
+ try {
976
+ // Parse the URI to prevent userinfo bypass attacks
977
+ // (e.g., http://allowed@malicious/path where @malicious is the actual host)
978
+ parsedUri = new URL(uri);
979
+ } catch (_err) {
980
+ return false;
981
+ }
982
+ for (const allowed of allowedUris) {
983
+ if (typeof allowed === "string") {
984
+ /** @type {URL} */
985
+ let parsedAllowed;
986
+ try {
987
+ parsedAllowed = new URL(allowed);
988
+ } catch (_err) {
989
+ continue;
990
+ }
991
+ if (parsedUri.href.startsWith(parsedAllowed.href)) {
992
+ return true;
993
+ }
994
+ } else if (typeof allowed === "function") {
995
+ if (allowed(parsedUri.href)) return true;
996
+ } else if (allowed.test(parsedUri.href)) {
997
+ return true;
998
+ }
999
+ }
1000
+ return false;
1001
+ };
1002
+
1003
+ /** @typedef {{ entry: LockfileEntry, content: Buffer }} Info */
1004
+
1005
+ const getInfo = cachedWithKey(
1006
+ /**
1007
+ * @param {string} url the url
1008
+ * @param {(err: Error | null, info?: Info) => void} callback callback
1009
+ * @returns {void}
1010
+ */
1011
+ // eslint-disable-next-line no-loop-func
1012
+ (url, callback) => {
1013
+ if (!isAllowed(url)) {
1014
+ return callback(
1015
+ new Error(
1016
+ `${url} doesn't match the allowedUris policy. These URIs are allowed:\n${allowedUris
1017
+ .map((uri) => ` - ${uri}`)
1018
+ .join("\n")}`
1019
+ )
1020
+ );
1021
+ }
1022
+ getLockfile((err, _lockfile) => {
1023
+ if (err) return callback(err);
1024
+ const lockfile = /** @type {Lockfile} */ (_lockfile);
1025
+ const entryOrString = lockfile.entries.get(url);
1026
+ if (!entryOrString) {
1027
+ if (frozen) {
1028
+ return callback(
1029
+ new Error(
1030
+ `${url} has no lockfile entry and lockfile is frozen`
1031
+ )
1032
+ );
1033
+ }
1034
+ resolveContent(url, null, (err, result) => {
1035
+ if (err) return callback(err);
1036
+ storeResult(
1037
+ /** @type {Lockfile} */
1038
+ (lockfile),
1039
+ url,
1040
+ /** @type {ResolveContentResult} */
1041
+ (result),
1042
+ callback
1043
+ );
1044
+ });
1045
+ return;
1046
+ }
1047
+ if (typeof entryOrString === "string") {
1048
+ const entryTag = entryOrString;
1049
+ resolveContent(url, null, (err, _result) => {
1050
+ if (err) return callback(err);
1051
+ const result =
1052
+ /** @type {ResolveContentResult} */
1053
+ (_result);
1054
+ if (!result.storeLock || entryTag === "ignore") {
1055
+ return callback(null, result);
1056
+ }
1057
+ if (frozen) {
1058
+ return callback(
1059
+ new Error(
1060
+ `${url} used to have ${entryTag} lockfile entry and has content now, but lockfile is frozen`
1061
+ )
1062
+ );
1063
+ }
1064
+ if (!upgrade) {
1065
+ return callback(
1066
+ new Error(
1067
+ `${url} used to have ${entryTag} lockfile entry and has content now.
1068
+ This should be reflected in the lockfile, so this lockfile entry must be upgraded, but upgrading is not enabled.
1069
+ Remove this line from the lockfile to force upgrading.`
1070
+ )
1071
+ );
1072
+ }
1073
+ storeResult(lockfile, url, result, callback);
1074
+ });
1075
+ return;
1076
+ }
1077
+ let entry = entryOrString;
1078
+ /**
1079
+ * @param {Buffer=} lockedContent locked content
1080
+ */
1081
+ const doFetch = (lockedContent) => {
1082
+ resolveContent(url, entry.integrity, (err, _result) => {
1083
+ if (err) {
1084
+ if (lockedContent) {
1085
+ logger.warn(
1086
+ `Upgrade request to ${url} failed: ${err.message}`
1087
+ );
1088
+ logger.debug(err.stack);
1089
+ return callback(null, {
1090
+ entry,
1091
+ content: lockedContent
1092
+ });
1093
+ }
1094
+ return callback(err);
1095
+ }
1096
+ const result =
1097
+ /** @type {ResolveContentResult} */
1098
+ (_result);
1099
+ if (!result.storeLock) {
1100
+ // When the lockfile entry should be no-cache
1101
+ // we need to update the lockfile
1102
+ if (frozen) {
1103
+ return callback(
1104
+ new Error(
1105
+ `${url} has a lockfile entry and is no-cache now, but lockfile is frozen\nLockfile: ${entryToString(
1106
+ entry
1107
+ )}`
1108
+ )
1109
+ );
1110
+ }
1111
+ storeResult(lockfile, url, result, callback);
1112
+ return;
1113
+ }
1114
+ if (!areLockfileEntriesEqual(result.entry, entry)) {
1115
+ // When the lockfile entry is outdated
1116
+ // we need to update the lockfile
1117
+ if (frozen) {
1118
+ return callback(
1119
+ new Error(
1120
+ `${url} has an outdated lockfile entry, but lockfile is frozen\nLockfile: ${entryToString(
1121
+ entry
1122
+ )}\nExpected: ${entryToString(result.entry)}`
1123
+ )
1124
+ );
1125
+ }
1126
+ storeResult(lockfile, url, result, callback);
1127
+ return;
1128
+ }
1129
+ if (!lockedContent && cacheLocation) {
1130
+ // When the lockfile cache content is missing
1131
+ // we need to update the lockfile
1132
+ if (frozen) {
1133
+ return callback(
1134
+ new Error(
1135
+ `${url} is missing content in the lockfile cache, but lockfile is frozen\nLockfile: ${entryToString(
1136
+ entry
1137
+ )}`
1138
+ )
1139
+ );
1140
+ }
1141
+ storeResult(lockfile, url, result, callback);
1142
+ return;
1143
+ }
1144
+ return callback(null, result);
1145
+ });
1146
+ };
1147
+ if (cacheLocation) {
1148
+ // When there is a lockfile cache
1149
+ // we read the content from there
1150
+ const key = getCacheKey(entry.resolved);
1151
+ const filePath = join(intermediateFs, cacheLocation, key);
1152
+ fs.readFile(filePath, (err, result) => {
1153
+ if (err) {
1154
+ if (err.code === "ENOENT") return doFetch();
1155
+ return callback(err);
1156
+ }
1157
+ const content = /** @type {Buffer} */ (result);
1158
+ /**
1159
+ * @param {Buffer | undefined} _result result
1160
+ * @returns {void}
1161
+ */
1162
+ const continueWithCachedContent = (_result) => {
1163
+ if (!upgrade) {
1164
+ // When not in upgrade mode, we accept the result from the lockfile cache
1165
+ return callback(null, { entry, content });
1166
+ }
1167
+ return doFetch(content);
1168
+ };
1169
+ if (!verifyIntegrity(content, entry.integrity)) {
1170
+ /** @type {Buffer | undefined} */
1171
+ let contentWithChangedEol;
1172
+ let isEolChanged = false;
1173
+ try {
1174
+ contentWithChangedEol = Buffer.from(
1175
+ content.toString("utf8").replace(/\r\n/g, "\n")
1176
+ );
1177
+ isEolChanged = verifyIntegrity(
1178
+ contentWithChangedEol,
1179
+ entry.integrity
1180
+ );
1181
+ } catch (_err) {
1182
+ // ignore
1183
+ }
1184
+ if (isEolChanged) {
1185
+ if (!warnedAboutEol) {
1186
+ const explainer = `Incorrect end of line sequence was detected in the lockfile cache.
1187
+ The lockfile cache is protected by integrity checks, so any external modification will lead to a corrupted lockfile cache.
1188
+ When using git make sure to configure .gitattributes correctly for the lockfile cache:
1189
+ **/*webpack.lock.data/** -text
1190
+ This will avoid that the end of line sequence is changed by git on Windows.`;
1191
+ if (frozen) {
1192
+ logger.error(explainer);
1193
+ } else {
1194
+ logger.warn(explainer);
1195
+ logger.info(
1196
+ "Lockfile cache will be automatically fixed now, but when lockfile is frozen this would result in an error."
1197
+ );
1198
+ }
1199
+ warnedAboutEol = true;
1200
+ }
1201
+ if (!frozen) {
1202
+ // "fix" the end of line sequence of the lockfile content
1203
+ logger.log(
1204
+ `${filePath} fixed end of line sequence (\\r\\n instead of \\n).`
1205
+ );
1206
+ intermediateFs.writeFile(
1207
+ filePath,
1208
+ /** @type {Buffer} */
1209
+ (contentWithChangedEol),
1210
+ (err) => {
1211
+ if (err) return callback(err);
1212
+ continueWithCachedContent(
1213
+ /** @type {Buffer} */
1214
+ (contentWithChangedEol)
1215
+ );
1216
+ }
1217
+ );
1218
+ return;
1219
+ }
1220
+ }
1221
+ if (frozen) {
1222
+ return callback(
1223
+ new Error(
1224
+ `${
1225
+ entry.resolved
1226
+ } integrity mismatch, expected content with integrity ${
1227
+ entry.integrity
1228
+ } but got ${computeIntegrity(content)}.
1229
+ Lockfile corrupted (${
1230
+ isEolChanged
1231
+ ? "end of line sequence was unexpectedly changed"
1232
+ : "incorrectly merged? changed by other tools?"
1233
+ }).
1234
+ Run build with un-frozen lockfile to automatically fix lockfile.`
1235
+ )
1236
+ );
1237
+ }
1238
+ // "fix" the lockfile entry to the correct integrity
1239
+ // the content has priority over the integrity value
1240
+ entry = {
1241
+ ...entry,
1242
+ integrity: computeIntegrity(content)
1243
+ };
1244
+ storeLockEntry(lockfile, url, entry);
1245
+ }
1246
+ continueWithCachedContent(result);
1247
+ });
1248
+ } else {
1249
+ doFetch();
1250
+ }
1251
+ });
1252
+ }
1253
+ );
1254
+
1255
+ /**
1256
+ * @param {URL} url url
1257
+ * @param {ResourceDataWithData} resourceData resource data
1258
+ * @param {(err: Error | null, result: true | void) => void} callback callback
1259
+ */
1260
+ const respondWithUrlModule = (url, resourceData, callback) => {
1261
+ getInfo(url.href, (err, _result) => {
1262
+ if (err) return callback(err);
1263
+ const result = /** @type {Info} */ (_result);
1264
+ resourceData.resource = url.href;
1265
+ resourceData.path = url.origin + url.pathname;
1266
+ resourceData.query = url.search;
1267
+ resourceData.fragment = url.hash;
1268
+ resourceData.context = new URL(
1269
+ ".",
1270
+ result.entry.resolved
1271
+ ).href.slice(0, -1);
1272
+ resourceData.data.mimetype = result.entry.contentType;
1273
+ callback(null, true);
1274
+ });
1275
+ };
1276
+ normalModuleFactory.hooks.resolveForScheme
1277
+ .for(scheme)
1278
+ .tapAsync(PLUGIN_NAME, (resourceData, resolveData, callback) => {
1279
+ respondWithUrlModule(
1280
+ new URL(resourceData.resource),
1281
+ resourceData,
1282
+ callback
1283
+ );
1284
+ });
1285
+ normalModuleFactory.hooks.resolveInScheme
1286
+ .for(scheme)
1287
+ .tapAsync(PLUGIN_NAME, (resourceData, data, callback) => {
1288
+ // Only handle relative urls (./xxx, ../xxx, /xxx, //xxx)
1289
+ if (
1290
+ data.dependencyType !== "url" &&
1291
+ !/^\.{0,2}\//.test(resourceData.resource)
1292
+ ) {
1293
+ return callback();
1294
+ }
1295
+ respondWithUrlModule(
1296
+ new URL(resourceData.resource, `${data.context}/`),
1297
+ resourceData,
1298
+ callback
1299
+ );
1300
+ });
1301
+ const hooks = NormalModule.getCompilationHooks(compilation);
1302
+ hooks.readResourceForScheme
1303
+ .for(scheme)
1304
+ .tapAsync(PLUGIN_NAME, (resource, module, callback) =>
1305
+ getInfo(resource, (err, _result) => {
1306
+ if (err) return callback(err);
1307
+ const result = /** @type {Info} */ (_result);
1308
+ if (module) {
1309
+ /** @type {BuildInfo} */
1310
+ (module.buildInfo).resourceIntegrity = result.entry.integrity;
1311
+ }
1312
+ callback(null, result.content);
1313
+ })
1314
+ );
1315
+ hooks.needBuild.tapAsync(PLUGIN_NAME, (module, context, callback) => {
1316
+ if (module.resource && module.resource.startsWith(`${scheme}://`)) {
1317
+ getInfo(module.resource, (err, _result) => {
1318
+ if (err) return callback(err);
1319
+ const result = /** @type {Info} */ (_result);
1320
+ if (
1321
+ result.entry.integrity !==
1322
+ /** @type {BuildInfo} */
1323
+ (module.buildInfo).resourceIntegrity
1324
+ ) {
1325
+ return callback(null, true);
1326
+ }
1327
+ callback();
1328
+ });
1329
+ } else {
1330
+ return callback();
1331
+ }
1332
+ });
1333
+ }
1334
+ compilation.hooks.finishModules.tapAsync(
1335
+ PLUGIN_NAME,
1336
+ (modules, callback) => {
1337
+ if (!lockfileUpdates) return callback();
1338
+ const ext = extname(lockfileLocation);
1339
+ const tempFile = join(
1340
+ intermediateFs,
1341
+ dirname(intermediateFs, lockfileLocation),
1342
+ `.${basename(lockfileLocation, ext)}.${
1343
+ (Math.random() * 10000) | 0
1344
+ }${ext}`
1345
+ );
1346
+
1347
+ const writeDone = () => {
1348
+ const nextOperation =
1349
+ /** @type {InProgressWriteItem[]} */
1350
+ (inProgressWrite).shift();
1351
+ if (nextOperation) {
1352
+ nextOperation();
1353
+ } else {
1354
+ inProgressWrite = undefined;
1355
+ }
1356
+ };
1357
+ const runWrite = () => {
1358
+ intermediateFs.readFile(lockfileLocation, (err, buffer) => {
1359
+ if (err && err.code !== "ENOENT") {
1360
+ writeDone();
1361
+ return callback(err);
1362
+ }
1363
+ const lockfile = buffer
1364
+ ? Lockfile.parse(buffer.toString("utf8"))
1365
+ : new Lockfile();
1366
+ for (const [key, value] of /** @type {LockfileUpdates} */ (
1367
+ lockfileUpdates
1368
+ )) {
1369
+ lockfile.entries.set(key, value);
1370
+ }
1371
+ intermediateFs.writeFile(
1372
+ tempFile,
1373
+ lockfile.toString(),
1374
+ (err) => {
1375
+ if (err) {
1376
+ writeDone();
1377
+ return (
1378
+ /** @type {NonNullable<IntermediateFileSystem["unlink"]>} */
1379
+ (intermediateFs.unlink)(tempFile, () => callback(err))
1380
+ );
1381
+ }
1382
+ intermediateFs.rename(tempFile, lockfileLocation, (err) => {
1383
+ if (err) {
1384
+ writeDone();
1385
+ return (
1386
+ /** @type {NonNullable<IntermediateFileSystem["unlink"]>} */
1387
+ (intermediateFs.unlink)(tempFile, () => callback(err))
1388
+ );
1389
+ }
1390
+ writeDone();
1391
+ callback();
1392
+ });
1393
+ }
1394
+ );
1395
+ });
1396
+ };
1397
+ if (inProgressWrite) {
1398
+ inProgressWrite.push(runWrite);
1399
+ } else {
1400
+ inProgressWrite = [];
1401
+ runWrite();
1402
+ }
1403
+ }
1404
+ );
1405
+ }
1406
+ );
1407
+ }
1408
+ }
1409
+
1410
+ module.exports = HttpUriPlugin;