@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.
Files changed (3) hide show
  1. package/index.cjs +173 -51
  2. package/index.mjs +166 -47
  3. 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: type.slice(3)
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: expandTypeDepFree(typeSlice)
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 _typeSlice = type.slice(0, -2);
335
+ var _typeSlice2 = type.slice(0, -2);
326
336
  return {
327
337
  type: 'array',
328
- elementType: expandTypeDepFree(_typeSlice)
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
- if ((typeName.text === 'Object' || typeName.text === 'Record') && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 2) {
2459
- return {
2460
- type: 'record',
2461
- key: toSourceTS(typeArguments[0]),
2462
- val: toSourceTS(typeArguments[1])
2463
- };
2464
- } else if (typeName.text === 'Object' && (!typeArguments || (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 0)) {
2465
- return {
2466
- type: 'object',
2467
- properties: {}
2468
- };
2469
- } else if (typeName.text === 'Map' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 2) {
2470
- return {
2471
- type: 'map',
2472
- key: toSourceTS(typeArguments[0]),
2473
- val: toSourceTS(typeArguments[1])
2474
- };
2475
- } else if (typeName.text === 'Array' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 1) {
2476
- var elementType = toSourceTS(typeArguments[0]);
2477
- return {
2478
- type: 'array',
2479
- elementType: elementType
2480
- };
2481
- } else if (typeName.text === 'Set' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 1) {
2482
- var _elementType = toSourceTS(typeArguments[0]);
2483
- return {
2484
- type: 'set',
2485
- elementType: _elementType
2486
- };
2487
- } else if (typeName.text === 'Class' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 1) {
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: 'class',
2490
- elementType: toSourceTS(typeArguments[0])
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: toSourceBabelTS(typeArguments[0]),
2610
- val: toSourceBabelTS(typeArguments[1])
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 === 'Set' && (typeArguments === null || typeArguments === void 0 ? void 0 : typeArguments.length) === 1) {
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: 'set',
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: toSourceBabelTS(typeArguments[0])
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: type.slice(3)
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: expandTypeDepFree(typeSlice)
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
- if ((typeName.text === 'Object' || typeName.text === 'Record') && (typeArguments == null ? void 0 : typeArguments.length) === 2) {
2090
- return {
2091
- type: 'record',
2092
- key: toSourceTS(typeArguments[0]),
2093
- val: toSourceTS(typeArguments[1])
2094
- };
2095
- } else if (typeName.text === 'Object' && (!typeArguments || (typeArguments == null ? void 0 : typeArguments.length) === 0)) {
2096
- return {
2097
- type: 'object',
2098
- properties: {}
2099
- };
2100
- } else if (typeName.text === 'Map' && (typeArguments == null ? void 0 : typeArguments.length) === 2) {
2101
- return {
2102
- type: 'map',
2103
- key: toSourceTS(typeArguments[0]),
2104
- val: toSourceTS(typeArguments[1])
2105
- };
2106
- } else if (typeName.text === 'Array' && (typeArguments == null ? void 0 : typeArguments.length) === 1) {
2107
- const elementType = toSourceTS(typeArguments[0]);
2108
- return {
2109
- type: 'array',
2110
- elementType
2111
- };
2112
- } else if (typeName.text === 'Set' && (typeArguments == null ? void 0 : typeArguments.length) === 1) {
2113
- const elementType = toSourceTS(typeArguments[0]);
2114
- return {
2115
- type: 'set',
2116
- elementType
2117
- };
2118
- } else if (typeName.text === 'Class' && (typeArguments == null ? void 0 : typeArguments.length) === 1) {
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: 'class',
2121
- elementType: toSourceTS(typeArguments[0])
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: toSourceBabelTS(typeArguments[0]),
2241
- val: toSourceBabelTS(typeArguments[1])
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: toSourceBabelTS(typeArguments[0])
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.0.15",
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": "./index.cjs",
6
- "module": "./index.mjs",
7
- "types": "./types.d.ts",
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.7",
21
+ "@runtime-type-inspector/runtime": "^2.0.8",
22
22
  "typescript": "^5.1.6"
23
23
  },
24
24
  "files": [