diff --git a/internal/ast/ast.go b/internal/ast/ast.go index 91fefba966..458cfa81b9 100644 --- a/internal/ast/ast.go +++ b/internal/ast/ast.go @@ -779,6 +779,8 @@ func (n *Node) Initializer() *Node { return n.AsForInOrOfStatement().Initializer case KindJsxAttribute: return n.AsJsxAttribute().Initializer + case KindCommonJSExport: + return n.AsCommonJSExport().Initializer } panic("Unhandled case in Node.Initializer") } @@ -806,6 +808,8 @@ func (m *mutableNode) SetInitializer(initializer *Node) { n.AsForInOrOfStatement().Initializer = initializer case KindJsxAttribute: n.AsJsxAttribute().Initializer = initializer + case KindCommonJSExport: + n.AsCommonJSExport().Initializer = initializer default: panic("Unhandled case in mutableNode.SetInitializer") } diff --git a/internal/parser/reparser.go b/internal/parser/reparser.go index 5b82837c3c..d33cb91024 100644 --- a/internal/parser/reparser.go +++ b/internal/parser/reparser.go @@ -357,7 +357,7 @@ func (p *Parser) reparseHosted(tag *ast.Node, parent *ast.Node, jsDoc *ast.Node) } } case ast.KindVariableDeclaration, - ast.KindCommonJSExport, ast.KindExportAssignment, ast.KindJSExportAssignment, + ast.KindCommonJSExport, ast.KindPropertyDeclaration, ast.KindPropertyAssignment, ast.KindShorthandPropertyAssignment: if parent.Initializer() != nil && tag.AsJSDocSatisfiesTag().TypeExpression != nil { parent.AsMutable().SetInitializer(p.makeNewCast( @@ -366,7 +366,8 @@ func (p *Parser) reparseHosted(tag *ast.Node, parent *ast.Node, jsDoc *ast.Node) false /*isAssertion*/)) p.finishMutatedNode(parent) } - case ast.KindReturnStatement, ast.KindParenthesizedExpression: + case ast.KindReturnStatement, ast.KindParenthesizedExpression, + ast.KindExportAssignment, ast.KindJSExportAssignment: if parent.Expression() != nil && tag.AsJSDocSatisfiesTag().TypeExpression != nil { parent.AsMutable().SetExpression(p.makeNewCast( p.factory.DeepCloneReparse(tag.AsJSDocSatisfiesTag().TypeExpression.Type()), diff --git a/testdata/baselines/reference/compiler/panicSatisfiesOnExportEqualsDeclaration.symbols b/testdata/baselines/reference/compiler/panicSatisfiesOnExportEqualsDeclaration.symbols new file mode 100644 index 0000000000..8ebafccf77 --- /dev/null +++ b/testdata/baselines/reference/compiler/panicSatisfiesOnExportEqualsDeclaration.symbols @@ -0,0 +1,11 @@ +//// [tests/cases/compiler/panicSatisfiesOnExportEqualsDeclaration.ts] //// + +=== panicSatisfiesOnExportEqualsDeclaration.js === +/** + * @satisfies {Record} + */ +module.exports = {}; +>module.exports : Symbol(export=, Decl(panicSatisfiesOnExportEqualsDeclaration.js, 0, 0)) +>module : Symbol(module.exports) +>exports : Symbol(export=, Decl(panicSatisfiesOnExportEqualsDeclaration.js, 0, 0)) + diff --git a/testdata/baselines/reference/compiler/panicSatisfiesOnExportEqualsDeclaration.types b/testdata/baselines/reference/compiler/panicSatisfiesOnExportEqualsDeclaration.types new file mode 100644 index 0000000000..ae32b132ed --- /dev/null +++ b/testdata/baselines/reference/compiler/panicSatisfiesOnExportEqualsDeclaration.types @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/panicSatisfiesOnExportEqualsDeclaration.ts] //// + +=== panicSatisfiesOnExportEqualsDeclaration.js === +/** + * @satisfies {Record} + */ +module.exports = {}; +>module.exports = {} : {} +>module.exports : {} +>module : { "export=": {}; } +>exports : {} +>{} : {} + diff --git a/testdata/tests/cases/compiler/panicSatisfiesOnExportEqualsDeclaration.ts b/testdata/tests/cases/compiler/panicSatisfiesOnExportEqualsDeclaration.ts new file mode 100644 index 0000000000..b07c619beb --- /dev/null +++ b/testdata/tests/cases/compiler/panicSatisfiesOnExportEqualsDeclaration.ts @@ -0,0 +1,11 @@ +// @allowJs: true +// @checkJs: true +// @noEmit: true +// @module: commonjs +// @lib: esnext,dom,dom.iterable +// @Filename: panicSatisfiesOnExportEqualsDeclaration.js + +/** + * @satisfies {Record} + */ +module.exports = {};