@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,274 @@
1
+ "use strict";
2
+
3
+ // Simulations show these probabilities for a single change
4
+ // 93.1% that one group is invalidated
5
+ // 4.8% that two groups are invalidated
6
+ // 1.1% that 3 groups are invalidated
7
+ // 0.1% that 4 or more groups are invalidated
8
+ //
9
+ // And these for removing/adding 10 lexically adjacent files
10
+ // 64.5% that one group is invalidated
11
+ // 24.8% that two groups are invalidated
12
+ // 7.8% that 3 groups are invalidated
13
+ // 2.7% that 4 or more groups are invalidated
14
+ //
15
+ // And these for removing/adding 3 random files
16
+ // 0% that one group is invalidated
17
+ // 3.7% that two groups are invalidated
18
+ // 80.8% that 3 groups are invalidated
19
+ // 12.3% that 4 groups are invalidated
20
+ // 3.2% that 5 or more groups are invalidated
21
+
22
+ /**
23
+ *
24
+ * @param {string} a key
25
+ * @param {string} b key
26
+ * @returns {number} the similarity as number
27
+ */
28
+ const similarity = (a, b) => {
29
+ const l = Math.min(a.length, b.length);
30
+ let dist = 0;
31
+ for (let i = 0; i < l; i++) {
32
+ const ca = a.charCodeAt(i);
33
+ const cb = b.charCodeAt(i);
34
+ dist += Math.max(0, 10 - Math.abs(ca - cb));
35
+ }
36
+ return dist;
37
+ };
38
+
39
+ /**
40
+ * @param {string} a key
41
+ * @param {string} b key
42
+ * @returns {string} the common part and a single char for the difference
43
+ */
44
+ const getName = (a, b) => {
45
+ const l = Math.min(a.length, b.length);
46
+ let r = "";
47
+ for (let i = 0; i < l; i++) {
48
+ const ca = a.charAt(i);
49
+ const cb = b.charAt(i);
50
+ r += ca;
51
+ if (ca === cb) {
52
+ continue;
53
+ }
54
+ return r;
55
+ }
56
+ return a;
57
+ };
58
+
59
+ /**
60
+ * @template T
61
+ */
62
+ class Node {
63
+ /**
64
+ * @param {T} item item
65
+ * @param {string} key key
66
+ * @param {number} size size
67
+ */
68
+ constructor(item, key, size) {
69
+ this.item = item;
70
+ this.key = key;
71
+ this.size = size;
72
+ }
73
+ }
74
+
75
+ /**
76
+ * @template T
77
+ */
78
+ class Group {
79
+ /**
80
+ * @param {Node<T>[]} nodes nodes
81
+ * @param {number[]} similarities similarities between the nodes (length = nodes.length - 1)
82
+ */
83
+ constructor(nodes, similarities) {
84
+ this.nodes = nodes;
85
+ this.similarities = similarities;
86
+ this.size = nodes.reduce((size, node) => size + node.size, 0);
87
+ /** @type {string} */
88
+ this.key = undefined;
89
+ }
90
+ }
91
+
92
+ /**
93
+ * @template T
94
+ * @typedef {Object} GroupedItems<T>
95
+ * @property {string} key
96
+ * @property {T[]} items
97
+ * @property {number} size
98
+ */
99
+
100
+ /**
101
+ * @template T
102
+ * @typedef {Object} Options
103
+ * @property {number} maxSize maximum size of a group
104
+ * @property {number} minSize minimum size of a group (preferred over maximum size)
105
+ * @property {Iterable<T>} items a list of items
106
+ * @property {function(T): number} getSize function to get size of an item
107
+ * @property {function(T): string} getKey function to get the key of an item
108
+ */
109
+
110
+ /**
111
+ * @template T
112
+ * @param {Options<T>} options options object
113
+ * @returns {GroupedItems<T>[]} grouped items
114
+ */
115
+ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
116
+ /** @type {Group<T>[]} */
117
+ const result = [];
118
+
119
+ const nodes = Array.from(
120
+ items,
121
+ item => new Node(item, getKey(item), getSize(item))
122
+ );
123
+
124
+ /** @type {Node<T>[]} */
125
+ const initialNodes = [];
126
+
127
+ // lexically ordering of keys
128
+ nodes.sort((a, b) => {
129
+ if (a.key < b.key) return -1;
130
+ if (a.key > b.key) return 1;
131
+ return 0;
132
+ });
133
+
134
+ // return nodes bigger than maxSize directly as group
135
+ for (const node of nodes) {
136
+ if (node.size >= maxSize) {
137
+ result.push(new Group([node], []));
138
+ } else {
139
+ initialNodes.push(node);
140
+ }
141
+ }
142
+
143
+ if (initialNodes.length > 0) {
144
+ // calculate similarities between lexically adjacent nodes
145
+ /** @type {number[]} */
146
+ const similarities = [];
147
+ for (let i = 1; i < initialNodes.length; i++) {
148
+ const a = initialNodes[i - 1];
149
+ const b = initialNodes[i];
150
+ similarities.push(similarity(a.key, b.key));
151
+ }
152
+
153
+ const initialGroup = new Group(initialNodes, similarities);
154
+
155
+ if (initialGroup.size < minSize) {
156
+ // We hit an edgecase where the working set is already smaller than minSize
157
+ // We merge it with the smallest result node to keep minSize intact
158
+ if (result.length > 0) {
159
+ const smallestGroup = result.reduce((min, group) =>
160
+ min.size > group.size ? group : min
161
+ );
162
+ for (const node of initialGroup.nodes) smallestGroup.nodes.push(node);
163
+ smallestGroup.nodes.sort((a, b) => {
164
+ if (a.key < b.key) return -1;
165
+ if (a.key > b.key) return 1;
166
+ return 0;
167
+ });
168
+ } else {
169
+ // There are no other nodes
170
+ // We use all nodes and have to accept that it's smaller than minSize
171
+ result.push(initialGroup);
172
+ }
173
+ } else {
174
+ const queue = [initialGroup];
175
+
176
+ while (queue.length) {
177
+ const group = queue.pop();
178
+ // only groups bigger than maxSize need to be splitted
179
+ if (group.size < maxSize) {
180
+ result.push(group);
181
+ continue;
182
+ }
183
+
184
+ // find unsplittable area from left and right
185
+ // going minSize from left and right
186
+ // at least one node need to be included otherwise we get stuck
187
+ let left = 0;
188
+ let leftSize = 0;
189
+ while (leftSize <= minSize) {
190
+ leftSize += group.nodes[left].size;
191
+ left++;
192
+ }
193
+ let right = group.nodes.length - 1;
194
+ let rightSize = 0;
195
+ while (rightSize <= minSize) {
196
+ rightSize += group.nodes[right].size;
197
+ right--;
198
+ }
199
+
200
+ if (left - 1 > right) {
201
+ // can't split group while holding minSize
202
+ // because minSize is preferred of maxSize we return
203
+ // the group here even while it's too big
204
+ // To avoid this make sure maxSize > minSize * 3
205
+ result.push(group);
206
+ continue;
207
+ }
208
+ if (left <= right) {
209
+ // when there is a area between left and right
210
+ // we look for best split point
211
+ // we split at the minimum similarity
212
+ // here key space is separated the most
213
+ let best = left - 1;
214
+ let bestSimilarity = group.similarities[best];
215
+ for (let i = left; i <= right; i++) {
216
+ const similarity = group.similarities[i];
217
+ if (similarity < bestSimilarity) {
218
+ best = i;
219
+ bestSimilarity = similarity;
220
+ }
221
+ }
222
+ left = best + 1;
223
+ right = best;
224
+ }
225
+
226
+ // create two new groups for left and right area
227
+ // and queue them up
228
+ const rightNodes = [group.nodes[right + 1]];
229
+ /** @type {number[]} */
230
+ const rightSimilaries = [];
231
+ for (let i = right + 2; i < group.nodes.length; i++) {
232
+ rightSimilaries.push(group.similarities[i - 1]);
233
+ rightNodes.push(group.nodes[i]);
234
+ }
235
+ queue.push(new Group(rightNodes, rightSimilaries));
236
+
237
+ const leftNodes = [group.nodes[0]];
238
+ /** @type {number[]} */
239
+ const leftSimilaries = [];
240
+ for (let i = 1; i < left; i++) {
241
+ leftSimilaries.push(group.similarities[i - 1]);
242
+ leftNodes.push(group.nodes[i]);
243
+ }
244
+ queue.push(new Group(leftNodes, leftSimilaries));
245
+ }
246
+ }
247
+ }
248
+
249
+ // lexically ordering
250
+ result.sort((a, b) => {
251
+ if (a.nodes[0].key < b.nodes[0].key) return -1;
252
+ if (a.nodes[0].key > b.nodes[0].key) return 1;
253
+ return 0;
254
+ });
255
+
256
+ // give every group a name
257
+ for (let i = 0; i < result.length; i++) {
258
+ const group = result[i];
259
+ const first = group.nodes[0];
260
+ const last = group.nodes[group.nodes.length - 1];
261
+ let name = getName(first.key, last.key);
262
+ group.key = name;
263
+ }
264
+
265
+ // return the results
266
+ return result.map(group => {
267
+ /** @type {GroupedItems} */
268
+ return {
269
+ key: group.key,
270
+ items: group.nodes.map(node => node.item),
271
+ size: group.size
272
+ };
273
+ });
274
+ };
@@ -0,0 +1,71 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ // From Webpack 5
9
+ // https://github.com/webpack/webpack/blob/853bfda35a0080605c09e1bdeb0103bcb9367a10/lib/util/hash/BatchedHash.js
10
+
11
+ const { Hash } = require("../createHash");
12
+ const MAX_SHORT_STRING = require("./wasm-hash").MAX_SHORT_STRING;
13
+
14
+ class BatchedHash extends Hash {
15
+ constructor(hash) {
16
+ super();
17
+ this.string = undefined;
18
+ this.encoding = undefined;
19
+ this.hash = hash;
20
+ }
21
+
22
+ /**
23
+ * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
24
+ * @param {string|Buffer} data data
25
+ * @param {string=} inputEncoding data encoding
26
+ * @returns {this} updated hash
27
+ */
28
+ update(data, inputEncoding) {
29
+ if (this.string !== undefined) {
30
+ if (
31
+ typeof data === "string" &&
32
+ inputEncoding === this.encoding &&
33
+ this.string.length + data.length < MAX_SHORT_STRING
34
+ ) {
35
+ this.string += data;
36
+ return this;
37
+ }
38
+ this.hash.update(this.string, this.encoding);
39
+ this.string = undefined;
40
+ }
41
+ if (typeof data === "string") {
42
+ if (
43
+ data.length < MAX_SHORT_STRING &&
44
+ // base64 encoding is not valid since it may contain padding chars
45
+ (!inputEncoding || !inputEncoding.startsWith("ba"))
46
+ ) {
47
+ this.string = data;
48
+ this.encoding = inputEncoding;
49
+ } else {
50
+ this.hash.update(data, inputEncoding);
51
+ }
52
+ } else {
53
+ this.hash.update(data);
54
+ }
55
+ return this;
56
+ }
57
+
58
+ /**
59
+ * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
60
+ * @param {string=} encoding encoding of the return value
61
+ * @returns {string|Buffer} digest
62
+ */
63
+ digest(encoding) {
64
+ if (this.string !== undefined) {
65
+ this.hash.update(this.string, this.encoding);
66
+ }
67
+ return this.hash.digest(encoding);
68
+ }
69
+ }
70
+
71
+ module.exports = BatchedHash;
@@ -0,0 +1,25 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ // From Webpack 5
9
+ // https://github.com/webpack/webpack/blob/853bfda35a0080605c09e1bdeb0103bcb9367a10/lib/util/hash/md4.js
10
+
11
+ const create = require("./wasm-hash").create;
12
+
13
+ //#region wasm code: md4 (../../../assembly/hash/md4.asm.ts) --initialMemory 1
14
+ // This will only get called on Node 18+
15
+ // eslint-disable-next-line no-undef
16
+ const md4 = new WebAssembly.Module(
17
+ Buffer.from(
18
+ // 2154 bytes
19
+ "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",
20
+ "base64"
21
+ )
22
+ );
23
+ //#endregion
24
+
25
+ module.exports = create.bind(null, md4, [], 64, 32);
@@ -0,0 +1,174 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ // From Webpack 5
9
+ // https://github.com/webpack/webpack/blob/853bfda35a0080605c09e1bdeb0103bcb9367a10/lib/util/hash/wasm-hash.js
10
+
11
+ // 65536 is the size of a wasm memory page
12
+ // 64 is the maximum chunk size for every possible wasm hash implementation
13
+ // 4 is the maximum number of bytes per char for string encoding (max is utf-8)
14
+ // ~3 makes sure that it's always a block of 4 chars, so avoid partially encoded bytes for base64
15
+ const MAX_SHORT_STRING = Math.floor((65536 - 64) / 4) & ~3;
16
+
17
+ class WasmHash {
18
+ /**
19
+ * @param {WebAssembly.Instance} instance wasm instance
20
+ * @param {WebAssembly.Instance[]} instancesPool pool of instances
21
+ * @param {number} chunkSize size of data chunks passed to wasm
22
+ * @param {number} digestSize size of digest returned by wasm
23
+ */
24
+ constructor(instance, instancesPool, chunkSize, digestSize) {
25
+ const exports = /** @type {any} */ (instance.exports);
26
+ exports.init();
27
+ this.exports = exports;
28
+ this.mem = Buffer.from(exports.memory.buffer, 0, 65536);
29
+ this.buffered = 0;
30
+ this.instancesPool = instancesPool;
31
+ this.chunkSize = chunkSize;
32
+ this.digestSize = digestSize;
33
+ }
34
+
35
+ reset() {
36
+ this.buffered = 0;
37
+ this.exports.init();
38
+ }
39
+
40
+ /**
41
+ * @param {Buffer | string} data data
42
+ * @param {BufferEncoding=} encoding encoding
43
+ * @returns {this} itself
44
+ */
45
+ update(data, encoding) {
46
+ if (typeof data === "string") {
47
+ while (data.length > MAX_SHORT_STRING) {
48
+ this._updateWithShortString(data.slice(0, MAX_SHORT_STRING), encoding);
49
+ data = data.slice(MAX_SHORT_STRING);
50
+ }
51
+ this._updateWithShortString(data, encoding);
52
+ return this;
53
+ }
54
+ this._updateWithBuffer(data);
55
+ return this;
56
+ }
57
+
58
+ /**
59
+ * @param {string} data data
60
+ * @param {BufferEncoding | 'utf-8'} encoding encoding
61
+ * @returns {void}
62
+ */
63
+ _updateWithShortString(data, encoding) {
64
+ const { exports, buffered, mem, chunkSize } = this;
65
+ let endPos;
66
+ if (data.length < 70) {
67
+ if (!encoding || encoding === "utf-8" || encoding === "utf8") {
68
+ endPos = buffered;
69
+ for (let i = 0; i < data.length; i++) {
70
+ const cc = data.charCodeAt(i);
71
+ if (cc < 0x80) mem[endPos++] = cc;
72
+ else if (cc < 0x800) {
73
+ mem[endPos] = (cc >> 6) | 0xc0;
74
+ mem[endPos + 1] = (cc & 0x3f) | 0x80;
75
+ endPos += 2;
76
+ } else {
77
+ // bail-out for weird chars
78
+ const slicedData = data.slice(i);
79
+ endPos += mem.write(
80
+ slicedData,
81
+ endPos,
82
+ slicedData.length,
83
+ encoding
84
+ );
85
+ break;
86
+ }
87
+ }
88
+ } else if (encoding === "latin1") {
89
+ endPos = buffered;
90
+ for (let i = 0; i < data.length; i++) {
91
+ const cc = data.charCodeAt(i);
92
+ mem[endPos++] = cc;
93
+ }
94
+ } else {
95
+ endPos = buffered + mem.write(data, buffered, data.length, encoding);
96
+ }
97
+ } else {
98
+ endPos = buffered + mem.write(data, buffered, data.length, encoding);
99
+ }
100
+ if (endPos < chunkSize) {
101
+ this.buffered = endPos;
102
+ } else {
103
+ const l = endPos & ~(this.chunkSize - 1);
104
+ exports.update(l);
105
+ const newBuffered = endPos - l;
106
+ this.buffered = newBuffered;
107
+ if (newBuffered > 0) mem.copyWithin(0, l, endPos);
108
+ }
109
+ }
110
+
111
+ /**
112
+ * @param {Buffer} data data
113
+ * @returns {void}
114
+ */
115
+ _updateWithBuffer(data) {
116
+ const { exports, buffered, mem } = this;
117
+ const length = data.length;
118
+ if (buffered + length < this.chunkSize) {
119
+ data.copy(mem, buffered, 0, length);
120
+ this.buffered += length;
121
+ } else {
122
+ const l = (buffered + length) & ~(this.chunkSize - 1);
123
+ if (l > 65536) {
124
+ let i = 65536 - buffered;
125
+ data.copy(mem, buffered, 0, i);
126
+ exports.update(65536);
127
+ const stop = l - buffered - 65536;
128
+ while (i < stop) {
129
+ data.copy(mem, 0, i, i + 65536);
130
+ exports.update(65536);
131
+ i += 65536;
132
+ }
133
+ data.copy(mem, 0, i, l - buffered);
134
+ exports.update(l - buffered - i);
135
+ } else {
136
+ data.copy(mem, buffered, 0, l - buffered);
137
+ exports.update(l);
138
+ }
139
+ const newBuffered = length + buffered - l;
140
+ this.buffered = newBuffered;
141
+ if (newBuffered > 0) data.copy(mem, 0, length - newBuffered, length);
142
+ }
143
+ }
144
+
145
+ digest(type) {
146
+ const { exports, buffered, mem, digestSize } = this;
147
+ exports.final(buffered);
148
+ this.instancesPool.push(this);
149
+ const hex = mem.toString("latin1", 0, digestSize);
150
+ if (type === "hex") return hex;
151
+ if (type === "binary" || !type) return Buffer.from(hex, "hex");
152
+ return Buffer.from(hex, "hex").toString(type);
153
+ }
154
+ }
155
+
156
+ const create = (wasmModule, instancesPool, chunkSize, digestSize) => {
157
+ if (instancesPool.length > 0) {
158
+ const old = instancesPool.pop();
159
+ old.reset();
160
+ return old;
161
+ } else {
162
+ return new WasmHash(
163
+ // This will only get called on Node 18+
164
+ // eslint-disable-next-line no-undef
165
+ new WebAssembly.Instance(wasmModule),
166
+ instancesPool,
167
+ chunkSize,
168
+ digestSize
169
+ );
170
+ }
171
+ };
172
+
173
+ module.exports.create = create;
174
+ module.exports.MAX_SHORT_STRING = MAX_SHORT_STRING;
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ const path = require("path");
3
+
4
+ /**
5
+ * @param {string} context context for relative path
6
+ * @param {string} relativePath path
7
+ * @returns {string} absolute path
8
+ */
9
+ const requestToAbsolute = (context, relativePath) => {
10
+ if (relativePath.startsWith("./") || relativePath.startsWith("../"))
11
+ return path.join(context, relativePath);
12
+ return relativePath;
13
+ };
14
+
15
+ /**
16
+ * @typedef {Object} MakeRelativePathsCache
17
+ * @property {Map<string, Map<string, string>>=} relativePaths
18
+ */
19
+
20
+ /**
21
+ *
22
+ * @param {string} maybeAbsolutePath path to check
23
+ * @returns {boolean} returns true if path is "Absolute Path"-like
24
+ */
25
+ const looksLikeAbsolutePath = maybeAbsolutePath => {
26
+ if (/^\/.*\/$/.test(maybeAbsolutePath)) {
27
+ // this 'path' is actually a regexp generated by dynamic requires.
28
+ // Don't treat it as an absolute path.
29
+ return false;
30
+ }
31
+ return /^(?:[a-z]:\\|\/)/i.test(maybeAbsolutePath);
32
+ };
33
+
34
+ /**
35
+ *
36
+ * @param {string} p path to normalize
37
+ * @returns {string} normalized version of path
38
+ */
39
+ const normalizePathSeparator = p => p.replace(/\\/g, "/");
40
+
41
+ /**
42
+ *
43
+ * @param {string} context context for relative path
44
+ * @param {string} identifier identifier for path
45
+ * @returns {string} a converted relative path
46
+ */
47
+ const _makePathsRelative = (context, identifier) => {
48
+ return identifier
49
+ .split(/([|! ])/)
50
+ .map(str =>
51
+ looksLikeAbsolutePath(str)
52
+ ? normalizePathSeparator(path.relative(context, str))
53
+ : str
54
+ )
55
+ .join("");
56
+ };
57
+
58
+ /**
59
+ *
60
+ * @param {string} context context used to create relative path
61
+ * @param {string} identifier identifier used to create relative path
62
+ * @param {MakeRelativePathsCache=} cache the cache object being set
63
+ * @returns {string} the returned relative path
64
+ */
65
+ exports.makePathsRelative = (context, identifier, cache) => {
66
+ if (!cache) return _makePathsRelative(context, identifier);
67
+
68
+ const relativePaths =
69
+ cache.relativePaths || (cache.relativePaths = new Map());
70
+
71
+ let cachedResult;
72
+ let contextCache = relativePaths.get(context);
73
+ if (contextCache === undefined) {
74
+ relativePaths.set(context, (contextCache = new Map()));
75
+ } else {
76
+ cachedResult = contextCache.get(identifier);
77
+ }
78
+
79
+ if (cachedResult !== undefined) {
80
+ return cachedResult;
81
+ } else {
82
+ const relativePath = _makePathsRelative(context, identifier);
83
+ contextCache.set(identifier, relativePath);
84
+ return relativePath;
85
+ }
86
+ };
87
+
88
+ /**
89
+ * @param {string} context absolute context path
90
+ * @param {string} request any request string may containing absolute paths, query string, etc.
91
+ * @returns {string} a new request string avoiding absolute paths when possible
92
+ */
93
+ exports.contextify = (context, request) => {
94
+ return request
95
+ .split("!")
96
+ .map(r => {
97
+ const splitPath = r.split("?", 2);
98
+ if (/^[a-zA-Z]:\\/.test(splitPath[0])) {
99
+ splitPath[0] = path.win32.relative(context, splitPath[0]);
100
+ if (!/^[a-zA-Z]:\\/.test(splitPath[0])) {
101
+ splitPath[0] = splitPath[0].replace(/\\/g, "/");
102
+ }
103
+ }
104
+ if (/^\//.test(splitPath[0])) {
105
+ splitPath[0] = path.posix.relative(context, splitPath[0]);
106
+ }
107
+ if (!/^(\.\.\/|\/|[a-zA-Z]:\\)/.test(splitPath[0])) {
108
+ splitPath[0] = "./" + splitPath[0];
109
+ }
110
+ return splitPath.join("?");
111
+ })
112
+ .join("!");
113
+ };
114
+
115
+ /**
116
+ * @param {string} context absolute context path
117
+ * @param {string} request any request string
118
+ * @returns {string} a new request string using absolute paths when possible
119
+ */
120
+ const _absolutify = (context, request) => {
121
+ return request
122
+ .split("!")
123
+ .map(r => requestToAbsolute(context, r))
124
+ .join("!");
125
+ };
126
+
127
+ exports.absolutify = _absolutify;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * convert an object into its 2D array equivalent to be turned
3
+ * into an ES6 map
4
+ *
5
+ * @param {object} obj any object type that works with Object.keys()
6
+ * @returns {Map<TODO, TODO>} an ES6 Map of KV pairs
7
+ */
8
+ module.exports = function objectToMap(obj) {
9
+ return new Map(
10
+ Object.keys(obj).map(key => {
11
+ /** @type {[string, string]} */
12
+ const pair = [key, obj[key]];
13
+ return pair;
14
+ })
15
+ );
16
+ };