Comparing version 0.7.0 to 0.8.0
/// <reference types="node" /> | ||
import Module from 'module'; | ||
import { ModuleBuildin as ModuleBuiltin, ModuleDefinition, ModuleLoadResult, ModuleMapper } from './types'; | ||
import { ModuleBuildin as ModuleBuiltin, ModuleDefinition, ModuleLoadResult, ModuleResolveResult, ModuleMapper } from './types'; | ||
import { Benchmark } from './benchmark'; | ||
export declare type GetModuleKeyOpts = { | ||
filename: string; | ||
path: string; | ||
relFilename?: string; | ||
relPath?: string; | ||
fromSnapshot?: boolean; | ||
}; | ||
export declare type GetModuleKey = (opts: { | ||
moduleUri: string; | ||
baseDir: string; | ||
parent?: NodeModule; | ||
opts?: GetModuleKeyOpts; | ||
}) => { | ||
@@ -37,2 +44,3 @@ moduleKey: string | undefined; | ||
private _loadCacheDirect; | ||
tryResolve(moduleUri: string, opts?: GetModuleKeyOpts): ModuleResolveResult; | ||
tryLoad(moduleUri: string, parent: NodeModule, isMain: boolean): ModuleLoadResult; | ||
@@ -45,2 +53,3 @@ private _dumpInfo; | ||
private _initModuleFromDefinition; | ||
private _createRequire; | ||
private _interceptedRequire; | ||
@@ -47,0 +56,0 @@ private _tryResolveFilename; |
@@ -8,2 +8,3 @@ "use strict"; | ||
const debug_1 = __importDefault(require("debug")); | ||
const module_1 = __importDefault(require("module")); | ||
const path_1 = __importDefault(require("path")); | ||
@@ -107,2 +108,28 @@ const assert_1 = require("assert"); | ||
} | ||
tryResolve(moduleUri, opts) { | ||
// 1. If is full path we are done | ||
if (path_1.default.isAbsolute(moduleUri)) { | ||
return { fullPath: moduleUri, resolved: 'path' }; | ||
} | ||
// 2. Resolve via module key | ||
let { moduleKey, moduleRelativePath } = this.getModuleKey({ | ||
moduleUri, | ||
baseDir: this.projectBaseDir, | ||
opts, | ||
}); | ||
if (moduleKey != null && path_1.default.isAbsolute(moduleKey)) { | ||
return { fullPath: moduleKey, resolved: 'module-key:node' }; | ||
} | ||
// 3. Try to obtain a full path via the resolved relative path | ||
let fullPath = this._tryResolveFullPath(moduleUri, moduleRelativePath, opts); | ||
if (fullPath != null) { | ||
return { fullPath, resolved: 'module-fullpath:node' }; | ||
} | ||
// 4. Lastly try to resolve the module via Node.js resolution | ||
assert_1.strict(opts != null && opts.id != null, 'Need a parent to resolve via Node.js'); | ||
const directFullPath = fullPath; | ||
let resolved; | ||
({ resolved, fullPath } = this._resolvePaths(moduleUri, opts, false, directFullPath)); | ||
return { fullPath, resolved }; | ||
} | ||
tryLoad(moduleUri, parent, isMain) { | ||
@@ -127,3 +154,3 @@ // 1. Try to find moduleUri directly in Node.js module cache | ||
baseDir: this.projectBaseDir, | ||
parent, | ||
opts: parent, | ||
}); | ||
@@ -225,4 +252,4 @@ // 3. Try to see if the moduleKey was correct and can be loaded from the Node.js cache | ||
const require = this.diagnostics | ||
? this._interceptedRequire(fullPath, moduleUri) | ||
: this.Module.createRequire(fullPath); | ||
? this._interceptedRequire(fullPath, moduleUri, parent) | ||
: this._createRequire(fullPath, moduleUri, parent); | ||
return { | ||
@@ -271,4 +298,20 @@ children: [], | ||
} | ||
_interceptedRequire(fullPath, moduleUri) { | ||
_createRequire(fullPath, moduleUri, parent) { | ||
const require = this.Module.createRequire(fullPath); | ||
if (parent == null) { | ||
parent = this._createModule(fullPath, parent, moduleUri); | ||
} | ||
require.resolve = Object.assign((moduleUri, _options) => { | ||
return this.tryResolve(moduleUri, parent).fullPath; | ||
}, { | ||
paths(request) { | ||
if (module_1.default.builtinModules.includes(request)) | ||
return null; | ||
return (parent === null || parent === void 0 ? void 0 : parent.paths) || null; | ||
}, | ||
}); | ||
return require; | ||
} | ||
_interceptedRequire(fullPath, moduleUri, parent) { | ||
const require = this._createRequire(fullPath, moduleUri, parent); | ||
const override = (id) => { | ||
@@ -308,3 +351,3 @@ logTrace('Module "%s" is requiring "%s"', moduleUri, id); | ||
} | ||
_tryResolveFullPath(moduleUri, moduleRelativePath, parent) { | ||
_tryResolveFullPath(moduleUri, moduleRelativePath, opts) { | ||
if (path_1.default.isAbsolute(moduleUri)) | ||
@@ -315,4 +358,4 @@ return moduleUri; | ||
} | ||
if (parent != null && moduleUri.startsWith('.')) { | ||
return path_1.default.resolve(parent.path, moduleUri); | ||
if (opts != null && moduleUri.startsWith('.')) { | ||
return path_1.default.resolve(opts.path, moduleUri); | ||
} | ||
@@ -319,0 +362,0 @@ } |
@@ -0,1 +1,2 @@ | ||
/// <reference types="node" /> | ||
import { ModuleLoaderOpts } from './loader'; | ||
@@ -9,2 +10,6 @@ import type { PackherdTranspileOpts, SourceMapLookup } from './types'; | ||
}; | ||
export declare function packherdRequire(projectBaseDir: string, opts: PackherdRequireOpts): void; | ||
export declare function packherdRequire(projectBaseDir: string, opts: PackherdRequireOpts): { | ||
resolve: NodeJS.RequireResolve; | ||
} | { | ||
resolve: (moduleUri: string, opts?: import("./loader").GetModuleKeyOpts | undefined) => import("./types").ModuleResolveResult; | ||
}; |
@@ -62,3 +62,3 @@ "use strict"; | ||
logInfo('No moduleExports nor moduleDefinitions provided, not hooking Module._load'); | ||
return; | ||
return { resolve: require.resolve.bind(require) }; | ||
} | ||
@@ -114,4 +114,5 @@ const benchmark = benchmark_1.setupBenchmark(projectBaseDir, opts.requireStatsFile); | ||
}; | ||
return { resolve: moduleLoader.tryResolve.bind(moduleLoader) }; | ||
} | ||
exports.packherdRequire = packherdRequire; | ||
//# sourceMappingURL=require.js.map |
{ | ||
"name": "packherd", | ||
"version": "0.7.0", | ||
"version": "0.8.0", | ||
"description": "Herds all dependencies reachable from an entry and packs them.", | ||
@@ -5,0 +5,0 @@ "main": "dist/src/packherd.js", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
114118
1667
12