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