UNPKG

dts-bundle-generator

Version:
66 lines (65 loc) 3.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = require("path"); var ts = require("typescript"); var logger_1 = require("./logger"); var get_compiler_options_1 = require("./get-compiler-options"); var check_diagnostics_errors_1 = require("./check-diagnostics-errors"); function compileDts(rootFile) { var compilerOptions = get_compiler_options_1.getCompilerOptionsForFile(rootFile); var dtsFiles = getDeclarationFiles(rootFile, compilerOptions); logger_1.verboseLog("dts cache:\n " + Object.keys(dtsFiles).join('\n ') + "\n"); var host = ts.createCompilerHost(compilerOptions); host.resolveModuleNames = function (moduleNames, containingFile) { return moduleNames.map(function (moduleName) { var resolvedModule = ts.resolveModuleName(moduleName, containingFile, compilerOptions, host).resolvedModule; if (resolvedModule && !resolvedModule.isExternalLibraryImport && resolvedModule.extension !== ts.Extension.Dts) { resolvedModule.extension = ts.Extension.Dts; logger_1.verboseLog("Change module from .ts to .d.ts: " + resolvedModule.resolvedFileName); resolvedModule.resolvedFileName = changeExtensionToDts(resolvedModule.resolvedFileName); } return resolvedModule; }); }; var originalGetSourceFile = host.getSourceFile; host.getSourceFile = function (fileName, languageVersion, onError) { var absolutePath = getAbsolutePath(fileName); if (dtsFiles[absolutePath]) { logger_1.verboseLog("dts cache match: " + absolutePath); return ts.createSourceFile(fileName, dtsFiles[absolutePath], languageVersion); } logger_1.verboseLog("dts cache mismatch: " + absolutePath + " (" + fileName + ")"); return originalGetSourceFile(fileName, languageVersion, onError); }; var program = ts.createProgram([changeExtensionToDts(rootFile)], compilerOptions, host); check_diagnostics_errors_1.checkProgramDiagnosticsErrors(program); return program; } exports.compileDts = compileDts; function changeExtensionToDts(fileName) { if (fileName.slice(-5) === '.d.ts') { return fileName; } // .ts, .tsx var ext = path.extname(fileName); return fileName.slice(0, -ext.length) + '.d.ts'; } function getAbsolutePath(fileName) { if (!path.isAbsolute(fileName)) { fileName = path.join(ts.sys.getCurrentDirectory(), fileName); } fileName = fileName.replace(/\\/g, '/'); return fileName; } /** * @description Compiles source files into d.ts files and returns map of absolute path to file content */ function getDeclarationFiles(rootFile, compilerOptions) { var program = ts.createProgram([rootFile], compilerOptions); check_diagnostics_errors_1.checkProgramDiagnosticsErrors(program); var declarations = {}; program.emit(undefined, function (fileName, data) { declarations[getAbsolutePath(fileName)] = data; }, undefined, true); return declarations; }