@@ -106,11 +106,13 @@ func (tx *DeclarationTransformer) visit(node *ast.Node) *ast.Node {
106106 ast .KindImportEqualsDeclaration ,
107107 ast .KindInterfaceDeclaration ,
108108 ast .KindClassDeclaration ,
109+ ast .KindJSTypeAliasDeclaration ,
109110 ast .KindTypeAliasDeclaration ,
110111 ast .KindEnumDeclaration ,
111112 ast .KindVariableStatement ,
112113 ast .KindImportDeclaration ,
113114 ast .KindExportDeclaration ,
115+ ast .KindJSExportAssignment ,
114116 ast .KindExportAssignment :
115117 return tx .visitDeclarationStatements (node )
116118 // statements we elide
@@ -133,8 +135,7 @@ func (tx *DeclarationTransformer) visit(node *ast.Node) *ast.Node {
133135 ast .KindWithStatement ,
134136 ast .KindNotEmittedStatement ,
135137 ast .KindBlock ,
136- ast .KindMissingDeclaration ,
137- ast .KindJSTypeAliasDeclaration : // !!! TODO: Jsdoc support
138+ ast .KindMissingDeclaration :
138139 return nil
139140 // parts of things, things we just visit children of
140141 default :
@@ -180,20 +181,15 @@ func (tx *DeclarationTransformer) collectFileReferences(sourceFile *ast.SourceFi
180181
181182func (tx * DeclarationTransformer ) transformSourceFile (node * ast.SourceFile ) * ast.Node {
182183 var combinedStatements * ast.StatementList
183- if ast .IsSourceFileJS (node ) {
184- // !!! TODO: JS declaration emit support
185- combinedStatements = tx .Factory ().NewNodeList ([]* ast.Node {})
186- } else {
187- statements := tx .Visitor ().VisitNodes (node .Statements )
188- combinedStatements = tx .transformAndReplaceLatePaintedStatements (statements )
189- combinedStatements .Loc = statements .Loc // setTextRange
190- if ast .IsExternalModule (node ) && (! tx .resultHasExternalModuleIndicator || (tx .needsScopeFixMarker && ! tx .resultHasScopeMarker )) {
191- marker := createEmptyExports (tx .Factory ().AsNodeFactory ())
192- newList := append (combinedStatements .Nodes , marker )
193- withMarker := tx .Factory ().NewNodeList (newList )
194- withMarker .Loc = combinedStatements .Loc
195- combinedStatements = withMarker
196- }
184+ statements := tx .Visitor ().VisitNodes (node .Statements )
185+ combinedStatements = tx .transformAndReplaceLatePaintedStatements (statements )
186+ combinedStatements .Loc = statements .Loc // setTextRange
187+ if ast .IsExternalOrCommonJSModule (node ) && (! tx .resultHasExternalModuleIndicator || (tx .needsScopeFixMarker && ! tx .resultHasScopeMarker )) {
188+ marker := createEmptyExports (tx .Factory ().AsNodeFactory ())
189+ newList := append (combinedStatements .Nodes , marker )
190+ withMarker := tx .Factory ().NewNodeList (newList )
191+ withMarker .Loc = combinedStatements .Loc
192+ combinedStatements = withMarker
197193 }
198194 outputFilePath := tspath .GetDirectoryPath (tspath .NormalizeSlashes (tx .declarationFilePath ))
199195 result := tx .Factory ().UpdateSourceFile (node , combinedStatements )
@@ -409,7 +405,7 @@ func (tx *DeclarationTransformer) visitDeclarationSubtree(input *ast.Node) *ast.
409405
410406 canProdiceDiagnostic := canProduceDiagnostics (input )
411407 oldWithinObjectLiteralType := tx .suppressNewDiagnosticContexts
412- shouldEnterSuppressNewDiagnosticsContextContext := (input .Kind == ast .KindTypeLiteral || input .Kind == ast .KindMappedType ) && input .Parent .Kind != ast .KindTypeAliasDeclaration
408+ shouldEnterSuppressNewDiagnosticsContextContext := (input .Kind == ast .KindTypeLiteral || input .Kind == ast .KindMappedType ) && ! ( input .Parent .Kind == ast .KindTypeAliasDeclaration || input . Parent . Kind == ast . KindJSTypeAliasDeclaration )
413409
414410 oldDiag := tx .state .getSymbolAccessibilityDiagnostic
415411 if canProdiceDiagnostic && ! tx .suppressNewDiagnosticContexts {
@@ -476,6 +472,22 @@ func (tx *DeclarationTransformer) visitDeclarationSubtree(input *ast.Node) *ast.
476472 tx .EmitContext ().AddEmitFlags (result , printer .EFSingleLine )
477473 }
478474 }
475+ case ast .KindJSDocTypeExpression :
476+ result = tx .transformJSDocTypeExpression (input .AsJSDocTypeExpression ())
477+ case ast .KindJSDocTypeLiteral :
478+ result = tx .transformJSDocTypeLiteral (input .AsJSDocTypeLiteral ())
479+ case ast .KindJSDocPropertyTag :
480+ result = tx .transformJSDocPropertyTag (input .AsJSDocPropertyTag ())
481+ case ast .KindJSDocAllType :
482+ result = tx .transformJSDocAllType (input .AsJSDocAllType ())
483+ case ast .KindJSDocNullableType :
484+ result = tx .transformJSDocNullableType (input .AsJSDocNullableType ())
485+ case ast .KindJSDocNonNullableType :
486+ result = tx .transformJSDocNonNullableType (input .AsJSDocNonNullableType ())
487+ case ast .KindJSDocOptionalType :
488+ result = tx .transformJSDocOptionalType (input .AsJSDocOptionalType ())
489+ case ast .KindJSDocVariadicType :
490+ result = tx .transformJSDocVariadicType (input .AsJSDocVariadicType ())
479491 default :
480492 result = tx .Visitor ().VisitEachChild (input )
481493 }
@@ -890,7 +902,7 @@ func (tx *DeclarationTransformer) visitDeclarationStatements(input *ast.Node) *a
890902 tx .rewriteModuleSpecifier (input , input .AsExportDeclaration ().ModuleSpecifier ),
891903 tx .tryGetResolutionModeOverride (input .AsExportDeclaration ().Attributes ),
892904 )
893- case ast .KindExportAssignment :
905+ case ast .KindExportAssignment , ast . KindJSExportAssignment :
894906 if ast .IsSourceFile (input .Parent ) {
895907 tx .resultHasExternalModuleIndicator = true
896908 }
@@ -1067,7 +1079,7 @@ func (tx *DeclarationTransformer) transformTopLevelDeclaration(input *ast.Node)
10671079
10681080 var result * ast.Node
10691081 switch input .Kind {
1070- case ast .KindTypeAliasDeclaration :
1082+ case ast .KindTypeAliasDeclaration , ast . KindJSTypeAliasDeclaration :
10711083 result = tx .transformTypeAliasDeclaration (input .AsTypeAliasDeclaration ())
10721084 case ast .KindInterfaceDeclaration :
10731085 result = tx .transformInterfaceDeclaration (input .AsInterfaceDeclaration ())
@@ -1691,3 +1703,60 @@ func (tx *DeclarationTransformer) transformImportDeclaration(decl *ast.ImportDec
16911703 // Nothing visible
16921704 return nil
16931705}
1706+
1707+ func (tx * DeclarationTransformer ) transformJSDocTypeExpression (input * ast.JSDocTypeExpression ) * ast.Node {
1708+ return tx .Visitor ().Visit (input .Type )
1709+ }
1710+
1711+ func (tx * DeclarationTransformer ) transformJSDocTypeLiteral (input * ast.JSDocTypeLiteral ) * ast.Node {
1712+ members , _ := tx .Visitor ().VisitSlice (input .JSDocPropertyTags )
1713+ replacement := tx .Factory ().NewTypeLiteralNode (tx .Factory ().NewNodeList (members ))
1714+ tx .EmitContext ().SetOriginal (replacement , input .AsNode ())
1715+ return replacement
1716+ }
1717+
1718+ func (tx * DeclarationTransformer ) transformJSDocPropertyTag (input * ast.JSDocPropertyTag ) * ast.Node {
1719+ replacement := tx .Factory ().NewPropertySignatureDeclaration (
1720+ nil ,
1721+ tx .Visitor ().Visit (input .TagName ),
1722+ nil ,
1723+ tx .Visitor ().Visit (input .TypeExpression ),
1724+ nil ,
1725+ )
1726+ tx .EmitContext ().SetOriginal (replacement , input .AsNode ())
1727+ return replacement
1728+ }
1729+
1730+ func (tx * DeclarationTransformer ) transformJSDocAllType (input * ast.JSDocAllType ) * ast.Node {
1731+ replacement := tx .Factory ().NewKeywordTypeNode (ast .KindAnyKeyword )
1732+ tx .EmitContext ().SetOriginal (replacement , input .AsNode ())
1733+ return replacement
1734+ }
1735+
1736+ func (tx * DeclarationTransformer ) transformJSDocNullableType (input * ast.JSDocNullableType ) * ast.Node {
1737+ replacement := tx .Factory ().NewUnionTypeNode (tx .Factory ().NewNodeList ([]* ast.Node {
1738+ tx .Visitor ().Visit (input .Type ),
1739+ tx .Factory ().NewLiteralTypeNode (tx .Factory ().NewKeywordExpression (ast .KindNullKeyword )),
1740+ }))
1741+ tx .EmitContext ().SetOriginal (replacement , input .AsNode ())
1742+ return replacement
1743+ }
1744+
1745+ func (tx * DeclarationTransformer ) transformJSDocNonNullableType (input * ast.JSDocNonNullableType ) * ast.Node {
1746+ return tx .Visitor ().Visit (input .Type )
1747+ }
1748+
1749+ func (tx * DeclarationTransformer ) transformJSDocVariadicType (input * ast.JSDocVariadicType ) * ast.Node {
1750+ replacement := tx .Factory ().NewArrayTypeNode (tx .Visitor ().Visit (input .Type ))
1751+ tx .EmitContext ().SetOriginal (replacement , input .AsNode ())
1752+ return replacement
1753+ }
1754+
1755+ func (tx * DeclarationTransformer ) transformJSDocOptionalType (input * ast.JSDocOptionalType ) * ast.Node {
1756+ replacement := tx .Factory ().NewUnionTypeNode (tx .Factory ().NewNodeList ([]* ast.Node {
1757+ tx .Visitor ().Visit (input .Type ),
1758+ tx .Factory ().NewKeywordTypeNode (ast .KindUndefinedKeyword ),
1759+ }))
1760+ tx .EmitContext ().SetOriginal (replacement , input .AsNode ())
1761+ return replacement
1762+ }
0 commit comments