1 | "use strict";
|
2 | var __assign = (this && this.__assign) || function () {
|
3 | __assign = Object.assign || function(t) {
|
4 | for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5 | s = arguments[i];
|
6 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7 | t[p] = s[p];
|
8 | }
|
9 | return t;
|
10 | };
|
11 | return __assign.apply(this, arguments);
|
12 | };
|
13 | Object.defineProperty(exports, "__esModule", { value: true });
|
14 | exports.compileDts = void 0;
|
15 | var path = require("path");
|
16 | var ts = require("typescript");
|
17 | var logger_1 = require("./logger");
|
18 | var get_compiler_options_1 = require("./get-compiler-options");
|
19 | var get_absolute_path_1 = require("./helpers/get-absolute-path");
|
20 | var check_diagnostics_errors_1 = require("./helpers/check-diagnostics-errors");
|
21 | function compileDts(rootFiles, preferredConfigPath, followSymlinks) {
|
22 | if (followSymlinks === void 0) { followSymlinks = true; }
|
23 | var compilerOptions = get_compiler_options_1.getCompilerOptions(rootFiles, preferredConfigPath);
|
24 |
|
25 |
|
26 |
|
27 | compilerOptions.outDir = undefined;
|
28 | compilerOptions.incremental = undefined;
|
29 | compilerOptions.tsBuildInfoFile = undefined;
|
30 | var dtsFiles = getDeclarationFiles(rootFiles, compilerOptions);
|
31 | logger_1.verboseLog("dts cache:\n " + Object.keys(dtsFiles).join('\n ') + "\n");
|
32 | var host = ts.createCompilerHost(compilerOptions);
|
33 | if (!followSymlinks) {
|
34 | host.realpath = function (path) { return path; };
|
35 | }
|
36 | host.resolveModuleNames = function (moduleNames, containingFile) {
|
37 | return moduleNames.map(function (moduleName) {
|
38 | var resolvedModule = ts.resolveModuleName(moduleName, containingFile, compilerOptions, host).resolvedModule;
|
39 | if (resolvedModule && !resolvedModule.isExternalLibraryImport && resolvedModule.extension !== ts.Extension.Dts) {
|
40 | resolvedModule.extension = ts.Extension.Dts;
|
41 | logger_1.verboseLog("Change module from .ts to .d.ts: " + resolvedModule.resolvedFileName);
|
42 | resolvedModule.resolvedFileName = changeExtensionToDts(resolvedModule.resolvedFileName);
|
43 | }
|
44 | return resolvedModule;
|
45 | });
|
46 | };
|
47 | var originalGetSourceFile = host.getSourceFile;
|
48 | host.getSourceFile = function (fileName, languageVersion, onError) {
|
49 | var absolutePath = get_absolute_path_1.getAbsolutePath(fileName);
|
50 | var storedValue = dtsFiles.get(absolutePath);
|
51 | if (storedValue !== undefined) {
|
52 | logger_1.verboseLog("dts cache match: " + absolutePath);
|
53 | return ts.createSourceFile(fileName, storedValue, languageVersion);
|
54 | }
|
55 | logger_1.verboseLog("dts cache mismatch: " + absolutePath + " (" + fileName + ")");
|
56 | return originalGetSourceFile(fileName, languageVersion, onError);
|
57 | };
|
58 | var rootFilesRemapping = new Map();
|
59 | var inputFiles = rootFiles.map(function (rootFile) {
|
60 | var rootDtsFile = changeExtensionToDts(rootFile);
|
61 | rootFilesRemapping.set(rootFile, rootDtsFile);
|
62 | return rootDtsFile;
|
63 | });
|
64 | var program = ts.createProgram(inputFiles, compilerOptions, host);
|
65 | check_diagnostics_errors_1.checkProgramDiagnosticsErrors(program);
|
66 | warnAboutTypeScriptFilesInProgram(program);
|
67 | return { program: program, rootFilesRemapping: rootFilesRemapping };
|
68 | }
|
69 | exports.compileDts = compileDts;
|
70 | function changeExtensionToDts(fileName) {
|
71 | if (fileName.slice(-5) === '.d.ts') {
|
72 | return fileName;
|
73 | }
|
74 |
|
75 | var ext = path.extname(fileName);
|
76 | return fileName.slice(0, -ext.length) + '.d.ts';
|
77 | }
|
78 |
|
79 |
|
80 |
|
81 | function getDeclarationFiles(rootFiles, compilerOptions) {
|
82 |
|
83 |
|
84 | compilerOptions = __assign(__assign({}, compilerOptions), { noEmit: false, declaration: true });
|
85 | var program = ts.createProgram(rootFiles, compilerOptions);
|
86 | var allFilesAreDeclarations = program.getSourceFiles().every(function (s) { return s.isDeclarationFile; });
|
87 | var declarations = new Map();
|
88 | if (allFilesAreDeclarations) {
|
89 |
|
90 |
|
91 | logger_1.verboseLog('Skipping compiling the project to generate d.ts because all files in it are d.ts already');
|
92 | return declarations;
|
93 | }
|
94 | check_diagnostics_errors_1.checkProgramDiagnosticsErrors(program);
|
95 | var emitResult = program.emit(undefined, function (fileName, data) { return declarations.set(get_absolute_path_1.getAbsolutePath(fileName), data); }, undefined, true);
|
96 | check_diagnostics_errors_1.checkDiagnosticsErrors(emitResult.diagnostics, 'Errors while emitting declarations');
|
97 | return declarations;
|
98 | }
|
99 | function warnAboutTypeScriptFilesInProgram(program) {
|
100 | var nonDeclarationFiles = program.getSourceFiles().filter(function (file) { return !file.isDeclarationFile; });
|
101 | if (nonDeclarationFiles.length !== 0) {
|
102 | logger_1.warnLog("WARNING: It seems that some files in the compilation still are not declaration files.\nFor more information see https://github.com/timocov/dts-bundle-generator/issues/53.\nIf you think this is a mistake, feel free to open new issue or just ignore this warning.\n " + nonDeclarationFiles.map(function (file) { return file.fileName; }).join('\n ') + "\n");
|
103 | }
|
104 | }
|