MCPcopy Index your code
hub / github.com/callstack/haul / loadModule

Function loadModule

packages/haul-core/src/utils/importModule.ts:38–202  ·  view source on GitHub ↗
(
  filename: string,
  provided: {
    resolve: Options['resolve'];
    parentModule: NonNullable<Options['parentModule']>;
    ignore: NonNullable<Options['ignore']>;
    cache: NonNullable<Options['cache']>;
    runtime: Runtime;
  }
)

Source from the content-addressed store, hash-verified

36const builtinModules = ['debug'].concat(Module.builtinModules);
37
38function 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.

Callers 2

importModuleFunction · 0.85
currentRequireFunction · 0.85

Calls 1

parseMethod · 0.80

Tested by

no test coverage detected