UNPKG

webpack

Version:

Packs ECMAScript/CommonJs/AMD modules for the browser. Allows you to split your codebase into multiple bundles, which can be loaded on demand. Supports loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.

92 lines (87 loc) 2.62 kB
/* 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 ); } };