@@ -9,6 +9,7 @@ import * as TS from './ts-ast'
9
9
import * as JSX from './jsx-ast'
10
10
11
11
export type ESNode =
12
+ | PrivateIdentifier
12
13
| Identifier
13
14
| Literal
14
15
| Program
@@ -25,6 +26,7 @@ export type ESNode =
25
26
| Pattern
26
27
| ClassBody
27
28
| MethodDefinition
29
+ | PropertyDefinition
28
30
| ModuleDeclaration
29
31
| ModuleSpecifier
30
32
@@ -185,16 +187,61 @@ export interface ClassDeclaration extends HasParentNode {
185
187
}
186
188
export interface ClassBody extends HasParentNode {
187
189
type : 'ClassBody'
188
- body : MethodDefinition [ ]
190
+ body : ( MethodDefinition | PropertyDefinition ) [ ]
189
191
}
190
- export interface MethodDefinition extends HasParentNode {
192
+ interface BaseMethodDefinition extends HasParentNode {
191
193
type : 'MethodDefinition'
194
+ // computed: boolean
195
+ static : boolean
196
+ // key: Expression
197
+ value : FunctionExpression
198
+ parent : ClassBody
199
+ }
200
+ export interface MethodDefinitionNonComputedName extends BaseMethodDefinition {
201
+ kind : 'constructor' | 'method' | 'get' | 'set'
202
+ computed : false
203
+ key : Identifier | Literal
204
+ }
205
+ export interface MethodDefinitionComputedName extends BaseMethodDefinition {
192
206
kind : 'constructor' | 'method' | 'get' | 'set'
193
- computed : boolean
207
+ computed : true
208
+ key : Expression
209
+ }
210
+ export interface MethodDefinitionPrivate extends BaseMethodDefinition {
211
+ kind : 'constructor'
212
+ computed : false
213
+ key : PrivateIdentifier
214
+ }
215
+ export type MethodDefinition =
216
+ | MethodDefinitionNonComputedName
217
+ | MethodDefinitionComputedName
218
+ | MethodDefinitionPrivate
219
+ interface BasePropertyDefinition extends HasParentNode {
220
+ type : 'PropertyDefinition'
221
+ // key: Expression | PrivateIdentifier
222
+ value : Expression | null
223
+ // computed: boolean
194
224
static : boolean
225
+ parent : ClassBody
226
+ }
227
+ export interface PropertyDefinitionNonComputedName
228
+ extends BasePropertyDefinition {
229
+ computed : false
230
+ key : Identifier | Literal
231
+ }
232
+ export interface PropertyDefinitionComputedName extends BasePropertyDefinition {
233
+ computed : true
195
234
key : Expression
196
- value : FunctionExpression
197
235
}
236
+ export interface PropertyDefinitionPrivate extends BasePropertyDefinition {
237
+ computed : false
238
+ key : PrivateIdentifier
239
+ }
240
+ export type PropertyDefinition =
241
+ | PropertyDefinitionNonComputedName
242
+ | PropertyDefinitionComputedName
243
+ | PropertyDefinitionPrivate
244
+
198
245
export type ModuleDeclaration =
199
246
| ImportDeclaration
200
247
| ExportNamedDeclaration
@@ -284,6 +331,10 @@ export interface Identifier extends HasParentNode {
284
331
type : 'Identifier'
285
332
name : string
286
333
}
334
+ export interface PrivateIdentifier extends HasParentNode {
335
+ type : 'PrivateIdentifier'
336
+ name : string
337
+ }
287
338
export interface Literal extends HasParentNode {
288
339
type : 'Literal'
289
340
value : string | boolean | null | number | RegExp | BigInt
@@ -304,16 +355,25 @@ export interface ObjectExpression extends HasParentNode {
304
355
type : 'ObjectExpression'
305
356
properties : ( Property | SpreadElement ) [ ]
306
357
}
307
- export interface Property extends HasParentNode {
358
+ interface BaseProperty extends HasParentNode {
308
359
type : 'Property'
309
360
kind : 'init' | 'get' | 'set'
310
361
method : boolean
311
362
shorthand : boolean
312
- computed : boolean
313
- key : Expression
363
+ // computed: boolean
364
+ // key: Expression
314
365
value : Expression
315
366
parent : ObjectExpression
316
367
}
368
+ export interface PropertyNonComputedName extends BaseProperty {
369
+ computed : false
370
+ key : Identifier | Literal
371
+ }
372
+ export interface PropertyComputedName extends BaseProperty {
373
+ computed : true
374
+ key : Expression
375
+ }
376
+ export type Property = PropertyNonComputedName | PropertyComputedName
317
377
export interface FunctionExpression extends HasParentNode {
318
378
type : 'FunctionExpression'
319
379
async : boolean
@@ -444,13 +504,32 @@ export interface NewExpression extends HasParentNode {
444
504
callee : Expression
445
505
arguments : ( Expression | SpreadElement ) [ ]
446
506
}
447
- export interface MemberExpression extends HasParentNode {
507
+ interface BaseMemberExpression extends HasParentNode {
448
508
type : 'MemberExpression'
449
- computed : boolean
509
+ // computed: boolean
510
+ // object: Expression | Super
511
+ // property: Expression
512
+ optional : boolean
513
+ }
514
+ export interface MemberExpressionNonComputedName extends BaseMemberExpression {
515
+ computed : false
516
+ object : Expression | Super
517
+ property : Identifier
518
+ }
519
+ export interface MemberExpressionComputedName extends BaseMemberExpression {
520
+ computed : true
450
521
object : Expression | Super
451
522
property : Expression
452
- optional : boolean
453
523
}
524
+ export interface MemberExpressionPrivate extends BaseMemberExpression {
525
+ computed : false
526
+ object : Expression
527
+ property : PrivateIdentifier
528
+ }
529
+ export type MemberExpression =
530
+ | MemberExpressionNonComputedName
531
+ | MemberExpressionComputedName
532
+ | MemberExpressionPrivate
454
533
export interface ChainExpression extends HasParentNode {
455
534
type : 'ChainExpression'
456
535
expression : ChainElement
@@ -506,16 +585,28 @@ export interface ObjectPattern extends HasParentNode {
506
585
type : 'ObjectPattern'
507
586
properties : ( AssignmentProperty | RestElement ) [ ]
508
587
}
509
- export interface AssignmentProperty extends HasParentNode {
588
+ interface BaseAssignmentProperty extends HasParentNode {
510
589
type : 'Property'
511
590
kind : 'init'
512
591
method : false
513
592
shorthand : boolean
514
- computed : boolean
515
- key : Expression
593
+ // computed: boolean
594
+ // key: Expression
516
595
value : Pattern
517
596
parent : ObjectPattern
518
597
}
598
+ export interface AssignmentPropertyNonComputedName
599
+ extends BaseAssignmentProperty {
600
+ computed : false
601
+ key : Identifier | Literal
602
+ }
603
+ export interface AssignmentPropertyComputedName extends BaseAssignmentProperty {
604
+ computed : true
605
+ key : Expression
606
+ }
607
+ export type AssignmentProperty =
608
+ | AssignmentPropertyNonComputedName
609
+ | AssignmentPropertyComputedName
519
610
export interface ArrayPattern extends HasParentNode {
520
611
type : 'ArrayPattern'
521
612
elements : Pattern [ ]
0 commit comments