1 |
|
2 |
|
3 |
|
4 |
|
5 | const path = require('path');
|
6 |
|
7 | const Module = require('module');
|
8 | const fs = require('fs');
|
9 |
|
10 | const resolveFrom = (
|
11 | fromDirectory ,
|
12 | moduleId ,
|
13 | silent
|
14 | ) => {
|
15 | if (typeof fromDirectory !== 'string') {
|
16 | throw new TypeError(
|
17 | `Expected \`fromDir\` to be of type \`string\`, got \`${typeof fromDirectory}\``
|
18 | );
|
19 | }
|
20 |
|
21 | if (typeof moduleId !== 'string') {
|
22 | throw new TypeError(
|
23 | `Expected \`moduleId\` to be of type \`string\`, got \`${typeof moduleId}\``
|
24 | );
|
25 | }
|
26 |
|
27 | if (!process.env.NODE_PRESERVE_SYMLINKS) {
|
28 | try {
|
29 | fromDirectory = fs.realpathSync(fromDirectory);
|
30 | } catch (error) {
|
31 | if (error.code === 'ENOENT') {
|
32 | fromDirectory = path.resolve(fromDirectory);
|
33 | } else if (silent) {
|
34 | return;
|
35 | } else {
|
36 | throw error;
|
37 | }
|
38 | }
|
39 | } else {
|
40 | fromDirectory = path.resolve(fromDirectory);
|
41 | }
|
42 |
|
43 | const fromFile = path.join(fromDirectory, 'noop.js');
|
44 |
|
45 | const resolveFileName = () =>
|
46 | Module._resolveFilename(moduleId, {
|
47 | id: fromFile,
|
48 | filename: fromFile,
|
49 | paths: Module._nodeModulePaths(fromDirectory),
|
50 | });
|
51 |
|
52 | if (silent) {
|
53 | try {
|
54 | return resolveFileName();
|
55 | } catch (error) {
|
56 | return;
|
57 | }
|
58 | }
|
59 |
|
60 | return resolveFileName();
|
61 | };
|
62 |
|
63 | module.exports = (
|
64 | fromDirectory ,
|
65 | moduleId
|
66 | ) => resolveFrom(fromDirectory, moduleId, false);
|
67 | module.exports.silent = (
|
68 | fromDirectory ,
|
69 | moduleId
|
70 | ) => resolveFrom(fromDirectory, moduleId, true);
|