@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,1413 @@
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 parseJson = require("json-parse-even-better-errors");
9
+ const asyncLib = require("neo-async");
10
+ const {
11
+ AsyncParallelHook,
12
+ AsyncSeriesHook,
13
+ SyncBailHook,
14
+ SyncHook
15
+ } = require("tapable");
16
+ const { SizeOnlySource } = require("webpack-sources");
17
+ const Cache = require("./Cache");
18
+ const CacheFacade = require("./CacheFacade");
19
+ const ChunkGraph = require("./ChunkGraph");
20
+ const Compilation = require("./Compilation");
21
+ const ConcurrentCompilationError = require("./ConcurrentCompilationError");
22
+ const ContextModuleFactory = require("./ContextModuleFactory");
23
+ const ModuleGraph = require("./ModuleGraph");
24
+ const NormalModuleFactory = require("./NormalModuleFactory");
25
+ const RequestShortener = require("./RequestShortener");
26
+ const ResolverFactory = require("./ResolverFactory");
27
+ const Stats = require("./Stats");
28
+ const Watching = require("./Watching");
29
+ const WebpackError = require("./WebpackError");
30
+ const { Logger } = require("./logging/Logger");
31
+ const { dirname, join, mkdirp } = require("./util/fs");
32
+ const { makePathsRelative } = require("./util/identifier");
33
+ const { isSourceEqual } = require("./util/source");
34
+ const webpack = require(".");
35
+
36
+ /** @typedef {import("webpack-sources").Source} Source */
37
+ /** @typedef {import("../declarations/WebpackOptions").EntryNormalized} Entry */
38
+ /** @typedef {import("../declarations/WebpackOptions").OutputNormalized} OutputOptions */
39
+ /** @typedef {import("../declarations/WebpackOptions").WatchOptions} WatchOptions */
40
+ /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
41
+ /** @typedef {import("../declarations/WebpackOptions").Plugins} Plugins */
42
+ /** @typedef {import("./webpack").WebpackPluginFunction} WebpackPluginFunction */
43
+ /** @typedef {import("./Chunk")} Chunk */
44
+ /** @typedef {import("./Dependency")} Dependency */
45
+ /** @typedef {import("./HotModuleReplacementPlugin").ChunkHashes} ChunkHashes */
46
+ /** @typedef {import("./HotModuleReplacementPlugin").ChunkModuleHashes} ChunkModuleHashes */
47
+ /** @typedef {import("./HotModuleReplacementPlugin").ChunkModuleIds} ChunkModuleIds */
48
+ /** @typedef {import("./HotModuleReplacementPlugin").ChunkRuntime} ChunkRuntime */
49
+ /** @typedef {import("./HotModuleReplacementPlugin").FullHashChunkModuleHashes} FullHashChunkModuleHashes */
50
+ /** @typedef {import("./HotModuleReplacementPlugin").HotIndex} HotIndex */
51
+ /** @typedef {import("./Module")} Module */
52
+ /** @typedef {import("./Module").BuildInfo} BuildInfo */
53
+ /** @typedef {import("./RecordIdsPlugin").RecordsChunks} RecordsChunks */
54
+ /** @typedef {import("./RecordIdsPlugin").RecordsModules} RecordsModules */
55
+ /** @typedef {import("./config/target").PlatformTargetProperties} PlatformTargetProperties */
56
+ /** @typedef {import("./logging/createConsoleLogger").LoggingFunction} LoggingFunction */
57
+ /** @typedef {import("./optimize/AggressiveSplittingPlugin").SplitData} SplitData */
58
+ /** @typedef {import("./util/fs").IStats} IStats */
59
+ /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
60
+ /** @typedef {import("./util/fs").IntermediateFileSystem} IntermediateFileSystem */
61
+ /** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
62
+ /** @typedef {import("./util/fs").TimeInfoEntries} TimeInfoEntries */
63
+ /** @typedef {import("./util/fs").WatchFileSystem} WatchFileSystem */
64
+
65
+ /**
66
+ * @typedef {object} CompilationParams
67
+ * @property {NormalModuleFactory} normalModuleFactory
68
+ * @property {ContextModuleFactory} contextModuleFactory
69
+ */
70
+
71
+ /**
72
+ * @template T
73
+ * @template [R=void]
74
+ * @typedef {import("./webpack").Callback<T, R>} Callback
75
+ */
76
+
77
+ /** @typedef {import("./webpack").ErrorCallback} ErrorCallback */
78
+
79
+ /**
80
+ * @callback RunAsChildCallback
81
+ * @param {Error | null} err
82
+ * @param {Chunk[]=} entries
83
+ * @param {Compilation=} compilation
84
+ * @returns {void}
85
+ */
86
+
87
+ /**
88
+ * @typedef {object} KnownRecords
89
+ * @property {SplitData[]=} aggressiveSplits
90
+ * @property {RecordsChunks=} chunks
91
+ * @property {RecordsModules=} modules
92
+ * @property {string=} hash
93
+ * @property {HotIndex=} hotIndex
94
+ * @property {FullHashChunkModuleHashes=} fullHashChunkModuleHashes
95
+ * @property {ChunkModuleHashes=} chunkModuleHashes
96
+ * @property {ChunkHashes=} chunkHashes
97
+ * @property {ChunkRuntime=} chunkRuntime
98
+ * @property {ChunkModuleIds=} chunkModuleIds
99
+ */
100
+
101
+ /** @typedef {KnownRecords & Record<string, KnownRecords[]> & Record<string, EXPECTED_ANY>} Records */
102
+
103
+ /**
104
+ * @typedef {object} AssetEmittedInfo
105
+ * @property {Buffer} content
106
+ * @property {Source} source
107
+ * @property {Compilation} compilation
108
+ * @property {string} outputPath
109
+ * @property {string} targetPath
110
+ */
111
+
112
+ /** @typedef {{ sizeOnlySource: SizeOnlySource | undefined, writtenTo: Map<string, number> }} CacheEntry */
113
+ /** @typedef {{ path: string, source: Source, size: number | undefined, waiting: ({ cacheEntry: CacheEntry, file: string }[] | undefined) }} SimilarEntry */
114
+
115
+ /** @typedef {WeakMap<Dependency, Module>} WeakReferences */
116
+ /** @typedef {import("./util/WeakTupleMap")<EXPECTED_ANY[], EXPECTED_ANY>} MemCache */
117
+ /** @typedef {{ buildInfo: BuildInfo, references: WeakReferences | undefined, memCache: MemCache }} ModuleMemCachesItem */
118
+
119
+ /**
120
+ * @template T
121
+ * @param {T[]} array an array
122
+ * @returns {boolean} true, if the array is sorted
123
+ */
124
+ const isSorted = (array) => {
125
+ for (let i = 1; i < array.length; i++) {
126
+ if (array[i - 1] > array[i]) return false;
127
+ }
128
+ return true;
129
+ };
130
+
131
+ /**
132
+ * @template {object} T
133
+ * @param {T} obj an object
134
+ * @param {(keyof T)[]} keys the keys of the object
135
+ * @returns {T} the object with properties sorted by property name
136
+ */
137
+ const sortObject = (obj, keys) => {
138
+ const o = /** @type {T} */ ({});
139
+ for (const k of keys.sort()) {
140
+ o[k] = obj[k];
141
+ }
142
+ return o;
143
+ };
144
+
145
+ /**
146
+ * @param {string} filename filename
147
+ * @param {string | string[] | undefined} hashes list of hashes
148
+ * @returns {boolean} true, if the filename contains any hash
149
+ */
150
+ const includesHash = (filename, hashes) => {
151
+ if (!hashes) return false;
152
+ if (Array.isArray(hashes)) {
153
+ return hashes.some((hash) => filename.includes(hash));
154
+ }
155
+ return filename.includes(hashes);
156
+ };
157
+
158
+ class Compiler {
159
+ /**
160
+ * @param {string} context the compilation path
161
+ * @param {WebpackOptions} options options
162
+ */
163
+ constructor(context, options = /** @type {WebpackOptions} */ ({})) {
164
+ this.hooks = Object.freeze({
165
+ /** @type {SyncHook<[]>} */
166
+ initialize: new SyncHook([]),
167
+
168
+ /** @type {SyncBailHook<[Compilation], boolean | void>} */
169
+ shouldEmit: new SyncBailHook(["compilation"]),
170
+ /** @type {AsyncSeriesHook<[Stats]>} */
171
+ done: new AsyncSeriesHook(["stats"]),
172
+ /** @type {SyncHook<[Stats]>} */
173
+ afterDone: new SyncHook(["stats"]),
174
+ /** @type {AsyncSeriesHook<[]>} */
175
+ additionalPass: new AsyncSeriesHook([]),
176
+ /** @type {AsyncSeriesHook<[Compiler]>} */
177
+ beforeRun: new AsyncSeriesHook(["compiler"]),
178
+ /** @type {AsyncSeriesHook<[Compiler]>} */
179
+ run: new AsyncSeriesHook(["compiler"]),
180
+ /** @type {AsyncSeriesHook<[Compilation]>} */
181
+ emit: new AsyncSeriesHook(["compilation"]),
182
+ /** @type {AsyncSeriesHook<[string, AssetEmittedInfo]>} */
183
+ assetEmitted: new AsyncSeriesHook(["file", "info"]),
184
+ /** @type {AsyncSeriesHook<[Compilation]>} */
185
+ afterEmit: new AsyncSeriesHook(["compilation"]),
186
+
187
+ /** @type {SyncHook<[Compilation, CompilationParams]>} */
188
+ thisCompilation: new SyncHook(["compilation", "params"]),
189
+ /** @type {SyncHook<[Compilation, CompilationParams]>} */
190
+ compilation: new SyncHook(["compilation", "params"]),
191
+ /** @type {SyncHook<[NormalModuleFactory]>} */
192
+ normalModuleFactory: new SyncHook(["normalModuleFactory"]),
193
+ /** @type {SyncHook<[ContextModuleFactory]>} */
194
+ contextModuleFactory: new SyncHook(["contextModuleFactory"]),
195
+
196
+ /** @type {AsyncSeriesHook<[CompilationParams]>} */
197
+ beforeCompile: new AsyncSeriesHook(["params"]),
198
+ /** @type {SyncHook<[CompilationParams]>} */
199
+ compile: new SyncHook(["params"]),
200
+ /** @type {AsyncParallelHook<[Compilation]>} */
201
+ make: new AsyncParallelHook(["compilation"]),
202
+ /** @type {AsyncParallelHook<[Compilation]>} */
203
+ finishMake: new AsyncSeriesHook(["compilation"]),
204
+ /** @type {AsyncSeriesHook<[Compilation]>} */
205
+ afterCompile: new AsyncSeriesHook(["compilation"]),
206
+
207
+ /** @type {AsyncSeriesHook<[]>} */
208
+ readRecords: new AsyncSeriesHook([]),
209
+ /** @type {AsyncSeriesHook<[]>} */
210
+ emitRecords: new AsyncSeriesHook([]),
211
+
212
+ /** @type {AsyncSeriesHook<[Compiler]>} */
213
+ watchRun: new AsyncSeriesHook(["compiler"]),
214
+ /** @type {SyncHook<[Error]>} */
215
+ failed: new SyncHook(["error"]),
216
+ /** @type {SyncHook<[string | null, number]>} */
217
+ invalid: new SyncHook(["filename", "changeTime"]),
218
+ /** @type {SyncHook<[]>} */
219
+ watchClose: new SyncHook([]),
220
+ /** @type {AsyncSeriesHook<[]>} */
221
+ shutdown: new AsyncSeriesHook([]),
222
+
223
+ /** @type {SyncBailHook<[string, string, EXPECTED_ANY[] | undefined], true | void>} */
224
+ infrastructureLog: new SyncBailHook(["origin", "type", "args"]),
225
+
226
+ // TODO the following hooks are weirdly located here
227
+ // TODO move them for webpack 5
228
+ /** @type {SyncHook<[]>} */
229
+ environment: new SyncHook([]),
230
+ /** @type {SyncHook<[]>} */
231
+ afterEnvironment: new SyncHook([]),
232
+ /** @type {SyncHook<[Compiler]>} */
233
+ afterPlugins: new SyncHook(["compiler"]),
234
+ /** @type {SyncHook<[Compiler]>} */
235
+ afterResolvers: new SyncHook(["compiler"]),
236
+ /** @type {SyncBailHook<[string, Entry], boolean | void>} */
237
+ entryOption: new SyncBailHook(["context", "entry"])
238
+ });
239
+
240
+ this.webpack = webpack;
241
+
242
+ /** @type {string | undefined} */
243
+ this.name = undefined;
244
+ /** @type {Compilation | undefined} */
245
+ this.parentCompilation = undefined;
246
+ /** @type {Compiler} */
247
+ this.root = this;
248
+ /** @type {string} */
249
+ this.outputPath = "";
250
+ /** @type {Watching | undefined} */
251
+ this.watching = undefined;
252
+
253
+ /** @type {OutputFileSystem | null} */
254
+ this.outputFileSystem = null;
255
+ /** @type {IntermediateFileSystem | null} */
256
+ this.intermediateFileSystem = null;
257
+ /** @type {InputFileSystem | null} */
258
+ this.inputFileSystem = null;
259
+ /** @type {WatchFileSystem | null} */
260
+ this.watchFileSystem = null;
261
+
262
+ /** @type {string | null} */
263
+ this.recordsInputPath = null;
264
+ /** @type {string | null} */
265
+ this.recordsOutputPath = null;
266
+ /** @type {Records} */
267
+ this.records = {};
268
+ /** @type {Set<string | RegExp>} */
269
+ this.managedPaths = new Set();
270
+ /** @type {Set<string | RegExp>} */
271
+ this.unmanagedPaths = new Set();
272
+ /** @type {Set<string | RegExp>} */
273
+ this.immutablePaths = new Set();
274
+
275
+ /** @type {ReadonlySet<string> | undefined} */
276
+ this.modifiedFiles = undefined;
277
+ /** @type {ReadonlySet<string> | undefined} */
278
+ this.removedFiles = undefined;
279
+ /** @type {TimeInfoEntries | undefined} */
280
+ this.fileTimestamps = undefined;
281
+ /** @type {TimeInfoEntries | undefined} */
282
+ this.contextTimestamps = undefined;
283
+ /** @type {number | undefined} */
284
+ this.fsStartTime = undefined;
285
+
286
+ /** @type {ResolverFactory} */
287
+ this.resolverFactory = new ResolverFactory();
288
+
289
+ /** @type {LoggingFunction | undefined} */
290
+ this.infrastructureLogger = undefined;
291
+
292
+ /** @type {Readonly<PlatformTargetProperties>} */
293
+ this.platform = {
294
+ web: null,
295
+ browser: null,
296
+ webworker: null,
297
+ node: null,
298
+ nwjs: null,
299
+ electron: null
300
+ };
301
+
302
+ this.options = options;
303
+
304
+ this.context = context;
305
+
306
+ this.requestShortener = new RequestShortener(context, this.root);
307
+
308
+ this.cache = new Cache();
309
+
310
+ /** @type {Map<Module, ModuleMemCachesItem> | undefined} */
311
+ this.moduleMemCaches = undefined;
312
+
313
+ this.compilerPath = "";
314
+
315
+ /** @type {boolean} */
316
+ this.running = false;
317
+
318
+ /** @type {boolean} */
319
+ this.idle = false;
320
+
321
+ /** @type {boolean} */
322
+ this.watchMode = false;
323
+
324
+ this._backCompat = this.options.experiments.backCompat !== false;
325
+
326
+ /** @type {Compilation | undefined} */
327
+ this._lastCompilation = undefined;
328
+ /** @type {NormalModuleFactory | undefined} */
329
+ this._lastNormalModuleFactory = undefined;
330
+
331
+ /**
332
+ * @private
333
+ * @type {WeakMap<Source, CacheEntry>}
334
+ */
335
+ this._assetEmittingSourceCache = new WeakMap();
336
+ /**
337
+ * @private
338
+ * @type {Map<string, number>}
339
+ */
340
+ this._assetEmittingWrittenFiles = new Map();
341
+ /**
342
+ * @private
343
+ * @type {Set<string>}
344
+ */
345
+ this._assetEmittingPreviousFiles = new Set();
346
+ }
347
+
348
+ /**
349
+ * @param {string} name cache name
350
+ * @returns {CacheFacade} the cache facade instance
351
+ */
352
+ getCache(name) {
353
+ return new CacheFacade(
354
+ this.cache,
355
+ `${this.compilerPath}${name}`,
356
+ this.options.output.hashFunction
357
+ );
358
+ }
359
+
360
+ /**
361
+ * @param {string | (() => string)} name name of the logger, or function called once to get the logger name
362
+ * @returns {Logger} a logger with that name
363
+ */
364
+ getInfrastructureLogger(name) {
365
+ if (!name) {
366
+ throw new TypeError(
367
+ "Compiler.getInfrastructureLogger(name) called without a name"
368
+ );
369
+ }
370
+ return new Logger(
371
+ (type, args) => {
372
+ if (typeof name === "function") {
373
+ name = name();
374
+ if (!name) {
375
+ throw new TypeError(
376
+ "Compiler.getInfrastructureLogger(name) called with a function not returning a name"
377
+ );
378
+ }
379
+ }
380
+ if (
381
+ this.hooks.infrastructureLog.call(name, type, args) === undefined &&
382
+ this.infrastructureLogger !== undefined
383
+ ) {
384
+ this.infrastructureLogger(name, type, args);
385
+ }
386
+ },
387
+ (childName) => {
388
+ if (typeof name === "function") {
389
+ if (typeof childName === "function") {
390
+ return this.getInfrastructureLogger(() => {
391
+ if (typeof name === "function") {
392
+ name = name();
393
+ if (!name) {
394
+ throw new TypeError(
395
+ "Compiler.getInfrastructureLogger(name) called with a function not returning a name"
396
+ );
397
+ }
398
+ }
399
+ if (typeof childName === "function") {
400
+ childName = childName();
401
+ if (!childName) {
402
+ throw new TypeError(
403
+ "Logger.getChildLogger(name) called with a function not returning a name"
404
+ );
405
+ }
406
+ }
407
+ return `${name}/${childName}`;
408
+ });
409
+ }
410
+ return this.getInfrastructureLogger(() => {
411
+ if (typeof name === "function") {
412
+ name = name();
413
+ if (!name) {
414
+ throw new TypeError(
415
+ "Compiler.getInfrastructureLogger(name) called with a function not returning a name"
416
+ );
417
+ }
418
+ }
419
+ return `${name}/${childName}`;
420
+ });
421
+ }
422
+ if (typeof childName === "function") {
423
+ return this.getInfrastructureLogger(() => {
424
+ if (typeof childName === "function") {
425
+ childName = childName();
426
+ if (!childName) {
427
+ throw new TypeError(
428
+ "Logger.getChildLogger(name) called with a function not returning a name"
429
+ );
430
+ }
431
+ }
432
+ return `${name}/${childName}`;
433
+ });
434
+ }
435
+ return this.getInfrastructureLogger(`${name}/${childName}`);
436
+ }
437
+ );
438
+ }
439
+
440
+ // TODO webpack 6: solve this in a better way
441
+ // e.g. move compilation specific info from Modules into ModuleGraph
442
+ _cleanupLastCompilation() {
443
+ if (this._lastCompilation !== undefined) {
444
+ for (const childCompilation of this._lastCompilation.children) {
445
+ for (const module of childCompilation.modules) {
446
+ ChunkGraph.clearChunkGraphForModule(module);
447
+ ModuleGraph.clearModuleGraphForModule(module);
448
+ module.cleanupForCache();
449
+ }
450
+ for (const chunk of childCompilation.chunks) {
451
+ ChunkGraph.clearChunkGraphForChunk(chunk);
452
+ }
453
+ }
454
+
455
+ for (const module of this._lastCompilation.modules) {
456
+ ChunkGraph.clearChunkGraphForModule(module);
457
+ ModuleGraph.clearModuleGraphForModule(module);
458
+ module.cleanupForCache();
459
+ }
460
+ for (const chunk of this._lastCompilation.chunks) {
461
+ ChunkGraph.clearChunkGraphForChunk(chunk);
462
+ }
463
+ this._lastCompilation = undefined;
464
+ }
465
+ }
466
+
467
+ // TODO webpack 6: solve this in a better way
468
+ _cleanupLastNormalModuleFactory() {
469
+ if (this._lastNormalModuleFactory !== undefined) {
470
+ this._lastNormalModuleFactory.cleanupForCache();
471
+ this._lastNormalModuleFactory = undefined;
472
+ }
473
+ }
474
+
475
+ /**
476
+ * @param {WatchOptions} watchOptions the watcher's options
477
+ * @param {Callback<Stats>} handler signals when the call finishes
478
+ * @returns {Watching | undefined} a compiler watcher
479
+ */
480
+ watch(watchOptions, handler) {
481
+ if (this.running) {
482
+ handler(new ConcurrentCompilationError());
483
+ return;
484
+ }
485
+
486
+ this.running = true;
487
+ this.watchMode = true;
488
+ this.watching = new Watching(this, watchOptions, handler);
489
+ return this.watching;
490
+ }
491
+
492
+ /**
493
+ * @param {Callback<Stats>} callback signals when the call finishes
494
+ * @returns {void}
495
+ */
496
+ run(callback) {
497
+ if (this.running) {
498
+ callback(new ConcurrentCompilationError());
499
+ return;
500
+ }
501
+
502
+ /** @type {Logger | undefined} */
503
+ let logger;
504
+
505
+ /**
506
+ * @param {Error | null} err error
507
+ * @param {Stats=} stats stats
508
+ */
509
+ const finalCallback = (err, stats) => {
510
+ if (logger) logger.time("beginIdle");
511
+ this.idle = true;
512
+ this.cache.beginIdle();
513
+ this.idle = true;
514
+ if (logger) logger.timeEnd("beginIdle");
515
+ this.running = false;
516
+ if (err) {
517
+ this.hooks.failed.call(err);
518
+ }
519
+ if (callback !== undefined) callback(err, stats);
520
+ this.hooks.afterDone.call(/** @type {Stats} */ (stats));
521
+ };
522
+
523
+ const startTime = Date.now();
524
+
525
+ this.running = true;
526
+
527
+ /**
528
+ * @param {Error | null} err error
529
+ * @param {Compilation=} _compilation compilation
530
+ * @returns {void}
531
+ */
532
+ const onCompiled = (err, _compilation) => {
533
+ if (err) return finalCallback(err);
534
+
535
+ const compilation = /** @type {Compilation} */ (_compilation);
536
+
537
+ if (this.hooks.shouldEmit.call(compilation) === false) {
538
+ compilation.startTime = startTime;
539
+ compilation.endTime = Date.now();
540
+ const stats = new Stats(compilation);
541
+ this.hooks.done.callAsync(stats, (err) => {
542
+ if (err) return finalCallback(err);
543
+ return finalCallback(null, stats);
544
+ });
545
+ return;
546
+ }
547
+
548
+ process.nextTick(() => {
549
+ logger = compilation.getLogger("webpack.Compiler");
550
+ logger.time("emitAssets");
551
+ this.emitAssets(compilation, (err) => {
552
+ /** @type {Logger} */
553
+ (logger).timeEnd("emitAssets");
554
+ if (err) return finalCallback(err);
555
+
556
+ if (compilation.hooks.needAdditionalPass.call()) {
557
+ compilation.needAdditionalPass = true;
558
+
559
+ compilation.startTime = startTime;
560
+ compilation.endTime = Date.now();
561
+ /** @type {Logger} */
562
+ (logger).time("done hook");
563
+ const stats = new Stats(compilation);
564
+ this.hooks.done.callAsync(stats, (err) => {
565
+ /** @type {Logger} */
566
+ (logger).timeEnd("done hook");
567
+ if (err) return finalCallback(err);
568
+
569
+ this.hooks.additionalPass.callAsync((err) => {
570
+ if (err) return finalCallback(err);
571
+ this.compile(onCompiled);
572
+ });
573
+ });
574
+ return;
575
+ }
576
+
577
+ /** @type {Logger} */
578
+ (logger).time("emitRecords");
579
+ this.emitRecords((err) => {
580
+ /** @type {Logger} */
581
+ (logger).timeEnd("emitRecords");
582
+ if (err) return finalCallback(err);
583
+
584
+ compilation.startTime = startTime;
585
+ compilation.endTime = Date.now();
586
+ /** @type {Logger} */
587
+ (logger).time("done hook");
588
+ const stats = new Stats(compilation);
589
+ this.hooks.done.callAsync(stats, (err) => {
590
+ /** @type {Logger} */
591
+ (logger).timeEnd("done hook");
592
+ if (err) return finalCallback(err);
593
+ this.cache.storeBuildDependencies(
594
+ compilation.buildDependencies,
595
+ (err) => {
596
+ if (err) return finalCallback(err);
597
+ return finalCallback(null, stats);
598
+ }
599
+ );
600
+ });
601
+ });
602
+ });
603
+ });
604
+ };
605
+
606
+ const run = () => {
607
+ this.hooks.beforeRun.callAsync(this, (err) => {
608
+ if (err) return finalCallback(err);
609
+
610
+ this.hooks.run.callAsync(this, (err) => {
611
+ if (err) return finalCallback(err);
612
+
613
+ this.readRecords((err) => {
614
+ if (err) return finalCallback(err);
615
+
616
+ this.compile(onCompiled);
617
+ });
618
+ });
619
+ });
620
+ };
621
+
622
+ if (this.idle) {
623
+ this.cache.endIdle((err) => {
624
+ if (err) return finalCallback(err);
625
+
626
+ this.idle = false;
627
+ run();
628
+ });
629
+ } else {
630
+ run();
631
+ }
632
+ }
633
+
634
+ /**
635
+ * @param {RunAsChildCallback} callback signals when the call finishes
636
+ * @returns {void}
637
+ */
638
+ runAsChild(callback) {
639
+ const startTime = Date.now();
640
+
641
+ /**
642
+ * @param {Error | null} err error
643
+ * @param {Chunk[]=} entries entries
644
+ * @param {Compilation=} compilation compilation
645
+ */
646
+ const finalCallback = (err, entries, compilation) => {
647
+ try {
648
+ callback(err, entries, compilation);
649
+ } catch (runAsChildErr) {
650
+ const err = new WebpackError(
651
+ `compiler.runAsChild callback error: ${runAsChildErr}`,
652
+ { cause: runAsChildErr }
653
+ );
654
+ err.details = /** @type {Error} */ (runAsChildErr).stack;
655
+ /** @type {Compilation} */
656
+ (this.parentCompilation).errors.push(err);
657
+ }
658
+ };
659
+
660
+ this.compile((err, _compilation) => {
661
+ if (err) return finalCallback(err);
662
+
663
+ const compilation = /** @type {Compilation} */ (_compilation);
664
+ const parentCompilation = /** @type {Compilation} */ (
665
+ this.parentCompilation
666
+ );
667
+
668
+ parentCompilation.children.push(compilation);
669
+
670
+ for (const { name, source, info } of compilation.getAssets()) {
671
+ parentCompilation.emitAsset(name, source, info);
672
+ }
673
+
674
+ /** @type {Chunk[]} */
675
+ const entries = [];
676
+
677
+ for (const ep of compilation.entrypoints.values()) {
678
+ entries.push(...ep.chunks);
679
+ }
680
+
681
+ compilation.startTime = startTime;
682
+ compilation.endTime = Date.now();
683
+
684
+ return finalCallback(null, entries, compilation);
685
+ });
686
+ }
687
+
688
+ purgeInputFileSystem() {
689
+ if (this.inputFileSystem && this.inputFileSystem.purge) {
690
+ this.inputFileSystem.purge();
691
+ }
692
+ }
693
+
694
+ /**
695
+ * @param {Compilation} compilation the compilation
696
+ * @param {ErrorCallback} callback signals when the assets are emitted
697
+ * @returns {void}
698
+ */
699
+ emitAssets(compilation, callback) {
700
+ /** @type {string} */
701
+ let outputPath;
702
+
703
+ /**
704
+ * @param {Error=} err error
705
+ * @returns {void}
706
+ */
707
+ const emitFiles = (err) => {
708
+ if (err) return callback(err);
709
+
710
+ const assets = compilation.getAssets();
711
+ compilation.assets = { ...compilation.assets };
712
+ /** @type {Map<string, SimilarEntry>} */
713
+ const caseInsensitiveMap = new Map();
714
+ /** @type {Set<string>} */
715
+ const allTargetPaths = new Set();
716
+ asyncLib.forEachLimit(
717
+ assets,
718
+ 15,
719
+ ({ name: file, source, info }, callback) => {
720
+ let targetFile = file;
721
+ let immutable = info.immutable;
722
+ const queryOrHashStringIdx = targetFile.search(/[?#]/);
723
+ if (queryOrHashStringIdx >= 0) {
724
+ targetFile = targetFile.slice(0, queryOrHashStringIdx);
725
+ // We may remove the hash, which is in the query string
726
+ // So we recheck if the file is immutable
727
+ // This doesn't cover all cases, but immutable is only a performance optimization anyway
728
+ immutable =
729
+ immutable &&
730
+ (includesHash(targetFile, info.contenthash) ||
731
+ includesHash(targetFile, info.chunkhash) ||
732
+ includesHash(targetFile, info.modulehash) ||
733
+ includesHash(targetFile, info.fullhash));
734
+ }
735
+
736
+ /**
737
+ * @param {Error=} err error
738
+ * @returns {void}
739
+ */
740
+ const writeOut = (err) => {
741
+ if (err) return callback(err);
742
+ const targetPath = join(
743
+ /** @type {OutputFileSystem} */
744
+ (this.outputFileSystem),
745
+ outputPath,
746
+ targetFile
747
+ );
748
+ allTargetPaths.add(targetPath);
749
+
750
+ // check if the target file has already been written by this Compiler
751
+ const targetFileGeneration =
752
+ this._assetEmittingWrittenFiles.get(targetPath);
753
+
754
+ // create an cache entry for this Source if not already existing
755
+ let cacheEntry = this._assetEmittingSourceCache.get(source);
756
+ if (cacheEntry === undefined) {
757
+ cacheEntry = {
758
+ sizeOnlySource: undefined,
759
+ /** @type {CacheEntry["writtenTo"]} */
760
+ writtenTo: new Map()
761
+ };
762
+ this._assetEmittingSourceCache.set(source, cacheEntry);
763
+ }
764
+
765
+ /** @type {SimilarEntry | undefined} */
766
+ let similarEntry;
767
+
768
+ const checkSimilarFile = () => {
769
+ const caseInsensitiveTargetPath = targetPath.toLowerCase();
770
+ similarEntry = caseInsensitiveMap.get(caseInsensitiveTargetPath);
771
+ if (similarEntry !== undefined) {
772
+ const { path: other, source: otherSource } = similarEntry;
773
+ if (isSourceEqual(otherSource, source)) {
774
+ // Size may or may not be available at this point.
775
+ // If it's not available add to "waiting" list and it will be updated once available
776
+ if (similarEntry.size !== undefined) {
777
+ updateWithReplacementSource(similarEntry.size);
778
+ } else {
779
+ if (!similarEntry.waiting) similarEntry.waiting = [];
780
+ similarEntry.waiting.push({ file, cacheEntry });
781
+ }
782
+ alreadyWritten();
783
+ } else {
784
+ const err =
785
+ new WebpackError(`Prevent writing to file that only differs in casing or query string from already written file.
786
+ This will lead to a race-condition and corrupted files on case-insensitive file systems.
787
+ ${targetPath}
788
+ ${other}`);
789
+ err.file = file;
790
+ callback(err);
791
+ }
792
+ return true;
793
+ }
794
+ caseInsensitiveMap.set(
795
+ caseInsensitiveTargetPath,
796
+ (similarEntry = /** @type {SimilarEntry} */ ({
797
+ path: targetPath,
798
+ source,
799
+ size: undefined,
800
+ waiting: undefined
801
+ }))
802
+ );
803
+ return false;
804
+ };
805
+
806
+ /**
807
+ * get the binary (Buffer) content from the Source
808
+ * @returns {Buffer} content for the source
809
+ */
810
+ const getContent = () => {
811
+ if (typeof source.buffer === "function") {
812
+ return source.buffer();
813
+ }
814
+ const bufferOrString = source.source();
815
+ if (Buffer.isBuffer(bufferOrString)) {
816
+ return bufferOrString;
817
+ }
818
+ return Buffer.from(bufferOrString, "utf8");
819
+ };
820
+
821
+ const alreadyWritten = () => {
822
+ // cache the information that the Source has been already been written to that location
823
+ if (targetFileGeneration === undefined) {
824
+ const newGeneration = 1;
825
+ this._assetEmittingWrittenFiles.set(targetPath, newGeneration);
826
+ /** @type {CacheEntry} */
827
+ (cacheEntry).writtenTo.set(targetPath, newGeneration);
828
+ } else {
829
+ /** @type {CacheEntry} */
830
+ (cacheEntry).writtenTo.set(targetPath, targetFileGeneration);
831
+ }
832
+ callback();
833
+ };
834
+
835
+ /**
836
+ * Write the file to output file system
837
+ * @param {Buffer} content content to be written
838
+ * @returns {void}
839
+ */
840
+ const doWrite = (content) => {
841
+ /** @type {OutputFileSystem} */
842
+ (this.outputFileSystem).writeFile(targetPath, content, (err) => {
843
+ if (err) return callback(err);
844
+
845
+ // information marker that the asset has been emitted
846
+ compilation.emittedAssets.add(file);
847
+
848
+ // cache the information that the Source has been written to that location
849
+ const newGeneration =
850
+ targetFileGeneration === undefined
851
+ ? 1
852
+ : targetFileGeneration + 1;
853
+ /** @type {CacheEntry} */
854
+ (cacheEntry).writtenTo.set(targetPath, newGeneration);
855
+ this._assetEmittingWrittenFiles.set(targetPath, newGeneration);
856
+ this.hooks.assetEmitted.callAsync(
857
+ file,
858
+ {
859
+ content,
860
+ source,
861
+ outputPath,
862
+ compilation,
863
+ targetPath
864
+ },
865
+ callback
866
+ );
867
+ });
868
+ };
869
+
870
+ /**
871
+ * @param {number} size size
872
+ */
873
+ const updateWithReplacementSource = (size) => {
874
+ updateFileWithReplacementSource(
875
+ file,
876
+ /** @type {CacheEntry} */ (cacheEntry),
877
+ size
878
+ );
879
+ /** @type {SimilarEntry} */
880
+ (similarEntry).size = size;
881
+ if (
882
+ /** @type {SimilarEntry} */ (similarEntry).waiting !== undefined
883
+ ) {
884
+ for (const { file, cacheEntry } of /** @type {SimilarEntry} */ (
885
+ similarEntry
886
+ ).waiting) {
887
+ updateFileWithReplacementSource(file, cacheEntry, size);
888
+ }
889
+ }
890
+ };
891
+
892
+ /**
893
+ * @param {string} file file
894
+ * @param {CacheEntry} cacheEntry cache entry
895
+ * @param {number} size size
896
+ */
897
+ const updateFileWithReplacementSource = (
898
+ file,
899
+ cacheEntry,
900
+ size
901
+ ) => {
902
+ // Create a replacement resource which only allows to ask for size
903
+ // This allows to GC all memory allocated by the Source
904
+ // (expect when the Source is stored in any other cache)
905
+ if (!cacheEntry.sizeOnlySource) {
906
+ cacheEntry.sizeOnlySource = new SizeOnlySource(size);
907
+ }
908
+ compilation.updateAsset(file, cacheEntry.sizeOnlySource, {
909
+ size
910
+ });
911
+ };
912
+
913
+ /**
914
+ * @param {IStats} stats stats
915
+ * @returns {void}
916
+ */
917
+ const processExistingFile = (stats) => {
918
+ // skip emitting if it's already there and an immutable file
919
+ if (immutable) {
920
+ updateWithReplacementSource(/** @type {number} */ (stats.size));
921
+ return alreadyWritten();
922
+ }
923
+
924
+ const content = getContent();
925
+
926
+ updateWithReplacementSource(content.length);
927
+
928
+ // if it exists and content on disk matches content
929
+ // skip writing the same content again
930
+ // (to keep mtime and don't trigger watchers)
931
+ // for a fast negative match file size is compared first
932
+ if (content.length === stats.size) {
933
+ compilation.comparedForEmitAssets.add(file);
934
+ return /** @type {OutputFileSystem} */ (
935
+ this.outputFileSystem
936
+ ).readFile(targetPath, (err, existingContent) => {
937
+ if (
938
+ err ||
939
+ !content.equals(/** @type {Buffer} */ (existingContent))
940
+ ) {
941
+ return doWrite(content);
942
+ }
943
+ return alreadyWritten();
944
+ });
945
+ }
946
+
947
+ return doWrite(content);
948
+ };
949
+
950
+ const processMissingFile = () => {
951
+ const content = getContent();
952
+
953
+ updateWithReplacementSource(content.length);
954
+
955
+ return doWrite(content);
956
+ };
957
+
958
+ // if the target file has already been written
959
+ if (targetFileGeneration !== undefined) {
960
+ // check if the Source has been written to this target file
961
+ const writtenGeneration = /** @type {CacheEntry} */ (
962
+ cacheEntry
963
+ ).writtenTo.get(targetPath);
964
+ if (writtenGeneration === targetFileGeneration) {
965
+ // if yes, we may skip writing the file
966
+ // if it's already there
967
+ // (we assume one doesn't modify files while the Compiler is running, other then removing them)
968
+
969
+ if (this._assetEmittingPreviousFiles.has(targetPath)) {
970
+ const sizeOnlySource = /** @type {SizeOnlySource} */ (
971
+ /** @type {CacheEntry} */ (cacheEntry).sizeOnlySource
972
+ );
973
+
974
+ // We assume that assets from the last compilation say intact on disk (they are not removed)
975
+ compilation.updateAsset(file, sizeOnlySource, {
976
+ size: sizeOnlySource.size()
977
+ });
978
+
979
+ return callback();
980
+ }
981
+ // Settings immutable will make it accept file content without comparing when file exist
982
+ immutable = true;
983
+ } else if (!immutable) {
984
+ if (checkSimilarFile()) return;
985
+ // We wrote to this file before which has very likely a different content
986
+ // skip comparing and assume content is different for performance
987
+ // This case happens often during watch mode.
988
+ return processMissingFile();
989
+ }
990
+ }
991
+
992
+ if (checkSimilarFile()) return;
993
+ if (this.options.output.compareBeforeEmit) {
994
+ /** @type {OutputFileSystem} */
995
+ (this.outputFileSystem).stat(targetPath, (err, stats) => {
996
+ const exists = !err && /** @type {IStats} */ (stats).isFile();
997
+
998
+ if (exists) {
999
+ processExistingFile(/** @type {IStats} */ (stats));
1000
+ } else {
1001
+ processMissingFile();
1002
+ }
1003
+ });
1004
+ } else {
1005
+ processMissingFile();
1006
+ }
1007
+ };
1008
+
1009
+ if (/\/|\\/.test(targetFile)) {
1010
+ const fs = /** @type {OutputFileSystem} */ (this.outputFileSystem);
1011
+ const dir = dirname(fs, join(fs, outputPath, targetFile));
1012
+ mkdirp(fs, dir, writeOut);
1013
+ } else {
1014
+ writeOut();
1015
+ }
1016
+ },
1017
+ (err) => {
1018
+ // Clear map to free up memory
1019
+ caseInsensitiveMap.clear();
1020
+ if (err) {
1021
+ this._assetEmittingPreviousFiles.clear();
1022
+ return callback(err);
1023
+ }
1024
+
1025
+ this._assetEmittingPreviousFiles = allTargetPaths;
1026
+
1027
+ this.hooks.afterEmit.callAsync(compilation, (err) => {
1028
+ if (err) return callback(err);
1029
+
1030
+ return callback(null);
1031
+ });
1032
+ }
1033
+ );
1034
+ };
1035
+
1036
+ this.hooks.emit.callAsync(compilation, (err) => {
1037
+ if (err) return callback(err);
1038
+ outputPath = compilation.getPath(this.outputPath, {});
1039
+ mkdirp(
1040
+ /** @type {OutputFileSystem} */ (this.outputFileSystem),
1041
+ outputPath,
1042
+ emitFiles
1043
+ );
1044
+ });
1045
+ }
1046
+
1047
+ /**
1048
+ * @param {ErrorCallback} callback signals when the call finishes
1049
+ * @returns {void}
1050
+ */
1051
+ emitRecords(callback) {
1052
+ if (this.hooks.emitRecords.isUsed()) {
1053
+ if (this.recordsOutputPath) {
1054
+ asyncLib.parallel(
1055
+ [
1056
+ (cb) => this.hooks.emitRecords.callAsync(cb),
1057
+ this._emitRecords.bind(this)
1058
+ ],
1059
+ (err) => callback(/** @type {Error | null} */ (err))
1060
+ );
1061
+ } else {
1062
+ this.hooks.emitRecords.callAsync(callback);
1063
+ }
1064
+ } else if (this.recordsOutputPath) {
1065
+ this._emitRecords(callback);
1066
+ } else {
1067
+ callback(null);
1068
+ }
1069
+ }
1070
+
1071
+ /**
1072
+ * @param {ErrorCallback} callback signals when the call finishes
1073
+ * @returns {void}
1074
+ */
1075
+ _emitRecords(callback) {
1076
+ const writeFile = () => {
1077
+ /** @type {OutputFileSystem} */
1078
+ (this.outputFileSystem).writeFile(
1079
+ /** @type {string} */ (this.recordsOutputPath),
1080
+ JSON.stringify(
1081
+ this.records,
1082
+ (n, value) => {
1083
+ if (
1084
+ typeof value === "object" &&
1085
+ value !== null &&
1086
+ !Array.isArray(value)
1087
+ ) {
1088
+ const keys = Object.keys(value);
1089
+ if (!isSorted(keys)) {
1090
+ return sortObject(value, keys);
1091
+ }
1092
+ }
1093
+ return value;
1094
+ },
1095
+ 2
1096
+ ),
1097
+ callback
1098
+ );
1099
+ };
1100
+
1101
+ const recordsOutputPathDirectory = dirname(
1102
+ /** @type {OutputFileSystem} */
1103
+ (this.outputFileSystem),
1104
+ /** @type {string} */
1105
+ (this.recordsOutputPath)
1106
+ );
1107
+ if (!recordsOutputPathDirectory) {
1108
+ return writeFile();
1109
+ }
1110
+ mkdirp(
1111
+ /** @type {OutputFileSystem} */ (this.outputFileSystem),
1112
+ recordsOutputPathDirectory,
1113
+ (err) => {
1114
+ if (err) return callback(err);
1115
+ writeFile();
1116
+ }
1117
+ );
1118
+ }
1119
+
1120
+ /**
1121
+ * @param {ErrorCallback} callback signals when the call finishes
1122
+ * @returns {void}
1123
+ */
1124
+ readRecords(callback) {
1125
+ if (this.hooks.readRecords.isUsed()) {
1126
+ if (this.recordsInputPath) {
1127
+ asyncLib.parallel(
1128
+ [
1129
+ (cb) => this.hooks.readRecords.callAsync(cb),
1130
+ this._readRecords.bind(this)
1131
+ ],
1132
+ (err) => callback(/** @type {Error | null} */ (err))
1133
+ );
1134
+ } else {
1135
+ this.records = {};
1136
+ this.hooks.readRecords.callAsync(callback);
1137
+ }
1138
+ } else if (this.recordsInputPath) {
1139
+ this._readRecords(callback);
1140
+ } else {
1141
+ this.records = {};
1142
+ callback(null);
1143
+ }
1144
+ }
1145
+
1146
+ /**
1147
+ * @param {ErrorCallback} callback signals when the call finishes
1148
+ * @returns {void}
1149
+ */
1150
+ _readRecords(callback) {
1151
+ if (!this.recordsInputPath) {
1152
+ this.records = {};
1153
+ return callback(null);
1154
+ }
1155
+ /** @type {InputFileSystem} */
1156
+ (this.inputFileSystem).stat(this.recordsInputPath, (err) => {
1157
+ // It doesn't exist
1158
+ // We can ignore this.
1159
+ if (err) return callback(null);
1160
+
1161
+ /** @type {InputFileSystem} */
1162
+ (this.inputFileSystem).readFile(
1163
+ /** @type {string} */
1164
+ (this.recordsInputPath),
1165
+ (err, content) => {
1166
+ if (err) return callback(err);
1167
+
1168
+ try {
1169
+ this.records = parseJson(
1170
+ /** @type {Buffer} */ (content).toString("utf8")
1171
+ );
1172
+ } catch (parseErr) {
1173
+ return callback(
1174
+ new Error(
1175
+ `Cannot parse records: ${/** @type {Error} */ (parseErr).message}`
1176
+ )
1177
+ );
1178
+ }
1179
+
1180
+ return callback(null);
1181
+ }
1182
+ );
1183
+ });
1184
+ }
1185
+
1186
+ /**
1187
+ * @param {Compilation} compilation the compilation
1188
+ * @param {string} compilerName the compiler's name
1189
+ * @param {number} compilerIndex the compiler's index
1190
+ * @param {Partial<OutputOptions>=} outputOptions the output options
1191
+ * @param {Plugins=} plugins the plugins to apply
1192
+ * @returns {Compiler} a child compiler
1193
+ */
1194
+ createChildCompiler(
1195
+ compilation,
1196
+ compilerName,
1197
+ compilerIndex,
1198
+ outputOptions,
1199
+ plugins
1200
+ ) {
1201
+ const childCompiler = new Compiler(this.context, {
1202
+ ...this.options,
1203
+ output: {
1204
+ ...this.options.output,
1205
+ ...outputOptions
1206
+ }
1207
+ });
1208
+ childCompiler.name = compilerName;
1209
+ childCompiler.outputPath = this.outputPath;
1210
+ childCompiler.inputFileSystem = this.inputFileSystem;
1211
+ childCompiler.outputFileSystem = null;
1212
+ childCompiler.resolverFactory = this.resolverFactory;
1213
+ childCompiler.modifiedFiles = this.modifiedFiles;
1214
+ childCompiler.removedFiles = this.removedFiles;
1215
+ childCompiler.fileTimestamps = this.fileTimestamps;
1216
+ childCompiler.contextTimestamps = this.contextTimestamps;
1217
+ childCompiler.fsStartTime = this.fsStartTime;
1218
+ childCompiler.cache = this.cache;
1219
+ childCompiler.compilerPath = `${this.compilerPath}${compilerName}|${compilerIndex}|`;
1220
+ childCompiler._backCompat = this._backCompat;
1221
+
1222
+ const relativeCompilerName = makePathsRelative(
1223
+ this.context,
1224
+ compilerName,
1225
+ this.root
1226
+ );
1227
+ if (!this.records[relativeCompilerName]) {
1228
+ this.records[relativeCompilerName] = [];
1229
+ }
1230
+ if (this.records[relativeCompilerName][compilerIndex]) {
1231
+ childCompiler.records =
1232
+ /** @type {Records} */
1233
+ (this.records[relativeCompilerName][compilerIndex]);
1234
+ } else {
1235
+ this.records[relativeCompilerName].push((childCompiler.records = {}));
1236
+ }
1237
+
1238
+ childCompiler.parentCompilation = compilation;
1239
+ childCompiler.root = this.root;
1240
+ if (Array.isArray(plugins)) {
1241
+ for (const plugin of plugins) {
1242
+ if (typeof plugin === "function") {
1243
+ /** @type {WebpackPluginFunction} */
1244
+ (plugin).call(childCompiler, childCompiler);
1245
+ } else if (plugin) {
1246
+ plugin.apply(childCompiler);
1247
+ }
1248
+ }
1249
+ }
1250
+ for (const name in this.hooks) {
1251
+ if (
1252
+ ![
1253
+ "make",
1254
+ "compile",
1255
+ "emit",
1256
+ "afterEmit",
1257
+ "invalid",
1258
+ "done",
1259
+ "thisCompilation"
1260
+ ].includes(name) &&
1261
+ childCompiler.hooks[/** @type {keyof Compiler["hooks"]} */ (name)]
1262
+ ) {
1263
+ childCompiler.hooks[
1264
+ /** @type {keyof Compiler["hooks"]} */
1265
+ (name)
1266
+ ].taps = [
1267
+ ...this.hooks[
1268
+ /** @type {keyof Compiler["hooks"]} */
1269
+ (name)
1270
+ ].taps
1271
+ ];
1272
+ }
1273
+ }
1274
+
1275
+ compilation.hooks.childCompiler.call(
1276
+ childCompiler,
1277
+ compilerName,
1278
+ compilerIndex
1279
+ );
1280
+
1281
+ return childCompiler;
1282
+ }
1283
+
1284
+ isChild() {
1285
+ return Boolean(this.parentCompilation);
1286
+ }
1287
+
1288
+ /**
1289
+ * @param {CompilationParams} params the compilation parameters
1290
+ * @returns {Compilation} compilation
1291
+ */
1292
+ createCompilation(params) {
1293
+ this._cleanupLastCompilation();
1294
+ return (this._lastCompilation = new Compilation(this, params));
1295
+ }
1296
+
1297
+ /**
1298
+ * @param {CompilationParams} params the compilation parameters
1299
+ * @returns {Compilation} the created compilation
1300
+ */
1301
+ newCompilation(params) {
1302
+ const compilation = this.createCompilation(params);
1303
+ compilation.name = this.name;
1304
+ compilation.records = this.records;
1305
+ this.hooks.thisCompilation.call(compilation, params);
1306
+ this.hooks.compilation.call(compilation, params);
1307
+ return compilation;
1308
+ }
1309
+
1310
+ createNormalModuleFactory() {
1311
+ this._cleanupLastNormalModuleFactory();
1312
+ const normalModuleFactory = new NormalModuleFactory({
1313
+ context: this.options.context,
1314
+ fs: /** @type {InputFileSystem} */ (this.inputFileSystem),
1315
+ resolverFactory: this.resolverFactory,
1316
+ options: this.options.module,
1317
+ associatedObjectForCache: this.root
1318
+ });
1319
+ this._lastNormalModuleFactory = normalModuleFactory;
1320
+ this.hooks.normalModuleFactory.call(normalModuleFactory);
1321
+ return normalModuleFactory;
1322
+ }
1323
+
1324
+ createContextModuleFactory() {
1325
+ const contextModuleFactory = new ContextModuleFactory(this.resolverFactory);
1326
+ this.hooks.contextModuleFactory.call(contextModuleFactory);
1327
+ return contextModuleFactory;
1328
+ }
1329
+
1330
+ newCompilationParams() {
1331
+ const params = {
1332
+ normalModuleFactory: this.createNormalModuleFactory(),
1333
+ contextModuleFactory: this.createContextModuleFactory()
1334
+ };
1335
+ return params;
1336
+ }
1337
+
1338
+ /**
1339
+ * @param {Callback<Compilation>} callback signals when the compilation finishes
1340
+ * @returns {void}
1341
+ */
1342
+ compile(callback) {
1343
+ const params = this.newCompilationParams();
1344
+ this.hooks.beforeCompile.callAsync(params, (err) => {
1345
+ if (err) return callback(err);
1346
+
1347
+ this.hooks.compile.call(params);
1348
+
1349
+ const compilation = this.newCompilation(params);
1350
+
1351
+ const logger = compilation.getLogger("webpack.Compiler");
1352
+
1353
+ logger.time("make hook");
1354
+ this.hooks.make.callAsync(compilation, (err) => {
1355
+ logger.timeEnd("make hook");
1356
+ if (err) return callback(err);
1357
+
1358
+ logger.time("finish make hook");
1359
+ this.hooks.finishMake.callAsync(compilation, (err) => {
1360
+ logger.timeEnd("finish make hook");
1361
+ if (err) return callback(err);
1362
+
1363
+ process.nextTick(() => {
1364
+ logger.time("finish compilation");
1365
+ compilation.finish((err) => {
1366
+ logger.timeEnd("finish compilation");
1367
+ if (err) return callback(err);
1368
+
1369
+ logger.time("seal compilation");
1370
+ compilation.seal((err) => {
1371
+ logger.timeEnd("seal compilation");
1372
+ if (err) return callback(err);
1373
+
1374
+ logger.time("afterCompile hook");
1375
+ this.hooks.afterCompile.callAsync(compilation, (err) => {
1376
+ logger.timeEnd("afterCompile hook");
1377
+ if (err) return callback(err);
1378
+
1379
+ return callback(null, compilation);
1380
+ });
1381
+ });
1382
+ });
1383
+ });
1384
+ });
1385
+ });
1386
+ });
1387
+ }
1388
+
1389
+ /**
1390
+ * @param {ErrorCallback} callback signals when the compiler closes
1391
+ * @returns {void}
1392
+ */
1393
+ close(callback) {
1394
+ if (this.watching) {
1395
+ // When there is still an active watching, close this first
1396
+ this.watching.close((_err) => {
1397
+ this.close(callback);
1398
+ });
1399
+ return;
1400
+ }
1401
+ this.hooks.shutdown.callAsync((err) => {
1402
+ if (err) return callback(err);
1403
+ // Get rid of reference to last compilation to avoid leaking memory
1404
+ // We can't run this._cleanupLastCompilation() as the Stats to this compilation
1405
+ // might be still in use. We try to get rid of the reference to the cache instead.
1406
+ this._lastCompilation = undefined;
1407
+ this._lastNormalModuleFactory = undefined;
1408
+ this.cache.shutdown(callback);
1409
+ });
1410
+ }
1411
+ }
1412
+
1413
+ module.exports = Compiler;