(
filename: string,
provided: {
resolve: Options['resolve'];
parentModule: NonNullable<Options['parentModule']>;
ignore: NonNullable<Options['ignore']>;
cache: NonNullable<Options['cache']>;
runtime: Runtime;
}
)
| 36 | const builtinModules = ['debug'].concat(Module.builtinModules); |
| 37 | |
| 38 | function loadModule( |
| 39 | filename: string, |
| 40 | provided: { |
| 41 | resolve: Options['resolve']; |
| 42 | parentModule: NonNullable<Options['parentModule']>; |
| 43 | ignore: NonNullable<Options['ignore']>; |
| 44 | cache: NonNullable<Options['cache']>; |
| 45 | runtime: Runtime; |
| 46 | } |
| 47 | ) { |
| 48 | // Resolve absolute module location using parent's resolver. |
| 49 | const moduleFilename = provided.resolve(filename); |
| 50 | |
| 51 | // Use native require if requested module is a build-in one. |
| 52 | // Built-in modules are not kept in isolated cache, but in the native cache. |
| 53 | if (builtinModules.includes(moduleFilename)) { |
| 54 | return nativeRequire(moduleFilename); |
| 55 | } |
| 56 | |
| 57 | // Use exports from cache is available. |
| 58 | if (provided.cache[moduleFilename]) { |
| 59 | return provided.cache[moduleFilename].exports; |
| 60 | } |
| 61 | |
| 62 | let moduleBody: string; |
| 63 | try { |
| 64 | moduleBody = fs.readFileSync(moduleFilename, 'utf8'); |
| 65 | } catch (error) { |
| 66 | throw new Error( |
| 67 | `Module '${filename}' resolved to '${moduleFilename}' not found: ${error.code}` |
| 68 | ); |
| 69 | } |
| 70 | |
| 71 | // Instantiating a new Module will setup some some properties, but won't |
| 72 | // load the module code by itself, so we can do it ourselves later. |
| 73 | const module = new Module(moduleFilename, provided.parentModule); |
| 74 | module.filename = moduleFilename; |
| 75 | // Resolve lookup paths (for example paths to node_modules for each parent directory). |
| 76 | module.paths = ((Module as unknown) as { |
| 77 | _resolveLookupPaths: (request: string, parent?: Module) => string[][]; |
| 78 | }) |
| 79 | ._resolveLookupPaths(module.filename, provided.parentModule) |
| 80 | .reduce( |
| 81 | (acc, item) => |
| 82 | Array.isArray(item) ? acc.concat(...item) : acc.concat(item), |
| 83 | [] |
| 84 | ) |
| 85 | .concat(path.dirname(module.filename)); |
| 86 | provided.cache[module.id] = module; |
| 87 | |
| 88 | // Create resolver for this module. |
| 89 | const currentResolve = ((Module.createRequireFromPath( |
| 90 | module.filename |
| 91 | ) as unknown) as { |
| 92 | resolve: RequireResolve; |
| 93 | }).resolve; |
| 94 | |
| 95 | // Create require function for this module. |
no test coverage detected