@xlr-lib/xlr-converters 0.1.1-next.4 → 0.1.1-next.6
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.
- package/dist/cjs/index.cjs +458 -142
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/index.legacy-esm.js +419 -118
- package/dist/index.mjs +419 -118
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -6
- package/src/__tests__/__snapshots__/annotations.test.ts.snap +22 -0
- package/src/__tests__/__snapshots__/export-to-ts.test.ts.snap +30 -0
- package/src/__tests__/annotations.test.ts +40 -0
- package/src/__tests__/documentation.test.ts +116 -0
- package/src/__tests__/export-to-ts.test.ts +68 -0
- package/src/__tests__/ts-utils.test.ts +383 -0
- package/src/index.ts +1 -1
- package/src/ts/annotations.ts +237 -0
- package/src/ts/documentation.ts +243 -0
- package/src/ts/ts-to-xlr.ts +11 -9
- package/src/ts/ts-utils.ts +247 -0
- package/src/ts/xlr-to-ts.ts +76 -1
- package/types/index.d.ts +1 -1
- package/types/ts/annotations.d.ts +7 -0
- package/types/ts/documentation.d.ts +14 -0
- package/types/ts/ts-to-xlr.d.ts +1 -1
- package/types/ts/ts-utils.d.ts +68 -0
- package/types/ts/xlr-to-ts.d.ts +10 -1
package/dist/cjs/index.cjs
CHANGED
|
@@ -34,12 +34,269 @@ __export(src_exports, {
|
|
|
34
34
|
TSWriter: () => TSWriter,
|
|
35
35
|
TsConverter: () => TsConverter,
|
|
36
36
|
converter: () => converter,
|
|
37
|
+
exportTypesToTypeScript: () => exportTypesToTypeScript,
|
|
37
38
|
writeManifest: () => writeManifest
|
|
38
39
|
});
|
|
39
40
|
module.exports = __toCommonJS(src_exports);
|
|
40
41
|
|
|
41
42
|
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts/ts-to-xlr.ts
|
|
43
|
+
var import_typescript3 = __toESM(require("typescript"));
|
|
44
|
+
|
|
45
|
+
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts/ts-utils.ts
|
|
42
46
|
var import_typescript = __toESM(require("typescript"));
|
|
47
|
+
function isOptionalProperty(node) {
|
|
48
|
+
return node.questionToken?.kind === import_typescript.default.SyntaxKind.QuestionToken;
|
|
49
|
+
}
|
|
50
|
+
function isGenericInterfaceDeclaration(node) {
|
|
51
|
+
const length = node.typeParameters?.length;
|
|
52
|
+
return length ? length > 0 : false;
|
|
53
|
+
}
|
|
54
|
+
function isGenericTypeDeclaration(node) {
|
|
55
|
+
const length = node.typeParameters?.length;
|
|
56
|
+
return length ? length > 0 : false;
|
|
57
|
+
}
|
|
58
|
+
function isTypeReferenceGeneric(node, typeChecker) {
|
|
59
|
+
const symbol = typeChecker.getSymbolAtLocation(node.typeName);
|
|
60
|
+
if (symbol && symbol.declarations) {
|
|
61
|
+
return symbol.declarations[0].kind === import_typescript.default.SyntaxKind.TypeParameter;
|
|
62
|
+
}
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
function isTopLevelDeclaration(node) {
|
|
66
|
+
return node.kind === import_typescript.default.SyntaxKind.InterfaceDeclaration || node.kind === import_typescript.default.SyntaxKind.TypeAliasDeclaration;
|
|
67
|
+
}
|
|
68
|
+
function isTopLevelNode(node) {
|
|
69
|
+
return node.kind === import_typescript.default.SyntaxKind.InterfaceDeclaration || node.kind === import_typescript.default.SyntaxKind.TypeAliasDeclaration || node.kind === import_typescript.default.SyntaxKind.VariableStatement;
|
|
70
|
+
}
|
|
71
|
+
function tsStripOptionalType(node) {
|
|
72
|
+
return import_typescript.default.isOptionalTypeNode(node) ? node.type : node;
|
|
73
|
+
}
|
|
74
|
+
function isExportedDeclaration(node) {
|
|
75
|
+
const modifiers = import_typescript.default.canHaveModifiers(node) ? import_typescript.default.getModifiers(node) : void 0;
|
|
76
|
+
if (modifiers) {
|
|
77
|
+
return modifiers.some((m) => m.kind === import_typescript.default.SyntaxKind.ExportKeyword);
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
function isNodeExported(node) {
|
|
82
|
+
return (import_typescript.default.getCombinedModifierFlags(node) & import_typescript.default.ModifierFlags.Export) !== 0 || !!node.parent && node.parent.kind === import_typescript.default.SyntaxKind.SourceFile;
|
|
83
|
+
}
|
|
84
|
+
function getReferencedType(node, typeChecker) {
|
|
85
|
+
let symbol = typeChecker.getSymbolAtLocation(node.typeName);
|
|
86
|
+
if (symbol && (symbol.flags & import_typescript.default.SymbolFlags.Alias) === import_typescript.default.SymbolFlags.Alias) {
|
|
87
|
+
symbol = typeChecker.getAliasedSymbol(symbol);
|
|
88
|
+
}
|
|
89
|
+
const varDecl = symbol?.declarations?.[0];
|
|
90
|
+
if (varDecl && (import_typescript.default.isInterfaceDeclaration(varDecl) || import_typescript.default.isTypeAliasDeclaration(varDecl))) {
|
|
91
|
+
return { declaration: varDecl, exported: isNodeExported(varDecl) };
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function isTypeScriptLibType(node, typeChecker) {
|
|
95
|
+
let symbol = typeChecker.getSymbolAtLocation(node.typeName);
|
|
96
|
+
if (!symbol) return false;
|
|
97
|
+
if ((symbol.flags & import_typescript.default.SymbolFlags.Alias) === import_typescript.default.SymbolFlags.Alias) {
|
|
98
|
+
symbol = typeChecker.getAliasedSymbol(symbol);
|
|
99
|
+
}
|
|
100
|
+
const declarations = symbol.getDeclarations();
|
|
101
|
+
if (!declarations || declarations.length === 0) return false;
|
|
102
|
+
return declarations.some((decl) => {
|
|
103
|
+
const sourceFile = decl.getSourceFile();
|
|
104
|
+
if (!sourceFile) return false;
|
|
105
|
+
const filePath = sourceFile.fileName;
|
|
106
|
+
return filePath.includes("/typescript/lib/") || filePath.includes("\\typescript\\lib\\") || filePath.endsWith(".d.ts") && filePath.includes("lib.");
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function getStringLiteralsFromUnion(node) {
|
|
110
|
+
if (import_typescript.default.isUnionTypeNode(node)) {
|
|
111
|
+
return new Set(
|
|
112
|
+
node.types.map((type) => {
|
|
113
|
+
if (import_typescript.default.isLiteralTypeNode(type) && import_typescript.default.isStringLiteral(type.literal)) {
|
|
114
|
+
return type.literal.text;
|
|
115
|
+
}
|
|
116
|
+
return "";
|
|
117
|
+
})
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
if (import_typescript.default.isLiteralTypeNode(node) && import_typescript.default.isStringLiteral(node.literal)) {
|
|
121
|
+
return /* @__PURE__ */ new Set([node.literal.text]);
|
|
122
|
+
}
|
|
123
|
+
return /* @__PURE__ */ new Set();
|
|
124
|
+
}
|
|
125
|
+
function buildTemplateRegex(node, typeChecker) {
|
|
126
|
+
let regex = node.head.text;
|
|
127
|
+
node.templateSpans.forEach((span) => {
|
|
128
|
+
let type = span.type.kind;
|
|
129
|
+
if (import_typescript.default.isTypeReferenceNode(span.type)) {
|
|
130
|
+
let symbol = typeChecker.getSymbolAtLocation(
|
|
131
|
+
span.type.typeName
|
|
132
|
+
);
|
|
133
|
+
if (symbol && (symbol.flags & import_typescript.default.SymbolFlags.Alias) === import_typescript.default.SymbolFlags.Alias) {
|
|
134
|
+
symbol = typeChecker.getAliasedSymbol(symbol);
|
|
135
|
+
}
|
|
136
|
+
type = (symbol?.declarations?.[0]).type.kind;
|
|
137
|
+
}
|
|
138
|
+
if (type === import_typescript.default.SyntaxKind.StringKeyword) {
|
|
139
|
+
regex += ".*";
|
|
140
|
+
} else if (type === import_typescript.default.SyntaxKind.NumberKeyword) {
|
|
141
|
+
regex += "[0-9]*";
|
|
142
|
+
} else if (type === import_typescript.default.SyntaxKind.BooleanKeyword) {
|
|
143
|
+
regex += "true|false";
|
|
144
|
+
}
|
|
145
|
+
regex += span.literal.text;
|
|
146
|
+
});
|
|
147
|
+
return regex;
|
|
148
|
+
}
|
|
149
|
+
function isExportedModuleDeclaration(node) {
|
|
150
|
+
return isExportedDeclaration(node) && import_typescript.default.isModuleDeclaration(node);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts/annotations.ts
|
|
154
|
+
var import_typescript2 = __toESM(require("typescript"));
|
|
155
|
+
function extractDescription(text) {
|
|
156
|
+
if (!text) {
|
|
157
|
+
return {};
|
|
158
|
+
}
|
|
159
|
+
return { description: text };
|
|
160
|
+
}
|
|
161
|
+
function parentIsNonObjectPath(node) {
|
|
162
|
+
return node.parent && (import_typescript2.default.isArrayTypeNode(node.parent) || import_typescript2.default.isTupleTypeNode(node.parent) || import_typescript2.default.isOptionalTypeNode(node.parent) || import_typescript2.default.isRestTypeNode(node.parent) || import_typescript2.default.isUnionTypeNode(node.parent));
|
|
163
|
+
}
|
|
164
|
+
function recurseTypeChain(node, child) {
|
|
165
|
+
if (!node) {
|
|
166
|
+
return [];
|
|
167
|
+
}
|
|
168
|
+
if (import_typescript2.default.isArrayTypeNode(node) && node.parent && import_typescript2.default.isRestTypeNode(node.parent)) {
|
|
169
|
+
return recurseTypeChain(node.parent, node);
|
|
170
|
+
}
|
|
171
|
+
if (import_typescript2.default.isRestTypeNode(node)) {
|
|
172
|
+
return recurseTypeChain(node.parent, node);
|
|
173
|
+
}
|
|
174
|
+
if (import_typescript2.default.isOptionalTypeNode(node)) {
|
|
175
|
+
return recurseTypeChain(node.parent, node);
|
|
176
|
+
}
|
|
177
|
+
if (import_typescript2.default.isUnionTypeNode(node)) {
|
|
178
|
+
return recurseTypeChain(node.parent, node);
|
|
179
|
+
}
|
|
180
|
+
if (import_typescript2.default.isParenthesizedTypeNode(node)) {
|
|
181
|
+
return recurseTypeChain(node.parent, node);
|
|
182
|
+
}
|
|
183
|
+
if (import_typescript2.default.isTypeLiteralNode(node)) {
|
|
184
|
+
return recurseTypeChain(node.parent, node);
|
|
185
|
+
}
|
|
186
|
+
if (import_typescript2.default.isArrayTypeNode(node)) {
|
|
187
|
+
return ["[]", ...recurseTypeChain(node.parent, node)];
|
|
188
|
+
}
|
|
189
|
+
if (import_typescript2.default.isTupleTypeNode(node)) {
|
|
190
|
+
const pos = node.elements.indexOf(child);
|
|
191
|
+
return [
|
|
192
|
+
...pos === -1 ? [] : [`${pos}`],
|
|
193
|
+
...recurseTypeChain(node.parent, node)
|
|
194
|
+
];
|
|
195
|
+
}
|
|
196
|
+
if (import_typescript2.default.isTypeAliasDeclaration(node) || import_typescript2.default.isInterfaceDeclaration(node) || import_typescript2.default.isPropertySignature(node)) {
|
|
197
|
+
return [node.name.getText(), ...recurseTypeChain(node.parent, node)];
|
|
198
|
+
}
|
|
199
|
+
if (parentIsNonObjectPath(node)) {
|
|
200
|
+
return recurseTypeChain(node.parent, node);
|
|
201
|
+
}
|
|
202
|
+
return [];
|
|
203
|
+
}
|
|
204
|
+
function extractTitle(node) {
|
|
205
|
+
const typeNames = recurseTypeChain(node, void 0).reverse().join(".");
|
|
206
|
+
if (!typeNames.length) {
|
|
207
|
+
return {};
|
|
208
|
+
}
|
|
209
|
+
return { title: typeNames };
|
|
210
|
+
}
|
|
211
|
+
function stringifyDoc(docString) {
|
|
212
|
+
if (typeof docString === "undefined" || typeof docString === "string") {
|
|
213
|
+
return docString;
|
|
214
|
+
}
|
|
215
|
+
return docString.map(({ text }) => text).join(" ");
|
|
216
|
+
}
|
|
217
|
+
function extractTags(tags) {
|
|
218
|
+
const descriptions = [];
|
|
219
|
+
const examples = [];
|
|
220
|
+
const _default = [];
|
|
221
|
+
const see = [];
|
|
222
|
+
const meta = {};
|
|
223
|
+
const extractSee = (tag) => {
|
|
224
|
+
return `${tag.tagName ? `${tag.tagName?.getText()} ` : ""}${stringifyDoc(tag.comment)?.trim() ?? ""}`;
|
|
225
|
+
};
|
|
226
|
+
tags.forEach((tag) => {
|
|
227
|
+
if (!tag.comment) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
if (tag.tagName.text === "example") {
|
|
231
|
+
examples.push(stringifyDoc(tag.comment)?.trim() ?? "");
|
|
232
|
+
} else if (tag.tagName.text === "default") {
|
|
233
|
+
_default.push(stringifyDoc(tag.comment)?.trim() ?? "");
|
|
234
|
+
} else if (tag.tagName.text === "see") {
|
|
235
|
+
see.push(extractSee(tag));
|
|
236
|
+
} else if (tag.tagName.text === "meta") {
|
|
237
|
+
const [key, value] = tag.comment.toString().split(/:(.*)/);
|
|
238
|
+
meta[key] = value?.trim() ?? "";
|
|
239
|
+
} else {
|
|
240
|
+
const text = stringifyDoc(tag.comment)?.trim() ?? "";
|
|
241
|
+
descriptions.push(`@${tag.tagName.text} ${text}`);
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
return {
|
|
245
|
+
...descriptions.length === 0 ? {} : { description: descriptions.join("\n") },
|
|
246
|
+
...examples.length === 0 ? {} : { examples },
|
|
247
|
+
..._default.length === 0 ? {} : { default: _default.join("\n") },
|
|
248
|
+
...see.length === 0 ? {} : { see },
|
|
249
|
+
...meta && Object.keys(meta).length === 0 ? {} : { meta }
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
function join(t, separator = "\n") {
|
|
253
|
+
const unique = new Set(t).values();
|
|
254
|
+
return Array.from(unique).filter((s) => s !== void 0).join(separator).trim();
|
|
255
|
+
}
|
|
256
|
+
function mergeAnnotations(nodes) {
|
|
257
|
+
const name = nodes.find((n) => n.name)?.name;
|
|
258
|
+
const title = join(
|
|
259
|
+
nodes.map((n) => n.title),
|
|
260
|
+
", "
|
|
261
|
+
);
|
|
262
|
+
const description = join(nodes.map((n) => n.description));
|
|
263
|
+
const _default = join(nodes.map((n) => n.default));
|
|
264
|
+
const comment = join(nodes.map((n) => n.comment));
|
|
265
|
+
const examples = join(
|
|
266
|
+
nodes.map(
|
|
267
|
+
(n) => Array.isArray(n.examples) ? join(n.examples) : n.examples
|
|
268
|
+
)
|
|
269
|
+
);
|
|
270
|
+
const see = join(
|
|
271
|
+
nodes.map((n) => Array.isArray(n.see) ? join(n.see) : n.see)
|
|
272
|
+
);
|
|
273
|
+
const meta = nodes.find((n) => n.meta)?.meta;
|
|
274
|
+
return {
|
|
275
|
+
...name ? { name } : {},
|
|
276
|
+
...title ? { title } : {},
|
|
277
|
+
...description ? { description } : {},
|
|
278
|
+
...examples ? { examples } : {},
|
|
279
|
+
..._default ? { default: _default } : {},
|
|
280
|
+
...see ? { see } : {},
|
|
281
|
+
...comment ? { comment } : {},
|
|
282
|
+
...meta ? { meta } : {}
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
function decorateNode(node) {
|
|
286
|
+
const { jsDoc } = node;
|
|
287
|
+
const titleAnnotation = extractTitle(node);
|
|
288
|
+
if (jsDoc && jsDoc.length) {
|
|
289
|
+
const first = jsDoc[0];
|
|
290
|
+
return mergeAnnotations([
|
|
291
|
+
extractDescription(stringifyDoc(first.comment)),
|
|
292
|
+
titleAnnotation,
|
|
293
|
+
extractTags(first.tags ?? [])
|
|
294
|
+
]);
|
|
295
|
+
}
|
|
296
|
+
return titleAnnotation;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts/ts-to-xlr.ts
|
|
43
300
|
var import_xlr_utils = require("@xlr-lib/xlr-utils");
|
|
44
301
|
|
|
45
302
|
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/types.ts
|
|
@@ -58,7 +315,7 @@ function isMappedTypeNode(x) {
|
|
|
58
315
|
return ["Pick", "Omit", "Required", "Partial", "Exclude"].includes(x);
|
|
59
316
|
}
|
|
60
317
|
function getPropertyNameText(name) {
|
|
61
|
-
if (
|
|
318
|
+
if (import_typescript3.default.isIdentifier(name) || import_typescript3.default.isStringLiteral(name) || import_typescript3.default.isNumericLiteral(name)) {
|
|
62
319
|
return name.text;
|
|
63
320
|
}
|
|
64
321
|
return name.getText();
|
|
@@ -83,11 +340,11 @@ var TsConverter = class {
|
|
|
83
340
|
}
|
|
84
341
|
/** Converts all exported objects to a XLR representation */
|
|
85
342
|
convertSourceFile(sourceFile) {
|
|
86
|
-
const declarations = sourceFile.statements.filter(
|
|
87
|
-
const namespacedTypes = sourceFile.statements.filter((s) =>
|
|
88
|
-
if (module2.body &&
|
|
343
|
+
const declarations = sourceFile.statements.filter(isTopLevelNode);
|
|
344
|
+
const namespacedTypes = sourceFile.statements.filter((s) => isExportedModuleDeclaration(s)).flatMap((module2) => {
|
|
345
|
+
if (module2.body && import_typescript3.default.isModuleBlock(module2.body)) {
|
|
89
346
|
const nameSpaceName = module2.name.text;
|
|
90
|
-
return module2.body.statements.filter(
|
|
347
|
+
return module2.body.statements.filter(isExportedDeclaration).filter(isTopLevelNode).map((statement) => {
|
|
91
348
|
const convertedNode = this.convertTopLevelNode(statement);
|
|
92
349
|
return {
|
|
93
350
|
...convertedNode,
|
|
@@ -97,7 +354,7 @@ var TsConverter = class {
|
|
|
97
354
|
}
|
|
98
355
|
return [];
|
|
99
356
|
});
|
|
100
|
-
const types = declarations.filter((declaration) =>
|
|
357
|
+
const types = declarations.filter((declaration) => isExportedDeclaration(declaration)).map((statement) => this.convertTopLevelNode(statement)).filter((v) => !!v);
|
|
101
358
|
types.push(...namespacedTypes);
|
|
102
359
|
return {
|
|
103
360
|
data: { version: 1, types },
|
|
@@ -107,7 +364,7 @@ var TsConverter = class {
|
|
|
107
364
|
convertTopLevelNode(node) {
|
|
108
365
|
const sourceFile = node.parent;
|
|
109
366
|
const { fileName } = sourceFile;
|
|
110
|
-
if (
|
|
367
|
+
if (import_typescript3.default.isVariableStatement(node)) {
|
|
111
368
|
return {
|
|
112
369
|
source: fileName,
|
|
113
370
|
...this.convertVariable(node)
|
|
@@ -120,28 +377,28 @@ var TsConverter = class {
|
|
|
120
377
|
}
|
|
121
378
|
/** Converts a single type/interface declaration to XLRs */
|
|
122
379
|
convertDeclaration(node) {
|
|
123
|
-
if (
|
|
380
|
+
if (import_typescript3.default.isTypeAliasDeclaration(node)) {
|
|
124
381
|
let genericTokens;
|
|
125
|
-
if (
|
|
382
|
+
if (isGenericTypeDeclaration(node)) {
|
|
126
383
|
genericTokens = this.generateGenerics(node.typeParameters);
|
|
127
384
|
}
|
|
128
385
|
return {
|
|
129
386
|
name: node.name.getText(),
|
|
130
387
|
...this.convertTsTypeNode(node.type) ?? AnyTypeNode,
|
|
131
|
-
...
|
|
388
|
+
...decorateNode(node),
|
|
132
389
|
genericTokens
|
|
133
390
|
};
|
|
134
391
|
}
|
|
135
|
-
if (
|
|
392
|
+
if (import_typescript3.default.isInterfaceDeclaration(node)) {
|
|
136
393
|
let genericTokens;
|
|
137
|
-
if (
|
|
394
|
+
if (isGenericInterfaceDeclaration(node)) {
|
|
138
395
|
genericTokens = this.generateGenerics(node.typeParameters);
|
|
139
396
|
}
|
|
140
397
|
const baseObject = {
|
|
141
398
|
name: node.name.getText(),
|
|
142
399
|
type: "object",
|
|
143
400
|
...this.tsObjectMembersToProperties(node),
|
|
144
|
-
...
|
|
401
|
+
...decorateNode(node),
|
|
145
402
|
genericTokens
|
|
146
403
|
};
|
|
147
404
|
if (node.heritageClauses) {
|
|
@@ -163,9 +420,9 @@ var TsConverter = class {
|
|
|
163
420
|
const variable = variableDeclarations[0];
|
|
164
421
|
if (variable.initializer) {
|
|
165
422
|
let resultingNode;
|
|
166
|
-
if (variable.type &&
|
|
423
|
+
if (variable.type && import_typescript3.default.isTypeReferenceNode(variable.type) && import_typescript3.default.isIdentifier(variable.type.typeName) && this.context.customPrimitives.includes(variable.type.typeName.text)) {
|
|
167
424
|
resultingNode = this.makeBasicRefNode(variable.type);
|
|
168
|
-
} else if (
|
|
425
|
+
} else if (import_typescript3.default.isCallExpression(variable.initializer) || import_typescript3.default.isArrowFunction(variable.initializer)) {
|
|
169
426
|
resultingNode = this.resolveFunctionCall(
|
|
170
427
|
variable.initializer,
|
|
171
428
|
node.parent
|
|
@@ -200,80 +457,80 @@ var TsConverter = class {
|
|
|
200
457
|
}
|
|
201
458
|
/** Should not be called directly unless you want to bypass the cache, use `convertTsTypeNode` */
|
|
202
459
|
tsNodeToType(node) {
|
|
203
|
-
if (
|
|
460
|
+
if (import_typescript3.default.isUnionTypeNode(node)) {
|
|
204
461
|
return {
|
|
205
462
|
type: "or",
|
|
206
463
|
or: node.types.map((child) => this.convertTsTypeNode(child)).filter(import_xlr_utils.isNonNullable),
|
|
207
|
-
...
|
|
464
|
+
...decorateNode(node)
|
|
208
465
|
};
|
|
209
466
|
}
|
|
210
|
-
if (
|
|
467
|
+
if (import_typescript3.default.isIntersectionTypeNode(node)) {
|
|
211
468
|
return {
|
|
212
469
|
type: "and",
|
|
213
470
|
and: node.types.map((child) => this.convertTsTypeNode(child)).filter(import_xlr_utils.isNonNullable),
|
|
214
|
-
...
|
|
471
|
+
...decorateNode(node)
|
|
215
472
|
};
|
|
216
473
|
}
|
|
217
|
-
if (
|
|
474
|
+
if (import_typescript3.default.isParenthesizedTypeNode(node)) {
|
|
218
475
|
const children = [];
|
|
219
476
|
node.forEachChild((child) => {
|
|
220
477
|
children.push(child);
|
|
221
478
|
});
|
|
222
|
-
if (children[0]?.kind ===
|
|
479
|
+
if (children[0]?.kind === import_typescript3.default.SyntaxKind.OpenParenToken) {
|
|
223
480
|
children.shift();
|
|
224
481
|
}
|
|
225
|
-
if (children[children.length - 1]?.kind ===
|
|
482
|
+
if (children[children.length - 1]?.kind === import_typescript3.default.SyntaxKind.CloseParenToken) {
|
|
226
483
|
children.pop();
|
|
227
484
|
}
|
|
228
485
|
const element = children[0];
|
|
229
|
-
if (children.length !== 1 || !
|
|
486
|
+
if (children.length !== 1 || !import_typescript3.default.isTypeNode(element)) {
|
|
230
487
|
this.context.throwError(
|
|
231
|
-
`Parenthesis type not understood. Length ${children.length}, Is Type Node: ${
|
|
488
|
+
`Parenthesis type not understood. Length ${children.length}, Is Type Node: ${import_typescript3.default.SyntaxKind[element.kind]}`
|
|
232
489
|
);
|
|
233
490
|
}
|
|
234
491
|
return this.convertTsTypeNode(element);
|
|
235
492
|
}
|
|
236
|
-
if (node.kind ===
|
|
237
|
-
return { type: "any", ...
|
|
493
|
+
if (node.kind === import_typescript3.default.SyntaxKind.AnyKeyword) {
|
|
494
|
+
return { type: "any", ...decorateNode(node) };
|
|
238
495
|
}
|
|
239
|
-
if (node.kind ===
|
|
240
|
-
return { type: "unknown", ...
|
|
496
|
+
if (node.kind === import_typescript3.default.SyntaxKind.UnknownKeyword) {
|
|
497
|
+
return { type: "unknown", ...decorateNode(node) };
|
|
241
498
|
}
|
|
242
|
-
if (node.kind ===
|
|
243
|
-
return { type: "string", ...
|
|
499
|
+
if (node.kind === import_typescript3.default.SyntaxKind.StringKeyword) {
|
|
500
|
+
return { type: "string", ...decorateNode(node) };
|
|
244
501
|
}
|
|
245
|
-
if (node.kind ===
|
|
246
|
-
return { type: "number", ...
|
|
502
|
+
if (node.kind === import_typescript3.default.SyntaxKind.NumberKeyword) {
|
|
503
|
+
return { type: "number", ...decorateNode(node) };
|
|
247
504
|
}
|
|
248
|
-
if (node.kind ===
|
|
249
|
-
return { type: "boolean", ...
|
|
505
|
+
if (node.kind === import_typescript3.default.SyntaxKind.BooleanKeyword) {
|
|
506
|
+
return { type: "boolean", ...decorateNode(node) };
|
|
250
507
|
}
|
|
251
|
-
if (node.kind ===
|
|
252
|
-
return { type: "undefined", ...
|
|
508
|
+
if (node.kind === import_typescript3.default.SyntaxKind.UndefinedKeyword) {
|
|
509
|
+
return { type: "undefined", ...decorateNode(node) };
|
|
253
510
|
}
|
|
254
|
-
if (node.kind ===
|
|
255
|
-
return { type: "never", ...
|
|
511
|
+
if (node.kind === import_typescript3.default.SyntaxKind.NeverKeyword) {
|
|
512
|
+
return { type: "never", ...decorateNode(node) };
|
|
256
513
|
}
|
|
257
|
-
if (node.kind ===
|
|
514
|
+
if (node.kind === import_typescript3.default.SyntaxKind.ObjectKeyword) {
|
|
258
515
|
return {
|
|
259
516
|
type: "object",
|
|
260
517
|
properties: {},
|
|
261
518
|
additionalProperties: AnyTypeNode,
|
|
262
|
-
...
|
|
519
|
+
...decorateNode(node)
|
|
263
520
|
};
|
|
264
521
|
}
|
|
265
|
-
if (node.kind ===
|
|
522
|
+
if (node.kind === import_typescript3.default.SyntaxKind.VoidKeyword) {
|
|
266
523
|
return {
|
|
267
524
|
type: "void",
|
|
268
|
-
...
|
|
525
|
+
...decorateNode(node)
|
|
269
526
|
};
|
|
270
527
|
}
|
|
271
|
-
if (
|
|
528
|
+
if (import_typescript3.default.isTemplateLiteralTypeNode(node)) {
|
|
272
529
|
let format;
|
|
273
530
|
if (this.context.cache.convertedTemplates.has(node)) {
|
|
274
531
|
format = this.context.cache.convertedTemplates.get(node);
|
|
275
532
|
} else {
|
|
276
|
-
format =
|
|
533
|
+
format = buildTemplateRegex(node, this.context.typeChecker);
|
|
277
534
|
this.context.cache.convertedTemplates.set(node, format);
|
|
278
535
|
}
|
|
279
536
|
return {
|
|
@@ -281,14 +538,14 @@ var TsConverter = class {
|
|
|
281
538
|
format
|
|
282
539
|
};
|
|
283
540
|
}
|
|
284
|
-
if (
|
|
541
|
+
if (import_typescript3.default.isArrayTypeNode(node)) {
|
|
285
542
|
return {
|
|
286
543
|
type: "array",
|
|
287
544
|
elementType: this.convertTsTypeNode(node.elementType) ?? AnyTypeNode,
|
|
288
|
-
...
|
|
545
|
+
...decorateNode(node)
|
|
289
546
|
};
|
|
290
547
|
}
|
|
291
|
-
if (
|
|
548
|
+
if (import_typescript3.default.isConditionalTypeNode(node)) {
|
|
292
549
|
const xlrNode = {
|
|
293
550
|
type: "conditional",
|
|
294
551
|
check: {
|
|
@@ -306,27 +563,27 @@ var TsConverter = class {
|
|
|
306
563
|
return xlrNode;
|
|
307
564
|
}
|
|
308
565
|
}
|
|
309
|
-
if (
|
|
566
|
+
if (import_typescript3.default.isTypeReferenceNode(node)) {
|
|
310
567
|
return this.resolveRefNode(node);
|
|
311
568
|
}
|
|
312
|
-
if (
|
|
569
|
+
if (import_typescript3.default.isTupleTypeNode(node)) {
|
|
313
570
|
return {
|
|
314
571
|
type: "tuple",
|
|
315
572
|
...this.tsTupleToType(node),
|
|
316
|
-
...
|
|
573
|
+
...decorateNode(node)
|
|
317
574
|
};
|
|
318
575
|
}
|
|
319
|
-
if (
|
|
576
|
+
if (import_typescript3.default.isLiteralTypeNode(node)) {
|
|
320
577
|
return this.tsLiteralToType(node.literal);
|
|
321
578
|
}
|
|
322
|
-
if (
|
|
579
|
+
if (import_typescript3.default.isTypeLiteralNode(node)) {
|
|
323
580
|
return {
|
|
324
581
|
type: "object",
|
|
325
582
|
...this.tsObjectMembersToProperties(node),
|
|
326
|
-
...
|
|
583
|
+
...decorateNode(node)
|
|
327
584
|
};
|
|
328
585
|
}
|
|
329
|
-
if (
|
|
586
|
+
if (import_typescript3.default.isFunctionTypeNode(node) || import_typescript3.default.isFunctionDeclaration(node) || import_typescript3.default.isArrowFunction(node)) {
|
|
330
587
|
const parameters = node.parameters.map(
|
|
331
588
|
(param) => {
|
|
332
589
|
let typeNode;
|
|
@@ -351,11 +608,11 @@ var TsConverter = class {
|
|
|
351
608
|
type: "function",
|
|
352
609
|
parameters,
|
|
353
610
|
returnType,
|
|
354
|
-
...
|
|
611
|
+
...decorateNode(node)
|
|
355
612
|
};
|
|
356
613
|
}
|
|
357
|
-
if (
|
|
358
|
-
if (
|
|
614
|
+
if (import_typescript3.default.isIndexedAccessTypeNode(node)) {
|
|
615
|
+
if (import_typescript3.default.isTypeReferenceNode(node.objectType) && import_typescript3.default.isLiteralTypeNode(node.indexType)) {
|
|
359
616
|
const baseObject = this.convertTsTypeNode(node.objectType);
|
|
360
617
|
const accessor = node.indexType.literal.getText().replace(/["']/g, "");
|
|
361
618
|
if (!baseObject) {
|
|
@@ -378,10 +635,10 @@ var TsConverter = class {
|
|
|
378
635
|
}
|
|
379
636
|
}
|
|
380
637
|
let queryNode = node.objectType;
|
|
381
|
-
if (
|
|
638
|
+
if (import_typescript3.default.isParenthesizedTypeNode(node.objectType)) {
|
|
382
639
|
queryNode = node.objectType.type;
|
|
383
640
|
}
|
|
384
|
-
if (
|
|
641
|
+
if (import_typescript3.default.isTypeQueryNode(queryNode)) {
|
|
385
642
|
const elements = this.tsNodeToType(node.objectType);
|
|
386
643
|
return {
|
|
387
644
|
type: "or",
|
|
@@ -392,7 +649,7 @@ var TsConverter = class {
|
|
|
392
649
|
const syntheticType = this.context.typeChecker.typeToTypeNode(
|
|
393
650
|
effectiveType,
|
|
394
651
|
node,
|
|
395
|
-
|
|
652
|
+
import_typescript3.default.NodeBuilderFlags.NoTruncation
|
|
396
653
|
);
|
|
397
654
|
if (syntheticType) {
|
|
398
655
|
return this.tsNodeToType(syntheticType);
|
|
@@ -401,12 +658,12 @@ var TsConverter = class {
|
|
|
401
658
|
`Error: could not solve IndexedAccessType: ${node.getFullText()}`
|
|
402
659
|
);
|
|
403
660
|
}
|
|
404
|
-
if (
|
|
661
|
+
if (import_typescript3.default.isTypeQueryNode(node)) {
|
|
405
662
|
const effectiveType = this.context.typeChecker.getTypeAtLocation(node);
|
|
406
663
|
const syntheticType = this.context.typeChecker.typeToTypeNode(
|
|
407
664
|
effectiveType,
|
|
408
665
|
node,
|
|
409
|
-
|
|
666
|
+
import_typescript3.default.NodeBuilderFlags.NoTruncation
|
|
410
667
|
);
|
|
411
668
|
if (syntheticType) {
|
|
412
669
|
return this.tsNodeToType(syntheticType);
|
|
@@ -415,55 +672,55 @@ var TsConverter = class {
|
|
|
415
672
|
`Error: could not synthesize type for ${node.getText()}`
|
|
416
673
|
);
|
|
417
674
|
}
|
|
418
|
-
if (
|
|
675
|
+
if (import_typescript3.default.isTypeOperatorNode(node)) {
|
|
419
676
|
return this.tsNodeToType(node.type);
|
|
420
677
|
}
|
|
421
678
|
this.context.throwError(
|
|
422
|
-
`Unimplemented type ${
|
|
679
|
+
`Unimplemented type ${import_typescript3.default.SyntaxKind[node.kind]} at ${node.getText()}`
|
|
423
680
|
);
|
|
424
681
|
}
|
|
425
682
|
tsLiteralToType(node) {
|
|
426
|
-
if (
|
|
683
|
+
if (import_typescript3.default.isAsExpression(node)) {
|
|
427
684
|
return this.tsLiteralToType(node.expression);
|
|
428
685
|
}
|
|
429
|
-
if (
|
|
686
|
+
if (import_typescript3.default.isNumericLiteral(node)) {
|
|
430
687
|
return {
|
|
431
688
|
type: "number",
|
|
432
689
|
const: Number(node.text),
|
|
433
|
-
...
|
|
690
|
+
...decorateNode(node)
|
|
434
691
|
};
|
|
435
692
|
}
|
|
436
|
-
if (
|
|
693
|
+
if (import_typescript3.default.isStringLiteral(node)) {
|
|
437
694
|
return {
|
|
438
695
|
type: "string",
|
|
439
696
|
const: node.text,
|
|
440
|
-
...
|
|
697
|
+
...decorateNode(node)
|
|
441
698
|
};
|
|
442
699
|
}
|
|
443
|
-
if (node.kind ===
|
|
700
|
+
if (node.kind === import_typescript3.default.SyntaxKind.TrueKeyword) {
|
|
444
701
|
return {
|
|
445
702
|
type: "boolean",
|
|
446
703
|
const: true,
|
|
447
|
-
...
|
|
704
|
+
...decorateNode(node)
|
|
448
705
|
};
|
|
449
706
|
}
|
|
450
|
-
if (node.kind ===
|
|
707
|
+
if (node.kind === import_typescript3.default.SyntaxKind.FalseKeyword) {
|
|
451
708
|
return {
|
|
452
709
|
type: "boolean",
|
|
453
710
|
const: false,
|
|
454
|
-
...
|
|
711
|
+
...decorateNode(node)
|
|
455
712
|
};
|
|
456
713
|
}
|
|
457
|
-
if (node.kind ===
|
|
458
|
-
return { type: "null", ...
|
|
714
|
+
if (node.kind === import_typescript3.default.SyntaxKind.NullKeyword) {
|
|
715
|
+
return { type: "null", ...decorateNode(node) };
|
|
459
716
|
}
|
|
460
|
-
if (
|
|
717
|
+
if (import_typescript3.default.isPrefixUnaryExpression(node)) {
|
|
461
718
|
this.context.throwError("Prefix unary expressions not supported");
|
|
462
719
|
}
|
|
463
|
-
if (
|
|
720
|
+
if (import_typescript3.default.isArrayLiteralExpression(node)) {
|
|
464
721
|
const arrayElements = [];
|
|
465
722
|
node.elements.forEach((element) => {
|
|
466
|
-
if (
|
|
723
|
+
if (import_typescript3.default.isSpreadElement(element)) {
|
|
467
724
|
const arrayReference = this.resolveLiteralReference(
|
|
468
725
|
element.expression
|
|
469
726
|
);
|
|
@@ -478,20 +735,20 @@ var TsConverter = class {
|
|
|
478
735
|
const: arrayElements
|
|
479
736
|
};
|
|
480
737
|
}
|
|
481
|
-
if (
|
|
738
|
+
if (import_typescript3.default.isObjectLiteralExpression(node)) {
|
|
482
739
|
const ret = {
|
|
483
740
|
type: "object",
|
|
484
741
|
properties: {},
|
|
485
742
|
additionalProperties: false
|
|
486
743
|
};
|
|
487
744
|
node.properties.forEach((property) => {
|
|
488
|
-
if (
|
|
745
|
+
if (import_typescript3.default.isPropertyAssignment(property) && property.name) {
|
|
489
746
|
const propertyName = getPropertyNameText(property.name);
|
|
490
747
|
ret.properties[propertyName] = {
|
|
491
748
|
required: true,
|
|
492
749
|
node: this.tsLiteralToType(property.initializer)
|
|
493
750
|
};
|
|
494
|
-
} else if (
|
|
751
|
+
} else if (import_typescript3.default.isSpreadAssignment(property)) {
|
|
495
752
|
const spreadValue = this.resolveLiteralReference(
|
|
496
753
|
property.expression
|
|
497
754
|
);
|
|
@@ -503,22 +760,22 @@ var TsConverter = class {
|
|
|
503
760
|
});
|
|
504
761
|
return ret;
|
|
505
762
|
}
|
|
506
|
-
if (
|
|
763
|
+
if (import_typescript3.default.isIdentifier(node)) {
|
|
507
764
|
return this.resolveLiteralReference(node);
|
|
508
765
|
}
|
|
509
766
|
this.context.throwError(
|
|
510
|
-
`Literal type not understood ${
|
|
767
|
+
`Literal type not understood ${import_typescript3.default.SyntaxKind[node.kind]} at ${node.getText()}`
|
|
511
768
|
);
|
|
512
769
|
}
|
|
513
770
|
resolveLiteralReference(expression) {
|
|
514
|
-
if (
|
|
771
|
+
if (import_typescript3.default.isIdentifier(expression)) {
|
|
515
772
|
const symbol = this.context.typeChecker.getSymbolAtLocation(expression);
|
|
516
773
|
let expressionReference = symbol?.declarations?.[0];
|
|
517
|
-
if (symbol && expressionReference &&
|
|
774
|
+
if (symbol && expressionReference && import_typescript3.default.isImportSpecifier(expressionReference)) {
|
|
518
775
|
const referencedDeclaration = this.context.typeChecker.getAliasedSymbol(symbol);
|
|
519
776
|
expressionReference = referencedDeclaration.declarations?.[0];
|
|
520
777
|
}
|
|
521
|
-
if (expressionReference &&
|
|
778
|
+
if (expressionReference && import_typescript3.default.isVariableDeclaration(expressionReference) && expressionReference.initializer) {
|
|
522
779
|
return this.convertVariable(
|
|
523
780
|
expressionReference.parent.parent
|
|
524
781
|
);
|
|
@@ -532,7 +789,7 @@ var TsConverter = class {
|
|
|
532
789
|
);
|
|
533
790
|
}
|
|
534
791
|
resolveFunctionCall(functionCall, document) {
|
|
535
|
-
if (
|
|
792
|
+
if (import_typescript3.default.isArrowFunction(functionCall)) {
|
|
536
793
|
const declaredReturnType = functionCall.parent.type;
|
|
537
794
|
if (declaredReturnType) {
|
|
538
795
|
return this.tsNodeToType(declaredReturnType);
|
|
@@ -544,7 +801,7 @@ var TsConverter = class {
|
|
|
544
801
|
document,
|
|
545
802
|
void 0
|
|
546
803
|
);
|
|
547
|
-
if (
|
|
804
|
+
if (import_typescript3.default.isArrowFunction(functionCall)) {
|
|
548
805
|
const syntheticWithParameters = {
|
|
549
806
|
...syntheticNode,
|
|
550
807
|
parameters: functionCall.parameters
|
|
@@ -552,7 +809,7 @@ var TsConverter = class {
|
|
|
552
809
|
syntheticNode = syntheticWithParameters;
|
|
553
810
|
}
|
|
554
811
|
if (syntheticNode) {
|
|
555
|
-
if (
|
|
812
|
+
if (import_typescript3.default.isTypeReferenceNode(syntheticNode) && import_typescript3.default.isIdentifier(syntheticNode.typeName)) {
|
|
556
813
|
const { typeName } = syntheticNode;
|
|
557
814
|
if (this.context.customPrimitives.includes(typeName.text)) {
|
|
558
815
|
return this.makeBasicRefNode(syntheticNode);
|
|
@@ -560,7 +817,7 @@ var TsConverter = class {
|
|
|
560
817
|
const declarationSymbol = typeName.symbol;
|
|
561
818
|
if (declarationSymbol && declarationSymbol.declarations?.[0]) {
|
|
562
819
|
const declaration = declarationSymbol.declarations[0];
|
|
563
|
-
if (
|
|
820
|
+
if (import_typescript3.default.isTypeAliasDeclaration(declaration) || import_typescript3.default.isInterfaceDeclaration(declaration)) {
|
|
564
821
|
return this.convertDeclaration(declaration);
|
|
565
822
|
}
|
|
566
823
|
}
|
|
@@ -580,18 +837,18 @@ var TsConverter = class {
|
|
|
580
837
|
additionalProperties: false
|
|
581
838
|
};
|
|
582
839
|
node.members.forEach((member) => {
|
|
583
|
-
if (
|
|
840
|
+
if (import_typescript3.default.isPropertySignature(member) && member.type) {
|
|
584
841
|
const name = getPropertyNameText(member.name);
|
|
585
842
|
ret.properties[name] = {
|
|
586
|
-
required: !
|
|
843
|
+
required: !isOptionalProperty(member),
|
|
587
844
|
node: {
|
|
588
845
|
...this.convertTsTypeNode(member.type) ?? AnyTypeNode,
|
|
589
|
-
...
|
|
846
|
+
...decorateNode(member)
|
|
590
847
|
}
|
|
591
848
|
};
|
|
592
|
-
} else if (
|
|
849
|
+
} else if (import_typescript3.default.isIndexSignatureDeclaration(member)) {
|
|
593
850
|
const param = member.parameters[0];
|
|
594
|
-
if (param.type?.kind !==
|
|
851
|
+
if (param.type?.kind !== import_typescript3.default.SyntaxKind.StringKeyword) {
|
|
595
852
|
this.context.throwError(
|
|
596
853
|
"Will not convert non-string index signature"
|
|
597
854
|
);
|
|
@@ -605,13 +862,13 @@ var TsConverter = class {
|
|
|
605
862
|
if (node.elements.length === 0) {
|
|
606
863
|
return { elementTypes: [], additionalItems: false, minItems: 0 };
|
|
607
864
|
}
|
|
608
|
-
const hasRest =
|
|
865
|
+
const hasRest = import_typescript3.default.isRestTypeNode(node.elements[node.elements.length - 1]);
|
|
609
866
|
const [elements, rest] = hasRest ? [
|
|
610
867
|
node.elements.slice(0, node.elements.length - 1),
|
|
611
868
|
node.elements[node.elements.length - 1]
|
|
612
869
|
] : [[...node.elements], void 0];
|
|
613
870
|
const elementTypes = elements.map((element) => {
|
|
614
|
-
if (
|
|
871
|
+
if (import_typescript3.default.isNamedTupleMember(element)) {
|
|
615
872
|
let typeNode;
|
|
616
873
|
if (element.type) {
|
|
617
874
|
typeNode = this.convertTsTypeNode(element.type);
|
|
@@ -623,8 +880,8 @@ var TsConverter = class {
|
|
|
623
880
|
};
|
|
624
881
|
}
|
|
625
882
|
return {
|
|
626
|
-
type: this.convertTsTypeNode(
|
|
627
|
-
optional:
|
|
883
|
+
type: this.convertTsTypeNode(tsStripOptionalType(element)),
|
|
884
|
+
optional: import_typescript3.default.isOptionalTypeNode(element)
|
|
628
885
|
};
|
|
629
886
|
});
|
|
630
887
|
const additionalItems = rest ? this.convertTsTypeNode(rest.type.elementType) ?? AnyTypeNode : false;
|
|
@@ -658,7 +915,7 @@ var TsConverter = class {
|
|
|
658
915
|
);
|
|
659
916
|
}
|
|
660
917
|
let parentInterface;
|
|
661
|
-
if (
|
|
918
|
+
if (import_typescript3.default.isTypeLiteralNode(parentDeclarations?.[0]) && import_typescript3.default.isTypeAliasDeclaration(parentDeclarations?.[0].parent)) {
|
|
662
919
|
parentInterface = parentDeclarations?.[0].parent;
|
|
663
920
|
} else {
|
|
664
921
|
parentInterface = parentDeclarations?.[0];
|
|
@@ -728,8 +985,8 @@ var TsConverter = class {
|
|
|
728
985
|
} else if (tp.default) {
|
|
729
986
|
typeToProcess = tp.default;
|
|
730
987
|
} else {
|
|
731
|
-
typeToProcess =
|
|
732
|
-
|
|
988
|
+
typeToProcess = import_typescript3.default.factory.createKeywordTypeNode(
|
|
989
|
+
import_typescript3.default.SyntaxKind.AnyKeyword
|
|
733
990
|
);
|
|
734
991
|
}
|
|
735
992
|
const processedNodeType = this.convertTsTypeNode(typeToProcess);
|
|
@@ -762,14 +1019,14 @@ var TsConverter = class {
|
|
|
762
1019
|
resolveRefNode(node) {
|
|
763
1020
|
let refName;
|
|
764
1021
|
let namespace;
|
|
765
|
-
if (node.typeName.kind ===
|
|
1022
|
+
if (node.typeName.kind === import_typescript3.default.SyntaxKind.QualifiedName) {
|
|
766
1023
|
namespace = node.typeName.left.getText();
|
|
767
1024
|
refName = node.typeName.right.getText();
|
|
768
1025
|
} else {
|
|
769
1026
|
refName = node.typeName.text;
|
|
770
1027
|
}
|
|
771
|
-
if (
|
|
772
|
-
if (
|
|
1028
|
+
if (isTypeReferenceGeneric(node, this.context.typeChecker)) {
|
|
1029
|
+
if (import_typescript3.default.isIndexedAccessTypeNode(node.parent)) {
|
|
773
1030
|
const genericSymbol = this.context.typeChecker.getSymbolAtLocation(
|
|
774
1031
|
node.typeName
|
|
775
1032
|
);
|
|
@@ -787,14 +1044,14 @@ var TsConverter = class {
|
|
|
787
1044
|
}
|
|
788
1045
|
return AnyTypeNode;
|
|
789
1046
|
}
|
|
790
|
-
return { type: "ref", ref: node.getText(), ...
|
|
1047
|
+
return { type: "ref", ref: node.getText(), ...decorateNode(node) };
|
|
791
1048
|
}
|
|
792
1049
|
if (refName === "Array") {
|
|
793
1050
|
const typeArgs = node.typeArguments;
|
|
794
1051
|
return {
|
|
795
1052
|
type: "array",
|
|
796
1053
|
elementType: typeArgs ? this.convertTsTypeNode(typeArgs[0]) ?? AnyTypeNode : AnyTypeNode,
|
|
797
|
-
...
|
|
1054
|
+
...decorateNode(node)
|
|
798
1055
|
};
|
|
799
1056
|
}
|
|
800
1057
|
if (refName === "Record") {
|
|
@@ -804,17 +1061,17 @@ var TsConverter = class {
|
|
|
804
1061
|
type: "record",
|
|
805
1062
|
keyType: this.convertTsTypeNode(indexType) ?? AnyTypeNode,
|
|
806
1063
|
valueType: this.convertTsTypeNode(valueType) ?? AnyTypeNode,
|
|
807
|
-
...
|
|
1064
|
+
...decorateNode(node)
|
|
808
1065
|
};
|
|
809
1066
|
}
|
|
810
1067
|
if (isMappedTypeNode(refName)) {
|
|
811
1068
|
return this.makeMappedType(refName, node);
|
|
812
1069
|
}
|
|
813
|
-
if (
|
|
1070
|
+
if (isTypeScriptLibType(node, this.context.typeChecker)) {
|
|
814
1071
|
return this.makeBasicRefNode(node);
|
|
815
1072
|
}
|
|
816
1073
|
if (!this.context.customPrimitives.includes(refName)) {
|
|
817
|
-
const typeInfo =
|
|
1074
|
+
const typeInfo = getReferencedType(node, this.context.typeChecker);
|
|
818
1075
|
if (typeInfo) {
|
|
819
1076
|
const convertedType = this.convertTopLevelNode(typeInfo.declaration);
|
|
820
1077
|
const genericParams = typeInfo.declaration.typeParameters;
|
|
@@ -867,7 +1124,7 @@ var TsConverter = class {
|
|
|
867
1124
|
return (0, import_xlr_utils.applyPickOrOmitToNodeType)(
|
|
868
1125
|
baseObj,
|
|
869
1126
|
refName,
|
|
870
|
-
|
|
1127
|
+
getStringLiteralsFromUnion(modifiers)
|
|
871
1128
|
);
|
|
872
1129
|
}
|
|
873
1130
|
}
|
|
@@ -884,7 +1141,7 @@ var TsConverter = class {
|
|
|
884
1141
|
if (node.typeArguments) {
|
|
885
1142
|
node.typeArguments.forEach((typeArg) => {
|
|
886
1143
|
let convertedNode;
|
|
887
|
-
if (
|
|
1144
|
+
if (isTopLevelDeclaration(typeArg)) {
|
|
888
1145
|
convertedNode = this.convertDeclaration(typeArg);
|
|
889
1146
|
} else {
|
|
890
1147
|
convertedNode = this.convertTsTypeNode(typeArg);
|
|
@@ -899,10 +1156,10 @@ var TsConverter = class {
|
|
|
899
1156
|
});
|
|
900
1157
|
}
|
|
901
1158
|
let ref;
|
|
902
|
-
if (
|
|
903
|
-
if (node.typeName.kind ===
|
|
1159
|
+
if (import_typescript3.default.isTypeReferenceNode(node)) {
|
|
1160
|
+
if (node.typeName.kind === import_typescript3.default.SyntaxKind.QualifiedName) {
|
|
904
1161
|
ref = `${node.typeName.left.getText()}.${node.typeName.right.getText()}`;
|
|
905
|
-
} else if (node.pos === -1 &&
|
|
1162
|
+
} else if (node.pos === -1 && import_typescript3.default.isIdentifier(node.typeName)) {
|
|
906
1163
|
ref = node.typeName.text;
|
|
907
1164
|
} else {
|
|
908
1165
|
ref = node.getText();
|
|
@@ -913,7 +1170,7 @@ var TsConverter = class {
|
|
|
913
1170
|
return {
|
|
914
1171
|
type: "ref",
|
|
915
1172
|
ref,
|
|
916
|
-
...
|
|
1173
|
+
...decorateNode(node),
|
|
917
1174
|
genericArguments: genericArgs.length > 0 ? genericArgs : void 0
|
|
918
1175
|
};
|
|
919
1176
|
}
|
|
@@ -921,7 +1178,7 @@ var TsConverter = class {
|
|
|
921
1178
|
|
|
922
1179
|
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts/xlr-to-ts.ts
|
|
923
1180
|
var import_xlr_utils2 = require("@xlr-lib/xlr-utils");
|
|
924
|
-
var
|
|
1181
|
+
var import_typescript4 = __toESM(require("typescript"));
|
|
925
1182
|
var templateTokenize = /(?=true\|false|\.\*|\[0-9]\*)/gm;
|
|
926
1183
|
var tokenSplit = /(?<=true\|false|\.\*|\[0-9]\*)/gm;
|
|
927
1184
|
var TSWriter = class {
|
|
@@ -930,7 +1187,7 @@ var TSWriter = class {
|
|
|
930
1187
|
additionalTypes;
|
|
931
1188
|
constructor(factory) {
|
|
932
1189
|
this.context = {
|
|
933
|
-
factory: factory ??
|
|
1190
|
+
factory: factory ?? import_typescript4.default.factory,
|
|
934
1191
|
throwError: (message) => {
|
|
935
1192
|
throw new ConversionError(message);
|
|
936
1193
|
}
|
|
@@ -958,7 +1215,7 @@ var TSWriter = class {
|
|
|
958
1215
|
const refName = type.extends.ref.split("<")[0];
|
|
959
1216
|
customPrimitiveHeritageClass = [
|
|
960
1217
|
this.context.factory.createHeritageClause(
|
|
961
|
-
|
|
1218
|
+
import_typescript4.default.SyntaxKind.ExtendsKeyword,
|
|
962
1219
|
[
|
|
963
1220
|
this.context.factory.createExpressionWithTypeArguments(
|
|
964
1221
|
this.context.factory.createIdentifier(refName),
|
|
@@ -980,7 +1237,7 @@ var TSWriter = class {
|
|
|
980
1237
|
});
|
|
981
1238
|
}
|
|
982
1239
|
let finalNode;
|
|
983
|
-
if (
|
|
1240
|
+
if (import_typescript4.default.isTypeLiteralNode(tsNode)) {
|
|
984
1241
|
finalNode = this.makeInterfaceDeclaration(
|
|
985
1242
|
typeName,
|
|
986
1243
|
tsNode.members,
|
|
@@ -1093,35 +1350,35 @@ var TSWriter = class {
|
|
|
1093
1350
|
switch (xlrNode.type) {
|
|
1094
1351
|
case "string":
|
|
1095
1352
|
return this.context.factory.createKeywordTypeNode(
|
|
1096
|
-
|
|
1353
|
+
import_typescript4.default.SyntaxKind.StringKeyword
|
|
1097
1354
|
);
|
|
1098
1355
|
case "number":
|
|
1099
1356
|
return this.context.factory.createKeywordTypeNode(
|
|
1100
|
-
|
|
1357
|
+
import_typescript4.default.SyntaxKind.NumberKeyword
|
|
1101
1358
|
);
|
|
1102
1359
|
case "boolean":
|
|
1103
1360
|
return this.context.factory.createKeywordTypeNode(
|
|
1104
|
-
|
|
1361
|
+
import_typescript4.default.SyntaxKind.BooleanKeyword
|
|
1105
1362
|
);
|
|
1106
1363
|
case "any":
|
|
1107
1364
|
return this.context.factory.createKeywordTypeNode(
|
|
1108
|
-
|
|
1365
|
+
import_typescript4.default.SyntaxKind.AnyKeyword
|
|
1109
1366
|
);
|
|
1110
1367
|
case "unknown":
|
|
1111
1368
|
return this.context.factory.createKeywordTypeNode(
|
|
1112
|
-
|
|
1369
|
+
import_typescript4.default.SyntaxKind.UnknownKeyword
|
|
1113
1370
|
);
|
|
1114
1371
|
case "never":
|
|
1115
1372
|
return this.context.factory.createKeywordTypeNode(
|
|
1116
|
-
|
|
1373
|
+
import_typescript4.default.SyntaxKind.NeverKeyword
|
|
1117
1374
|
);
|
|
1118
1375
|
case "undefined":
|
|
1119
1376
|
return this.context.factory.createKeywordTypeNode(
|
|
1120
|
-
|
|
1377
|
+
import_typescript4.default.SyntaxKind.UndefinedKeyword
|
|
1121
1378
|
);
|
|
1122
1379
|
case "void":
|
|
1123
1380
|
return this.context.factory.createKeywordTypeNode(
|
|
1124
|
-
|
|
1381
|
+
import_typescript4.default.SyntaxKind.VoidKeyword
|
|
1125
1382
|
);
|
|
1126
1383
|
default:
|
|
1127
1384
|
this.context.throwError(
|
|
@@ -1155,7 +1412,7 @@ var TSWriter = class {
|
|
|
1155
1412
|
return this.context.factory.createNamedTupleMember(
|
|
1156
1413
|
void 0,
|
|
1157
1414
|
this.context.factory.createIdentifier(e.name),
|
|
1158
|
-
e.optional ? this.context.factory.createToken(
|
|
1415
|
+
e.optional ? this.context.factory.createToken(import_typescript4.default.SyntaxKind.QuestionToken) : void 0,
|
|
1159
1416
|
this.convertTypeNode(e.type)
|
|
1160
1417
|
);
|
|
1161
1418
|
}
|
|
@@ -1171,12 +1428,12 @@ var TSWriter = class {
|
|
|
1171
1428
|
void 0,
|
|
1172
1429
|
void 0,
|
|
1173
1430
|
e.name,
|
|
1174
|
-
e.optional ? this.context.factory.createToken(
|
|
1431
|
+
e.optional ? this.context.factory.createToken(import_typescript4.default.SyntaxKind.QuestionToken) : void 0,
|
|
1175
1432
|
this.convertTypeNode(e.type),
|
|
1176
1433
|
e.default ? this.createLiteralTypeNode(e.default) : void 0
|
|
1177
1434
|
);
|
|
1178
1435
|
}),
|
|
1179
|
-
xlrNode.returnType ? this.convertTypeNode(xlrNode.returnType) : this.context.factory.createToken(
|
|
1436
|
+
xlrNode.returnType ? this.convertTypeNode(xlrNode.returnType) : this.context.factory.createToken(import_typescript4.default.SyntaxKind.VoidKeyword)
|
|
1180
1437
|
);
|
|
1181
1438
|
}
|
|
1182
1439
|
createRecordNode(xlrNode) {
|
|
@@ -1208,7 +1465,7 @@ var TSWriter = class {
|
|
|
1208
1465
|
void 0,
|
|
1209
1466
|
// modifiers
|
|
1210
1467
|
name,
|
|
1211
|
-
required ? void 0 : this.context.factory.createToken(
|
|
1468
|
+
required ? void 0 : this.context.factory.createToken(import_typescript4.default.SyntaxKind.QuestionToken),
|
|
1212
1469
|
this.convertTypeNode(node)
|
|
1213
1470
|
),
|
|
1214
1471
|
node
|
|
@@ -1230,7 +1487,7 @@ var TSWriter = class {
|
|
|
1230
1487
|
void 0,
|
|
1231
1488
|
// question token
|
|
1232
1489
|
this.context.factory.createKeywordTypeNode(
|
|
1233
|
-
|
|
1490
|
+
import_typescript4.default.SyntaxKind.StringKeyword
|
|
1234
1491
|
)
|
|
1235
1492
|
)
|
|
1236
1493
|
],
|
|
@@ -1257,11 +1514,11 @@ var TSWriter = class {
|
|
|
1257
1514
|
const [regexSegment, stringSegment = ""] = segments.split(tokenSplit);
|
|
1258
1515
|
let regexTemplateType;
|
|
1259
1516
|
if (regexSegment === ".*") {
|
|
1260
|
-
regexTemplateType =
|
|
1517
|
+
regexTemplateType = import_typescript4.default.SyntaxKind.StringKeyword;
|
|
1261
1518
|
} else if (regexSegment === "[0-9]*") {
|
|
1262
|
-
regexTemplateType =
|
|
1519
|
+
regexTemplateType = import_typescript4.default.SyntaxKind.NumberKeyword;
|
|
1263
1520
|
} else if (regexSegment === "true|false") {
|
|
1264
|
-
regexTemplateType =
|
|
1521
|
+
regexTemplateType = import_typescript4.default.SyntaxKind.BooleanKeyword;
|
|
1265
1522
|
} else {
|
|
1266
1523
|
this.context.throwError(
|
|
1267
1524
|
`Can't make template literal type from regex ${regexSegment}`
|
|
@@ -1305,9 +1562,9 @@ ${comment.split("\n").map((s) => ` * ${s}`).join("\n")}
|
|
|
1305
1562
|
} else {
|
|
1306
1563
|
comment = `* ${comment} `;
|
|
1307
1564
|
}
|
|
1308
|
-
return
|
|
1565
|
+
return import_typescript4.default.addSyntheticLeadingComment(
|
|
1309
1566
|
tsNode,
|
|
1310
|
-
|
|
1567
|
+
import_typescript4.default.SyntaxKind.MultiLineCommentTrivia,
|
|
1311
1568
|
comment,
|
|
1312
1569
|
true
|
|
1313
1570
|
);
|
|
@@ -1325,7 +1582,7 @@ ${comment.split("\n").map((s) => ` * ${s}`).join("\n")}
|
|
|
1325
1582
|
makeInterfaceDeclaration(name, node, generics, heritageClass) {
|
|
1326
1583
|
return this.context.factory.createInterfaceDeclaration(
|
|
1327
1584
|
this.context.factory.createModifiersFromModifierFlags(
|
|
1328
|
-
|
|
1585
|
+
import_typescript4.default.ModifierFlags.Export
|
|
1329
1586
|
),
|
|
1330
1587
|
this.context.factory.createIdentifier(name),
|
|
1331
1588
|
generics,
|
|
@@ -1338,7 +1595,7 @@ ${comment.split("\n").map((s) => ` * ${s}`).join("\n")}
|
|
|
1338
1595
|
makeTypeDeclaration(name, node, generics) {
|
|
1339
1596
|
return this.context.factory.createTypeAliasDeclaration(
|
|
1340
1597
|
this.context.factory.createModifiersFromModifierFlags(
|
|
1341
|
-
|
|
1598
|
+
import_typescript4.default.ModifierFlags.Export
|
|
1342
1599
|
),
|
|
1343
1600
|
this.context.factory.createIdentifier(name),
|
|
1344
1601
|
generics,
|
|
@@ -1347,9 +1604,67 @@ ${comment.split("\n").map((s) => ` * ${s}`).join("\n")}
|
|
|
1347
1604
|
);
|
|
1348
1605
|
}
|
|
1349
1606
|
};
|
|
1607
|
+
function exportTypesToTypeScript(typesToExport, importMap) {
|
|
1608
|
+
const writer = new TSWriter();
|
|
1609
|
+
const referencedImports = /* @__PURE__ */ new Set();
|
|
1610
|
+
const exportedTypes = /* @__PURE__ */ new Map();
|
|
1611
|
+
const printer = import_typescript4.default.createPrinter({ newLine: import_typescript4.default.NewLineKind.LineFeed });
|
|
1612
|
+
let resultFile = import_typescript4.default.createSourceFile(
|
|
1613
|
+
"output.d.ts",
|
|
1614
|
+
"",
|
|
1615
|
+
import_typescript4.default.ScriptTarget.ES2017,
|
|
1616
|
+
false,
|
|
1617
|
+
import_typescript4.default.ScriptKind.TS
|
|
1618
|
+
);
|
|
1619
|
+
typesToExport.forEach((typeNode) => {
|
|
1620
|
+
const { type, referencedTypes, additionalTypes } = writer.convertNamedType(typeNode);
|
|
1621
|
+
exportedTypes.set(typeNode.name, type);
|
|
1622
|
+
additionalTypes?.forEach(
|
|
1623
|
+
(additionalType, name) => exportedTypes.set(name, additionalType)
|
|
1624
|
+
);
|
|
1625
|
+
referencedTypes?.forEach(
|
|
1626
|
+
(referencedType) => referencedImports.add(referencedType)
|
|
1627
|
+
);
|
|
1628
|
+
});
|
|
1629
|
+
const typesToPrint = [];
|
|
1630
|
+
exportedTypes.forEach(
|
|
1631
|
+
(type) => typesToPrint.push(
|
|
1632
|
+
printer.printNode(import_typescript4.default.EmitHint.Unspecified, type, resultFile)
|
|
1633
|
+
)
|
|
1634
|
+
);
|
|
1635
|
+
importMap.forEach((imports, packageName) => {
|
|
1636
|
+
const applicableImports = imports.filter((i) => referencedImports.has(i));
|
|
1637
|
+
if (applicableImports.length === 0) return;
|
|
1638
|
+
resultFile = import_typescript4.default.factory.updateSourceFile(resultFile, [
|
|
1639
|
+
import_typescript4.default.factory.createImportDeclaration(
|
|
1640
|
+
/* modifiers */
|
|
1641
|
+
void 0,
|
|
1642
|
+
import_typescript4.default.factory.createImportClause(
|
|
1643
|
+
false,
|
|
1644
|
+
void 0,
|
|
1645
|
+
import_typescript4.default.factory.createNamedImports(
|
|
1646
|
+
applicableImports.map(
|
|
1647
|
+
(i) => import_typescript4.default.factory.createImportSpecifier(
|
|
1648
|
+
false,
|
|
1649
|
+
void 0,
|
|
1650
|
+
import_typescript4.default.factory.createIdentifier(i)
|
|
1651
|
+
)
|
|
1652
|
+
)
|
|
1653
|
+
)
|
|
1654
|
+
),
|
|
1655
|
+
import_typescript4.default.factory.createStringLiteral(packageName)
|
|
1656
|
+
),
|
|
1657
|
+
...resultFile.statements
|
|
1658
|
+
]);
|
|
1659
|
+
});
|
|
1660
|
+
const headerText = printer.printFile(resultFile);
|
|
1661
|
+
const nodeText = typesToPrint.join("\n");
|
|
1662
|
+
return `${headerText}
|
|
1663
|
+
${nodeText}`;
|
|
1664
|
+
}
|
|
1350
1665
|
|
|
1351
1666
|
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/helpers/converter.ts
|
|
1352
|
-
var
|
|
1667
|
+
var import_typescript5 = __toESM(require("typescript"));
|
|
1353
1668
|
var import_path2 = __toESM(require("path"));
|
|
1354
1669
|
var import_fs2 = __toESM(require("fs"));
|
|
1355
1670
|
|
|
@@ -1386,7 +1701,7 @@ function writeManifest(capabilities, outputDirectory) {
|
|
|
1386
1701
|
|
|
1387
1702
|
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/helpers/converter.ts
|
|
1388
1703
|
function converter(sourceFile, outputDirectory, customPrimitives, tsOptions = {}) {
|
|
1389
|
-
const program =
|
|
1704
|
+
const program = import_typescript5.default.createProgram([sourceFile], tsOptions);
|
|
1390
1705
|
import_fs2.default.mkdirSync(outputDirectory, { recursive: true });
|
|
1391
1706
|
const checker = program.getTypeChecker();
|
|
1392
1707
|
const converter2 = new TsConverter(checker, customPrimitives);
|
|
@@ -1415,6 +1730,7 @@ function converter(sourceFile, outputDirectory, customPrimitives, tsOptions = {}
|
|
|
1415
1730
|
TSWriter,
|
|
1416
1731
|
TsConverter,
|
|
1417
1732
|
converter,
|
|
1733
|
+
exportTypesToTypeScript,
|
|
1418
1734
|
writeManifest
|
|
1419
1735
|
});
|
|
1420
1736
|
//# sourceMappingURL=index.cjs.map
|