UNPKG

3.45 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var path = require("path");
4var ts = require("typescript");
5var logger_1 = require("./logger");
6var get_compiler_options_1 = require("./get-compiler-options");
7var check_diagnostics_errors_1 = require("./check-diagnostics-errors");
8function compileDts(rootFile, preferredConfigPath) {
9 var compilerOptions = get_compiler_options_1.getCompilerOptions(rootFile, preferredConfigPath);
10 if (compilerOptions.outDir !== undefined) {
11 logger_1.normalLog('Compiler option `outDir` is not supported and will be removed while generating dts');
12 compilerOptions.outDir = undefined;
13 }
14 var dtsFiles = getDeclarationFiles(rootFile, compilerOptions);
15 logger_1.verboseLog("dts cache:\n " + Object.keys(dtsFiles).join('\n ') + "\n");
16 var host = ts.createCompilerHost(compilerOptions);
17 host.resolveModuleNames = function (moduleNames, containingFile) {
18 return moduleNames.map(function (moduleName) {
19 var resolvedModule = ts.resolveModuleName(moduleName, containingFile, compilerOptions, host).resolvedModule;
20 if (resolvedModule && !resolvedModule.isExternalLibraryImport && resolvedModule.extension !== ts.Extension.Dts) {
21 resolvedModule.extension = ts.Extension.Dts;
22 logger_1.verboseLog("Change module from .ts to .d.ts: " + resolvedModule.resolvedFileName);
23 resolvedModule.resolvedFileName = changeExtensionToDts(resolvedModule.resolvedFileName);
24 }
25 return resolvedModule;
26 });
27 };
28 var originalGetSourceFile = host.getSourceFile;
29 host.getSourceFile = function (fileName, languageVersion, onError) {
30 var absolutePath = getAbsolutePath(fileName);
31 if (dtsFiles[absolutePath]) {
32 logger_1.verboseLog("dts cache match: " + absolutePath);
33 return ts.createSourceFile(fileName, dtsFiles[absolutePath], languageVersion);
34 }
35 logger_1.verboseLog("dts cache mismatch: " + absolutePath + " (" + fileName + ")");
36 return originalGetSourceFile(fileName, languageVersion, onError);
37 };
38 var program = ts.createProgram([changeExtensionToDts(rootFile)], compilerOptions, host);
39 check_diagnostics_errors_1.checkProgramDiagnosticsErrors(program);
40 return program;
41}
42exports.compileDts = compileDts;
43function changeExtensionToDts(fileName) {
44 if (fileName.slice(-5) === '.d.ts') {
45 return fileName;
46 }
47 // .ts, .tsx
48 var ext = path.extname(fileName);
49 return fileName.slice(0, -ext.length) + '.d.ts';
50}
51function getAbsolutePath(fileName) {
52 if (!path.isAbsolute(fileName)) {
53 fileName = path.join(ts.sys.getCurrentDirectory(), fileName);
54 }
55 fileName = fileName.replace(/\\/g, '/');
56 return fileName;
57}
58/**
59 * @description Compiles source files into d.ts files and returns map of absolute path to file content
60 */
61function getDeclarationFiles(rootFile, compilerOptions) {
62 var program = ts.createProgram([rootFile], compilerOptions);
63 check_diagnostics_errors_1.checkProgramDiagnosticsErrors(program);
64 var declarations = {};
65 var emitResult = program.emit(undefined, function (fileName, data) {
66 declarations[getAbsolutePath(fileName)] = data;
67 }, undefined, true);
68 check_diagnostics_errors_1.checkDiagnosticsErrors(emitResult.diagnostics, 'Errors while emitting declarations');
69 return declarations;
70}