1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var ts = require("typescript");
|
4 | var typescript_helpers_1 = require("./typescript-helpers");
|
5 | function generateOutput(params, options) {
|
6 | if (options === void 0) { options = {}; }
|
7 | var resultOutput = '';
|
8 | if (params.typesReferences.size !== 0) {
|
9 | var header = generateReferenceTypesDirective(Array.from(params.typesReferences));
|
10 | resultOutput += header + "\n\n";
|
11 | }
|
12 | if (params.imports.size !== 0) {
|
13 |
|
14 | var sortedEntries = Array.from(params.imports.entries()).sort(function (firstEntry, secondEntry) {
|
15 | return firstEntry[0].localeCompare(secondEntry[0]);
|
16 | });
|
17 | var importsArray = sortedEntries.map(function (entry) {
|
18 | var libraryName = entry[0], libraryImports = entry[1];
|
19 | return generateImport(libraryName, Array.from(libraryImports));
|
20 | });
|
21 | resultOutput += importsArray.join('\n') + "\n\n";
|
22 | }
|
23 | var statements = params.statements.map(function (statement) {
|
24 | return getStatementText(statement, params.shouldStatementHasExportKeyword(statement), params.needStripDefaultKeywordForStatement(statement));
|
25 | });
|
26 | if (options.sortStatements) {
|
27 | statements.sort();
|
28 | }
|
29 | resultOutput += statements.join('\n');
|
30 | if (options.umdModuleName !== undefined) {
|
31 | resultOutput += "\n\nexport as namespace " + options.umdModuleName + ";\n";
|
32 | }
|
33 | return resultOutput;
|
34 | }
|
35 | exports.generateOutput = generateOutput;
|
36 | function getStatementText(statement, shouldStatementHasExportKeyword, needStripDefaultKeyword) {
|
37 | var hasStatementExportKeyword = ts.isExportAssignment(statement) || typescript_helpers_1.hasNodeModifier(statement, ts.SyntaxKind.ExportKeyword);
|
38 | var nodeText = getTextAccordingExport(statement.getText(), hasStatementExportKeyword, shouldStatementHasExportKeyword);
|
39 |
|
40 | if (typescript_helpers_1.hasNodeModifier(statement, ts.SyntaxKind.DefaultKeyword) && needStripDefaultKeyword) {
|
41 |
|
42 |
|
43 | nodeText = nodeText.replace(/\bdefault\s/, ts.isClassDeclaration(statement) ? 'declare ' : '');
|
44 | }
|
45 |
|
46 | if (shouldStatementHasExportKeyword) {
|
47 | var start = statement.getStart();
|
48 | var jsDocStart = statement.getStart(undefined, true);
|
49 | var nodeJSDoc = statement.getSourceFile().getFullText().substring(jsDocStart, start).trim();
|
50 | if (nodeJSDoc.length !== 0) {
|
51 | nodeText = nodeJSDoc + "\n" + nodeText;
|
52 | }
|
53 | }
|
54 | return spacesToTabs(nodeText);
|
55 | }
|
56 | function generateImport(libraryName, imports) {
|
57 |
|
58 | return "import { " + imports.sort().join(', ') + " } from '" + libraryName + "';";
|
59 | }
|
60 | function generateReferenceTypesDirective(libraries) {
|
61 | return libraries.sort().map(function (library) {
|
62 | return "/// <reference types=\"" + library + "\" />";
|
63 | }).join('\n');
|
64 | }
|
65 | function getTextAccordingExport(nodeText, isNodeExported, shouldNodeBeExported) {
|
66 | if (shouldNodeBeExported && !isNodeExported) {
|
67 | return 'export ' + nodeText;
|
68 | }
|
69 | else if (isNodeExported && !shouldNodeBeExported) {
|
70 | return nodeText.slice('export '.length);
|
71 | }
|
72 | return nodeText;
|
73 | }
|
74 | function spacesToTabs(text) {
|
75 | return text.replace(/^( )+/gm, function (substring) {
|
76 | return '\t'.repeat(substring.length / 4);
|
77 | });
|
78 | }
|