@player-tools/xlr-converters 0.0.2-next.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.
- package/README.md +7 -0
- package/dist/index.cjs.js +756 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.esm.js +746 -0
- package/package.json +35 -0
- package/src/index.ts +5 -0
- package/src/ts-to-xlr.ts +725 -0
- package/src/types.ts +15 -0
- package/src/xlr-to-ts.ts +511 -0
|
@@ -0,0 +1,756 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var ts = require('typescript');
|
|
6
|
+
var xlrUtils = require('@player-tools/xlr-utils');
|
|
7
|
+
|
|
8
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
9
|
+
|
|
10
|
+
var ts__default = /*#__PURE__*/_interopDefaultLegacy(ts);
|
|
11
|
+
|
|
12
|
+
class ConversionError extends Error {
|
|
13
|
+
constructor(msg) {
|
|
14
|
+
super(msg);
|
|
15
|
+
Object.setPrototypeOf(this, ConversionError.prototype);
|
|
16
|
+
}
|
|
17
|
+
toString() {
|
|
18
|
+
return `Conversion Error: ${this.message}`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
var __defProp$1 = Object.defineProperty;
|
|
23
|
+
var __defProps = Object.defineProperties;
|
|
24
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
25
|
+
var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
|
|
26
|
+
var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
|
|
27
|
+
var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
|
|
28
|
+
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
29
|
+
var __spreadValues$1 = (a, b) => {
|
|
30
|
+
for (var prop in b || (b = {}))
|
|
31
|
+
if (__hasOwnProp$1.call(b, prop))
|
|
32
|
+
__defNormalProp$1(a, prop, b[prop]);
|
|
33
|
+
if (__getOwnPropSymbols$1)
|
|
34
|
+
for (var prop of __getOwnPropSymbols$1(b)) {
|
|
35
|
+
if (__propIsEnum$1.call(b, prop))
|
|
36
|
+
__defNormalProp$1(a, prop, b[prop]);
|
|
37
|
+
}
|
|
38
|
+
return a;
|
|
39
|
+
};
|
|
40
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
41
|
+
const AnyTypeNode = {
|
|
42
|
+
type: "any"
|
|
43
|
+
};
|
|
44
|
+
class TsConverter {
|
|
45
|
+
constructor(typeChecker, customPrimitives) {
|
|
46
|
+
this.context = {
|
|
47
|
+
customPrimitives: customPrimitives != null ? customPrimitives : [],
|
|
48
|
+
typeChecker,
|
|
49
|
+
throwError: (message) => {
|
|
50
|
+
throw new ConversionError(message);
|
|
51
|
+
},
|
|
52
|
+
cache: {
|
|
53
|
+
convertedNodes: new Map(),
|
|
54
|
+
convertedTemplates: new Map()
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
convertSourceFile(sourceFile) {
|
|
59
|
+
const declarations = sourceFile.statements.filter((statement) => ts__default["default"].isTypeAliasDeclaration(statement) || ts__default["default"].isInterfaceDeclaration(statement));
|
|
60
|
+
const types = declarations.filter((declaration) => xlrUtils.isExportedDeclaration(declaration)).map((statement) => this.convertDeclaration(statement)).filter((v) => !!v);
|
|
61
|
+
return {
|
|
62
|
+
data: { version: 1, types },
|
|
63
|
+
convertedTypes: types.map(({ name }) => name)
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
convertDeclaration(node) {
|
|
67
|
+
var _a;
|
|
68
|
+
const sourceFile = node.parent;
|
|
69
|
+
const { fileName } = sourceFile;
|
|
70
|
+
if (ts__default["default"].isTypeAliasDeclaration(node)) {
|
|
71
|
+
let genericTokens;
|
|
72
|
+
if (xlrUtils.isGenericTypeDeclaration(node)) {
|
|
73
|
+
genericTokens = this.generateGenerics(node.typeParameters);
|
|
74
|
+
}
|
|
75
|
+
return __spreadProps(__spreadValues$1(__spreadValues$1({
|
|
76
|
+
name: node.name.getText(),
|
|
77
|
+
source: fileName
|
|
78
|
+
}, (_a = this.convertTsTypeNode(node.type)) != null ? _a : AnyTypeNode), xlrUtils.decorateNode(node)), {
|
|
79
|
+
genericTokens
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
if (ts__default["default"].isInterfaceDeclaration(node)) {
|
|
83
|
+
let genericTokens;
|
|
84
|
+
if (xlrUtils.isGenericInterfaceDeclaration(node)) {
|
|
85
|
+
genericTokens = this.generateGenerics(node.typeParameters);
|
|
86
|
+
}
|
|
87
|
+
const baseObject = __spreadProps(__spreadValues$1(__spreadValues$1({
|
|
88
|
+
name: node.name.getText(),
|
|
89
|
+
type: "object",
|
|
90
|
+
source: fileName
|
|
91
|
+
}, this.fromTsObjectMembers(node)), xlrUtils.decorateNode(node)), {
|
|
92
|
+
genericTokens
|
|
93
|
+
});
|
|
94
|
+
if (node.heritageClauses) {
|
|
95
|
+
return this.handleHeritageClauses(node.heritageClauses, baseObject, this.context.typeChecker);
|
|
96
|
+
}
|
|
97
|
+
return baseObject;
|
|
98
|
+
}
|
|
99
|
+
this.context.throwError(`Error: type node is not an Interface or a Type, can't convert as Declaration`);
|
|
100
|
+
}
|
|
101
|
+
convertTsTypeNode(node) {
|
|
102
|
+
if (this.context.cache.convertedNodes.has(node)) {
|
|
103
|
+
return this.context.cache.convertedNodes.get(node);
|
|
104
|
+
}
|
|
105
|
+
const convertedNode = this.tsNodeToType(node);
|
|
106
|
+
this.context.cache.convertedNodes.set(node, convertedNode);
|
|
107
|
+
return convertedNode;
|
|
108
|
+
}
|
|
109
|
+
tsNodeToType(node) {
|
|
110
|
+
var _a, _b, _c, _d;
|
|
111
|
+
if (ts__default["default"].isUnionTypeNode(node)) {
|
|
112
|
+
return __spreadValues$1({
|
|
113
|
+
type: "or",
|
|
114
|
+
or: node.types.map((child) => this.convertTsTypeNode(child)).filter(xlrUtils.isNonNullable)
|
|
115
|
+
}, xlrUtils.decorateNode(node));
|
|
116
|
+
}
|
|
117
|
+
if (ts__default["default"].isIntersectionTypeNode(node)) {
|
|
118
|
+
return __spreadValues$1({
|
|
119
|
+
type: "and",
|
|
120
|
+
and: node.types.map((child) => this.convertTsTypeNode(child)).filter(xlrUtils.isNonNullable)
|
|
121
|
+
}, xlrUtils.decorateNode(node));
|
|
122
|
+
}
|
|
123
|
+
if (ts__default["default"].isParenthesizedTypeNode(node)) {
|
|
124
|
+
const children = [...node.getChildren()];
|
|
125
|
+
if (((_a = children[0]) == null ? void 0 : _a.kind) === ts__default["default"].SyntaxKind.OpenParenToken) {
|
|
126
|
+
children.shift();
|
|
127
|
+
}
|
|
128
|
+
if (((_b = children[children.length - 1]) == null ? void 0 : _b.kind) === ts__default["default"].SyntaxKind.CloseParenToken) {
|
|
129
|
+
children.pop();
|
|
130
|
+
}
|
|
131
|
+
const element = children[0];
|
|
132
|
+
if (children.length !== 1 || !ts__default["default"].isTypeNode(element)) {
|
|
133
|
+
this.context.throwError(`Parenthesis type not understood. Length ${children.length}, Is Type Node: ${ts__default["default"].SyntaxKind[element.kind]}`);
|
|
134
|
+
}
|
|
135
|
+
return this.convertTsTypeNode(element);
|
|
136
|
+
}
|
|
137
|
+
if (node.kind === ts__default["default"].SyntaxKind.AnyKeyword) {
|
|
138
|
+
return __spreadValues$1({ type: "any" }, xlrUtils.decorateNode(node));
|
|
139
|
+
}
|
|
140
|
+
if (node.kind === ts__default["default"].SyntaxKind.UnknownKeyword) {
|
|
141
|
+
return __spreadValues$1({ type: "unknown" }, xlrUtils.decorateNode(node));
|
|
142
|
+
}
|
|
143
|
+
if (node.kind === ts__default["default"].SyntaxKind.StringKeyword) {
|
|
144
|
+
return __spreadValues$1({ type: "string" }, xlrUtils.decorateNode(node));
|
|
145
|
+
}
|
|
146
|
+
if (node.kind === ts__default["default"].SyntaxKind.NumberKeyword) {
|
|
147
|
+
return __spreadValues$1({ type: "number" }, xlrUtils.decorateNode(node));
|
|
148
|
+
}
|
|
149
|
+
if (node.kind === ts__default["default"].SyntaxKind.BooleanKeyword) {
|
|
150
|
+
return __spreadValues$1({ type: "boolean" }, xlrUtils.decorateNode(node));
|
|
151
|
+
}
|
|
152
|
+
if (node.kind === ts__default["default"].SyntaxKind.UndefinedKeyword) {
|
|
153
|
+
return __spreadValues$1({ type: "undefined" }, xlrUtils.decorateNode(node));
|
|
154
|
+
}
|
|
155
|
+
if (node.kind === ts__default["default"].SyntaxKind.NeverKeyword) {
|
|
156
|
+
return __spreadValues$1({ type: "never" }, xlrUtils.decorateNode(node));
|
|
157
|
+
}
|
|
158
|
+
if (node.kind === ts__default["default"].SyntaxKind.ObjectKeyword) {
|
|
159
|
+
return __spreadValues$1({
|
|
160
|
+
type: "object",
|
|
161
|
+
properties: {},
|
|
162
|
+
additionalProperties: AnyTypeNode
|
|
163
|
+
}, xlrUtils.decorateNode(node));
|
|
164
|
+
}
|
|
165
|
+
if (ts__default["default"].isTemplateLiteralTypeNode(node)) {
|
|
166
|
+
let format;
|
|
167
|
+
if (this.context.cache.convertedTemplates.has(node)) {
|
|
168
|
+
format = this.context.cache.convertedTemplates.get(node);
|
|
169
|
+
} else {
|
|
170
|
+
format = xlrUtils.buildTemplateRegex(node, this.context.typeChecker);
|
|
171
|
+
this.context.cache.convertedTemplates.set(node, format);
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
type: "template",
|
|
175
|
+
format
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
if (ts__default["default"].isArrayTypeNode(node)) {
|
|
179
|
+
return __spreadValues$1({
|
|
180
|
+
type: "array",
|
|
181
|
+
elementType: (_c = this.convertTsTypeNode(node.elementType)) != null ? _c : AnyTypeNode
|
|
182
|
+
}, xlrUtils.decorateNode(node));
|
|
183
|
+
}
|
|
184
|
+
if (ts__default["default"].isConditionalTypeNode(node)) {
|
|
185
|
+
const xlrNode = {
|
|
186
|
+
type: "conditional",
|
|
187
|
+
check: {
|
|
188
|
+
left: this.convertTsTypeNode(node.checkType),
|
|
189
|
+
right: this.convertTsTypeNode(node.extendsType)
|
|
190
|
+
},
|
|
191
|
+
value: {
|
|
192
|
+
true: this.convertTsTypeNode(node.trueType),
|
|
193
|
+
false: this.convertTsTypeNode(node.falseType)
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
return xlrUtils.resolveConditional(xlrNode);
|
|
197
|
+
}
|
|
198
|
+
if (ts__default["default"].isTypeReferenceNode(node)) {
|
|
199
|
+
return this.resolveRefNode(node);
|
|
200
|
+
}
|
|
201
|
+
if (ts__default["default"].isTupleTypeNode(node)) {
|
|
202
|
+
return __spreadValues$1(__spreadValues$1({
|
|
203
|
+
type: "tuple"
|
|
204
|
+
}, this.fromTsTuple(node)), xlrUtils.decorateNode(node));
|
|
205
|
+
}
|
|
206
|
+
if (ts__default["default"].isLiteralTypeNode(node)) {
|
|
207
|
+
if (ts__default["default"].isNumericLiteral(node.literal)) {
|
|
208
|
+
return __spreadValues$1({
|
|
209
|
+
type: "number",
|
|
210
|
+
const: Number(node.literal.text)
|
|
211
|
+
}, xlrUtils.decorateNode(node));
|
|
212
|
+
}
|
|
213
|
+
if (ts__default["default"].isStringLiteral(node.literal)) {
|
|
214
|
+
return __spreadValues$1({
|
|
215
|
+
type: "string",
|
|
216
|
+
const: node.literal.text
|
|
217
|
+
}, xlrUtils.decorateNode(node));
|
|
218
|
+
}
|
|
219
|
+
if (node.literal.kind === ts__default["default"].SyntaxKind.TrueKeyword) {
|
|
220
|
+
return __spreadValues$1({
|
|
221
|
+
type: "boolean",
|
|
222
|
+
const: true
|
|
223
|
+
}, xlrUtils.decorateNode(node));
|
|
224
|
+
}
|
|
225
|
+
if (node.literal.kind === ts__default["default"].SyntaxKind.FalseKeyword) {
|
|
226
|
+
return __spreadValues$1({
|
|
227
|
+
type: "boolean",
|
|
228
|
+
const: false
|
|
229
|
+
}, xlrUtils.decorateNode(node));
|
|
230
|
+
}
|
|
231
|
+
if (node.literal.kind === ts__default["default"].SyntaxKind.NullKeyword) {
|
|
232
|
+
return __spreadValues$1({ type: "null" }, xlrUtils.decorateNode(node));
|
|
233
|
+
}
|
|
234
|
+
if (node.literal.kind === ts__default["default"].SyntaxKind.PrefixUnaryExpression) {
|
|
235
|
+
this.context.throwError("Prefix unary expressions not supported");
|
|
236
|
+
}
|
|
237
|
+
this.context.throwError("Literal type not understood");
|
|
238
|
+
} else if (ts__default["default"].isTypeLiteralNode(node)) {
|
|
239
|
+
return __spreadValues$1(__spreadValues$1({
|
|
240
|
+
type: "object"
|
|
241
|
+
}, this.fromTsObjectMembers(node)), xlrUtils.decorateNode(node));
|
|
242
|
+
} else if (ts__default["default"].isFunctionTypeNode(node)) {
|
|
243
|
+
const parameters = node.parameters.map((param) => {
|
|
244
|
+
let typeNode;
|
|
245
|
+
if (param.type) {
|
|
246
|
+
typeNode = this.convertTsTypeNode(param.type);
|
|
247
|
+
}
|
|
248
|
+
return {
|
|
249
|
+
name: param.name.getText(),
|
|
250
|
+
type: typeNode != null ? typeNode : AnyTypeNode,
|
|
251
|
+
optional: param.questionToken ? true : void 0,
|
|
252
|
+
default: param.initializer ? this.convertTsTypeNode(param.initializer) : void 0
|
|
253
|
+
};
|
|
254
|
+
});
|
|
255
|
+
const returnType = node.type.kind === ts__default["default"].SyntaxKind.VoidKeyword ? void 0 : this.convertTsTypeNode(node.type);
|
|
256
|
+
return __spreadValues$1({
|
|
257
|
+
type: "function",
|
|
258
|
+
parameters,
|
|
259
|
+
returnType
|
|
260
|
+
}, xlrUtils.decorateNode(node));
|
|
261
|
+
} else if (ts__default["default"].isIndexedAccessTypeNode(node)) {
|
|
262
|
+
if (ts__default["default"].isTypeReferenceNode(node.objectType) && ts__default["default"].isLiteralTypeNode(node.indexType)) {
|
|
263
|
+
const baseObject = this.convertTsTypeNode(node.objectType);
|
|
264
|
+
const accessor = node.indexType.literal.getText().replace(/["']/g, "");
|
|
265
|
+
if (Object.keys((_d = baseObject.properties) != null ? _d : {}).includes(accessor)) {
|
|
266
|
+
return baseObject.properties[accessor].node;
|
|
267
|
+
}
|
|
268
|
+
if (baseObject.additionalProperties) {
|
|
269
|
+
return baseObject.additionalProperties;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return { type: "null" };
|
|
273
|
+
} else {
|
|
274
|
+
this.context.throwError(`Unimplemented type ${ts__default["default"].SyntaxKind[node.kind]}`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
fromTsObjectMembers(node) {
|
|
278
|
+
const ret = {
|
|
279
|
+
properties: {},
|
|
280
|
+
additionalProperties: false
|
|
281
|
+
};
|
|
282
|
+
node.members.forEach((member) => {
|
|
283
|
+
var _a, _b, _c;
|
|
284
|
+
if (ts__default["default"].isPropertySignature(member) && member.type) {
|
|
285
|
+
const name = member.name.getText();
|
|
286
|
+
ret.properties[name] = {
|
|
287
|
+
required: !xlrUtils.isOptionalProperty(member),
|
|
288
|
+
node: __spreadValues$1(__spreadValues$1({}, (_a = this.convertTsTypeNode(member.type)) != null ? _a : AnyTypeNode), xlrUtils.decorateNode(member))
|
|
289
|
+
};
|
|
290
|
+
} else if (ts__default["default"].isIndexSignatureDeclaration(member)) {
|
|
291
|
+
const param = member.parameters[0];
|
|
292
|
+
if (((_b = param.type) == null ? void 0 : _b.kind) !== ts__default["default"].SyntaxKind.StringKeyword) {
|
|
293
|
+
this.context.throwError("Will not convert non-string index signature");
|
|
294
|
+
}
|
|
295
|
+
ret.additionalProperties = (_c = this.convertTsTypeNode(member.type)) != null ? _c : AnyTypeNode;
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
return ret;
|
|
299
|
+
}
|
|
300
|
+
fromTsTuple(node) {
|
|
301
|
+
var _a;
|
|
302
|
+
if (node.elements.length === 0) {
|
|
303
|
+
return { elementTypes: [], additionalItems: false, minItems: 0 };
|
|
304
|
+
}
|
|
305
|
+
const hasRest = ts__default["default"].isRestTypeNode(node.elements[node.elements.length - 1]);
|
|
306
|
+
const [elements, rest] = hasRest ? [
|
|
307
|
+
node.elements.slice(0, node.elements.length - 1),
|
|
308
|
+
node.elements[node.elements.length - 1]
|
|
309
|
+
] : [[...node.elements], void 0];
|
|
310
|
+
const elementTypes = elements.map((element) => {
|
|
311
|
+
var _a2;
|
|
312
|
+
return (_a2 = this.convertTsTypeNode(xlrUtils.tsStripOptionalType(element))) != null ? _a2 : AnyTypeNode;
|
|
313
|
+
});
|
|
314
|
+
const additionalItems = rest ? (_a = this.convertTsTypeNode(rest.type.elementType)) != null ? _a : AnyTypeNode : false;
|
|
315
|
+
const firstOptional = elements.findIndex((element) => ts__default["default"].isOptionalTypeNode(element));
|
|
316
|
+
const minItems = firstOptional === -1 ? elements.length : firstOptional;
|
|
317
|
+
return __spreadProps(__spreadValues$1({
|
|
318
|
+
elementTypes
|
|
319
|
+
}, additionalItems && additionalItems.type === "any" ? { additionalItems: AnyTypeNode } : { additionalItems }), {
|
|
320
|
+
minItems
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
handleHeritageClauses(clauses, baseObject, typeChecker) {
|
|
324
|
+
let newProperties = {};
|
|
325
|
+
let newAdditionalProperties = false;
|
|
326
|
+
clauses.forEach((heritageClause) => {
|
|
327
|
+
var _a;
|
|
328
|
+
const parent = heritageClause.types[0];
|
|
329
|
+
const parentType = typeChecker.getTypeAtLocation(parent);
|
|
330
|
+
const parentSymbol = parentType.symbol;
|
|
331
|
+
const parentDeclarations = parentSymbol == null ? void 0 : parentSymbol.declarations;
|
|
332
|
+
let parentInterface = parentDeclarations == null ? void 0 : parentDeclarations[0];
|
|
333
|
+
if (parentInterface && ts__default["default"].isTypeLiteralNode(parentInterface) && ts__default["default"].isTypeAliasDeclaration(parentInterface.parent)) {
|
|
334
|
+
parentInterface = parentInterface.parent;
|
|
335
|
+
}
|
|
336
|
+
if (parentInterface && xlrUtils.isTopLevelNode(parentInterface)) {
|
|
337
|
+
const parentInterfaceType = this.convertDeclaration(parentInterface);
|
|
338
|
+
if (parentInterface.typeParameters && parent.typeArguments) {
|
|
339
|
+
const filledInInterface = this.solveGenerics(parentInterfaceType, parentInterface.typeParameters, parent.typeArguments);
|
|
340
|
+
newProperties = filledInInterface.properties;
|
|
341
|
+
newAdditionalProperties = filledInInterface.additionalProperties;
|
|
342
|
+
} else {
|
|
343
|
+
if (xlrUtils.isGenericNodeType(baseObject)) {
|
|
344
|
+
baseObject.genericTokens.push(...(_a = parentInterfaceType.genericTokens) != null ? _a : []);
|
|
345
|
+
}
|
|
346
|
+
newProperties = parentInterfaceType.properties;
|
|
347
|
+
newAdditionalProperties = parentInterfaceType.additionalProperties;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
newAdditionalProperties = baseObject.additionalProperties === false ? newAdditionalProperties : false;
|
|
352
|
+
return __spreadProps(__spreadValues$1({}, baseObject), {
|
|
353
|
+
properties: __spreadValues$1(__spreadValues$1({}, newProperties), baseObject.properties),
|
|
354
|
+
additionalProperties: newAdditionalProperties
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
solveGenerics(baseInterface, typeParameters, typeArguments) {
|
|
358
|
+
if (typeArguments && typeArguments.length === 0)
|
|
359
|
+
return baseInterface;
|
|
360
|
+
const genericMap = new Map();
|
|
361
|
+
typeParameters.forEach((tp, i) => {
|
|
362
|
+
let typeToProcess;
|
|
363
|
+
if (typeArguments && i < typeArguments.length) {
|
|
364
|
+
typeToProcess = typeArguments[i];
|
|
365
|
+
} else if (tp.default) {
|
|
366
|
+
typeToProcess = tp.default;
|
|
367
|
+
} else {
|
|
368
|
+
typeToProcess = ts__default["default"].factory.createKeywordTypeNode(ts__default["default"].SyntaxKind.AnyKeyword);
|
|
369
|
+
}
|
|
370
|
+
const processedNodeType = this.convertTsTypeNode(typeToProcess);
|
|
371
|
+
if (processedNodeType) {
|
|
372
|
+
genericMap.set(tp.name.getText(), processedNodeType);
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
return xlrUtils.fillInGenerics(baseInterface, genericMap);
|
|
376
|
+
}
|
|
377
|
+
generateGenerics(params) {
|
|
378
|
+
const genericArray = [];
|
|
379
|
+
params == null ? void 0 : params.forEach((param) => {
|
|
380
|
+
const serializedObject = {
|
|
381
|
+
symbol: param.name.text
|
|
382
|
+
};
|
|
383
|
+
if (param.constraint) {
|
|
384
|
+
serializedObject.constraints = this.convertTsTypeNode(param.constraint);
|
|
385
|
+
} else {
|
|
386
|
+
serializedObject.constraints = AnyTypeNode;
|
|
387
|
+
}
|
|
388
|
+
if (param.default) {
|
|
389
|
+
serializedObject.default = this.convertTsTypeNode(param.default);
|
|
390
|
+
} else {
|
|
391
|
+
serializedObject.default = AnyTypeNode;
|
|
392
|
+
}
|
|
393
|
+
genericArray.push(serializedObject);
|
|
394
|
+
});
|
|
395
|
+
return genericArray;
|
|
396
|
+
}
|
|
397
|
+
resolveRefNode(node) {
|
|
398
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
399
|
+
let refName;
|
|
400
|
+
if (node.typeName.kind === ts__default["default"].SyntaxKind.QualifiedName) {
|
|
401
|
+
refName = `${node.typeName.left.getText()}.${node.typeName.right.getText()}`;
|
|
402
|
+
} else {
|
|
403
|
+
refName = node.typeName.text;
|
|
404
|
+
}
|
|
405
|
+
if (xlrUtils.isTypeReferenceGeneric(node, this.context.typeChecker)) {
|
|
406
|
+
if (ts__default["default"].isIndexedAccessTypeNode(node.parent)) {
|
|
407
|
+
const genericSymbol = this.context.typeChecker.getSymbolAtLocation(node.typeName);
|
|
408
|
+
const typeParameters = this.generateGenerics(genericSymbol == null ? void 0 : genericSymbol.declarations);
|
|
409
|
+
const typeParameter = typeParameters[0];
|
|
410
|
+
if (typeParameter) {
|
|
411
|
+
if (typeParameter.constraints) {
|
|
412
|
+
return typeParameter.constraints;
|
|
413
|
+
}
|
|
414
|
+
if (typeParameter.default) {
|
|
415
|
+
return typeParameter.default;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
return AnyTypeNode;
|
|
419
|
+
}
|
|
420
|
+
return __spreadValues$1({ type: "ref", ref: node.getText() }, xlrUtils.decorateNode(node));
|
|
421
|
+
}
|
|
422
|
+
if (refName === "Array") {
|
|
423
|
+
const typeArgs = node.typeArguments;
|
|
424
|
+
return __spreadValues$1({
|
|
425
|
+
type: "array",
|
|
426
|
+
elementType: typeArgs ? (_a = this.convertTsTypeNode(typeArgs[0])) != null ? _a : AnyTypeNode : AnyTypeNode
|
|
427
|
+
}, xlrUtils.decorateNode(node));
|
|
428
|
+
}
|
|
429
|
+
if (refName === "Record") {
|
|
430
|
+
const indexType = (_b = node.typeArguments) == null ? void 0 : _b[0];
|
|
431
|
+
const valueType = (_c = node.typeArguments) == null ? void 0 : _c[1];
|
|
432
|
+
return __spreadValues$1({
|
|
433
|
+
type: "record",
|
|
434
|
+
keyType: (_d = this.convertTsTypeNode(indexType)) != null ? _d : AnyTypeNode,
|
|
435
|
+
valueType: (_e = this.convertTsTypeNode(valueType)) != null ? _e : AnyTypeNode
|
|
436
|
+
}, xlrUtils.decorateNode(node));
|
|
437
|
+
}
|
|
438
|
+
if (refName === "Pick" || refName === "Omit") {
|
|
439
|
+
const baseType = (_f = node.typeArguments) == null ? void 0 : _f[0];
|
|
440
|
+
const modifiers = (_g = node.typeArguments) == null ? void 0 : _g[1];
|
|
441
|
+
const baseObj = this.convertTsTypeNode(baseType);
|
|
442
|
+
const modifierNames = xlrUtils.getStringLiteralsFromUnion(modifiers);
|
|
443
|
+
return (_h = xlrUtils.applyPickOrOmitToNodeType(baseObj, refName, modifierNames)) != null ? _h : {
|
|
444
|
+
type: "never"
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
if (refName === "Partial" || refName === "Required") {
|
|
448
|
+
const baseType = (_i = node.typeArguments) == null ? void 0 : _i[0];
|
|
449
|
+
const baseObj = this.convertTsTypeNode(baseType);
|
|
450
|
+
const modifier = refName !== "Partial";
|
|
451
|
+
return xlrUtils.applyPartialOrRequiredToNodeType(baseObj, modifier);
|
|
452
|
+
}
|
|
453
|
+
if (!this.context.customPrimitives.includes(refName)) {
|
|
454
|
+
const typeInfo = xlrUtils.getReferencedType(node, this.context.typeChecker);
|
|
455
|
+
if (typeInfo) {
|
|
456
|
+
const genericType = this.convertDeclaration(typeInfo.declaration);
|
|
457
|
+
const genericParams = typeInfo.declaration.typeParameters;
|
|
458
|
+
const genericArgs2 = node.typeArguments;
|
|
459
|
+
if (genericType && genericParams && genericArgs2) {
|
|
460
|
+
return this.solveGenerics(genericType, genericParams, genericArgs2);
|
|
461
|
+
}
|
|
462
|
+
if (genericType) {
|
|
463
|
+
return genericType;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
this.context.throwError(`Can't find referenced type ${refName}, is it available in the current package or node_modules?`);
|
|
467
|
+
}
|
|
468
|
+
const genericArgs = [];
|
|
469
|
+
if (node.typeArguments) {
|
|
470
|
+
node.typeArguments.forEach((typeArg) => {
|
|
471
|
+
let convertedNode;
|
|
472
|
+
if (xlrUtils.isTopLevelNode(typeArg)) {
|
|
473
|
+
convertedNode = this.convertDeclaration(typeArg);
|
|
474
|
+
} else {
|
|
475
|
+
convertedNode = this.convertTsTypeNode(typeArg);
|
|
476
|
+
}
|
|
477
|
+
if (convertedNode) {
|
|
478
|
+
genericArgs.push(convertedNode);
|
|
479
|
+
} else {
|
|
480
|
+
this.context.throwError(`Conversion Error: Couldn't convert type argument in type ${refName}`);
|
|
481
|
+
}
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
return __spreadProps(__spreadValues$1({
|
|
485
|
+
type: "ref",
|
|
486
|
+
ref: node.getText()
|
|
487
|
+
}, xlrUtils.decorateNode(node)), {
|
|
488
|
+
genericArguments: genericArgs.length > 0 ? genericArgs : void 0
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
var __defProp = Object.defineProperty;
|
|
494
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
495
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
496
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
497
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
498
|
+
var __spreadValues = (a, b) => {
|
|
499
|
+
for (var prop in b || (b = {}))
|
|
500
|
+
if (__hasOwnProp.call(b, prop))
|
|
501
|
+
__defNormalProp(a, prop, b[prop]);
|
|
502
|
+
if (__getOwnPropSymbols)
|
|
503
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
504
|
+
if (__propIsEnum.call(b, prop))
|
|
505
|
+
__defNormalProp(a, prop, b[prop]);
|
|
506
|
+
}
|
|
507
|
+
return a;
|
|
508
|
+
};
|
|
509
|
+
const templateSplit = /(?=true\|false|\.\*|\[0-9]\*)/gm;
|
|
510
|
+
class TSWriter {
|
|
511
|
+
constructor(factory) {
|
|
512
|
+
this.context = {
|
|
513
|
+
factory: factory != null ? factory : ts__default["default"].factory,
|
|
514
|
+
throwError: (message) => {
|
|
515
|
+
throw new ConversionError(message);
|
|
516
|
+
}
|
|
517
|
+
};
|
|
518
|
+
this.importSet = new Set();
|
|
519
|
+
this.additionalTypes = new Map();
|
|
520
|
+
}
|
|
521
|
+
convertNamedType(type) {
|
|
522
|
+
this.importSet.clear();
|
|
523
|
+
this.additionalTypes.clear();
|
|
524
|
+
const finalNode = this.convertNamedTypeNode(type);
|
|
525
|
+
const referencedTypes = this.importSet.size > 0 ? this.importSet : void 0;
|
|
526
|
+
const additionalTypes = this.additionalTypes.size > 0 ? this.additionalTypes : void 0;
|
|
527
|
+
return {
|
|
528
|
+
type: this.makeAnnotations(finalNode, type),
|
|
529
|
+
referencedTypes,
|
|
530
|
+
additionalTypes
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
convertNamedTypeNode(type) {
|
|
534
|
+
const typeName = type.name;
|
|
535
|
+
const tsNode = this.convertTypeNode(type);
|
|
536
|
+
let generics;
|
|
537
|
+
if (xlrUtils.isGenericNamedType(type)) {
|
|
538
|
+
generics = this.createTypeParameters(type);
|
|
539
|
+
}
|
|
540
|
+
let finalNode;
|
|
541
|
+
if (ts__default["default"].isTypeLiteralNode(tsNode)) {
|
|
542
|
+
finalNode = this.makeInterfaceDeclaration(typeName, tsNode.members, generics);
|
|
543
|
+
} else {
|
|
544
|
+
finalNode = this.makeTypeDeclaration(typeName, tsNode, generics);
|
|
545
|
+
}
|
|
546
|
+
return finalNode;
|
|
547
|
+
}
|
|
548
|
+
convertTypeNode(type) {
|
|
549
|
+
if (type.type === "object") {
|
|
550
|
+
return this.createObjectNode(type);
|
|
551
|
+
}
|
|
552
|
+
if (type.type === "and") {
|
|
553
|
+
return this.context.factory.createIntersectionTypeNode(type.and.map((element) => {
|
|
554
|
+
return this.convertTypeNode(element);
|
|
555
|
+
}));
|
|
556
|
+
}
|
|
557
|
+
if (type.type === "or") {
|
|
558
|
+
return this.context.factory.createUnionTypeNode(type.or.map((element) => {
|
|
559
|
+
return this.convertTypeNode(element);
|
|
560
|
+
}));
|
|
561
|
+
}
|
|
562
|
+
if (type.type === "array") {
|
|
563
|
+
return this.context.factory.createTypeReferenceNode(this.context.factory.createIdentifier("Array"), [this.convertTypeNode(type.elementType)]);
|
|
564
|
+
}
|
|
565
|
+
if (xlrUtils.isPrimitiveTypeNode(type)) {
|
|
566
|
+
return this.createPrimitiveNode(type);
|
|
567
|
+
}
|
|
568
|
+
if (type.type === "conditional") {
|
|
569
|
+
return this.createConditionalTypeNode(type);
|
|
570
|
+
}
|
|
571
|
+
if (type.type === "function") {
|
|
572
|
+
return this.createFunctionDeclarationNode(type);
|
|
573
|
+
}
|
|
574
|
+
if (type.type === "record") {
|
|
575
|
+
return this.createRecordNode(type);
|
|
576
|
+
}
|
|
577
|
+
if (type.type === "ref") {
|
|
578
|
+
return this.createRefNode(type);
|
|
579
|
+
}
|
|
580
|
+
if (type.type === "template") {
|
|
581
|
+
return this.createTemplateLiteral(type);
|
|
582
|
+
}
|
|
583
|
+
if (type.type === "tuple") {
|
|
584
|
+
return this.createTupleNode(type);
|
|
585
|
+
}
|
|
586
|
+
this.context.throwError(`Unable to convert node type: ${type.type}`);
|
|
587
|
+
}
|
|
588
|
+
createRefNode(xlrNode) {
|
|
589
|
+
if (xlrNode.genericArguments) {
|
|
590
|
+
xlrNode.genericArguments.forEach((genericArg) => {
|
|
591
|
+
if (genericArg.name) {
|
|
592
|
+
const additionalType = this.convertNamedTypeNode(genericArg);
|
|
593
|
+
this.additionalTypes.set(genericArg.name, additionalType);
|
|
594
|
+
} else if (genericArg.type === "and") {
|
|
595
|
+
genericArg.and.forEach((type) => {
|
|
596
|
+
if (type.name) {
|
|
597
|
+
const additionalType = this.convertNamedTypeNode(type);
|
|
598
|
+
this.additionalTypes.set(type.name, additionalType);
|
|
599
|
+
}
|
|
600
|
+
});
|
|
601
|
+
} else if (genericArg.type === "or") {
|
|
602
|
+
genericArg.or.forEach((type) => {
|
|
603
|
+
if (type.name) {
|
|
604
|
+
const additionalType = this.convertNamedTypeNode(type);
|
|
605
|
+
this.additionalTypes.set(type.name, additionalType);
|
|
606
|
+
}
|
|
607
|
+
});
|
|
608
|
+
}
|
|
609
|
+
});
|
|
610
|
+
}
|
|
611
|
+
const importName = xlrNode.ref.split("<")[0];
|
|
612
|
+
this.importSet.add(importName);
|
|
613
|
+
return this.context.factory.createTypeReferenceNode(xlrNode.ref);
|
|
614
|
+
}
|
|
615
|
+
createPrimitiveNode(xlrNode) {
|
|
616
|
+
if ((xlrNode.type === "string" || xlrNode.type === "boolean" || xlrNode.type === "number") && xlrNode.const || xlrNode.type === "null") {
|
|
617
|
+
return this.context.factory.createLiteralTypeNode(this.createLiteralTypeNode(xlrNode));
|
|
618
|
+
}
|
|
619
|
+
switch (xlrNode.type) {
|
|
620
|
+
case "string":
|
|
621
|
+
return this.context.factory.createKeywordTypeNode(ts__default["default"].SyntaxKind.StringKeyword);
|
|
622
|
+
case "number":
|
|
623
|
+
return this.context.factory.createKeywordTypeNode(ts__default["default"].SyntaxKind.NumberKeyword);
|
|
624
|
+
case "boolean":
|
|
625
|
+
return this.context.factory.createKeywordTypeNode(ts__default["default"].SyntaxKind.BooleanKeyword);
|
|
626
|
+
case "any":
|
|
627
|
+
return this.context.factory.createKeywordTypeNode(ts__default["default"].SyntaxKind.AnyKeyword);
|
|
628
|
+
case "unknown":
|
|
629
|
+
return this.context.factory.createKeywordTypeNode(ts__default["default"].SyntaxKind.UnknownKeyword);
|
|
630
|
+
case "never":
|
|
631
|
+
return this.context.factory.createKeywordTypeNode(ts__default["default"].SyntaxKind.NeverKeyword);
|
|
632
|
+
case "undefined":
|
|
633
|
+
return this.context.factory.createKeywordTypeNode(ts__default["default"].SyntaxKind.UndefinedKeyword);
|
|
634
|
+
default:
|
|
635
|
+
this.context.throwError(`Unknown primitive type ${xlrNode.type}`);
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
createLiteralTypeNode(xlrNode) {
|
|
639
|
+
if (xlrNode.type === "boolean") {
|
|
640
|
+
return xlrNode.const ? this.context.factory.createTrue() : this.context.factory.createFalse();
|
|
641
|
+
}
|
|
642
|
+
if (xlrNode.type === "number") {
|
|
643
|
+
return xlrNode.const ? this.context.factory.createNumericLiteral(xlrNode.const) : this.context.throwError("Can't make literal type out of non constant number");
|
|
644
|
+
}
|
|
645
|
+
if (xlrNode.type === "string") {
|
|
646
|
+
return xlrNode.const ? this.context.factory.createStringLiteral(xlrNode.const) : this.context.throwError("Can't make literal type out of non constant string");
|
|
647
|
+
}
|
|
648
|
+
if (xlrNode.type === "null") {
|
|
649
|
+
return this.context.factory.createNull();
|
|
650
|
+
}
|
|
651
|
+
this.context.throwError(`Can't make literal out of type ${xlrNode.type}`);
|
|
652
|
+
}
|
|
653
|
+
createTupleNode(xlrNode) {
|
|
654
|
+
return this.context.factory.createTupleTypeNode(xlrNode.elementTypes.map((e) => this.convertTypeNode(e)));
|
|
655
|
+
}
|
|
656
|
+
createFunctionDeclarationNode(xlrNode) {
|
|
657
|
+
return this.context.factory.createFunctionTypeNode(void 0, xlrNode.parameters.map((e) => {
|
|
658
|
+
return this.context.factory.createParameterDeclaration(void 0, void 0, void 0, e.name, e.optional ? this.context.factory.createToken(ts__default["default"].SyntaxKind.QuestionToken) : void 0, this.convertTypeNode(e.type), e.default ? this.createLiteralTypeNode(e.default) : void 0);
|
|
659
|
+
}), xlrNode.returnType ? this.convertTypeNode(xlrNode.returnType) : this.context.factory.createToken(ts__default["default"].SyntaxKind.VoidKeyword));
|
|
660
|
+
}
|
|
661
|
+
createRecordNode(xlrNode) {
|
|
662
|
+
const keyType = this.convertTypeNode(xlrNode.keyType);
|
|
663
|
+
const valueType = this.convertTypeNode(xlrNode.valueType);
|
|
664
|
+
return this.context.factory.createTypeReferenceNode(this.context.factory.createIdentifier("Record"), [keyType, valueType]);
|
|
665
|
+
}
|
|
666
|
+
createConditionalTypeNode(xlrNode) {
|
|
667
|
+
const leftCheck = this.convertTypeNode(xlrNode.check.left);
|
|
668
|
+
const rightCheck = this.convertTypeNode(xlrNode.check.right);
|
|
669
|
+
const trueValue = this.convertTypeNode(xlrNode.value.true);
|
|
670
|
+
const falseValue = this.convertTypeNode(xlrNode.value.false);
|
|
671
|
+
return this.context.factory.createConditionalTypeNode(leftCheck, rightCheck, trueValue, falseValue);
|
|
672
|
+
}
|
|
673
|
+
createObjectNode(xlrNode) {
|
|
674
|
+
const { properties, additionalProperties = false } = xlrNode;
|
|
675
|
+
const propertyNodes = [
|
|
676
|
+
...Object.keys(properties).map((name) => __spreadValues({ name }, properties[name])).map(({ name, node, required }) => this.makeAnnotations(this.context.factory.createPropertySignature(void 0, name, required ? void 0 : this.context.factory.createToken(ts__default["default"].SyntaxKind.QuestionToken), this.convertTypeNode(node)), node))
|
|
677
|
+
];
|
|
678
|
+
if (additionalProperties) {
|
|
679
|
+
propertyNodes.push(this.context.factory.createIndexSignature(void 0, void 0, [
|
|
680
|
+
this.context.factory.createParameterDeclaration(void 0, void 0, void 0, "key", void 0, this.context.factory.createKeywordTypeNode(ts__default["default"].SyntaxKind.StringKeyword))
|
|
681
|
+
], this.convertTypeNode(additionalProperties)));
|
|
682
|
+
}
|
|
683
|
+
return this.context.factory.createTypeLiteralNode(propertyNodes);
|
|
684
|
+
}
|
|
685
|
+
createTemplateLiteral(xlrNode) {
|
|
686
|
+
const templateSegments = xlrNode.format.split(templateSplit);
|
|
687
|
+
let templateHead;
|
|
688
|
+
if (templateSegments.length % 2) {
|
|
689
|
+
templateHead = this.context.factory.createTemplateHead(templateSegments[0]);
|
|
690
|
+
templateSegments.splice(0, 1);
|
|
691
|
+
} else {
|
|
692
|
+
templateHead = this.context.factory.createTemplateHead("");
|
|
693
|
+
}
|
|
694
|
+
return this.context.factory.createTemplateLiteralType(templateHead, templateSegments.map((segments, i) => {
|
|
695
|
+
const [regexSegment, stringSegment] = segments.split(" ", 1);
|
|
696
|
+
let regexTemplateType;
|
|
697
|
+
if (regexSegment === ".*") {
|
|
698
|
+
regexTemplateType = ts__default["default"].SyntaxKind.StringKeyword;
|
|
699
|
+
} else if (regexSegment === "[0-9]*") {
|
|
700
|
+
regexTemplateType = ts__default["default"].SyntaxKind.NumberKeyword;
|
|
701
|
+
} else if (regexSegment === "true|false") {
|
|
702
|
+
regexTemplateType = ts__default["default"].SyntaxKind.BooleanKeyword;
|
|
703
|
+
} else {
|
|
704
|
+
this.context.throwError(`Can't make template literal type from regex ${regexSegment}`);
|
|
705
|
+
}
|
|
706
|
+
let stringTemplateType;
|
|
707
|
+
if (i === templateSegments.length - 1) {
|
|
708
|
+
stringTemplateType = this.context.factory.createTemplateTail(stringSegment);
|
|
709
|
+
} else {
|
|
710
|
+
stringTemplateType = this.context.factory.createTemplateMiddle(stringSegment);
|
|
711
|
+
}
|
|
712
|
+
return this.context.factory.createTemplateLiteralTypeSpan(this.context.factory.createKeywordTypeNode(regexTemplateType), stringTemplateType);
|
|
713
|
+
}));
|
|
714
|
+
}
|
|
715
|
+
createGenericArgumentNode(node) {
|
|
716
|
+
if (node) {
|
|
717
|
+
if (node.type === "object" && node.name) {
|
|
718
|
+
const additionalType = this.convertNamedTypeNode(node);
|
|
719
|
+
this.additionalTypes.set(node.name, additionalType);
|
|
720
|
+
return this.context.factory.createTypeReferenceNode(node.name);
|
|
721
|
+
}
|
|
722
|
+
return this.convertTypeNode(node);
|
|
723
|
+
}
|
|
724
|
+
return void 0;
|
|
725
|
+
}
|
|
726
|
+
makeAnnotations(tsNode, xlrAnnotations) {
|
|
727
|
+
let comment = xlrAnnotations.description;
|
|
728
|
+
if (!comment) {
|
|
729
|
+
return tsNode;
|
|
730
|
+
}
|
|
731
|
+
if (comment.includes("\n")) {
|
|
732
|
+
comment = `*
|
|
733
|
+
${comment.split("\n").map((s) => ` * ${s}`).join("\n")}
|
|
734
|
+
`;
|
|
735
|
+
} else {
|
|
736
|
+
comment = `* ${comment} `;
|
|
737
|
+
}
|
|
738
|
+
return ts__default["default"].addSyntheticLeadingComment(tsNode, ts__default["default"].SyntaxKind.MultiLineCommentTrivia, comment, true);
|
|
739
|
+
}
|
|
740
|
+
createTypeParameters(genericxlrNode) {
|
|
741
|
+
return genericxlrNode.genericTokens.map((generic) => {
|
|
742
|
+
return this.context.factory.createTypeParameterDeclaration(generic.symbol, this.createGenericArgumentNode(generic.constraints), this.createGenericArgumentNode(generic.default));
|
|
743
|
+
});
|
|
744
|
+
}
|
|
745
|
+
makeInterfaceDeclaration(name, node, generics) {
|
|
746
|
+
return this.context.factory.createInterfaceDeclaration(void 0, this.context.factory.createModifiersFromModifierFlags(ts__default["default"].ModifierFlags.Export), this.context.factory.createIdentifier(name), generics, void 0, node);
|
|
747
|
+
}
|
|
748
|
+
makeTypeDeclaration(name, node, generics) {
|
|
749
|
+
return this.context.factory.createTypeAliasDeclaration(void 0, this.context.factory.createModifiersFromModifierFlags(ts__default["default"].ModifierFlags.Export), this.context.factory.createIdentifier(name), generics, node);
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
exports.ConversionError = ConversionError;
|
|
754
|
+
exports.TSWriter = TSWriter;
|
|
755
|
+
exports.TsConverter = TsConverter;
|
|
756
|
+
//# sourceMappingURL=index.cjs.js.map
|