1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.generateOutput = void 0;
|
4 | var ts = require("typescript");
|
5 | var typescript_1 = require("./helpers/typescript");
|
6 | var package_version_1 = require("./helpers/package-version");
|
7 | function generateOutput(params, options) {
|
8 | if (options === void 0) { options = {}; }
|
9 | var resultOutput = '';
|
10 | if (!options.noBanner) {
|
11 | resultOutput += "// Generated by dts-bundle-generator v" + package_version_1.packageVersion() + "\n\n";
|
12 | }
|
13 | if (params.typesReferences.size !== 0) {
|
14 | var header = generateReferenceTypesDirective(Array.from(params.typesReferences));
|
15 | resultOutput += header + "\n\n";
|
16 | }
|
17 | if (params.imports.size !== 0) {
|
18 |
|
19 | var sortedEntries = Array.from(params.imports.entries()).sort(function (firstEntry, secondEntry) {
|
20 | return firstEntry[0].localeCompare(secondEntry[0]);
|
21 | });
|
22 | var importsArray = [];
|
23 | for (var _i = 0, sortedEntries_1 = sortedEntries; _i < sortedEntries_1.length; _i++) {
|
24 | var _a = sortedEntries_1[_i], libraryName = _a[0], libraryImports = _a[1];
|
25 | importsArray.push.apply(importsArray, generateImports(libraryName, libraryImports));
|
26 | }
|
27 | if (importsArray.length !== 0) {
|
28 | resultOutput += importsArray.join('\n') + "\n\n";
|
29 | }
|
30 | }
|
31 | var statements = params.statements.map(function (statement) { return getStatementText(statement, params); });
|
32 | if (options.sortStatements) {
|
33 | statements.sort(compareStatementText);
|
34 | }
|
35 | resultOutput += statements.map(statementTextToString).join('\n');
|
36 | if (params.renamedExports.length !== 0) {
|
37 | resultOutput += "\n\nexport {\n\t" + params.renamedExports.sort().join(',\n\t') + ",\n};";
|
38 | }
|
39 | if (options.umdModuleName !== undefined) {
|
40 | resultOutput += "\n\nexport as namespace " + options.umdModuleName + ";";
|
41 | }
|
42 |
|
43 |
|
44 | resultOutput += "\n\nexport {};\n";
|
45 | return resultOutput;
|
46 | }
|
47 | exports.generateOutput = generateOutput;
|
48 | function statementTextToString(s) {
|
49 | if (s.leadingComment === undefined) {
|
50 | return s.text;
|
51 | }
|
52 | return s.leadingComment + "\n" + s.text;
|
53 | }
|
54 | function compareStatementText(a, b) {
|
55 | if (a.text > b.text) {
|
56 | return 1;
|
57 | }
|
58 | else if (a.text < b.text) {
|
59 | return -1;
|
60 | }
|
61 | return 0;
|
62 | }
|
63 | function needAddDeclareKeyword(statement, nodeText) {
|
64 |
|
65 |
|
66 |
|
67 | if (ts.isClassDeclaration(statement) && /^class\b/.test(nodeText)) {
|
68 | return true;
|
69 | }
|
70 | if (ts.isFunctionDeclaration(statement) && /^function\b/.test(nodeText)) {
|
71 | return true;
|
72 | }
|
73 | if (ts.isVariableStatement(statement) && /^(const|let|var)\b/.test(nodeText)) {
|
74 | return true;
|
75 | }
|
76 | return false;
|
77 | }
|
78 | function getStatementText(statement, helpers) {
|
79 | var shouldStatementHasExportKeyword = helpers.shouldStatementHasExportKeyword(statement);
|
80 | var needStripDefaultKeyword = helpers.needStripDefaultKeywordForStatement(statement);
|
81 | var hasStatementExportKeyword = ts.isExportAssignment(statement) || typescript_1.hasNodeModifier(statement, ts.SyntaxKind.ExportKeyword);
|
82 | var nodeText = getTextAccordingExport(statement.getText(), hasStatementExportKeyword, shouldStatementHasExportKeyword);
|
83 | if (ts.isEnumDeclaration(statement)
|
84 | && typescript_1.hasNodeModifier(statement, ts.SyntaxKind.ConstKeyword)
|
85 | && helpers.needStripConstFromConstEnum(statement)) {
|
86 | nodeText = nodeText.replace(/\bconst\s/, '');
|
87 | }
|
88 |
|
89 | if (typescript_1.hasNodeModifier(statement, ts.SyntaxKind.DefaultKeyword) && needStripDefaultKeyword) {
|
90 |
|
91 |
|
92 | nodeText = nodeText.replace(/\bdefault\s/, ts.isClassDeclaration(statement) ? 'declare ' : '');
|
93 | }
|
94 | if (needAddDeclareKeyword(statement, nodeText)) {
|
95 | nodeText = "declare " + nodeText;
|
96 | }
|
97 | var result = {
|
98 | text: spacesToTabs(nodeText),
|
99 | };
|
100 |
|
101 | if (shouldStatementHasExportKeyword) {
|
102 | var start = statement.getStart();
|
103 | var jsDocStart = statement.getStart(undefined, true);
|
104 | var nodeJSDoc = statement.getSourceFile().getFullText().substring(jsDocStart, start).trim();
|
105 | if (nodeJSDoc.length !== 0) {
|
106 | result.leadingComment = spacesToTabs(nodeJSDoc);
|
107 | }
|
108 | }
|
109 | return result;
|
110 | }
|
111 | function generateImports(libraryName, imports) {
|
112 | var fromEnding = "from '" + libraryName + "';";
|
113 | var result = [];
|
114 |
|
115 | Array.from(imports.starImports).sort().forEach(function (importName) { return result.push("import * as " + importName + " " + fromEnding); });
|
116 | Array.from(imports.defaultImports).sort().forEach(function (importName) { return result.push("import " + importName + " " + fromEnding); });
|
117 | if (imports.namedImports.size !== 0) {
|
118 | result.push("import { " + Array.from(imports.namedImports).sort().join(', ') + " } " + fromEnding);
|
119 | }
|
120 | return result;
|
121 | }
|
122 | function generateReferenceTypesDirective(libraries) {
|
123 | return libraries.sort().map(function (library) {
|
124 | return "/// <reference types=\"" + library + "\" />";
|
125 | }).join('\n');
|
126 | }
|
127 | function getTextAccordingExport(nodeText, isNodeExported, shouldNodeBeExported) {
|
128 | if (shouldNodeBeExported && !isNodeExported) {
|
129 | return 'export ' + nodeText;
|
130 | }
|
131 | else if (isNodeExported && !shouldNodeBeExported) {
|
132 | return nodeText.slice('export '.length);
|
133 | }
|
134 | return nodeText;
|
135 | }
|
136 | function spacesToTabs(text) {
|
137 | return text.replace(/^( )+/gm, function (substring) {
|
138 | return '\t'.repeat(substring.length / 4);
|
139 | });
|
140 | }
|