oxc-parser 0.63.0 → 0.65.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/deserialize-js.js CHANGED
@@ -37,11 +37,14 @@ function deserialize(buffer, sourceTextInput, sourceLenInput) {
37
37
  function deserializeProgram(pos) {
38
38
  const body = deserializeVecDirective(pos + 88);
39
39
  body.push(...deserializeVecStatement(pos + 120));
40
- let start = deserializeU32(pos);
40
+
41
+ const start = deserializeU32(pos);
42
+ const end = deserializeU32(pos + 4);
43
+
41
44
  const program = {
42
45
  type: 'Program',
43
46
  start,
44
- end: deserializeU32(pos + 4),
47
+ end,
45
48
  body,
46
49
  sourceType: deserializeModuleKind(pos + 9),
47
50
  hashbang: deserializeOptionHashbang(pos + 64),
@@ -150,18 +153,15 @@ function deserializeTaggedTemplateExpression(pos) {
150
153
  }
151
154
 
152
155
  function deserializeTemplateElement(pos) {
153
- let value = deserializeTemplateElementValue(pos + 8);
156
+ const tail = deserializeBool(pos + 40),
157
+ start = deserializeU32(pos),
158
+ end = deserializeU32(pos + 4),
159
+ value = deserializeTemplateElementValue(pos + 8);
154
160
  if (value.cooked !== null && deserializeBool(pos + 41)) {
155
161
  value.cooked = value.cooked
156
162
  .replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)));
157
163
  }
158
- return {
159
- type: 'TemplateElement',
160
- start: deserializeU32(pos),
161
- end: deserializeU32(pos + 4),
162
- value,
163
- tail: deserializeBool(pos + 40),
164
- };
164
+ return { type: 'TemplateElement', start, end, value, tail };
165
165
  }
166
166
 
167
167
  function deserializeTemplateElementValue(pos) {
@@ -906,13 +906,12 @@ function deserializeAccessorProperty(pos) {
906
906
  }
907
907
 
908
908
  function deserializeImportExpression(pos) {
909
- const options = deserializeVecExpression(pos + 24);
910
909
  return {
911
910
  type: 'ImportExpression',
912
911
  start: deserializeU32(pos),
913
912
  end: deserializeU32(pos + 4),
914
913
  source: deserializeExpression(pos + 8),
915
- options: options.length === 0 ? null : options[0],
914
+ options: deserializeOptionExpression(pos + 24),
916
915
  };
917
916
  }
918
917
 
@@ -1178,13 +1177,14 @@ function deserializeJSXFragment(pos) {
1178
1177
  }
1179
1178
 
1180
1179
  function deserializeJSXOpeningFragment(pos) {
1181
- return {
1180
+ const node = {
1182
1181
  type: 'JSXOpeningFragment',
1183
1182
  start: deserializeU32(pos),
1184
1183
  end: deserializeU32(pos + 4),
1185
1184
  attributes: [],
1186
1185
  selfClosing: false,
1187
1186
  };
1187
+ return node;
1188
1188
  }
1189
1189
 
1190
1190
  function deserializeJSXClosingFragment(pos) {
@@ -1292,18 +1292,23 @@ function deserializeTSThisParameter(pos) {
1292
1292
  }
1293
1293
 
1294
1294
  function deserializeTSEnumDeclaration(pos) {
1295
- const end = deserializeU32(pos + 4),
1296
- id = deserializeBindingIdentifier(pos + 8);
1297
- const tsEnumDeclMembers = deserializeVecTSEnumMember(pos + 40);
1298
- const bodyStart = id.end + 1;
1299
1295
  return {
1300
1296
  type: 'TSEnumDeclaration',
1301
1297
  start: deserializeU32(pos),
1302
- end,
1303
- id,
1304
- body: { type: 'TSEnumBody', start: bodyStart, end: end, members: tsEnumDeclMembers },
1305
- const: deserializeBool(pos + 72),
1306
- declare: deserializeBool(pos + 73),
1298
+ end: deserializeU32(pos + 4),
1299
+ id: deserializeBindingIdentifier(pos + 8),
1300
+ body: deserializeTSEnumBody(pos + 40),
1301
+ const: deserializeBool(pos + 80),
1302
+ declare: deserializeBool(pos + 81),
1303
+ };
1304
+ }
1305
+
1306
+ function deserializeTSEnumBody(pos) {
1307
+ return {
1308
+ type: 'TSEnumBody',
1309
+ start: deserializeU32(pos),
1310
+ end: deserializeU32(pos + 4),
1311
+ members: deserializeVecTSEnumMember(pos + 8),
1307
1312
  };
1308
1313
  }
1309
1314
 
@@ -1313,6 +1318,7 @@ function deserializeTSEnumMember(pos) {
1313
1318
  start: deserializeU32(pos),
1314
1319
  end: deserializeU32(pos + 4),
1315
1320
  id: deserializeTSEnumMemberName(pos + 8),
1321
+ computed: deserializeU8(pos + 8) > 1,
1316
1322
  initializer: deserializeOptionExpression(pos + 24),
1317
1323
  };
1318
1324
  }
@@ -1628,14 +1634,13 @@ function deserializeTSClassImplements(pos) {
1628
1634
  }
1629
1635
 
1630
1636
  function deserializeTSInterfaceDeclaration(pos) {
1631
- const extendsArr = deserializeOptionVecTSInterfaceHeritage(pos + 40);
1632
1637
  return {
1633
1638
  type: 'TSInterfaceDeclaration',
1634
1639
  start: deserializeU32(pos),
1635
1640
  end: deserializeU32(pos + 4),
1636
1641
  id: deserializeBindingIdentifier(pos + 8),
1637
- extends: extendsArr === null ? [] : extendsArr,
1638
- typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 72),
1642
+ typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40),
1643
+ extends: deserializeVecTSInterfaceHeritage(pos + 48),
1639
1644
  body: deserializeBoxTSInterfaceBody(pos + 80),
1640
1645
  declare: deserializeBool(pos + 88),
1641
1646
  };
@@ -1679,17 +1684,23 @@ function deserializeTSIndexSignature(pos) {
1679
1684
  }
1680
1685
 
1681
1686
  function deserializeTSCallSignatureDeclaration(pos) {
1687
+ const params = deserializeBoxFormalParameters(pos + 48);
1688
+ const thisParam = deserializeOptionBoxTSThisParameter(pos + 16);
1689
+ if (thisParam !== null) params.unshift(thisParam);
1682
1690
  return {
1683
1691
  type: 'TSCallSignatureDeclaration',
1684
1692
  start: deserializeU32(pos),
1685
1693
  end: deserializeU32(pos + 4),
1686
1694
  typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8),
1687
- params: deserializeBoxFormalParameters(pos + 48),
1695
+ params,
1688
1696
  returnType: deserializeOptionBoxTSTypeAnnotation(pos + 56),
1689
1697
  };
1690
1698
  }
1691
1699
 
1692
1700
  function deserializeTSMethodSignature(pos) {
1701
+ const params = deserializeBoxFormalParameters(pos + 48);
1702
+ const thisParam = deserializeOptionBoxTSThisParameter(pos + 40);
1703
+ if (thisParam !== null) params.unshift(thisParam);
1693
1704
  return {
1694
1705
  type: 'TSMethodSignature',
1695
1706
  start: deserializeU32(pos),
@@ -1699,7 +1710,7 @@ function deserializeTSMethodSignature(pos) {
1699
1710
  optional: deserializeBool(pos + 25),
1700
1711
  kind: deserializeTSMethodSignatureKind(pos + 26),
1701
1712
  typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 32),
1702
- params: deserializeBoxFormalParameters(pos + 48),
1713
+ params,
1703
1714
  returnType: deserializeOptionBoxTSTypeAnnotation(pos + 56),
1704
1715
  accessibility: null,
1705
1716
  readonly: false,
@@ -1817,12 +1828,15 @@ function deserializeTSImportType(pos) {
1817
1828
  }
1818
1829
 
1819
1830
  function deserializeTSFunctionType(pos) {
1831
+ const params = deserializeBoxFormalParameters(pos + 24);
1832
+ const thisParam = deserializeOptionBoxTSThisParameter(pos + 16);
1833
+ if (thisParam !== null) params.unshift(thisParam);
1820
1834
  return {
1821
1835
  type: 'TSFunctionType',
1822
1836
  start: deserializeU32(pos),
1823
1837
  end: deserializeU32(pos + 4),
1824
1838
  typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8),
1825
- params: deserializeBoxFormalParameters(pos + 24),
1839
+ params,
1826
1840
  returnType: deserializeBoxTSTypeAnnotation(pos + 32),
1827
1841
  };
1828
1842
  }
@@ -1840,15 +1854,17 @@ function deserializeTSConstructorType(pos) {
1840
1854
  }
1841
1855
 
1842
1856
  function deserializeTSMappedType(pos) {
1857
+ const typeParameter = deserializeBoxTSTypeParameter(pos + 8);
1843
1858
  return {
1844
1859
  type: 'TSMappedType',
1845
1860
  start: deserializeU32(pos),
1846
1861
  end: deserializeU32(pos + 4),
1847
- typeParameter: deserializeBoxTSTypeParameter(pos + 8),
1848
1862
  nameType: deserializeOptionTSType(pos + 16),
1849
1863
  typeAnnotation: deserializeOptionTSType(pos + 32),
1850
1864
  optional: deserializeTSMappedTypeModifierOperator(pos + 48),
1851
1865
  readonly: deserializeTSMappedTypeModifierOperator(pos + 49),
1866
+ key: typeParameter.name,
1867
+ constraint: typeParameter.constraint,
1852
1868
  };
1853
1869
  }
1854
1870
 
@@ -1954,13 +1970,13 @@ function deserializeTSInstantiationExpression(pos) {
1954
1970
  start: deserializeU32(pos),
1955
1971
  end: deserializeU32(pos + 4),
1956
1972
  expression: deserializeExpression(pos + 8),
1957
- typeParameters: deserializeBoxTSTypeParameterInstantiation(pos + 24),
1973
+ typeArguments: deserializeBoxTSTypeParameterInstantiation(pos + 24),
1958
1974
  };
1959
1975
  }
1960
1976
 
1961
1977
  function deserializeJSDocNullableType(pos) {
1962
1978
  return {
1963
- type: 'JSDocNullableType',
1979
+ type: 'TSJSDocNullableType',
1964
1980
  start: deserializeU32(pos),
1965
1981
  end: deserializeU32(pos + 4),
1966
1982
  typeAnnotation: deserializeTSType(pos + 8),
@@ -1970,7 +1986,7 @@ function deserializeJSDocNullableType(pos) {
1970
1986
 
1971
1987
  function deserializeJSDocNonNullableType(pos) {
1972
1988
  return {
1973
- type: 'JSDocNonNullableType',
1989
+ type: 'TSJSDocNonNullableType',
1974
1990
  start: deserializeU32(pos),
1975
1991
  end: deserializeU32(pos + 4),
1976
1992
  typeAnnotation: deserializeTSType(pos + 8),
@@ -1980,7 +1996,7 @@ function deserializeJSDocNonNullableType(pos) {
1980
1996
 
1981
1997
  function deserializeJSDocUnknownType(pos) {
1982
1998
  return {
1983
- type: 'JSDocUnknownType',
1999
+ type: 'TSJSDocUnknownType',
1984
2000
  start: deserializeU32(pos),
1985
2001
  end: deserializeU32(pos + 4),
1986
2002
  };
@@ -2023,6 +2039,7 @@ function deserializeExportEntry(pos) {
2023
2039
  importName: deserializeExportImportName(pos + 40),
2024
2040
  exportName: deserializeExportExportName(pos + 72),
2025
2041
  localName: deserializeExportLocalName(pos + 104),
2042
+ isType: deserializeBool(pos + 136),
2026
2043
  };
2027
2044
  }
2028
2045
 
@@ -3557,6 +3574,10 @@ function deserializeTSEnumMemberName(pos) {
3557
3574
  return deserializeBoxIdentifierName(pos + 8);
3558
3575
  case 1:
3559
3576
  return deserializeBoxStringLiteral(pos + 8);
3577
+ case 2:
3578
+ return deserializeBoxStringLiteral(pos + 8);
3579
+ case 3:
3580
+ return deserializeBoxTemplateLiteral(pos + 8);
3560
3581
  default:
3561
3582
  throw new Error(`Unexpected discriminant ${uint8[pos]} for TSEnumMemberName`);
3562
3583
  }
@@ -3874,18 +3895,8 @@ function deserializeTSTypeQueryExprName(pos) {
3874
3895
  }
3875
3896
 
3876
3897
  function deserializeTSMappedTypeModifierOperator(pos) {
3877
- switch (uint8[pos]) {
3878
- case 0:
3879
- return 'true';
3880
- case 1:
3881
- return '+';
3882
- case 2:
3883
- return '-';
3884
- case 3:
3885
- return 'none';
3886
- default:
3887
- throw new Error(`Unexpected discriminant ${uint8[pos]} for TSMappedTypeModifierOperator`);
3888
- }
3898
+ const operator = deserializeU8(pos);
3899
+ return [true, '+', '-', null][operator];
3889
3900
  }
3890
3901
 
3891
3902
  function deserializeTSModuleReference(pos) {
@@ -4539,11 +4550,6 @@ function deserializeVecArrayExpressionElement(pos) {
4539
4550
  return arr;
4540
4551
  }
4541
4552
 
4542
- function deserializeOptionSpan(pos) {
4543
- if (uint8[pos] === 0) return null;
4544
- return deserializeSpan(pos + 8);
4545
- }
4546
-
4547
4553
  function deserializeBoxSpreadElement(pos) {
4548
4554
  return deserializeSpreadElement(uint32[pos >> 2]);
4549
4555
  }
@@ -4991,11 +4997,6 @@ function deserializeVecTSClassImplements(pos) {
4991
4997
  return arr;
4992
4998
  }
4993
4999
 
4994
- function deserializeOptionVecTSClassImplements(pos) {
4995
- if (uint32[pos >> 2] === 0 && uint32[(pos + 4) >> 2] === 0) return null;
4996
- return deserializeVecTSClassImplements(pos);
4997
- }
4998
-
4999
5000
  function deserializeBoxClassBody(pos) {
5000
5001
  return deserializeClassBody(uint32[pos >> 2]);
5001
5002
  }
@@ -5449,11 +5450,6 @@ function deserializeVecTSInterfaceHeritage(pos) {
5449
5450
  return arr;
5450
5451
  }
5451
5452
 
5452
- function deserializeOptionVecTSInterfaceHeritage(pos) {
5453
- if (uint32[pos >> 2] === 0 && uint32[(pos + 4) >> 2] === 0) return null;
5454
- return deserializeVecTSInterfaceHeritage(pos);
5455
- }
5456
-
5457
5453
  function deserializeBoxTSInterfaceBody(pos) {
5458
5454
  return deserializeTSInterfaceBody(uint32[pos >> 2]);
5459
5455
  }
package/deserialize-ts.js CHANGED
@@ -37,12 +37,30 @@ function deserialize(buffer, sourceTextInput, sourceLenInput) {
37
37
  function deserializeProgram(pos) {
38
38
  const body = deserializeVecDirective(pos + 88);
39
39
  body.push(...deserializeVecStatement(pos + 120));
40
- let start = deserializeU32(pos);
41
- if (body.length > 0) start = body[0].start;
40
+
41
+ const end = deserializeU32(pos + 4);
42
+
43
+ let start;
44
+ if (body.length > 0) {
45
+ const first = body[0];
46
+ start = first.start;
47
+ if (first.type === 'ExportNamedDeclaration' || first.type === 'ExportDefaultDeclaration') {
48
+ const { declaration } = first;
49
+ if (
50
+ declaration !== null && declaration.type === 'ClassDeclaration' &&
51
+ declaration.decorators.length > 0
52
+ ) {
53
+ const decoratorStart = declaration.decorators[0].start;
54
+ if (decoratorStart < start) start = decoratorStart;
55
+ }
56
+ }
57
+ } else {
58
+ start = end;
59
+ }
42
60
  const program = {
43
61
  type: 'Program',
44
62
  start,
45
- end: deserializeU32(pos + 4),
63
+ end,
46
64
  body,
47
65
  sourceType: deserializeModuleKind(pos + 9),
48
66
  hashbang: deserializeOptionHashbang(pos + 64),
@@ -165,18 +183,15 @@ function deserializeTaggedTemplateExpression(pos) {
165
183
  }
166
184
 
167
185
  function deserializeTemplateElement(pos) {
168
- let value = deserializeTemplateElementValue(pos + 8);
186
+ const tail = deserializeBool(pos + 40),
187
+ start = deserializeU32(pos) - 1,
188
+ end = deserializeU32(pos + 4) + 2 - tail,
189
+ value = deserializeTemplateElementValue(pos + 8);
169
190
  if (value.cooked !== null && deserializeBool(pos + 41)) {
170
191
  value.cooked = value.cooked
171
192
  .replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16)));
172
193
  }
173
- return {
174
- type: 'TemplateElement',
175
- start: deserializeU32(pos),
176
- end: deserializeU32(pos + 4),
177
- value,
178
- tail: deserializeBool(pos + 40),
179
- };
194
+ return { type: 'TemplateElement', start, end, value, tail };
180
195
  }
181
196
 
182
197
  function deserializeTemplateElementValue(pos) {
@@ -350,6 +365,9 @@ function deserializeArrayAssignmentTarget(pos) {
350
365
  start: deserializeU32(pos),
351
366
  end: deserializeU32(pos + 4),
352
367
  elements,
368
+ decorators: [],
369
+ optional: false,
370
+ typeAnnotation: null,
353
371
  };
354
372
  }
355
373
 
@@ -362,6 +380,9 @@ function deserializeObjectAssignmentTarget(pos) {
362
380
  start: deserializeU32(pos),
363
381
  end: deserializeU32(pos + 4),
364
382
  properties,
383
+ decorators: [],
384
+ optional: false,
385
+ typeAnnotation: null,
365
386
  };
366
387
  }
367
388
 
@@ -371,6 +392,10 @@ function deserializeAssignmentTargetRest(pos) {
371
392
  start: deserializeU32(pos),
372
393
  end: deserializeU32(pos + 4),
373
394
  argument: deserializeAssignmentTarget(pos + 8),
395
+ decorators: [],
396
+ optional: false,
397
+ typeAnnotation: null,
398
+ value: null,
374
399
  };
375
400
  }
376
401
 
@@ -381,6 +406,9 @@ function deserializeAssignmentTargetWithDefault(pos) {
381
406
  end: deserializeU32(pos + 4),
382
407
  left: deserializeAssignmentTarget(pos + 8),
383
408
  right: deserializeExpression(pos + 24),
409
+ decorators: [],
410
+ optional: false,
411
+ typeAnnotation: null,
384
412
  };
385
413
  }
386
414
 
@@ -398,6 +426,9 @@ function deserializeAssignmentTargetPropertyIdentifier(pos) {
398
426
  end: end,
399
427
  left: keyCopy,
400
428
  right: init,
429
+ typeAnnotation: null,
430
+ optional: false,
431
+ decorators: [],
401
432
  };
402
433
  return {
403
434
  type: 'Property',
@@ -409,6 +440,7 @@ function deserializeAssignmentTargetPropertyIdentifier(pos) {
409
440
  key,
410
441
  value,
411
442
  kind: 'init',
443
+ optional: false,
412
444
  };
413
445
  }
414
446
 
@@ -423,6 +455,7 @@ function deserializeAssignmentTargetPropertyProperty(pos) {
423
455
  key: deserializePropertyKey(pos + 8),
424
456
  value: deserializeAssignmentTargetMaybeDefault(pos + 24),
425
457
  kind: 'init',
458
+ optional: false,
426
459
  };
427
460
  }
428
461
 
@@ -733,6 +766,8 @@ function deserializeAssignmentPattern(pos) {
733
766
  left: deserializeBindingPattern(pos + 8),
734
767
  right: deserializeExpression(pos + 40),
735
768
  decorators: [],
769
+ optional: false,
770
+ typeAnnotation: null,
736
771
  };
737
772
  }
738
773
 
@@ -785,6 +820,10 @@ function deserializeBindingRestElement(pos) {
785
820
  start: deserializeU32(pos),
786
821
  end: deserializeU32(pos + 4),
787
822
  argument: deserializeBindingPattern(pos + 8),
823
+ decorators: [],
824
+ optional: false,
825
+ typeAnnotation: null,
826
+ value: null,
788
827
  };
789
828
  }
790
829
 
@@ -875,7 +914,6 @@ function deserializeYieldExpression(pos) {
875
914
  }
876
915
 
877
916
  function deserializeClass(pos) {
878
- const classImplements = deserializeOptionVecTSClassImplements(pos + 112);
879
917
  return {
880
918
  type: deserializeClassType(pos + 8),
881
919
  start: deserializeU32(pos),
@@ -886,7 +924,7 @@ function deserializeClass(pos) {
886
924
  decorators: deserializeVecDecorator(pos + 16),
887
925
  typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 80),
888
926
  superTypeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 104),
889
- implements: classImplements === null ? [] : classImplements,
927
+ implements: deserializeVecTSClassImplements(pos + 112),
890
928
  abstract: deserializeBool(pos + 152),
891
929
  declare: deserializeBool(pos + 153),
892
930
  };
@@ -902,14 +940,27 @@ function deserializeClassBody(pos) {
902
940
  }
903
941
 
904
942
  function deserializeMethodDefinition(pos) {
943
+ const kind = deserializeMethodDefinitionKind(pos + 72);
944
+ let key = deserializePropertyKey(pos + 48);
945
+ if (kind === 'constructor') {
946
+ key = {
947
+ type: 'Identifier',
948
+ start: key.start,
949
+ end: key.end,
950
+ name: 'constructor',
951
+ decorators: [],
952
+ optional: false,
953
+ typeAnnotation: null,
954
+ };
955
+ }
905
956
  return {
906
957
  type: deserializeMethodDefinitionType(pos + 8),
907
958
  start: deserializeU32(pos),
908
959
  end: deserializeU32(pos + 4),
909
960
  static: deserializeBool(pos + 74),
910
961
  computed: deserializeBool(pos + 73),
911
- key: deserializePropertyKey(pos + 48),
912
- kind: deserializeMethodDefinitionKind(pos + 72),
962
+ key,
963
+ kind,
913
964
  value: deserializeBoxFunction(pos + 64),
914
965
  decorators: deserializeVecDecorator(pos + 16),
915
966
  override: deserializeBool(pos + 75),
@@ -966,24 +1017,23 @@ function deserializeAccessorProperty(pos) {
966
1017
  computed: deserializeBool(pos + 80),
967
1018
  static: deserializeBool(pos + 81),
968
1019
  decorators: deserializeVecDecorator(pos + 16),
969
- definite: deserializeBool(pos + 82),
1020
+ definite: deserializeBool(pos + 83),
970
1021
  typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 88),
971
1022
  accessibility: deserializeOptionTSAccessibility(pos + 96),
972
1023
  optional: false,
973
- override: false,
1024
+ override: deserializeBool(pos + 82),
974
1025
  readonly: false,
975
1026
  declare: false,
976
1027
  };
977
1028
  }
978
1029
 
979
1030
  function deserializeImportExpression(pos) {
980
- const options = deserializeVecExpression(pos + 24);
981
1031
  return {
982
1032
  type: 'ImportExpression',
983
1033
  start: deserializeU32(pos),
984
1034
  end: deserializeU32(pos + 4),
985
1035
  source: deserializeExpression(pos + 8),
986
- options: options.length === 0 ? null : options[0],
1036
+ options: deserializeOptionExpression(pos + 24),
987
1037
  };
988
1038
  }
989
1039
 
@@ -1256,13 +1306,12 @@ function deserializeJSXFragment(pos) {
1256
1306
  }
1257
1307
 
1258
1308
  function deserializeJSXOpeningFragment(pos) {
1259
- return {
1309
+ const node = {
1260
1310
  type: 'JSXOpeningFragment',
1261
1311
  start: deserializeU32(pos),
1262
1312
  end: deserializeU32(pos + 4),
1263
- attributes: [],
1264
- selfClosing: false,
1265
1313
  };
1314
+ return node;
1266
1315
  }
1267
1316
 
1268
1317
  function deserializeJSXClosingFragment(pos) {
@@ -1370,18 +1419,23 @@ function deserializeTSThisParameter(pos) {
1370
1419
  }
1371
1420
 
1372
1421
  function deserializeTSEnumDeclaration(pos) {
1373
- const end = deserializeU32(pos + 4),
1374
- id = deserializeBindingIdentifier(pos + 8);
1375
- const tsEnumDeclMembers = deserializeVecTSEnumMember(pos + 40);
1376
- const bodyStart = id.end + 1;
1377
1422
  return {
1378
1423
  type: 'TSEnumDeclaration',
1379
1424
  start: deserializeU32(pos),
1380
- end,
1381
- id,
1382
- body: { type: 'TSEnumBody', start: bodyStart, end: end, members: tsEnumDeclMembers },
1383
- const: deserializeBool(pos + 72),
1384
- declare: deserializeBool(pos + 73),
1425
+ end: deserializeU32(pos + 4),
1426
+ id: deserializeBindingIdentifier(pos + 8),
1427
+ body: deserializeTSEnumBody(pos + 40),
1428
+ const: deserializeBool(pos + 80),
1429
+ declare: deserializeBool(pos + 81),
1430
+ };
1431
+ }
1432
+
1433
+ function deserializeTSEnumBody(pos) {
1434
+ return {
1435
+ type: 'TSEnumBody',
1436
+ start: deserializeU32(pos),
1437
+ end: deserializeU32(pos + 4),
1438
+ members: deserializeVecTSEnumMember(pos + 8),
1385
1439
  };
1386
1440
  }
1387
1441
 
@@ -1391,6 +1445,7 @@ function deserializeTSEnumMember(pos) {
1391
1445
  start: deserializeU32(pos),
1392
1446
  end: deserializeU32(pos + 4),
1393
1447
  id: deserializeTSEnumMemberName(pos + 8),
1448
+ computed: deserializeU8(pos + 8) > 1,
1394
1449
  initializer: deserializeOptionExpression(pos + 24),
1395
1450
  };
1396
1451
  }
@@ -1706,14 +1761,13 @@ function deserializeTSClassImplements(pos) {
1706
1761
  }
1707
1762
 
1708
1763
  function deserializeTSInterfaceDeclaration(pos) {
1709
- const extendsArr = deserializeOptionVecTSInterfaceHeritage(pos + 40);
1710
1764
  return {
1711
1765
  type: 'TSInterfaceDeclaration',
1712
1766
  start: deserializeU32(pos),
1713
1767
  end: deserializeU32(pos + 4),
1714
1768
  id: deserializeBindingIdentifier(pos + 8),
1715
- extends: extendsArr === null ? [] : extendsArr,
1716
- typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 72),
1769
+ typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40),
1770
+ extends: deserializeVecTSInterfaceHeritage(pos + 48),
1717
1771
  body: deserializeBoxTSInterfaceBody(pos + 80),
1718
1772
  declare: deserializeBool(pos + 88),
1719
1773
  };
@@ -1757,17 +1811,23 @@ function deserializeTSIndexSignature(pos) {
1757
1811
  }
1758
1812
 
1759
1813
  function deserializeTSCallSignatureDeclaration(pos) {
1814
+ const params = deserializeBoxFormalParameters(pos + 48);
1815
+ const thisParam = deserializeOptionBoxTSThisParameter(pos + 16);
1816
+ if (thisParam !== null) params.unshift(thisParam);
1760
1817
  return {
1761
1818
  type: 'TSCallSignatureDeclaration',
1762
1819
  start: deserializeU32(pos),
1763
1820
  end: deserializeU32(pos + 4),
1764
1821
  typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8),
1765
- params: deserializeBoxFormalParameters(pos + 48),
1822
+ params,
1766
1823
  returnType: deserializeOptionBoxTSTypeAnnotation(pos + 56),
1767
1824
  };
1768
1825
  }
1769
1826
 
1770
1827
  function deserializeTSMethodSignature(pos) {
1828
+ const params = deserializeBoxFormalParameters(pos + 48);
1829
+ const thisParam = deserializeOptionBoxTSThisParameter(pos + 40);
1830
+ if (thisParam !== null) params.unshift(thisParam);
1771
1831
  return {
1772
1832
  type: 'TSMethodSignature',
1773
1833
  start: deserializeU32(pos),
@@ -1777,7 +1837,7 @@ function deserializeTSMethodSignature(pos) {
1777
1837
  optional: deserializeBool(pos + 25),
1778
1838
  kind: deserializeTSMethodSignatureKind(pos + 26),
1779
1839
  typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 32),
1780
- params: deserializeBoxFormalParameters(pos + 48),
1840
+ params,
1781
1841
  returnType: deserializeOptionBoxTSTypeAnnotation(pos + 56),
1782
1842
  accessibility: null,
1783
1843
  readonly: false,
@@ -1895,12 +1955,15 @@ function deserializeTSImportType(pos) {
1895
1955
  }
1896
1956
 
1897
1957
  function deserializeTSFunctionType(pos) {
1958
+ const params = deserializeBoxFormalParameters(pos + 24);
1959
+ const thisParam = deserializeOptionBoxTSThisParameter(pos + 16);
1960
+ if (thisParam !== null) params.unshift(thisParam);
1898
1961
  return {
1899
1962
  type: 'TSFunctionType',
1900
1963
  start: deserializeU32(pos),
1901
1964
  end: deserializeU32(pos + 4),
1902
1965
  typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8),
1903
- params: deserializeBoxFormalParameters(pos + 24),
1966
+ params,
1904
1967
  returnType: deserializeBoxTSTypeAnnotation(pos + 32),
1905
1968
  };
1906
1969
  }
@@ -1918,15 +1981,17 @@ function deserializeTSConstructorType(pos) {
1918
1981
  }
1919
1982
 
1920
1983
  function deserializeTSMappedType(pos) {
1984
+ const typeParameter = deserializeBoxTSTypeParameter(pos + 8);
1921
1985
  return {
1922
1986
  type: 'TSMappedType',
1923
1987
  start: deserializeU32(pos),
1924
1988
  end: deserializeU32(pos + 4),
1925
- typeParameter: deserializeBoxTSTypeParameter(pos + 8),
1926
1989
  nameType: deserializeOptionTSType(pos + 16),
1927
1990
  typeAnnotation: deserializeOptionTSType(pos + 32),
1928
1991
  optional: deserializeTSMappedTypeModifierOperator(pos + 48),
1929
1992
  readonly: deserializeTSMappedTypeModifierOperator(pos + 49),
1993
+ key: typeParameter.name,
1994
+ constraint: typeParameter.constraint,
1930
1995
  };
1931
1996
  }
1932
1997
 
@@ -2032,13 +2097,13 @@ function deserializeTSInstantiationExpression(pos) {
2032
2097
  start: deserializeU32(pos),
2033
2098
  end: deserializeU32(pos + 4),
2034
2099
  expression: deserializeExpression(pos + 8),
2035
- typeParameters: deserializeBoxTSTypeParameterInstantiation(pos + 24),
2100
+ typeArguments: deserializeBoxTSTypeParameterInstantiation(pos + 24),
2036
2101
  };
2037
2102
  }
2038
2103
 
2039
2104
  function deserializeJSDocNullableType(pos) {
2040
2105
  return {
2041
- type: 'JSDocNullableType',
2106
+ type: 'TSJSDocNullableType',
2042
2107
  start: deserializeU32(pos),
2043
2108
  end: deserializeU32(pos + 4),
2044
2109
  typeAnnotation: deserializeTSType(pos + 8),
@@ -2048,7 +2113,7 @@ function deserializeJSDocNullableType(pos) {
2048
2113
 
2049
2114
  function deserializeJSDocNonNullableType(pos) {
2050
2115
  return {
2051
- type: 'JSDocNonNullableType',
2116
+ type: 'TSJSDocNonNullableType',
2052
2117
  start: deserializeU32(pos),
2053
2118
  end: deserializeU32(pos + 4),
2054
2119
  typeAnnotation: deserializeTSType(pos + 8),
@@ -2058,7 +2123,7 @@ function deserializeJSDocNonNullableType(pos) {
2058
2123
 
2059
2124
  function deserializeJSDocUnknownType(pos) {
2060
2125
  return {
2061
- type: 'JSDocUnknownType',
2126
+ type: 'TSJSDocUnknownType',
2062
2127
  start: deserializeU32(pos),
2063
2128
  end: deserializeU32(pos + 4),
2064
2129
  };
@@ -2101,6 +2166,7 @@ function deserializeExportEntry(pos) {
2101
2166
  importName: deserializeExportImportName(pos + 40),
2102
2167
  exportName: deserializeExportExportName(pos + 72),
2103
2168
  localName: deserializeExportLocalName(pos + 104),
2169
+ isType: deserializeBool(pos + 136),
2104
2170
  };
2105
2171
  }
2106
2172
 
@@ -3635,6 +3701,10 @@ function deserializeTSEnumMemberName(pos) {
3635
3701
  return deserializeBoxIdentifierName(pos + 8);
3636
3702
  case 1:
3637
3703
  return deserializeBoxStringLiteral(pos + 8);
3704
+ case 2:
3705
+ return deserializeBoxStringLiteral(pos + 8);
3706
+ case 3:
3707
+ return deserializeBoxTemplateLiteral(pos + 8);
3638
3708
  default:
3639
3709
  throw new Error(`Unexpected discriminant ${uint8[pos]} for TSEnumMemberName`);
3640
3710
  }
@@ -3952,18 +4022,8 @@ function deserializeTSTypeQueryExprName(pos) {
3952
4022
  }
3953
4023
 
3954
4024
  function deserializeTSMappedTypeModifierOperator(pos) {
3955
- switch (uint8[pos]) {
3956
- case 0:
3957
- return 'true';
3958
- case 1:
3959
- return '+';
3960
- case 2:
3961
- return '-';
3962
- case 3:
3963
- return 'none';
3964
- default:
3965
- throw new Error(`Unexpected discriminant ${uint8[pos]} for TSMappedTypeModifierOperator`);
3966
- }
4025
+ const operator = deserializeU8(pos);
4026
+ return [true, '+', '-', null][operator];
3967
4027
  }
3968
4028
 
3969
4029
  function deserializeTSModuleReference(pos) {
@@ -4617,11 +4677,6 @@ function deserializeVecArrayExpressionElement(pos) {
4617
4677
  return arr;
4618
4678
  }
4619
4679
 
4620
- function deserializeOptionSpan(pos) {
4621
- if (uint8[pos] === 0) return null;
4622
- return deserializeSpan(pos + 8);
4623
- }
4624
-
4625
4680
  function deserializeBoxSpreadElement(pos) {
4626
4681
  return deserializeSpreadElement(uint32[pos >> 2]);
4627
4682
  }
@@ -5069,11 +5124,6 @@ function deserializeVecTSClassImplements(pos) {
5069
5124
  return arr;
5070
5125
  }
5071
5126
 
5072
- function deserializeOptionVecTSClassImplements(pos) {
5073
- if (uint32[pos >> 2] === 0 && uint32[(pos + 4) >> 2] === 0) return null;
5074
- return deserializeVecTSClassImplements(pos);
5075
- }
5076
-
5077
5127
  function deserializeBoxClassBody(pos) {
5078
5128
  return deserializeClassBody(uint32[pos >> 2]);
5079
5129
  }
@@ -5527,11 +5577,6 @@ function deserializeVecTSInterfaceHeritage(pos) {
5527
5577
  return arr;
5528
5578
  }
5529
5579
 
5530
- function deserializeOptionVecTSInterfaceHeritage(pos) {
5531
- if (uint32[pos >> 2] === 0 && uint32[(pos + 4) >> 2] === 0) return null;
5532
- return deserializeVecTSInterfaceHeritage(pos);
5533
- }
5534
-
5535
5580
  function deserializeBoxTSInterfaceBody(pos) {
5536
5581
  return deserializeTSInterfaceBody(uint32[pos >> 2]);
5537
5582
  }
package/index.d.ts CHANGED
@@ -232,6 +232,20 @@ export interface StaticExportEntry {
232
232
  exportName: ExportExportName
233
233
  /** The name that is used to locally access the exported value from within the importing module. */
234
234
  localName: ExportLocalName
235
+ /**
236
+ * Whether the export is a TypeScript `export type`.
237
+ *
238
+ * Examples:
239
+ *
240
+ * ```ts
241
+ * export type * from 'mod';
242
+ * export type * as ns from 'mod';
243
+ * export type { foo };
244
+ * export { type foo }:
245
+ * export type { foo } from 'mod';
246
+ * ```
247
+ */
248
+ isType: boolean
235
249
  }
236
250
 
237
251
  export interface StaticImport {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oxc-parser",
3
- "version": "0.63.0",
3
+ "version": "0.65.0",
4
4
  "main": "index.js",
5
5
  "browser": "wasm.mjs",
6
6
  "engines": {
@@ -39,7 +39,7 @@
39
39
  "access": "public"
40
40
  },
41
41
  "dependencies": {
42
- "@oxc-project/types": "^0.63.0"
42
+ "@oxc-project/types": "^0.65.0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@codspeed/vitest-plugin": "^4.0.0",
@@ -72,16 +72,16 @@
72
72
  "dtsHeaderFile": "header.js"
73
73
  },
74
74
  "optionalDependencies": {
75
- "@oxc-parser/binding-win32-x64-msvc": "0.63.0",
76
- "@oxc-parser/binding-win32-arm64-msvc": "0.63.0",
77
- "@oxc-parser/binding-linux-x64-gnu": "0.63.0",
78
- "@oxc-parser/binding-linux-x64-musl": "0.63.0",
79
- "@oxc-parser/binding-linux-arm64-gnu": "0.63.0",
80
- "@oxc-parser/binding-linux-arm64-musl": "0.63.0",
81
- "@oxc-parser/binding-linux-arm-gnueabihf": "0.63.0",
82
- "@oxc-parser/binding-darwin-x64": "0.63.0",
83
- "@oxc-parser/binding-darwin-arm64": "0.63.0",
84
- "@oxc-parser/binding-wasm32-wasi": "0.63.0"
75
+ "@oxc-parser/binding-win32-x64-msvc": "0.65.0",
76
+ "@oxc-parser/binding-win32-arm64-msvc": "0.65.0",
77
+ "@oxc-parser/binding-linux-x64-gnu": "0.65.0",
78
+ "@oxc-parser/binding-linux-x64-musl": "0.65.0",
79
+ "@oxc-parser/binding-linux-arm64-gnu": "0.65.0",
80
+ "@oxc-parser/binding-linux-arm64-musl": "0.65.0",
81
+ "@oxc-parser/binding-linux-arm-gnueabihf": "0.65.0",
82
+ "@oxc-parser/binding-darwin-x64": "0.65.0",
83
+ "@oxc-parser/binding-darwin-arm64": "0.65.0",
84
+ "@oxc-parser/binding-wasm32-wasi": "0.65.0"
85
85
  },
86
86
  "scripts": {
87
87
  "build-dev": "napi build --no-dts-cache --platform --js bindings.js",