biome_js_parser 0.5.7

Biome's JavaScript parser
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
JsModule {
    bom_token: missing (optional),
    interpreter_token: missing (optional),
    directives: JsDirectiveList [],
    items: JsModuleItemList [
        JsVariableStatement {
            declaration: JsVariableDeclaration {
                await_token: missing (optional),
                kind: LET_KW@0..4 "let" [] [Whitespace(" ")],
                declarators: JsVariableDeclaratorList [
                    JsVariableDeclarator {
                        id: JsIdentifierBinding {
                            name_token: IDENT@4..5 "a" [] [],
                        },
                        variable_annotation: TsTypeAnnotation {
                            colon_token: COLON@5..7 ":" [] [Whitespace(" ")],
                            ty: TsAnyType {
                                any_token: ANY_KW@7..10 "any" [] [],
                            },
                        },
                        initializer: missing (optional),
                    },
                ],
            },
            semicolon_token: SEMICOLON@10..11 ";" [] [],
        },
        TsTypeAliasDeclaration {
            type_token: TYPE_KW@11..17 "type" [Newline("\n")] [Whitespace(" ")],
            binding_identifier: TsIdentifierBinding {
                name_token: IDENT@17..18 "B" [] [],
            },
            type_parameters: TsTypeParameters {
                l_angle_token: L_ANGLE@18..19 "<" [] [],
                items: TsTypeParameterList [
                    TsTypeParameter {
                        modifiers: TsTypeParameterModifierList [],
                        name: TsTypeParameterName {
                            ident_token: IDENT@19..20 "A" [] [],
                        },
                        constraint: missing (optional),
                        default: missing (optional),
                    },
                ],
                r_angle_token: R_ANGLE@20..22 ">" [] [Whitespace(" ")],
            },
            eq_token: EQ@22..24 "=" [] [Whitespace(" ")],
            ty: TsObjectType {
                l_curly_token: L_CURLY@24..26 "{" [] [Whitespace(" ")],
                members: TsTypeMemberList [
                    TsPropertySignatureTypeMember {
                        readonly_token: missing (optional),
                        name: JsLiteralMemberName {
                            value: IDENT@26..27 "a" [] [],
                        },
                        optional_token: missing (optional),
                        type_annotation: TsTypeAnnotation {
                            colon_token: COLON@27..29 ":" [] [Whitespace(" ")],
                            ty: TsReferenceType {
                                name: JsReferenceIdentifier {
                                    value_token: IDENT@29..31 "A" [] [Whitespace(" ")],
                                },
                                type_arguments: missing (optional),
                            },
                        },
                        separator_token: missing (optional),
                    },
                ],
                r_curly_token: R_CURLY@31..32 "}" [] [],
            },
            semicolon_token: SEMICOLON@32..33 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsAssignmentExpression {
                left: JsParenthesizedAssignment {
                    l_paren_token: L_PAREN@33..35 "(" [Newline("\n")] [],
                    assignment: TsAsAssignment {
                        assignment: JsIdentifierAssignment {
                            name_token: IDENT@35..37 "a" [] [Whitespace(" ")],
                        },
                        as_token: AS_KW@37..40 "as" [] [Whitespace(" ")],
                        ty: TsStringType {
                            string_token: STRING_KW@40..46 "string" [] [],
                        },
                    },
                    r_paren_token: R_PAREN@46..48 ")" [] [Whitespace(" ")],
                },
                operator_token: EQ@48..50 "=" [] [Whitespace(" ")],
                right: JsStringLiteralExpression {
                    value_token: JS_STRING_LITERAL@50..58 "\"string\"" [] [],
                },
            },
            semicolon_token: SEMICOLON@58..59 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsAssignmentExpression {
                left: JsParenthesizedAssignment {
                    l_paren_token: L_PAREN@59..61 "(" [Newline("\n")] [],
                    assignment: TsAsAssignment {
                        assignment: JsParenthesizedAssignment {
                            l_paren_token: L_PAREN@61..62 "(" [] [],
                            assignment: TsAsAssignment {
                                assignment: JsIdentifierAssignment {
                                    name_token: IDENT@62..64 "a" [] [Whitespace(" ")],
                                },
                                as_token: AS_KW@64..67 "as" [] [Whitespace(" ")],
                                ty: TsAnyType {
                                    any_token: ANY_KW@67..70 "any" [] [],
                                },
                            },
                            r_paren_token: R_PAREN@70..72 ")" [] [Whitespace(" ")],
                        },
                        as_token: AS_KW@72..75 "as" [] [Whitespace(" ")],
                        ty: TsStringType {
                            string_token: STRING_KW@75..81 "string" [] [],
                        },
                    },
                    r_paren_token: R_PAREN@81..83 ")" [] [Whitespace(" ")],
                },
                operator_token: EQ@83..85 "=" [] [Whitespace(" ")],
                right: JsNullLiteralExpression {
                    value_token: NULL_KW@85..89 "null" [] [],
                },
            },
            semicolon_token: SEMICOLON@89..90 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsParenthesizedExpression {
                l_paren_token: L_PAREN@90..92 "(" [Newline("\n")] [],
                expression: JsAssignmentExpression {
                    left: JsObjectAssignmentPattern {
                        l_curly_token: L_CURLY@92..94 "{" [] [Whitespace(" ")],
                        properties: JsObjectAssignmentPatternPropertyList [
                            JsObjectAssignmentPatternProperty {
                                member: JsLiteralMemberName {
                                    value: IDENT@94..95 "b" [] [],
                                },
                                colon_token: COLON@95..97 ":" [] [Whitespace(" ")],
                                pattern: TsAsAssignment {
                                    assignment: JsIdentifierAssignment {
                                        name_token: IDENT@97..99 "a" [] [Whitespace(" ")],
                                    },
                                    as_token: AS_KW@99..102 "as" [] [Whitespace(" ")],
                                    ty: TsStringType {
                                        string_token: STRING_KW@102..109 "string" [] [Whitespace(" ")],
                                    },
                                },
                                init: missing (optional),
                            },
                        ],
                        r_curly_token: R_CURLY@109..111 "}" [] [Whitespace(" ")],
                    },
                    operator_token: EQ@111..113 "=" [] [Whitespace(" ")],
                    right: JsObjectExpression {
                        l_curly_token: L_CURLY@113..115 "{" [] [Whitespace(" ")],
                        members: JsObjectMemberList [
                            JsPropertyObjectMember {
                                name: JsLiteralMemberName {
                                    value: IDENT@115..116 "b" [] [],
                                },
                                colon_token: COLON@116..118 ":" [] [Whitespace(" ")],
                                value: JsStringLiteralExpression {
                                    value_token: JS_STRING_LITERAL@118..125 "\"test\"" [] [Whitespace(" ")],
                                },
                            },
                        ],
                        r_curly_token: R_CURLY@125..126 "}" [] [],
                    },
                },
                r_paren_token: R_PAREN@126..127 ")" [] [],
            },
            semicolon_token: SEMICOLON@127..128 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsParenthesizedExpression {
                l_paren_token: L_PAREN@128..130 "(" [Newline("\n")] [],
                expression: JsAssignmentExpression {
                    left: JsArrayAssignmentPattern {
                        l_brack_token: L_BRACK@130..132 "[" [] [Whitespace(" ")],
                        elements: JsArrayAssignmentPatternElementList [
                            JsArrayAssignmentPatternElement {
                                pattern: TsAsAssignment {
                                    assignment: JsIdentifierAssignment {
                                        name_token: IDENT@132..134 "a" [] [Whitespace(" ")],
                                    },
                                    as_token: AS_KW@134..137 "as" [] [Whitespace(" ")],
                                    ty: TsStringType {
                                        string_token: STRING_KW@137..144 "string" [] [Whitespace(" ")],
                                    },
                                },
                                init: missing (optional),
                            },
                        ],
                        r_brack_token: R_BRACK@144..146 "]" [] [Whitespace(" ")],
                    },
                    operator_token: EQ@146..148 "=" [] [Whitespace(" ")],
                    right: JsArrayExpression {
                        l_brack_token: L_BRACK@148..150 "[" [] [Whitespace(" ")],
                        elements: JsArrayElementList [
                            JsStringLiteralExpression {
                                value_token: JS_STRING_LITERAL@150..157 "\"test\"" [] [Whitespace(" ")],
                            },
                        ],
                        r_brack_token: R_BRACK@157..158 "]" [] [],
                    },
                },
                r_paren_token: R_PAREN@158..159 ")" [] [],
            },
            semicolon_token: SEMICOLON@159..160 ";" [] [],
        },
        JsForInStatement {
            for_token: FOR_KW@160..165 "for" [Newline("\n")] [Whitespace(" ")],
            l_paren_token: L_PAREN@165..166 "(" [] [],
            initializer: TsAsAssignment {
                assignment: JsIdentifierAssignment {
                    name_token: IDENT@166..168 "a" [] [Whitespace(" ")],
                },
                as_token: AS_KW@168..171 "as" [] [Whitespace(" ")],
                ty: TsStringType {
                    string_token: STRING_KW@171..178 "string" [] [Whitespace(" ")],
                },
            },
            in_token: IN_KW@178..181 "in" [] [Whitespace(" ")],
            expression: JsArrayExpression {
                l_brack_token: L_BRACK@181..182 "[" [] [],
                elements: JsArrayElementList [],
                r_brack_token: R_BRACK@182..183 "]" [] [],
            },
            r_paren_token: R_PAREN@183..185 ")" [] [Whitespace(" ")],
            body: JsBlockStatement {
                l_curly_token: L_CURLY@185..186 "{" [] [],
                statements: JsStatementList [],
                r_curly_token: R_CURLY@186..187 "}" [] [],
            },
        },
        JsExpressionStatement {
            expression: JsAssignmentExpression {
                left: JsParenthesizedAssignment {
                    l_paren_token: L_PAREN@187..189 "(" [Newline("\n")] [],
                    assignment: TsAsAssignment {
                        assignment: JsIdentifierAssignment {
                            name_token: IDENT@189..191 "a" [] [Whitespace(" ")],
                        },
                        as_token: AS_KW@191..194 "as" [] [Whitespace(" ")],
                        ty: TsReferenceType {
                            name: JsReferenceIdentifier {
                                value_token: IDENT@194..195 "B" [] [],
                            },
                            type_arguments: TsTypeArguments {
                                l_angle_token: L_ANGLE@195..196 "<" [] [],
                                ts_type_argument_list: TsTypeArgumentList [
                                    TsStringType {
                                        string_token: STRING_KW@196..202 "string" [] [],
                                    },
                                ],
                                r_angle_token: R_ANGLE@202..203 ">" [] [],
                            },
                        },
                    },
                    r_paren_token: R_PAREN@203..205 ")" [] [Whitespace(" ")],
                },
                operator_token: EQ@205..207 "=" [] [Whitespace(" ")],
                right: JsObjectExpression {
                    l_curly_token: L_CURLY@207..209 "{" [] [Whitespace(" ")],
                    members: JsObjectMemberList [
                        JsPropertyObjectMember {
                            name: JsLiteralMemberName {
                                value: IDENT@209..210 "a" [] [],
                            },
                            colon_token: COLON@210..212 ":" [] [Whitespace(" ")],
                            value: JsStringLiteralExpression {
                                value_token: JS_STRING_LITERAL@212..219 "\"test\"" [] [Whitespace(" ")],
                            },
                        },
                    ],
                    r_curly_token: R_CURLY@219..220 "}" [] [],
                },
            },
            semicolon_token: SEMICOLON@220..221 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsAssignmentExpression {
                left: JsParenthesizedAssignment {
                    l_paren_token: L_PAREN@221..223 "(" [Newline("\n")] [],
                    assignment: TsTypeAssertionAssignment {
                        l_angle_token: L_ANGLE@223..224 "<" [] [],
                        ty: TsNumberType {
                            number_token: NUMBER_KW@224..230 "number" [] [],
                        },
                        r_angle_token: R_ANGLE@230..232 ">" [] [Whitespace(" ")],
                        assignment: JsIdentifierAssignment {
                            name_token: IDENT@232..233 "a" [] [],
                        },
                    },
                    r_paren_token: R_PAREN@233..235 ")" [] [Whitespace(" ")],
                },
                operator_token: PLUSEQ@235..238 "+=" [] [Whitespace(" ")],
                right: JsNumberLiteralExpression {
                    value_token: JS_NUMBER_LITERAL@238..239 "1" [] [],
                },
            },
            semicolon_token: missing (optional),
        },
    ],
    eof_token: EOF@239..240 "" [Newline("\n")] [],
}

0: JS_MODULE@0..240
  0: (empty)
  1: (empty)
  2: JS_DIRECTIVE_LIST@0..0
  3: JS_MODULE_ITEM_LIST@0..239
    0: JS_VARIABLE_STATEMENT@0..11
      0: JS_VARIABLE_DECLARATION@0..10
        0: (empty)
        1: LET_KW@0..4 "let" [] [Whitespace(" ")]
        2: JS_VARIABLE_DECLARATOR_LIST@4..10
          0: JS_VARIABLE_DECLARATOR@4..10
            0: JS_IDENTIFIER_BINDING@4..5
              0: IDENT@4..5 "a" [] []
            1: TS_TYPE_ANNOTATION@5..10
              0: COLON@5..7 ":" [] [Whitespace(" ")]
              1: TS_ANY_TYPE@7..10
                0: ANY_KW@7..10 "any" [] []
            2: (empty)
      1: SEMICOLON@10..11 ";" [] []
    1: TS_TYPE_ALIAS_DECLARATION@11..33
      0: TYPE_KW@11..17 "type" [Newline("\n")] [Whitespace(" ")]
      1: TS_IDENTIFIER_BINDING@17..18
        0: IDENT@17..18 "B" [] []
      2: TS_TYPE_PARAMETERS@18..22
        0: L_ANGLE@18..19 "<" [] []
        1: TS_TYPE_PARAMETER_LIST@19..20
          0: TS_TYPE_PARAMETER@19..20
            0: TS_TYPE_PARAMETER_MODIFIER_LIST@19..19
            1: TS_TYPE_PARAMETER_NAME@19..20
              0: IDENT@19..20 "A" [] []
            2: (empty)
            3: (empty)
        2: R_ANGLE@20..22 ">" [] [Whitespace(" ")]
      3: EQ@22..24 "=" [] [Whitespace(" ")]
      4: TS_OBJECT_TYPE@24..32
        0: L_CURLY@24..26 "{" [] [Whitespace(" ")]
        1: TS_TYPE_MEMBER_LIST@26..31
          0: TS_PROPERTY_SIGNATURE_TYPE_MEMBER@26..31
            0: (empty)
            1: JS_LITERAL_MEMBER_NAME@26..27
              0: IDENT@26..27 "a" [] []
            2: (empty)
            3: TS_TYPE_ANNOTATION@27..31
              0: COLON@27..29 ":" [] [Whitespace(" ")]
              1: TS_REFERENCE_TYPE@29..31
                0: JS_REFERENCE_IDENTIFIER@29..31
                  0: IDENT@29..31 "A" [] [Whitespace(" ")]
                1: (empty)
            4: (empty)
        2: R_CURLY@31..32 "}" [] []
      5: SEMICOLON@32..33 ";" [] []
    2: JS_EXPRESSION_STATEMENT@33..59
      0: JS_ASSIGNMENT_EXPRESSION@33..58
        0: JS_PARENTHESIZED_ASSIGNMENT@33..48
          0: L_PAREN@33..35 "(" [Newline("\n")] []
          1: TS_AS_ASSIGNMENT@35..46
            0: JS_IDENTIFIER_ASSIGNMENT@35..37
              0: IDENT@35..37 "a" [] [Whitespace(" ")]
            1: AS_KW@37..40 "as" [] [Whitespace(" ")]
            2: TS_STRING_TYPE@40..46
              0: STRING_KW@40..46 "string" [] []
          2: R_PAREN@46..48 ")" [] [Whitespace(" ")]
        1: EQ@48..50 "=" [] [Whitespace(" ")]
        2: JS_STRING_LITERAL_EXPRESSION@50..58
          0: JS_STRING_LITERAL@50..58 "\"string\"" [] []
      1: SEMICOLON@58..59 ";" [] []
    3: JS_EXPRESSION_STATEMENT@59..90
      0: JS_ASSIGNMENT_EXPRESSION@59..89
        0: JS_PARENTHESIZED_ASSIGNMENT@59..83
          0: L_PAREN@59..61 "(" [Newline("\n")] []
          1: TS_AS_ASSIGNMENT@61..81
            0: JS_PARENTHESIZED_ASSIGNMENT@61..72
              0: L_PAREN@61..62 "(" [] []
              1: TS_AS_ASSIGNMENT@62..70
                0: JS_IDENTIFIER_ASSIGNMENT@62..64
                  0: IDENT@62..64 "a" [] [Whitespace(" ")]
                1: AS_KW@64..67 "as" [] [Whitespace(" ")]
                2: TS_ANY_TYPE@67..70
                  0: ANY_KW@67..70 "any" [] []
              2: R_PAREN@70..72 ")" [] [Whitespace(" ")]
            1: AS_KW@72..75 "as" [] [Whitespace(" ")]
            2: TS_STRING_TYPE@75..81
              0: STRING_KW@75..81 "string" [] []
          2: R_PAREN@81..83 ")" [] [Whitespace(" ")]
        1: EQ@83..85 "=" [] [Whitespace(" ")]
        2: JS_NULL_LITERAL_EXPRESSION@85..89
          0: NULL_KW@85..89 "null" [] []
      1: SEMICOLON@89..90 ";" [] []
    4: JS_EXPRESSION_STATEMENT@90..128
      0: JS_PARENTHESIZED_EXPRESSION@90..127
        0: L_PAREN@90..92 "(" [Newline("\n")] []
        1: JS_ASSIGNMENT_EXPRESSION@92..126
          0: JS_OBJECT_ASSIGNMENT_PATTERN@92..111
            0: L_CURLY@92..94 "{" [] [Whitespace(" ")]
            1: JS_OBJECT_ASSIGNMENT_PATTERN_PROPERTY_LIST@94..109
              0: JS_OBJECT_ASSIGNMENT_PATTERN_PROPERTY@94..109
                0: JS_LITERAL_MEMBER_NAME@94..95
                  0: IDENT@94..95 "b" [] []
                1: COLON@95..97 ":" [] [Whitespace(" ")]
                2: TS_AS_ASSIGNMENT@97..109
                  0: JS_IDENTIFIER_ASSIGNMENT@97..99
                    0: IDENT@97..99 "a" [] [Whitespace(" ")]
                  1: AS_KW@99..102 "as" [] [Whitespace(" ")]
                  2: TS_STRING_TYPE@102..109
                    0: STRING_KW@102..109 "string" [] [Whitespace(" ")]
                3: (empty)
            2: R_CURLY@109..111 "}" [] [Whitespace(" ")]
          1: EQ@111..113 "=" [] [Whitespace(" ")]
          2: JS_OBJECT_EXPRESSION@113..126
            0: L_CURLY@113..115 "{" [] [Whitespace(" ")]
            1: JS_OBJECT_MEMBER_LIST@115..125
              0: JS_PROPERTY_OBJECT_MEMBER@115..125
                0: JS_LITERAL_MEMBER_NAME@115..116
                  0: IDENT@115..116 "b" [] []
                1: COLON@116..118 ":" [] [Whitespace(" ")]
                2: JS_STRING_LITERAL_EXPRESSION@118..125
                  0: JS_STRING_LITERAL@118..125 "\"test\"" [] [Whitespace(" ")]
            2: R_CURLY@125..126 "}" [] []
        2: R_PAREN@126..127 ")" [] []
      1: SEMICOLON@127..128 ";" [] []
    5: JS_EXPRESSION_STATEMENT@128..160
      0: JS_PARENTHESIZED_EXPRESSION@128..159
        0: L_PAREN@128..130 "(" [Newline("\n")] []
        1: JS_ASSIGNMENT_EXPRESSION@130..158
          0: JS_ARRAY_ASSIGNMENT_PATTERN@130..146
            0: L_BRACK@130..132 "[" [] [Whitespace(" ")]
            1: JS_ARRAY_ASSIGNMENT_PATTERN_ELEMENT_LIST@132..144
              0: JS_ARRAY_ASSIGNMENT_PATTERN_ELEMENT@132..144
                0: TS_AS_ASSIGNMENT@132..144
                  0: JS_IDENTIFIER_ASSIGNMENT@132..134
                    0: IDENT@132..134 "a" [] [Whitespace(" ")]
                  1: AS_KW@134..137 "as" [] [Whitespace(" ")]
                  2: TS_STRING_TYPE@137..144
                    0: STRING_KW@137..144 "string" [] [Whitespace(" ")]
                1: (empty)
            2: R_BRACK@144..146 "]" [] [Whitespace(" ")]
          1: EQ@146..148 "=" [] [Whitespace(" ")]
          2: JS_ARRAY_EXPRESSION@148..158
            0: L_BRACK@148..150 "[" [] [Whitespace(" ")]
            1: JS_ARRAY_ELEMENT_LIST@150..157
              0: JS_STRING_LITERAL_EXPRESSION@150..157
                0: JS_STRING_LITERAL@150..157 "\"test\"" [] [Whitespace(" ")]
            2: R_BRACK@157..158 "]" [] []
        2: R_PAREN@158..159 ")" [] []
      1: SEMICOLON@159..160 ";" [] []
    6: JS_FOR_IN_STATEMENT@160..187
      0: FOR_KW@160..165 "for" [Newline("\n")] [Whitespace(" ")]
      1: L_PAREN@165..166 "(" [] []
      2: TS_AS_ASSIGNMENT@166..178
        0: JS_IDENTIFIER_ASSIGNMENT@166..168
          0: IDENT@166..168 "a" [] [Whitespace(" ")]
        1: AS_KW@168..171 "as" [] [Whitespace(" ")]
        2: TS_STRING_TYPE@171..178
          0: STRING_KW@171..178 "string" [] [Whitespace(" ")]
      3: IN_KW@178..181 "in" [] [Whitespace(" ")]
      4: JS_ARRAY_EXPRESSION@181..183
        0: L_BRACK@181..182 "[" [] []
        1: JS_ARRAY_ELEMENT_LIST@182..182
        2: R_BRACK@182..183 "]" [] []
      5: R_PAREN@183..185 ")" [] [Whitespace(" ")]
      6: JS_BLOCK_STATEMENT@185..187
        0: L_CURLY@185..186 "{" [] []
        1: JS_STATEMENT_LIST@186..186
        2: R_CURLY@186..187 "}" [] []
    7: JS_EXPRESSION_STATEMENT@187..221
      0: JS_ASSIGNMENT_EXPRESSION@187..220
        0: JS_PARENTHESIZED_ASSIGNMENT@187..205
          0: L_PAREN@187..189 "(" [Newline("\n")] []
          1: TS_AS_ASSIGNMENT@189..203
            0: JS_IDENTIFIER_ASSIGNMENT@189..191
              0: IDENT@189..191 "a" [] [Whitespace(" ")]
            1: AS_KW@191..194 "as" [] [Whitespace(" ")]
            2: TS_REFERENCE_TYPE@194..203
              0: JS_REFERENCE_IDENTIFIER@194..195
                0: IDENT@194..195 "B" [] []
              1: TS_TYPE_ARGUMENTS@195..203
                0: L_ANGLE@195..196 "<" [] []
                1: TS_TYPE_ARGUMENT_LIST@196..202
                  0: TS_STRING_TYPE@196..202
                    0: STRING_KW@196..202 "string" [] []
                2: R_ANGLE@202..203 ">" [] []
          2: R_PAREN@203..205 ")" [] [Whitespace(" ")]
        1: EQ@205..207 "=" [] [Whitespace(" ")]
        2: JS_OBJECT_EXPRESSION@207..220
          0: L_CURLY@207..209 "{" [] [Whitespace(" ")]
          1: JS_OBJECT_MEMBER_LIST@209..219
            0: JS_PROPERTY_OBJECT_MEMBER@209..219
              0: JS_LITERAL_MEMBER_NAME@209..210
                0: IDENT@209..210 "a" [] []
              1: COLON@210..212 ":" [] [Whitespace(" ")]
              2: JS_STRING_LITERAL_EXPRESSION@212..219
                0: JS_STRING_LITERAL@212..219 "\"test\"" [] [Whitespace(" ")]
          2: R_CURLY@219..220 "}" [] []
      1: SEMICOLON@220..221 ";" [] []
    8: JS_EXPRESSION_STATEMENT@221..239
      0: JS_ASSIGNMENT_EXPRESSION@221..239
        0: JS_PARENTHESIZED_ASSIGNMENT@221..235
          0: L_PAREN@221..223 "(" [Newline("\n")] []
          1: TS_TYPE_ASSERTION_ASSIGNMENT@223..233
            0: L_ANGLE@223..224 "<" [] []
            1: TS_NUMBER_TYPE@224..230
              0: NUMBER_KW@224..230 "number" [] []
            2: R_ANGLE@230..232 ">" [] [Whitespace(" ")]
            3: JS_IDENTIFIER_ASSIGNMENT@232..233
              0: IDENT@232..233 "a" [] []
          2: R_PAREN@233..235 ")" [] [Whitespace(" ")]
        1: PLUSEQ@235..238 "+=" [] [Whitespace(" ")]
        2: JS_NUMBER_LITERAL_EXPRESSION@238..239
          0: JS_NUMBER_LITERAL@238..239 "1" [] []
      1: (empty)
  4: EOF@239..240 "" [Newline("\n")] []