ResolverHelper.ts
33 lines
| 1.1 KiB
| video/mp2t
|
TypeScriptLexer
|
|
r59 | import { argumentNotEmptyString } from "../safe"; | ||
| import { TraceSource } from "../log/TraceSource"; | ||||
| const trace = TraceSource.get(module.id); | ||||
| const mainModule = require.main; | ||||
|
|
r115 | const mainRequire = (id: string) => mainModule ? mainModule.require(id) : require; | ||
|
|
r59 | |||
| class ModuleResolver { | ||||
|
|
r115 | _base: string | undefined; | ||
|
|
r59 | _require: NodeRequireFunction; | ||
| constructor(req: NodeRequireFunction, base?: string) { | ||||
| this._base = base; | ||||
| this._require = (req || mainRequire).bind(null); | ||||
| } | ||||
| resolve(moduleName: string) { | ||||
| argumentNotEmptyString(moduleName, "moduleName"); | ||||
| const resolvedName = moduleName[0] === "." && this._base ? [this._base, moduleName].join("/") : moduleName; | ||||
| trace.debug(`${moduleName} -> ${resolvedName}`); | ||||
| return this._require(resolvedName); | ||||
| } | ||||
| } | ||||
| export function makeResolver(moduleName: string, contextRequire: NodeRequireFunction) { | ||||
| const base = moduleName && moduleName.split("/").slice(0, -1).join("/"); | ||||
| const resolver = new ModuleResolver(contextRequire, base); | ||||
| return (id: string) => resolver.resolve(id); | ||||
| } | ||||
