@bikky/compiler 0.1.18 → 0.2.1
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/.idea/Compiler.iml +1 -0
- package/.idea/scopes/All_Typescript_Files.xml +3 -0
- package/Execution/generate.mjs +24 -21
- package/Execution/generate.mjs.map +1 -1
- package/Execution/generate.mts +34 -26
- package/Libraries/BiscuitLibraries.d.mts +2 -0
- package/Libraries/BiscuitLibraries.d.mts.map +1 -1
- package/Libraries/BiscuitLibraries.mjs +4 -0
- package/Libraries/BiscuitLibraries.mjs.map +1 -1
- package/Libraries/BiscuitLibraries.mts +5 -1
- package/Libraries/ClassMigration.d.mts +88 -0
- package/Libraries/ClassMigration.d.mts.map +1 -0
- package/Libraries/ClassMigration.mjs +368 -0
- package/Libraries/ClassMigration.mjs.map +1 -0
- package/Libraries/ClassMigration.mts +431 -0
- package/Libraries/RBF.d.mts +4 -0
- package/Libraries/RBF.d.mts.map +1 -0
- package/Libraries/RBF.mjs +36 -0
- package/Libraries/RBF.mjs.map +1 -0
- package/Libraries/RBF.mts +46 -0
- package/Libraries/RBFTypes.d.ts +43 -0
- package/Source/ASTInterface/Crawler.d.ts +2 -1
- package/Source/ASTInterface/Crawler.d.ts.map +1 -1
- package/Source/ASTInterface/Crawler.js +14 -2
- package/Transformers/Main.d.ts +1 -1
- package/Transformers/Main.d.ts.map +1 -1
- package/Transformers/Main.js +3 -2
- package/Transformers/RBFHelpers/Constants.d.ts +3 -0
- package/Transformers/RBFHelpers/Constants.d.ts.map +1 -0
- package/Transformers/RBFHelpers/Constants.js +7 -0
- package/Transformers/RBFHelpers/Imports.d.ts +12 -0
- package/Transformers/RBFHelpers/Imports.d.ts.map +1 -0
- package/Transformers/RBFHelpers/Imports.js +212 -0
- package/Transformers/RBFHelpers/Print.d.ts +1 -0
- package/Transformers/RBFHelpers/Print.d.ts.map +1 -0
- package/Transformers/RBFHelpers/Print.js +2 -0
- package/Transformers/RBFHelpers/PropertyConfig.d.ts +65 -0
- package/Transformers/RBFHelpers/PropertyConfig.d.ts.map +1 -0
- package/Transformers/RBFHelpers/PropertyConfig.js +420 -0
- package/Transformers/RBFTransformer.d.ts +2 -0
- package/Transformers/RBFTransformer.d.ts.map +1 -0
- package/Transformers/RBFTransformer.js +317 -0
- package/package.json +1 -1
- package/tsconfig.build.libs.tsbuildinfo +1 -1
- package/tsconfig.build.src.tsbuildinfo +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/Transformers/ReplicableTransformer.d.ts +0 -2
- package/Transformers/ReplicableTransformer.d.ts.map +0 -1
- package/Transformers/ReplicableTransformer.js +0 -797
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertTypeToDeclarationFormats = exports.MakeRBFTypes = exports.PropertyConfig = void 0;
|
|
4
|
+
/// <reference type="../../Libraries/GlobalTypes.d.ts">
|
|
5
|
+
const ts = require("../../Cache/typescript.js");
|
|
6
|
+
const ASTHelper_js_1 = require("../../Source/ASTHelper.js");
|
|
7
|
+
const Crawler_js_1 = require("../../Source/ASTInterface/Crawler.js");
|
|
8
|
+
const Imports_js_1 = require("./Imports.js");
|
|
9
|
+
const ts_clone_node_1 = require("ts-clone-node");
|
|
10
|
+
var printNode = ASTHelper_js_1.Printer.printNode;
|
|
11
|
+
var PropertyConfig;
|
|
12
|
+
(function (PropertyConfig) {
|
|
13
|
+
var printNode = ASTHelper_js_1.Printer.printNode;
|
|
14
|
+
PropertyConfig.primitiveReaders = {
|
|
15
|
+
String: {
|
|
16
|
+
tryReadLiteral: (node) => {
|
|
17
|
+
return ts.isStringLiteral(node) ? node.text : null;
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
Boolean: {
|
|
21
|
+
tryReadLiteral(node) {
|
|
22
|
+
return node.kind === ts.SyntaxKind.TrueKeyword ? true : node.kind === ts.SyntaxKind.FalseKeyword ? false : null;
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
Number: {
|
|
26
|
+
tryReadLiteral(node) {
|
|
27
|
+
return ts.isNumericLiteral(node) ? (node.text.includes(".") ?
|
|
28
|
+
parseInt(node.text) : parseFloat(node.text)) : null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
function extractConfigData(arg, optional) {
|
|
33
|
+
let result = {}; //RBFTypes.PropertyConfiguration
|
|
34
|
+
//iterate each property.
|
|
35
|
+
for (let pa of arg.properties) {
|
|
36
|
+
if (!ts.isPropertyAssignment(pa)) {
|
|
37
|
+
(0, ASTHelper_js_1.logError)(pa, `@Property preprocessor command only accepts literal property assignments.`);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
let name = pa.name.getText();
|
|
41
|
+
switch (name) {
|
|
42
|
+
case "computed": {
|
|
43
|
+
let value = PropertyConfig.primitiveReaders.Boolean.tryReadLiteral(pa.initializer);
|
|
44
|
+
if (value === null) {
|
|
45
|
+
value = PropertyConfig.primitiveReaders.String.tryReadLiteral(pa.initializer);
|
|
46
|
+
}
|
|
47
|
+
if (value === null || (typeof value === "string" && value !== "manualLoad")) {
|
|
48
|
+
(0, ASTHelper_js_1.logError)(pa, `@Property's ${name} value can only be "manualLoad" or boolean literal.`);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
result[name] = value;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
case "dataName": {
|
|
55
|
+
let value = PropertyConfig.primitiveReaders.String.tryReadLiteral(pa.initializer);
|
|
56
|
+
if (value === null) {
|
|
57
|
+
(0, ASTHelper_js_1.logError)(pa, `@Property's ${name} value must be a string.`);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
result[name] = value;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
case "customLoad":
|
|
64
|
+
case "readonly":
|
|
65
|
+
case "manualRestore":
|
|
66
|
+
case "expression":
|
|
67
|
+
case "setter":
|
|
68
|
+
case "inline":
|
|
69
|
+
case "optional":
|
|
70
|
+
case "id": {
|
|
71
|
+
let value = PropertyConfig.primitiveReaders.Boolean.tryReadLiteral(pa.initializer);
|
|
72
|
+
if (value === null) {
|
|
73
|
+
(0, ASTHelper_js_1.logError)(pa, `@Property's ${name} value must be a boolean.`);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
result[name] = value;
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
case "default": {
|
|
80
|
+
result[name] = printNode(pa, Crawler_js_1.Crawler.GetFile().ts, ts.EmitHint.Unspecified);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
(0, ASTHelper_js_1.logError)(pa, `Invalid value for @Property configuration, ${name}`);
|
|
85
|
+
}
|
|
86
|
+
if (!("optional" in result)) {
|
|
87
|
+
result.optional = optional;
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
PropertyConfig.extractConfigData = extractConfigData;
|
|
92
|
+
})(PropertyConfig || (exports.PropertyConfig = PropertyConfig = {}));
|
|
93
|
+
var MakeRBFTypes;
|
|
94
|
+
(function (MakeRBFTypes) {
|
|
95
|
+
MakeRBFTypes.primitiveReaders = {
|
|
96
|
+
Array: {
|
|
97
|
+
shouldGroup: false,
|
|
98
|
+
serialisedName: "Array",
|
|
99
|
+
isThisType: (node) => {
|
|
100
|
+
if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.text === "Array") {
|
|
101
|
+
return {
|
|
102
|
+
valid: true,
|
|
103
|
+
containsTypes: [...node.typeArguments]
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
if (!ts.isArrayTypeNode(node))
|
|
107
|
+
return false;
|
|
108
|
+
return {
|
|
109
|
+
valid: true,
|
|
110
|
+
containsTypes: [node.elementType],
|
|
111
|
+
};
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
Dict: {
|
|
115
|
+
shouldGroup: false,
|
|
116
|
+
serialisedName: "Dict",
|
|
117
|
+
//{[index: first]: second}
|
|
118
|
+
isThisType: (node) => {
|
|
119
|
+
if (ts.isTypeLiteralNode(node) && node.members.length === 1 && node.members[0].kind == ts.SyntaxKind.IndexSignature) {
|
|
120
|
+
let signature = node.members[0];
|
|
121
|
+
return {
|
|
122
|
+
valid: true,
|
|
123
|
+
containsTypes: [signature.parameters[0].type, signature.type]
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
Map: {
|
|
130
|
+
shouldGroup: false,
|
|
131
|
+
serialisedName: "Map",
|
|
132
|
+
isThisType: (node) => {
|
|
133
|
+
if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.text === "Map") {
|
|
134
|
+
return {
|
|
135
|
+
valid: true,
|
|
136
|
+
containsTypes: [...node.typeArguments]
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
String: {
|
|
143
|
+
shouldGroup: true,
|
|
144
|
+
serialisedName: "Primitive",
|
|
145
|
+
isThisType: (node) => {
|
|
146
|
+
if (node.kind === ts.SyntaxKind.StringKeyword) {
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
if (ts.isLiteralTypeNode(node) && node.literal.kind === ts.SyntaxKind.StringLiteral) {
|
|
150
|
+
return {
|
|
151
|
+
valid: true,
|
|
152
|
+
values: [node.literal.text]
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
return false;
|
|
156
|
+
},
|
|
157
|
+
tryReadLiteral: (node) => {
|
|
158
|
+
return ts.isStringLiteral(node) ? node.text : null;
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
Boolean: {
|
|
162
|
+
shouldGroup: true,
|
|
163
|
+
serialisedName: "Primitive",
|
|
164
|
+
isThisType: (node) => {
|
|
165
|
+
if (node.kind == ts.SyntaxKind.BooleanKeyword) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
else if (ts.isLiteralTypeNode(node)) {
|
|
169
|
+
if (node.literal.kind === ts.SyntaxKind.TrueKeyword) {
|
|
170
|
+
return {
|
|
171
|
+
valid: true,
|
|
172
|
+
values: [true]
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
else if (node.literal.kind === ts.SyntaxKind.FalseKeyword) {
|
|
176
|
+
return {
|
|
177
|
+
valid: true,
|
|
178
|
+
values: [false]
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return false;
|
|
183
|
+
},
|
|
184
|
+
tryReadLiteral(node) {
|
|
185
|
+
return node.kind === ts.SyntaxKind.TrueKeyword ? true : node.kind === ts.SyntaxKind.FalseKeyword ? false : null;
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
Number: {
|
|
189
|
+
shouldGroup: true,
|
|
190
|
+
serialisedName: "Primitive",
|
|
191
|
+
isThisType: (node) => {
|
|
192
|
+
if (node.kind === ts.SyntaxKind.NumberKeyword) {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
if (ts.isLiteralTypeNode(node) && node.literal.kind === ts.SyntaxKind.NumericLiteral) {
|
|
196
|
+
return {
|
|
197
|
+
valid: true,
|
|
198
|
+
values: [node.literal.text.includes(".") ?
|
|
199
|
+
parseInt(node.literal.text) : parseFloat(node.literal.text),]
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
return false;
|
|
203
|
+
},
|
|
204
|
+
tryReadLiteral(node) {
|
|
205
|
+
return ts.isNumericLiteral(node) ? (node.text.includes(".") ?
|
|
206
|
+
parseInt(node.text) : parseFloat(node.text)) : null;
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
Object: {
|
|
210
|
+
shouldGroup: false,
|
|
211
|
+
serialisedName: "Object",
|
|
212
|
+
isThisType: (node) => {
|
|
213
|
+
return ts.isTypeLiteralNode(node) || node.kind === ts.SyntaxKind.AnyKeyword;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
function recurseBasicType(child, childrenTypes) {
|
|
218
|
+
for (let readerName of Object.getOwnPropertyNames(MakeRBFTypes.primitiveReaders)) {
|
|
219
|
+
let reader = MakeRBFTypes.primitiveReaders[readerName];
|
|
220
|
+
let result = reader.isThisType(child);
|
|
221
|
+
if (result === false)
|
|
222
|
+
continue;
|
|
223
|
+
if (result === true) {
|
|
224
|
+
//Empty!
|
|
225
|
+
childrenTypes[readerName] = {};
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
if (!result.valid)
|
|
229
|
+
continue;
|
|
230
|
+
if (!childrenTypes[readerName]) {
|
|
231
|
+
childrenTypes[readerName] = {};
|
|
232
|
+
}
|
|
233
|
+
if (result.values) {
|
|
234
|
+
if (!childrenTypes[readerName].values) {
|
|
235
|
+
childrenTypes[readerName].values = [];
|
|
236
|
+
}
|
|
237
|
+
childrenTypes[readerName].values.push(...result.values);
|
|
238
|
+
}
|
|
239
|
+
if (result.containsTypes) {
|
|
240
|
+
if (!childrenTypes[readerName].subTypes) {
|
|
241
|
+
childrenTypes[readerName].subTypes = [];
|
|
242
|
+
}
|
|
243
|
+
childrenTypes[readerName].subTypes.push(...result.containsTypes.map((e) => recursivelyConvertType(e)));
|
|
244
|
+
}
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
if (ts.isTypeReferenceNode(child) && ts.isIdentifier(child.typeName)) {
|
|
248
|
+
childrenTypes[child.typeName.text] = {};
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
(0, ASTHelper_js_1.logError)(child, `Unsupported type value for @Property, @Get or @Function syntax :${ts.SyntaxKind[child.kind]}`);
|
|
252
|
+
childrenTypes["Unknown"] = {};
|
|
253
|
+
}
|
|
254
|
+
MakeRBFTypes.recurseBasicType = recurseBasicType;
|
|
255
|
+
function recursivelyConvertType(typeNode) {
|
|
256
|
+
if (ts.isUnionTypeNode(typeNode)) {
|
|
257
|
+
let childrenTypes = {};
|
|
258
|
+
loopUnionContents: for (let child of typeNode.types) {
|
|
259
|
+
recurseBasicType(child, childrenTypes);
|
|
260
|
+
}
|
|
261
|
+
let names = Object.getOwnPropertyNames(childrenTypes);
|
|
262
|
+
if (names.length === 1) {
|
|
263
|
+
let name = names[0];
|
|
264
|
+
let type = childrenTypes[name];
|
|
265
|
+
return {
|
|
266
|
+
Is: name,
|
|
267
|
+
RestrictedTo: type.values,
|
|
268
|
+
Containing: type.subTypes,
|
|
269
|
+
};
|
|
270
|
+
;
|
|
271
|
+
}
|
|
272
|
+
return {
|
|
273
|
+
OR: Object.getOwnPropertyNames(childrenTypes).map((name) => {
|
|
274
|
+
return {
|
|
275
|
+
Is: name,
|
|
276
|
+
RestrictedTo: childrenTypes[name].values,
|
|
277
|
+
Containing: childrenTypes[name].subTypes,
|
|
278
|
+
};
|
|
279
|
+
})
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
let childrenTypes = {};
|
|
283
|
+
recurseBasicType(typeNode, childrenTypes);
|
|
284
|
+
let name = Object.getOwnPropertyNames(childrenTypes)[0];
|
|
285
|
+
let type = childrenTypes[name];
|
|
286
|
+
return {
|
|
287
|
+
Is: name,
|
|
288
|
+
RestrictedTo: type.values,
|
|
289
|
+
Containing: type.subTypes,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
MakeRBFTypes.recursivelyConvertType = recursivelyConvertType;
|
|
293
|
+
})(MakeRBFTypes || (exports.MakeRBFTypes = MakeRBFTypes = {}));
|
|
294
|
+
const PlainTypes = [
|
|
295
|
+
ts.SyntaxKind.AnyKeyword,
|
|
296
|
+
ts.SyntaxKind.UnknownKeyword,
|
|
297
|
+
ts.SyntaxKind.StringKeyword,
|
|
298
|
+
ts.SyntaxKind.NumberKeyword,
|
|
299
|
+
ts.SyntaxKind.BigIntKeyword,
|
|
300
|
+
ts.SyntaxKind.BooleanKeyword,
|
|
301
|
+
ts.SyntaxKind.SymbolKeyword,
|
|
302
|
+
ts.SyntaxKind.VoidKeyword,
|
|
303
|
+
ts.SyntaxKind.UndefinedKeyword,
|
|
304
|
+
ts.SyntaxKind.NullKeyword,
|
|
305
|
+
ts.SyntaxKind.ThisKeyword,
|
|
306
|
+
ts.SyntaxKind.NeverKeyword,
|
|
307
|
+
];
|
|
308
|
+
function convertTypeToDeclarationFormats(postfixes, node) {
|
|
309
|
+
node = (0, ts_clone_node_1.cloneNode)(node, { factory: Crawler_js_1.Crawler.getContext().factory });
|
|
310
|
+
/**
|
|
311
|
+
* Update the provided type reference's identifiers to use the provided postfixes.
|
|
312
|
+
*/
|
|
313
|
+
function importAndConvertIdentifiers(typeNode, typeArgs) {
|
|
314
|
+
let className = ts.isQualifiedName(typeNode.typeName) ? typeNode.typeName.right.text : typeNode.typeName.text;
|
|
315
|
+
//Handle edge-cases for built-in types. We don't map them to serialised classes we treat them as primitives.
|
|
316
|
+
if (ts.isIdentifier(typeNode.typeName) && (className === "Array" || className === "Map" || className === "Set")) {
|
|
317
|
+
let results = [ts.factory.updateTypeReferenceNode(typeNode, typeNode.typeName, typeArgs)];
|
|
318
|
+
if (postfixes.includes("SerialisedReference")) {
|
|
319
|
+
let serialised = ts.factory.createTupleTypeNode([
|
|
320
|
+
ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(className)),
|
|
321
|
+
ts.factory.updateTypeReferenceNode(typeNode, typeNode.typeName, typeArgs)
|
|
322
|
+
]);
|
|
323
|
+
if (postfixes.length > 1) {
|
|
324
|
+
results.push(serialised);
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
results[0] = serialised;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
if (results.length === 1)
|
|
331
|
+
return results[0];
|
|
332
|
+
return ts.factory.createUnionTypeNode(results);
|
|
333
|
+
}
|
|
334
|
+
//Add necessary imports to file.
|
|
335
|
+
Imports_js_1.Imports.requestClassImport(typeNode.typeName, postfixes);
|
|
336
|
+
let results = [];
|
|
337
|
+
for (let postfix of postfixes) {
|
|
338
|
+
let renamedNode = (0, ts_clone_node_1.cloneNode)(typeNode.typeName);
|
|
339
|
+
//Update the name.
|
|
340
|
+
{
|
|
341
|
+
let newNameNode = ts.factory.createIdentifier(className + postfix);
|
|
342
|
+
if (ts.isQualifiedName(renamedNode)) {
|
|
343
|
+
ts.factory.updateQualifiedName(renamedNode, renamedNode.left, newNameNode);
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
renamedNode = newNameNode;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
let finalType = ts.factory.createTypeReferenceNode(renamedNode, typeArgs ? ts.factory.createNodeArray(typeArgs.map((e) => (0, ts_clone_node_1.cloneNode)(e))) : undefined);
|
|
350
|
+
results.push(finalType);
|
|
351
|
+
}
|
|
352
|
+
if (results.length === 1)
|
|
353
|
+
return results[0];
|
|
354
|
+
return ts.factory.createUnionTypeNode(results);
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Recursively search through the typing nodes and convert any discovered identifiers to have
|
|
358
|
+
* the supplied postfixes.
|
|
359
|
+
*/
|
|
360
|
+
function findIdentifiers(typeNode) {
|
|
361
|
+
var _a;
|
|
362
|
+
//TODO: Throw a hissy fit if the `this` type keyword is used - or just replace it with whatever the current
|
|
363
|
+
// class is.
|
|
364
|
+
if (ts.isUnionTypeNode(typeNode)) {
|
|
365
|
+
return ts.visitEachChild(typeNode, findIdentifiers, Crawler_js_1.Crawler.getContext());
|
|
366
|
+
}
|
|
367
|
+
else if (ts.isArrayTypeNode(typeNode)) {
|
|
368
|
+
typeNode = ts.factory.updateArrayTypeNode(typeNode, ts.visitNode(typeNode.elementType, findIdentifiers));
|
|
369
|
+
if (postfixes.includes("SerialisedReference")) {
|
|
370
|
+
if (postfixes.length > 1) {
|
|
371
|
+
return ts.factory.createUnionTypeNode([ts.factory.createTupleTypeNode([ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral("Array")), typeNode]),
|
|
372
|
+
(0, ts_clone_node_1.cloneNode)(typeNode)]);
|
|
373
|
+
}
|
|
374
|
+
return ts.factory.createTupleTypeNode([ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral("Array")), typeNode]);
|
|
375
|
+
}
|
|
376
|
+
return typeNode;
|
|
377
|
+
}
|
|
378
|
+
//Handle {[name: string]: MyThing}
|
|
379
|
+
else if (ts.isTypeLiteralNode(typeNode) && typeNode.members.length === 1 && ts.isIndexSignatureDeclaration(typeNode.members[0])) {
|
|
380
|
+
//Change MyThing to MyThingSerialisedReference or MyThingData or whatever's good.
|
|
381
|
+
typeNode = ts.factory.updateTypeLiteralNode(typeNode, ts.factory.createNodeArray(typeNode.members.map((e) => {
|
|
382
|
+
let decl = e;
|
|
383
|
+
return ts.factory.updateIndexSignature(decl, decl.modifiers, decl.parameters, ts.visitNode(decl.type, findIdentifiers));
|
|
384
|
+
})));
|
|
385
|
+
//If this is serialised we need to make it ["Dict", {[name: string]: MyThing}] (and union it if we're
|
|
386
|
+
// trying for more than one type.
|
|
387
|
+
if (postfixes.includes("SerialisedReference")) {
|
|
388
|
+
if (postfixes.length > 1) {
|
|
389
|
+
return ts.factory.createUnionTypeNode([ts.factory.createTupleTypeNode([ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral("Dict")), typeNode]),
|
|
390
|
+
(0, ts_clone_node_1.cloneNode)(typeNode)]);
|
|
391
|
+
}
|
|
392
|
+
return ts.factory.createTupleTypeNode([ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral("Dict")), typeNode]);
|
|
393
|
+
}
|
|
394
|
+
// return the result!
|
|
395
|
+
return typeNode;
|
|
396
|
+
}
|
|
397
|
+
else if (ts.isTypeReferenceNode(typeNode)) {
|
|
398
|
+
let typeArgs = (_a = typeNode.typeArguments) === null || _a === void 0 ? void 0 : _a.map((e) => {
|
|
399
|
+
return (PlainTypes.includes(e.kind) || ts.isTypeLiteralNode(e)) ? e : ts.visitNode(e, findIdentifiers);
|
|
400
|
+
});
|
|
401
|
+
let result = importAndConvertIdentifiers(typeNode, typeArgs ? ts.factory.createNodeArray(typeArgs) : undefined);
|
|
402
|
+
return result;
|
|
403
|
+
}
|
|
404
|
+
else {
|
|
405
|
+
if (postfixes.includes("SerialisedReference")) {
|
|
406
|
+
if (postfixes.length > 1) {
|
|
407
|
+
return ts.factory.createUnionTypeNode([ts.factory.createTupleTypeNode([ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral("Primitive")), typeNode]),
|
|
408
|
+
(0, ts_clone_node_1.cloneNode)(typeNode)]);
|
|
409
|
+
}
|
|
410
|
+
return ts.factory.createTupleTypeNode([ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral("Primitive")), typeNode]);
|
|
411
|
+
}
|
|
412
|
+
return typeNode;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
let resultType = ts.visitNode(node, findIdentifiers);
|
|
416
|
+
let resultString = printNode(resultType, Crawler_js_1.Crawler.GetFile().ts, ts.EmitHint.Unspecified);
|
|
417
|
+
return resultString.replace(/(?:\n|\t| {4})/g, "");
|
|
418
|
+
}
|
|
419
|
+
exports.convertTypeToDeclarationFormats = convertTypeToDeclarationFormats;
|
|
420
|
+
//# sourceMappingURL=PropertyConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RBFTransformer.d.ts","sourceRoot":"","sources":["RBFTransformer.ts"],"names":[],"mappings":""}
|