Blame view

天文台pc/tianwentai-ui/node_modules/enhanced-resolve/lib/ModulesUtils.js 2.11 KB
bc518174   王天杨   提交两个项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
  /*
  	MIT License http://www.opensource.org/licenses/mit-license.php
  	Author Tobias Koppers @sokra
  */
  
  "use strict";
  
  const forEachBail = require("./forEachBail");
  const getPaths = require("./getPaths");
  
  /** @typedef {import("./Resolver")} Resolver */
  /** @typedef {import("./Resolver").ResolveRequest} ResolveRequest */
  /** @typedef {import("./Resolver").ResolveStepHook} ResolveStepHook */
  /** @typedef {import("./Resolver").ResolveContext} ResolveContext */
  /** @typedef {(err?: null | Error, result?: null | ResolveRequest) => void} InnerCallback */
  /**
   * @param {Resolver} resolver resolver
   * @param {string[]} directories directories
   * @param {ResolveStepHook} target target
   * @param {ResolveRequest} request request
   * @param {ResolveContext} resolveContext resolve context
   * @param {InnerCallback} callback callback
   * @returns {void}
   */
  function modulesResolveHandler(
  	resolver,
  	directories,
  	target,
  	request,
  	resolveContext,
  	callback,
  ) {
  	const fs = resolver.fileSystem;
  	const addrs = getPaths(/** @type {string} */ (request.path))
  		.paths.map((path) =>
  			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();
  			});
  		},
  		callback,
  	);
  }
  
  module.exports = {
  	modulesResolveHandler,
  };