@openrewrite/rewrite 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/CONTRIBUTING.md +22 -0
  2. package/LICENSE +201 -0
  3. package/README.md +13 -0
  4. package/dist/src/core/execution.d.ts +35 -0
  5. package/dist/src/core/execution.d.ts.map +1 -0
  6. package/dist/src/core/execution.js +65 -0
  7. package/dist/src/core/execution.js.map +1 -0
  8. package/dist/src/core/index.d.ts +6 -0
  9. package/dist/src/core/index.d.ts.map +1 -0
  10. package/dist/src/core/index.js +22 -0
  11. package/dist/src/core/index.js.map +1 -0
  12. package/dist/src/core/markers.d.ts +56 -0
  13. package/dist/src/core/markers.d.ts.map +1 -0
  14. package/dist/src/core/markers.js +140 -0
  15. package/dist/src/core/markers.js.map +1 -0
  16. package/dist/src/core/parser.d.ts +34 -0
  17. package/dist/src/core/parser.d.ts.map +1 -0
  18. package/dist/src/core/parser.js +106 -0
  19. package/dist/src/core/parser.js.map +1 -0
  20. package/dist/src/core/tree.d.ts +195 -0
  21. package/dist/src/core/tree.d.ts.map +1 -0
  22. package/dist/src/core/tree.js +455 -0
  23. package/dist/src/core/tree.js.map +1 -0
  24. package/dist/src/core/utils.d.ts +12 -0
  25. package/dist/src/core/utils.d.ts.map +1 -0
  26. package/dist/src/core/utils.js +69 -0
  27. package/dist/src/core/utils.js.map +1 -0
  28. package/dist/src/index.d.ts +2 -0
  29. package/dist/src/index.d.ts.map +1 -0
  30. package/dist/src/index.js +3 -0
  31. package/dist/src/index.js.map +1 -0
  32. package/dist/src/java/extensions.d.ts +7 -0
  33. package/dist/src/java/extensions.d.ts.map +1 -0
  34. package/dist/src/java/extensions.js +53 -0
  35. package/dist/src/java/extensions.js.map +1 -0
  36. package/dist/src/java/index.d.ts +4 -0
  37. package/dist/src/java/index.d.ts.map +1 -0
  38. package/dist/src/java/index.js +20 -0
  39. package/dist/src/java/index.js.map +1 -0
  40. package/dist/src/java/markers.d.ts +20 -0
  41. package/dist/src/java/markers.d.ts.map +1 -0
  42. package/dist/src/java/markers.js +54 -0
  43. package/dist/src/java/markers.js.map +1 -0
  44. package/dist/src/java/tree/extensions.d.ts +6 -0
  45. package/dist/src/java/tree/extensions.d.ts.map +1 -0
  46. package/dist/src/java/tree/extensions.js +36 -0
  47. package/dist/src/java/tree/extensions.js.map +1 -0
  48. package/dist/src/java/tree/index.d.ts +4 -0
  49. package/dist/src/java/tree/index.d.ts.map +1 -0
  50. package/dist/src/java/tree/index.js +20 -0
  51. package/dist/src/java/tree/index.js.map +1 -0
  52. package/dist/src/java/tree/support_types.d.ts +396 -0
  53. package/dist/src/java/tree/support_types.d.ts.map +1 -0
  54. package/dist/src/java/tree/support_types.js +450 -0
  55. package/dist/src/java/tree/support_types.js.map +1 -0
  56. package/dist/src/java/tree/tree.d.ts +3377 -0
  57. package/dist/src/java/tree/tree.d.ts.map +1 -0
  58. package/dist/src/java/tree/tree.js +4613 -0
  59. package/dist/src/java/tree/tree.js.map +1 -0
  60. package/dist/src/java/tree/types.d.ts +80 -0
  61. package/dist/src/java/tree/types.d.ts.map +1 -0
  62. package/dist/src/java/tree/types.js +138 -0
  63. package/dist/src/java/tree/types.js.map +1 -0
  64. package/dist/src/java/visitor.d.ts +82 -0
  65. package/dist/src/java/visitor.d.ts.map +1 -0
  66. package/dist/src/java/visitor.js +872 -0
  67. package/dist/src/java/visitor.js.map +1 -0
  68. package/dist/src/javascript/extensions.d.ts +12 -0
  69. package/dist/src/javascript/extensions.d.ts.map +1 -0
  70. package/dist/src/javascript/extensions.js +60 -0
  71. package/dist/src/javascript/extensions.js.map +1 -0
  72. package/dist/src/javascript/index.d.ts +6 -0
  73. package/dist/src/javascript/index.d.ts.map +1 -0
  74. package/dist/src/javascript/index.js +22 -0
  75. package/dist/src/javascript/index.js.map +1 -0
  76. package/dist/src/javascript/markers.d.ts +2 -0
  77. package/dist/src/javascript/markers.d.ts.map +1 -0
  78. package/dist/src/javascript/markers.js +3 -0
  79. package/dist/src/javascript/markers.js.map +1 -0
  80. package/dist/src/javascript/parser.d.ts +268 -0
  81. package/dist/src/javascript/parser.d.ts.map +1 -0
  82. package/dist/src/javascript/parser.js +1137 -0
  83. package/dist/src/javascript/parser.js.map +1 -0
  84. package/dist/src/javascript/parserUtils.d.ts +7 -0
  85. package/dist/src/javascript/parserUtils.d.ts.map +1 -0
  86. package/dist/src/javascript/parserUtils.js +165 -0
  87. package/dist/src/javascript/parserUtils.js.map +1 -0
  88. package/dist/src/javascript/projectParser.d.ts +25 -0
  89. package/dist/src/javascript/projectParser.d.ts.map +1 -0
  90. package/dist/src/javascript/projectParser.js +149 -0
  91. package/dist/src/javascript/projectParser.js.map +1 -0
  92. package/dist/src/javascript/projectParserMain.d.ts +3 -0
  93. package/dist/src/javascript/projectParserMain.d.ts.map +1 -0
  94. package/dist/src/javascript/projectParserMain.js +59 -0
  95. package/dist/src/javascript/projectParserMain.js.map +1 -0
  96. package/dist/src/javascript/tree/extensions.d.ts +4 -0
  97. package/dist/src/javascript/tree/extensions.d.ts.map +1 -0
  98. package/dist/src/javascript/tree/extensions.js +80 -0
  99. package/dist/src/javascript/tree/extensions.js.map +1 -0
  100. package/dist/src/javascript/tree/index.d.ts +3 -0
  101. package/dist/src/javascript/tree/index.d.ts.map +1 -0
  102. package/dist/src/javascript/tree/index.js +19 -0
  103. package/dist/src/javascript/tree/index.js.map +1 -0
  104. package/dist/src/javascript/tree/support_types.d.ts +184 -0
  105. package/dist/src/javascript/tree/support_types.d.ts.map +1 -0
  106. package/dist/src/javascript/tree/support_types.js +224 -0
  107. package/dist/src/javascript/tree/support_types.js.map +1 -0
  108. package/dist/src/javascript/tree/tree.d.ts +1173 -0
  109. package/dist/src/javascript/tree/tree.d.ts.map +1 -0
  110. package/dist/src/javascript/tree/tree.js +1590 -0
  111. package/dist/src/javascript/tree/tree.js.map +1 -0
  112. package/dist/src/javascript/typeMapping.d.ts +16 -0
  113. package/dist/src/javascript/typeMapping.d.ts.map +1 -0
  114. package/dist/src/javascript/typeMapping.js +120 -0
  115. package/dist/src/javascript/typeMapping.js.map +1 -0
  116. package/dist/src/javascript/visitor.d.ts +41 -0
  117. package/dist/src/javascript/visitor.d.ts.map +1 -0
  118. package/dist/src/javascript/visitor.js +360 -0
  119. package/dist/src/javascript/visitor.js.map +1 -0
  120. package/dist/src/json/extensions.d.ts +6 -0
  121. package/dist/src/json/extensions.d.ts.map +1 -0
  122. package/dist/src/json/extensions.js +11 -0
  123. package/dist/src/json/extensions.js.map +1 -0
  124. package/dist/src/json/index.d.ts +5 -0
  125. package/dist/src/json/index.d.ts.map +1 -0
  126. package/dist/src/json/index.js +21 -0
  127. package/dist/src/json/index.js.map +1 -0
  128. package/dist/src/json/markers.d.ts +2 -0
  129. package/dist/src/json/markers.d.ts.map +1 -0
  130. package/dist/src/json/markers.js +3 -0
  131. package/dist/src/json/markers.js.map +1 -0
  132. package/dist/src/json/support_types.d.ts +19 -0
  133. package/dist/src/json/support_types.d.ts.map +1 -0
  134. package/dist/src/json/support_types.js +47 -0
  135. package/dist/src/json/support_types.js.map +1 -0
  136. package/dist/src/json/tree.d.ts +187 -0
  137. package/dist/src/json/tree.d.ts.map +1 -0
  138. package/dist/src/json/tree.js +393 -0
  139. package/dist/src/json/tree.js.map +1 -0
  140. package/dist/src/json/visitor.d.ts +16 -0
  141. package/dist/src/json/visitor.d.ts.map +1 -0
  142. package/dist/src/json/visitor.js +83 -0
  143. package/dist/src/json/visitor.js.map +1 -0
  144. package/dist/src/yaml/index.d.ts +4 -0
  145. package/dist/src/yaml/index.d.ts.map +1 -0
  146. package/dist/src/yaml/index.js +20 -0
  147. package/dist/src/yaml/index.js.map +1 -0
  148. package/dist/src/yaml/markers.d.ts +2 -0
  149. package/dist/src/yaml/markers.d.ts.map +1 -0
  150. package/dist/src/yaml/markers.js +3 -0
  151. package/dist/src/yaml/markers.js.map +1 -0
  152. package/dist/src/yaml/tree/extensions.d.ts +2 -0
  153. package/dist/src/yaml/tree/extensions.d.ts.map +1 -0
  154. package/dist/src/yaml/tree/extensions.js +3 -0
  155. package/dist/src/yaml/tree/extensions.js.map +1 -0
  156. package/dist/src/yaml/tree/index.d.ts +3 -0
  157. package/dist/src/yaml/tree/index.d.ts.map +1 -0
  158. package/dist/src/yaml/tree/index.js +19 -0
  159. package/dist/src/yaml/tree/index.js.map +1 -0
  160. package/dist/src/yaml/tree/support_types.d.ts +37 -0
  161. package/dist/src/yaml/tree/support_types.d.ts.map +1 -0
  162. package/dist/src/yaml/tree/support_types.js +25 -0
  163. package/dist/src/yaml/tree/support_types.js.map +1 -0
  164. package/dist/src/yaml/tree/tree.d.ts +451 -0
  165. package/dist/src/yaml/tree/tree.d.ts.map +1 -0
  166. package/dist/src/yaml/tree/tree.js +551 -0
  167. package/dist/src/yaml/tree/tree.js.map +1 -0
  168. package/dist/src/yaml/visitor.d.ts +16 -0
  169. package/dist/src/yaml/visitor.d.ts.map +1 -0
  170. package/dist/src/yaml/visitor.js +64 -0
  171. package/dist/src/yaml/visitor.js.map +1 -0
  172. package/package.json +40 -0
@@ -0,0 +1,1137 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.JavaScriptParserVisitor = exports.JavaScriptParser = void 0;
27
+ const ts = __importStar(require("typescript"));
28
+ const J = __importStar(require("../java"));
29
+ const java_1 = require("../java");
30
+ const JS = __importStar(require("."));
31
+ const core_1 = require("../core");
32
+ const parserUtils_1 = require("./parserUtils");
33
+ const typeMapping_1 = require("./typeMapping");
34
+ class JavaScriptParser extends core_1.Parser {
35
+ constructor() {
36
+ super();
37
+ this.sourceFileCache = new Map();
38
+ this.compilerOptions = {
39
+ target: ts.ScriptTarget.Latest,
40
+ module: ts.ModuleKind.CommonJS,
41
+ allowJs: true,
42
+ };
43
+ }
44
+ reset() {
45
+ this.sourceFileCache.clear();
46
+ this.oldProgram = undefined;
47
+ return this;
48
+ }
49
+ parseProgramSources(program, relativeTo, ctx) {
50
+ const typeChecker = program.getTypeChecker();
51
+ const result = [];
52
+ for (const filePath of program.getRootFileNames()) {
53
+ const sourceFile = program.getSourceFile(filePath);
54
+ const input = new core_1.ParserInput(filePath, null, false, () => Buffer.from(ts.sys.readFile(filePath)));
55
+ try {
56
+ const parsed = new JavaScriptParserVisitor(this, sourceFile, typeChecker).visit(sourceFile);
57
+ result.push(parsed);
58
+ }
59
+ catch (error) {
60
+ result.push(core_1.ParseError.build(this, input, relativeTo, ctx, error instanceof Error ? error : new Error('Parser threw unknown error: ' + error), null));
61
+ }
62
+ }
63
+ return result;
64
+ }
65
+ parseInputs(inputs, relativeTo, ctx) {
66
+ const inputFiles = new Map();
67
+ for (const input of inputs) {
68
+ inputFiles.set(input.path, input);
69
+ this.sourceFileCache.delete(input.path);
70
+ }
71
+ const host = ts.createCompilerHost(this.compilerOptions);
72
+ host.getSourceFile = (fileName, languageVersion, onError) => {
73
+ let sourceFile = this.sourceFileCache.get(fileName);
74
+ if (sourceFile) {
75
+ return sourceFile;
76
+ }
77
+ let sourceText;
78
+ const input = inputFiles.get(fileName);
79
+ if (input) {
80
+ sourceText = input.source().toString('utf8');
81
+ }
82
+ else {
83
+ sourceText = ts.sys.readFile(fileName);
84
+ }
85
+ if (sourceText !== undefined) {
86
+ sourceFile = ts.createSourceFile(fileName, sourceText, languageVersion, true);
87
+ if (!input) {
88
+ this.sourceFileCache.set(fileName, sourceFile);
89
+ }
90
+ return sourceFile;
91
+ }
92
+ if (onError)
93
+ onError(`File not found: ${fileName}`);
94
+ return undefined;
95
+ };
96
+ host.fileExists = (fileName) => {
97
+ return inputFiles.has(fileName) || ts.sys.fileExists(fileName);
98
+ };
99
+ host.readFile = (fileName) => {
100
+ const input = inputFiles.get(fileName);
101
+ return input
102
+ ? input.source().toString('utf8')
103
+ : ts.sys.readFile(fileName);
104
+ };
105
+ const program = ts.createProgram([...inputFiles.keys()], this.compilerOptions, host, this.oldProgram);
106
+ this.oldProgram = program;
107
+ const typeChecker = program.getTypeChecker();
108
+ const result = [];
109
+ for (const input of inputFiles.values()) {
110
+ const filePath = input.path;
111
+ const sourceFile = program.getSourceFile(filePath);
112
+ if (sourceFile) {
113
+ try {
114
+ const parsed = new JavaScriptParserVisitor(this, sourceFile, typeChecker).visit(sourceFile);
115
+ result.push(parsed);
116
+ }
117
+ catch (error) {
118
+ result.push(core_1.ParseError.build(this, input, relativeTo, ctx, error instanceof Error ? error : new Error('Parser threw unknown error: ' + error), null));
119
+ }
120
+ }
121
+ else {
122
+ result.push(core_1.ParseError.build(this, input, relativeTo, ctx, new Error('Parser returned undefined'), null));
123
+ }
124
+ }
125
+ return result;
126
+ }
127
+ accept(path) {
128
+ return path.endsWith('.ts') || path.endsWith('.tsx') || path.endsWith('.js') || path.endsWith('.jsx');
129
+ }
130
+ sourcePathFromSourceText(prefix, sourceCode) {
131
+ return prefix + "/source.ts";
132
+ }
133
+ static builder() {
134
+ return new JavaScriptParser.Builder();
135
+ }
136
+ }
137
+ exports.JavaScriptParser = JavaScriptParser;
138
+ (function (JavaScriptParser) {
139
+ class Builder extends core_1.Parser.Builder {
140
+ build() {
141
+ return new JavaScriptParser();
142
+ }
143
+ }
144
+ JavaScriptParser.Builder = Builder;
145
+ })(JavaScriptParser || (exports.JavaScriptParser = JavaScriptParser = {}));
146
+ const visitMethodMap = new Map();
147
+ for (const [key, value] of Object.entries(ts.SyntaxKind)) {
148
+ if (typeof value === 'number' && !visitMethodMap.has(value)) {
149
+ visitMethodMap.set(value, 'visit' + key);
150
+ }
151
+ }
152
+ class JavaScriptParserVisitor {
153
+ constructor(parser, sourceFile, typeChecker) {
154
+ this.parser = parser;
155
+ this.sourceFile = sourceFile;
156
+ this.mapModifier = (node) => {
157
+ let kind;
158
+ switch (node.kind) {
159
+ case ts.SyntaxKind.PublicKeyword:
160
+ kind = J.Modifier.Type.Public;
161
+ break;
162
+ case ts.SyntaxKind.PrivateKeyword:
163
+ kind = J.Modifier.Type.Private;
164
+ break;
165
+ case ts.SyntaxKind.ProtectedKeyword:
166
+ kind = J.Modifier.Type.Protected;
167
+ break;
168
+ case ts.SyntaxKind.StaticKeyword:
169
+ kind = J.Modifier.Type.Static;
170
+ break;
171
+ case ts.SyntaxKind.AbstractKeyword:
172
+ kind = J.Modifier.Type.Abstract;
173
+ break;
174
+ default:
175
+ kind = J.Modifier.Type.LanguageExtension;
176
+ }
177
+ return new J.Modifier((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, kind == J.Modifier.Type.LanguageExtension ? node.getText() : null, kind, []);
178
+ };
179
+ this.semicolonPrefix = (n) => {
180
+ const last = n.getLastToken();
181
+ return (last === null || last === void 0 ? void 0 : last.kind) == ts.SyntaxKind.SemicolonToken ? this.prefix(last) : java_1.Space.EMPTY;
182
+ };
183
+ this.keywordPrefix = (token) => (node) => {
184
+ const last = (0, parserUtils_1.getNextSibling)(node);
185
+ return (last === null || last === void 0 ? void 0 : last.kind) == token ? this.prefix(last) : java_1.Space.EMPTY;
186
+ };
187
+ this._seenTriviaSpans = [];
188
+ this.typeMapping = new typeMapping_1.JavaScriptTypeMapping(typeChecker);
189
+ }
190
+ visit(node) {
191
+ const member = this[visitMethodMap.get(node.kind)];
192
+ if (typeof member === 'function') {
193
+ return member.bind(this)(node);
194
+ }
195
+ else {
196
+ return this.visitUnknown(node);
197
+ }
198
+ }
199
+ convert(node) {
200
+ return this.visit(node);
201
+ }
202
+ visitSourceFile(node) {
203
+ return new JS.CompilationUnit((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.sourceFile.fileName, null, null, false, null, [], this.semicolonPaddedStatementList(node.statements), this.prefix(node.endOfFileToken));
204
+ }
205
+ semicolonPaddedStatementList(statements) {
206
+ return this.rightPaddedList([...statements], this.semicolonPrefix, n => {
207
+ const last = n.getLastToken();
208
+ return (last === null || last === void 0 ? void 0 : last.kind) == ts.SyntaxKind.SemicolonToken ? core_1.Markers.build([new java_1.Semicolon((0, core_1.randomId)())]) : core_1.Markers.EMPTY;
209
+ });
210
+ }
211
+ visitUnknown(node) {
212
+ return new J.Unknown((0, core_1.randomId)(), java_1.Space.EMPTY, core_1.Markers.EMPTY, new J.Unknown.Source((0, core_1.randomId)(), java_1.Space.EMPTY, core_1.Markers.build([
213
+ core_1.ParseExceptionResult.build(this.parser, new Error("Unsupported AST element: " + node)).withTreeType(visitMethodMap.get(node.kind).substring(5))
214
+ ]), node.getFullText()));
215
+ }
216
+ mapModifiers(node) {
217
+ var _a, _b;
218
+ if (ts.isVariableStatement(node)) {
219
+ return [new J.Modifier((0, core_1.randomId)(), java_1.Space.EMPTY, core_1.Markers.EMPTY, (_a = node.declarationList.getFirstToken()) === null || _a === void 0 ? void 0 : _a.getText(), J.Modifier.Type.LanguageExtension, [])];
220
+ }
221
+ else if (ts.isClassDeclaration(node)) {
222
+ return node.modifiers ? (_b = node.modifiers) === null || _b === void 0 ? void 0 : _b.filter(ts.isModifier).map(this.mapModifier) : [];
223
+ }
224
+ else if (ts.isPropertyDeclaration(node)) {
225
+ return [];
226
+ }
227
+ throw new Error(`Cannot get modifiers from ${node}`);
228
+ }
229
+ rightPadded(t, trailing, markers) {
230
+ return new java_1.JRightPadded(t, trailing, markers !== null && markers !== void 0 ? markers : core_1.Markers.EMPTY);
231
+ }
232
+ rightPaddedList(nodes, trailing, markers) {
233
+ return nodes.map(n => this.rightPadded(this.convert(n), trailing(n), markers === null || markers === void 0 ? void 0 : markers(n)));
234
+ }
235
+ rightPaddedSeparatedList(nodes, separator, markers) {
236
+ if (nodes.length === 0) {
237
+ return [];
238
+ }
239
+ const ts = [];
240
+ for (let i = 0; i < nodes.length - 1; i += 2) {
241
+ const last = i === nodes.length - 2;
242
+ ts.push(this.rightPadded(this.convert(nodes[i]), this.prefix(nodes[i + 1]), markers(nodes, i)));
243
+ }
244
+ if ((nodes.length & 1) === 1) {
245
+ ts.push(this.rightPadded(this.convert(nodes[nodes.length - 1]), java_1.Space.EMPTY, markers(nodes, nodes.length - 1)));
246
+ }
247
+ return ts;
248
+ }
249
+ leftPadded(before, t, markers) {
250
+ return new java_1.JLeftPadded(before, t, markers !== null && markers !== void 0 ? markers : core_1.Markers.EMPTY);
251
+ }
252
+ leftPaddedList(before, nodes, markers) {
253
+ return nodes.map(n => this.leftPadded(before(n), this.convert(n), markers === null || markers === void 0 ? void 0 : markers(n)));
254
+ }
255
+ visitClassDeclaration(node) {
256
+ return new J.ClassDeclaration((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.mapDecorators(node), this.mapModifiers(node), new J.ClassDeclaration.Kind((0, core_1.randomId)(), node.modifiers ? this.suffix(node.modifiers[node.modifiers.length - 1]) : this.prefix(node), core_1.Markers.EMPTY, [], J.ClassDeclaration.Kind.Type.Class), node.name ? this.convert(node.name) : this.mapIdentifier(node, ""), this.mapTypeParameters(node), null, this.mapExtends(node), this.mapImplements(node), null, this.convertBlock(node.getChildren().slice(-3)), this.mapType(node));
257
+ }
258
+ mapExtends(node) {
259
+ if (node.heritageClauses == undefined || node.heritageClauses.length == 0) {
260
+ return null;
261
+ }
262
+ for (let heritageClause of node.heritageClauses) {
263
+ if (heritageClause.token == ts.SyntaxKind.ExtendsKeyword) {
264
+ return this.leftPadded(this.prefix(heritageClause.getFirstToken()), this.visit(heritageClause.types[0]));
265
+ }
266
+ }
267
+ return null;
268
+ }
269
+ mapImplements(node) {
270
+ if (node.heritageClauses == undefined || node.heritageClauses.length == 0) {
271
+ return null;
272
+ }
273
+ for (let heritageClause of node.heritageClauses) {
274
+ if (heritageClause.token == ts.SyntaxKind.ImplementsKeyword) {
275
+ const _implements = [];
276
+ for (let type of heritageClause.types) {
277
+ _implements.push(this.rightPadded(this.visit(type), this.suffix(type)));
278
+ }
279
+ return _implements.length > 0 ? new java_1.JContainer(this.prefix(heritageClause.getFirstToken()), _implements, core_1.Markers.EMPTY) : null;
280
+ }
281
+ }
282
+ return null;
283
+ }
284
+ visitNumericLiteral(node) {
285
+ return this.mapLiteral(node, node.text);
286
+ }
287
+ visitTrueKeyword(node) {
288
+ return this.mapLiteral(node, true);
289
+ }
290
+ visitNumberKeyword(node) {
291
+ return this.mapIdentifier(node, 'number');
292
+ }
293
+ visitStringKeyword(node) {
294
+ return this.mapIdentifier(node, 'string');
295
+ }
296
+ visitUndefinedKeyword(node) {
297
+ return this.mapIdentifier(node, 'undefined');
298
+ }
299
+ visitFalseKeyword(node) {
300
+ return this.mapLiteral(node, false);
301
+ }
302
+ visitNullKeyword(node) {
303
+ return this.mapLiteral(node, null);
304
+ }
305
+ mapLiteral(node, value) {
306
+ return new J.Literal((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, value, node.getText(), null, this.mapPrimitiveType(node));
307
+ }
308
+ visitBigIntLiteral(node) {
309
+ return this.mapLiteral(node, node.text);
310
+ }
311
+ visitStringLiteral(node) {
312
+ return this.mapLiteral(node, node.text);
313
+ }
314
+ visitJsxText(node) {
315
+ return this.visitUnknown(node);
316
+ }
317
+ visitRegularExpressionLiteral(node) {
318
+ return this.mapLiteral(node, node.text);
319
+ }
320
+ visitNoSubstitutionTemplateLiteral(node) {
321
+ return this.mapLiteral(node, node.text);
322
+ }
323
+ visitTemplateHead(node) {
324
+ return this.visitUnknown(node);
325
+ }
326
+ visitTemplateMiddle(node) {
327
+ return this.visitUnknown(node);
328
+ }
329
+ visitTemplateTail(node) {
330
+ return this.visitUnknown(node);
331
+ }
332
+ visitIdentifier(node) {
333
+ if (node.text === 'undefined') {
334
+ return this.mapLiteral(node, undefined);
335
+ }
336
+ return this.mapIdentifier(node, node.text);
337
+ }
338
+ mapIdentifier(node, name, withType = true) {
339
+ let type = withType ? this.mapType(node) : null;
340
+ return new J.Identifier((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, [], name, type instanceof java_1.JavaType.Variable ? type.type : type, type instanceof java_1.JavaType.Variable ? type : null);
341
+ }
342
+ visitThisKeyword(node) {
343
+ return this.mapIdentifier(node, 'this');
344
+ }
345
+ visitPrivateIdentifier(node) {
346
+ return this.mapIdentifier(node, node.text);
347
+ }
348
+ visitQualifiedName(node) {
349
+ return this.visitUnknown(node);
350
+ }
351
+ visitComputedPropertyName(node) {
352
+ return new J.NewArray((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, null, [], new java_1.JContainer(java_1.Space.EMPTY, [this.rightPadded(this.convert(node.expression), this.suffix(node.expression))], core_1.Markers.EMPTY), this.mapType(node));
353
+ }
354
+ visitTypeParameter(node) {
355
+ return this.visitUnknown(node);
356
+ }
357
+ visitParameter(node) {
358
+ return this.visitUnknown(node);
359
+ }
360
+ visitDecorator(node) {
361
+ return this.visitUnknown(node);
362
+ }
363
+ visitPropertySignature(node) {
364
+ return this.visitUnknown(node);
365
+ }
366
+ visitPropertyDeclaration(node) {
367
+ return new J.VariableDeclarations((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, [], this.mapModifiers(node), node.type ? this.visit(node.type) : null, null, [], [this.rightPadded(new J.VariableDeclarations.NamedVariable((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.visit(node.name), [], node.initializer ? this.leftPadded(this.prefix(node.getChildAt(node.getChildCount() - 2)), this.visit(node.initializer)) : null, this.mapVariableType(node)), java_1.Space.EMPTY)]);
368
+ }
369
+ visitMethodSignature(node) {
370
+ return this.visitUnknown(node);
371
+ }
372
+ visitMethodDeclaration(node) {
373
+ return this.visitUnknown(node);
374
+ }
375
+ visitClassStaticBlockDeclaration(node) {
376
+ return this.visitUnknown(node);
377
+ }
378
+ visitConstructor(node) {
379
+ return this.visitUnknown(node);
380
+ }
381
+ visitGetAccessor(node) {
382
+ return this.visitUnknown(node);
383
+ }
384
+ visitSetAccessor(node) {
385
+ return this.visitUnknown(node);
386
+ }
387
+ visitCallSignature(node) {
388
+ return this.visitUnknown(node);
389
+ }
390
+ visitConstructSignature(node) {
391
+ return this.visitUnknown(node);
392
+ }
393
+ visitIndexSignature(node) {
394
+ return this.visitUnknown(node);
395
+ }
396
+ visitTypePredicate(node) {
397
+ return this.visitUnknown(node);
398
+ }
399
+ visitTypeReference(node) {
400
+ return this.visitUnknown(node);
401
+ }
402
+ visitFunctionType(node) {
403
+ return this.visitUnknown(node);
404
+ }
405
+ visitConstructorType(node) {
406
+ }
407
+ visitTypeQuery(node) {
408
+ return this.visitUnknown(node);
409
+ }
410
+ visitTypeLiteral(node) {
411
+ return this.visitUnknown(node);
412
+ }
413
+ visitArrayType(node) {
414
+ return this.visitUnknown(node);
415
+ }
416
+ visitTupleType(node) {
417
+ return this.visitUnknown(node);
418
+ }
419
+ visitOptionalType(node) {
420
+ return this.visitUnknown(node);
421
+ }
422
+ visitRestType(node) {
423
+ return this.visitUnknown(node);
424
+ }
425
+ visitUnionType(node) {
426
+ return new JS.Union((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.rightPaddedList([...node.types], (n) => this.keywordPrefix(ts.SyntaxKind.BarToken)(n)), this.mapType(node));
427
+ }
428
+ visitIntersectionType(node) {
429
+ return this.visitUnknown(node);
430
+ }
431
+ visitConditionalType(node) {
432
+ return this.visitUnknown(node);
433
+ }
434
+ visitInferType(node) {
435
+ return this.visitUnknown(node);
436
+ }
437
+ visitParenthesizedType(node) {
438
+ return this.visitUnknown(node);
439
+ }
440
+ visitThisType(node) {
441
+ return this.visitUnknown(node);
442
+ }
443
+ visitTypeOperator(node) {
444
+ return this.visitUnknown(node);
445
+ }
446
+ visitIndexedAccessType(node) {
447
+ return this.visitUnknown(node);
448
+ }
449
+ visitMappedType(node) {
450
+ return this.visitUnknown(node);
451
+ }
452
+ visitLiteralType(node) {
453
+ return this.visit(node.literal);
454
+ }
455
+ visitNamedTupleMember(node) {
456
+ return this.visitUnknown(node);
457
+ }
458
+ visitTemplateLiteralType(node) {
459
+ return this.visitUnknown(node);
460
+ }
461
+ visitTemplateLiteralTypeSpan(node) {
462
+ return this.visitUnknown(node);
463
+ }
464
+ visitImportType(node) {
465
+ return this.visitUnknown(node);
466
+ }
467
+ visitObjectBindingPattern(node) {
468
+ return this.visitUnknown(node);
469
+ }
470
+ visitArrayBindingPattern(node) {
471
+ return this.visitUnknown(node);
472
+ }
473
+ visitBindingElement(node) {
474
+ return this.visitUnknown(node);
475
+ }
476
+ visitArrayLiteralExpression(node) {
477
+ return new J.NewArray((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, null, [], this.mapArguments(node.getChildren()), this.mapType(node));
478
+ }
479
+ visitObjectLiteralExpression(node) {
480
+ return new J.NewClass((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, null, java_1.Space.EMPTY, null, java_1.JContainer.empty(), this.convertPropertyAssignments(node.getChildren().slice(-3)), this.mapMethodType(node));
481
+ }
482
+ convertPropertyAssignments(nodes) {
483
+ const prefix = this.prefix(nodes[0]);
484
+ let statementList = nodes[1];
485
+ const statements = this.rightPaddedSeparatedList([...statementList.getChildren()], ts.SyntaxKind.CommaToken, (nodes, i) => i == nodes.length - 2 && nodes[i + 1].kind == ts.SyntaxKind.CommaToken ? core_1.Markers.build([new java_1.TrailingComma((0, core_1.randomId)(), this.prefix(nodes[i + 1]))]) : core_1.Markers.EMPTY);
486
+ return new J.Block((0, core_1.randomId)(), prefix, core_1.Markers.EMPTY, this.rightPadded(false, java_1.Space.EMPTY), statements, this.prefix(nodes[nodes.length - 1]));
487
+ }
488
+ visitPropertyAccessExpression(node) {
489
+ return new J.FieldAccess((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.convert(node.expression), this.leftPadded(this.prefix(node.getChildAt(1)), this.convert(node.name)), this.mapType(node));
490
+ }
491
+ visitElementAccessExpression(node) {
492
+ return this.visitUnknown(node);
493
+ }
494
+ visitCallExpression(node) {
495
+ const prefix = this.prefix(node);
496
+ let select;
497
+ let name;
498
+ if (ts.isPropertyAccessExpression(node.expression)) {
499
+ select = this.rightPadded(this.convert(node.expression.expression), this.prefix(node.expression.getChildAt(1)));
500
+ name = this.convert(node.expression.name);
501
+ }
502
+ else {
503
+ select = null;
504
+ name = this.convert(node.expression);
505
+ }
506
+ return new J.MethodInvocation((0, core_1.randomId)(), prefix, core_1.Markers.EMPTY, select, null, name, this.mapArguments(node.getChildren().slice(-3)), this.mapMethodType(node));
507
+ }
508
+ visitNewExpression(node) {
509
+ return new J.NewClass((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, null, java_1.Space.EMPTY, this.visit(node.expression), this.mapArguments(node.arguments ? node.getChildren().slice(2) : []), null, this.mapMethodType(node));
510
+ }
511
+ visitTaggedTemplateExpression(node) {
512
+ return this.visitUnknown(node);
513
+ }
514
+ visitTypeAssertionExpression(node) {
515
+ return new J.TypeCast((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, new J.ControlParentheses((0, core_1.randomId)(), this.prefix(node.getFirstToken()), core_1.Markers.EMPTY, this.rightPadded(this.convert(node.type), this.prefix(node.getChildAt(2)))), this.convert(node.expression));
516
+ }
517
+ visitParenthesizedExpression(node) {
518
+ return new J.Parentheses((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.rightPadded(this.convert(node.expression), this.prefix(node.getLastToken())));
519
+ }
520
+ visitFunctionExpression(node) {
521
+ return this.visitUnknown(node);
522
+ }
523
+ visitArrowFunction(node) {
524
+ return this.visitUnknown(node);
525
+ }
526
+ visitDeleteExpression(node) {
527
+ return new JS.Delete((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.convert(node.expression), this.mapType(node));
528
+ }
529
+ visitTypeOfExpression(node) {
530
+ return new JS.TypeOf((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.convert(node.expression), this.mapType(node));
531
+ }
532
+ visitVoidExpression(node) {
533
+ return new JS.Void((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.convert(node.expression));
534
+ }
535
+ visitAwaitExpression(node) {
536
+ return new JS.Await((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.convert(node.expression), this.mapType(node));
537
+ }
538
+ visitPrefixUnaryExpression(node) {
539
+ let unaryOperator;
540
+ switch (node.operator) {
541
+ case ts.SyntaxKind.PlusToken:
542
+ unaryOperator = J.Unary.Type.Positive;
543
+ break;
544
+ case ts.SyntaxKind.MinusToken:
545
+ unaryOperator = J.Unary.Type.Negative;
546
+ break;
547
+ case ts.SyntaxKind.ExclamationToken:
548
+ unaryOperator = J.Unary.Type.Not;
549
+ break;
550
+ case ts.SyntaxKind.PlusPlusToken:
551
+ unaryOperator = J.Unary.Type.PreIncrement;
552
+ break;
553
+ case ts.SyntaxKind.MinusMinusToken:
554
+ unaryOperator = J.Unary.Type.PreDecrement;
555
+ break;
556
+ case ts.SyntaxKind.TildeToken:
557
+ unaryOperator = J.Unary.Type.Complement;
558
+ }
559
+ if (unaryOperator === undefined) {
560
+ return this.visitUnknown(node);
561
+ }
562
+ return new J.Unary((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.leftPadded(this.prefix(node.getFirstToken()), unaryOperator), this.convert(node.operand), this.mapType(node));
563
+ }
564
+ visitPostfixUnaryExpression(node) {
565
+ let unaryOperator;
566
+ switch (node.operator) {
567
+ case ts.SyntaxKind.PlusPlusToken:
568
+ unaryOperator = J.Unary.Type.PostIncrement;
569
+ break;
570
+ case ts.SyntaxKind.MinusMinusToken:
571
+ unaryOperator = J.Unary.Type.PostDecrement;
572
+ break;
573
+ }
574
+ if (unaryOperator === undefined) {
575
+ return this.visitUnknown(node);
576
+ }
577
+ return new J.Unary((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.leftPadded(this.prefix(node.getFirstToken()), unaryOperator), this.convert(node.operand), this.mapType(node));
578
+ }
579
+ visitBinaryExpression(node) {
580
+ let binaryOperator;
581
+ switch (node.operatorToken.kind) {
582
+ case ts.SyntaxKind.EqualsEqualsEqualsToken:
583
+ binaryOperator = JS.JsBinary.Type.IdentityEquals;
584
+ break;
585
+ case ts.SyntaxKind.ExclamationEqualsEqualsToken:
586
+ binaryOperator = JS.JsBinary.Type.IdentityNotEquals;
587
+ break;
588
+ }
589
+ if (binaryOperator !== undefined) {
590
+ return new JS.JsBinary((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.convert(node.left), this.leftPadded(this.prefix(node.operatorToken), binaryOperator), this.convert(node.right), this.mapType(node));
591
+ }
592
+ if (node.operatorToken.kind == ts.SyntaxKind.InstanceOfKeyword) {
593
+ return new J.InstanceOf((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.rightPadded(this.convert(node.left), this.prefix(node.operatorToken)), this.convert(node.right), null, this.mapType(node));
594
+ }
595
+ binaryOperator = this.mapBinaryOperator(node);
596
+ if (binaryOperator === undefined) {
597
+ return this.visitUnknown(node);
598
+ }
599
+ return new J.Binary((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.convert(node.left), this.leftPadded(this.prefix(node.operatorToken), binaryOperator), this.convert(node.right), this.mapType(node));
600
+ }
601
+ mapBinaryOperator(node) {
602
+ switch (node.operatorToken.kind) {
603
+ case ts.SyntaxKind.PlusToken:
604
+ return J.Binary.Type.Addition;
605
+ case ts.SyntaxKind.MinusToken:
606
+ return J.Binary.Type.Subtraction;
607
+ case ts.SyntaxKind.AsteriskToken:
608
+ return J.Binary.Type.Multiplication;
609
+ case ts.SyntaxKind.SlashToken:
610
+ return J.Binary.Type.Division;
611
+ case ts.SyntaxKind.PercentToken:
612
+ return J.Binary.Type.Modulo;
613
+ case ts.SyntaxKind.LessThanLessThanToken:
614
+ return J.Binary.Type.LeftShift;
615
+ case ts.SyntaxKind.GreaterThanGreaterThanToken:
616
+ return J.Binary.Type.RightShift;
617
+ case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken:
618
+ return J.Binary.Type.UnsignedRightShift;
619
+ case ts.SyntaxKind.AmpersandToken:
620
+ return J.Binary.Type.BitAnd;
621
+ case ts.SyntaxKind.BarToken:
622
+ return J.Binary.Type.BitOr;
623
+ case ts.SyntaxKind.CaretToken:
624
+ return J.Binary.Type.BitXor;
625
+ case ts.SyntaxKind.EqualsEqualsToken:
626
+ return J.Binary.Type.Equal;
627
+ case ts.SyntaxKind.ExclamationEqualsToken:
628
+ return J.Binary.Type.NotEqual;
629
+ case ts.SyntaxKind.LessThanToken:
630
+ return J.Binary.Type.LessThan;
631
+ case ts.SyntaxKind.LessThanEqualsToken:
632
+ return J.Binary.Type.LessThanOrEqual;
633
+ case ts.SyntaxKind.GreaterThanToken:
634
+ return J.Binary.Type.GreaterThan;
635
+ case ts.SyntaxKind.GreaterThanEqualsToken:
636
+ return J.Binary.Type.GreaterThanOrEqual;
637
+ case ts.SyntaxKind.AmpersandAmpersandToken:
638
+ return J.Binary.Type.And;
639
+ case ts.SyntaxKind.BarBarToken:
640
+ return J.Binary.Type.Or;
641
+ }
642
+ return undefined;
643
+ }
644
+ visitConditionalExpression(node) {
645
+ return this.visitUnknown(node);
646
+ }
647
+ visitTemplateExpression(node) {
648
+ return this.visitUnknown(node);
649
+ }
650
+ visitYieldExpression(node) {
651
+ return this.visitUnknown(node);
652
+ }
653
+ visitSpreadElement(node) {
654
+ return this.visitUnknown(node);
655
+ }
656
+ visitClassExpression(node) {
657
+ return this.visitUnknown(node);
658
+ }
659
+ visitOmittedExpression(node) {
660
+ return this.visitUnknown(node);
661
+ }
662
+ visitExpressionWithTypeArguments(node) {
663
+ if (node.typeArguments) {
664
+ return this.visitUnknown(node);
665
+ }
666
+ return this.visit(node.expression);
667
+ }
668
+ visitAsExpression(node) {
669
+ return new JS.JsBinary((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.convert(node.expression), this.leftPadded(this.prefix(node.getChildAt(1)), JS.JsBinary.Type.As), this.convert(node.type), this.mapType(node));
670
+ }
671
+ visitNonNullExpression(node) {
672
+ return this.visitUnknown(node);
673
+ }
674
+ visitMetaProperty(node) {
675
+ return this.visitUnknown(node);
676
+ }
677
+ visitSyntheticExpression(node) {
678
+ return this.visitUnknown(node);
679
+ }
680
+ visitSatisfiesExpression(node) {
681
+ return this.visitUnknown(node);
682
+ }
683
+ visitTemplateSpan(node) {
684
+ return this.visitUnknown(node);
685
+ }
686
+ visitSemicolonClassElement(node) {
687
+ return this.visitUnknown(node);
688
+ }
689
+ visitBlock(node) {
690
+ return this.visitUnknown(node);
691
+ }
692
+ visitEmptyStatement(node) {
693
+ return this.visitUnknown(node);
694
+ }
695
+ visitVariableStatement(node) {
696
+ if (node.declarationList.declarations.length > 1) {
697
+ return this.visitUnknown(node);
698
+ }
699
+ return new J.VariableDeclarations((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, [], this.mapModifiers(node), node.declarationList.declarations[0].type ? this.visit(node.declarationList.declarations[0].type) : null, null, [], this.rightPaddedList([...node.declarationList.declarations], n => {
700
+ return java_1.Space.EMPTY;
701
+ }));
702
+ }
703
+ visitExpressionStatement(node) {
704
+ return new JS.ExpressionStatement((0, core_1.randomId)(), this.visit(node.expression));
705
+ }
706
+ visitIfStatement(node) {
707
+ return this.visitUnknown(node);
708
+ }
709
+ visitDoStatement(node) {
710
+ return this.visitUnknown(node);
711
+ }
712
+ visitWhileStatement(node) {
713
+ return this.visitUnknown(node);
714
+ }
715
+ visitForStatement(node) {
716
+ return this.visitUnknown(node);
717
+ }
718
+ visitForInStatement(node) {
719
+ return this.visitUnknown(node);
720
+ }
721
+ visitForOfStatement(node) {
722
+ return this.visitUnknown(node);
723
+ }
724
+ visitContinueStatement(node) {
725
+ return this.visitUnknown(node);
726
+ }
727
+ visitBreakStatement(node) {
728
+ return this.visitUnknown(node);
729
+ }
730
+ visitReturnStatement(node) {
731
+ return this.visitUnknown(node);
732
+ }
733
+ visitWithStatement(node) {
734
+ return this.visitUnknown(node);
735
+ }
736
+ visitSwitchStatement(node) {
737
+ return this.visitUnknown(node);
738
+ }
739
+ visitLabeledStatement(node) {
740
+ return this.visitUnknown(node);
741
+ }
742
+ visitThrowStatement(node) {
743
+ return this.visitUnknown(node);
744
+ }
745
+ visitTryStatement(node) {
746
+ return this.visitUnknown(node);
747
+ }
748
+ visitDebuggerStatement(node) {
749
+ return this.visitUnknown(node);
750
+ }
751
+ visitVariableDeclaration(node) {
752
+ return new J.VariableDeclarations.NamedVariable((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.visit(node.name), [], node.initializer ? this.leftPadded(this.prefix(node.getChildAt(node.getChildCount() - 2)), this.visit(node.initializer)) : null, this.mapVariableType(node));
753
+ }
754
+ visitVariableDeclarationList(node) {
755
+ return this.visitUnknown(node);
756
+ }
757
+ visitFunctionDeclaration(node) {
758
+ return this.visitUnknown(node);
759
+ }
760
+ visitInterfaceDeclaration(node) {
761
+ return this.visitUnknown(node);
762
+ }
763
+ visitTypeAliasDeclaration(node) {
764
+ return this.visitUnknown(node);
765
+ }
766
+ visitEnumDeclaration(node) {
767
+ return this.visitUnknown(node);
768
+ }
769
+ visitModuleDeclaration(node) {
770
+ return this.visitUnknown(node);
771
+ }
772
+ visitModuleBlock(node) {
773
+ return this.visitUnknown(node);
774
+ }
775
+ visitCaseBlock(node) {
776
+ return this.visitUnknown(node);
777
+ }
778
+ visitNamespaceExportDeclaration(node) {
779
+ return this.visitUnknown(node);
780
+ }
781
+ visitImportEqualsDeclaration(node) {
782
+ return this.visitUnknown(node);
783
+ }
784
+ visitImportKeyword(node) {
785
+ return this.mapIdentifier(node, 'import');
786
+ }
787
+ visitImportDeclaration(node) {
788
+ var _a, _b, _c;
789
+ const children = node.getChildren();
790
+ const _default = !!((_a = node.importClause) === null || _a === void 0 ? void 0 : _a.name);
791
+ const onlyDefault = _default && node.importClause.namedBindings == undefined;
792
+ return new JS.JsImport((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, _default ? this.rightPadded(this.visit((_b = node.importClause) === null || _b === void 0 ? void 0 : _b.name), this.suffix((_c = node.importClause) === null || _c === void 0 ? void 0 : _c.name)) : null, node.importClause && !onlyDefault ? this.visit(node.importClause) : null, children[children.indexOf(node.moduleSpecifier) - 1].kind == ts.SyntaxKind.FromKeyword ? this.prefix(children[children.indexOf(node.moduleSpecifier) - 1]) : null, this.convert(node.moduleSpecifier), null);
793
+ }
794
+ visitImportClause(node) {
795
+ var _a;
796
+ if (node.namedBindings && ts.isNamespaceImport(node.namedBindings)) {
797
+ return new java_1.JContainer(this.prefix(node), [this.rightPadded(new JS.Alias((0, core_1.randomId)(), java_1.Space.EMPTY, core_1.Markers.EMPTY, this.rightPadded(this.mapIdentifier(node.namedBindings, "*"), this.prefix(node.namedBindings.getChildAt(1))), this.convert(node.namedBindings.name)), java_1.Space.EMPTY)], core_1.Markers.EMPTY);
798
+ }
799
+ return this.mapArguments((_a = node.namedBindings) === null || _a === void 0 ? void 0 : _a.getChildren());
800
+ }
801
+ visitNamespaceImport(node) {
802
+ return this.visitUnknown(node);
803
+ }
804
+ visitNamedImports(node) {
805
+ return this.visitUnknown(node);
806
+ }
807
+ visitImportSpecifier(node) {
808
+ return this.mapIdentifier(node, node.name.text, false);
809
+ }
810
+ visitExportAssignment(node) {
811
+ return this.visitUnknown(node);
812
+ }
813
+ visitExportDeclaration(node) {
814
+ return this.visitUnknown(node);
815
+ }
816
+ visitNamedExports(node) {
817
+ return this.visitUnknown(node);
818
+ }
819
+ visitNamespaceExport(node) {
820
+ return this.visitUnknown(node);
821
+ }
822
+ visitExportSpecifier(node) {
823
+ return this.visitUnknown(node);
824
+ }
825
+ visitMissingDeclaration(node) {
826
+ return this.visitUnknown(node);
827
+ }
828
+ visitExternalModuleReference(node) {
829
+ return this.visitUnknown(node);
830
+ }
831
+ visitJsxElement(node) {
832
+ return this.visitUnknown(node);
833
+ }
834
+ visitJsxSelfClosingElement(node) {
835
+ return this.visitUnknown(node);
836
+ }
837
+ visitJsxOpeningElement(node) {
838
+ return this.visitUnknown(node);
839
+ }
840
+ visitJsxClosingElement(node) {
841
+ return this.visitUnknown(node);
842
+ }
843
+ visitJsxFragment(node) {
844
+ return this.visitUnknown(node);
845
+ }
846
+ visitJsxOpeningFragment(node) {
847
+ return this.visitUnknown(node);
848
+ }
849
+ visitJsxClosingFragment(node) {
850
+ return this.visitUnknown(node);
851
+ }
852
+ visitJsxAttribute(node) {
853
+ return this.visitUnknown(node);
854
+ }
855
+ visitJsxAttributes(node) {
856
+ return this.visitUnknown(node);
857
+ }
858
+ visitJsxSpreadAttribute(node) {
859
+ return this.visitUnknown(node);
860
+ }
861
+ visitJsxExpression(node) {
862
+ return this.visitUnknown(node);
863
+ }
864
+ visitJsxNamespacedName(node) {
865
+ return this.visitUnknown(node);
866
+ }
867
+ visitCaseClause(node) {
868
+ return this.visitUnknown(node);
869
+ }
870
+ visitDefaultClause(node) {
871
+ return this.visitUnknown(node);
872
+ }
873
+ visitHeritageClause(node) {
874
+ return this.convert(node.types[0]);
875
+ }
876
+ visitCatchClause(node) {
877
+ return this.visitUnknown(node);
878
+ }
879
+ visitImportAttributes(node) {
880
+ return this.visitUnknown(node);
881
+ }
882
+ visitImportAttribute(node) {
883
+ return this.visitUnknown(node);
884
+ }
885
+ visitPropertyAssignment(node) {
886
+ return new JS.PropertyAssignment((0, core_1.randomId)(), this.prefix(node), core_1.Markers.EMPTY, this.rightPadded(this.visit(node.name), this.suffix(node.name)), this.visit(node.initializer));
887
+ }
888
+ visitShorthandPropertyAssignment(node) {
889
+ return this.visitUnknown(node);
890
+ }
891
+ visitSpreadAssignment(node) {
892
+ return this.visitUnknown(node);
893
+ }
894
+ visitEnumMember(node) {
895
+ return this.visitUnknown(node);
896
+ }
897
+ visitBundle(node) {
898
+ return this.visitUnknown(node);
899
+ }
900
+ visitJSDocTypeExpression(node) {
901
+ return this.visitUnknown(node);
902
+ }
903
+ visitJSDocNameReference(node) {
904
+ return this.visitUnknown(node);
905
+ }
906
+ visitJSDocMemberName(node) {
907
+ return this.visitUnknown(node);
908
+ }
909
+ visitJSDocAllType(node) {
910
+ return this.visitUnknown(node);
911
+ }
912
+ visitJSDocUnknownType(node) {
913
+ return this.visitUnknown(node);
914
+ }
915
+ visitJSDocNullableType(node) {
916
+ return this.visitUnknown(node);
917
+ }
918
+ visitJSDocNonNullableType(node) {
919
+ return this.visitUnknown(node);
920
+ }
921
+ visitJSDocOptionalType(node) {
922
+ return this.visitUnknown(node);
923
+ }
924
+ visitJSDocFunctionType(node) {
925
+ return this.visitUnknown(node);
926
+ }
927
+ visitJSDocVariadicType(node) {
928
+ return this.visitUnknown(node);
929
+ }
930
+ visitJSDocNamepathType(node) {
931
+ return this.visitUnknown(node);
932
+ }
933
+ visitJSDoc(node) {
934
+ return this.visitUnknown(node);
935
+ }
936
+ visitJSDocType(node) {
937
+ return this.visitUnknown(node);
938
+ }
939
+ visitJSDocText(node) {
940
+ return this.visitUnknown(node);
941
+ }
942
+ visitJSDocTypeLiteral(node) {
943
+ return this.visitUnknown(node);
944
+ }
945
+ visitJSDocSignature(node) {
946
+ return this.visitUnknown(node);
947
+ }
948
+ visitJSDocLink(node) {
949
+ return this.visitUnknown(node);
950
+ }
951
+ visitJSDocLinkCode(node) {
952
+ return this.visitUnknown(node);
953
+ }
954
+ visitJSDocLinkPlain(node) {
955
+ return this.visitUnknown(node);
956
+ }
957
+ visitJSDocTag(node) {
958
+ return this.visitUnknown(node);
959
+ }
960
+ visitJSDocAugmentsTag(node) {
961
+ return this.visitUnknown(node);
962
+ }
963
+ visitJSDocImplementsTag(node) {
964
+ return this.visitUnknown(node);
965
+ }
966
+ visitJSDocAuthorTag(node) {
967
+ return this.visitUnknown(node);
968
+ }
969
+ visitJSDocDeprecatedTag(node) {
970
+ return this.visitUnknown(node);
971
+ }
972
+ visitJSDocClassTag(node) {
973
+ return this.visitUnknown(node);
974
+ }
975
+ visitJSDocPublicTag(node) {
976
+ return this.visitUnknown(node);
977
+ }
978
+ visitJSDocPrivateTag(node) {
979
+ return this.visitUnknown(node);
980
+ }
981
+ visitJSDocProtectedTag(node) {
982
+ return this.visitUnknown(node);
983
+ }
984
+ visitJSDocReadonlyTag(node) {
985
+ return this.visitUnknown(node);
986
+ }
987
+ visitJSDocOverrideTag(node) {
988
+ return this.visitUnknown(node);
989
+ }
990
+ visitJSDocCallbackTag(node) {
991
+ return this.visitUnknown(node);
992
+ }
993
+ visitJSDocOverloadTag(node) {
994
+ return this.visitUnknown(node);
995
+ }
996
+ visitJSDocEnumTag(node) {
997
+ return this.visitUnknown(node);
998
+ }
999
+ visitJSDocParameterTag(node) {
1000
+ return this.visitUnknown(node);
1001
+ }
1002
+ visitJSDocReturnTag(node) {
1003
+ return this.visitUnknown(node);
1004
+ }
1005
+ visitJSDocThisTag(node) {
1006
+ return this.visitUnknown(node);
1007
+ }
1008
+ visitJSDocTypeTag(node) {
1009
+ return this.visitUnknown(node);
1010
+ }
1011
+ visitJSDocTemplateTag(node) {
1012
+ return this.visitUnknown(node);
1013
+ }
1014
+ visitJSDocTypedefTag(node) {
1015
+ return this.visitUnknown(node);
1016
+ }
1017
+ visitJSDocSeeTag(node) {
1018
+ return this.visitUnknown(node);
1019
+ }
1020
+ visitJSDocPropertyTag(node) {
1021
+ return this.visitUnknown(node);
1022
+ }
1023
+ visitJSDocThrowsTag(node) {
1024
+ return this.visitUnknown(node);
1025
+ }
1026
+ visitJSDocSatisfiesTag(node) {
1027
+ return this.visitUnknown(node);
1028
+ }
1029
+ visitJSDocImportTag(node) {
1030
+ return this.visitUnknown(node);
1031
+ }
1032
+ visitSyntaxList(node) {
1033
+ return this.visitUnknown(node);
1034
+ }
1035
+ visitNotEmittedStatement(node) {
1036
+ return this.visitUnknown(node);
1037
+ }
1038
+ visitPartiallyEmittedExpression(node) {
1039
+ return this.visitUnknown(node);
1040
+ }
1041
+ visitCommaListExpression(node) {
1042
+ return this.visitUnknown(node);
1043
+ }
1044
+ visitSyntheticReferenceExpression(node) {
1045
+ return this.visitUnknown(node);
1046
+ }
1047
+ prefix(node) {
1048
+ if (node.getFullStart() == node.getStart()) {
1049
+ return java_1.Space.EMPTY;
1050
+ }
1051
+ const nodeStart = node.getFullStart();
1052
+ const span = [nodeStart, node.getStart()];
1053
+ let idx = (0, parserUtils_1.binarySearch)(this._seenTriviaSpans, span, parserUtils_1.compareTextSpans);
1054
+ if (idx >= 0)
1055
+ return java_1.Space.EMPTY;
1056
+ idx = ~idx;
1057
+ if (idx > 0 && this._seenTriviaSpans[idx - 1][1] > span[0])
1058
+ return java_1.Space.EMPTY;
1059
+ this._seenTriviaSpans.splice(idx, 0, span);
1060
+ return prefixFromNode(node, this.sourceFile);
1061
+ }
1062
+ suffix(node) {
1063
+ return this.prefix((0, parserUtils_1.getNextSibling)(node));
1064
+ }
1065
+ mapType(node) {
1066
+ return this.typeMapping.type(node);
1067
+ }
1068
+ mapPrimitiveType(node) {
1069
+ return this.typeMapping.primitiveType(node);
1070
+ }
1071
+ mapVariableType(node) {
1072
+ return this.typeMapping.variableType(node);
1073
+ }
1074
+ mapMethodType(node) {
1075
+ return this.typeMapping.methodType(node);
1076
+ }
1077
+ mapArguments(nodes) {
1078
+ if (nodes.length === 0) {
1079
+ return java_1.JContainer.empty();
1080
+ }
1081
+ const prefix = this.prefix(nodes[0]);
1082
+ let argList = nodes[1];
1083
+ let childCount = argList.getChildCount();
1084
+ const args = [];
1085
+ if (childCount === 0) {
1086
+ args.push(this.rightPadded(new J.Empty((0, core_1.randomId)(), java_1.Space.EMPTY, core_1.Markers.EMPTY), this.prefix(nodes[2]), core_1.Markers.EMPTY));
1087
+ }
1088
+ else {
1089
+ for (let i = 0; i < childCount - 1; i += 2) {
1090
+ const last = i === childCount - 2;
1091
+ args.push(this.rightPadded(this.convert(argList.getChildAt(i)), this.prefix(argList.getChildAt(i + 1)), last ? core_1.Markers.build([new java_1.TrailingComma((0, core_1.randomId)(), this.prefix(nodes[2]))]) : core_1.Markers.EMPTY));
1092
+ }
1093
+ if ((childCount & 1) === 1) {
1094
+ args.push(this.rightPadded(this.convert(argList.getChildAt(childCount - 1)), this.prefix(nodes[2])));
1095
+ }
1096
+ }
1097
+ return new java_1.JContainer(prefix, args, core_1.Markers.EMPTY);
1098
+ }
1099
+ mapDecorators(node) {
1100
+ return [];
1101
+ }
1102
+ mapTypeParameters(node) {
1103
+ return null;
1104
+ }
1105
+ convertBlock(nodes) {
1106
+ const prefix = this.prefix(nodes[0]);
1107
+ let statementList = nodes[1];
1108
+ const statements = this.rightPaddedSeparatedList([...statementList.getChildren()], ts.SyntaxKind.SemicolonToken, (nodes, i) => { var _a; return ((_a = nodes[i].getLastToken()) === null || _a === void 0 ? void 0 : _a.kind) == ts.SyntaxKind.SemicolonToken ? core_1.Markers.build([new java_1.Semicolon((0, core_1.randomId)())]) : core_1.Markers.EMPTY; });
1109
+ return new J.Block((0, core_1.randomId)(), prefix, core_1.Markers.EMPTY, this.rightPadded(false, java_1.Space.EMPTY), statements, this.prefix(nodes[nodes.length - 1]));
1110
+ }
1111
+ }
1112
+ exports.JavaScriptParserVisitor = JavaScriptParserVisitor;
1113
+ function prefixFromNode(node, sourceFile) {
1114
+ const comments = [];
1115
+ const text = sourceFile.getFullText();
1116
+ const nodeStart = node.getFullStart();
1117
+ let leadingWhitespacePos = node.getStart();
1118
+ ts.forEachLeadingCommentRange(text, nodeStart, (pos, end, kind) => {
1119
+ leadingWhitespacePos = Math.min(leadingWhitespacePos, pos);
1120
+ const isMultiline = kind === ts.SyntaxKind.MultiLineCommentTrivia;
1121
+ const commentStart = isMultiline ? pos + 2 : pos + 2;
1122
+ const commentEnd = isMultiline ? end - 2 : end;
1123
+ let suffixEnd = end;
1124
+ while (suffixEnd < text.length && (text[suffixEnd] === ' ' || text[suffixEnd] === '\t' || text[suffixEnd] === '\n' || text[suffixEnd] === '\r')) {
1125
+ suffixEnd++;
1126
+ }
1127
+ const commentBody = text.slice(commentStart, commentEnd);
1128
+ const suffix = text.slice(end, suffixEnd);
1129
+ comments.push(new J.TextComment(isMultiline, commentBody, suffix, core_1.Markers.EMPTY));
1130
+ });
1131
+ let whitespace = '';
1132
+ if (leadingWhitespacePos > nodeStart) {
1133
+ whitespace = text.slice(nodeStart, leadingWhitespacePos);
1134
+ }
1135
+ return new java_1.Space(comments, whitespace.length > 0 ? whitespace : null);
1136
+ }
1137
+ //# sourceMappingURL=parser.js.map