WXL
4 天以前 2cc85c64f1c64a2dbaeae276a3e2ca8420de76b7
node_modules/webpack/lib/ContextModuleFactory.js
@@ -15,6 +15,8 @@
const { createFakeHook } = require("./util/deprecation");
const { join } = require("./util/fs");
/** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
/** @typedef {import("./Compilation").FileSystemDependencies} FileSystemDependencies */
/** @typedef {import("./ContextModule").ContextModuleOptions} ContextModuleOptions */
/** @typedef {import("./ContextModule").ResolveDependenciesCallback} ResolveDependenciesCallback */
/** @typedef {import("./ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
@@ -22,8 +24,9 @@
/** @typedef {import("./ResolverFactory")} ResolverFactory */
/** @typedef {import("./dependencies/ContextDependency")} ContextDependency */
/** @typedef {import("./dependencies/ContextDependency").ContextOptions} ContextOptions */
/** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
/**
 * Defines the shared type used by this module.
 * @template T
 * @typedef {import("./util/deprecation").FakeHook<T>} FakeHook<T>
 */
@@ -32,13 +35,14 @@
/** @typedef {{ context: string, request: string }} ContextAlternativeRequest */
/**
 * Defines the context resolve data type used by this module.
 * @typedef {object} ContextResolveData
 * @property {string} context
 * @property {string} request
 * @property {ModuleFactoryCreateData["resolveOptions"]} resolveOptions
 * @property {LazySet<string>} fileDependencies
 * @property {LazySet<string>} missingDependencies
 * @property {LazySet<string>} contextDependencies
 * @property {FileSystemDependencies} fileDependencies
 * @property {FileSystemDependencies} missingDependencies
 * @property {FileSystemDependencies} contextDependencies
 * @property {ContextDependency[]} dependencies
 */
@@ -49,6 +53,7 @@
class ContextModuleFactory extends ModuleFactory {
   /**
    * Creates an instance of ContextModuleFactory.
    * @param {ResolverFactory} resolverFactory resolverFactory
    */
   constructor(resolverFactory) {
@@ -95,10 +100,12 @@
         ),
         alternativeRequests
      });
      /** @type {ResolverFactory} */
      this.resolverFactory = resolverFactory;
   }
   /**
    * Processes the provided data.
    * @param {ModuleFactoryCreateData} data data object
    * @param {ModuleFactoryCallback} callback callback
    * @returns {void}
@@ -108,8 +115,11 @@
      const dependencies = /** @type {ContextDependency[]} */ (data.dependencies);
      const resolveOptions = data.resolveOptions;
      const dependency = dependencies[0];
      /** @type {FileSystemDependencies} */
      const fileDependencies = new LazySet();
      /** @type {FileSystemDependencies} */
      const missingDependencies = new LazySet();
      /** @type {FileSystemDependencies} */
      const contextDependencies = new LazySet();
      this.hooks.beforeResolve.callAsync(
         {
@@ -152,6 +162,7 @@
            const idx = request.lastIndexOf("!");
            if (idx >= 0) {
               let loadersRequest = request.slice(0, idx + 1);
               /** @type {number} */
               let i;
               for (
                  i = 0;
@@ -163,7 +174,7 @@
               loadersRequest = loadersRequest
                  .slice(i)
                  .replace(/!+$/, "")
                  .replace(/!!+/g, "!");
                  .replace(/!{2,}/g, "!");
               loaders = loadersRequest === "" ? [] : loadersRequest.split("!");
               resource = request.slice(idx + 1);
            } else {
@@ -188,6 +199,7 @@
                  (callback) => {
                     const results = /** @type {ResolveRequest[]} */ ([]);
                     /**
                      * Processes the provided obj.
                      * @param {ResolveRequest} obj obj
                      * @returns {void}
                      */
@@ -297,6 +309,7 @@
   }
   /**
    * Resolves dependencies.
    * @param {InputFileSystem} fs file system
    * @param {ContextModuleOptions} options options
    * @param {ResolveDependenciesCallback} callback callback function
@@ -320,6 +333,7 @@
      if (!regExp || !resource) return callback(null, []);
      /**
       * Adds directory checked.
       * @param {string} ctx context
       * @param {string} directory directory
       * @param {Set<string>} visited visited
@@ -349,6 +363,7 @@
      };
      /**
       * Adds the provided ctx to the context module factory.
       * @param {string} ctx context
       * @param {string} directory directory
       * @param {(context: string, subResource: string, callback: () => void) => void} addSubDirectory addSubDirectoryFn
@@ -437,6 +452,7 @@
                  if (!result) return callback(null, []);
                  /** @type {ContextElementDependency[]} */
                  const flattenedResult = [];
                  for (const item of result) {
@@ -450,6 +466,7 @@
      };
      /**
       * Adds sub directory.
       * @param {string} ctx context
       * @param {string} dir dir
       * @param {ResolveDependenciesCallback} callback callback
@@ -459,12 +476,19 @@
         addDirectory(ctx, dir, addSubDirectory, callback);
      /**
       * Processes the provided resource.
       * @param {string} resource resource
       * @param {ResolveDependenciesCallback} callback callback
       */
      const visitResource = (resource, callback) => {
         if (typeof fs.realpath === "function") {
            addDirectoryChecked(resource, resource, new Set(), callback);
            addDirectoryChecked(
               resource,
               resource,
               /** @type {Set<string>} */
               new Set(),
               callback
            );
         } else {
            addDirectory(resource, resource, addSubDirectory, callback);
         }