WXL
3 天以前 9bce51f651aad297ef9eb6df832bfdaf1de05d84
node_modules/webpack/lib/cache/getLazyHashedEtag.js
@@ -10,24 +10,31 @@
/** @typedef {import("../util/Hash")} Hash */
/** @typedef {typeof import("../util/Hash")} HashConstructor */
/** @typedef {import("../util/Hash").HashFunction} HashFunction */
/**
 * Represents the lazy hashed etag runtime component.
 * @typedef {object} HashableObject
 * @property {(hash: Hash) => void} updateHash
 */
class LazyHashedEtag {
   /**
    * Creates an instance of LazyHashedEtag.
    * @param {HashableObject} obj object with updateHash method
    * @param {string | HashConstructor} hashFunction the hash function to use
    * @param {HashFunction} hashFunction the hash function to use
    */
   constructor(obj, hashFunction = DEFAULTS.HASH_FUNCTION) {
      /** @type {HashableObject} */
      this._obj = obj;
      /** @type {undefined | string} */
      this._hash = undefined;
      /** @type {HashFunction} */
      this._hashFunction = hashFunction;
   }
   /**
    * Returns a string representation.
    * @returns {string} hash of object
    */
   toString() {
@@ -40,23 +47,28 @@
   }
}
/** @type {Map<string | HashConstructor, WeakMap<HashableObject, LazyHashedEtag>>} */
/** @typedef {WeakMap<HashableObject, LazyHashedEtag>} InnerCache */
/** @type {Map<HashFunction, InnerCache>} */
const mapStrings = new Map();
/** @type {WeakMap<HashConstructor, WeakMap<HashableObject, LazyHashedEtag>>} */
/** @type {WeakMap<HashConstructor, InnerCache>} */
const mapObjects = new WeakMap();
/**
 * Returns etag.
 * @param {HashableObject} obj object with updateHash method
 * @param {(string | HashConstructor)=} hashFunction the hash function to use
 * @param {HashFunction=} hashFunction the hash function to use
 * @returns {LazyHashedEtag} etag
 */
const getter = (obj, hashFunction = DEFAULTS.HASH_FUNCTION) => {
   /** @type {undefined | InnerCache} */
   let innerMap;
   if (typeof hashFunction === "string") {
      innerMap = mapStrings.get(hashFunction);
      if (innerMap === undefined) {
         const newHash = new LazyHashedEtag(obj, hashFunction);
         /** @type {InnerCache} */
         innerMap = new WeakMap();
         innerMap.set(obj, newHash);
         mapStrings.set(hashFunction, innerMap);
@@ -66,6 +78,7 @@
      innerMap = mapObjects.get(hashFunction);
      if (innerMap === undefined) {
         const newHash = new LazyHashedEtag(obj, hashFunction);
         /** @type {InnerCache} */
         innerMap = new WeakMap();
         innerMap.set(obj, newHash);
         mapObjects.set(hashFunction, innerMap);