WXL
4 天以前 2cc85c64f1c64a2dbaeae276a3e2ca8420de76b7
node_modules/webpack/lib/NormalModule.js
@@ -6,7 +6,6 @@
"use strict";
const querystring = require("querystring");
const parseJson = require("json-parse-even-better-errors");
const { getContext, runLoaders } = require("loader-runner");
const {
   AsyncSeriesBailHook,
@@ -53,6 +52,7 @@
} = require("./util/identifier");
const makeSerializable = require("./util/makeSerializable");
const memoize = require("./util/memoize");
const parseJson = require("./util/parseJson");
/** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */
/** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
@@ -79,7 +79,9 @@
/** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
/** @typedef {import("./Module").BuildCallback} BuildCallback */
/** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
/** @typedef {import("./Generator").SourceTypes} SourceTypes */
/** @typedef {import("./Module").Sources} Sources */
/** @typedef {import("./Module").SourceType} SourceType */
/** @typedef {import("./Module").SourceTypes} SourceTypes */
/** @typedef {import("./Module").UnsafeCacheData} UnsafeCacheData */
/** @typedef {import("./ModuleGraph")} ModuleGraph */
/** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
@@ -114,6 +116,8 @@
 * @typedef {import("../declarations/LoaderContext").NormalModuleLoaderContext<T>} NormalModuleLoaderContext
 */
/** @typedef {(content: string) => boolean} NoParseFn */
const getInvalidDependenciesModuleWarning = memoize(() =>
   require("./InvalidDependenciesModuleWarning")
);
@@ -122,7 +126,7 @@
const getValidate = memoize(() => require("schema-utils").validate);
const ABSOLUTE_PATH_REGEX = /^([a-zA-Z]:\\|\\\\|\/)/;
const ABSOLUTE_PATH_REGEX = /^(?:[a-z]:\\|\\\\|\/)/i;
/**
 * @typedef {object} LoaderItem
@@ -226,12 +230,17 @@
/** @typedef {LoaderContext<EXPECTED_ANY>} AnyLoaderContext */
/**
 * @deprecated Use the `readResource` hook instead.
 * @typedef {HookMap<FakeHook<AsyncSeriesBailHook<[string, NormalModule], string | Buffer | null>>>} DeprecatedReadResourceForScheme
 */
/**
 * @typedef {object} NormalModuleCompilationHooks
 * @property {SyncHook<[AnyLoaderContext, NormalModule]>} loader
 * @property {SyncHook<[LoaderItem[], NormalModule, AnyLoaderContext]>} beforeLoaders
 * @property {SyncHook<[NormalModule]>} beforeParse
 * @property {SyncHook<[NormalModule]>} beforeSnapshot
 * @property {HookMap<FakeHook<AsyncSeriesBailHook<[string, NormalModule], string | Buffer | null>>>} readResourceForScheme
 * @property {DeprecatedReadResourceForScheme} readResourceForScheme
 * @property {HookMap<AsyncSeriesBailHook<[AnyLoaderContext], string | Buffer | null>>} readResource
 * @property {SyncWaterfallHook<[Result, NormalModule]>} processResult
 * @property {AsyncSeriesBailHook<[NormalModule, NeedBuildContext], boolean>} needBuild
@@ -359,7 +368,7 @@
      /** @type {NormalModuleCreateData['rawRequest']} */
      this.rawRequest = rawRequest;
      /** @type {boolean} */
      this.binary = /^(asset|webassembly)\b/.test(type);
      this.binary = /^(?:asset|webassembly)\b/.test(type);
      /** @type {NormalModuleCreateData['parser'] | undefined} */
      this.parser = parser;
      /** @type {NormalModuleCreateData['parserOptions']} */
@@ -394,7 +403,7 @@
      this._source = null;
      /**
       * @private
       * @type {Map<string | undefined, number> | undefined}
       * @type {Map<undefined | SourceType, number> | undefined}
       */
      this._sourceSizes = undefined;
      /**
@@ -402,18 +411,36 @@
       * @type {undefined | SourceTypes}
       */
      this._sourceTypes = undefined;
      // Cache
      /**
       * @private
       * @type {BuildMeta}
       */
      this._lastSuccessfulBuildMeta = {};
      /**
       * @private
       * @type {boolean}
       */
      this._forceBuild = true;
      /**
       * @private
       * @type {boolean}
       */
      this._isEvaluatingSideEffects = false;
      /** @type {WeakSet<ModuleGraph> | undefined} */
      /**
       * @private
       * @type {WeakSet<ModuleGraph> | undefined}
       */
      this._addedSideEffectsBailout = undefined;
      /** @type {CodeGenerationResultData} */
      /**
       * @private
       * @type {CodeGenerationResultData}
       */
      this._codeGeneratorData = new Map();
   }
   /**
    * Returns the unique identifier used to reference this module.
    * @returns {string} a unique identifier of the module
    */
   identifier() {
@@ -427,6 +454,7 @@
   }
   /**
    * Returns a human-readable identifier for this module.
    * @param {RequestShortener} requestShortener the request shortener
    * @returns {string} a user readable identifier of the module
    */
@@ -442,6 +470,7 @@
   }
   /**
    * Gets the library identifier.
    * @param {LibIdentOptions} options options
    * @returns {LibIdent | null} an identifier for library inclusion
    */
@@ -456,6 +485,7 @@
   }
   /**
    * Returns the path used when matching this module against rule conditions.
    * @returns {NameForCondition | null} absolute path which should be used for condition matching (usually the resource path)
    */
   nameForCondition() {
@@ -696,10 +726,13 @@
            if (typeof options === "string") {
               if (options.startsWith("{") && options.endsWith("}")) {
                  try {
                     options = parseJson(options);
                     options =
                        /** @type {LoaderItem["options"]} */
                        (parseJson(options));
                  } catch (err) {
                     throw new Error(
                        `Cannot parse string options: ${/** @type {Error} */ (err).message}`
                        `Cannot parse string options: ${/** @type {Error} */ (err).message}`,
                        { cause: err }
                     );
                  }
               } else {
@@ -713,9 +746,10 @@
               options = {};
            }
            if (schema) {
            if (schema && compilation.options.validate) {
               let name = "Loader";
               let baseDataPath = "options";
               /** @type {RegExpExecArray | null} */
               let match;
               if (schema.title && (match = /^(.+) (.+)$/.exec(schema.title))) {
                  [, name, baseDataPath] = match;
@@ -849,7 +883,6 @@
      return /** @type {AnyLoaderContext} */ (loaderContext);
   }
   // TODO remove `loaderContext` in webpack@6
   /**
    * @param {AnyLoaderContext} loaderContext loader context
    * @param {number} index index
@@ -980,6 +1013,7 @@
            compilation.compiler.root
         );
         if (this._sourceSizes !== undefined) this._sourceSizes.clear();
         /** @type {PreparsedAst | null} */
         this._ast =
            typeof extraInfo === "object" &&
            extraInfo !== null &&
@@ -1217,6 +1251,7 @@
   }
   /**
    * Builds the module using the provided compilation context.
    * @param {WebpackOptions} options webpack options
    * @param {Compilation} compilation the compilation
    * @param {ResolverWithOptions} resolver the resolver
@@ -1307,7 +1342,7 @@
            /** @type {undefined | Set<string>} */
            let nonAbsoluteDependencies;
            /**
             * @param {LazySet<string>} deps deps
             * @param {FileSystemDependencies} deps deps
             */
            const checkDependencies = (deps) => {
               for (const dep of deps) {
@@ -1420,6 +1455,7 @@
   }
   /**
    * Returns the reason this module cannot be concatenated, when one exists.
    * @param {ConcatenationBailoutReasonContext} context context
    * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
    */
@@ -1430,6 +1466,7 @@
   }
   /**
    * Gets side effects connection state.
    * @param {ModuleGraph} moduleGraph the module graph
    * @returns {ConnectionState} how this module should be connected to referencing modules when consumed for side-effects only
    */
@@ -1478,6 +1515,7 @@
   }
   /**
    * Returns the source types this module can generate.
    * @returns {SourceTypes} types available (do not mutate)
    */
   getSourceTypes() {
@@ -1490,6 +1528,7 @@
   }
   /**
    * Generates code and runtime requirements for this module.
    * @param {CodeGenerationContext} context context for code generation
    * @returns {CodeGenerationResult} result
    */
@@ -1516,6 +1555,7 @@
      const getData = () => this._codeGeneratorData;
      /** @type {Sources} */
      const sources = new Map();
      for (const type of sourceTypes || chunkGraph.getModuleSourceTypes(this)) {
         // TODO webpack@6 make generateError required
@@ -1567,6 +1607,7 @@
   }
   /**
    * Gets the original source.
    * @returns {Source | null} the original source for the module before webpack transformation
    */
   originalSource() {
@@ -1574,6 +1615,7 @@
   }
   /**
    * Invalidates the cached state associated with this value.
    * @returns {void}
    */
   invalidateBuild() {
@@ -1581,6 +1623,7 @@
   }
   /**
    * Checks whether the module needs to be rebuilt for the current build state.
    * @param {NeedBuildContext} context context info
    * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
    * @returns {void}
@@ -1640,6 +1683,7 @@
   }
   /**
    * Returns the estimated size for the requested source type.
    * @param {string=} type the source type for which the size should be estimated
    * @returns {number} the estimated size of the module (must be non-zero)
    */
@@ -1661,6 +1705,7 @@
   }
   /**
    * Adds the provided file dependencies to the module.
    * @param {FileSystemDependencies} fileDependencies set where file dependencies are added to
    * @param {FileSystemDependencies} contextDependencies set where context dependencies are added to
    * @param {FileSystemDependencies} missingDependencies set where missing dependencies are added to
@@ -1694,6 +1739,7 @@
   }
   /**
    * Updates the hash with the data contributed by this instance.
    * @param {Hash} hash the hash used to track dependencies
    * @param {UpdateHashContext} context context
    * @returns {void}
@@ -1704,6 +1750,15 @@
         /** @type {string} */
         (buildInfo.hash)
      );
      // Clear cached source types and re-compute so that changes in incoming
      // connections (e.g. asset module newly referenced from JS via lazy
      // compilation) are reflected in the hash and trigger code generation
      // cache invalidation.
      // https://github.com/webpack/webpack/issues/20800
      this._sourceTypes = undefined;
      for (const type of this.getSourceTypes()) {
         hash.update(type);
      }
      /** @type {Generator} */
      (this.generator).updateHash(hash, {
         module: this,
@@ -1713,6 +1768,7 @@
   }
   /**
    * Serializes this instance into the provided serializer context.
    * @param {ObjectSerializerContext} context context
    */
   serialize(context) {
@@ -1755,6 +1811,7 @@
   }
   /**
    * Restores this instance from the provided deserializer context.
    * @param {ObjectDeserializerContext} context context
    */
   deserialize(context) {