forked from rollup/plugins
/
moduleResolution.ts
48 lines (43 loc) 路 1.3 KB
/
moduleResolution.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import {
ModuleResolutionHost,
ResolvedModuleFull,
ResolvedProjectReference,
ModuleKind
} from 'typescript';
import { DiagnosticsHost } from './diagnostics/host';
type ModuleResolverHost = Partial<ModuleResolutionHost> & DiagnosticsHost;
export type Resolver = (
moduleName: string,
containingFile: string,
redirectedReference?: ResolvedProjectReference | undefined,
mode?: ModuleKind.ESNext | ModuleKind.CommonJS | undefined
) => ResolvedModuleFull | undefined;
/**
* Create a helper for resolving modules using Typescript.
* @param host Typescript host that extends `ModuleResolutionHost`
* with methods for sanitizing filenames and getting compiler options.
*/
export default function createModuleResolver(
ts: typeof import('typescript'),
host: ModuleResolverHost
): Resolver {
const compilerOptions = host.getCompilationSettings();
const cache = ts.createModuleResolutionCache(
process.cwd(),
host.getCanonicalFileName,
compilerOptions
);
const moduleHost = { ...ts.sys, ...host };
return (moduleName, containingFile, redirectedReference, mode) => {
const resolved = ts.resolveModuleName(
moduleName,
containingFile,
compilerOptions,
moduleHost,
cache,
redirectedReference,
mode
);
return resolved.resolvedModule;
};
}