WXL
3 天以前 3bd962a6d7f61239c020e2dbbeb7341e5b842dd1
node_modules/enhanced-resolve/lib/ModulesInHierarchicalDirectoriesPlugin.js
@@ -5,22 +5,20 @@
"use strict";
const forEachBail = require("./forEachBail");
const getPaths = require("./getPaths");
const { modulesResolveHandler } = require("./ModulesUtils");
/** @typedef {import("./Resolver")} Resolver */
/** @typedef {import("./Resolver").ResolveRequest} ResolveRequest */
/** @typedef {import("./Resolver").ResolveStepHook} ResolveStepHook */
module.exports = class ModulesInHierarchicalDirectoriesPlugin {
   /**
    * @param {string | ResolveStepHook} source source
    * @param {string | Array<string>} directories directories
    * @param {string | string[]} directories directories
    * @param {string | ResolveStepHook} target target
    */
   constructor(source, directories, target) {
      this.source = source;
      this.directories = /** @type {Array<string>} */ [...directories];
      this.directories = /** @type {string[]} */ [...directories];
      this.target = target;
   }
@@ -35,54 +33,12 @@
         .tapAsync(
            "ModulesInHierarchicalDirectoriesPlugin",
            (request, resolveContext, callback) => {
               const fs = resolver.fileSystem;
               const addrs = getPaths(/** @type {string} */ (request.path))
                  .paths.map((path) =>
                     this.directories.map((directory) =>
                        resolver.join(path, directory),
                     ),
                  )
                  .reduce((array, path) => {
                     array.push(...path);
                     return array;
                  }, []);
               forEachBail(
                  addrs,
                  /**
                   * @param {string} addr addr
                   * @param {(err?: null|Error, result?: null|ResolveRequest) => void} callback callback
                   * @returns {void}
                   */
                  (addr, callback) => {
                     fs.stat(addr, (err, stat) => {
                        if (!err && stat && stat.isDirectory()) {
                           /** @type {ResolveRequest} */
                           const obj = {
                              ...request,
                              path: addr,
                              request: `./${request.request}`,
                              module: false,
                           };
                           const message = `looking for modules in ${addr}`;
                           return resolver.doResolve(
                              target,
                              obj,
                              message,
                              resolveContext,
                              callback,
                           );
                        }
                        if (resolveContext.log) {
                           resolveContext.log(
                              `${addr} doesn't exist or is not a directory`,
                           );
                        }
                        if (resolveContext.missingDependencies) {
                           resolveContext.missingDependencies.add(addr);
                        }
                        return callback();
                     });
                  },
               modulesResolveHandler(
                  resolver,
                  this.directories,
                  target,
                  request,
                  resolveContext,
                  callback,
               );
            },