@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,321 @@
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
+
9
+ module.exports = class NodeMainTemplatePlugin {
10
+ constructor(asyncChunkLoading) {
11
+ this.asyncChunkLoading = asyncChunkLoading;
12
+ }
13
+
14
+ apply(mainTemplate) {
15
+ const needChunkOnDemandLoadingCode = chunk => {
16
+ for (const chunkGroup of chunk.groupsIterable) {
17
+ if (chunkGroup.getNumberOfChildren() > 0) return true;
18
+ }
19
+ return false;
20
+ };
21
+ const asyncChunkLoading = this.asyncChunkLoading;
22
+ mainTemplate.hooks.localVars.tap(
23
+ "NodeMainTemplatePlugin",
24
+ (source, chunk) => {
25
+ if (needChunkOnDemandLoadingCode(chunk)) {
26
+ return Template.asString([
27
+ source,
28
+ "",
29
+ "// object to store loaded chunks",
30
+ '// "0" means "already loaded"',
31
+ "var installedChunks = {",
32
+ Template.indent(
33
+ chunk.ids.map(id => `${JSON.stringify(id)}: 0`).join(",\n")
34
+ ),
35
+ "};"
36
+ ]);
37
+ }
38
+ return source;
39
+ }
40
+ );
41
+ mainTemplate.hooks.requireExtensions.tap(
42
+ "NodeMainTemplatePlugin",
43
+ (source, chunk) => {
44
+ if (needChunkOnDemandLoadingCode(chunk)) {
45
+ return Template.asString([
46
+ source,
47
+ "",
48
+ "// uncaught error handler for webpack runtime",
49
+ `${mainTemplate.requireFn}.oe = function(err) {`,
50
+ Template.indent([
51
+ "process.nextTick(function() {",
52
+ Template.indent(
53
+ "throw err; // catch this error by using import().catch()"
54
+ ),
55
+ "});"
56
+ ]),
57
+ "};"
58
+ ]);
59
+ }
60
+ return source;
61
+ }
62
+ );
63
+ mainTemplate.hooks.requireEnsure.tap(
64
+ "NodeMainTemplatePlugin",
65
+ (source, chunk, hash) => {
66
+ const chunkFilename = mainTemplate.outputOptions.chunkFilename;
67
+ const chunkMaps = chunk.getChunkMaps();
68
+ const insertMoreModules = [
69
+ "var moreModules = chunk.modules, chunkIds = chunk.ids;",
70
+ "for(var moduleId in moreModules) {",
71
+ Template.indent(
72
+ mainTemplate.renderAddModule(
73
+ hash,
74
+ chunk,
75
+ "moduleId",
76
+ "moreModules[moduleId]"
77
+ )
78
+ ),
79
+ "}"
80
+ ];
81
+ if (asyncChunkLoading) {
82
+ return Template.asString([
83
+ source,
84
+ "",
85
+ "// ReadFile + VM.run chunk loading for javascript",
86
+ "",
87
+ "var installedChunkData = installedChunks[chunkId];",
88
+ 'if(installedChunkData !== 0) { // 0 means "already installed".',
89
+ Template.indent([
90
+ '// array of [resolve, reject, promise] means "currently loading"',
91
+ "if(installedChunkData) {",
92
+ Template.indent(["promises.push(installedChunkData[2]);"]),
93
+ "} else {",
94
+ Template.indent([
95
+ "// load the chunk and return promise to it",
96
+ "var promise = new Promise(function(resolve, reject) {",
97
+ Template.indent([
98
+ "installedChunkData = installedChunks[chunkId] = [resolve, reject];",
99
+ "var filename = require('path').join(__dirname, " +
100
+ mainTemplate.getAssetPath(
101
+ JSON.stringify(`/${chunkFilename}`),
102
+ {
103
+ hash: `" + ${mainTemplate.renderCurrentHashCode(
104
+ hash
105
+ )} + "`,
106
+ hashWithLength: length =>
107
+ `" + ${mainTemplate.renderCurrentHashCode(
108
+ hash,
109
+ length
110
+ )} + "`,
111
+ chunk: {
112
+ id: '" + chunkId + "',
113
+ hash: `" + ${JSON.stringify(
114
+ chunkMaps.hash
115
+ )}[chunkId] + "`,
116
+ hashWithLength: length => {
117
+ const shortChunkHashMap = {};
118
+ for (const chunkId of Object.keys(chunkMaps.hash)) {
119
+ if (typeof chunkMaps.hash[chunkId] === "string") {
120
+ shortChunkHashMap[chunkId] = chunkMaps.hash[
121
+ chunkId
122
+ ].substr(0, length);
123
+ }
124
+ }
125
+ return `" + ${JSON.stringify(
126
+ shortChunkHashMap
127
+ )}[chunkId] + "`;
128
+ },
129
+ contentHash: {
130
+ javascript: `" + ${JSON.stringify(
131
+ chunkMaps.contentHash.javascript
132
+ )}[chunkId] + "`
133
+ },
134
+ contentHashWithLength: {
135
+ javascript: length => {
136
+ const shortContentHashMap = {};
137
+ const contentHash =
138
+ chunkMaps.contentHash.javascript;
139
+ for (const chunkId of Object.keys(contentHash)) {
140
+ if (typeof contentHash[chunkId] === "string") {
141
+ shortContentHashMap[chunkId] = contentHash[
142
+ chunkId
143
+ ].substr(0, length);
144
+ }
145
+ }
146
+ return `" + ${JSON.stringify(
147
+ shortContentHashMap
148
+ )}[chunkId] + "`;
149
+ }
150
+ },
151
+ name: `" + (${JSON.stringify(
152
+ chunkMaps.name
153
+ )}[chunkId]||chunkId) + "`
154
+ },
155
+ contentHashType: "javascript"
156
+ }
157
+ ) +
158
+ ");",
159
+ "require('fs').readFile(filename, 'utf-8', function(err, content) {",
160
+ Template.indent(
161
+ [
162
+ "if(err) return reject(err);",
163
+ "var chunk = {};",
164
+ "require('vm').runInThisContext('(function(exports, require, __dirname, __filename) {' + content + '\\n})', filename)" +
165
+ "(chunk, require, require('path').dirname(filename), filename);"
166
+ ]
167
+ .concat(insertMoreModules)
168
+ .concat([
169
+ "var callbacks = [];",
170
+ "for(var i = 0; i < chunkIds.length; i++) {",
171
+ Template.indent([
172
+ "if(installedChunks[chunkIds[i]])",
173
+ Template.indent([
174
+ "callbacks = callbacks.concat(installedChunks[chunkIds[i]][0]);"
175
+ ]),
176
+ "installedChunks[chunkIds[i]] = 0;"
177
+ ]),
178
+ "}",
179
+ "for(i = 0; i < callbacks.length; i++)",
180
+ Template.indent("callbacks[i]();")
181
+ ])
182
+ ),
183
+ "});"
184
+ ]),
185
+ "});",
186
+ "promises.push(installedChunkData[2] = promise);"
187
+ ]),
188
+ "}"
189
+ ]),
190
+ "}"
191
+ ]);
192
+ } else {
193
+ const request = mainTemplate.getAssetPath(
194
+ JSON.stringify(`./${chunkFilename}`),
195
+ {
196
+ hash: `" + ${mainTemplate.renderCurrentHashCode(hash)} + "`,
197
+ hashWithLength: length =>
198
+ `" + ${mainTemplate.renderCurrentHashCode(hash, length)} + "`,
199
+ chunk: {
200
+ id: '" + chunkId + "',
201
+ hash: `" + ${JSON.stringify(chunkMaps.hash)}[chunkId] + "`,
202
+ hashWithLength: length => {
203
+ const shortChunkHashMap = {};
204
+ for (const chunkId of Object.keys(chunkMaps.hash)) {
205
+ if (typeof chunkMaps.hash[chunkId] === "string") {
206
+ shortChunkHashMap[chunkId] = chunkMaps.hash[
207
+ chunkId
208
+ ].substr(0, length);
209
+ }
210
+ }
211
+ return `" + ${JSON.stringify(
212
+ shortChunkHashMap
213
+ )}[chunkId] + "`;
214
+ },
215
+ contentHash: {
216
+ javascript: `" + ${JSON.stringify(
217
+ chunkMaps.contentHash.javascript
218
+ )}[chunkId] + "`
219
+ },
220
+ contentHashWithLength: {
221
+ javascript: length => {
222
+ const shortContentHashMap = {};
223
+ const contentHash = chunkMaps.contentHash.javascript;
224
+ for (const chunkId of Object.keys(contentHash)) {
225
+ if (typeof contentHash[chunkId] === "string") {
226
+ shortContentHashMap[chunkId] = contentHash[
227
+ chunkId
228
+ ].substr(0, length);
229
+ }
230
+ }
231
+ return `" + ${JSON.stringify(
232
+ shortContentHashMap
233
+ )}[chunkId] + "`;
234
+ }
235
+ },
236
+ name: `" + (${JSON.stringify(
237
+ chunkMaps.name
238
+ )}[chunkId]||chunkId) + "`
239
+ },
240
+ contentHashType: "javascript"
241
+ }
242
+ );
243
+ return Template.asString([
244
+ source,
245
+ "",
246
+ "// require() chunk loading for javascript",
247
+ "",
248
+ '// "0" is the signal for "already loaded"',
249
+ "if(installedChunks[chunkId] !== 0) {",
250
+ Template.indent(
251
+ [`var chunk = require(${request});`]
252
+ .concat(insertMoreModules)
253
+ .concat([
254
+ "for(var i = 0; i < chunkIds.length; i++)",
255
+ Template.indent("installedChunks[chunkIds[i]] = 0;")
256
+ ])
257
+ ),
258
+ "}"
259
+ ]);
260
+ }
261
+ }
262
+ );
263
+ mainTemplate.hooks.hotBootstrap.tap(
264
+ "NodeMainTemplatePlugin",
265
+ (source, chunk, hash) => {
266
+ const hotUpdateChunkFilename =
267
+ mainTemplate.outputOptions.hotUpdateChunkFilename;
268
+ const hotUpdateMainFilename =
269
+ mainTemplate.outputOptions.hotUpdateMainFilename;
270
+ const chunkMaps = chunk.getChunkMaps();
271
+ const currentHotUpdateChunkFilename = mainTemplate.getAssetPath(
272
+ JSON.stringify(hotUpdateChunkFilename),
273
+ {
274
+ hash: `" + ${mainTemplate.renderCurrentHashCode(hash)} + "`,
275
+ hashWithLength: length =>
276
+ `" + ${mainTemplate.renderCurrentHashCode(hash, length)} + "`,
277
+ chunk: {
278
+ id: '" + chunkId + "',
279
+ hash: `" + ${JSON.stringify(chunkMaps.hash)}[chunkId] + "`,
280
+ hashWithLength: length => {
281
+ const shortChunkHashMap = {};
282
+ for (const chunkId of Object.keys(chunkMaps.hash)) {
283
+ if (typeof chunkMaps.hash[chunkId] === "string") {
284
+ shortChunkHashMap[chunkId] = chunkMaps.hash[chunkId].substr(
285
+ 0,
286
+ length
287
+ );
288
+ }
289
+ }
290
+ return `" + ${JSON.stringify(shortChunkHashMap)}[chunkId] + "`;
291
+ },
292
+ name: `" + (${JSON.stringify(
293
+ chunkMaps.name
294
+ )}[chunkId]||chunkId) + "`
295
+ }
296
+ }
297
+ );
298
+ const currentHotUpdateMainFilename = mainTemplate.getAssetPath(
299
+ JSON.stringify(hotUpdateMainFilename),
300
+ {
301
+ hash: `" + ${mainTemplate.renderCurrentHashCode(hash)} + "`,
302
+ hashWithLength: length =>
303
+ `" + ${mainTemplate.renderCurrentHashCode(hash, length)} + "`
304
+ }
305
+ );
306
+ return Template.getFunctionContent(
307
+ asyncChunkLoading
308
+ ? require("./NodeMainTemplateAsync.runtime")
309
+ : require("./NodeMainTemplate.runtime")
310
+ )
311
+ .replace(/\$require\$/g, mainTemplate.requireFn)
312
+ .replace(/\$hotMainFilename\$/g, currentHotUpdateMainFilename)
313
+ .replace(/\$hotChunkFilename\$/g, currentHotUpdateChunkFilename);
314
+ }
315
+ );
316
+ mainTemplate.hooks.hash.tap("NodeMainTemplatePlugin", hash => {
317
+ hash.update("node");
318
+ hash.update("4");
319
+ });
320
+ }
321
+ };
@@ -0,0 +1,22 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const fs = require("fs");
8
+ const path = require("path");
9
+ const mkdirp = require("mkdirp");
10
+
11
+ class NodeOutputFileSystem {
12
+ constructor() {
13
+ this.mkdirp = mkdirp;
14
+ this.mkdir = fs.mkdir.bind(fs);
15
+ this.rmdir = fs.rmdir.bind(fs);
16
+ this.unlink = fs.unlink.bind(fs);
17
+ this.writeFile = fs.writeFile.bind(fs);
18
+ this.join = path.join.bind(path);
19
+ }
20
+ }
21
+
22
+ module.exports = NodeOutputFileSystem;
@@ -0,0 +1,141 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const AliasPlugin = require("enhanced-resolve/lib/AliasPlugin");
7
+ const ParserHelpers = require("../ParserHelpers");
8
+ const nodeLibsBrowser = require("node-libs-browser");
9
+
10
+ module.exports = class NodeSourcePlugin {
11
+ constructor(options) {
12
+ this.options = options;
13
+ }
14
+ apply(compiler) {
15
+ const options = this.options;
16
+ if (options === false) {
17
+ // allow single kill switch to turn off this plugin
18
+ return;
19
+ }
20
+
21
+ const getPathToModule = (module, type) => {
22
+ if (type === true || (type === undefined && nodeLibsBrowser[module])) {
23
+ if (!nodeLibsBrowser[module]) {
24
+ throw new Error(
25
+ `No browser version for node.js core module ${module} available`
26
+ );
27
+ }
28
+ return nodeLibsBrowser[module];
29
+ } else if (type === "mock") {
30
+ return require.resolve(`node-libs-browser/mock/${module}`);
31
+ } else if (type === "empty") {
32
+ return require.resolve("node-libs-browser/mock/empty");
33
+ } else {
34
+ return module;
35
+ }
36
+ };
37
+
38
+ const addExpression = (parser, name, module, type, suffix) => {
39
+ suffix = suffix || "";
40
+ parser.hooks.expression.for(name).tap("NodeSourcePlugin", () => {
41
+ if (
42
+ parser.state.module &&
43
+ parser.state.module.resource === getPathToModule(module, type)
44
+ )
45
+ return;
46
+ const mockModule = ParserHelpers.requireFileAsExpression(
47
+ parser.state.module.context,
48
+ getPathToModule(module, type)
49
+ );
50
+ return ParserHelpers.addParsedVariableToModule(
51
+ parser,
52
+ name,
53
+ mockModule + suffix
54
+ );
55
+ });
56
+ };
57
+
58
+ compiler.hooks.compilation.tap(
59
+ "NodeSourcePlugin",
60
+ (compilation, { normalModuleFactory }) => {
61
+ const handler = (parser, parserOptions) => {
62
+ if (parserOptions.node === false) return;
63
+
64
+ let localOptions = options;
65
+ if (parserOptions.node) {
66
+ localOptions = Object.assign({}, localOptions, parserOptions.node);
67
+ }
68
+ if (localOptions.global) {
69
+ parser.hooks.expression
70
+ .for("global")
71
+ .tap("NodeSourcePlugin", () => {
72
+ const retrieveGlobalModule = ParserHelpers.requireFileAsExpression(
73
+ parser.state.module.context,
74
+ require.resolve("../../buildin/global")
75
+ );
76
+ return ParserHelpers.addParsedVariableToModule(
77
+ parser,
78
+ "global",
79
+ retrieveGlobalModule
80
+ );
81
+ });
82
+ }
83
+ if (localOptions.process) {
84
+ const processType = localOptions.process;
85
+ addExpression(parser, "process", "process", processType);
86
+ }
87
+ if (localOptions.console) {
88
+ const consoleType = localOptions.console;
89
+ addExpression(parser, "console", "console", consoleType);
90
+ }
91
+ const bufferType = localOptions.Buffer;
92
+ if (bufferType) {
93
+ addExpression(parser, "Buffer", "buffer", bufferType, ".Buffer");
94
+ }
95
+ if (localOptions.setImmediate) {
96
+ const setImmediateType = localOptions.setImmediate;
97
+ addExpression(
98
+ parser,
99
+ "setImmediate",
100
+ "timers",
101
+ setImmediateType,
102
+ ".setImmediate"
103
+ );
104
+ addExpression(
105
+ parser,
106
+ "clearImmediate",
107
+ "timers",
108
+ setImmediateType,
109
+ ".clearImmediate"
110
+ );
111
+ }
112
+ };
113
+ normalModuleFactory.hooks.parser
114
+ .for("javascript/auto")
115
+ .tap("NodeSourcePlugin", handler);
116
+ normalModuleFactory.hooks.parser
117
+ .for("javascript/dynamic")
118
+ .tap("NodeSourcePlugin", handler);
119
+ }
120
+ );
121
+ compiler.hooks.afterResolvers.tap("NodeSourcePlugin", compiler => {
122
+ for (const lib of Object.keys(nodeLibsBrowser)) {
123
+ if (options[lib] !== false) {
124
+ compiler.resolverFactory.hooks.resolver
125
+ .for("normal")
126
+ .tap("NodeSourcePlugin", resolver => {
127
+ new AliasPlugin(
128
+ "described-resolve",
129
+ {
130
+ name: lib,
131
+ onlyModule: true,
132
+ alias: getPathToModule(lib, options[lib])
133
+ },
134
+ "resolve"
135
+ ).apply(resolver);
136
+ });
137
+ }
138
+ }
139
+ });
140
+ }
141
+ };
@@ -0,0 +1,19 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const ExternalsPlugin = require("../ExternalsPlugin");
8
+
9
+ const builtins =
10
+ // eslint-disable-next-line node/no-unsupported-features/node-builtins,node/no-deprecated-api
11
+ require("module").builtinModules || Object.keys(process.binding("natives"));
12
+
13
+ class NodeTargetPlugin {
14
+ apply(compiler) {
15
+ new ExternalsPlugin("commonjs", builtins).apply(compiler);
16
+ }
17
+ }
18
+
19
+ module.exports = NodeTargetPlugin;
@@ -0,0 +1,31 @@
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 NodeMainTemplatePlugin = require("./NodeMainTemplatePlugin");
9
+ const NodeChunkTemplatePlugin = require("./NodeChunkTemplatePlugin");
10
+ const NodeHotUpdateChunkTemplatePlugin = require("./NodeHotUpdateChunkTemplatePlugin");
11
+
12
+ class NodeTemplatePlugin {
13
+ constructor(options) {
14
+ options = options || {};
15
+ this.asyncChunkLoading = options.asyncChunkLoading;
16
+ }
17
+
18
+ apply(compiler) {
19
+ compiler.hooks.thisCompilation.tap("NodeTemplatePlugin", compilation => {
20
+ new NodeMainTemplatePlugin(this.asyncChunkLoading).apply(
21
+ compilation.mainTemplate
22
+ );
23
+ new NodeChunkTemplatePlugin().apply(compilation.chunkTemplate);
24
+ new NodeHotUpdateChunkTemplatePlugin().apply(
25
+ compilation.hotUpdateChunkTemplate
26
+ );
27
+ });
28
+ }
29
+ }
30
+
31
+ module.exports = NodeTemplatePlugin;
@@ -0,0 +1,109 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const Watchpack = require("watchpack");
8
+ const objectToMap = require("../util/objectToMap");
9
+
10
+ class NodeWatchFileSystem {
11
+ constructor(inputFileSystem) {
12
+ this.inputFileSystem = inputFileSystem;
13
+ this.watcherOptions = {
14
+ aggregateTimeout: 0
15
+ };
16
+ this.watcher = new Watchpack(this.watcherOptions);
17
+ }
18
+
19
+ watch(files, dirs, missing, startTime, options, callback, callbackUndelayed) {
20
+ if (!Array.isArray(files)) {
21
+ throw new Error("Invalid arguments: 'files'");
22
+ }
23
+ if (!Array.isArray(dirs)) {
24
+ throw new Error("Invalid arguments: 'dirs'");
25
+ }
26
+ if (!Array.isArray(missing)) {
27
+ throw new Error("Invalid arguments: 'missing'");
28
+ }
29
+ if (typeof callback !== "function") {
30
+ throw new Error("Invalid arguments: 'callback'");
31
+ }
32
+ if (typeof startTime !== "number" && startTime) {
33
+ throw new Error("Invalid arguments: 'startTime'");
34
+ }
35
+ if (typeof options !== "object") {
36
+ throw new Error("Invalid arguments: 'options'");
37
+ }
38
+ if (typeof callbackUndelayed !== "function" && callbackUndelayed) {
39
+ throw new Error("Invalid arguments: 'callbackUndelayed'");
40
+ }
41
+ const oldWatcher = this.watcher;
42
+ this.watcher = new Watchpack(options);
43
+
44
+ if (callbackUndelayed) {
45
+ this.watcher.once("change", callbackUndelayed);
46
+ }
47
+ const cachedFiles = files;
48
+ const cachedDirs = dirs;
49
+ this.watcher.once("aggregated", (changes, removals) => {
50
+ changes = changes.concat(removals);
51
+ if (this.inputFileSystem && this.inputFileSystem.purge) {
52
+ this.inputFileSystem.purge(changes);
53
+ }
54
+ const times = objectToMap(this.watcher.getTimes());
55
+ files = new Set(files);
56
+ dirs = new Set(dirs);
57
+ missing = new Set(missing);
58
+ removals = new Set(removals.filter(file => files.has(file)));
59
+ callback(
60
+ null,
61
+ changes.filter(file => files.has(file)).sort(),
62
+ changes.filter(file => dirs.has(file)).sort(),
63
+ changes.filter(file => missing.has(file)).sort(),
64
+ times,
65
+ times,
66
+ removals
67
+ );
68
+ });
69
+
70
+ this.watcher.watch(
71
+ cachedFiles.concat(missing),
72
+ cachedDirs.concat(missing),
73
+ startTime
74
+ );
75
+
76
+ if (oldWatcher) {
77
+ oldWatcher.close();
78
+ }
79
+ return {
80
+ close: () => {
81
+ if (this.watcher) {
82
+ this.watcher.close();
83
+ this.watcher = null;
84
+ }
85
+ },
86
+ pause: () => {
87
+ if (this.watcher) {
88
+ this.watcher.pause();
89
+ }
90
+ },
91
+ getFileTimestamps: () => {
92
+ if (this.watcher) {
93
+ return objectToMap(this.watcher.getTimes());
94
+ } else {
95
+ return new Map();
96
+ }
97
+ },
98
+ getContextTimestamps: () => {
99
+ if (this.watcher) {
100
+ return objectToMap(this.watcher.getTimes());
101
+ } else {
102
+ return new Map();
103
+ }
104
+ }
105
+ };
106
+ }
107
+ }
108
+
109
+ module.exports = NodeWatchFileSystem;
@@ -0,0 +1,61 @@
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 WasmMainTemplatePlugin = require("../wasm/WasmMainTemplatePlugin");
9
+
10
+ class ReadFileCompileWasmTemplatePlugin {
11
+ constructor(options) {
12
+ this.options = options || {};
13
+ }
14
+
15
+ apply(compiler) {
16
+ compiler.hooks.thisCompilation.tap(
17
+ "ReadFileCompileWasmTemplatePlugin",
18
+ compilation => {
19
+ const generateLoadBinaryCode = path =>
20
+ Template.asString([
21
+ "new Promise(function (resolve, reject) {",
22
+ Template.indent([
23
+ "var { readFile } = require('fs');",
24
+ "var { join } = require('path');",
25
+ "",
26
+ "try {",
27
+ Template.indent([
28
+ `readFile(join(__dirname, ${path}), function(err, buffer){`,
29
+ Template.indent([
30
+ "if (err) return reject(err);",
31
+ "",
32
+ "// Fake fetch response",
33
+ "resolve({",
34
+ Template.indent([
35
+ "arrayBuffer() { return Promise.resolve(buffer); }"
36
+ ]),
37
+ "});"
38
+ ]),
39
+ "});"
40
+ ]),
41
+ "} catch (err) { reject(err); }"
42
+ ]),
43
+ "})"
44
+ ]);
45
+
46
+ const plugin = new WasmMainTemplatePlugin(
47
+ Object.assign(
48
+ {
49
+ generateLoadBinaryCode,
50
+ supportsStreaming: false
51
+ },
52
+ this.options
53
+ )
54
+ );
55
+ plugin.apply(compilation.mainTemplate);
56
+ }
57
+ );
58
+ }
59
+ }
60
+
61
+ module.exports = ReadFileCompileWasmTemplatePlugin;