@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.
- package/LICENSE +20 -0
- package/README.md +784 -0
- package/SECURITY.md +9 -0
- package/bin/webpack.js +171 -0
- package/buildin/amd-define.js +3 -0
- package/buildin/amd-options.js +2 -0
- package/buildin/global.js +20 -0
- package/buildin/harmony-module.js +24 -0
- package/buildin/module.js +22 -0
- package/buildin/system.js +7 -0
- package/declarations/WebpackOptions.d.ts +1466 -0
- package/declarations/plugins/BannerPlugin.d.ts +49 -0
- package/declarations/plugins/DllPlugin.d.ts +32 -0
- package/declarations/plugins/DllReferencePlugin.d.ts +126 -0
- package/declarations/plugins/HashedModuleIdsPlugin.d.ts +24 -0
- package/declarations/plugins/IgnorePlugin.d.ts +27 -0
- package/declarations/plugins/LoaderOptionsPlugin.d.ts +27 -0
- package/declarations/plugins/ProgressPlugin.d.ts +42 -0
- package/declarations/plugins/SourceMapDevToolPlugin.d.ts +94 -0
- package/declarations/plugins/WatchIgnorePlugin.d.ts +10 -0
- package/declarations/plugins/debug/ProfilingPlugin.d.ts +12 -0
- package/declarations/plugins/optimize/AggressiveSplittingPlugin.d.ts +24 -0
- package/declarations/plugins/optimize/LimitChunkCountPlugin.d.ts +16 -0
- package/declarations/plugins/optimize/MinChunkSizePlugin.d.ts +12 -0
- package/declarations/plugins/optimize/OccurrenceOrderChunkIdsPlugin.d.ts +12 -0
- package/declarations/plugins/optimize/OccurrenceOrderModuleIdsPlugin.d.ts +12 -0
- package/hot/dev-server.js +61 -0
- package/hot/emitter.js +2 -0
- package/hot/log-apply-result.js +44 -0
- package/hot/log.js +59 -0
- package/hot/only-dev-server.js +102 -0
- package/hot/poll.js +37 -0
- package/hot/signal.js +62 -0
- package/lib/APIPlugin.js +84 -0
- package/lib/AbstractMethodError.js +43 -0
- package/lib/AmdMainTemplatePlugin.js +106 -0
- package/lib/AsyncDependenciesBlock.js +110 -0
- package/lib/AsyncDependencyToInitialChunkError.js +31 -0
- package/lib/AutomaticPrefetchPlugin.js +57 -0
- package/lib/BannerPlugin.js +122 -0
- package/lib/BasicEvaluatedExpression.js +248 -0
- package/lib/CachePlugin.js +100 -0
- package/lib/CaseSensitiveModulesWarning.js +67 -0
- package/lib/Chunk.js +875 -0
- package/lib/ChunkGroup.js +513 -0
- package/lib/ChunkRenderError.js +32 -0
- package/lib/ChunkTemplate.js +87 -0
- package/lib/CommentCompilationWarning.js +32 -0
- package/lib/CommonJsStuffPlugin.js +116 -0
- package/lib/CompatibilityPlugin.js +70 -0
- package/lib/Compilation.js +2327 -0
- package/lib/Compiler.js +735 -0
- package/lib/ConcurrentCompilationError.js +19 -0
- package/lib/ConstPlugin.js +348 -0
- package/lib/ContextExclusionPlugin.js +28 -0
- package/lib/ContextModule.js +872 -0
- package/lib/ContextModuleFactory.js +262 -0
- package/lib/ContextReplacementPlugin.js +133 -0
- package/lib/DefinePlugin.js +289 -0
- package/lib/DelegatedModule.js +114 -0
- package/lib/DelegatedModuleFactoryPlugin.js +95 -0
- package/lib/DelegatedPlugin.js +39 -0
- package/lib/DependenciesBlock.js +124 -0
- package/lib/DependenciesBlockVariable.js +72 -0
- package/lib/Dependency.js +89 -0
- package/lib/DllEntryPlugin.js +54 -0
- package/lib/DllModule.js +60 -0
- package/lib/DllModuleFactory.js +29 -0
- package/lib/DllPlugin.js +49 -0
- package/lib/DllReferencePlugin.js +156 -0
- package/lib/DynamicEntryPlugin.js +94 -0
- package/lib/EntryModuleNotFoundError.js +21 -0
- package/lib/EntryOptionPlugin.js +46 -0
- package/lib/Entrypoint.js +64 -0
- package/lib/EnvironmentPlugin.js +72 -0
- package/lib/ErrorHelpers.js +60 -0
- package/lib/EvalDevToolModulePlugin.js +27 -0
- package/lib/EvalDevToolModuleTemplatePlugin.js +61 -0
- package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +120 -0
- package/lib/EvalSourceMapDevToolPlugin.js +41 -0
- package/lib/ExportPropertyMainTemplatePlugin.js +53 -0
- package/lib/ExtendedAPIPlugin.js +88 -0
- package/lib/ExternalModule.js +179 -0
- package/lib/ExternalModuleFactoryPlugin.js +110 -0
- package/lib/ExternalsPlugin.js +23 -0
- package/lib/FlagAllModulesAsUsedPlugin.js +38 -0
- package/lib/FlagDependencyExportsPlugin.js +174 -0
- package/lib/FlagDependencyUsagePlugin.js +116 -0
- package/lib/FlagInitialModulesAsUsedPlugin.js +36 -0
- package/lib/FunctionModulePlugin.js +19 -0
- package/lib/FunctionModuleTemplatePlugin.js +102 -0
- package/lib/Generator.js +60 -0
- package/lib/GraphHelpers.js +65 -0
- package/lib/HarmonyLinkingError.js +17 -0
- package/lib/HashedModuleIdsPlugin.js +63 -0
- package/lib/HotModuleReplacement.runtime.js +721 -0
- package/lib/HotModuleReplacementPlugin.js +425 -0
- package/lib/HotUpdateChunk.js +17 -0
- package/lib/HotUpdateChunkTemplate.js +78 -0
- package/lib/IgnorePlugin.js +91 -0
- package/lib/JavascriptGenerator.js +229 -0
- package/lib/JavascriptModulesPlugin.js +185 -0
- package/lib/JsonGenerator.js +57 -0
- package/lib/JsonModulesPlugin.js +30 -0
- package/lib/JsonParser.js +27 -0
- package/lib/LibManifestPlugin.js +90 -0
- package/lib/LibraryTemplatePlugin.js +186 -0
- package/lib/LoaderOptionsPlugin.js +58 -0
- package/lib/LoaderTargetPlugin.js +24 -0
- package/lib/MainTemplate.js +568 -0
- package/lib/MemoryOutputFileSystem.js +5 -0
- package/lib/Module.js +435 -0
- package/lib/ModuleBuildError.js +52 -0
- package/lib/ModuleDependencyError.js +35 -0
- package/lib/ModuleDependencyWarning.js +25 -0
- package/lib/ModuleError.js +36 -0
- package/lib/ModuleFilenameHelpers.js +179 -0
- package/lib/ModuleNotFoundError.js +23 -0
- package/lib/ModuleParseError.js +67 -0
- package/lib/ModuleReason.js +48 -0
- package/lib/ModuleTemplate.js +93 -0
- package/lib/ModuleWarning.js +36 -0
- package/lib/MultiCompiler.js +290 -0
- package/lib/MultiEntryPlugin.js +80 -0
- package/lib/MultiModule.js +87 -0
- package/lib/MultiModuleFactory.js +23 -0
- package/lib/MultiStats.js +92 -0
- package/lib/MultiWatching.js +50 -0
- package/lib/NamedChunksPlugin.js +29 -0
- package/lib/NamedModulesPlugin.js +58 -0
- package/lib/NoEmitOnErrorsPlugin.js +20 -0
- package/lib/NoModeWarning.js +23 -0
- package/lib/NodeStuffPlugin.js +118 -0
- package/lib/NormalModule.js +582 -0
- package/lib/NormalModuleFactory.js +528 -0
- package/lib/NormalModuleReplacementPlugin.js +51 -0
- package/lib/NullFactory.js +12 -0
- package/lib/OptionsApply.js +10 -0
- package/lib/OptionsDefaulter.js +141 -0
- package/lib/Parser.js +2454 -0
- package/lib/ParserHelpers.js +103 -0
- package/lib/PrefetchPlugin.js +37 -0
- package/lib/ProgressPlugin.js +307 -0
- package/lib/ProvidePlugin.js +86 -0
- package/lib/RawModule.js +56 -0
- package/lib/RecordIdsPlugin.js +236 -0
- package/lib/RemovedPluginError.js +11 -0
- package/lib/RequestShortener.js +83 -0
- package/lib/RequireJsStuffPlugin.js +66 -0
- package/lib/ResolverFactory.js +74 -0
- package/lib/RuleSet.js +567 -0
- package/lib/RuntimeTemplate.js +336 -0
- package/lib/SetVarMainTemplatePlugin.js +69 -0
- package/lib/SingleEntryPlugin.js +63 -0
- package/lib/SizeFormatHelpers.js +24 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +49 -0
- package/lib/SourceMapDevToolPlugin.js +418 -0
- package/lib/Stats.js +1685 -0
- package/lib/SystemMainTemplatePlugin.js +137 -0
- package/lib/Template.js +291 -0
- package/lib/TemplatedPathPlugin.js +188 -0
- package/lib/UmdMainTemplatePlugin.js +305 -0
- package/lib/UnsupportedFeatureWarning.js +30 -0
- package/lib/UseStrictPlugin.js +54 -0
- package/lib/WarnCaseSensitiveModulesPlugin.js +37 -0
- package/lib/WarnNoModeSetPlugin.js +17 -0
- package/lib/WatchIgnorePlugin.js +106 -0
- package/lib/Watching.js +211 -0
- package/lib/WebpackError.js +31 -0
- package/lib/WebpackOptionsApply.js +546 -0
- package/lib/WebpackOptionsDefaulter.js +391 -0
- package/lib/WebpackOptionsValidationError.js +390 -0
- package/lib/buildChunkGraph.js +712 -0
- package/lib/compareLocations.js +52 -0
- package/lib/debug/ProfilingPlugin.js +442 -0
- package/lib/dependencies/AMDDefineDependency.js +137 -0
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +336 -0
- package/lib/dependencies/AMDPlugin.js +249 -0
- package/lib/dependencies/AMDRequireArrayDependency.js +49 -0
- package/lib/dependencies/AMDRequireContextDependency.js +20 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +47 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +274 -0
- package/lib/dependencies/AMDRequireDependency.js +135 -0
- package/lib/dependencies/AMDRequireItemDependency.js +22 -0
- package/lib/dependencies/CommonJsPlugin.js +158 -0
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -0
- package/lib/dependencies/CommonJsRequireDependency.js +22 -0
- package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +138 -0
- package/lib/dependencies/ConstDependency.js +33 -0
- package/lib/dependencies/ContextDependency.js +68 -0
- package/lib/dependencies/ContextDependencyHelpers.js +232 -0
- package/lib/dependencies/ContextDependencyTemplateAsId.js +43 -0
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +39 -0
- package/lib/dependencies/ContextElementDependency.js +21 -0
- package/lib/dependencies/CriticalDependencyWarning.js +20 -0
- package/lib/dependencies/DelegatedExportsDependency.js +33 -0
- package/lib/dependencies/DelegatedSourceDependency.js +18 -0
- package/lib/dependencies/DependencyReference.js +64 -0
- package/lib/dependencies/DllEntryDependency.js +20 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +48 -0
- package/lib/dependencies/HarmonyAcceptImportDependency.js +23 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +31 -0
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +96 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +154 -0
- package/lib/dependencies/HarmonyExportExpressionDependency.js +58 -0
- package/lib/dependencies/HarmonyExportHeaderDependency.js +30 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +659 -0
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +54 -0
- package/lib/dependencies/HarmonyImportDependency.js +109 -0
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +222 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +31 -0
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +163 -0
- package/lib/dependencies/HarmonyInitDependency.js +60 -0
- package/lib/dependencies/HarmonyModulesPlugin.js +143 -0
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +26 -0
- package/lib/dependencies/ImportContextDependency.js +23 -0
- package/lib/dependencies/ImportDependenciesBlock.js +18 -0
- package/lib/dependencies/ImportDependency.js +34 -0
- package/lib/dependencies/ImportEagerDependency.js +32 -0
- package/lib/dependencies/ImportParserPlugin.js +248 -0
- package/lib/dependencies/ImportPlugin.js +79 -0
- package/lib/dependencies/ImportWeakDependency.js +34 -0
- package/lib/dependencies/JsonExportsDependency.js +26 -0
- package/lib/dependencies/LoaderDependency.js +21 -0
- package/lib/dependencies/LoaderPlugin.js +115 -0
- package/lib/dependencies/LocalModule.js +23 -0
- package/lib/dependencies/LocalModuleDependency.js +28 -0
- package/lib/dependencies/LocalModulesHelpers.js +52 -0
- package/lib/dependencies/ModuleDependency.js +23 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +17 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +17 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +23 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +23 -0
- package/lib/dependencies/MultiEntryDependency.js +25 -0
- package/lib/dependencies/NullDependency.js +20 -0
- package/lib/dependencies/PrefetchDependency.js +18 -0
- package/lib/dependencies/RequireContextDependency.js +22 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +56 -0
- package/lib/dependencies/RequireContextPlugin.js +143 -0
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +33 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +116 -0
- package/lib/dependencies/RequireEnsureDependency.js +58 -0
- package/lib/dependencies/RequireEnsureItemDependency.js +21 -0
- package/lib/dependencies/RequireEnsurePlugin.js +74 -0
- package/lib/dependencies/RequireHeaderDependency.js +26 -0
- package/lib/dependencies/RequireIncludeDependency.js +39 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +23 -0
- package/lib/dependencies/RequireIncludePlugin.js +61 -0
- package/lib/dependencies/RequireResolveContextDependency.js +23 -0
- package/lib/dependencies/RequireResolveDependency.js +22 -0
- package/lib/dependencies/RequireResolveDependencyParserPlugin.js +86 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +26 -0
- package/lib/dependencies/SingleEntryDependency.js +21 -0
- package/lib/dependencies/SystemPlugin.js +122 -0
- package/lib/dependencies/UnsupportedDependency.js +27 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +31 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +54 -0
- package/lib/dependencies/WebpackMissingModule.js +20 -0
- package/lib/dependencies/getFunctionExpression.js +52 -0
- package/lib/formatLocation.js +75 -0
- package/lib/logging/Logger.js +128 -0
- package/lib/logging/createConsoleLogger.js +210 -0
- package/lib/logging/runtime.js +36 -0
- package/lib/logging/truncateArgs.js +76 -0
- package/lib/node/NodeChunkTemplatePlugin.js +31 -0
- package/lib/node/NodeEnvironmentPlugin.js +44 -0
- package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +36 -0
- package/lib/node/NodeMainTemplate.runtime.js +32 -0
- package/lib/node/NodeMainTemplateAsync.runtime.js +50 -0
- package/lib/node/NodeMainTemplatePlugin.js +321 -0
- package/lib/node/NodeOutputFileSystem.js +22 -0
- package/lib/node/NodeSourcePlugin.js +141 -0
- package/lib/node/NodeTargetPlugin.js +19 -0
- package/lib/node/NodeTemplatePlugin.js +31 -0
- package/lib/node/NodeWatchFileSystem.js +109 -0
- package/lib/node/ReadFileCompileWasmTemplatePlugin.js +61 -0
- package/lib/node/nodeConsole.js +135 -0
- package/lib/optimize/AggressiveMergingPlugin.js +87 -0
- package/lib/optimize/AggressiveSplittingPlugin.js +294 -0
- package/lib/optimize/ChunkModuleIdRangePlugin.js +66 -0
- package/lib/optimize/ConcatenatedModule.js +1477 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +70 -0
- package/lib/optimize/FlagIncludedChunksPlugin.js +99 -0
- package/lib/optimize/LimitChunkCountPlugin.js +231 -0
- package/lib/optimize/MergeDuplicateChunksPlugin.js +78 -0
- package/lib/optimize/MinChunkSizePlugin.js +82 -0
- package/lib/optimize/MinMaxSizeWarning.js +29 -0
- package/lib/optimize/ModuleConcatenationPlugin.js +485 -0
- package/lib/optimize/NaturalChunkOrderPlugin.js +41 -0
- package/lib/optimize/OccurrenceChunkOrderPlugin.js +66 -0
- package/lib/optimize/OccurrenceModuleOrderPlugin.js +112 -0
- package/lib/optimize/OccurrenceOrderPlugin.js +135 -0
- package/lib/optimize/RemoveEmptyChunksPlugin.js +42 -0
- package/lib/optimize/RemoveParentModulesPlugin.js +127 -0
- package/lib/optimize/RuntimeChunkPlugin.js +41 -0
- package/lib/optimize/SideEffectsFlagPlugin.js +352 -0
- package/lib/optimize/SplitChunksPlugin.js +971 -0
- package/lib/performance/AssetsOverSizeLimitWarning.js +30 -0
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +30 -0
- package/lib/performance/NoAsyncChunksWarning.js +21 -0
- package/lib/performance/SizeLimitsPlugin.js +125 -0
- package/lib/util/LazyBucketSortedSet.js +235 -0
- package/lib/util/Queue.js +46 -0
- package/lib/util/Semaphore.js +53 -0
- package/lib/util/SetHelpers.js +48 -0
- package/lib/util/SortableSet.js +140 -0
- package/lib/util/StackedSetMap.js +142 -0
- package/lib/util/TrackingSet.js +35 -0
- package/lib/util/cachedMerge.js +35 -0
- package/lib/util/cleverMerge.js +77 -0
- package/lib/util/createHash.js +174 -0
- package/lib/util/deterministicGrouping.js +274 -0
- package/lib/util/hash/BatchedHash.js +71 -0
- package/lib/util/hash/md4.js +25 -0
- package/lib/util/hash/wasm-hash.js +174 -0
- package/lib/util/identifier.js +127 -0
- package/lib/util/objectToMap.js +16 -0
- package/lib/validateSchema.js +67 -0
- package/lib/wasm/UnsupportedWebAssemblyFeatureError.js +17 -0
- package/lib/wasm/WasmFinalizeExportsPlugin.js +69 -0
- package/lib/wasm/WasmMainTemplatePlugin.js +341 -0
- package/lib/wasm/WebAssemblyGenerator.js +458 -0
- package/lib/wasm/WebAssemblyInInitialChunkError.js +88 -0
- package/lib/wasm/WebAssemblyJavascriptGenerator.js +152 -0
- package/lib/wasm/WebAssemblyModulesPlugin.js +128 -0
- package/lib/wasm/WebAssemblyParser.js +175 -0
- package/lib/wasm/WebAssemblyUtils.js +59 -0
- package/lib/web/FetchCompileWasmTemplatePlugin.js +37 -0
- package/lib/web/JsonpChunkTemplatePlugin.js +71 -0
- package/lib/web/JsonpExportMainTemplatePlugin.js +50 -0
- package/lib/web/JsonpHotUpdateChunkTemplatePlugin.js +39 -0
- package/lib/web/JsonpMainTemplate.runtime.js +71 -0
- package/lib/web/JsonpMainTemplatePlugin.js +615 -0
- package/lib/web/JsonpTemplatePlugin.js +23 -0
- package/lib/web/WebEnvironmentPlugin.js +18 -0
- package/lib/webpack.js +206 -0
- package/lib/webpack.web.js +31 -0
- package/lib/webworker/WebWorkerChunkTemplatePlugin.js +35 -0
- package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +40 -0
- package/lib/webworker/WebWorkerMainTemplate.runtime.js +73 -0
- package/lib/webworker/WebWorkerMainTemplatePlugin.js +192 -0
- package/lib/webworker/WebWorkerTemplatePlugin.js +25 -0
- package/package.json +211 -0
- package/schemas/WebpackOptions.json +2285 -0
- package/schemas/ajv.absolutePath.js +57 -0
- package/schemas/plugins/BannerPlugin.json +101 -0
- package/schemas/plugins/DllPlugin.json +36 -0
- package/schemas/plugins/DllReferencePlugin.json +205 -0
- package/schemas/plugins/HashedModuleIdsPlugin.json +26 -0
- package/schemas/plugins/IgnorePlugin.json +37 -0
- package/schemas/plugins/LoaderOptionsPlugin.json +27 -0
- package/schemas/plugins/ProgressPlugin.json +52 -0
- package/schemas/plugins/SourceMapDevToolPlugin.json +185 -0
- package/schemas/plugins/WatchIgnorePlugin.json +18 -0
- package/schemas/plugins/debug/ProfilingPlugin.json +13 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +23 -0
- package/schemas/plugins/optimize/LimitChunkCountPlugin.json +16 -0
- package/schemas/plugins/optimize/MinChunkSizePlugin.json +12 -0
- package/schemas/plugins/optimize/OccurrenceOrderChunkIdsPlugin.json +11 -0
- package/schemas/plugins/optimize/OccurrenceOrderModuleIdsPlugin.json +11 -0
- package/web_modules/node-libs-browser.js +0 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A subset of Set that offers sorting functionality
|
|
5
|
+
* @template T item type in set
|
|
6
|
+
* @extends {Set<T>}
|
|
7
|
+
*/
|
|
8
|
+
class SortableSet extends Set {
|
|
9
|
+
/**
|
|
10
|
+
* Create a new sortable set
|
|
11
|
+
* @param {Iterable<T>=} initialIterable The initial iterable value
|
|
12
|
+
* @typedef {function(T, T): number} SortFunction
|
|
13
|
+
* @param {SortFunction=} defaultSort Default sorting function
|
|
14
|
+
*/
|
|
15
|
+
constructor(initialIterable, defaultSort) {
|
|
16
|
+
super(initialIterable);
|
|
17
|
+
/** @private @type {function(T, T): number}} */
|
|
18
|
+
this._sortFn = defaultSort;
|
|
19
|
+
/** @private @type {function(T, T): number} | null} */
|
|
20
|
+
this._lastActiveSortFn = null;
|
|
21
|
+
/** @private @type {Map<Function, T[]> | undefined} */
|
|
22
|
+
this._cache = undefined;
|
|
23
|
+
/** @private @type {Map<Function, T[]|string|number> | undefined} */
|
|
24
|
+
this._cacheOrderIndependent = undefined;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @param {T} value value to add to set
|
|
29
|
+
* @returns {this} returns itself
|
|
30
|
+
*/
|
|
31
|
+
add(value) {
|
|
32
|
+
this._lastActiveSortFn = null;
|
|
33
|
+
this._invalidateCache();
|
|
34
|
+
this._invalidateOrderedCache();
|
|
35
|
+
super.add(value);
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @param {T} value value to delete
|
|
41
|
+
* @returns {boolean} true if value existed in set, false otherwise
|
|
42
|
+
*/
|
|
43
|
+
delete(value) {
|
|
44
|
+
this._invalidateCache();
|
|
45
|
+
this._invalidateOrderedCache();
|
|
46
|
+
return super.delete(value);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @returns {void}
|
|
51
|
+
*/
|
|
52
|
+
clear() {
|
|
53
|
+
this._invalidateCache();
|
|
54
|
+
this._invalidateOrderedCache();
|
|
55
|
+
return super.clear();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Sort with a comparer function
|
|
60
|
+
* @param {SortFunction} sortFn Sorting comparer function
|
|
61
|
+
* @returns {void}
|
|
62
|
+
*/
|
|
63
|
+
sortWith(sortFn) {
|
|
64
|
+
if (this.size <= 1 || sortFn === this._lastActiveSortFn) {
|
|
65
|
+
// already sorted - nothing to do
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const sortedArray = Array.from(this).sort(sortFn);
|
|
70
|
+
super.clear();
|
|
71
|
+
for (let i = 0; i < sortedArray.length; i += 1) {
|
|
72
|
+
super.add(sortedArray[i]);
|
|
73
|
+
}
|
|
74
|
+
this._lastActiveSortFn = sortFn;
|
|
75
|
+
this._invalidateCache();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
sort() {
|
|
79
|
+
this.sortWith(this._sortFn);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Get data from cache
|
|
84
|
+
* @param {function(SortableSet<T>): T[]} fn function to calculate value
|
|
85
|
+
* @returns {T[]} returns result of fn(this), cached until set changes
|
|
86
|
+
*/
|
|
87
|
+
getFromCache(fn) {
|
|
88
|
+
if (this._cache === undefined) {
|
|
89
|
+
this._cache = new Map();
|
|
90
|
+
} else {
|
|
91
|
+
const data = this._cache.get(fn);
|
|
92
|
+
if (data !== undefined) {
|
|
93
|
+
return data;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const newData = fn(this);
|
|
97
|
+
this._cache.set(fn, newData);
|
|
98
|
+
return newData;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @param {function(SortableSet<T>): string|number|T[]} fn function to calculate value
|
|
103
|
+
* @returns {any} returns result of fn(this), cached until set changes
|
|
104
|
+
*/
|
|
105
|
+
getFromUnorderedCache(fn) {
|
|
106
|
+
if (this._cacheOrderIndependent === undefined) {
|
|
107
|
+
this._cacheOrderIndependent = new Map();
|
|
108
|
+
} else {
|
|
109
|
+
const data = this._cacheOrderIndependent.get(fn);
|
|
110
|
+
if (data !== undefined) {
|
|
111
|
+
return data;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const newData = fn(this);
|
|
115
|
+
this._cacheOrderIndependent.set(fn, newData);
|
|
116
|
+
return newData;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* @private
|
|
121
|
+
* @returns {void}
|
|
122
|
+
*/
|
|
123
|
+
_invalidateCache() {
|
|
124
|
+
if (this._cache !== undefined) {
|
|
125
|
+
this._cache.clear();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* @private
|
|
131
|
+
* @returns {void}
|
|
132
|
+
*/
|
|
133
|
+
_invalidateOrderedCache() {
|
|
134
|
+
if (this._cacheOrderIndependent !== undefined) {
|
|
135
|
+
this._cacheOrderIndependent.clear();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
module.exports = SortableSet;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Tobias Koppers @sokra
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
const util = require("util");
|
|
8
|
+
|
|
9
|
+
const TOMBSTONE = {};
|
|
10
|
+
const UNDEFINED_MARKER = {};
|
|
11
|
+
|
|
12
|
+
class StackedSetMap {
|
|
13
|
+
constructor(parentStack) {
|
|
14
|
+
this.stack = parentStack === undefined ? [] : parentStack.slice();
|
|
15
|
+
this.map = new Map();
|
|
16
|
+
this.stack.push(this.map);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
add(item) {
|
|
20
|
+
this.map.set(item, true);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
set(item, value) {
|
|
24
|
+
this.map.set(item, value === undefined ? UNDEFINED_MARKER : value);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
delete(item) {
|
|
28
|
+
if (this.stack.length > 1) {
|
|
29
|
+
this.map.set(item, TOMBSTONE);
|
|
30
|
+
} else {
|
|
31
|
+
this.map.delete(item);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
has(item) {
|
|
36
|
+
const topValue = this.map.get(item);
|
|
37
|
+
if (topValue !== undefined) return topValue !== TOMBSTONE;
|
|
38
|
+
if (this.stack.length > 1) {
|
|
39
|
+
for (var i = this.stack.length - 2; i >= 0; i--) {
|
|
40
|
+
const value = this.stack[i].get(item);
|
|
41
|
+
if (value !== undefined) {
|
|
42
|
+
this.map.set(item, value);
|
|
43
|
+
return value !== TOMBSTONE;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
this.map.set(item, TOMBSTONE);
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
get(item) {
|
|
52
|
+
const topValue = this.map.get(item);
|
|
53
|
+
if (topValue !== undefined) {
|
|
54
|
+
return topValue === TOMBSTONE || topValue === UNDEFINED_MARKER
|
|
55
|
+
? undefined
|
|
56
|
+
: topValue;
|
|
57
|
+
}
|
|
58
|
+
if (this.stack.length > 1) {
|
|
59
|
+
for (var i = this.stack.length - 2; i >= 0; i--) {
|
|
60
|
+
const value = this.stack[i].get(item);
|
|
61
|
+
if (value !== undefined) {
|
|
62
|
+
this.map.set(item, value);
|
|
63
|
+
return value === TOMBSTONE || value === UNDEFINED_MARKER
|
|
64
|
+
? undefined
|
|
65
|
+
: value;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
this.map.set(item, TOMBSTONE);
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
_compress() {
|
|
74
|
+
if (this.stack.length === 1) return;
|
|
75
|
+
this.map = new Map();
|
|
76
|
+
for (const data of this.stack) {
|
|
77
|
+
for (const pair of data) {
|
|
78
|
+
if (pair[1] === TOMBSTONE) {
|
|
79
|
+
this.map.delete(pair[0]);
|
|
80
|
+
} else {
|
|
81
|
+
this.map.set(pair[0], pair[1]);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
this.stack = [this.map];
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
asArray() {
|
|
89
|
+
this._compress();
|
|
90
|
+
return Array.from(this.map.entries(), pair => pair[0]);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
asSet() {
|
|
94
|
+
return new Set(this.asArray());
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
asPairArray() {
|
|
98
|
+
this._compress();
|
|
99
|
+
return Array.from(this.map.entries(), pair =>
|
|
100
|
+
/** @type {[TODO, TODO]} */ (pair[1] === UNDEFINED_MARKER
|
|
101
|
+
? [pair[0], undefined]
|
|
102
|
+
: pair)
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
asMap() {
|
|
107
|
+
return new Map(this.asPairArray());
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
get size() {
|
|
111
|
+
this._compress();
|
|
112
|
+
return this.map.size;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
createChild() {
|
|
116
|
+
return new StackedSetMap(this.stack);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
get length() {
|
|
120
|
+
throw new Error("This is no longer an Array");
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
set length(value) {
|
|
124
|
+
throw new Error("This is no longer an Array");
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// TODO remove in webpack 5
|
|
129
|
+
StackedSetMap.prototype.push = util.deprecate(
|
|
130
|
+
/**
|
|
131
|
+
* @deprecated
|
|
132
|
+
* @this {StackedSetMap}
|
|
133
|
+
* @param {any} item Item to add
|
|
134
|
+
* @returns {void}
|
|
135
|
+
*/
|
|
136
|
+
function(item) {
|
|
137
|
+
this.add(item);
|
|
138
|
+
},
|
|
139
|
+
"This is no longer an Array: Use add instead."
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
module.exports = StackedSetMap;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Tobias Koppers @sokra
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
module.exports = class TrackingSet {
|
|
8
|
+
constructor(set) {
|
|
9
|
+
this.set = set;
|
|
10
|
+
this.set2 = new Set();
|
|
11
|
+
this.stack = set.stack;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
add(item) {
|
|
15
|
+
this.set2.add(item);
|
|
16
|
+
return this.set.add(item);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
delete(item) {
|
|
20
|
+
this.set2.delete(item);
|
|
21
|
+
return this.set.delete(item);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
has(item) {
|
|
25
|
+
return this.set.has(item);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
createChild() {
|
|
29
|
+
return this.set.createChild();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
getAddedItems() {
|
|
33
|
+
return this.set2;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Tobias Koppers @sokra
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
const mergeCache = new WeakMap();
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Merges two given objects and caches the result to avoid computation if same objects passed as arguments again.
|
|
11
|
+
* @example
|
|
12
|
+
* // performs Object.assign(first, second), stores the result in WeakMap and returns result
|
|
13
|
+
* cachedMerge({a: 1}, {a: 2})
|
|
14
|
+
* {a: 2}
|
|
15
|
+
* // when same arguments passed, gets the result from WeakMap and returns it.
|
|
16
|
+
* cachedMerge({a: 1}, {a: 2})
|
|
17
|
+
* {a: 2}
|
|
18
|
+
* @param {object} first first object
|
|
19
|
+
* @param {object} second second object
|
|
20
|
+
* @returns {object} merged object of first and second object
|
|
21
|
+
*/
|
|
22
|
+
const cachedMerge = (first, second) => {
|
|
23
|
+
let innerCache = mergeCache.get(first);
|
|
24
|
+
if (innerCache === undefined) {
|
|
25
|
+
innerCache = new WeakMap();
|
|
26
|
+
mergeCache.set(first, innerCache);
|
|
27
|
+
}
|
|
28
|
+
const prevMerge = innerCache.get(second);
|
|
29
|
+
if (prevMerge !== undefined) return prevMerge;
|
|
30
|
+
const newMerge = Object.assign({}, first, second);
|
|
31
|
+
innerCache.set(second, newMerge);
|
|
32
|
+
return newMerge;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
module.exports = cachedMerge;
|
|
@@ -0,0 +1,77 @@
|
|
|
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 mergeCache = new WeakMap();
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Merges two given objects and caches the result to avoid computation if same objects passed as arguments again.
|
|
12
|
+
* @example
|
|
13
|
+
* // performs cleverMerge(first, second), stores the result in WeakMap and returns result
|
|
14
|
+
* cachedCleverMerge({a: 1}, {a: 2})
|
|
15
|
+
* {a: 2}
|
|
16
|
+
* // when same arguments passed, gets the result from WeakMap and returns it.
|
|
17
|
+
* cachedCleverMerge({a: 1}, {a: 2})
|
|
18
|
+
* {a: 2}
|
|
19
|
+
* @param {object} first first object
|
|
20
|
+
* @param {object} second second object
|
|
21
|
+
* @returns {object} merged object of first and second object
|
|
22
|
+
*/
|
|
23
|
+
const cachedCleverMerge = (first, second) => {
|
|
24
|
+
let innerCache = mergeCache.get(first);
|
|
25
|
+
if (innerCache === undefined) {
|
|
26
|
+
innerCache = new WeakMap();
|
|
27
|
+
mergeCache.set(first, innerCache);
|
|
28
|
+
}
|
|
29
|
+
const prevMerge = innerCache.get(second);
|
|
30
|
+
if (prevMerge !== undefined) return prevMerge;
|
|
31
|
+
const newMerge = cleverMerge(first, second);
|
|
32
|
+
innerCache.set(second, newMerge);
|
|
33
|
+
return newMerge;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Merges two objects. Objects are not deeply merged.
|
|
38
|
+
* TODO webpack 5: merge objects deeply clever.
|
|
39
|
+
* Arrays might reference the old value with "..."
|
|
40
|
+
* @param {object} first first object
|
|
41
|
+
* @param {object} second second object
|
|
42
|
+
* @returns {object} merged object of first and second object
|
|
43
|
+
*/
|
|
44
|
+
const cleverMerge = (first, second) => {
|
|
45
|
+
const newObject = Object.assign({}, first);
|
|
46
|
+
for (const key of Object.keys(second)) {
|
|
47
|
+
if (!(key in newObject)) {
|
|
48
|
+
newObject[key] = second[key];
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const secondValue = second[key];
|
|
52
|
+
if (!Array.isArray(secondValue)) {
|
|
53
|
+
newObject[key] = secondValue;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const firstValue = newObject[key];
|
|
57
|
+
if (Array.isArray(firstValue)) {
|
|
58
|
+
const newArray = [];
|
|
59
|
+
for (const item of secondValue) {
|
|
60
|
+
if (item === "...") {
|
|
61
|
+
for (const item of firstValue) {
|
|
62
|
+
newArray.push(item);
|
|
63
|
+
}
|
|
64
|
+
} else {
|
|
65
|
+
newArray.push(item);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
newObject[key] = newArray;
|
|
69
|
+
} else {
|
|
70
|
+
newObject[key] = secondValue;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return newObject;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
exports.cachedCleverMerge = cachedCleverMerge;
|
|
77
|
+
exports.cleverMerge = cleverMerge;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Tobias Koppers @sokra
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
const AbstractMethodError = require("../AbstractMethodError");
|
|
8
|
+
|
|
9
|
+
const BULK_SIZE = 1000;
|
|
10
|
+
|
|
11
|
+
class Hash {
|
|
12
|
+
/**
|
|
13
|
+
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
|
|
14
|
+
* @param {string|Buffer} data data
|
|
15
|
+
* @param {string=} inputEncoding data encoding
|
|
16
|
+
* @returns {this} updated hash
|
|
17
|
+
*/
|
|
18
|
+
update(data, inputEncoding) {
|
|
19
|
+
throw new AbstractMethodError();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
|
|
24
|
+
* @param {string=} encoding encoding of the return value
|
|
25
|
+
* @returns {string|Buffer} digest
|
|
26
|
+
*/
|
|
27
|
+
digest(encoding) {
|
|
28
|
+
throw new AbstractMethodError();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
class BulkUpdateDecorator extends Hash {
|
|
33
|
+
/**
|
|
34
|
+
* @param {Hash} hash hash
|
|
35
|
+
*/
|
|
36
|
+
constructor(hash) {
|
|
37
|
+
super();
|
|
38
|
+
this.hash = hash;
|
|
39
|
+
this.buffer = "";
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
|
|
44
|
+
* @param {string|Buffer} data data
|
|
45
|
+
* @param {string=} inputEncoding data encoding
|
|
46
|
+
* @returns {this} updated hash
|
|
47
|
+
*/
|
|
48
|
+
update(data, inputEncoding) {
|
|
49
|
+
if (
|
|
50
|
+
inputEncoding !== undefined ||
|
|
51
|
+
typeof data !== "string" ||
|
|
52
|
+
data.length > BULK_SIZE
|
|
53
|
+
) {
|
|
54
|
+
if (this.buffer.length > 0) {
|
|
55
|
+
this.hash.update(this.buffer);
|
|
56
|
+
this.buffer = "";
|
|
57
|
+
}
|
|
58
|
+
this.hash.update(data, inputEncoding);
|
|
59
|
+
} else {
|
|
60
|
+
this.buffer += data;
|
|
61
|
+
if (this.buffer.length > BULK_SIZE) {
|
|
62
|
+
this.hash.update(this.buffer);
|
|
63
|
+
this.buffer = "";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
|
|
71
|
+
* @param {string=} encoding encoding of the return value
|
|
72
|
+
* @returns {string|Buffer} digest
|
|
73
|
+
*/
|
|
74
|
+
digest(encoding) {
|
|
75
|
+
if (this.buffer.length > 0) {
|
|
76
|
+
this.hash.update(this.buffer);
|
|
77
|
+
}
|
|
78
|
+
var digestResult = this.hash.digest(encoding);
|
|
79
|
+
return typeof digestResult === "string"
|
|
80
|
+
? digestResult
|
|
81
|
+
: digestResult.toString();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* istanbul ignore next
|
|
87
|
+
*/
|
|
88
|
+
class DebugHash extends Hash {
|
|
89
|
+
constructor() {
|
|
90
|
+
super();
|
|
91
|
+
this.string = "";
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
|
|
96
|
+
* @param {string|Buffer} data data
|
|
97
|
+
* @param {string=} inputEncoding data encoding
|
|
98
|
+
* @returns {this} updated hash
|
|
99
|
+
*/
|
|
100
|
+
update(data, inputEncoding) {
|
|
101
|
+
if (typeof data !== "string") data = data.toString("utf-8");
|
|
102
|
+
this.string += data;
|
|
103
|
+
return this;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
|
|
108
|
+
* @param {string=} encoding encoding of the return value
|
|
109
|
+
* @returns {string|Buffer} digest
|
|
110
|
+
*/
|
|
111
|
+
digest(encoding) {
|
|
112
|
+
return this.string.replace(/[^a-z0-9]+/gi, m =>
|
|
113
|
+
Buffer.from(m).toString("hex")
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** @type {typeof import("crypto") | undefined} */
|
|
119
|
+
let crypto = undefined;
|
|
120
|
+
/** @type {typeof import("./hash/md4") | undefined} */
|
|
121
|
+
let createMd4 = undefined;
|
|
122
|
+
/** @type {typeof import("./hash/BatchedHash") | undefined} */
|
|
123
|
+
let BatchedHash = undefined;
|
|
124
|
+
|
|
125
|
+
/** @type {number} */
|
|
126
|
+
const NODE_MAJOR_VERSION = parseInt(process.versions.node, 10);
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Creates a hash by name or function
|
|
130
|
+
* @param {string | HashConstructor} algorithm the algorithm name or a constructor creating a hash
|
|
131
|
+
* @returns {Hash} the hash
|
|
132
|
+
*/
|
|
133
|
+
module.exports = algorithm => {
|
|
134
|
+
if (typeof algorithm === "function") {
|
|
135
|
+
return new BulkUpdateDecorator(new algorithm());
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
switch (algorithm) {
|
|
139
|
+
// TODO add non-cryptographic algorithm here
|
|
140
|
+
case "debug":
|
|
141
|
+
return new DebugHash();
|
|
142
|
+
case "md4":
|
|
143
|
+
if (NODE_MAJOR_VERSION >= 18) {
|
|
144
|
+
if (createMd4 === undefined) {
|
|
145
|
+
createMd4 = require("./hash/md4");
|
|
146
|
+
if (BatchedHash === undefined) {
|
|
147
|
+
BatchedHash = require("./hash/BatchedHash");
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return new /** @type {typeof import("./hash/BatchedHash")} */ (BatchedHash)(
|
|
151
|
+
createMd4()
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
// If we are on Node.js < 18, fall through to the default case
|
|
155
|
+
// eslint-disable-next-line no-fallthrough
|
|
156
|
+
|
|
157
|
+
case "native-md4":
|
|
158
|
+
if (NODE_MAJOR_VERSION >= 18) {
|
|
159
|
+
if (crypto === undefined) crypto = require("crypto");
|
|
160
|
+
return new BulkUpdateDecorator(
|
|
161
|
+
/** @type {typeof import("crypto")} */ (crypto).createHash("md4")
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
// If we are on Node.js < 18, fall through to the default case
|
|
165
|
+
// eslint-disable-next-line no-fallthrough
|
|
166
|
+
|
|
167
|
+
default:
|
|
168
|
+
if (crypto === undefined) crypto = require("crypto");
|
|
169
|
+
return new BulkUpdateDecorator(crypto.createHash(algorithm));
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
module.exports.Hash = Hash;
|
|
174
|
+
/** @typedef {typeof Hash} HashConstructor */
|