diff --git a/package-lock.json b/package-lock.json index 9ff8023..098994e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "tfig", - "version": "3.2.7", + "version": "3.3.1", "license": "MIT", "dependencies": { "fs-extra": "^7.0.1", diff --git a/package.json b/package.json index 151d932..ba3453d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tfig", - "version": "3.3.1", + "version": "3.3.2", "description": "Yet another tool to generate .d.ts bundle.", "main": "build/gift.js", "types": "build/gift.d.ts", diff --git a/source/gift.ts b/source/gift.ts index d462c83..5cc37eb 100644 --- a/source/gift.ts +++ b/source/gift.ts @@ -50,6 +50,11 @@ export interface IOptions { */ targetModule: string; }>; + + /** + * The module map, whose key is module name and value is module path. + */ + moduleMap?: Record; } export interface IBundleResult { @@ -130,9 +135,28 @@ export function rollupTypes(options: IOptions) { function createProgram(): ts.Program { const tscOptions = createTscOptions(); + const host = ts.createCompilerHost(tscOptions); + host.resolveModuleNames = (moduleNames, importer): (ts.ResolvedModule | undefined)[] => { + const resolvedModules: (ts.ResolvedModule | undefined)[] = []; + for (const moduleName of moduleNames) { + if (options.moduleMap && moduleName in options.moduleMap) { + resolvedModules.push({resolvedFileName: options.moduleMap[moduleName]}); + } else { + const resolvedRes = ts.resolveModuleName(moduleName, importer, tscOptions, host); + if (resolvedRes.resolvedModule) { + resolvedModules.push({resolvedFileName: resolvedRes.resolvedModule.resolvedFileName}); + } else { + // Cannot resolve module, treat it as external. + resolvedModules.push(undefined); + } + } + } + return resolvedModules; + }; return ts.createProgram({ rootNames: inputs, options: tscOptions, + host, }); }