@eriche/webpack 4.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +784 -0
  3. package/SECURITY.md +9 -0
  4. package/bin/webpack.js +171 -0
  5. package/buildin/amd-define.js +3 -0
  6. package/buildin/amd-options.js +2 -0
  7. package/buildin/global.js +20 -0
  8. package/buildin/harmony-module.js +24 -0
  9. package/buildin/module.js +22 -0
  10. package/buildin/system.js +7 -0
  11. package/declarations/WebpackOptions.d.ts +1466 -0
  12. package/declarations/plugins/BannerPlugin.d.ts +49 -0
  13. package/declarations/plugins/DllPlugin.d.ts +32 -0
  14. package/declarations/plugins/DllReferencePlugin.d.ts +126 -0
  15. package/declarations/plugins/HashedModuleIdsPlugin.d.ts +24 -0
  16. package/declarations/plugins/IgnorePlugin.d.ts +27 -0
  17. package/declarations/plugins/LoaderOptionsPlugin.d.ts +27 -0
  18. package/declarations/plugins/ProgressPlugin.d.ts +42 -0
  19. package/declarations/plugins/SourceMapDevToolPlugin.d.ts +94 -0
  20. package/declarations/plugins/WatchIgnorePlugin.d.ts +10 -0
  21. package/declarations/plugins/debug/ProfilingPlugin.d.ts +12 -0
  22. package/declarations/plugins/optimize/AggressiveSplittingPlugin.d.ts +24 -0
  23. package/declarations/plugins/optimize/LimitChunkCountPlugin.d.ts +16 -0
  24. package/declarations/plugins/optimize/MinChunkSizePlugin.d.ts +12 -0
  25. package/declarations/plugins/optimize/OccurrenceOrderChunkIdsPlugin.d.ts +12 -0
  26. package/declarations/plugins/optimize/OccurrenceOrderModuleIdsPlugin.d.ts +12 -0
  27. package/hot/dev-server.js +61 -0
  28. package/hot/emitter.js +2 -0
  29. package/hot/log-apply-result.js +44 -0
  30. package/hot/log.js +59 -0
  31. package/hot/only-dev-server.js +102 -0
  32. package/hot/poll.js +37 -0
  33. package/hot/signal.js +62 -0
  34. package/lib/APIPlugin.js +84 -0
  35. package/lib/AbstractMethodError.js +43 -0
  36. package/lib/AmdMainTemplatePlugin.js +106 -0
  37. package/lib/AsyncDependenciesBlock.js +110 -0
  38. package/lib/AsyncDependencyToInitialChunkError.js +31 -0
  39. package/lib/AutomaticPrefetchPlugin.js +57 -0
  40. package/lib/BannerPlugin.js +122 -0
  41. package/lib/BasicEvaluatedExpression.js +248 -0
  42. package/lib/CachePlugin.js +100 -0
  43. package/lib/CaseSensitiveModulesWarning.js +67 -0
  44. package/lib/Chunk.js +875 -0
  45. package/lib/ChunkGroup.js +513 -0
  46. package/lib/ChunkRenderError.js +32 -0
  47. package/lib/ChunkTemplate.js +87 -0
  48. package/lib/CommentCompilationWarning.js +32 -0
  49. package/lib/CommonJsStuffPlugin.js +116 -0
  50. package/lib/CompatibilityPlugin.js +70 -0
  51. package/lib/Compilation.js +2327 -0
  52. package/lib/Compiler.js +735 -0
  53. package/lib/ConcurrentCompilationError.js +19 -0
  54. package/lib/ConstPlugin.js +348 -0
  55. package/lib/ContextExclusionPlugin.js +28 -0
  56. package/lib/ContextModule.js +872 -0
  57. package/lib/ContextModuleFactory.js +262 -0
  58. package/lib/ContextReplacementPlugin.js +133 -0
  59. package/lib/DefinePlugin.js +289 -0
  60. package/lib/DelegatedModule.js +114 -0
  61. package/lib/DelegatedModuleFactoryPlugin.js +95 -0
  62. package/lib/DelegatedPlugin.js +39 -0
  63. package/lib/DependenciesBlock.js +124 -0
  64. package/lib/DependenciesBlockVariable.js +72 -0
  65. package/lib/Dependency.js +89 -0
  66. package/lib/DllEntryPlugin.js +54 -0
  67. package/lib/DllModule.js +60 -0
  68. package/lib/DllModuleFactory.js +29 -0
  69. package/lib/DllPlugin.js +49 -0
  70. package/lib/DllReferencePlugin.js +156 -0
  71. package/lib/DynamicEntryPlugin.js +94 -0
  72. package/lib/EntryModuleNotFoundError.js +21 -0
  73. package/lib/EntryOptionPlugin.js +46 -0
  74. package/lib/Entrypoint.js +64 -0
  75. package/lib/EnvironmentPlugin.js +72 -0
  76. package/lib/ErrorHelpers.js +60 -0
  77. package/lib/EvalDevToolModulePlugin.js +27 -0
  78. package/lib/EvalDevToolModuleTemplatePlugin.js +61 -0
  79. package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +120 -0
  80. package/lib/EvalSourceMapDevToolPlugin.js +41 -0
  81. package/lib/ExportPropertyMainTemplatePlugin.js +53 -0
  82. package/lib/ExtendedAPIPlugin.js +88 -0
  83. package/lib/ExternalModule.js +179 -0
  84. package/lib/ExternalModuleFactoryPlugin.js +110 -0
  85. package/lib/ExternalsPlugin.js +23 -0
  86. package/lib/FlagAllModulesAsUsedPlugin.js +38 -0
  87. package/lib/FlagDependencyExportsPlugin.js +174 -0
  88. package/lib/FlagDependencyUsagePlugin.js +116 -0
  89. package/lib/FlagInitialModulesAsUsedPlugin.js +36 -0
  90. package/lib/FunctionModulePlugin.js +19 -0
  91. package/lib/FunctionModuleTemplatePlugin.js +102 -0
  92. package/lib/Generator.js +60 -0
  93. package/lib/GraphHelpers.js +65 -0
  94. package/lib/HarmonyLinkingError.js +17 -0
  95. package/lib/HashedModuleIdsPlugin.js +63 -0
  96. package/lib/HotModuleReplacement.runtime.js +721 -0
  97. package/lib/HotModuleReplacementPlugin.js +425 -0
  98. package/lib/HotUpdateChunk.js +17 -0
  99. package/lib/HotUpdateChunkTemplate.js +78 -0
  100. package/lib/IgnorePlugin.js +91 -0
  101. package/lib/JavascriptGenerator.js +229 -0
  102. package/lib/JavascriptModulesPlugin.js +185 -0
  103. package/lib/JsonGenerator.js +57 -0
  104. package/lib/JsonModulesPlugin.js +30 -0
  105. package/lib/JsonParser.js +27 -0
  106. package/lib/LibManifestPlugin.js +90 -0
  107. package/lib/LibraryTemplatePlugin.js +186 -0
  108. package/lib/LoaderOptionsPlugin.js +58 -0
  109. package/lib/LoaderTargetPlugin.js +24 -0
  110. package/lib/MainTemplate.js +568 -0
  111. package/lib/MemoryOutputFileSystem.js +5 -0
  112. package/lib/Module.js +435 -0
  113. package/lib/ModuleBuildError.js +52 -0
  114. package/lib/ModuleDependencyError.js +35 -0
  115. package/lib/ModuleDependencyWarning.js +25 -0
  116. package/lib/ModuleError.js +36 -0
  117. package/lib/ModuleFilenameHelpers.js +179 -0
  118. package/lib/ModuleNotFoundError.js +23 -0
  119. package/lib/ModuleParseError.js +67 -0
  120. package/lib/ModuleReason.js +48 -0
  121. package/lib/ModuleTemplate.js +93 -0
  122. package/lib/ModuleWarning.js +36 -0
  123. package/lib/MultiCompiler.js +290 -0
  124. package/lib/MultiEntryPlugin.js +80 -0
  125. package/lib/MultiModule.js +87 -0
  126. package/lib/MultiModuleFactory.js +23 -0
  127. package/lib/MultiStats.js +92 -0
  128. package/lib/MultiWatching.js +50 -0
  129. package/lib/NamedChunksPlugin.js +29 -0
  130. package/lib/NamedModulesPlugin.js +58 -0
  131. package/lib/NoEmitOnErrorsPlugin.js +20 -0
  132. package/lib/NoModeWarning.js +23 -0
  133. package/lib/NodeStuffPlugin.js +118 -0
  134. package/lib/NormalModule.js +582 -0
  135. package/lib/NormalModuleFactory.js +528 -0
  136. package/lib/NormalModuleReplacementPlugin.js +51 -0
  137. package/lib/NullFactory.js +12 -0
  138. package/lib/OptionsApply.js +10 -0
  139. package/lib/OptionsDefaulter.js +141 -0
  140. package/lib/Parser.js +2454 -0
  141. package/lib/ParserHelpers.js +103 -0
  142. package/lib/PrefetchPlugin.js +37 -0
  143. package/lib/ProgressPlugin.js +307 -0
  144. package/lib/ProvidePlugin.js +86 -0
  145. package/lib/RawModule.js +56 -0
  146. package/lib/RecordIdsPlugin.js +236 -0
  147. package/lib/RemovedPluginError.js +11 -0
  148. package/lib/RequestShortener.js +83 -0
  149. package/lib/RequireJsStuffPlugin.js +66 -0
  150. package/lib/ResolverFactory.js +74 -0
  151. package/lib/RuleSet.js +567 -0
  152. package/lib/RuntimeTemplate.js +336 -0
  153. package/lib/SetVarMainTemplatePlugin.js +69 -0
  154. package/lib/SingleEntryPlugin.js +63 -0
  155. package/lib/SizeFormatHelpers.js +24 -0
  156. package/lib/SourceMapDevToolModuleOptionsPlugin.js +49 -0
  157. package/lib/SourceMapDevToolPlugin.js +418 -0
  158. package/lib/Stats.js +1685 -0
  159. package/lib/SystemMainTemplatePlugin.js +137 -0
  160. package/lib/Template.js +291 -0
  161. package/lib/TemplatedPathPlugin.js +188 -0
  162. package/lib/UmdMainTemplatePlugin.js +305 -0
  163. package/lib/UnsupportedFeatureWarning.js +30 -0
  164. package/lib/UseStrictPlugin.js +54 -0
  165. package/lib/WarnCaseSensitiveModulesPlugin.js +37 -0
  166. package/lib/WarnNoModeSetPlugin.js +17 -0
  167. package/lib/WatchIgnorePlugin.js +106 -0
  168. package/lib/Watching.js +211 -0
  169. package/lib/WebpackError.js +31 -0
  170. package/lib/WebpackOptionsApply.js +546 -0
  171. package/lib/WebpackOptionsDefaulter.js +391 -0
  172. package/lib/WebpackOptionsValidationError.js +390 -0
  173. package/lib/buildChunkGraph.js +712 -0
  174. package/lib/compareLocations.js +52 -0
  175. package/lib/debug/ProfilingPlugin.js +442 -0
  176. package/lib/dependencies/AMDDefineDependency.js +137 -0
  177. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +336 -0
  178. package/lib/dependencies/AMDPlugin.js +249 -0
  179. package/lib/dependencies/AMDRequireArrayDependency.js +49 -0
  180. package/lib/dependencies/AMDRequireContextDependency.js +20 -0
  181. package/lib/dependencies/AMDRequireDependenciesBlock.js +47 -0
  182. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +274 -0
  183. package/lib/dependencies/AMDRequireDependency.js +135 -0
  184. package/lib/dependencies/AMDRequireItemDependency.js +22 -0
  185. package/lib/dependencies/CommonJsPlugin.js +158 -0
  186. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -0
  187. package/lib/dependencies/CommonJsRequireDependency.js +22 -0
  188. package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +138 -0
  189. package/lib/dependencies/ConstDependency.js +33 -0
  190. package/lib/dependencies/ContextDependency.js +68 -0
  191. package/lib/dependencies/ContextDependencyHelpers.js +232 -0
  192. package/lib/dependencies/ContextDependencyTemplateAsId.js +43 -0
  193. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +39 -0
  194. package/lib/dependencies/ContextElementDependency.js +21 -0
  195. package/lib/dependencies/CriticalDependencyWarning.js +20 -0
  196. package/lib/dependencies/DelegatedExportsDependency.js +33 -0
  197. package/lib/dependencies/DelegatedSourceDependency.js +18 -0
  198. package/lib/dependencies/DependencyReference.js +64 -0
  199. package/lib/dependencies/DllEntryDependency.js +20 -0
  200. package/lib/dependencies/HarmonyAcceptDependency.js +48 -0
  201. package/lib/dependencies/HarmonyAcceptImportDependency.js +23 -0
  202. package/lib/dependencies/HarmonyCompatibilityDependency.js +31 -0
  203. package/lib/dependencies/HarmonyDetectionParserPlugin.js +96 -0
  204. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +154 -0
  205. package/lib/dependencies/HarmonyExportExpressionDependency.js +58 -0
  206. package/lib/dependencies/HarmonyExportHeaderDependency.js +30 -0
  207. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +659 -0
  208. package/lib/dependencies/HarmonyExportSpecifierDependency.js +54 -0
  209. package/lib/dependencies/HarmonyImportDependency.js +109 -0
  210. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +222 -0
  211. package/lib/dependencies/HarmonyImportSideEffectDependency.js +31 -0
  212. package/lib/dependencies/HarmonyImportSpecifierDependency.js +163 -0
  213. package/lib/dependencies/HarmonyInitDependency.js +60 -0
  214. package/lib/dependencies/HarmonyModulesPlugin.js +143 -0
  215. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +26 -0
  216. package/lib/dependencies/ImportContextDependency.js +23 -0
  217. package/lib/dependencies/ImportDependenciesBlock.js +18 -0
  218. package/lib/dependencies/ImportDependency.js +34 -0
  219. package/lib/dependencies/ImportEagerDependency.js +32 -0
  220. package/lib/dependencies/ImportParserPlugin.js +248 -0
  221. package/lib/dependencies/ImportPlugin.js +79 -0
  222. package/lib/dependencies/ImportWeakDependency.js +34 -0
  223. package/lib/dependencies/JsonExportsDependency.js +26 -0
  224. package/lib/dependencies/LoaderDependency.js +21 -0
  225. package/lib/dependencies/LoaderPlugin.js +115 -0
  226. package/lib/dependencies/LocalModule.js +23 -0
  227. package/lib/dependencies/LocalModuleDependency.js +28 -0
  228. package/lib/dependencies/LocalModulesHelpers.js +52 -0
  229. package/lib/dependencies/ModuleDependency.js +23 -0
  230. package/lib/dependencies/ModuleDependencyTemplateAsId.js +17 -0
  231. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +17 -0
  232. package/lib/dependencies/ModuleHotAcceptDependency.js +23 -0
  233. package/lib/dependencies/ModuleHotDeclineDependency.js +23 -0
  234. package/lib/dependencies/MultiEntryDependency.js +25 -0
  235. package/lib/dependencies/NullDependency.js +20 -0
  236. package/lib/dependencies/PrefetchDependency.js +18 -0
  237. package/lib/dependencies/RequireContextDependency.js +22 -0
  238. package/lib/dependencies/RequireContextDependencyParserPlugin.js +56 -0
  239. package/lib/dependencies/RequireContextPlugin.js +143 -0
  240. package/lib/dependencies/RequireEnsureDependenciesBlock.js +33 -0
  241. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +116 -0
  242. package/lib/dependencies/RequireEnsureDependency.js +58 -0
  243. package/lib/dependencies/RequireEnsureItemDependency.js +21 -0
  244. package/lib/dependencies/RequireEnsurePlugin.js +74 -0
  245. package/lib/dependencies/RequireHeaderDependency.js +26 -0
  246. package/lib/dependencies/RequireIncludeDependency.js +39 -0
  247. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +23 -0
  248. package/lib/dependencies/RequireIncludePlugin.js +61 -0
  249. package/lib/dependencies/RequireResolveContextDependency.js +23 -0
  250. package/lib/dependencies/RequireResolveDependency.js +22 -0
  251. package/lib/dependencies/RequireResolveDependencyParserPlugin.js +86 -0
  252. package/lib/dependencies/RequireResolveHeaderDependency.js +26 -0
  253. package/lib/dependencies/SingleEntryDependency.js +21 -0
  254. package/lib/dependencies/SystemPlugin.js +122 -0
  255. package/lib/dependencies/UnsupportedDependency.js +27 -0
  256. package/lib/dependencies/WebAssemblyExportImportedDependency.js +31 -0
  257. package/lib/dependencies/WebAssemblyImportDependency.js +54 -0
  258. package/lib/dependencies/WebpackMissingModule.js +20 -0
  259. package/lib/dependencies/getFunctionExpression.js +52 -0
  260. package/lib/formatLocation.js +75 -0
  261. package/lib/logging/Logger.js +128 -0
  262. package/lib/logging/createConsoleLogger.js +210 -0
  263. package/lib/logging/runtime.js +36 -0
  264. package/lib/logging/truncateArgs.js +76 -0
  265. package/lib/node/NodeChunkTemplatePlugin.js +31 -0
  266. package/lib/node/NodeEnvironmentPlugin.js +44 -0
  267. package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +36 -0
  268. package/lib/node/NodeMainTemplate.runtime.js +32 -0
  269. package/lib/node/NodeMainTemplateAsync.runtime.js +50 -0
  270. package/lib/node/NodeMainTemplatePlugin.js +321 -0
  271. package/lib/node/NodeOutputFileSystem.js +22 -0
  272. package/lib/node/NodeSourcePlugin.js +141 -0
  273. package/lib/node/NodeTargetPlugin.js +19 -0
  274. package/lib/node/NodeTemplatePlugin.js +31 -0
  275. package/lib/node/NodeWatchFileSystem.js +109 -0
  276. package/lib/node/ReadFileCompileWasmTemplatePlugin.js +61 -0
  277. package/lib/node/nodeConsole.js +135 -0
  278. package/lib/optimize/AggressiveMergingPlugin.js +87 -0
  279. package/lib/optimize/AggressiveSplittingPlugin.js +294 -0
  280. package/lib/optimize/ChunkModuleIdRangePlugin.js +66 -0
  281. package/lib/optimize/ConcatenatedModule.js +1477 -0
  282. package/lib/optimize/EnsureChunkConditionsPlugin.js +70 -0
  283. package/lib/optimize/FlagIncludedChunksPlugin.js +99 -0
  284. package/lib/optimize/LimitChunkCountPlugin.js +231 -0
  285. package/lib/optimize/MergeDuplicateChunksPlugin.js +78 -0
  286. package/lib/optimize/MinChunkSizePlugin.js +82 -0
  287. package/lib/optimize/MinMaxSizeWarning.js +29 -0
  288. package/lib/optimize/ModuleConcatenationPlugin.js +485 -0
  289. package/lib/optimize/NaturalChunkOrderPlugin.js +41 -0
  290. package/lib/optimize/OccurrenceChunkOrderPlugin.js +66 -0
  291. package/lib/optimize/OccurrenceModuleOrderPlugin.js +112 -0
  292. package/lib/optimize/OccurrenceOrderPlugin.js +135 -0
  293. package/lib/optimize/RemoveEmptyChunksPlugin.js +42 -0
  294. package/lib/optimize/RemoveParentModulesPlugin.js +127 -0
  295. package/lib/optimize/RuntimeChunkPlugin.js +41 -0
  296. package/lib/optimize/SideEffectsFlagPlugin.js +352 -0
  297. package/lib/optimize/SplitChunksPlugin.js +971 -0
  298. package/lib/performance/AssetsOverSizeLimitWarning.js +30 -0
  299. package/lib/performance/EntrypointsOverSizeLimitWarning.js +30 -0
  300. package/lib/performance/NoAsyncChunksWarning.js +21 -0
  301. package/lib/performance/SizeLimitsPlugin.js +125 -0
  302. package/lib/util/LazyBucketSortedSet.js +235 -0
  303. package/lib/util/Queue.js +46 -0
  304. package/lib/util/Semaphore.js +53 -0
  305. package/lib/util/SetHelpers.js +48 -0
  306. package/lib/util/SortableSet.js +140 -0
  307. package/lib/util/StackedSetMap.js +142 -0
  308. package/lib/util/TrackingSet.js +35 -0
  309. package/lib/util/cachedMerge.js +35 -0
  310. package/lib/util/cleverMerge.js +77 -0
  311. package/lib/util/createHash.js +174 -0
  312. package/lib/util/deterministicGrouping.js +274 -0
  313. package/lib/util/hash/BatchedHash.js +71 -0
  314. package/lib/util/hash/md4.js +25 -0
  315. package/lib/util/hash/wasm-hash.js +174 -0
  316. package/lib/util/identifier.js +127 -0
  317. package/lib/util/objectToMap.js +16 -0
  318. package/lib/validateSchema.js +67 -0
  319. package/lib/wasm/UnsupportedWebAssemblyFeatureError.js +17 -0
  320. package/lib/wasm/WasmFinalizeExportsPlugin.js +69 -0
  321. package/lib/wasm/WasmMainTemplatePlugin.js +341 -0
  322. package/lib/wasm/WebAssemblyGenerator.js +458 -0
  323. package/lib/wasm/WebAssemblyInInitialChunkError.js +88 -0
  324. package/lib/wasm/WebAssemblyJavascriptGenerator.js +152 -0
  325. package/lib/wasm/WebAssemblyModulesPlugin.js +128 -0
  326. package/lib/wasm/WebAssemblyParser.js +175 -0
  327. package/lib/wasm/WebAssemblyUtils.js +59 -0
  328. package/lib/web/FetchCompileWasmTemplatePlugin.js +37 -0
  329. package/lib/web/JsonpChunkTemplatePlugin.js +71 -0
  330. package/lib/web/JsonpExportMainTemplatePlugin.js +50 -0
  331. package/lib/web/JsonpHotUpdateChunkTemplatePlugin.js +39 -0
  332. package/lib/web/JsonpMainTemplate.runtime.js +71 -0
  333. package/lib/web/JsonpMainTemplatePlugin.js +615 -0
  334. package/lib/web/JsonpTemplatePlugin.js +23 -0
  335. package/lib/web/WebEnvironmentPlugin.js +18 -0
  336. package/lib/webpack.js +206 -0
  337. package/lib/webpack.web.js +31 -0
  338. package/lib/webworker/WebWorkerChunkTemplatePlugin.js +35 -0
  339. package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +40 -0
  340. package/lib/webworker/WebWorkerMainTemplate.runtime.js +73 -0
  341. package/lib/webworker/WebWorkerMainTemplatePlugin.js +192 -0
  342. package/lib/webworker/WebWorkerTemplatePlugin.js +25 -0
  343. package/package.json +211 -0
  344. package/schemas/WebpackOptions.json +2285 -0
  345. package/schemas/ajv.absolutePath.js +57 -0
  346. package/schemas/plugins/BannerPlugin.json +101 -0
  347. package/schemas/plugins/DllPlugin.json +36 -0
  348. package/schemas/plugins/DllReferencePlugin.json +205 -0
  349. package/schemas/plugins/HashedModuleIdsPlugin.json +26 -0
  350. package/schemas/plugins/IgnorePlugin.json +37 -0
  351. package/schemas/plugins/LoaderOptionsPlugin.json +27 -0
  352. package/schemas/plugins/ProgressPlugin.json +52 -0
  353. package/schemas/plugins/SourceMapDevToolPlugin.json +185 -0
  354. package/schemas/plugins/WatchIgnorePlugin.json +18 -0
  355. package/schemas/plugins/debug/ProfilingPlugin.json +13 -0
  356. package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +23 -0
  357. package/schemas/plugins/optimize/LimitChunkCountPlugin.json +16 -0
  358. package/schemas/plugins/optimize/MinChunkSizePlugin.json +12 -0
  359. package/schemas/plugins/optimize/OccurrenceOrderChunkIdsPlugin.json +11 -0
  360. package/schemas/plugins/optimize/OccurrenceOrderModuleIdsPlugin.json +11 -0
  361. package/web_modules/node-libs-browser.js +0 -0
@@ -0,0 +1,135 @@
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 truncateArgs = require("../logging/truncateArgs");
9
+ const util = require("util");
10
+
11
+ const tty = process.stderr.isTTY && process.env.TERM !== "dumb";
12
+
13
+ let currentStatusMessage = undefined;
14
+ let hasStatusMessage = false;
15
+ let currentIndent = "";
16
+ let currentCollapsed = 0;
17
+
18
+ const indent = (str, prefix, colorPrefix, colorSuffix) => {
19
+ if (str === "") return str;
20
+ prefix = currentIndent + prefix;
21
+ if (tty) {
22
+ return (
23
+ prefix +
24
+ colorPrefix +
25
+ str.replace(/\n/g, colorSuffix + "\n" + prefix + colorPrefix) +
26
+ colorSuffix
27
+ );
28
+ } else {
29
+ return prefix + str.replace(/\n/g, "\n" + prefix);
30
+ }
31
+ };
32
+
33
+ const clearStatusMessage = () => {
34
+ if (hasStatusMessage) {
35
+ process.stderr.write("\x1b[2K\r");
36
+ hasStatusMessage = false;
37
+ }
38
+ };
39
+
40
+ const writeStatusMessage = () => {
41
+ if (!currentStatusMessage) return;
42
+ const l = process.stderr.columns;
43
+ const args = l
44
+ ? truncateArgs(currentStatusMessage, l - 1)
45
+ : currentStatusMessage;
46
+ const str = args.join(" ");
47
+ const coloredStr = `\u001b[1m${str}\u001b[39m\u001b[22m`;
48
+ process.stderr.write(`\x1b[2K\r${coloredStr}`);
49
+ hasStatusMessage = true;
50
+ };
51
+
52
+ const writeColored = (prefix, colorPrefix, colorSuffix) => {
53
+ return (...args) => {
54
+ if (currentCollapsed > 0) return;
55
+ clearStatusMessage();
56
+ // @ts-ignore
57
+ const str = indent(util.format(...args), prefix, colorPrefix, colorSuffix);
58
+ process.stderr.write(str + "\n");
59
+ writeStatusMessage();
60
+ };
61
+ };
62
+
63
+ const writeGroupMessage = writeColored(
64
+ "<-> ",
65
+ "\u001b[1m\u001b[36m",
66
+ "\u001b[39m\u001b[22m"
67
+ );
68
+
69
+ const writeGroupCollapsedMessage = writeColored(
70
+ "<+> ",
71
+ "\u001b[1m\u001b[36m",
72
+ "\u001b[39m\u001b[22m"
73
+ );
74
+
75
+ module.exports = {
76
+ log: writeColored(" ", "\u001b[1m", "\u001b[22m"),
77
+ debug: writeColored(" ", "", ""),
78
+ trace: writeColored(" ", "", ""),
79
+ info: writeColored("<i> ", "\u001b[1m\u001b[32m", "\u001b[39m\u001b[22m"),
80
+ warn: writeColored("<w> ", "\u001b[1m\u001b[33m", "\u001b[39m\u001b[22m"),
81
+ error: writeColored("<e> ", "\u001b[1m\u001b[31m", "\u001b[39m\u001b[22m"),
82
+ logTime: writeColored("<t> ", "\u001b[1m\u001b[35m", "\u001b[39m\u001b[22m"),
83
+ group: (...args) => {
84
+ writeGroupMessage(...args);
85
+ if (currentCollapsed > 0) {
86
+ currentCollapsed++;
87
+ } else {
88
+ currentIndent += " ";
89
+ }
90
+ },
91
+ groupCollapsed: (...args) => {
92
+ writeGroupCollapsedMessage(...args);
93
+ currentCollapsed++;
94
+ },
95
+ groupEnd: () => {
96
+ if (currentCollapsed > 0) currentCollapsed--;
97
+ else if (currentIndent.length >= 2)
98
+ currentIndent = currentIndent.slice(0, currentIndent.length - 2);
99
+ },
100
+ // eslint-disable-next-line node/no-unsupported-features/node-builtins
101
+ profile: console.profile && (name => console.profile(name)),
102
+ // eslint-disable-next-line node/no-unsupported-features/node-builtins
103
+ profileEnd: console.profileEnd && (name => console.profileEnd(name)),
104
+ clear:
105
+ tty &&
106
+ // eslint-disable-next-line node/no-unsupported-features/node-builtins
107
+ console.clear &&
108
+ (() => {
109
+ clearStatusMessage();
110
+ // eslint-disable-next-line node/no-unsupported-features/node-builtins
111
+ console.clear();
112
+ writeStatusMessage();
113
+ }),
114
+ status: tty
115
+ ? (name, ...args) => {
116
+ args = args.filter(Boolean);
117
+ if (name === undefined && args.length === 0) {
118
+ clearStatusMessage();
119
+ currentStatusMessage = undefined;
120
+ } else if (
121
+ typeof name === "string" &&
122
+ name.startsWith("[webpack.Progress] ")
123
+ ) {
124
+ currentStatusMessage = [name.slice(19), ...args];
125
+ writeStatusMessage();
126
+ } else if (name === "[webpack.Progress]") {
127
+ currentStatusMessage = [...args];
128
+ writeStatusMessage();
129
+ } else {
130
+ currentStatusMessage = [name, ...args];
131
+ writeStatusMessage();
132
+ }
133
+ }
134
+ : writeColored("<s> ", "", "")
135
+ };
@@ -0,0 +1,87 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ class AggressiveMergingPlugin {
8
+ constructor(options) {
9
+ if (
10
+ (options !== undefined && typeof options !== "object") ||
11
+ Array.isArray(options)
12
+ ) {
13
+ throw new Error(
14
+ "Argument should be an options object. To use defaults, pass in nothing.\nFor more info on options, see https://webpack.js.org/plugins/"
15
+ );
16
+ }
17
+ this.options = options || {};
18
+ }
19
+
20
+ apply(compiler) {
21
+ const options = this.options;
22
+ const minSizeReduce = options.minSizeReduce || 1.5;
23
+
24
+ compiler.hooks.thisCompilation.tap(
25
+ "AggressiveMergingPlugin",
26
+ compilation => {
27
+ compilation.hooks.optimizeChunksAdvanced.tap(
28
+ "AggressiveMergingPlugin",
29
+ chunks => {
30
+ let combinations = [];
31
+ chunks.forEach((a, idx) => {
32
+ if (a.canBeInitial()) return;
33
+ for (let i = 0; i < idx; i++) {
34
+ const b = chunks[i];
35
+ if (b.canBeInitial()) continue;
36
+ combinations.push({
37
+ a,
38
+ b,
39
+ improvement: undefined
40
+ });
41
+ }
42
+ });
43
+
44
+ for (const pair of combinations) {
45
+ const a = pair.b.size({
46
+ chunkOverhead: 0
47
+ });
48
+ const b = pair.a.size({
49
+ chunkOverhead: 0
50
+ });
51
+ const ab = pair.b.integratedSize(pair.a, {
52
+ chunkOverhead: 0
53
+ });
54
+ let newSize;
55
+ if (ab === false) {
56
+ pair.improvement = false;
57
+ return;
58
+ } else {
59
+ newSize = ab;
60
+ }
61
+
62
+ pair.improvement = (a + b) / newSize;
63
+ }
64
+ combinations = combinations.filter(pair => {
65
+ return pair.improvement !== false;
66
+ });
67
+ combinations.sort((a, b) => {
68
+ return b.improvement - a.improvement;
69
+ });
70
+
71
+ const pair = combinations[0];
72
+
73
+ if (!pair) return;
74
+ if (pair.improvement < minSizeReduce) return;
75
+
76
+ if (pair.b.integrate(pair.a, "aggressive-merge")) {
77
+ chunks.splice(chunks.indexOf(pair.a), 1);
78
+ return true;
79
+ }
80
+ }
81
+ );
82
+ }
83
+ );
84
+ }
85
+ }
86
+
87
+ module.exports = AggressiveMergingPlugin;
@@ -0,0 +1,294 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const identifierUtils = require("../util/identifier");
8
+ const { intersect } = require("../util/SetHelpers");
9
+ const validateOptions = require("schema-utils");
10
+ const schema = require("../../schemas/plugins/optimize/AggressiveSplittingPlugin.json");
11
+
12
+ /** @typedef {import("../../declarations/plugins/optimize/AggressiveSplittingPlugin").AggressiveSplittingPluginOptions} AggressiveSplittingPluginOptions */
13
+
14
+ const moveModuleBetween = (oldChunk, newChunk) => {
15
+ return module => {
16
+ oldChunk.moveModule(module, newChunk);
17
+ };
18
+ };
19
+
20
+ const isNotAEntryModule = entryModule => {
21
+ return module => {
22
+ return entryModule !== module;
23
+ };
24
+ };
25
+
26
+ class AggressiveSplittingPlugin {
27
+ /**
28
+ * @param {AggressiveSplittingPluginOptions=} options options object
29
+ */
30
+ constructor(options) {
31
+ if (!options) options = {};
32
+
33
+ validateOptions(schema, options, "Aggressive Splitting Plugin");
34
+
35
+ this.options = options;
36
+ if (typeof this.options.minSize !== "number") {
37
+ this.options.minSize = 30 * 1024;
38
+ }
39
+ if (typeof this.options.maxSize !== "number") {
40
+ this.options.maxSize = 50 * 1024;
41
+ }
42
+ if (typeof this.options.chunkOverhead !== "number") {
43
+ this.options.chunkOverhead = 0;
44
+ }
45
+ if (typeof this.options.entryChunkMultiplicator !== "number") {
46
+ this.options.entryChunkMultiplicator = 1;
47
+ }
48
+ }
49
+ apply(compiler) {
50
+ compiler.hooks.thisCompilation.tap(
51
+ "AggressiveSplittingPlugin",
52
+ compilation => {
53
+ let needAdditionalSeal = false;
54
+ let newSplits;
55
+ let fromAggressiveSplittingSet;
56
+ let chunkSplitDataMap;
57
+ compilation.hooks.optimize.tap("AggressiveSplittingPlugin", () => {
58
+ newSplits = [];
59
+ fromAggressiveSplittingSet = new Set();
60
+ chunkSplitDataMap = new Map();
61
+ });
62
+ compilation.hooks.optimizeChunksAdvanced.tap(
63
+ "AggressiveSplittingPlugin",
64
+ chunks => {
65
+ // Precompute stuff
66
+ const nameToModuleMap = new Map();
67
+ const moduleToNameMap = new Map();
68
+ for (const m of compilation.modules) {
69
+ const name = identifierUtils.makePathsRelative(
70
+ compiler.context,
71
+ m.identifier(),
72
+ compilation.cache
73
+ );
74
+ nameToModuleMap.set(name, m);
75
+ moduleToNameMap.set(m, name);
76
+ }
77
+
78
+ // Check used chunk ids
79
+ const usedIds = new Set();
80
+ for (const chunk of chunks) {
81
+ usedIds.add(chunk.id);
82
+ }
83
+
84
+ const recordedSplits =
85
+ (compilation.records && compilation.records.aggressiveSplits) ||
86
+ [];
87
+ const usedSplits = newSplits
88
+ ? recordedSplits.concat(newSplits)
89
+ : recordedSplits;
90
+
91
+ const minSize = this.options.minSize;
92
+ const maxSize = this.options.maxSize;
93
+
94
+ const applySplit = splitData => {
95
+ // Cannot split if id is already taken
96
+ if (splitData.id !== undefined && usedIds.has(splitData.id)) {
97
+ return false;
98
+ }
99
+
100
+ // Get module objects from names
101
+ const selectedModules = splitData.modules.map(name =>
102
+ nameToModuleMap.get(name)
103
+ );
104
+
105
+ // Does the modules exist at all?
106
+ if (!selectedModules.every(Boolean)) return false;
107
+
108
+ // Check if size matches (faster than waiting for hash)
109
+ const size = selectedModules.reduce(
110
+ (sum, m) => sum + m.size(),
111
+ 0
112
+ );
113
+ if (size !== splitData.size) return false;
114
+
115
+ // get chunks with all modules
116
+ const selectedChunks = intersect(
117
+ selectedModules.map(m => new Set(m.chunksIterable))
118
+ );
119
+
120
+ // No relevant chunks found
121
+ if (selectedChunks.size === 0) return false;
122
+
123
+ // The found chunk is already the split or similar
124
+ if (
125
+ selectedChunks.size === 1 &&
126
+ Array.from(selectedChunks)[0].getNumberOfModules() ===
127
+ selectedModules.length
128
+ ) {
129
+ const chunk = Array.from(selectedChunks)[0];
130
+ if (fromAggressiveSplittingSet.has(chunk)) return false;
131
+ fromAggressiveSplittingSet.add(chunk);
132
+ chunkSplitDataMap.set(chunk, splitData);
133
+ return true;
134
+ }
135
+
136
+ // split the chunk into two parts
137
+ const newChunk = compilation.addChunk();
138
+ newChunk.chunkReason = "aggressive splitted";
139
+ for (const chunk of selectedChunks) {
140
+ selectedModules.forEach(moveModuleBetween(chunk, newChunk));
141
+ chunk.split(newChunk);
142
+ chunk.name = null;
143
+ }
144
+ fromAggressiveSplittingSet.add(newChunk);
145
+ chunkSplitDataMap.set(newChunk, splitData);
146
+
147
+ if (splitData.id !== null && splitData.id !== undefined) {
148
+ newChunk.id = splitData.id;
149
+ }
150
+ return true;
151
+ };
152
+
153
+ // try to restore to recorded splitting
154
+ let changed = false;
155
+ for (let j = 0; j < usedSplits.length; j++) {
156
+ const splitData = usedSplits[j];
157
+ if (applySplit(splitData)) changed = true;
158
+ }
159
+
160
+ // for any chunk which isn't splitted yet, split it and create a new entry
161
+ // start with the biggest chunk
162
+ const sortedChunks = chunks.slice().sort((a, b) => {
163
+ const diff1 = b.modulesSize() - a.modulesSize();
164
+ if (diff1) return diff1;
165
+ const diff2 = a.getNumberOfModules() - b.getNumberOfModules();
166
+ if (diff2) return diff2;
167
+ const modulesA = Array.from(a.modulesIterable);
168
+ const modulesB = Array.from(b.modulesIterable);
169
+ modulesA.sort();
170
+ modulesB.sort();
171
+ const aI = modulesA[Symbol.iterator]();
172
+ const bI = modulesB[Symbol.iterator]();
173
+ // eslint-disable-next-line no-constant-condition
174
+ while (true) {
175
+ const aItem = aI.next();
176
+ const bItem = bI.next();
177
+ if (aItem.done) return 0;
178
+ const aModuleIdentifier = aItem.value.identifier();
179
+ const bModuleIdentifier = bItem.value.identifier();
180
+ if (aModuleIdentifier > bModuleIdentifier) return -1;
181
+ if (aModuleIdentifier < bModuleIdentifier) return 1;
182
+ }
183
+ });
184
+ for (const chunk of sortedChunks) {
185
+ if (fromAggressiveSplittingSet.has(chunk)) continue;
186
+ const size = chunk.modulesSize();
187
+ if (size > maxSize && chunk.getNumberOfModules() > 1) {
188
+ const modules = chunk
189
+ .getModules()
190
+ .filter(isNotAEntryModule(chunk.entryModule))
191
+ .sort((a, b) => {
192
+ a = a.identifier();
193
+ b = b.identifier();
194
+ if (a > b) return 1;
195
+ if (a < b) return -1;
196
+ return 0;
197
+ });
198
+ const selectedModules = [];
199
+ let selectedModulesSize = 0;
200
+ for (let k = 0; k < modules.length; k++) {
201
+ const module = modules[k];
202
+ const newSize = selectedModulesSize + module.size();
203
+ if (newSize > maxSize && selectedModulesSize >= minSize) {
204
+ break;
205
+ }
206
+ selectedModulesSize = newSize;
207
+ selectedModules.push(module);
208
+ }
209
+ if (selectedModules.length === 0) continue;
210
+ const splitData = {
211
+ modules: selectedModules
212
+ .map(m => moduleToNameMap.get(m))
213
+ .sort(),
214
+ size: selectedModulesSize
215
+ };
216
+
217
+ if (applySplit(splitData)) {
218
+ newSplits = (newSplits || []).concat(splitData);
219
+ changed = true;
220
+ }
221
+ }
222
+ }
223
+ if (changed) return true;
224
+ }
225
+ );
226
+ compilation.hooks.recordHash.tap(
227
+ "AggressiveSplittingPlugin",
228
+ records => {
229
+ // 4. save made splittings to records
230
+ const allSplits = new Set();
231
+ const invalidSplits = new Set();
232
+
233
+ // Check if some splittings are invalid
234
+ // We remove invalid splittings and try again
235
+ for (const chunk of compilation.chunks) {
236
+ const splitData = chunkSplitDataMap.get(chunk);
237
+ if (splitData !== undefined) {
238
+ if (splitData.hash && chunk.hash !== splitData.hash) {
239
+ // Split was successful, but hash doesn't equal
240
+ // We can throw away the split since it's useless now
241
+ invalidSplits.add(splitData);
242
+ }
243
+ }
244
+ }
245
+
246
+ if (invalidSplits.size > 0) {
247
+ records.aggressiveSplits = records.aggressiveSplits.filter(
248
+ splitData => !invalidSplits.has(splitData)
249
+ );
250
+ needAdditionalSeal = true;
251
+ } else {
252
+ // set hash and id values on all (new) splittings
253
+ for (const chunk of compilation.chunks) {
254
+ const splitData = chunkSplitDataMap.get(chunk);
255
+ if (splitData !== undefined) {
256
+ splitData.hash = chunk.hash;
257
+ splitData.id = chunk.id;
258
+ allSplits.add(splitData);
259
+ // set flag for stats
260
+ chunk.recorded = true;
261
+ }
262
+ }
263
+
264
+ // Also add all unused historial splits (after the used ones)
265
+ // They can still be used in some future compilation
266
+ const recordedSplits =
267
+ compilation.records && compilation.records.aggressiveSplits;
268
+ if (recordedSplits) {
269
+ for (const splitData of recordedSplits) {
270
+ if (!invalidSplits.has(splitData)) allSplits.add(splitData);
271
+ }
272
+ }
273
+
274
+ // record all splits
275
+ records.aggressiveSplits = Array.from(allSplits);
276
+
277
+ needAdditionalSeal = false;
278
+ }
279
+ }
280
+ );
281
+ compilation.hooks.needAdditionalSeal.tap(
282
+ "AggressiveSplittingPlugin",
283
+ () => {
284
+ if (needAdditionalSeal) {
285
+ needAdditionalSeal = false;
286
+ return true;
287
+ }
288
+ }
289
+ );
290
+ }
291
+ );
292
+ }
293
+ }
294
+ module.exports = AggressiveSplittingPlugin;
@@ -0,0 +1,66 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const sortByIndex = (a, b) => {
8
+ return a.index - b.index;
9
+ };
10
+
11
+ const sortByIndex2 = (a, b) => {
12
+ return a.index2 - b.index2;
13
+ };
14
+
15
+ class ChunkModuleIdRangePlugin {
16
+ constructor(options) {
17
+ this.options = options;
18
+ }
19
+
20
+ apply(compiler) {
21
+ const options = this.options;
22
+ compiler.hooks.compilation.tap("ChunkModuleIdRangePlugin", compilation => {
23
+ compilation.hooks.moduleIds.tap("ChunkModuleIdRangePlugin", modules => {
24
+ const chunk = compilation.chunks.find(
25
+ chunk => chunk.name === options.name
26
+ );
27
+ if (!chunk) {
28
+ throw new Error(
29
+ `ChunkModuleIdRangePlugin: Chunk with name '${options.name}"' was not found`
30
+ );
31
+ }
32
+
33
+ let chunkModules;
34
+ if (options.order) {
35
+ chunkModules = Array.from(chunk.modulesIterable);
36
+ switch (options.order) {
37
+ case "index":
38
+ chunkModules.sort(sortByIndex);
39
+ break;
40
+ case "index2":
41
+ chunkModules.sort(sortByIndex2);
42
+ break;
43
+ default:
44
+ throw new Error(
45
+ "ChunkModuleIdRangePlugin: unexpected value of order"
46
+ );
47
+ }
48
+ } else {
49
+ chunkModules = modules.filter(m => {
50
+ return m.chunksIterable.has(chunk);
51
+ });
52
+ }
53
+
54
+ let currentId = options.start || 0;
55
+ for (let i = 0; i < chunkModules.length; i++) {
56
+ const m = chunkModules[i];
57
+ if (m.id === null) {
58
+ m.id = currentId++;
59
+ }
60
+ if (options.end && currentId > options.end) break;
61
+ }
62
+ });
63
+ });
64
+ }
65
+ }
66
+ module.exports = ChunkModuleIdRangePlugin;