JsModule { bom_token: missing (optional), interpreter_token: missing (optional), directives: JsDirectiveList [], items: JsModuleItemList [ TsInterfaceDeclaration { interface_token: INTERFACE_KW@0..10 "interface" [] [Whitespace(" ")], id: TsIdentifierBinding { name_token: IDENT@10..12 "A" [] [Whitespace(" ")], }, type_parameters: missing (optional), extends_clause: missing (optional), l_curly_token: L_CURLY@12..13 "{" [] [], members: TsTypeMemberList [ TsPropertySignatureTypeMember { readonly_token: missing (optional), name: JsLiteralMemberName { value: IDENT@13..18 "a" [Newline("\n"), Whitespace(" ")] [], }, optional_token: missing (optional), type_annotation: TsTypeAnnotation { colon_token: COLON@18..20 ":" [] [Whitespace(" ")], ty: TsStringType { string_token: STRING_KW@20..26 "string" [] [], }, }, separator_token: missing (optional), }, ], r_curly_token: R_CURLY@26..28 "}" [Newline("\n")] [], }, JsEmptyStatement { semicolon_token: SEMICOLON@28..29 ";" [] [], }, JsVariableStatement { declaration: JsVariableDeclaration { await_token: missing (optional), kind: LET_KW@29..34 "let" [Newline("\n")] [Whitespace(" ")], declarators: JsVariableDeclaratorList [ JsVariableDeclarator { id: JsIdentifierBinding { name_token: IDENT@34..36 "x" [] [Whitespace(" ")], }, variable_annotation: missing (optional), initializer: JsInitializerClause { eq_token: EQ@36..38 "=" [] [Whitespace(" ")], expression: TsSatisfiesExpression { expression: JsObjectExpression { l_curly_token: L_CURLY@38..40 "{" [] [Whitespace(" ")], members: JsObjectMemberList [ JsPropertyObjectMember { name: JsLiteralMemberName { value: IDENT@40..41 "a" [] [], }, colon_token: COLON@41..43 ":" [] [Whitespace(" ")], value: JsStringLiteralExpression { value_token: JS_STRING_LITERAL@43..50 "'test'" [] [Whitespace(" ")], }, }, ], r_curly_token: R_CURLY@50..52 "}" [] [Whitespace(" ")], }, satisfies_token: SATISFIES_KW@52..62 "satisfies" [] [Whitespace(" ")], ty: TsReferenceType { name: JsReferenceIdentifier { value_token: IDENT@62..63 "A" [] [], }, type_arguments: missing (optional), }, }, }, }, ], }, semicolon_token: SEMICOLON@63..64 ";" [] [], }, JsVariableStatement { declaration: JsVariableDeclaration { await_token: missing (optional), kind: LET_KW@64..69 "let" [Newline("\n")] [Whitespace(" ")], declarators: JsVariableDeclaratorList [ JsVariableDeclarator { id: JsIdentifierBinding { name_token: IDENT@69..71 "y" [] [Whitespace(" ")], }, variable_annotation: missing (optional), initializer: JsInitializerClause { eq_token: EQ@71..73 "=" [] [Whitespace(" ")], expression: TsSatisfiesExpression { expression: JsObjectExpression { l_curly_token: L_CURLY@73..75 "{" [] [Whitespace(" ")], members: JsObjectMemberList [ JsPropertyObjectMember { name: JsLiteralMemberName { value: IDENT@75..76 "a" [] [], }, colon_token: COLON@76..78 ":" [] [Whitespace(" ")], value: JsStringLiteralExpression { value_token: JS_STRING_LITERAL@78..84 "'test'" [] [], }, }, COMMA@84..86 "," [] [Whitespace(" ")], JsPropertyObjectMember { name: JsLiteralMemberName { value: IDENT@86..87 "b" [] [], }, colon_token: COLON@87..89 ":" [] [Whitespace(" ")], value: JsStringLiteralExpression { value_token: JS_STRING_LITERAL@89..96 "'test'" [] [Whitespace(" ")], }, }, ], r_curly_token: R_CURLY@96..98 "}" [] [Whitespace(" ")], }, satisfies_token: SATISFIES_KW@98..108 "satisfies" [] [Whitespace(" ")], ty: TsReferenceType { name: JsReferenceIdentifier { value_token: IDENT@108..109 "A" [] [], }, type_arguments: missing (optional), }, }, }, }, ], }, semicolon_token: SEMICOLON@109..110 ";" [] [], }, JsVariableStatement { declaration: JsVariableDeclaration { await_token: missing (optional), kind: CONST_KW@110..117 "const" [Newline("\n")] [Whitespace(" ")], declarators: JsVariableDeclaratorList [ JsVariableDeclarator { id: JsIdentifierBinding { name_token: IDENT@117..119 "z" [] [Whitespace(" ")], }, variable_annotation: missing (optional), initializer: JsInitializerClause { eq_token: EQ@119..121 "=" [] [Whitespace(" ")], expression: TsSatisfiesExpression { expression: JsIdentifierExpression { name: JsReferenceIdentifier { value_token: IDENT@121..131 "undefined" [] [Whitespace(" ")], }, }, satisfies_token: SATISFIES_KW@131..141 "satisfies" [] [Whitespace(" ")], ty: TsNumberLiteralType { minus_token: missing (optional), literal_token: JS_NUMBER_LITERAL@141..142 "1" [] [], }, }, }, }, ], }, semicolon_token: SEMICOLON@142..143 ";" [] [], }, JsVariableStatement { declaration: JsVariableDeclaration { await_token: missing (optional), kind: LET_KW@143..148 "let" [Newline("\n")] [Whitespace(" ")], declarators: JsVariableDeclaratorList [ JsVariableDeclarator { id: JsIdentifierBinding { name_token: IDENT@148..175 "not_a_satisfies_expression" [] [Whitespace(" ")], }, variable_annotation: missing (optional), initializer: JsInitializerClause { eq_token: EQ@175..177 "=" [] [Whitespace(" ")], expression: JsIdentifierExpression { name: JsReferenceIdentifier { value_token: IDENT@177..186 "undefined" [] [], }, }, }, }, ], }, semicolon_token: missing (optional), }, JsExpressionStatement { expression: JsIdentifierExpression { name: JsReferenceIdentifier { value_token: IDENT@186..196 "satisfies" [Newline("\n")] [], }, }, semicolon_token: SEMICOLON@196..197 ";" [] [], }, JsVariableStatement { declaration: JsVariableDeclaration { await_token: missing (optional), kind: LET_KW@197..202 "let" [Newline("\n")] [Whitespace(" ")], declarators: JsVariableDeclaratorList [ JsVariableDeclarator { id: JsIdentifierBinding { name_token: IDENT@202..213 "precedence" [] [Whitespace(" ")], }, variable_annotation: missing (optional), initializer: JsInitializerClause { eq_token: EQ@213..215 "=" [] [Whitespace(" ")], expression: TsSatisfiesExpression { expression: TsSatisfiesExpression { expression: JsBinaryExpression { left: TsSatisfiesExpression { expression: JsStringLiteralExpression { value_token: JS_STRING_LITERAL@215..223 "\"hello\"" [] [Whitespace(" ")], }, satisfies_token: SATISFIES_KW@223..233 "satisfies" [] [Whitespace(" ")], ty: TsStringType { string_token: STRING_KW@233..240 "string" [] [Whitespace(" ")], }, }, operator_token: PLUS@240..242 "+" [] [Whitespace(" ")], right: JsNumberLiteralExpression { value_token: JS_NUMBER_LITERAL@242..244 "3" [] [Whitespace(" ")], }, }, satisfies_token: SATISFIES_KW@244..254 "satisfies" [] [Whitespace(" ")], ty: TsNumberType { number_token: NUMBER_KW@254..261 "number" [] [Whitespace(" ")], }, }, satisfies_token: SATISFIES_KW@261..271 "satisfies" [] [Whitespace(" ")], ty: TsNumberType { number_token: NUMBER_KW@271..277 "number" [] [], }, }, }, }, ], }, semicolon_token: SEMICOLON@277..278 ";" [] [], }, ], eof_token: EOF@278..279 "" [Newline("\n")] [], } 0: JS_MODULE@0..279 0: (empty) 1: (empty) 2: JS_DIRECTIVE_LIST@0..0 3: JS_MODULE_ITEM_LIST@0..278 0: TS_INTERFACE_DECLARATION@0..28 0: INTERFACE_KW@0..10 "interface" [] [Whitespace(" ")] 1: TS_IDENTIFIER_BINDING@10..12 0: IDENT@10..12 "A" [] [Whitespace(" ")] 2: (empty) 3: (empty) 4: L_CURLY@12..13 "{" [] [] 5: TS_TYPE_MEMBER_LIST@13..26 0: TS_PROPERTY_SIGNATURE_TYPE_MEMBER@13..26 0: (empty) 1: JS_LITERAL_MEMBER_NAME@13..18 0: IDENT@13..18 "a" [Newline("\n"), Whitespace(" ")] [] 2: (empty) 3: TS_TYPE_ANNOTATION@18..26 0: COLON@18..20 ":" [] [Whitespace(" ")] 1: TS_STRING_TYPE@20..26 0: STRING_KW@20..26 "string" [] [] 4: (empty) 6: R_CURLY@26..28 "}" [Newline("\n")] [] 1: JS_EMPTY_STATEMENT@28..29 0: SEMICOLON@28..29 ";" [] [] 2: JS_VARIABLE_STATEMENT@29..64 0: JS_VARIABLE_DECLARATION@29..63 0: (empty) 1: LET_KW@29..34 "let" [Newline("\n")] [Whitespace(" ")] 2: JS_VARIABLE_DECLARATOR_LIST@34..63 0: JS_VARIABLE_DECLARATOR@34..63 0: JS_IDENTIFIER_BINDING@34..36 0: IDENT@34..36 "x" [] [Whitespace(" ")] 1: (empty) 2: JS_INITIALIZER_CLAUSE@36..63 0: EQ@36..38 "=" [] [Whitespace(" ")] 1: TS_SATISFIES_EXPRESSION@38..63 0: JS_OBJECT_EXPRESSION@38..52 0: L_CURLY@38..40 "{" [] [Whitespace(" ")] 1: JS_OBJECT_MEMBER_LIST@40..50 0: JS_PROPERTY_OBJECT_MEMBER@40..50 0: JS_LITERAL_MEMBER_NAME@40..41 0: IDENT@40..41 "a" [] [] 1: COLON@41..43 ":" [] [Whitespace(" ")] 2: JS_STRING_LITERAL_EXPRESSION@43..50 0: JS_STRING_LITERAL@43..50 "'test'" [] [Whitespace(" ")] 2: R_CURLY@50..52 "}" [] [Whitespace(" ")] 1: SATISFIES_KW@52..62 "satisfies" [] [Whitespace(" ")] 2: TS_REFERENCE_TYPE@62..63 0: JS_REFERENCE_IDENTIFIER@62..63 0: IDENT@62..63 "A" [] [] 1: (empty) 1: SEMICOLON@63..64 ";" [] [] 3: JS_VARIABLE_STATEMENT@64..110 0: JS_VARIABLE_DECLARATION@64..109 0: (empty) 1: LET_KW@64..69 "let" [Newline("\n")] [Whitespace(" ")] 2: JS_VARIABLE_DECLARATOR_LIST@69..109 0: JS_VARIABLE_DECLARATOR@69..109 0: JS_IDENTIFIER_BINDING@69..71 0: IDENT@69..71 "y" [] [Whitespace(" ")] 1: (empty) 2: JS_INITIALIZER_CLAUSE@71..109 0: EQ@71..73 "=" [] [Whitespace(" ")] 1: TS_SATISFIES_EXPRESSION@73..109 0: JS_OBJECT_EXPRESSION@73..98 0: L_CURLY@73..75 "{" [] [Whitespace(" ")] 1: JS_OBJECT_MEMBER_LIST@75..96 0: JS_PROPERTY_OBJECT_MEMBER@75..84 0: JS_LITERAL_MEMBER_NAME@75..76 0: IDENT@75..76 "a" [] [] 1: COLON@76..78 ":" [] [Whitespace(" ")] 2: JS_STRING_LITERAL_EXPRESSION@78..84 0: JS_STRING_LITERAL@78..84 "'test'" [] [] 1: COMMA@84..86 "," [] [Whitespace(" ")] 2: JS_PROPERTY_OBJECT_MEMBER@86..96 0: JS_LITERAL_MEMBER_NAME@86..87 0: IDENT@86..87 "b" [] [] 1: COLON@87..89 ":" [] [Whitespace(" ")] 2: JS_STRING_LITERAL_EXPRESSION@89..96 0: JS_STRING_LITERAL@89..96 "'test'" [] [Whitespace(" ")] 2: R_CURLY@96..98 "}" [] [Whitespace(" ")] 1: SATISFIES_KW@98..108 "satisfies" [] [Whitespace(" ")] 2: TS_REFERENCE_TYPE@108..109 0: JS_REFERENCE_IDENTIFIER@108..109 0: IDENT@108..109 "A" [] [] 1: (empty) 1: SEMICOLON@109..110 ";" [] [] 4: JS_VARIABLE_STATEMENT@110..143 0: JS_VARIABLE_DECLARATION@110..142 0: (empty) 1: CONST_KW@110..117 "const" [Newline("\n")] [Whitespace(" ")] 2: JS_VARIABLE_DECLARATOR_LIST@117..142 0: JS_VARIABLE_DECLARATOR@117..142 0: JS_IDENTIFIER_BINDING@117..119 0: IDENT@117..119 "z" [] [Whitespace(" ")] 1: (empty) 2: JS_INITIALIZER_CLAUSE@119..142 0: EQ@119..121 "=" [] [Whitespace(" ")] 1: TS_SATISFIES_EXPRESSION@121..142 0: JS_IDENTIFIER_EXPRESSION@121..131 0: JS_REFERENCE_IDENTIFIER@121..131 0: IDENT@121..131 "undefined" [] [Whitespace(" ")] 1: SATISFIES_KW@131..141 "satisfies" [] [Whitespace(" ")] 2: TS_NUMBER_LITERAL_TYPE@141..142 0: (empty) 1: JS_NUMBER_LITERAL@141..142 "1" [] [] 1: SEMICOLON@142..143 ";" [] [] 5: JS_VARIABLE_STATEMENT@143..186 0: JS_VARIABLE_DECLARATION@143..186 0: (empty) 1: LET_KW@143..148 "let" [Newline("\n")] [Whitespace(" ")] 2: JS_VARIABLE_DECLARATOR_LIST@148..186 0: JS_VARIABLE_DECLARATOR@148..186 0: JS_IDENTIFIER_BINDING@148..175 0: IDENT@148..175 "not_a_satisfies_expression" [] [Whitespace(" ")] 1: (empty) 2: JS_INITIALIZER_CLAUSE@175..186 0: EQ@175..177 "=" [] [Whitespace(" ")] 1: JS_IDENTIFIER_EXPRESSION@177..186 0: JS_REFERENCE_IDENTIFIER@177..186 0: IDENT@177..186 "undefined" [] [] 1: (empty) 6: JS_EXPRESSION_STATEMENT@186..197 0: JS_IDENTIFIER_EXPRESSION@186..196 0: JS_REFERENCE_IDENTIFIER@186..196 0: IDENT@186..196 "satisfies" [Newline("\n")] [] 1: SEMICOLON@196..197 ";" [] [] 7: JS_VARIABLE_STATEMENT@197..278 0: JS_VARIABLE_DECLARATION@197..277 0: (empty) 1: LET_KW@197..202 "let" [Newline("\n")] [Whitespace(" ")] 2: JS_VARIABLE_DECLARATOR_LIST@202..277 0: JS_VARIABLE_DECLARATOR@202..277 0: JS_IDENTIFIER_BINDING@202..213 0: IDENT@202..213 "precedence" [] [Whitespace(" ")] 1: (empty) 2: JS_INITIALIZER_CLAUSE@213..277 0: EQ@213..215 "=" [] [Whitespace(" ")] 1: TS_SATISFIES_EXPRESSION@215..277 0: TS_SATISFIES_EXPRESSION@215..261 0: JS_BINARY_EXPRESSION@215..244 0: TS_SATISFIES_EXPRESSION@215..240 0: JS_STRING_LITERAL_EXPRESSION@215..223 0: JS_STRING_LITERAL@215..223 "\"hello\"" [] [Whitespace(" ")] 1: SATISFIES_KW@223..233 "satisfies" [] [Whitespace(" ")] 2: TS_STRING_TYPE@233..240 0: STRING_KW@233..240 "string" [] [Whitespace(" ")] 1: PLUS@240..242 "+" [] [Whitespace(" ")] 2: JS_NUMBER_LITERAL_EXPRESSION@242..244 0: JS_NUMBER_LITERAL@242..244 "3" [] [Whitespace(" ")] 1: SATISFIES_KW@244..254 "satisfies" [] [Whitespace(" ")] 2: TS_NUMBER_TYPE@254..261 0: NUMBER_KW@254..261 "number" [] [Whitespace(" ")] 1: SATISFIES_KW@261..271 "satisfies" [] [Whitespace(" ")] 2: TS_NUMBER_TYPE@271..277 0: NUMBER_KW@271..277 "number" [] [] 1: SEMICOLON@277..278 ";" [] [] 4: EOF@278..279 "" [Newline("\n")] []