@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,70 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const GraphHelpers = require("../GraphHelpers");
8
+
9
+ class EnsureChunkConditionsPlugin {
10
+ apply(compiler) {
11
+ compiler.hooks.compilation.tap(
12
+ "EnsureChunkConditionsPlugin",
13
+ compilation => {
14
+ const handler = chunks => {
15
+ let changed = false;
16
+ for (const module of compilation.modules) {
17
+ if (!module.chunkCondition) continue;
18
+ const sourceChunks = new Set();
19
+ const chunkGroups = new Set();
20
+ for (const chunk of module.chunksIterable) {
21
+ if (!module.chunkCondition(chunk)) {
22
+ sourceChunks.add(chunk);
23
+ for (const group of chunk.groupsIterable) {
24
+ chunkGroups.add(group);
25
+ }
26
+ }
27
+ }
28
+ if (sourceChunks.size === 0) continue;
29
+ const targetChunks = new Set();
30
+ chunkGroupLoop: for (const chunkGroup of chunkGroups) {
31
+ // Can module be placed in a chunk of this group?
32
+ for (const chunk of chunkGroup.chunks) {
33
+ if (module.chunkCondition(chunk)) {
34
+ targetChunks.add(chunk);
35
+ continue chunkGroupLoop;
36
+ }
37
+ }
38
+ // We reached the entrypoint: fail
39
+ if (chunkGroup.isInitial()) {
40
+ throw new Error(
41
+ "Cannot fullfil chunk condition of " + module.identifier()
42
+ );
43
+ }
44
+ // Try placing in all parents
45
+ for (const group of chunkGroup.parentsIterable) {
46
+ chunkGroups.add(group);
47
+ }
48
+ }
49
+ for (const sourceChunk of sourceChunks) {
50
+ GraphHelpers.disconnectChunkAndModule(sourceChunk, module);
51
+ }
52
+ for (const targetChunk of targetChunks) {
53
+ GraphHelpers.connectChunkAndModule(targetChunk, module);
54
+ }
55
+ }
56
+ if (changed) return true;
57
+ };
58
+ compilation.hooks.optimizeChunksBasic.tap(
59
+ "EnsureChunkConditionsPlugin",
60
+ handler
61
+ );
62
+ compilation.hooks.optimizeExtractedChunksBasic.tap(
63
+ "EnsureChunkConditionsPlugin",
64
+ handler
65
+ );
66
+ }
67
+ );
68
+ }
69
+ }
70
+ module.exports = EnsureChunkConditionsPlugin;
@@ -0,0 +1,99 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ class FlagIncludedChunksPlugin {
8
+ apply(compiler) {
9
+ compiler.hooks.compilation.tap("FlagIncludedChunksPlugin", compilation => {
10
+ compilation.hooks.optimizeChunkIds.tap(
11
+ "FlagIncludedChunksPlugin",
12
+ chunks => {
13
+ // prepare two bit integers for each module
14
+ // 2^31 is the max number represented as SMI in v8
15
+ // we want the bits distributed this way:
16
+ // the bit 2^31 is pretty rar and only one module should get it
17
+ // so it has a probability of 1 / modulesCount
18
+ // the first bit (2^0) is the easiest and every module could get it
19
+ // if it doesn't get a better bit
20
+ // from bit 2^n to 2^(n+1) there is a probability of p
21
+ // so 1 / modulesCount == p^31
22
+ // <=> p = sqrt31(1 / modulesCount)
23
+ // so we use a modulo of 1 / sqrt31(1 / modulesCount)
24
+ const moduleBits = new WeakMap();
25
+ const modulesCount = compilation.modules.length;
26
+
27
+ // precalculate the modulo values for each bit
28
+ const modulo = 1 / Math.pow(1 / modulesCount, 1 / 31);
29
+ const modulos = Array.from(
30
+ { length: 31 },
31
+ (x, i) => Math.pow(modulo, i) | 0
32
+ );
33
+
34
+ // iterate all modules to generate bit values
35
+ let i = 0;
36
+ for (const module of compilation.modules) {
37
+ let bit = 30;
38
+ while (i % modulos[bit] !== 0) {
39
+ bit--;
40
+ }
41
+ moduleBits.set(module, 1 << bit);
42
+ i++;
43
+ }
44
+
45
+ // interate all chunks to generate bitmaps
46
+ const chunkModulesHash = new WeakMap();
47
+ for (const chunk of chunks) {
48
+ let hash = 0;
49
+ for (const module of chunk.modulesIterable) {
50
+ hash |= moduleBits.get(module);
51
+ }
52
+ chunkModulesHash.set(chunk, hash);
53
+ }
54
+
55
+ for (const chunkA of chunks) {
56
+ const chunkAHash = chunkModulesHash.get(chunkA);
57
+ const chunkAModulesCount = chunkA.getNumberOfModules();
58
+ if (chunkAModulesCount === 0) continue;
59
+ let bestModule = undefined;
60
+ for (const module of chunkA.modulesIterable) {
61
+ if (
62
+ bestModule === undefined ||
63
+ bestModule.getNumberOfChunks() > module.getNumberOfChunks()
64
+ )
65
+ bestModule = module;
66
+ }
67
+ loopB: for (const chunkB of bestModule.chunksIterable) {
68
+ // as we iterate the same iterables twice
69
+ // skip if we find ourselves
70
+ if (chunkA === chunkB) continue;
71
+
72
+ const chunkBModulesCount = chunkB.getNumberOfModules();
73
+
74
+ // ids for empty chunks are not included
75
+ if (chunkBModulesCount === 0) continue;
76
+
77
+ // instead of swapping A and B just bail
78
+ // as we loop twice the current A will be B and B then A
79
+ if (chunkAModulesCount > chunkBModulesCount) continue;
80
+
81
+ // is chunkA in chunkB?
82
+
83
+ // we do a cheap check for the hash value
84
+ const chunkBHash = chunkModulesHash.get(chunkB);
85
+ if ((chunkBHash & chunkAHash) !== chunkAHash) continue;
86
+
87
+ // compare all modules
88
+ for (const m of chunkA.modulesIterable) {
89
+ if (!chunkB.containsModule(m)) continue loopB;
90
+ }
91
+ chunkB.ids.push(chunkA.id);
92
+ }
93
+ }
94
+ }
95
+ );
96
+ });
97
+ }
98
+ }
99
+ module.exports = FlagIncludedChunksPlugin;
@@ -0,0 +1,231 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const validateOptions = require("schema-utils");
8
+ const schema = require("../../schemas/plugins/optimize/LimitChunkCountPlugin.json");
9
+ const LazyBucketSortedSet = require("../util/LazyBucketSortedSet");
10
+
11
+ /** @typedef {import("../../declarations/plugins/optimize/LimitChunkCountPlugin").LimitChunkCountPluginOptions} LimitChunkCountPluginOptions */
12
+ /** @typedef {import("../Chunk")} Chunk */
13
+ /** @typedef {import("../Compiler")} Compiler */
14
+
15
+ /**
16
+ * @typedef {Object} ChunkCombination
17
+ * @property {boolean} deleted this is set to true when combination was removed
18
+ * @property {number} sizeDiff
19
+ * @property {number} integratedSize
20
+ * @property {Chunk} a
21
+ * @property {Chunk} b
22
+ * @property {number} aIdx
23
+ * @property {number} bIdx
24
+ * @property {number} aSize
25
+ * @property {number} bSize
26
+ */
27
+
28
+ const addToSetMap = (map, key, value) => {
29
+ const set = map.get(key);
30
+ if (set === undefined) {
31
+ map.set(key, new Set([value]));
32
+ } else {
33
+ set.add(value);
34
+ }
35
+ };
36
+
37
+ class LimitChunkCountPlugin {
38
+ /**
39
+ * @param {LimitChunkCountPluginOptions=} options options object
40
+ */
41
+ constructor(options) {
42
+ if (!options) options = {};
43
+
44
+ validateOptions(schema, options, "Limit Chunk Count Plugin");
45
+ this.options = options;
46
+ }
47
+
48
+ /**
49
+ * @param {Compiler} compiler the webpack compiler
50
+ * @returns {void}
51
+ */
52
+ apply(compiler) {
53
+ const options = this.options;
54
+ compiler.hooks.compilation.tap("LimitChunkCountPlugin", compilation => {
55
+ compilation.hooks.optimizeChunksAdvanced.tap(
56
+ "LimitChunkCountPlugin",
57
+ chunks => {
58
+ const maxChunks = options.maxChunks;
59
+ if (!maxChunks) return;
60
+ if (maxChunks < 1) return;
61
+ if (chunks.length <= maxChunks) return;
62
+
63
+ let remainingChunksToMerge = chunks.length - maxChunks;
64
+
65
+ // order chunks in a deterministic way
66
+ const orderedChunks = chunks.slice().sort((a, b) => a.compareTo(b));
67
+
68
+ // create a lazy sorted data structure to keep all combinations
69
+ // this is large. Size = chunks * (chunks - 1) / 2
70
+ // It uses a multi layer bucket sort plus normal sort in the last layer
71
+ // It's also lazy so only accessed buckets are sorted
72
+ const combinations = new LazyBucketSortedSet(
73
+ // Layer 1: ordered by largest size benefit
74
+ c => c.sizeDiff,
75
+ (a, b) => b - a,
76
+ // Layer 2: ordered by smallest combined size
77
+ c => c.integratedSize,
78
+ (a, b) => a - b,
79
+ // Layer 3: ordered by position difference in orderedChunk (-> to be deterministic)
80
+ c => c.bIdx - c.aIdx,
81
+ (a, b) => a - b,
82
+ // Layer 4: ordered by position in orderedChunk (-> to be deterministic)
83
+ (a, b) => a.bIdx - b.bIdx
84
+ );
85
+
86
+ // we keep a mappng from chunk to all combinations
87
+ // but this mapping is not kept up-to-date with deletions
88
+ // so `deleted` flag need to be considered when iterating this
89
+ /** @type {Map<Chunk, Set<ChunkCombination>>} */
90
+ const combinationsByChunk = new Map();
91
+
92
+ orderedChunks.forEach((b, bIdx) => {
93
+ // create combination pairs with size and integrated size
94
+ for (let aIdx = 0; aIdx < bIdx; aIdx++) {
95
+ const a = orderedChunks[aIdx];
96
+ const integratedSize = a.integratedSize(b, options);
97
+
98
+ // filter pairs that do not have an integratedSize
99
+ // meaning they can NOT be integrated!
100
+ if (integratedSize === false) continue;
101
+
102
+ const aSize = a.size(options);
103
+ const bSize = b.size(options);
104
+ const c = {
105
+ deleted: false,
106
+ sizeDiff: aSize + bSize - integratedSize,
107
+ integratedSize,
108
+ a,
109
+ b,
110
+ aIdx,
111
+ bIdx,
112
+ aSize,
113
+ bSize
114
+ };
115
+ combinations.add(c);
116
+ addToSetMap(combinationsByChunk, a, c);
117
+ addToSetMap(combinationsByChunk, b, c);
118
+ }
119
+ return combinations;
120
+ });
121
+
122
+ // list of modified chunks during this run
123
+ // combinations affected by this change are skipped to allow
124
+ // futher optimizations
125
+ /** @type {Set<Chunk>} */
126
+ const modifiedChunks = new Set();
127
+
128
+ let changed = false;
129
+ // eslint-disable-next-line no-constant-condition
130
+ loop: while (true) {
131
+ const combination = combinations.popFirst();
132
+ if (combination === undefined) break;
133
+
134
+ combination.deleted = true;
135
+ const { a, b, integratedSize } = combination;
136
+
137
+ // skip over pair when
138
+ // one of the already merged chunks is a parent of one of the chunks
139
+ if (modifiedChunks.size > 0) {
140
+ const queue = new Set(a.groupsIterable);
141
+ for (const group of b.groupsIterable) {
142
+ queue.add(group);
143
+ }
144
+ for (const group of queue) {
145
+ for (const mChunk of modifiedChunks) {
146
+ if (mChunk !== a && mChunk !== b && mChunk.isInGroup(group)) {
147
+ // This is a potential pair which needs recalculation
148
+ // We can't do that now, but it merge before following pairs
149
+ // so we leave space for it, and consider chunks as modified
150
+ // just for the worse case
151
+ remainingChunksToMerge--;
152
+ if (remainingChunksToMerge <= 0) break loop;
153
+ modifiedChunks.add(a);
154
+ modifiedChunks.add(b);
155
+ continue loop;
156
+ }
157
+ }
158
+ for (const parent of group.parentsIterable) {
159
+ queue.add(parent);
160
+ }
161
+ }
162
+ }
163
+
164
+ // merge the chunks
165
+ if (a.integrate(b, "limit")) {
166
+ chunks.splice(chunks.indexOf(b), 1);
167
+
168
+ // flag chunk a as modified as further optimization are possible for all children here
169
+ modifiedChunks.add(a);
170
+
171
+ changed = true;
172
+ remainingChunksToMerge--;
173
+ if (remainingChunksToMerge <= 0) break;
174
+
175
+ // Update all affected combinations
176
+ // delete all combination with the removed chunk
177
+ // we will use combinations with the kept chunk instead
178
+ for (const combination of combinationsByChunk.get(b)) {
179
+ if (combination.deleted) continue;
180
+ combination.deleted = true;
181
+ combinations.delete(combination);
182
+ }
183
+
184
+ // Update combinations with the kept chunk with new sizes
185
+ for (const combination of combinationsByChunk.get(a)) {
186
+ if (combination.deleted) continue;
187
+ if (combination.a === a) {
188
+ // Update size
189
+ const newIntegratedSize = a.integratedSize(
190
+ combination.b,
191
+ options
192
+ );
193
+ if (newIntegratedSize === false) {
194
+ combination.deleted = true;
195
+ combinations.delete(combination);
196
+ continue;
197
+ }
198
+ const finishUpdate = combinations.startUpdate(combination);
199
+ combination.integratedSize = newIntegratedSize;
200
+ combination.aSize = integratedSize;
201
+ combination.sizeDiff =
202
+ combination.bSize + integratedSize - newIntegratedSize;
203
+ finishUpdate();
204
+ } else if (combination.b === a) {
205
+ // Update size
206
+ const newIntegratedSize = combination.a.integratedSize(
207
+ a,
208
+ options
209
+ );
210
+ if (newIntegratedSize === false) {
211
+ combination.deleted = true;
212
+ combinations.delete(combination);
213
+ continue;
214
+ }
215
+ const finishUpdate = combinations.startUpdate(combination);
216
+ combination.integratedSize = newIntegratedSize;
217
+ combination.bSize = integratedSize;
218
+ combination.sizeDiff =
219
+ integratedSize + combination.aSize - newIntegratedSize;
220
+ finishUpdate();
221
+ }
222
+ }
223
+ }
224
+ }
225
+ if (changed) return true;
226
+ }
227
+ );
228
+ });
229
+ }
230
+ }
231
+ module.exports = LimitChunkCountPlugin;
@@ -0,0 +1,78 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ class MergeDuplicateChunksPlugin {
8
+ apply(compiler) {
9
+ compiler.hooks.compilation.tap(
10
+ "MergeDuplicateChunksPlugin",
11
+ compilation => {
12
+ compilation.hooks.optimizeChunksBasic.tap(
13
+ "MergeDuplicateChunksPlugin",
14
+ chunks => {
15
+ // remember already tested chunks for performance
16
+ const notDuplicates = new Set();
17
+
18
+ // for each chunk
19
+ for (const chunk of chunks) {
20
+ // track a Set of all chunk that could be duplicates
21
+ let possibleDuplicates;
22
+ for (const module of chunk.modulesIterable) {
23
+ if (possibleDuplicates === undefined) {
24
+ // when possibleDuplicates is not yet set,
25
+ // create a new Set from chunks of the current module
26
+ // including only chunks with the same number of modules
27
+ for (const dup of module.chunksIterable) {
28
+ if (
29
+ dup !== chunk &&
30
+ chunk.getNumberOfModules() === dup.getNumberOfModules() &&
31
+ !notDuplicates.has(dup)
32
+ ) {
33
+ // delay allocating the new Set until here, reduce memory pressure
34
+ if (possibleDuplicates === undefined) {
35
+ possibleDuplicates = new Set();
36
+ }
37
+ possibleDuplicates.add(dup);
38
+ }
39
+ }
40
+ // when no chunk is possible we can break here
41
+ if (possibleDuplicates === undefined) break;
42
+ } else {
43
+ // validate existing possible duplicates
44
+ for (const dup of possibleDuplicates) {
45
+ // remove possible duplicate when module is not contained
46
+ if (!dup.containsModule(module)) {
47
+ possibleDuplicates.delete(dup);
48
+ }
49
+ }
50
+ // when all chunks has been removed we can break here
51
+ if (possibleDuplicates.size === 0) break;
52
+ }
53
+ }
54
+
55
+ // when we found duplicates
56
+ if (
57
+ possibleDuplicates !== undefined &&
58
+ possibleDuplicates.size > 0
59
+ ) {
60
+ for (const otherChunk of possibleDuplicates) {
61
+ if (otherChunk.hasRuntime() !== chunk.hasRuntime()) continue;
62
+ // merge them
63
+ if (chunk.integrate(otherChunk, "duplicate")) {
64
+ chunks.splice(chunks.indexOf(otherChunk), 1);
65
+ }
66
+ }
67
+ }
68
+
69
+ // don't check already processed chunks twice
70
+ notDuplicates.add(chunk);
71
+ }
72
+ }
73
+ );
74
+ }
75
+ );
76
+ }
77
+ }
78
+ module.exports = MergeDuplicateChunksPlugin;
@@ -0,0 +1,82 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const validateOptions = require("schema-utils");
8
+ const schema = require("../../schemas/plugins/optimize/MinChunkSizePlugin.json");
9
+
10
+ /** @typedef {import("../../declarations/plugins/optimize/MinChunkSizePlugin").MinChunkSizePluginOptions} MinChunkSizePluginOptions */
11
+
12
+ class MinChunkSizePlugin {
13
+ /**
14
+ * @param {MinChunkSizePluginOptions} options options object
15
+ */
16
+ constructor(options) {
17
+ validateOptions(schema, options, "Min Chunk Size Plugin");
18
+ this.options = options;
19
+ }
20
+
21
+ apply(compiler) {
22
+ const options = this.options;
23
+ const minChunkSize = options.minChunkSize;
24
+ compiler.hooks.compilation.tap("MinChunkSizePlugin", compilation => {
25
+ compilation.hooks.optimizeChunksAdvanced.tap(
26
+ "MinChunkSizePlugin",
27
+ chunks => {
28
+ const equalOptions = {
29
+ chunkOverhead: 1,
30
+ entryChunkMultiplicator: 1
31
+ };
32
+
33
+ const sortedSizeFilteredExtendedPairCombinations = chunks
34
+ .reduce((combinations, a, idx) => {
35
+ // create combination pairs
36
+ for (let i = 0; i < idx; i++) {
37
+ const b = chunks[i];
38
+ combinations.push([b, a]);
39
+ }
40
+ return combinations;
41
+ }, [])
42
+ .filter(pair => {
43
+ // check if one of the chunks sizes is smaller than the minChunkSize
44
+ const p0SmallerThanMinChunkSize =
45
+ pair[0].size(equalOptions) < minChunkSize;
46
+ const p1SmallerThanMinChunkSize =
47
+ pair[1].size(equalOptions) < minChunkSize;
48
+ return p0SmallerThanMinChunkSize || p1SmallerThanMinChunkSize;
49
+ })
50
+ .map(pair => {
51
+ // extend combination pairs with size and integrated size
52
+ const a = pair[0].size(options);
53
+ const b = pair[1].size(options);
54
+ const ab = pair[0].integratedSize(pair[1], options);
55
+ return [a + b - ab, ab, pair[0], pair[1]];
56
+ })
57
+ .filter(pair => {
58
+ // filter pairs that do not have an integratedSize
59
+ // meaning they can NOT be integrated!
60
+ return pair[1] !== false;
61
+ })
62
+ .sort((a, b) => {
63
+ // sadly javascript does an inplace sort here
64
+ // sort by size
65
+ const diff = b[0] - a[0];
66
+ if (diff !== 0) return diff;
67
+ return a[1] - b[1];
68
+ });
69
+
70
+ if (sortedSizeFilteredExtendedPairCombinations.length === 0) return;
71
+
72
+ const pair = sortedSizeFilteredExtendedPairCombinations[0];
73
+
74
+ pair[2].integrate(pair[3], "min-size");
75
+ chunks.splice(chunks.indexOf(pair[3]), 1);
76
+ return true;
77
+ }
78
+ );
79
+ });
80
+ }
81
+ }
82
+ module.exports = MinChunkSizePlugin;
@@ -0,0 +1,29 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const WebpackError = require("../WebpackError");
8
+ const SizeFormatHelpers = require("../SizeFormatHelpers");
9
+
10
+ class MinMaxSizeWarning extends WebpackError {
11
+ constructor(keys, minSize, maxSize) {
12
+ let keysMessage = "Fallback cache group";
13
+ if (keys) {
14
+ keysMessage =
15
+ keys.length > 1
16
+ ? `Cache groups ${keys.sort().join(", ")}`
17
+ : `Cache group ${keys[0]}`;
18
+ }
19
+ super(
20
+ `SplitChunksPlugin\n` +
21
+ `${keysMessage}\n` +
22
+ `Configured minSize (${SizeFormatHelpers.formatSize(minSize)}) is ` +
23
+ `bigger than maxSize (${SizeFormatHelpers.formatSize(maxSize)}).\n` +
24
+ "This seem to be a invalid optimiziation.splitChunks configuration."
25
+ );
26
+ }
27
+ }
28
+
29
+ module.exports = MinMaxSizeWarning;