@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,67 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Gajus Kuizinas @gajus
4
+ */
5
+ "use strict";
6
+
7
+ const Ajv = require("ajv");
8
+ const ajv = new Ajv({
9
+ errorDataPath: "configuration",
10
+ allErrors: true,
11
+ verbose: true
12
+ });
13
+ require("ajv-keywords")(ajv, ["instanceof"]);
14
+ require("../schemas/ajv.absolutePath")(ajv);
15
+
16
+ const validateSchema = (schema, options) => {
17
+ if (Array.isArray(options)) {
18
+ const errors = options.map(options => validateObject(schema, options));
19
+ errors.forEach((list, idx) => {
20
+ const applyPrefix = err => {
21
+ err.dataPath = `[${idx}]${err.dataPath}`;
22
+ if (err.children) {
23
+ err.children.forEach(applyPrefix);
24
+ }
25
+ };
26
+ list.forEach(applyPrefix);
27
+ });
28
+ return errors.reduce((arr, items) => {
29
+ return arr.concat(items);
30
+ }, []);
31
+ } else {
32
+ return validateObject(schema, options);
33
+ }
34
+ };
35
+
36
+ const validateObject = (schema, options) => {
37
+ const validate = ajv.compile(schema);
38
+ const valid = validate(options);
39
+ return valid ? [] : filterErrors(validate.errors);
40
+ };
41
+
42
+ const filterErrors = errors => {
43
+ let newErrors = [];
44
+ for (const err of errors) {
45
+ const dataPath = err.dataPath;
46
+ let children = [];
47
+ newErrors = newErrors.filter(oldError => {
48
+ if (oldError.dataPath.includes(dataPath)) {
49
+ if (oldError.children) {
50
+ children = children.concat(oldError.children.slice(0));
51
+ }
52
+ oldError.children = undefined;
53
+ children.push(oldError);
54
+ return false;
55
+ }
56
+ return true;
57
+ });
58
+ if (children.length) {
59
+ err.children = children;
60
+ }
61
+ newErrors.push(err);
62
+ }
63
+
64
+ return newErrors;
65
+ };
66
+
67
+ module.exports = validateSchema;
@@ -0,0 +1,17 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ */
4
+ "use strict";
5
+
6
+ const WebpackError = require("../WebpackError");
7
+
8
+ module.exports = class UnsupportedWebAssemblyFeatureError extends WebpackError {
9
+ /** @param {string} message Error message */
10
+ constructor(message) {
11
+ super(message);
12
+ this.name = "UnsupportedWebAssemblyFeatureError";
13
+ this.hideStack = true;
14
+
15
+ Error.captureStackTrace(this, this.constructor);
16
+ }
17
+ };
@@ -0,0 +1,69 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const UnsupportedWebAssemblyFeatureError = require("./UnsupportedWebAssemblyFeatureError");
8
+
9
+ class WasmFinalizeExportsPlugin {
10
+ apply(compiler) {
11
+ compiler.hooks.compilation.tap("WasmFinalizeExportsPlugin", compilation => {
12
+ compilation.hooks.finishModules.tap(
13
+ "WasmFinalizeExportsPlugin",
14
+ modules => {
15
+ for (const module of modules) {
16
+ // 1. if a WebAssembly module
17
+ if (module.type.startsWith("webassembly") === true) {
18
+ const jsIncompatibleExports =
19
+ module.buildMeta.jsIncompatibleExports;
20
+
21
+ if (jsIncompatibleExports === undefined) {
22
+ continue;
23
+ }
24
+
25
+ for (const reason of module.reasons) {
26
+ // 2. is referenced by a non-WebAssembly module
27
+ if (reason.module.type.startsWith("webassembly") === false) {
28
+ const ref = compilation.getDependencyReference(
29
+ reason.module,
30
+ reason.dependency
31
+ );
32
+
33
+ if (!ref) continue;
34
+
35
+ const importedNames = ref.importedNames;
36
+
37
+ if (Array.isArray(importedNames)) {
38
+ importedNames.forEach(name => {
39
+ // 3. and uses a func with an incompatible JS signature
40
+ if (
41
+ Object.prototype.hasOwnProperty.call(
42
+ jsIncompatibleExports,
43
+ name
44
+ )
45
+ ) {
46
+ // 4. error
47
+ /** @type {any} */
48
+ const error = new UnsupportedWebAssemblyFeatureError(
49
+ `Export "${name}" with ${jsIncompatibleExports[name]} can only be used for direct wasm to wasm dependencies`
50
+ );
51
+ error.module = module;
52
+ error.origin = reason.module;
53
+ error.originLoc = reason.dependency.loc;
54
+ error.dependencies = [reason.dependency];
55
+ compilation.errors.push(error);
56
+ }
57
+ });
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
64
+ );
65
+ });
66
+ }
67
+ }
68
+
69
+ module.exports = WasmFinalizeExportsPlugin;
@@ -0,0 +1,341 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const Template = require("../Template");
8
+ const WebAssemblyUtils = require("./WebAssemblyUtils");
9
+
10
+ /** @typedef {import("../Module")} Module */
11
+ /** @typedef {import("../MainTemplate")} MainTemplate */
12
+
13
+ // Get all wasm modules
14
+ const getAllWasmModules = chunk => {
15
+ const wasmModules = chunk.getAllAsyncChunks();
16
+ const array = [];
17
+ for (const chunk of wasmModules) {
18
+ for (const m of chunk.modulesIterable) {
19
+ if (m.type.startsWith("webassembly")) {
20
+ array.push(m);
21
+ }
22
+ }
23
+ }
24
+
25
+ return array;
26
+ };
27
+
28
+ /**
29
+ * generates the import object function for a module
30
+ * @param {Module} module the module
31
+ * @param {boolean} mangle mangle imports
32
+ * @returns {string} source code
33
+ */
34
+ const generateImportObject = (module, mangle) => {
35
+ const waitForInstances = new Map();
36
+ const properties = [];
37
+ const usedWasmDependencies = WebAssemblyUtils.getUsedDependencies(
38
+ module,
39
+ mangle
40
+ );
41
+ for (const usedDep of usedWasmDependencies) {
42
+ const dep = usedDep.dependency;
43
+ const importedModule = dep.module;
44
+ const exportName = dep.name;
45
+ const usedName = importedModule && importedModule.isUsed(exportName);
46
+ const description = dep.description;
47
+ const direct = dep.onlyDirectImport;
48
+
49
+ const module = usedDep.module;
50
+ const name = usedDep.name;
51
+
52
+ if (direct) {
53
+ const instanceVar = `m${waitForInstances.size}`;
54
+ waitForInstances.set(instanceVar, importedModule.id);
55
+ properties.push({
56
+ module,
57
+ name,
58
+ value: `${instanceVar}[${JSON.stringify(usedName)}]`
59
+ });
60
+ } else {
61
+ const params = description.signature.params.map(
62
+ (param, k) => "p" + k + param.valtype
63
+ );
64
+
65
+ const mod = `installedModules[${JSON.stringify(importedModule.id)}]`;
66
+ const func = `${mod}.exports[${JSON.stringify(usedName)}]`;
67
+
68
+ properties.push({
69
+ module,
70
+ name,
71
+ value: Template.asString([
72
+ (importedModule.type.startsWith("webassembly")
73
+ ? `${mod} ? ${func} : `
74
+ : "") + `function(${params}) {`,
75
+ Template.indent([`return ${func}(${params});`]),
76
+ "}"
77
+ ])
78
+ });
79
+ }
80
+ }
81
+
82
+ let importObject;
83
+ if (mangle) {
84
+ importObject = [
85
+ "return {",
86
+ Template.indent([
87
+ properties.map(p => `${JSON.stringify(p.name)}: ${p.value}`).join(",\n")
88
+ ]),
89
+ "};"
90
+ ];
91
+ } else {
92
+ const propertiesByModule = new Map();
93
+ for (const p of properties) {
94
+ let list = propertiesByModule.get(p.module);
95
+ if (list === undefined) {
96
+ propertiesByModule.set(p.module, (list = []));
97
+ }
98
+ list.push(p);
99
+ }
100
+ importObject = [
101
+ "return {",
102
+ Template.indent([
103
+ Array.from(propertiesByModule, ([module, list]) => {
104
+ return Template.asString([
105
+ `${JSON.stringify(module)}: {`,
106
+ Template.indent([
107
+ list.map(p => `${JSON.stringify(p.name)}: ${p.value}`).join(",\n")
108
+ ]),
109
+ "}"
110
+ ]);
111
+ }).join(",\n")
112
+ ]),
113
+ "};"
114
+ ];
115
+ }
116
+
117
+ if (waitForInstances.size === 1) {
118
+ const moduleId = Array.from(waitForInstances.values())[0];
119
+ const promise = `installedWasmModules[${JSON.stringify(moduleId)}]`;
120
+ const variable = Array.from(waitForInstances.keys())[0];
121
+ return Template.asString([
122
+ `${JSON.stringify(module.id)}: function() {`,
123
+ Template.indent([
124
+ `return promiseResolve().then(function() { return ${promise}; }).then(function(${variable}) {`,
125
+ Template.indent(importObject),
126
+ "});"
127
+ ]),
128
+ "},"
129
+ ]);
130
+ } else if (waitForInstances.size > 0) {
131
+ const promises = Array.from(
132
+ waitForInstances.values(),
133
+ id => `installedWasmModules[${JSON.stringify(id)}]`
134
+ ).join(", ");
135
+ const variables = Array.from(
136
+ waitForInstances.keys(),
137
+ (name, i) => `${name} = array[${i}]`
138
+ ).join(", ");
139
+ return Template.asString([
140
+ `${JSON.stringify(module.id)}: function() {`,
141
+ Template.indent([
142
+ `return promiseResolve().then(function() { return Promise.all([${promises}]); }).then(function(array) {`,
143
+ Template.indent([`var ${variables};`, ...importObject]),
144
+ "});"
145
+ ]),
146
+ "},"
147
+ ]);
148
+ } else {
149
+ return Template.asString([
150
+ `${JSON.stringify(module.id)}: function() {`,
151
+ Template.indent(importObject),
152
+ "},"
153
+ ]);
154
+ }
155
+ };
156
+
157
+ class WasmMainTemplatePlugin {
158
+ constructor({ generateLoadBinaryCode, supportsStreaming, mangleImports }) {
159
+ this.generateLoadBinaryCode = generateLoadBinaryCode;
160
+ this.supportsStreaming = supportsStreaming;
161
+ this.mangleImports = mangleImports;
162
+ }
163
+
164
+ /**
165
+ * @param {MainTemplate} mainTemplate main template
166
+ * @returns {void}
167
+ */
168
+ apply(mainTemplate) {
169
+ mainTemplate.hooks.localVars.tap(
170
+ "WasmMainTemplatePlugin",
171
+ (source, chunk) => {
172
+ const wasmModules = getAllWasmModules(chunk);
173
+ if (wasmModules.length === 0) return source;
174
+ const importObjects = wasmModules.map(module => {
175
+ return generateImportObject(module, this.mangleImports);
176
+ });
177
+ return Template.asString([
178
+ source,
179
+ "",
180
+ "// object to store loaded and loading wasm modules",
181
+ "var installedWasmModules = {};",
182
+ "",
183
+ // This function is used to delay reading the installed wasm module promises
184
+ // by a microtask. Sorting them doesn't help because there are egdecases where
185
+ // sorting is not possible (modules splitted into different chunks).
186
+ // So we not even trying and solve this by a microtask delay.
187
+ "function promiseResolve() { return Promise.resolve(); }",
188
+ "",
189
+ "var wasmImportObjects = {",
190
+ Template.indent(importObjects),
191
+ "};"
192
+ ]);
193
+ }
194
+ );
195
+ mainTemplate.hooks.requireEnsure.tap(
196
+ "WasmMainTemplatePlugin",
197
+ (source, chunk, hash) => {
198
+ const webassemblyModuleFilename =
199
+ mainTemplate.outputOptions.webassemblyModuleFilename;
200
+
201
+ const chunkModuleMaps = chunk.getChunkModuleMaps(m =>
202
+ m.type.startsWith("webassembly")
203
+ );
204
+ if (Object.keys(chunkModuleMaps.id).length === 0) return source;
205
+ const wasmModuleSrcPath = mainTemplate.getAssetPath(
206
+ JSON.stringify(webassemblyModuleFilename),
207
+ {
208
+ hash: `" + ${mainTemplate.renderCurrentHashCode(hash)} + "`,
209
+ hashWithLength: length =>
210
+ `" + ${mainTemplate.renderCurrentHashCode(hash, length)} + "`,
211
+ module: {
212
+ id: '" + wasmModuleId + "',
213
+ hash: `" + ${JSON.stringify(
214
+ chunkModuleMaps.hash
215
+ )}[wasmModuleId] + "`,
216
+ hashWithLength(length) {
217
+ const shortChunkHashMap = Object.create(null);
218
+ for (const wasmModuleId of Object.keys(chunkModuleMaps.hash)) {
219
+ if (typeof chunkModuleMaps.hash[wasmModuleId] === "string") {
220
+ shortChunkHashMap[wasmModuleId] = chunkModuleMaps.hash[
221
+ wasmModuleId
222
+ ].substr(0, length);
223
+ }
224
+ }
225
+ return `" + ${JSON.stringify(
226
+ shortChunkHashMap
227
+ )}[wasmModuleId] + "`;
228
+ }
229
+ }
230
+ }
231
+ );
232
+ const createImportObject = content =>
233
+ this.mangleImports
234
+ ? `{ ${JSON.stringify(
235
+ WebAssemblyUtils.MANGLED_MODULE
236
+ )}: ${content} }`
237
+ : content;
238
+ return Template.asString([
239
+ source,
240
+ "",
241
+ "// Fetch + compile chunk loading for webassembly",
242
+ "",
243
+ `var wasmModules = ${JSON.stringify(
244
+ chunkModuleMaps.id
245
+ )}[chunkId] || [];`,
246
+ "",
247
+ "wasmModules.forEach(function(wasmModuleId) {",
248
+ Template.indent([
249
+ "var installedWasmModuleData = installedWasmModules[wasmModuleId];",
250
+ "",
251
+ '// a Promise means "currently loading" or "already loaded".',
252
+ "if(installedWasmModuleData)",
253
+ Template.indent(["promises.push(installedWasmModuleData);"]),
254
+ "else {",
255
+ Template.indent([
256
+ `var importObject = wasmImportObjects[wasmModuleId]();`,
257
+ `var req = ${this.generateLoadBinaryCode(wasmModuleSrcPath)};`,
258
+ "var promise;",
259
+ this.supportsStreaming
260
+ ? Template.asString([
261
+ "if(importObject instanceof Promise && typeof WebAssembly.compileStreaming === 'function') {",
262
+ Template.indent([
263
+ "promise = Promise.all([WebAssembly.compileStreaming(req), importObject]).then(function(items) {",
264
+ Template.indent([
265
+ `return WebAssembly.instantiate(items[0], ${createImportObject(
266
+ "items[1]"
267
+ )});`
268
+ ]),
269
+ "});"
270
+ ]),
271
+ "} else if(typeof WebAssembly.instantiateStreaming === 'function') {",
272
+ Template.indent([
273
+ `promise = WebAssembly.instantiateStreaming(req, ${createImportObject(
274
+ "importObject"
275
+ )});`
276
+ ])
277
+ ])
278
+ : Template.asString([
279
+ "if(importObject instanceof Promise) {",
280
+ Template.indent([
281
+ "var bytesPromise = req.then(function(x) { return x.arrayBuffer(); });",
282
+ "promise = Promise.all([",
283
+ Template.indent([
284
+ "bytesPromise.then(function(bytes) { return WebAssembly.compile(bytes); }),",
285
+ "importObject"
286
+ ]),
287
+ "]).then(function(items) {",
288
+ Template.indent([
289
+ `return WebAssembly.instantiate(items[0], ${createImportObject(
290
+ "items[1]"
291
+ )});`
292
+ ]),
293
+ "});"
294
+ ])
295
+ ]),
296
+ "} else {",
297
+ Template.indent([
298
+ "var bytesPromise = req.then(function(x) { return x.arrayBuffer(); });",
299
+ "promise = bytesPromise.then(function(bytes) {",
300
+ Template.indent([
301
+ `return WebAssembly.instantiate(bytes, ${createImportObject(
302
+ "importObject"
303
+ )});`
304
+ ]),
305
+ "});"
306
+ ]),
307
+ "}",
308
+ "promises.push(installedWasmModules[wasmModuleId] = promise.then(function(res) {",
309
+ Template.indent([
310
+ `return ${mainTemplate.requireFn}.w[wasmModuleId] = (res.instance || res).exports;`
311
+ ]),
312
+ "}));"
313
+ ]),
314
+ "}"
315
+ ]),
316
+ "});"
317
+ ]);
318
+ }
319
+ );
320
+ mainTemplate.hooks.requireExtensions.tap(
321
+ "WasmMainTemplatePlugin",
322
+ (source, chunk) => {
323
+ if (!chunk.hasModuleInGraph(m => m.type.startsWith("webassembly"))) {
324
+ return source;
325
+ }
326
+ return Template.asString([
327
+ source,
328
+ "",
329
+ "// object with all WebAssembly.instance exports",
330
+ `${mainTemplate.requireFn}.w = {};`
331
+ ]);
332
+ }
333
+ );
334
+ mainTemplate.hooks.hash.tap("WasmMainTemplatePlugin", hash => {
335
+ hash.update("WasmMainTemplatePlugin");
336
+ hash.update("2");
337
+ });
338
+ }
339
+ }
340
+
341
+ module.exports = WasmMainTemplatePlugin;