| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
- /** @typedef {import("./Hash")} Hash */
- /** @typedef {import("../../declarations/WebpackOptions").HashFunction} HashFunction */
- /** @type {typeof import("crypto") | undefined} */
- let crypto;
- /** @type {typeof import("./hash/xxhash64") | undefined} */
- let createXXHash64;
- /** @type {typeof import("./hash/md4") | undefined} */
- let createMd4;
- /** @type {typeof import("./hash/DebugHash") | undefined} */
- let DebugHash;
- /** @type {typeof import("./hash/BatchedHash") | undefined} */
- let BatchedHash;
- /** @type {typeof import("./hash/BulkUpdateHash") | undefined} */
- let BulkUpdateHash;
- /**
- * Creates a hash by name or function
- * @param {HashFunction} algorithm the algorithm name or a constructor creating a hash
- * @returns {Hash} the hash
- */
- module.exports = (algorithm) => {
- if (typeof algorithm === "function") {
- if (BulkUpdateHash === undefined) {
- BulkUpdateHash = require("./hash/BulkUpdateHash");
- }
- // eslint-disable-next-line new-cap
- return new BulkUpdateHash(() => new algorithm());
- }
- switch (algorithm) {
- // TODO add non-cryptographic algorithm here
- case "debug":
- if (DebugHash === undefined) {
- DebugHash = require("./hash/DebugHash");
- }
- return new DebugHash();
- case "xxhash64":
- if (createXXHash64 === undefined) {
- createXXHash64 = require("./hash/xxhash64");
- if (BatchedHash === undefined) {
- BatchedHash = require("./hash/BatchedHash");
- }
- }
- return new /** @type {typeof import("./hash/BatchedHash")} */ (
- BatchedHash
- )(createXXHash64());
- case "md4":
- if (createMd4 === undefined) {
- createMd4 = require("./hash/md4");
- if (BatchedHash === undefined) {
- BatchedHash = require("./hash/BatchedHash");
- }
- }
- return new /** @type {typeof import("./hash/BatchedHash")} */ (
- BatchedHash
- )(createMd4());
- case "native-md4":
- if (crypto === undefined) crypto = require("crypto");
- if (BulkUpdateHash === undefined) {
- BulkUpdateHash = require("./hash/BulkUpdateHash");
- }
- return new BulkUpdateHash(
- () =>
- /** @type {Hash} */ (
- /** @type {typeof import("crypto")} */
- (crypto).createHash("md4")
- ),
- "md4"
- );
- default:
- if (crypto === undefined) crypto = require("crypto");
- if (BulkUpdateHash === undefined) {
- BulkUpdateHash = require("./hash/BulkUpdateHash");
- }
- return new BulkUpdateHash(
- () =>
- /** @type {Hash} */ (
- /** @type {typeof import("crypto")} */
- (crypto).createHash(algorithm)
- ),
- algorithm
- );
- }
- };
|