UNPKG

typescript

Version:

TypeScript is a language for application scale JavaScript development

1,064 lines • 145 kB
// Code generated by _scripts/generate-ts-ast.ts. DO NOT EDIT. import { NodeFlags } from "#enums/nodeFlags"; import { SyntaxKind } from "#enums/syntaxKind"; import { TokenFlags } from "#enums/tokenFlags"; import { getTokenPosOfNode } from "./astnav.js"; import { cloneSourceFileData } from "./utils.js"; import { forEachChildOfJSDocParameterTag, forEachChildOfJSDocPropertyTag, } from "./visitor.js"; export class NodeObject { kind; flags = 0; pos = -1; end = -1; parent = undefined; _data; constructor(kind, data) { this.kind = kind; this._data = data; } get ambientModuleNames() { return this._data?.ambientModuleNames; } get argument() { return this._data?.argument; } get argumentExpression() { return this._data?.argumentExpression; } get arguments() { return this._data?.arguments; } get assertsModifier() { return this._data?.assertsModifier; } get asteriskToken() { return this._data?.asteriskToken; } get attributes() { return this._data?.attributes; } get awaitModifier() { return this._data?.awaitModifier; } get block() { return this._data?.block; } get body() { return this._data?.body; } get caseBlock() { return this._data?.caseBlock; } get catchClause() { return this._data?.catchClause; } get checkType() { return this._data?.checkType; } get children() { return this._data?.children; } get className() { return this._data?.className; } get clauses() { return this._data?.clauses; } get closingElement() { return this._data?.closingElement; } get closingFragment() { return this._data?.closingFragment; } get colonToken() { return this._data?.colonToken; } get comment() { return this._data?.comment; } get condition() { return this._data?.condition; } get constraint() { return this._data?.constraint; } get containsOnlyTriviaWhiteSpaces() { return this._data?.containsOnlyTriviaWhiteSpaces; } get declarationList() { return this._data?.declarationList; } get declarations() { return this._data?.declarations; } get defaultType() { return this._data?.defaultType; } get dotDotDotToken() { return this._data?.dotDotDotToken; } get elementType() { return this._data?.elementType; } get elements() { return this._data?.elements; } get elseStatement() { return this._data?.elseStatement; } get endOfFileToken() { return this._data?.endOfFileToken; } get equalsGreaterThanToken() { return this._data?.equalsGreaterThanToken; } get equalsToken() { return this._data?.equalsToken; } get exclamationToken() { return this._data?.exclamationToken; } get exportClause() { return this._data?.exportClause; } get exprName() { return this._data?.exprName; } get expression() { return this._data?.expression; } get extendsType() { return this._data?.extendsType; } get externalModuleIndicator() { return this._data?.externalModuleIndicator; } get falseType() { return this._data?.falseType; } get fileName() { return this._data?.fileName; } get finallyBlock() { return this._data?.finallyBlock; } get head() { return this._data?.head; } get heritageClauses() { return this._data?.heritageClauses; } get importClause() { return this._data?.importClause; } get imports() { return this._data?.imports; } get incrementor() { return this._data?.incrementor; } get indexType() { return this._data?.indexType; } get initializer() { return this._data?.initializer; } get isArrayType() { return this._data?.isArrayType; } get isBracketed() { return this._data?.isBracketed; } get isDeclarationFile() { return this._data?.isDeclarationFile; } get isExportEquals() { return this._data?.isExportEquals; } get isNameFirst() { return this._data?.isNameFirst; } get isSpread() { return this._data?.isSpread; } get isTypeOf() { return this._data?.isTypeOf; } get isTypeOnly() { return this._data?.isTypeOnly; } get jsdocPropertyTags() { return this._data?.jsdocPropertyTags; } get keyword() { return this._data?.keyword; } get keywordToken() { return this._data?.keywordToken; } get label() { return this._data?.label; } get languageVariant() { return this._data?.languageVariant; } get left() { return this._data?.left; } get libReferenceDirectives() { return this._data?.libReferenceDirectives; } get literal() { return this._data?.literal; } get members() { return this._data?.members; } get modifiers() { return this._data?.modifiers; } get moduleAugmentations() { return this._data?.moduleAugmentations; } get moduleReference() { return this._data?.moduleReference; } get moduleSpecifier() { return this._data?.moduleSpecifier; } get multiLine() { return this._data?.multiLine; } get name() { return this._data?.name; } get nameExpression() { return this._data?.nameExpression; } get nameType() { return this._data?.nameType; } get namedBindings() { return this._data?.namedBindings; } get namespace() { return this._data?.namespace; } get objectAssignmentInitializer() { return this._data?.objectAssignmentInitializer; } get objectType() { return this._data?.objectType; } get openingElement() { return this._data?.openingElement; } get openingFragment() { return this._data?.openingFragment; } get operand() { return this._data?.operand; } get operator() { return this._data?.operator; } get operatorToken() { return this._data?.operatorToken; } get parameterName() { return this._data?.parameterName; } get parameters() { return this._data?.parameters; } get path() { return this._data?.path; } get phaseModifier() { return this._data?.phaseModifier; } get postfixToken() { return this._data?.postfixToken; } get properties() { return this._data?.properties; } get propertyName() { return this._data?.propertyName; } get qualifier() { return this._data?.qualifier; } get questionDotToken() { return this._data?.questionDotToken; } get questionToken() { return this._data?.questionToken; } get rawText() { return this._data?.rawText; } get readonlyToken() { return this._data?.readonlyToken; } get referencedFiles() { return this._data?.referencedFiles; } get right() { return this._data?.right; } get scriptKind() { return this._data?.scriptKind; } get statement() { return this._data?.statement; } get statements() { return this._data?.statements; } get tag() { return this._data?.tag; } get tagName() { return this._data?.tagName; } get tags() { return this._data?.tags; } get template() { return this._data?.template; } get templateFlags() { return this._data?.templateFlags; } get templateSpans() { return this._data?.templateSpans; } get text() { return this._data?.text; } get thenStatement() { return this._data?.thenStatement; } get thisArg() { return this._data?.thisArg; } get token() { return this._data?.token; } get tokenCache() { return this._data?.tokenCache; } get tokenFlags() { return this._data?.tokenFlags; } get trueType() { return this._data?.trueType; } get tryBlock() { return this._data?.tryBlock; } get tupleNameSource() { return this._data?.tupleNameSource; } get type() { return this._data?.type; } get typeArguments() { return this._data?.typeArguments; } get typeExpression() { return this._data?.typeExpression; } get typeName() { return this._data?.typeName; } get typeParameter() { return this._data?.typeParameter; } get typeParameters() { return this._data?.typeParameters; } get typeReferenceDirectives() { return this._data?.typeReferenceDirectives; } get types() { return this._data?.types; } get value() { return this._data?.value; } get variableDeclaration() { return this._data?.variableDeclaration; } get whenFalse() { return this._data?.whenFalse; } get whenTrue() { return this._data?.whenTrue; } forEachChild(visitor, visitArray) { const fn = forEachChildTable[this.kind]; return fn ? fn(this._data, visitor, visitArray) : undefined; } getSourceFile() { let node = this; while (node.parent) node = node.parent; return node; } getStart(sourceFile, includeJsDocComment) { return getTokenPosOfNode(this, sourceFile ?? this.getSourceFile(), includeJsDocComment); } getFullStart() { return this.pos; } getEnd() { return this.end; } getWidth(sourceFile) { return this.getEnd() - this.getStart(sourceFile); } getFullWidth() { return this.end - this.pos; } getLeadingTriviaWidth(sourceFile) { return this.getStart(sourceFile) - this.pos; } getFullText(sourceFile) { return (sourceFile ?? this.getSourceFile()).text.substring(this.pos, this.end); } getText(sourceFile) { sourceFile ??= this.getSourceFile(); return sourceFile.text.substring(this.getStart(sourceFile), this.end); } } function isNodeArray(array) { return "pos" in array && "end" in array; } export function createNodeArray(elements, pos = -1, end = -1) { if (isNodeArray(elements)) return elements; const arr = elements.slice(); arr.pos = pos; arr.end = end; return arr; } export function cloneNode(node) { const data = cloneNodeData(node); const clone = new NodeObject(node.kind, data); clone.flags = node.flags; clone.pos = node.pos; clone.end = node.end; return clone; } function cloneNodeData(node) { const n = node; switch (node.kind) { case SyntaxKind.Identifier: return { text: n.text }; case SyntaxKind.PrivateIdentifier: return { text: n.text }; case SyntaxKind.QualifiedName: return { left: n.left, right: n.right }; case SyntaxKind.ComputedPropertyName: return { expression: n.expression }; case SyntaxKind.Decorator: return { expression: n.expression }; case SyntaxKind.IfStatement: return { expression: n.expression, thenStatement: n.thenStatement, elseStatement: n.elseStatement }; case SyntaxKind.DoStatement: return { statement: n.statement, expression: n.expression }; case SyntaxKind.WhileStatement: return { expression: n.expression, statement: n.statement }; case SyntaxKind.ForStatement: return { initializer: n.initializer, condition: n.condition, incrementor: n.incrementor, statement: n.statement }; case SyntaxKind.BreakStatement: return { label: n.label }; case SyntaxKind.ContinueStatement: return { label: n.label }; case SyntaxKind.ReturnStatement: return { expression: n.expression }; case SyntaxKind.WithStatement: return { expression: n.expression, statement: n.statement }; case SyntaxKind.SwitchStatement: return { expression: n.expression, caseBlock: n.caseBlock }; case SyntaxKind.CaseBlock: return { clauses: n.clauses }; case SyntaxKind.ThrowStatement: return { expression: n.expression }; case SyntaxKind.TryStatement: return { tryBlock: n.tryBlock, catchClause: n.catchClause, finallyBlock: n.finallyBlock }; case SyntaxKind.CatchClause: return { variableDeclaration: n.variableDeclaration, block: n.block }; case SyntaxKind.LabeledStatement: return { label: n.label, statement: n.statement }; case SyntaxKind.ExpressionStatement: return { expression: n.expression }; case SyntaxKind.Block: return { statements: n.statements, multiLine: n.multiLine }; case SyntaxKind.VariableStatement: return { modifiers: n.modifiers, declarationList: n.declarationList }; case SyntaxKind.VariableDeclaration: return { name: n.name, exclamationToken: n.exclamationToken, type: n.type, initializer: n.initializer }; case SyntaxKind.VariableDeclarationList: return { declarations: n.declarations }; case SyntaxKind.Parameter: return { modifiers: n.modifiers, dotDotDotToken: n.dotDotDotToken, name: n.name, questionToken: n.questionToken, type: n.type, initializer: n.initializer }; case SyntaxKind.BindingElement: return { dotDotDotToken: n.dotDotDotToken, propertyName: n.propertyName, name: n.name, initializer: n.initializer }; case SyntaxKind.MissingDeclaration: return { modifiers: n.modifiers }; case SyntaxKind.FunctionDeclaration: return { modifiers: n.modifiers, asteriskToken: n.asteriskToken, name: n.name, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; case SyntaxKind.ClassDeclaration: return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, heritageClauses: n.heritageClauses, members: n.members }; case SyntaxKind.ClassExpression: return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, heritageClauses: n.heritageClauses, members: n.members }; case SyntaxKind.HeritageClause: return { token: n.token, types: n.types }; case SyntaxKind.InterfaceDeclaration: return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, heritageClauses: n.heritageClauses, members: n.members }; case SyntaxKind.TypeAliasDeclaration: case SyntaxKind.JSTypeAliasDeclaration: return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, type: n.type }; case SyntaxKind.EnumMember: return { name: n.name, initializer: n.initializer }; case SyntaxKind.EnumDeclaration: return { modifiers: n.modifiers, name: n.name, members: n.members }; case SyntaxKind.ModuleBlock: return { statements: n.statements }; case SyntaxKind.ImportDeclaration: case SyntaxKind.JSImportDeclaration: return { modifiers: n.modifiers, importClause: n.importClause, moduleSpecifier: n.moduleSpecifier, attributes: n.attributes }; case SyntaxKind.ExternalModuleReference: return { expression: n.expression }; case SyntaxKind.NamespaceImport: return { name: n.name }; case SyntaxKind.NamedImports: return { elements: n.elements }; case SyntaxKind.ExportAssignment: return { modifiers: n.modifiers, isExportEquals: n.isExportEquals, type: n.type, expression: n.expression }; case SyntaxKind.NamespaceExportDeclaration: return { modifiers: n.modifiers, name: n.name }; case SyntaxKind.NamespaceExport: return { name: n.name }; case SyntaxKind.NamedExports: return { elements: n.elements }; case SyntaxKind.ExportSpecifier: return { isTypeOnly: n.isTypeOnly, propertyName: n.propertyName, name: n.name }; case SyntaxKind.CallSignature: return { typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; case SyntaxKind.ConstructSignature: return { typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; case SyntaxKind.Constructor: return { modifiers: n.modifiers, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; case SyntaxKind.GetAccessor: return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; case SyntaxKind.SetAccessor: return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; case SyntaxKind.IndexSignature: return { modifiers: n.modifiers, parameters: n.parameters, type: n.type }; case SyntaxKind.MethodSignature: return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; case SyntaxKind.MethodDeclaration: return { modifiers: n.modifiers, asteriskToken: n.asteriskToken, name: n.name, postfixToken: n.postfixToken, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; case SyntaxKind.PropertySignature: return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, type: n.type, initializer: n.initializer }; case SyntaxKind.PropertyDeclaration: return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, type: n.type, initializer: n.initializer }; case SyntaxKind.ClassStaticBlockDeclaration: return { modifiers: n.modifiers, body: n.body }; case SyntaxKind.StringLiteral: return { text: n.text, tokenFlags: n.tokenFlags }; case SyntaxKind.NumericLiteral: return { text: n.text, tokenFlags: n.tokenFlags }; case SyntaxKind.BigIntLiteral: return { text: n.text, tokenFlags: n.tokenFlags }; case SyntaxKind.RegularExpressionLiteral: return { text: n.text, tokenFlags: n.tokenFlags }; case SyntaxKind.NoSubstitutionTemplateLiteral: return { text: n.text, templateFlags: n.templateFlags }; case SyntaxKind.BinaryExpression: return { modifiers: n.modifiers, left: n.left, type: n.type, operatorToken: n.operatorToken, right: n.right }; case SyntaxKind.PrefixUnaryExpression: return { operator: n.operator, operand: n.operand }; case SyntaxKind.PostfixUnaryExpression: return { operand: n.operand, operator: n.operator }; case SyntaxKind.YieldExpression: return { asteriskToken: n.asteriskToken, expression: n.expression }; case SyntaxKind.ArrowFunction: return { modifiers: n.modifiers, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, equalsGreaterThanToken: n.equalsGreaterThanToken, body: n.body }; case SyntaxKind.FunctionExpression: return { modifiers: n.modifiers, asteriskToken: n.asteriskToken, name: n.name, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; case SyntaxKind.AsExpression: return { expression: n.expression, type: n.type }; case SyntaxKind.SatisfiesExpression: return { expression: n.expression, type: n.type }; case SyntaxKind.ConditionalExpression: return { condition: n.condition, questionToken: n.questionToken, whenTrue: n.whenTrue, colonToken: n.colonToken, whenFalse: n.whenFalse }; case SyntaxKind.PropertyAccessExpression: return { expression: n.expression, questionDotToken: n.questionDotToken, name: n.name }; case SyntaxKind.ElementAccessExpression: return { expression: n.expression, questionDotToken: n.questionDotToken, argumentExpression: n.argumentExpression }; case SyntaxKind.CallExpression: return { expression: n.expression, questionDotToken: n.questionDotToken, typeArguments: n.typeArguments, arguments: n.arguments }; case SyntaxKind.NewExpression: return { expression: n.expression, typeArguments: n.typeArguments, arguments: n.arguments }; case SyntaxKind.MetaProperty: return { keywordToken: n.keywordToken, name: n.name }; case SyntaxKind.NonNullExpression: return { expression: n.expression }; case SyntaxKind.SpreadElement: return { expression: n.expression }; case SyntaxKind.TemplateExpression: return { head: n.head, templateSpans: n.templateSpans }; case SyntaxKind.TemplateSpan: return { expression: n.expression, literal: n.literal }; case SyntaxKind.TaggedTemplateExpression: return { tag: n.tag, questionDotToken: n.questionDotToken, typeArguments: n.typeArguments, template: n.template }; case SyntaxKind.ParenthesizedExpression: return { expression: n.expression }; case SyntaxKind.ArrayLiteralExpression: return { elements: n.elements, multiLine: n.multiLine }; case SyntaxKind.ObjectLiteralExpression: return { properties: n.properties, multiLine: n.multiLine }; case SyntaxKind.SpreadAssignment: return { expression: n.expression }; case SyntaxKind.PropertyAssignment: return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, type: n.type, initializer: n.initializer }; case SyntaxKind.ShorthandPropertyAssignment: return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, type: n.type, equalsToken: n.equalsToken, objectAssignmentInitializer: n.objectAssignmentInitializer }; case SyntaxKind.DeleteExpression: return { expression: n.expression }; case SyntaxKind.TypeOfExpression: return { expression: n.expression }; case SyntaxKind.VoidExpression: return { expression: n.expression }; case SyntaxKind.AwaitExpression: return { expression: n.expression }; case SyntaxKind.TypeAssertionExpression: return { type: n.type, expression: n.expression }; case SyntaxKind.UnionType: return { types: n.types }; case SyntaxKind.IntersectionType: return { types: n.types }; case SyntaxKind.ConditionalType: return { checkType: n.checkType, extendsType: n.extendsType, trueType: n.trueType, falseType: n.falseType }; case SyntaxKind.TypeOperator: return { operator: n.operator, type: n.type }; case SyntaxKind.InferType: return { typeParameter: n.typeParameter }; case SyntaxKind.ArrayType: return { elementType: n.elementType }; case SyntaxKind.IndexedAccessType: return { objectType: n.objectType, indexType: n.indexType }; case SyntaxKind.TypeReference: return { typeName: n.typeName, typeArguments: n.typeArguments }; case SyntaxKind.ExpressionWithTypeArguments: return { expression: n.expression, typeArguments: n.typeArguments }; case SyntaxKind.LiteralType: return { literal: n.literal }; case SyntaxKind.TypePredicate: return { assertsModifier: n.assertsModifier, parameterName: n.parameterName, type: n.type }; case SyntaxKind.ImportAttribute: return { name: n.name, value: n.value }; case SyntaxKind.ImportAttributes: return { token: n.token, attributes: n.attributes, multiLine: n.multiLine }; case SyntaxKind.TypeQuery: return { exprName: n.exprName, typeArguments: n.typeArguments }; case SyntaxKind.MappedType: return { readonlyToken: n.readonlyToken, typeParameter: n.typeParameter, nameType: n.nameType, questionToken: n.questionToken, type: n.type, members: n.members }; case SyntaxKind.TypeLiteral: return { members: n.members }; case SyntaxKind.TupleType: return { elements: n.elements }; case SyntaxKind.NamedTupleMember: return { dotDotDotToken: n.dotDotDotToken, name: n.name, questionToken: n.questionToken, type: n.type }; case SyntaxKind.OptionalType: return { type: n.type }; case SyntaxKind.RestType: return { type: n.type }; case SyntaxKind.ParenthesizedType: return { type: n.type }; case SyntaxKind.FunctionType: return { typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; case SyntaxKind.ConstructorType: return { modifiers: n.modifiers, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; case SyntaxKind.TemplateHead: return { text: n.text, rawText: n.rawText, templateFlags: n.templateFlags }; case SyntaxKind.TemplateMiddle: return { text: n.text, rawText: n.rawText, templateFlags: n.templateFlags }; case SyntaxKind.TemplateTail: return { text: n.text, rawText: n.rawText, templateFlags: n.templateFlags }; case SyntaxKind.TemplateLiteralType: return { head: n.head, templateSpans: n.templateSpans }; case SyntaxKind.TemplateLiteralTypeSpan: return { type: n.type, literal: n.literal }; case SyntaxKind.SyntheticExpression: return { type: n.type, isSpread: n.isSpread, tupleNameSource: n.tupleNameSource }; case SyntaxKind.PartiallyEmittedExpression: return { expression: n.expression }; case SyntaxKind.JsxElement: return { openingElement: n.openingElement, children: n.children, closingElement: n.closingElement }; case SyntaxKind.JsxAttributes: return { properties: n.properties }; case SyntaxKind.JsxNamespacedName: return { namespace: n.namespace, name: n.name }; case SyntaxKind.JsxOpeningElement: return { tagName: n.tagName, typeArguments: n.typeArguments, attributes: n.attributes }; case SyntaxKind.JsxSelfClosingElement: return { tagName: n.tagName, typeArguments: n.typeArguments, attributes: n.attributes }; case SyntaxKind.JsxFragment: return { openingFragment: n.openingFragment, children: n.children, closingFragment: n.closingFragment }; case SyntaxKind.JsxAttribute: return { name: n.name, initializer: n.initializer }; case SyntaxKind.JsxSpreadAttribute: return { expression: n.expression }; case SyntaxKind.JsxClosingElement: return { tagName: n.tagName }; case SyntaxKind.JsxExpression: return { dotDotDotToken: n.dotDotDotToken, expression: n.expression }; case SyntaxKind.JsxText: return { text: n.text, containsOnlyTriviaWhiteSpaces: n.containsOnlyTriviaWhiteSpaces }; case SyntaxKind.SyntaxList: return { children: n.children }; case SyntaxKind.JSDoc: return { comment: n.comment, tags: n.tags }; case SyntaxKind.JSDocTypeExpression: return { type: n.type }; case SyntaxKind.JSDocNonNullableType: return { type: n.type }; case SyntaxKind.JSDocNullableType: return { type: n.type }; case SyntaxKind.JSDocVariadicType: return { type: n.type }; case SyntaxKind.JSDocOptionalType: return { type: n.type }; case SyntaxKind.JSDocTypeTag: return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; case SyntaxKind.JSDocUnknownTag: return { tagName: n.tagName, comment: n.comment }; case SyntaxKind.JSDocTemplateTag: return { tagName: n.tagName, constraint: n.constraint, typeParameters: n.typeParameters, comment: n.comment }; case SyntaxKind.JSDocReturnTag: return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; case SyntaxKind.JSDocPublicTag: return { tagName: n.tagName, comment: n.comment }; case SyntaxKind.JSDocPrivateTag: return { tagName: n.tagName, comment: n.comment }; case SyntaxKind.JSDocProtectedTag: return { tagName: n.tagName, comment: n.comment }; case SyntaxKind.JSDocReadonlyTag: return { tagName: n.tagName, comment: n.comment }; case SyntaxKind.JSDocOverrideTag: return { tagName: n.tagName, comment: n.comment }; case SyntaxKind.JSDocDeprecatedTag: return { tagName: n.tagName, comment: n.comment }; case SyntaxKind.JSDocSeeTag: return { tagName: n.tagName, nameExpression: n.nameExpression, comment: n.comment }; case SyntaxKind.JSDocImplementsTag: return { tagName: n.tagName, className: n.className, comment: n.comment }; case SyntaxKind.JSDocAugmentsTag: return { tagName: n.tagName, className: n.className, comment: n.comment }; case SyntaxKind.JSDocSatisfiesTag: return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; case SyntaxKind.JSDocThrowsTag: return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; case SyntaxKind.JSDocThisTag: return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; case SyntaxKind.JSDocImportTag: return { tagName: n.tagName, importClause: n.importClause, moduleSpecifier: n.moduleSpecifier, attributes: n.attributes, comment: n.comment }; case SyntaxKind.JSDocCallbackTag: return { tagName: n.tagName, typeExpression: n.typeExpression, name: n.name, comment: n.comment }; case SyntaxKind.JSDocOverloadTag: return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; case SyntaxKind.JSDocTypedefTag: return { tagName: n.tagName, typeExpression: n.typeExpression, name: n.name, comment: n.comment }; case SyntaxKind.JSDocSignature: return { typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; case SyntaxKind.JSDocNameReference: return { name: n.name }; case SyntaxKind.ModuleDeclaration: return { modifiers: n.modifiers, keyword: n.keyword, name: n.name, body: n.body }; case SyntaxKind.ImportEqualsDeclaration: return { modifiers: n.modifiers, isTypeOnly: n.isTypeOnly, name: n.name, moduleReference: n.moduleReference }; case SyntaxKind.ExportDeclaration: return { modifiers: n.modifiers, isTypeOnly: n.isTypeOnly, exportClause: n.exportClause, moduleSpecifier: n.moduleSpecifier, attributes: n.attributes }; case SyntaxKind.ImportType: return { isTypeOf: n.isTypeOf, argument: n.argument, attributes: n.attributes, qualifier: n.qualifier, typeArguments: n.typeArguments }; case SyntaxKind.ImportClause: return { phaseModifier: n.phaseModifier, name: n.name, namedBindings: n.namedBindings }; case SyntaxKind.ImportSpecifier: return { isTypeOnly: n.isTypeOnly, propertyName: n.propertyName, name: n.name }; case SyntaxKind.JSDocText: return { text: n.text }; case SyntaxKind.JSDocLink: return { name: n.name, text: n.text }; case SyntaxKind.JSDocLinkPlain: return { name: n.name, text: n.text }; case SyntaxKind.JSDocLinkCode: return { name: n.name, text: n.text }; case SyntaxKind.TypeParameter: return { modifiers: n.modifiers, name: n.name, constraint: n.constraint, expression: n.expression, defaultType: n.defaultType }; case SyntaxKind.SyntheticReferenceExpression: return { expression: n.expression, thisArg: n.thisArg }; case SyntaxKind.JSDocTypeLiteral: return { jsdocPropertyTags: n.jsdocPropertyTags, isArrayType: n.isArrayType }; case SyntaxKind.ForInStatement: return { awaitModifier: n.awaitModifier, initializer: n.initializer, expression: n.expression, statement: n.statement }; case SyntaxKind.ForOfStatement: return { awaitModifier: n.awaitModifier, initializer: n.initializer, expression: n.expression, statement: n.statement }; case SyntaxKind.CaseClause: return { expression: n.expression, statements: n.statements }; case SyntaxKind.DefaultClause: return { expression: n.expression, statements: n.statements }; case SyntaxKind.ObjectBindingPattern: return { elements: n.elements }; case SyntaxKind.ArrayBindingPattern: return { elements: n.elements }; case SyntaxKind.JSDocParameterTag: return { tagName: n.tagName, name: n.name, isBracketed: n.isBracketed, typeExpression: n.typeExpression, isNameFirst: n.isNameFirst, comment: n.comment }; case SyntaxKind.JSDocPropertyTag: return { tagName: n.tagName, name: n.name, isBracketed: n.isBracketed, typeExpression: n.typeExpression, isNameFirst: n.isNameFirst, comment: n.comment }; case SyntaxKind.SourceFile: return cloneSourceFileData(n); default: return undefined; } } const forEachChildTable = { [SyntaxKind.QualifiedName]: (data, cbNode, cbNodes) => visitNode(cbNode, data.left) || visitNode(cbNode, data.right), [SyntaxKind.ComputedPropertyName]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.Decorator]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.IfStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNode(cbNode, data.thenStatement) || visitNode(cbNode, data.elseStatement), [SyntaxKind.DoStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.statement) || visitNode(cbNode, data.expression), [SyntaxKind.WhileStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNode(cbNode, data.statement), [SyntaxKind.ForStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.initializer) || visitNode(cbNode, data.condition) || visitNode(cbNode, data.incrementor) || visitNode(cbNode, data.statement), [SyntaxKind.BreakStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.label), [SyntaxKind.ContinueStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.label), [SyntaxKind.ReturnStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.WithStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNode(cbNode, data.statement), [SyntaxKind.SwitchStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNode(cbNode, data.caseBlock), [SyntaxKind.CaseBlock]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.clauses), [SyntaxKind.ThrowStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.TryStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tryBlock) || visitNode(cbNode, data.catchClause) || visitNode(cbNode, data.finallyBlock), [SyntaxKind.CatchClause]: (data, cbNode, cbNodes) => visitNode(cbNode, data.variableDeclaration) || visitNode(cbNode, data.block), [SyntaxKind.LabeledStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.label) || visitNode(cbNode, data.statement), [SyntaxKind.ExpressionStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.Block]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.statements), [SyntaxKind.VariableStatement]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.declarationList), [SyntaxKind.VariableDeclaration]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name) || visitNode(cbNode, data.exclamationToken) || visitNode(cbNode, data.type) || visitNode(cbNode, data.initializer), [SyntaxKind.VariableDeclarationList]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.declarations), [SyntaxKind.Parameter]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.dotDotDotToken) || visitNode(cbNode, data.name) || visitNode(cbNode, data.questionToken) || visitNode(cbNode, data.type) || visitNode(cbNode, data.initializer), [SyntaxKind.BindingElement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.dotDotDotToken) || visitNode(cbNode, data.propertyName) || visitNode(cbNode, data.name) || visitNode(cbNode, data.initializer), [SyntaxKind.MissingDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers), [SyntaxKind.FunctionDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.asteriskToken) || visitNode(cbNode, data.name) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type) || visitNode(cbNode, data.body), [SyntaxKind.ClassDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.heritageClauses) || visitNodes(cbNode, cbNodes, data.members), [SyntaxKind.ClassExpression]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.heritageClauses) || visitNodes(cbNode, cbNodes, data.members), [SyntaxKind.HeritageClause]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.types), [SyntaxKind.InterfaceDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.heritageClauses) || visitNodes(cbNode, cbNodes, data.members), [SyntaxKind.TypeAliasDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNode(cbNode, data.type), [SyntaxKind.JSTypeAliasDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNode(cbNode, data.type), [SyntaxKind.EnumMember]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name) || visitNode(cbNode, data.initializer), [SyntaxKind.EnumDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNodes(cbNode, cbNodes, data.members), [SyntaxKind.ModuleBlock]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.statements), [SyntaxKind.ImportDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.importClause) || visitNode(cbNode, data.moduleSpecifier) || visitNode(cbNode, data.attributes), [SyntaxKind.JSImportDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.importClause) || visitNode(cbNode, data.moduleSpecifier) || visitNode(cbNode, data.attributes), [SyntaxKind.ExternalModuleReference]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.NamespaceImport]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), [SyntaxKind.NamedImports]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), [SyntaxKind.ExportAssignment]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.type) || visitNode(cbNode, data.expression), [SyntaxKind.NamespaceExportDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name), [SyntaxKind.NamespaceExport]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), [SyntaxKind.NamedExports]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), [SyntaxKind.ExportSpecifier]: (data, cbNode, cbNodes) => visitNode(cbNode, data.propertyName) || visitNode(cbNode, data.name), [SyntaxKind.CallSignature]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type), [SyntaxKind.ConstructSignature]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type), [SyntaxKind.Constructor]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type) || visitNode(cbNode, data.body), [SyntaxKind.GetAccessor]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type) || visitNode(cbNode, data.body), [SyntaxKind.SetAccessor]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type) || visitNode(cbNode, data.body), [SyntaxKind.IndexSignature]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type), [SyntaxKind.MethodSignature]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNode(cbNode, data.postfixToken) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type), [SyntaxKind.MethodDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.asteriskToken) || visitNode(cbNode, data.name) || visitNode(cbNode, data.postfixToken) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type) || visitNode(cbNode, data.body), [SyntaxKind.PropertySignature]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNode(cbNode, data.postfixToken) || visitNode(cbNode, data.type) || visitNode(cbNode, data.initializer), [SyntaxKind.PropertyDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNode(cbNode, data.postfixToken) || visitNode(cbNode, data.type) || visitNode(cbNode, data.initializer), [SyntaxKind.ClassStaticBlockDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.body), [SyntaxKind.BinaryExpression]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.left) || visitNode(cbNode, data.type) || visitNode(cbNode, data.operatorToken) || visitNode(cbNode, data.right), [SyntaxKind.PrefixUnaryExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.operand), [SyntaxKind.PostfixUnaryExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.operand), [SyntaxKind.YieldExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.asteriskToken) || visitNode(cbNode, data.expression), [SyntaxKind.ArrowFunction]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type) || visitNode(cbNode, data.equalsGreaterThanToken) || visitNode(cbNode, data.body), [SyntaxKind.FunctionExpression]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.asteriskToken) || visitNode(cbNode, data.name) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type) || visitNode(cbNode, data.body), [SyntaxKind.AsExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNode(cbNode, data.type), [SyntaxKind.SatisfiesExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNode(cbNode, data.type), [SyntaxKind.ConditionalExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.condition) || visitNode(cbNode, data.questionToken) || visitNode(cbNode, data.whenTrue) || visitNode(cbNode, data.colonToken) || visitNode(cbNode, data.whenFalse), [SyntaxKind.PropertyAccessExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNode(cbNode, data.questionDotToken) || visitNode(cbNode, data.name), [SyntaxKind.ElementAccessExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNode(cbNode, data.questionDotToken) || visitNode(cbNode, data.argumentExpression), [SyntaxKind.CallExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNode(cbNode, data.questionDotToken) || visitNodes(cbNode, cbNodes, data.typeArguments) || visitNodes(cbNode, cbNodes, data.arguments), [SyntaxKind.NewExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNodes(cbNode, cbNodes, data.typeArguments) || visitNodes(cbNode, cbNodes, data.arguments), [SyntaxKind.MetaProperty]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), [SyntaxKind.NonNullExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.SpreadElement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.TemplateExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.head) || visitNodes(cbNode, cbNodes, data.templateSpans), [SyntaxKind.TemplateSpan]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNode(cbNode, data.literal), [SyntaxKind.TaggedTemplateExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tag) || visitNode(cbNode, data.questionDotToken) || visitNodes(cbNode, cbNodes, data.typeArguments) || visitNode(cbNode, data.template), [SyntaxKind.ParenthesizedExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.ArrayLiteralExpression]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), [SyntaxKind.ObjectLiteralExpression]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.properties), [SyntaxKind.SpreadAssignment]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.PropertyAssignment]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNode(cbNode, data.postfixToken) || visitNode(cbNode, data.type) || visitNode(cbNode, data.initializer), [SyntaxKind.ShorthandPropertyAssignment]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNode(cbNode, data.postfixToken) || visitNode(cbNode, data.type) || visitNode(cbNode, data.equalsToken) || visitNode(cbNode, data.objectAssignmentInitializer), [SyntaxKind.DeleteExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.TypeOfExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.VoidExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [Sy