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) {
|
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 | }
|
42 | exports.compileDts = compileDts;
|
43 | function changeExtensionToDts(fileName) {
|
44 | if (fileName.slice(-5) === '.d.ts') {
|
45 | return fileName;
|
46 | }
|
47 |
|
48 | var ext = path.extname(fileName);
|
49 | return fileName.slice(0, -ext.length) + '.d.ts';
|
50 | }
|
51 | function 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 |
|
60 |
|
61 | function 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 | }
|