@runtime-type-inspector/transpiler 2.0.15 → 2.1.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/index.cjs +173 -51
- package/index.mjs +166 -47
- package/package.json +5 -5
package/index.cjs
CHANGED
|
@@ -264,16 +264,26 @@
|
|
|
264
264
|
type = type.slice(1, -1).trim();
|
|
265
265
|
}
|
|
266
266
|
if (type[0] === '.' && type[1] === '.' && type[2] === '.') {
|
|
267
|
+
var elementType = type.slice(3);
|
|
267
268
|
return {
|
|
268
269
|
type: 'array',
|
|
269
|
-
elementType:
|
|
270
|
+
elementType: elementType
|
|
270
271
|
};
|
|
271
272
|
}
|
|
272
273
|
if (type.startsWith("Array<") && type.endsWith('>')) {
|
|
273
274
|
var typeSlice = type.slice(6, -1);
|
|
275
|
+
var _elementType = expandTypeDepFree(typeSlice);
|
|
274
276
|
return {
|
|
275
277
|
type: "array",
|
|
276
|
-
elementType:
|
|
278
|
+
elementType: _elementType
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
if (type.startsWith("Promise<") && type.endsWith('>')) {
|
|
282
|
+
var _typeSlice = type.slice(8, -1);
|
|
283
|
+
var _elementType2 = expandTypeDepFree(_typeSlice);
|
|
284
|
+
return {
|
|
285
|
+
type: "promise",
|
|
286
|
+
elementType: _elementType2
|
|
277
287
|
};
|
|
278
288
|
}
|
|
279
289
|
if ((type.startsWith("Object<") || type.startsWith("Record<")) && type.endsWith('>')) {
|
|
@@ -322,10 +332,10 @@
|
|
|
322
332
|
};
|
|
323
333
|
}
|
|
324
334
|
if (type.endsWith("[]")) {
|
|
325
|
-
var
|
|
335
|
+
var _typeSlice2 = type.slice(0, -2);
|
|
326
336
|
return {
|
|
327
337
|
type: 'array',
|
|
328
|
-
elementType: expandTypeDepFree(
|
|
338
|
+
elementType: expandTypeDepFree(_typeSlice2)
|
|
329
339
|
};
|
|
330
340
|
}
|
|
331
341
|
if (type[0] === '[' && type[type.length - 1] === ']') {
|
|
@@ -1370,6 +1380,22 @@
|
|
|
1370
1380
|
var value = node.value;
|
|
1371
1381
|
return value.raw;
|
|
1372
1382
|
}
|
|
1383
|
+
}, {
|
|
1384
|
+
key: "ParenthesizedExpression",
|
|
1385
|
+
value: function ParenthesizedExpression(node) {
|
|
1386
|
+
var expression = node.expression,
|
|
1387
|
+
loc = node.loc;
|
|
1388
|
+
var sameLine = loc.start.line === loc.end.line;
|
|
1389
|
+
if (sameLine) {
|
|
1390
|
+
return '(' + this.toSource(expression) + ')';
|
|
1391
|
+
}
|
|
1392
|
+
this.numSpaces++;
|
|
1393
|
+
var out = '(\n' + this.spaces;
|
|
1394
|
+
out += this.toSource(expression);
|
|
1395
|
+
this.numSpaces--;
|
|
1396
|
+
out += '\n' + this.spaces + ')';
|
|
1397
|
+
return out;
|
|
1398
|
+
}
|
|
1373
1399
|
}, {
|
|
1374
1400
|
key: "PrivateName",
|
|
1375
1401
|
value: function PrivateName(node) {
|
|
@@ -1820,7 +1846,9 @@
|
|
|
1820
1846
|
validateDivision = _ref$validateDivision === void 0 ? true : _ref$validateDivision,
|
|
1821
1847
|
_ref$expandType = _ref.expandType,
|
|
1822
1848
|
expandType = _ref$expandType === void 0 ? expandTypeDepFree : _ref$expandType,
|
|
1823
|
-
filename = _ref.filename
|
|
1849
|
+
filename = _ref.filename,
|
|
1850
|
+
_ref$addHeader = _ref.addHeader,
|
|
1851
|
+
addHeader = _ref$addHeader === void 0 ? true : _ref$addHeader;
|
|
1824
1852
|
_classCallCheck(this, Asserter);
|
|
1825
1853
|
_this = _super.call(this);
|
|
1826
1854
|
_defineProperty(_assertThisInitialized(_this), "stats", {
|
|
@@ -1874,6 +1902,7 @@
|
|
|
1874
1902
|
_this.validateDivision = validateDivision;
|
|
1875
1903
|
_this.expandType = expandType;
|
|
1876
1904
|
_this.filename = filename;
|
|
1905
|
+
_this.addHeader = addHeader;
|
|
1877
1906
|
return _this;
|
|
1878
1907
|
}
|
|
1879
1908
|
_createClass(Asserter, [{
|
|
@@ -1924,6 +1953,20 @@
|
|
|
1924
1953
|
return _.type === type;
|
|
1925
1954
|
});
|
|
1926
1955
|
}
|
|
1956
|
+
}, {
|
|
1957
|
+
key: "getHeader",
|
|
1958
|
+
value: function getHeader() {
|
|
1959
|
+
if (!this.addHeader) {
|
|
1960
|
+
return '';
|
|
1961
|
+
}
|
|
1962
|
+
var header = "import { assertType, youCanAddABreakpointHere";
|
|
1963
|
+
if (this.validateDivision) {
|
|
1964
|
+
header += ", validateDivision";
|
|
1965
|
+
}
|
|
1966
|
+
header += ", registerTypedef, registerClass } from '@runtime-type-inspector/runtime';\n";
|
|
1967
|
+
header += "export * from '@runtime-type-inspector/runtime';\n";
|
|
1968
|
+
return header;
|
|
1969
|
+
}
|
|
1927
1970
|
}, {
|
|
1928
1971
|
key: "getLeadingCommentsNodeForArrowFunctionExpression",
|
|
1929
1972
|
value: function getLeadingCommentsNodeForArrowFunctionExpression(node) {
|
|
@@ -2158,6 +2201,10 @@
|
|
|
2158
2201
|
continue;
|
|
2159
2202
|
}
|
|
2160
2203
|
var keyName = property.key.name;
|
|
2204
|
+
if (type.type !== 'object' || !type.properties) {
|
|
2205
|
+
_this2.warn("missing subtype information in JSDoc> in type", JSON.stringify(type, null, 2), "for ObjectPattern:", _this2.toSource(property).trim());
|
|
2206
|
+
continue;
|
|
2207
|
+
}
|
|
2161
2208
|
var subType = type.properties[keyName];
|
|
2162
2209
|
if (!subType) {
|
|
2163
2210
|
_this2.warn("missing subtype information in JSDoc");
|
|
@@ -2311,9 +2358,10 @@
|
|
|
2311
2358
|
try {
|
|
2312
2359
|
var asserter = new Asserter(options);
|
|
2313
2360
|
var ast = parser.parse(src, {
|
|
2314
|
-
sourceType: 'module'
|
|
2361
|
+
sourceType: 'module',
|
|
2362
|
+
createParenthesizedExpressions: true
|
|
2315
2363
|
});
|
|
2316
|
-
var out = asserter.toSource(ast);
|
|
2364
|
+
var out = asserter.getHeader() + asserter.toSource(ast);
|
|
2317
2365
|
return out;
|
|
2318
2366
|
} catch (e) {
|
|
2319
2367
|
console.error(e);
|
|
@@ -2416,8 +2464,35 @@
|
|
|
2416
2464
|
VoidKeyword = _ts$SyntaxKind.VoidKeyword,
|
|
2417
2465
|
UnknownKeyword = _ts$SyntaxKind.UnknownKeyword,
|
|
2418
2466
|
NeverKeyword = _ts$SyntaxKind.NeverKeyword,
|
|
2467
|
+
BigIntKeyword = _ts$SyntaxKind.BigIntKeyword,
|
|
2468
|
+
BigIntLiteral = _ts$SyntaxKind.BigIntLiteral,
|
|
2469
|
+
ConditionalType = _ts$SyntaxKind.ConditionalType,
|
|
2470
|
+
IndexedAccessType = _ts$SyntaxKind.IndexedAccessType,
|
|
2471
|
+
RestType = _ts$SyntaxKind.RestType,
|
|
2419
2472
|
ConstructorType = _ts$SyntaxKind.ConstructorType;
|
|
2420
2473
|
switch (node.kind) {
|
|
2474
|
+
case BigIntKeyword:
|
|
2475
|
+
return {
|
|
2476
|
+
type: 'bigint'
|
|
2477
|
+
};
|
|
2478
|
+
case BigIntLiteral:
|
|
2479
|
+
var literal = node.text.slice(0, -1);
|
|
2480
|
+
return {
|
|
2481
|
+
type: 'bigint',
|
|
2482
|
+
literal: literal
|
|
2483
|
+
};
|
|
2484
|
+
case ConditionalType:
|
|
2485
|
+
var checkType = toSourceTS(node.checkType);
|
|
2486
|
+
var extendsType = toSourceTS(node.extendsType);
|
|
2487
|
+
var trueType = toSourceTS(node.trueType);
|
|
2488
|
+
var falseType = toSourceTS(node.falseType);
|
|
2489
|
+
return {
|
|
2490
|
+
type: 'condition',
|
|
2491
|
+
checkType: checkType,
|
|
2492
|
+
extendsType: extendsType,
|
|
2493
|
+
trueType: trueType,
|
|
2494
|
+
falseType: falseType
|
|
2495
|
+
};
|
|
2421
2496
|
case ConstructorType:
|
|
2422
2497
|
{
|
|
2423
2498
|
var _parameters = node.parameters.map(toSourceTS);
|
|
@@ -2434,6 +2509,20 @@
|
|
|
2434
2509
|
type: 'function',
|
|
2435
2510
|
parameters: parameters
|
|
2436
2511
|
};
|
|
2512
|
+
case IndexedAccessType:
|
|
2513
|
+
var index = toSourceTS(node.indexType);
|
|
2514
|
+
var object = toSourceTS(node.objectType);
|
|
2515
|
+
return {
|
|
2516
|
+
type: 'indexedAccess',
|
|
2517
|
+
index: index,
|
|
2518
|
+
object: object
|
|
2519
|
+
};
|
|
2520
|
+
case RestType:
|
|
2521
|
+
var annotation = toSourceTS(node.type);
|
|
2522
|
+
return {
|
|
2523
|
+
type: 'rest',
|
|
2524
|
+
annotation: annotation
|
|
2525
|
+
};
|
|
2437
2526
|
case JSDocNullableType:
|
|
2438
2527
|
var t = toSourceTS(node.type);
|
|
2439
2528
|
return {
|
|
@@ -2455,48 +2544,62 @@
|
|
|
2455
2544
|
}
|
|
2456
2545
|
return ret;
|
|
2457
2546
|
case TypeReference:
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
|
|
2479
|
-
elementType
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2547
|
+
{
|
|
2548
|
+
if ((typeName.text === 'Object' || typeName.text === 'Record') && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 2) {
|
|
2549
|
+
return {
|
|
2550
|
+
type: 'record',
|
|
2551
|
+
key: toSourceTS(typeArguments[0]),
|
|
2552
|
+
val: toSourceTS(typeArguments[1])
|
|
2553
|
+
};
|
|
2554
|
+
} else if (typeName.text === 'Object' && (!typeArguments || (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 0)) {
|
|
2555
|
+
return {
|
|
2556
|
+
type: 'object',
|
|
2557
|
+
properties: {}
|
|
2558
|
+
};
|
|
2559
|
+
} else if (typeName.text === 'Map' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 2) {
|
|
2560
|
+
var key = toSourceTS(typeArguments[0]);
|
|
2561
|
+
var val = toSourceTS(typeArguments[1]);
|
|
2562
|
+
return {
|
|
2563
|
+
type: 'map',
|
|
2564
|
+
key: key,
|
|
2565
|
+
val: val
|
|
2566
|
+
};
|
|
2567
|
+
} else if (typeName.text === 'Array' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 1) {
|
|
2568
|
+
var elementType = toSourceTS(typeArguments[0]);
|
|
2569
|
+
return {
|
|
2570
|
+
type: 'array',
|
|
2571
|
+
elementType: elementType
|
|
2572
|
+
};
|
|
2573
|
+
} else if (typeName.text === 'Promise' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 1) {
|
|
2574
|
+
var _elementType = toSourceTS(typeArguments[0]);
|
|
2575
|
+
return {
|
|
2576
|
+
type: 'promise',
|
|
2577
|
+
elementType: _elementType
|
|
2578
|
+
};
|
|
2579
|
+
} else if (typeName.text === 'Set' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 1) {
|
|
2580
|
+
var _elementType2 = toSourceTS(typeArguments[0]);
|
|
2581
|
+
return {
|
|
2582
|
+
type: 'set',
|
|
2583
|
+
elementType: _elementType2
|
|
2584
|
+
};
|
|
2585
|
+
} else if (typeName.text === 'Class' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 1) {
|
|
2586
|
+
var _elementType3 = toSourceTS(typeArguments[0]);
|
|
2587
|
+
return {
|
|
2588
|
+
type: 'class',
|
|
2589
|
+
elementType: _elementType3
|
|
2590
|
+
};
|
|
2591
|
+
}
|
|
2592
|
+
if (!typeArguments) {
|
|
2593
|
+
return typeName.getText();
|
|
2594
|
+
}
|
|
2595
|
+
var _name = typeName.text;
|
|
2596
|
+
var args = typeArguments.map(toSourceTS);
|
|
2488
2597
|
return {
|
|
2489
|
-
type: '
|
|
2490
|
-
|
|
2598
|
+
type: 'reference',
|
|
2599
|
+
name: _name,
|
|
2600
|
+
args: args
|
|
2491
2601
|
};
|
|
2492
2602
|
}
|
|
2493
|
-
if (!typeArguments) {
|
|
2494
|
-
return typeName.getText();
|
|
2495
|
-
}
|
|
2496
|
-
console.warn('unhandled TypeReference', kind_, node);
|
|
2497
|
-
return {
|
|
2498
|
-
type: 'unhandled TypeReference'
|
|
2499
|
-
};
|
|
2500
2603
|
case StringKeyword:
|
|
2501
2604
|
return node.getText();
|
|
2502
2605
|
case NumberKeyword:
|
|
@@ -2584,6 +2687,16 @@
|
|
|
2584
2687
|
}
|
|
2585
2688
|
function toSourceBabelTS(node) {
|
|
2586
2689
|
switch (node.type) {
|
|
2690
|
+
case 'TSBigIntKeyword':
|
|
2691
|
+
return {
|
|
2692
|
+
type: 'bigint'
|
|
2693
|
+
};
|
|
2694
|
+
case 'BigIntLiteral':
|
|
2695
|
+
var literal = node.value;
|
|
2696
|
+
return {
|
|
2697
|
+
type: 'bigint',
|
|
2698
|
+
literal: literal
|
|
2699
|
+
};
|
|
2587
2700
|
case 'TSTypeReference':
|
|
2588
2701
|
{
|
|
2589
2702
|
var name = toSourceBabelTS(node.typeName);
|
|
@@ -2604,10 +2717,12 @@
|
|
|
2604
2717
|
properties: {}
|
|
2605
2718
|
};
|
|
2606
2719
|
} else if (name === 'Map' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 2) {
|
|
2720
|
+
var key = toSourceBabelTS(typeArguments[0]);
|
|
2721
|
+
var val = toSourceBabelTS(typeArguments[1]);
|
|
2607
2722
|
return {
|
|
2608
2723
|
type: 'map',
|
|
2609
|
-
key:
|
|
2610
|
-
val:
|
|
2724
|
+
key: key,
|
|
2725
|
+
val: val
|
|
2611
2726
|
};
|
|
2612
2727
|
} else if (name === 'Array' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 1) {
|
|
2613
2728
|
var elementType = toSourceBabelTS(typeArguments[0]);
|
|
@@ -2615,16 +2730,23 @@
|
|
|
2615
2730
|
type: 'array',
|
|
2616
2731
|
elementType: elementType
|
|
2617
2732
|
};
|
|
2618
|
-
} else if (name === '
|
|
2733
|
+
} else if (name === 'Promise' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 1) {
|
|
2619
2734
|
var _elementType = toSourceBabelTS(typeArguments[0]);
|
|
2620
2735
|
return {
|
|
2621
|
-
type: '
|
|
2736
|
+
type: 'promise',
|
|
2622
2737
|
elementType: _elementType
|
|
2623
2738
|
};
|
|
2739
|
+
} else if (name === 'Set' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 1) {
|
|
2740
|
+
var _elementType2 = toSourceBabelTS(typeArguments[0]);
|
|
2741
|
+
return {
|
|
2742
|
+
type: 'set',
|
|
2743
|
+
elementType: _elementType2
|
|
2744
|
+
};
|
|
2624
2745
|
} else if (name === 'Class' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 1) {
|
|
2746
|
+
var _elementType3 = toSourceBabelTS(typeArguments[0]);
|
|
2625
2747
|
return {
|
|
2626
2748
|
type: 'class',
|
|
2627
|
-
elementType:
|
|
2749
|
+
elementType: _elementType3
|
|
2628
2750
|
};
|
|
2629
2751
|
}
|
|
2630
2752
|
console.warn('unhandled TypeReference', node);
|
package/index.mjs
CHANGED
|
@@ -7,16 +7,26 @@ function expandTypeDepFree(type) {
|
|
|
7
7
|
type = type.slice(1, -1).trim();
|
|
8
8
|
}
|
|
9
9
|
if (type[0] === '.' && type[1] === '.' && type[2] === '.') {
|
|
10
|
+
const elementType = type.slice(3);
|
|
10
11
|
return {
|
|
11
12
|
type: 'array',
|
|
12
|
-
elementType
|
|
13
|
+
elementType
|
|
13
14
|
};
|
|
14
15
|
}
|
|
15
16
|
if (type.startsWith("Array<") && type.endsWith('>')) {
|
|
16
17
|
const typeSlice = type.slice(6, -1);
|
|
18
|
+
const elementType = expandTypeDepFree(typeSlice);
|
|
17
19
|
return {
|
|
18
20
|
type: "array",
|
|
19
|
-
elementType
|
|
21
|
+
elementType
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (type.startsWith("Promise<") && type.endsWith('>')) {
|
|
25
|
+
const typeSlice = type.slice(8, -1);
|
|
26
|
+
const elementType = expandTypeDepFree(typeSlice);
|
|
27
|
+
return {
|
|
28
|
+
type: "promise",
|
|
29
|
+
elementType
|
|
20
30
|
};
|
|
21
31
|
}
|
|
22
32
|
if ((type.startsWith("Object<") || type.startsWith("Record<")) && type.endsWith('>')) {
|
|
@@ -1058,6 +1068,22 @@ class Stringifier {
|
|
|
1058
1068
|
} = node;
|
|
1059
1069
|
return value.raw;
|
|
1060
1070
|
}
|
|
1071
|
+
ParenthesizedExpression(node) {
|
|
1072
|
+
const {
|
|
1073
|
+
expression,
|
|
1074
|
+
loc
|
|
1075
|
+
} = node;
|
|
1076
|
+
const sameLine = loc.start.line === loc.end.line;
|
|
1077
|
+
if (sameLine) {
|
|
1078
|
+
return '(' + this.toSource(expression) + ')';
|
|
1079
|
+
}
|
|
1080
|
+
this.numSpaces++;
|
|
1081
|
+
let out = '(\n' + this.spaces;
|
|
1082
|
+
out += this.toSource(expression);
|
|
1083
|
+
this.numSpaces--;
|
|
1084
|
+
out += '\n' + this.spaces + ')';
|
|
1085
|
+
return out;
|
|
1086
|
+
}
|
|
1061
1087
|
PrivateName(node) {
|
|
1062
1088
|
const {
|
|
1063
1089
|
id
|
|
@@ -1496,7 +1522,8 @@ class Asserter extends Stringifier {
|
|
|
1496
1522
|
forceCurly = true,
|
|
1497
1523
|
validateDivision = true,
|
|
1498
1524
|
expandType = expandTypeDepFree,
|
|
1499
|
-
filename
|
|
1525
|
+
filename,
|
|
1526
|
+
addHeader = true
|
|
1500
1527
|
} = {}) {
|
|
1501
1528
|
super();
|
|
1502
1529
|
this.stats = {
|
|
@@ -1550,6 +1577,7 @@ class Asserter extends Stringifier {
|
|
|
1550
1577
|
this.validateDivision = validateDivision;
|
|
1551
1578
|
this.expandType = expandType;
|
|
1552
1579
|
this.filename = filename;
|
|
1580
|
+
this.addHeader = addHeader;
|
|
1553
1581
|
}
|
|
1554
1582
|
ArrowFunctionExpression(node) {
|
|
1555
1583
|
const {
|
|
@@ -1595,6 +1623,18 @@ class Asserter extends Stringifier {
|
|
|
1595
1623
|
return _.type === type;
|
|
1596
1624
|
});
|
|
1597
1625
|
}
|
|
1626
|
+
getHeader() {
|
|
1627
|
+
if (!this.addHeader) {
|
|
1628
|
+
return '';
|
|
1629
|
+
}
|
|
1630
|
+
let header = "import { assertType, youCanAddABreakpointHere";
|
|
1631
|
+
if (this.validateDivision) {
|
|
1632
|
+
header += ", validateDivision";
|
|
1633
|
+
}
|
|
1634
|
+
header += ", registerTypedef, registerClass } from '@runtime-type-inspector/runtime';\n";
|
|
1635
|
+
header += "export * from '@runtime-type-inspector/runtime';\n";
|
|
1636
|
+
return header;
|
|
1637
|
+
}
|
|
1598
1638
|
getLeadingCommentsNodeForArrowFunctionExpression(node) {
|
|
1599
1639
|
const {
|
|
1600
1640
|
parents
|
|
@@ -1810,6 +1850,10 @@ class Asserter extends Stringifier {
|
|
|
1810
1850
|
continue;
|
|
1811
1851
|
}
|
|
1812
1852
|
const keyName = property.key.name;
|
|
1853
|
+
if (type.type !== 'object' || !type.properties) {
|
|
1854
|
+
this.warn("missing subtype information in JSDoc> in type", JSON.stringify(type, null, 2), "for ObjectPattern:", this.toSource(property).trim());
|
|
1855
|
+
continue;
|
|
1856
|
+
}
|
|
1813
1857
|
const subType = type.properties[keyName];
|
|
1814
1858
|
if (!subType) {
|
|
1815
1859
|
this.warn("missing subtype information in JSDoc");
|
|
@@ -1939,9 +1983,10 @@ function addTypeChecks(src, options) {
|
|
|
1939
1983
|
try {
|
|
1940
1984
|
const asserter = new Asserter(options);
|
|
1941
1985
|
const ast = parse(src, {
|
|
1942
|
-
sourceType: 'module'
|
|
1986
|
+
sourceType: 'module',
|
|
1987
|
+
createParenthesizedExpressions: true
|
|
1943
1988
|
});
|
|
1944
|
-
const out = asserter.toSource(ast);
|
|
1989
|
+
const out = asserter.getHeader() + asserter.toSource(ast);
|
|
1945
1990
|
return out;
|
|
1946
1991
|
} catch (e) {
|
|
1947
1992
|
console.error(e);
|
|
@@ -2046,9 +2091,36 @@ function toSourceTS(node) {
|
|
|
2046
2091
|
VoidKeyword,
|
|
2047
2092
|
UnknownKeyword,
|
|
2048
2093
|
NeverKeyword,
|
|
2094
|
+
BigIntKeyword,
|
|
2095
|
+
BigIntLiteral,
|
|
2096
|
+
ConditionalType,
|
|
2097
|
+
IndexedAccessType,
|
|
2098
|
+
RestType,
|
|
2049
2099
|
ConstructorType
|
|
2050
2100
|
} = ts.SyntaxKind;
|
|
2051
2101
|
switch (node.kind) {
|
|
2102
|
+
case BigIntKeyword:
|
|
2103
|
+
return {
|
|
2104
|
+
type: 'bigint'
|
|
2105
|
+
};
|
|
2106
|
+
case BigIntLiteral:
|
|
2107
|
+
const literal = node.text.slice(0, -1);
|
|
2108
|
+
return {
|
|
2109
|
+
type: 'bigint',
|
|
2110
|
+
literal
|
|
2111
|
+
};
|
|
2112
|
+
case ConditionalType:
|
|
2113
|
+
const checkType = toSourceTS(node.checkType);
|
|
2114
|
+
const extendsType = toSourceTS(node.extendsType);
|
|
2115
|
+
const trueType = toSourceTS(node.trueType);
|
|
2116
|
+
const falseType = toSourceTS(node.falseType);
|
|
2117
|
+
return {
|
|
2118
|
+
type: 'condition',
|
|
2119
|
+
checkType,
|
|
2120
|
+
extendsType,
|
|
2121
|
+
trueType,
|
|
2122
|
+
falseType
|
|
2123
|
+
};
|
|
2052
2124
|
case ConstructorType:
|
|
2053
2125
|
{
|
|
2054
2126
|
const _parameters = node.parameters.map(toSourceTS);
|
|
@@ -2065,6 +2137,20 @@ function toSourceTS(node) {
|
|
|
2065
2137
|
type: 'function',
|
|
2066
2138
|
parameters
|
|
2067
2139
|
};
|
|
2140
|
+
case IndexedAccessType:
|
|
2141
|
+
const index = toSourceTS(node.indexType);
|
|
2142
|
+
const object = toSourceTS(node.objectType);
|
|
2143
|
+
return {
|
|
2144
|
+
type: 'indexedAccess',
|
|
2145
|
+
index,
|
|
2146
|
+
object
|
|
2147
|
+
};
|
|
2148
|
+
case RestType:
|
|
2149
|
+
const annotation = toSourceTS(node.type);
|
|
2150
|
+
return {
|
|
2151
|
+
type: 'rest',
|
|
2152
|
+
annotation
|
|
2153
|
+
};
|
|
2068
2154
|
case JSDocNullableType:
|
|
2069
2155
|
const t = toSourceTS(node.type);
|
|
2070
2156
|
return {
|
|
@@ -2086,48 +2172,62 @@ function toSourceTS(node) {
|
|
|
2086
2172
|
}
|
|
2087
2173
|
return ret;
|
|
2088
2174
|
case TypeReference:
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
elementType
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
elementType
|
|
2117
|
-
|
|
2118
|
-
|
|
2175
|
+
{
|
|
2176
|
+
if ((typeName.text === 'Object' || typeName.text === 'Record') && (typeArguments == null ? void 0 : typeArguments.length) === 2) {
|
|
2177
|
+
return {
|
|
2178
|
+
type: 'record',
|
|
2179
|
+
key: toSourceTS(typeArguments[0]),
|
|
2180
|
+
val: toSourceTS(typeArguments[1])
|
|
2181
|
+
};
|
|
2182
|
+
} else if (typeName.text === 'Object' && (!typeArguments || (typeArguments == null ? void 0 : typeArguments.length) === 0)) {
|
|
2183
|
+
return {
|
|
2184
|
+
type: 'object',
|
|
2185
|
+
properties: {}
|
|
2186
|
+
};
|
|
2187
|
+
} else if (typeName.text === 'Map' && (typeArguments == null ? void 0 : typeArguments.length) === 2) {
|
|
2188
|
+
const key = toSourceTS(typeArguments[0]);
|
|
2189
|
+
const val = toSourceTS(typeArguments[1]);
|
|
2190
|
+
return {
|
|
2191
|
+
type: 'map',
|
|
2192
|
+
key,
|
|
2193
|
+
val
|
|
2194
|
+
};
|
|
2195
|
+
} else if (typeName.text === 'Array' && (typeArguments == null ? void 0 : typeArguments.length) === 1) {
|
|
2196
|
+
const elementType = toSourceTS(typeArguments[0]);
|
|
2197
|
+
return {
|
|
2198
|
+
type: 'array',
|
|
2199
|
+
elementType
|
|
2200
|
+
};
|
|
2201
|
+
} else if (typeName.text === 'Promise' && (typeArguments == null ? void 0 : typeArguments.length) === 1) {
|
|
2202
|
+
const elementType = toSourceTS(typeArguments[0]);
|
|
2203
|
+
return {
|
|
2204
|
+
type: 'promise',
|
|
2205
|
+
elementType
|
|
2206
|
+
};
|
|
2207
|
+
} else if (typeName.text === 'Set' && (typeArguments == null ? void 0 : typeArguments.length) === 1) {
|
|
2208
|
+
const elementType = toSourceTS(typeArguments[0]);
|
|
2209
|
+
return {
|
|
2210
|
+
type: 'set',
|
|
2211
|
+
elementType
|
|
2212
|
+
};
|
|
2213
|
+
} else if (typeName.text === 'Class' && (typeArguments == null ? void 0 : typeArguments.length) === 1) {
|
|
2214
|
+
const elementType = toSourceTS(typeArguments[0]);
|
|
2215
|
+
return {
|
|
2216
|
+
type: 'class',
|
|
2217
|
+
elementType
|
|
2218
|
+
};
|
|
2219
|
+
}
|
|
2220
|
+
if (!typeArguments) {
|
|
2221
|
+
return typeName.getText();
|
|
2222
|
+
}
|
|
2223
|
+
const _name = typeName.text;
|
|
2224
|
+
const args = typeArguments.map(toSourceTS);
|
|
2119
2225
|
return {
|
|
2120
|
-
type: '
|
|
2121
|
-
|
|
2226
|
+
type: 'reference',
|
|
2227
|
+
name: _name,
|
|
2228
|
+
args
|
|
2122
2229
|
};
|
|
2123
2230
|
}
|
|
2124
|
-
if (!typeArguments) {
|
|
2125
|
-
return typeName.getText();
|
|
2126
|
-
}
|
|
2127
|
-
console.warn('unhandled TypeReference', kind_, node);
|
|
2128
|
-
return {
|
|
2129
|
-
type: 'unhandled TypeReference'
|
|
2130
|
-
};
|
|
2131
2231
|
case StringKeyword:
|
|
2132
2232
|
return node.getText();
|
|
2133
2233
|
case NumberKeyword:
|
|
@@ -2215,6 +2315,16 @@ function parseTypeBabelTS(str) {
|
|
|
2215
2315
|
}
|
|
2216
2316
|
function toSourceBabelTS(node) {
|
|
2217
2317
|
switch (node.type) {
|
|
2318
|
+
case 'TSBigIntKeyword':
|
|
2319
|
+
return {
|
|
2320
|
+
type: 'bigint'
|
|
2321
|
+
};
|
|
2322
|
+
case 'BigIntLiteral':
|
|
2323
|
+
const literal = node.value;
|
|
2324
|
+
return {
|
|
2325
|
+
type: 'bigint',
|
|
2326
|
+
literal
|
|
2327
|
+
};
|
|
2218
2328
|
case 'TSTypeReference':
|
|
2219
2329
|
{
|
|
2220
2330
|
const name = toSourceBabelTS(node.typeName);
|
|
@@ -2235,10 +2345,12 @@ function toSourceBabelTS(node) {
|
|
|
2235
2345
|
properties: {}
|
|
2236
2346
|
};
|
|
2237
2347
|
} else if (name === 'Map' && (typeArguments == null ? void 0 : typeArguments.length) === 2) {
|
|
2348
|
+
const key = toSourceBabelTS(typeArguments[0]);
|
|
2349
|
+
const val = toSourceBabelTS(typeArguments[1]);
|
|
2238
2350
|
return {
|
|
2239
2351
|
type: 'map',
|
|
2240
|
-
key
|
|
2241
|
-
val
|
|
2352
|
+
key,
|
|
2353
|
+
val
|
|
2242
2354
|
};
|
|
2243
2355
|
} else if (name === 'Array' && (typeArguments == null ? void 0 : typeArguments.length) === 1) {
|
|
2244
2356
|
const elementType = toSourceBabelTS(typeArguments[0]);
|
|
@@ -2246,6 +2358,12 @@ function toSourceBabelTS(node) {
|
|
|
2246
2358
|
type: 'array',
|
|
2247
2359
|
elementType
|
|
2248
2360
|
};
|
|
2361
|
+
} else if (name === 'Promise' && (typeArguments == null ? void 0 : typeArguments.length) === 1) {
|
|
2362
|
+
const elementType = toSourceBabelTS(typeArguments[0]);
|
|
2363
|
+
return {
|
|
2364
|
+
type: 'promise',
|
|
2365
|
+
elementType
|
|
2366
|
+
};
|
|
2249
2367
|
} else if (name === 'Set' && (typeArguments == null ? void 0 : typeArguments.length) === 1) {
|
|
2250
2368
|
const elementType = toSourceBabelTS(typeArguments[0]);
|
|
2251
2369
|
return {
|
|
@@ -2253,9 +2371,10 @@ function toSourceBabelTS(node) {
|
|
|
2253
2371
|
elementType
|
|
2254
2372
|
};
|
|
2255
2373
|
} else if (name === 'Class' && (typeArguments == null ? void 0 : typeArguments.length) === 1) {
|
|
2374
|
+
const elementType = toSourceBabelTS(typeArguments[0]);
|
|
2256
2375
|
return {
|
|
2257
2376
|
type: 'class',
|
|
2258
|
-
elementType
|
|
2377
|
+
elementType
|
|
2259
2378
|
};
|
|
2260
2379
|
}
|
|
2261
2380
|
console.warn('unhandled TypeReference', node);
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runtime-type-inspector/transpiler",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "Validating JSDoc types at runtime for high-quality types - Trust is good, control is better.",
|
|
5
|
-
"main": "
|
|
6
|
-
"module": "
|
|
7
|
-
"types": "
|
|
5
|
+
"main": "index.cjs",
|
|
6
|
+
"module": "index.mjs",
|
|
7
|
+
"types": "types.d.ts",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "git+https://github.com/kungfooman/RuntimeTypeInspector.js.git"
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"homepage": "https://github.com/kungfooman/RuntimeTypeInspector.js#readme",
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@babel/core": "^7.2.0",
|
|
21
|
-
"@runtime-type-inspector/runtime": "^2.0.
|
|
21
|
+
"@runtime-type-inspector/runtime": "^2.0.8",
|
|
22
22
|
"typescript": "^5.1.6"
|
|
23
23
|
},
|
|
24
24
|
"files": [
|