// 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), [SyntaxKind.AwaitExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.TypeAssertionExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type) || visitNode(cbNode, data.expression), [SyntaxKind.UnionType]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.types), [SyntaxKind.IntersectionType]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.types), [SyntaxKind.ConditionalType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.checkType) || visitNode(cbNode, data.extendsType) || visitNode(cbNode, data.trueType) || visitNode(cbNode, data.falseType), [SyntaxKind.TypeOperator]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), [SyntaxKind.InferType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.typeParameter), [SyntaxKind.ArrayType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.elementType), [SyntaxKind.IndexedAccessType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.objectType) || visitNode(cbNode, data.indexType), [SyntaxKind.TypeReference]: (data, cbNode, cbNodes) => visitNode(cbNode, data.typeName) || visitNodes(cbNode, cbNodes, data.typeArguments), [SyntaxKind.ExpressionWithTypeArguments]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNodes(cbNode, cbNodes, data.typeArguments), [SyntaxKind.LiteralType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.literal), [SyntaxKind.TypePredicate]: (data, cbNode, cbNodes) => visitNode(cbNode, data.assertsModifier) || visitNode(cbNode, data.parameterName) || visitNode(cbNode, data.type), [SyntaxKind.ImportAttribute]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name) || visitNode(cbNode, data.value), [SyntaxKind.ImportAttributes]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.attributes), [SyntaxKind.TypeQuery]: (data, cbNode, cbNodes) => visitNode(cbNode, data.exprName) || visitNodes(cbNode, cbNodes, data.typeArguments), [SyntaxKind.MappedType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.readonlyToken) || visitNode(cbNode, data.typeParameter) || visitNode(cbNode, data.nameType) || visitNode(cbNode, data.questionToken) || visitNode(cbNode, data.type) || visitNodes(cbNode, cbNodes, data.members), [SyntaxKind.TypeLiteral]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.members), [SyntaxKind.TupleType]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), [SyntaxKind.NamedTupleMember]: (data, cbNode, cbNodes) => visitNode(cbNode, data.dotDotDotToken) || visitNode(cbNode, data.name) || visitNode(cbNode, data.questionToken) || visitNode(cbNode, data.type), [SyntaxKind.OptionalType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), [SyntaxKind.RestType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), [SyntaxKind.ParenthesizedType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), [SyntaxKind.FunctionType]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type), [SyntaxKind.ConstructorType]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type), [SyntaxKind.TemplateLiteralType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.head) || visitNodes(cbNode, cbNodes, data.templateSpans), [SyntaxKind.TemplateLiteralTypeSpan]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type) || visitNode(cbNode, data.literal), [SyntaxKind.SyntheticExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tupleNameSource), [SyntaxKind.PartiallyEmittedExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.JsxElement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.openingElement) || visitNodes(cbNode, cbNodes, data.children) || visitNode(cbNode, data.closingElement), [SyntaxKind.JsxAttributes]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.properties), [SyntaxKind.JsxNamespacedName]: (data, cbNode, cbNodes) => visitNode(cbNode, data.namespace) || visitNode(cbNode, data.name), [SyntaxKind.JsxOpeningElement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNodes(cbNode, cbNodes, data.typeArguments) || visitNode(cbNode, data.attributes), [SyntaxKind.JsxSelfClosingElement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNodes(cbNode, cbNodes, data.typeArguments) || visitNode(cbNode, data.attributes), [SyntaxKind.JsxFragment]: (data, cbNode, cbNodes) => visitNode(cbNode, data.openingFragment) || visitNodes(cbNode, cbNodes, data.children) || visitNode(cbNode, data.closingFragment), [SyntaxKind.JsxAttribute]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name) || visitNode(cbNode, data.initializer), [SyntaxKind.JsxSpreadAttribute]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), [SyntaxKind.JsxClosingElement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName), [SyntaxKind.JsxExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.dotDotDotToken) || visitNode(cbNode, data.expression), [SyntaxKind.SyntaxList]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.children), [SyntaxKind.JSDoc]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.comment) || visitNodes(cbNode, cbNodes, data.tags), [SyntaxKind.JSDocTypeExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), [SyntaxKind.JSDocNonNullableType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), [SyntaxKind.JSDocNullableType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), [SyntaxKind.JSDocVariadicType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), [SyntaxKind.JSDocOptionalType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), [SyntaxKind.JSDocTypeTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNode(cbNode, data.typeExpression) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocUnknownTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocTemplateTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNode(cbNode, data.constraint) || visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocReturnTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNode(cbNode, data.typeExpression) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocPublicTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocPrivateTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocProtectedTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocReadonlyTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocOverrideTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocDeprecatedTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocSeeTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNode(cbNode, data.nameExpression) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocImplementsTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNode(cbNode, data.className) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocAugmentsTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNode(cbNode, data.className) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocSatisfiesTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNode(cbNode, data.typeExpression) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocThrowsTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNode(cbNode, data.typeExpression) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocThisTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNode(cbNode, data.typeExpression) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocImportTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNode(cbNode, data.importClause) || visitNode(cbNode, data.moduleSpecifier) || visitNode(cbNode, data.attributes) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocCallbackTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNode(cbNode, data.typeExpression) || visitNode(cbNode, data.name) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocOverloadTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNode(cbNode, data.typeExpression) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocTypedefTag]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName) || visitNode(cbNode, data.typeExpression) || visitNode(cbNode, data.name) || visitNodes(cbNode, cbNodes, data.comment), [SyntaxKind.JSDocSignature]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.typeParameters) || visitNodes(cbNode, cbNodes, data.parameters) || visitNode(cbNode, data.type), [SyntaxKind.JSDocNameReference]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), [SyntaxKind.ModuleDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNode(cbNode, data.body), [SyntaxKind.ImportEqualsDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNode(cbNode, data.moduleReference), [SyntaxKind.ExportDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.exportClause) || visitNode(cbNode, data.moduleSpecifier) || visitNode(cbNode, data.attributes), [SyntaxKind.ImportType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.argument) || visitNode(cbNode, data.attributes) || visitNode(cbNode, data.qualifier) || visitNodes(cbNode, cbNodes, data.typeArguments), [SyntaxKind.ImportClause]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name) || visitNode(cbNode, data.namedBindings), [SyntaxKind.ImportSpecifier]: (data, cbNode, cbNodes) => visitNode(cbNode, data.propertyName) || visitNode(cbNode, data.name), [SyntaxKind.JSDocLink]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), [SyntaxKind.JSDocLinkPlain]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), [SyntaxKind.JSDocLinkCode]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), [SyntaxKind.TypeParameter]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers) || visitNode(cbNode, data.name) || visitNode(cbNode, data.constraint) || visitNode(cbNode, data.expression) || visitNode(cbNode, data.defaultType), [SyntaxKind.SyntheticReferenceExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNode(cbNode, data.thisArg), [SyntaxKind.JSDocTypeLiteral]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.jsdocPropertyTags), [SyntaxKind.ForInStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.awaitModifier) || visitNode(cbNode, data.initializer) || visitNode(cbNode, data.expression) || visitNode(cbNode, data.statement), [SyntaxKind.ForOfStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.awaitModifier) || visitNode(cbNode, data.initializer) || visitNode(cbNode, data.expression) || visitNode(cbNode, data.statement), [SyntaxKind.CaseClause]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNodes(cbNode, cbNodes, data.statements), [SyntaxKind.DefaultClause]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression) || visitNodes(cbNode, cbNodes, data.statements), [SyntaxKind.ObjectBindingPattern]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), [SyntaxKind.ArrayBindingPattern]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), [SyntaxKind.JSDocParameterTag]: forEachChildOfJSDocParameterTag, [SyntaxKind.JSDocPropertyTag]: forEachChildOfJSDocPropertyTag, [SyntaxKind.SourceFile]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.statements) || visitNode(cbNode, data.endOfFileToken), }; function visitNode(cbNode, node) { return node ? cbNode(node) : undefined; } function visitNodes(cbNode, cbNodes, nodes) { if (!nodes) return undefined; if (cbNodes) return cbNodes(nodes); for (const node of nodes) { const result = cbNode(node); if (result) return result; } return undefined; } export function createToken(kind) { return new NodeObject(kind, undefined); } export function createIdentifier(text) { return new NodeObject(SyntaxKind.Identifier, { text, }); } export function createPrivateIdentifier(text) { return new NodeObject(SyntaxKind.PrivateIdentifier, { text, }); } export function createQualifiedName(left, right) { return new NodeObject(SyntaxKind.QualifiedName, { left, right, }); } export function createComputedPropertyName(expression) { return new NodeObject(SyntaxKind.ComputedPropertyName, { expression, }); } export function createDecorator(expression) { return new NodeObject(SyntaxKind.Decorator, { expression, }); } export function createEmptyStatement() { return new NodeObject(SyntaxKind.EmptyStatement, undefined); } export function createIfStatement(expression, thenStatement, elseStatement) { return new NodeObject(SyntaxKind.IfStatement, { expression, thenStatement, elseStatement, }); } export function createDoStatement(statement, expression) { return new NodeObject(SyntaxKind.DoStatement, { statement, expression, }); } export function createWhileStatement(expression, statement) { return new NodeObject(SyntaxKind.WhileStatement, { expression, statement, }); } export function createForStatement(initializer, condition, incrementor, statement) { return new NodeObject(SyntaxKind.ForStatement, { initializer, condition, incrementor, statement, }); } export function createBreakStatement(label) { return new NodeObject(SyntaxKind.BreakStatement, { label, }); } export function createContinueStatement(label) { return new NodeObject(SyntaxKind.ContinueStatement, { label, }); } export function createReturnStatement(expression) { return new NodeObject(SyntaxKind.ReturnStatement, { expression, }); } export function createWithStatement(expression, statement) { return new NodeObject(SyntaxKind.WithStatement, { expression, statement, }); } export function createSwitchStatement(expression, caseBlock) { return new NodeObject(SyntaxKind.SwitchStatement, { expression, caseBlock, }); } export function createCaseBlock(clauses) { return new NodeObject(SyntaxKind.CaseBlock, { clauses: createNodeArray(clauses), }); } export function createThrowStatement(expression) { return new NodeObject(SyntaxKind.ThrowStatement, { expression, }); } export function createTryStatement(tryBlock, catchClause, finallyBlock) { return new NodeObject(SyntaxKind.TryStatement, { tryBlock, catchClause, finallyBlock, }); } export function createCatchClause(variableDeclaration, block) { return new NodeObject(SyntaxKind.CatchClause, { variableDeclaration, block, }); } export function createDebuggerStatement() { return new NodeObject(SyntaxKind.DebuggerStatement, undefined); } export function createLabeledStatement(label, statement) { return new NodeObject(SyntaxKind.LabeledStatement, { label, statement, }); } export function createExpressionStatement(expression) { return new NodeObject(SyntaxKind.ExpressionStatement, { expression, }); } export function createBlock(statements, multiLine) { return new NodeObject(SyntaxKind.Block, { statements: createNodeArray(statements), multiLine, }); } export function createVariableStatement(modifiers, declarationList) { return new NodeObject(SyntaxKind.VariableStatement, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, declarationList, }); } export function createVariableDeclaration(name, exclamationToken, type, initializer) { return new NodeObject(SyntaxKind.VariableDeclaration, { name, exclamationToken, type, initializer, }); } export function createVariableDeclarationList(declarations, flags) { const node = new NodeObject(SyntaxKind.VariableDeclarationList, { declarations: createNodeArray(declarations), }); node.flags = flags; return node; } export function createParameterDeclaration(modifiers, dotDotDotToken, name, questionToken, type, initializer) { return new NodeObject(SyntaxKind.Parameter, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, dotDotDotToken, name, questionToken, type, initializer, }); } export function createBindingElement(dotDotDotToken, propertyName, name, initializer) { return new NodeObject(SyntaxKind.BindingElement, { dotDotDotToken, propertyName, name, initializer, }); } export function createMissingDeclaration(modifiers) { return new NodeObject(SyntaxKind.MissingDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, }); } export function createFunctionDeclaration(modifiers, asteriskToken, name, typeParameters, parameters, type, body) { return new NodeObject(SyntaxKind.FunctionDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, asteriskToken, name, typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, parameters: createNodeArray(parameters), type, body, }); } export function createClassDeclaration(modifiers, name, typeParameters, heritageClauses, members) { return new NodeObject(SyntaxKind.ClassDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, heritageClauses: heritageClauses ? createNodeArray(heritageClauses) : undefined, members: createNodeArray(members), }); } export function createClassExpression(modifiers, name, typeParameters, heritageClauses, members) { return new NodeObject(SyntaxKind.ClassExpression, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, heritageClauses: heritageClauses ? createNodeArray(heritageClauses) : undefined, members: createNodeArray(members), }); } export function createHeritageClause(token, types) { return new NodeObject(SyntaxKind.HeritageClause, { token, types: createNodeArray(types), }); } export function createInterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, members) { return new NodeObject(SyntaxKind.InterfaceDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, heritageClauses: heritageClauses ? createNodeArray(heritageClauses) : undefined, members: createNodeArray(members), }); } export function createTypeAliasDeclaration(modifiers, name, typeParameters, type) { return new NodeObject(SyntaxKind.TypeAliasDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, type, }); } export function createEnumMember(name, initializer) { return new NodeObject(SyntaxKind.EnumMember, { name, initializer, }); } export function createEnumDeclaration(modifiers, name, members) { return new NodeObject(SyntaxKind.EnumDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, members: createNodeArray(members), }); } export function createModuleBlock(statements) { return new NodeObject(SyntaxKind.ModuleBlock, { statements: createNodeArray(statements), }); } export function createNotEmittedStatement() { return new NodeObject(SyntaxKind.NotEmittedStatement, undefined); } export function createNotEmittedTypeElement() { return new NodeObject(SyntaxKind.NotEmittedTypeElement, undefined); } export function createImportDeclaration(modifiers, importClause, moduleSpecifier, attributes) { return new NodeObject(SyntaxKind.ImportDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, importClause, moduleSpecifier, attributes, }); } export function createExternalModuleReference(expression) { return new NodeObject(SyntaxKind.ExternalModuleReference, { expression, }); } export function createNamespaceImport(name) { return new NodeObject(SyntaxKind.NamespaceImport, { name, }); } export function createNamedImports(elements) { return new NodeObject(SyntaxKind.NamedImports, { elements: createNodeArray(elements), }); } export function createExportAssignment(modifiers, isExportEquals = false, type, expression) { return new NodeObject(SyntaxKind.ExportAssignment, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, isExportEquals, type, expression, }); } export function createNamespaceExportDeclaration(modifiers, name) { return new NodeObject(SyntaxKind.NamespaceExportDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, }); } export function createNamespaceExport(name) { return new NodeObject(SyntaxKind.NamespaceExport, { name, }); } export function createNamedExports(elements) { return new NodeObject(SyntaxKind.NamedExports, { elements: createNodeArray(elements), }); } export function createExportSpecifier(isTypeOnly = false, propertyName, name) { return new NodeObject(SyntaxKind.ExportSpecifier, { isTypeOnly, propertyName, name, }); } export function createCallSignatureDeclaration(typeParameters, parameters, type) { return new NodeObject(SyntaxKind.CallSignature, { typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, parameters: createNodeArray(parameters), type, }); } export function createConstructSignatureDeclaration(typeParameters, parameters, type) { return new NodeObject(SyntaxKind.ConstructSignature, { typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, parameters: createNodeArray(parameters), type, }); } export function createConstructorDeclaration(modifiers, typeParameters, parameters, type, body) { return new NodeObject(SyntaxKind.Constructor, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, parameters: createNodeArray(parameters), type, body, }); } export function createGetAccessorDeclaration(modifiers, name, typeParameters, parameters, type, body) { return new NodeObject(SyntaxKind.GetAccessor, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, parameters: createNodeArray(parameters), type, body, }); } export function createSetAccessorDeclaration(modifiers, name, typeParameters, parameters, type, body) { return new NodeObject(SyntaxKind.SetAccessor, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, parameters: createNodeArray(parameters), type, body, }); } export function createIndexSignatureDeclaration(modifiers, parameters, type) { return new NodeObject(SyntaxKind.IndexSignature, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, parameters: createNodeArray(parameters), type, }); } export function createMethodSignatureDeclaration(modifiers, name, postfixToken, typeParameters, parameters, type) { return new NodeObject(SyntaxKind.MethodSignature, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, postfixToken, typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, parameters: createNodeArray(parameters), type, }); } export function createMethodDeclaration(modifiers, asteriskToken, name, postfixToken, typeParameters, parameters, type, body) { return new NodeObject(SyntaxKind.MethodDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, asteriskToken, name, postfixToken, typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, parameters: createNodeArray(parameters), type, body, }); } export function createPropertySignatureDeclaration(modifiers, name, postfixToken, type, initializer) { return new NodeObject(SyntaxKind.PropertySignature, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, postfixToken, type, initializer, }); } export function createPropertyDeclaration(modifiers, name, postfixToken, type, initializer) { return new NodeObject(SyntaxKind.PropertyDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, postfixToken, type, initializer, }); } export function createSemicolonClassElement() { return new NodeObject(SyntaxKind.SemicolonClassElement, undefined); } export function createClassStaticBlockDeclaration(modifiers, body) { return new NodeObject(SyntaxKind.ClassStaticBlockDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, body, }); } export function createOmittedExpression() { return new NodeObject(SyntaxKind.OmittedExpression, undefined); } export function createKeywordExpression(kind) { return new NodeObject(kind, undefined); } export function createStringLiteral(text, tokenFlags) { return new NodeObject(SyntaxKind.StringLiteral, { text, tokenFlags, }); } export function createNumericLiteral(text, tokenFlags) { return new NodeObject(SyntaxKind.NumericLiteral, { text, tokenFlags, }); } export function createBigIntLiteral(text, tokenFlags) { return new NodeObject(SyntaxKind.BigIntLiteral, { text, tokenFlags, }); } export function createRegularExpressionLiteral(text, tokenFlags) { return new NodeObject(SyntaxKind.RegularExpressionLiteral, { text, tokenFlags, }); } export function createNoSubstitutionTemplateLiteral(text, templateFlags) { return new NodeObject(SyntaxKind.NoSubstitutionTemplateLiteral, { text, templateFlags, }); } export function createBinaryExpression(modifiers, left, type, operatorToken, right) { return new NodeObject(SyntaxKind.BinaryExpression, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, left, type, operatorToken, right, }); } export function createPrefixUnaryExpression(operator, operand) { return new NodeObject(SyntaxKind.PrefixUnaryExpression, { operator, operand, }); } export function createPostfixUnaryExpression(operand, operator) { return new NodeObject(SyntaxKind.PostfixUnaryExpression, { operand, operator, }); } export function createYieldExpression(asteriskToken, expression) { return new NodeObject(SyntaxKind.YieldExpression, { asteriskToken, expression, }); } export function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) { return new NodeObject(SyntaxKind.ArrowFunction, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, parameters: createNodeArray(parameters), type, equalsGreaterThanToken, body, }); } export function createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) { return new NodeObject(SyntaxKind.FunctionExpression, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, asteriskToken, name, typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, parameters: createNodeArray(parameters), type, body, }); } export function createAsExpression(expression, type) { return new NodeObject(SyntaxKind.AsExpression, { expression, type, }); } export function createSatisfiesExpression(expression, type) { return new NodeObject(SyntaxKind.SatisfiesExpression, { expression, type, }); } export function createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse) { return new NodeObject(SyntaxKind.ConditionalExpression, { condition, questionToken, whenTrue, colonToken, whenFalse, }); } export function createPropertyAccessExpression(expression, questionDotToken, name, flags) { const node = new NodeObject(SyntaxKind.PropertyAccessExpression, { expression, questionDotToken, name, }); node.flags = flags; return node; } export function createElementAccessExpression(expression, questionDotToken, argumentExpression, flags) { const node = new NodeObject(SyntaxKind.ElementAccessExpression, { expression, questionDotToken, argumentExpression, }); node.flags = flags; return node; } export function createCallExpression(expression, questionDotToken, typeArguments, arguments_, flags) { const node = new NodeObject(SyntaxKind.CallExpression, { expression, questionDotToken, typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, arguments: createNodeArray(arguments_), }); node.flags = flags; return node; } export function createNewExpression(expression, typeArguments, arguments_) { return new NodeObject(SyntaxKind.NewExpression, { expression, typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, arguments: arguments_ ? createNodeArray(arguments_) : undefined, }); } export function createMetaProperty(keywordToken, name) { return new NodeObject(SyntaxKind.MetaProperty, { keywordToken, name, }); } export function createNonNullExpression(expression, flags) { const node = new NodeObject(SyntaxKind.NonNullExpression, { expression, }); node.flags = flags; return node; } export function createSpreadElement(expression) { return new NodeObject(SyntaxKind.SpreadElement, { expression, }); } export function createTemplateExpression(head, templateSpans) { return new NodeObject(SyntaxKind.TemplateExpression, { head, templateSpans: createNodeArray(templateSpans), }); } export function createTemplateSpan(expression, literal) { return new NodeObject(SyntaxKind.TemplateSpan, { expression, literal, }); } export function createTaggedTemplateExpression(tag, questionDotToken, typeArguments, template, flags) { const node = new NodeObject(SyntaxKind.TaggedTemplateExpression, { tag, questionDotToken, typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, template, }); node.flags = flags; return node; } export function createParenthesizedExpression(expression) { return new NodeObject(SyntaxKind.ParenthesizedExpression, { expression, }); } export function createArrayLiteralExpression(elements, multiLine) { return new NodeObject(SyntaxKind.ArrayLiteralExpression, { elements: createNodeArray(elements), multiLine, }); } export function createObjectLiteralExpression(properties, multiLine) { return new NodeObject(SyntaxKind.ObjectLiteralExpression, { properties: createNodeArray(properties), multiLine, }); } export function createSpreadAssignment(expression) { return new NodeObject(SyntaxKind.SpreadAssignment, { expression, }); } export function createPropertyAssignment(modifiers, name, postfixToken, type, initializer) { return new NodeObject(SyntaxKind.PropertyAssignment, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, postfixToken, type, initializer, }); } export function createShorthandPropertyAssignment(modifiers, name, postfixToken, type, equalsToken, objectAssignmentInitializer) { return new NodeObject(SyntaxKind.ShorthandPropertyAssignment, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, postfixToken, type, equalsToken, objectAssignmentInitializer, }); } export function createDeleteExpression(expression) { return new NodeObject(SyntaxKind.DeleteExpression, { expression, }); } export function createTypeOfExpression(expression) { return new NodeObject(SyntaxKind.TypeOfExpression, { expression, }); } export function createVoidExpression(expression) { return new NodeObject(SyntaxKind.VoidExpression, { expression, }); } export function createAwaitExpression(expression) { return new NodeObject(SyntaxKind.AwaitExpression, { expression, }); } export function createTypeAssertion(type, expression) { return new NodeObject(SyntaxKind.TypeAssertionExpression, { type, expression, }); } export function createKeywordTypeNode(kind) { return new NodeObject(kind, undefined); } export function createUnionTypeNode(types) { return new NodeObject(SyntaxKind.UnionType, { types: createNodeArray(types), }); } export function createIntersectionTypeNode(types) { return new NodeObject(SyntaxKind.IntersectionType, { types: createNodeArray(types), }); } export function createConditionalTypeNode(checkType, extendsType, trueType, falseType) { return new NodeObject(SyntaxKind.ConditionalType, { checkType, extendsType, trueType, falseType, }); } export function createTypeOperatorNode(operator, type) { return new NodeObject(SyntaxKind.TypeOperator, { operator, type, }); } export function createInferTypeNode(typeParameter) { return new NodeObject(SyntaxKind.InferType, { typeParameter, }); } export function createArrayTypeNode(elementType) { return new NodeObject(SyntaxKind.ArrayType, { elementType, }); } export function createIndexedAccessTypeNode(objectType, indexType) { return new NodeObject(SyntaxKind.IndexedAccessType, { objectType, indexType, }); } export function createTypeReferenceNode(typeName, typeArguments) { return new NodeObject(SyntaxKind.TypeReference, { typeName, typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, }); } export function createExpressionWithTypeArguments(expression, typeArguments) { return new NodeObject(SyntaxKind.ExpressionWithTypeArguments, { expression, typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, }); } export function createLiteralTypeNode(literal) { return new NodeObject(SyntaxKind.LiteralType, { literal, }); } export function createThisTypeNode() { return new NodeObject(SyntaxKind.ThisType, undefined); } export function createTypePredicateNode(assertsModifier, parameterName, type) { return new NodeObject(SyntaxKind.TypePredicate, { assertsModifier, parameterName, type, }); } export function createImportAttribute(name, value) { return new NodeObject(SyntaxKind.ImportAttribute, { name, value, }); } export function createImportAttributes(token, attributes, multiLine) { return new NodeObject(SyntaxKind.ImportAttributes, { token, attributes: createNodeArray(attributes), multiLine, }); } export function createTypeQueryNode(exprName, typeArguments) { return new NodeObject(SyntaxKind.TypeQuery, { exprName, typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, }); } export function createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type, members) { return new NodeObject(SyntaxKind.MappedType, { readonlyToken, typeParameter, nameType, questionToken, type, members: members ? createNodeArray(members) : undefined, }); } export function createTypeLiteralNode(members) { return new NodeObject(SyntaxKind.TypeLiteral, { members: createNodeArray(members), }); } export function createTupleTypeNode(elements) { return new NodeObject(SyntaxKind.TupleType, { elements: createNodeArray(elements), }); } export function createNamedTupleMember(dotDotDotToken, name, questionToken, type) { return new NodeObject(SyntaxKind.NamedTupleMember, { dotDotDotToken, name, questionToken, type, }); } export function createOptionalTypeNode(type) { return new NodeObject(SyntaxKind.OptionalType, { type, }); } export function createRestTypeNode(type) { return new NodeObject(SyntaxKind.RestType, { type, }); } export function createParenthesizedTypeNode(type) { return new NodeObject(SyntaxKind.ParenthesizedType, { type, }); } export function createFunctionTypeNode(typeParameters, parameters, type) { return new NodeObject(SyntaxKind.FunctionType, { typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, parameters: createNodeArray(parameters), type, }); } export function createConstructorTypeNode(modifiers, typeParameters, parameters, type) { return new NodeObject(SyntaxKind.ConstructorType, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, parameters: createNodeArray(parameters), type, }); } export function createTemplateHead(text, rawText, templateFlags) { return new NodeObject(SyntaxKind.TemplateHead, { text, rawText, templateFlags, }); } export function createTemplateMiddle(text, rawText, templateFlags) { return new NodeObject(SyntaxKind.TemplateMiddle, { text, rawText, templateFlags, }); } export function createTemplateTail(text, rawText, templateFlags) { return new NodeObject(SyntaxKind.TemplateTail, { text, rawText, templateFlags, }); } export function createTemplateLiteralTypeNode(head, templateSpans) { return new NodeObject(SyntaxKind.TemplateLiteralType, { head, templateSpans: createNodeArray(templateSpans), }); } export function createTemplateLiteralTypeSpan(type, literal) { return new NodeObject(SyntaxKind.TemplateLiteralTypeSpan, { type, literal, }); } export function createSyntheticExpression(type, isSpread, tupleNameSource) { return new NodeObject(SyntaxKind.SyntheticExpression, { type, isSpread, tupleNameSource, }); } export function createPartiallyEmittedExpression(expression) { return new NodeObject(SyntaxKind.PartiallyEmittedExpression, { expression, }); } export function createJsxElement(openingElement, children, closingElement) { return new NodeObject(SyntaxKind.JsxElement, { openingElement, children: createNodeArray(children), closingElement, }); } export function createJsxAttributes(properties) { return new NodeObject(SyntaxKind.JsxAttributes, { properties: createNodeArray(properties), }); } export function createJsxNamespacedName(namespace, name) { return new NodeObject(SyntaxKind.JsxNamespacedName, { namespace, name, }); } export function createJsxOpeningElement(tagName, typeArguments, attributes) { return new NodeObject(SyntaxKind.JsxOpeningElement, { tagName, typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, attributes, }); } export function createJsxSelfClosingElement(tagName, typeArguments, attributes) { return new NodeObject(SyntaxKind.JsxSelfClosingElement, { tagName, typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, attributes, }); } export function createJsxFragment(openingFragment, children, closingFragment) { return new NodeObject(SyntaxKind.JsxFragment, { openingFragment, children: createNodeArray(children), closingFragment, }); } export function createJsxOpeningFragment() { return new NodeObject(SyntaxKind.JsxOpeningFragment, undefined); } export function createJsxClosingFragment() { return new NodeObject(SyntaxKind.JsxClosingFragment, undefined); } export function createJsxAttribute(name, initializer) { return new NodeObject(SyntaxKind.JsxAttribute, { name, initializer, }); } export function createJsxSpreadAttribute(expression) { return new NodeObject(SyntaxKind.JsxSpreadAttribute, { expression, }); } export function createJsxClosingElement(tagName) { return new NodeObject(SyntaxKind.JsxClosingElement, { tagName, }); } export function createJsxExpression(dotDotDotToken, expression) { return new NodeObject(SyntaxKind.JsxExpression, { dotDotDotToken, expression, }); } export function createJsxText(text, containsOnlyTriviaWhiteSpaces) { return new NodeObject(SyntaxKind.JsxText, { text, containsOnlyTriviaWhiteSpaces, }); } export function createSyntaxList(children) { return new NodeObject(SyntaxKind.SyntaxList, { children, }); } export function createJSDoc(comment, tags) { return new NodeObject(SyntaxKind.JSDoc, { comment: createNodeArray(comment), tags: tags ? createNodeArray(tags) : undefined, }); } export function createJSDocTypeExpression(type) { return new NodeObject(SyntaxKind.JSDocTypeExpression, { type, }); } export function createJSDocNonNullableType(type) { return new NodeObject(SyntaxKind.JSDocNonNullableType, { type, }); } export function createJSDocNullableType(type) { return new NodeObject(SyntaxKind.JSDocNullableType, { type, }); } export function createJSDocAllType() { return new NodeObject(SyntaxKind.JSDocAllType, undefined); } export function createJSDocVariadicType(type) { return new NodeObject(SyntaxKind.JSDocVariadicType, { type, }); } export function createJSDocOptionalType(type) { return new NodeObject(SyntaxKind.JSDocOptionalType, { type, }); } export function createJSDocTypeTag(tagName, typeExpression, comment) { return new NodeObject(SyntaxKind.JSDocTypeTag, { tagName, typeExpression, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocUnknownTag(tagName, comment) { return new NodeObject(SyntaxKind.JSDocUnknownTag, { tagName, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocTemplateTag(tagName, constraint, typeParameters, comment) { return new NodeObject(SyntaxKind.JSDocTemplateTag, { tagName, constraint, typeParameters: createNodeArray(typeParameters), comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocReturnTag(tagName, typeExpression, comment) { return new NodeObject(SyntaxKind.JSDocReturnTag, { tagName, typeExpression, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocPublicTag(tagName, comment) { return new NodeObject(SyntaxKind.JSDocPublicTag, { tagName, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocPrivateTag(tagName, comment) { return new NodeObject(SyntaxKind.JSDocPrivateTag, { tagName, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocProtectedTag(tagName, comment) { return new NodeObject(SyntaxKind.JSDocProtectedTag, { tagName, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocReadonlyTag(tagName, comment) { return new NodeObject(SyntaxKind.JSDocReadonlyTag, { tagName, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocOverrideTag(tagName, comment) { return new NodeObject(SyntaxKind.JSDocOverrideTag, { tagName, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocDeprecatedTag(tagName, comment) { return new NodeObject(SyntaxKind.JSDocDeprecatedTag, { tagName, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocSeeTag(tagName, nameExpression, comment) { return new NodeObject(SyntaxKind.JSDocSeeTag, { tagName, nameExpression, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocImplementsTag(tagName, className, comment) { return new NodeObject(SyntaxKind.JSDocImplementsTag, { tagName, className, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocAugmentsTag(tagName, className, comment) { return new NodeObject(SyntaxKind.JSDocAugmentsTag, { tagName, className, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocSatisfiesTag(tagName, typeExpression, comment) { return new NodeObject(SyntaxKind.JSDocSatisfiesTag, { tagName, typeExpression, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocThrowsTag(tagName, typeExpression, comment) { return new NodeObject(SyntaxKind.JSDocThrowsTag, { tagName, typeExpression, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocThisTag(tagName, typeExpression, comment) { return new NodeObject(SyntaxKind.JSDocThisTag, { tagName, typeExpression, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocImportTag(tagName, importClause, moduleSpecifier, attributes, comment) { return new NodeObject(SyntaxKind.JSDocImportTag, { tagName, importClause, moduleSpecifier, attributes, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocCallbackTag(tagName, typeExpression, name, comment) { return new NodeObject(SyntaxKind.JSDocCallbackTag, { tagName, typeExpression, name, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocOverloadTag(tagName, typeExpression, comment) { return new NodeObject(SyntaxKind.JSDocOverloadTag, { tagName, typeExpression, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocTypedefTag(tagName, typeExpression, name, comment) { return new NodeObject(SyntaxKind.JSDocTypedefTag, { tagName, typeExpression, name, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocSignature(typeParameters, parameters, type) { return new NodeObject(SyntaxKind.JSDocSignature, { typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, parameters: createNodeArray(parameters), type, }); } export function createJSDocNameReference(name) { return new NodeObject(SyntaxKind.JSDocNameReference, { name, }); } export function createModuleDeclaration(modifiers, keyword, name, body) { return new NodeObject(SyntaxKind.ModuleDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, keyword, name, body, }); } export function createImportEqualsDeclaration(modifiers, isTypeOnly = false, name, moduleReference) { return new NodeObject(SyntaxKind.ImportEqualsDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, isTypeOnly, name, moduleReference, }); } export function createExportDeclaration(modifiers, isTypeOnly, exportClause, moduleSpecifier, attributes) { return new NodeObject(SyntaxKind.ExportDeclaration, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, isTypeOnly, exportClause, moduleSpecifier, attributes, }); } export function createImportTypeNode(isTypeOf = false, argument, attributes, qualifier, typeArguments) { return new NodeObject(SyntaxKind.ImportType, { isTypeOf, argument, attributes, qualifier, typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, }); } export function createImportClause(phaseModifier, name, namedBindings) { return new NodeObject(SyntaxKind.ImportClause, { phaseModifier, name, namedBindings, }); } export function createImportSpecifier(isTypeOnly = false, propertyName, name) { return new NodeObject(SyntaxKind.ImportSpecifier, { isTypeOnly, propertyName, name, }); } export function createJSDocText(text) { return new NodeObject(SyntaxKind.JSDocText, { text, }); } export function createJSDocLink(name, text) { return new NodeObject(SyntaxKind.JSDocLink, { name, text, }); } export function createJSDocLinkPlain(name, text) { return new NodeObject(SyntaxKind.JSDocLinkPlain, { name, text, }); } export function createJSDocLinkCode(name, text) { return new NodeObject(SyntaxKind.JSDocLinkCode, { name, text, }); } export function createTypeParameterDeclaration(modifiers, name, constraint, expression, defaultType) { return new NodeObject(SyntaxKind.TypeParameter, { modifiers: modifiers ? createNodeArray(modifiers) : undefined, name, constraint, expression, defaultType, }); } export function createSyntheticReferenceExpression(expression, thisArg) { return new NodeObject(SyntaxKind.SyntheticReferenceExpression, { expression, thisArg, }); } export function createJSDocTypeLiteral(jsdocPropertyTags, isArrayType) { return new NodeObject(SyntaxKind.JSDocTypeLiteral, { jsdocPropertyTags, isArrayType, }); } export function createForInStatement(awaitModifier, initializer, expression, statement) { return new NodeObject(SyntaxKind.ForInStatement, { awaitModifier, initializer, expression, statement, }); } export function createForOfStatement(awaitModifier, initializer, expression, statement) { return new NodeObject(SyntaxKind.ForOfStatement, { awaitModifier, initializer, expression, statement, }); } export function createCaseClause(expression, statements) { return new NodeObject(SyntaxKind.CaseClause, { expression, statements: createNodeArray(statements), }); } export function createDefaultClause(expression, statements) { return new NodeObject(SyntaxKind.DefaultClause, { expression, statements: createNodeArray(statements), }); } export function createObjectBindingPattern(elements) { return new NodeObject(SyntaxKind.ObjectBindingPattern, { elements: createNodeArray(elements), }); } export function createArrayBindingPattern(elements) { return new NodeObject(SyntaxKind.ArrayBindingPattern, { elements: createNodeArray(elements), }); } export function createJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) { return new NodeObject(SyntaxKind.JSDocParameterTag, { tagName, name, isBracketed, typeExpression, isNameFirst, comment: comment ? createNodeArray(comment) : undefined, }); } export function createJSDocPropertyTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) { return new NodeObject(SyntaxKind.JSDocPropertyTag, { tagName, name, isBracketed, typeExpression, isNameFirst, comment: comment ? createNodeArray(comment) : undefined, }); } export function updateQualifiedName(node, left, right) { return node.left !== left || node.right !== right ? createQualifiedName(left, right) : node; } export function updateComputedPropertyName(node, expression) { return node.expression !== expression ? createComputedPropertyName(expression) : node; } export function updateDecorator(node, expression) { return node.expression !== expression ? createDecorator(expression) : node; } export function updateIfStatement(node, expression, thenStatement, elseStatement) { return node.expression !== expression || node.thenStatement !== thenStatement || node.elseStatement !== elseStatement ? createIfStatement(expression, thenStatement, elseStatement) : node; } export function updateDoStatement(node, statement, expression) { return node.statement !== statement || node.expression !== expression ? createDoStatement(statement, expression) : node; } export function updateWhileStatement(node, expression, statement) { return node.expression !== expression || node.statement !== statement ? createWhileStatement(expression, statement) : node; } export function updateForStatement(node, initializer, condition, incrementor, statement) { return node.initializer !== initializer || node.condition !== condition || node.incrementor !== incrementor || node.statement !== statement ? createForStatement(initializer, condition, incrementor, statement) : node; } export function updateBreakStatement(node, label) { return node.label !== label ? createBreakStatement(label) : node; } export function updateContinueStatement(node, label) { return node.label !== label ? createContinueStatement(label) : node; } export function updateReturnStatement(node, expression) { return node.expression !== expression ? createReturnStatement(expression) : node; } export function updateWithStatement(node, expression, statement) { return node.expression !== expression || node.statement !== statement ? createWithStatement(expression, statement) : node; } export function updateSwitchStatement(node, expression, caseBlock) { return node.expression !== expression || node.caseBlock !== caseBlock ? createSwitchStatement(expression, caseBlock) : node; } export function updateCaseBlock(node, clauses) { return node.clauses !== clauses ? createCaseBlock(clauses) : node; } export function updateThrowStatement(node, expression) { return node.expression !== expression ? createThrowStatement(expression) : node; } export function updateTryStatement(node, tryBlock, catchClause, finallyBlock) { return node.tryBlock !== tryBlock || node.catchClause !== catchClause || node.finallyBlock !== finallyBlock ? createTryStatement(tryBlock, catchClause, finallyBlock) : node; } export function updateCatchClause(node, variableDeclaration, block) { return node.variableDeclaration !== variableDeclaration || node.block !== block ? createCatchClause(variableDeclaration, block) : node; } export function updateLabeledStatement(node, label, statement) { return node.label !== label || node.statement !== statement ? createLabeledStatement(label, statement) : node; } export function updateExpressionStatement(node, expression) { return node.expression !== expression ? createExpressionStatement(expression) : node; } export function updateBlock(node, statements) { return node.statements !== statements ? createBlock(statements, node.multiLine) : node; } export function updateVariableStatement(node, modifiers, declarationList) { return node.modifiers !== modifiers || node.declarationList !== declarationList ? createVariableStatement(modifiers, declarationList) : node; } export function updateVariableDeclaration(node, name, exclamationToken, type, initializer) { return node.name !== name || node.exclamationToken !== exclamationToken || node.type !== type || node.initializer !== initializer ? createVariableDeclaration(name, exclamationToken, type, initializer) : node; } export function updateVariableDeclarationList(node, declarations) { return node.declarations !== declarations ? createVariableDeclarationList(declarations, node.flags) : node; } export function updateParameterDeclaration(node, modifiers, dotDotDotToken, name, questionToken, type, initializer) { return node.modifiers !== modifiers || node.dotDotDotToken !== dotDotDotToken || node.name !== name || node.questionToken !== questionToken || node.type !== type || node.initializer !== initializer ? createParameterDeclaration(modifiers, dotDotDotToken, name, questionToken, type, initializer) : node; } export function updateBindingElement(node, dotDotDotToken, propertyName, name, initializer) { return node.dotDotDotToken !== dotDotDotToken || node.propertyName !== propertyName || node.name !== name || node.initializer !== initializer ? createBindingElement(dotDotDotToken, propertyName, name, initializer) : node; } export function updateMissingDeclaration(node, modifiers) { return node.modifiers !== modifiers ? createMissingDeclaration(modifiers) : node; } export function updateFunctionDeclaration(node, modifiers, asteriskToken, name, typeParameters, parameters, type, body) { return node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createFunctionDeclaration(modifiers, asteriskToken, name, typeParameters, parameters, type, body) : node; } export function updateClassDeclaration(node, modifiers, name, typeParameters, heritageClauses, members) { return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? createClassDeclaration(modifiers, name, typeParameters, heritageClauses, members) : node; } export function updateClassExpression(node, modifiers, name, typeParameters, heritageClauses, members) { return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? createClassExpression(modifiers, name, typeParameters, heritageClauses, members) : node; } export function updateHeritageClause(node, types) { return node.types !== types ? createHeritageClause(node.token, types) : node; } export function updateInterfaceDeclaration(node, modifiers, name, typeParameters, heritageClauses, members) { return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? createInterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, members) : node; } export function updateTypeAliasDeclaration(node, modifiers, name, typeParameters, type) { return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.type !== type ? createTypeAliasDeclaration(modifiers, name, typeParameters, type) : node; } export function updateEnumMember(node, name, initializer) { return node.name !== name || node.initializer !== initializer ? createEnumMember(name, initializer) : node; } export function updateEnumDeclaration(node, modifiers, name, members) { return node.modifiers !== modifiers || node.name !== name || node.members !== members ? createEnumDeclaration(modifiers, name, members) : node; } export function updateModuleBlock(node, statements) { return node.statements !== statements ? createModuleBlock(statements) : node; } export function updateImportDeclaration(node, modifiers, importClause, moduleSpecifier, attributes) { return node.modifiers !== modifiers || node.importClause !== importClause || node.moduleSpecifier !== moduleSpecifier || node.attributes !== attributes ? createImportDeclaration(modifiers, importClause, moduleSpecifier, attributes) : node; } export function updateExternalModuleReference(node, expression) { return node.expression !== expression ? createExternalModuleReference(expression) : node; } export function updateNamespaceImport(node, name) { return node.name !== name ? createNamespaceImport(name) : node; } export function updateNamedImports(node, elements) { return node.elements !== elements ? createNamedImports(elements) : node; } export function updateExportAssignment(node, modifiers, type, expression) { return node.modifiers !== modifiers || node.type !== type || node.expression !== expression ? createExportAssignment(modifiers, node.isExportEquals, type, expression) : node; } export function updateNamespaceExportDeclaration(node, modifiers, name) { return node.modifiers !== modifiers || node.name !== name ? createNamespaceExportDeclaration(modifiers, name) : node; } export function updateNamespaceExport(node, name) { return node.name !== name ? createNamespaceExport(name) : node; } export function updateNamedExports(node, elements) { return node.elements !== elements ? createNamedExports(elements) : node; } export function updateExportSpecifier(node, propertyName, name) { return node.propertyName !== propertyName || node.name !== name ? createExportSpecifier(node.isTypeOnly, propertyName, name) : node; } export function updateCallSignatureDeclaration(node, typeParameters, parameters, type) { return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createCallSignatureDeclaration(typeParameters, parameters, type) : node; } export function updateConstructSignatureDeclaration(node, typeParameters, parameters, type) { return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createConstructSignatureDeclaration(typeParameters, parameters, type) : node; } export function updateConstructorDeclaration(node, modifiers, typeParameters, parameters, type, body) { return node.modifiers !== modifiers || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createConstructorDeclaration(modifiers, typeParameters, parameters, type, body) : node; } export function updateGetAccessorDeclaration(node, modifiers, name, typeParameters, parameters, type, body) { return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createGetAccessorDeclaration(modifiers, name, typeParameters, parameters, type, body) : node; } export function updateSetAccessorDeclaration(node, modifiers, name, typeParameters, parameters, type, body) { return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createSetAccessorDeclaration(modifiers, name, typeParameters, parameters, type, body) : node; } export function updateIndexSignatureDeclaration(node, modifiers, parameters, type) { return node.modifiers !== modifiers || node.parameters !== parameters || node.type !== type ? createIndexSignatureDeclaration(modifiers, parameters, type) : node; } export function updateMethodSignatureDeclaration(node, modifiers, name, postfixToken, typeParameters, parameters, type) { return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createMethodSignatureDeclaration(modifiers, name, postfixToken, typeParameters, parameters, type) : node; } export function updateMethodDeclaration(node, modifiers, asteriskToken, name, postfixToken, typeParameters, parameters, type, body) { return node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name || node.postfixToken !== postfixToken || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createMethodDeclaration(modifiers, asteriskToken, name, postfixToken, typeParameters, parameters, type, body) : node; } export function updatePropertySignatureDeclaration(node, modifiers, name, postfixToken, type, initializer) { return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.type !== type || node.initializer !== initializer ? createPropertySignatureDeclaration(modifiers, name, postfixToken, type, initializer) : node; } export function updatePropertyDeclaration(node, modifiers, name, postfixToken, type, initializer) { return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.type !== type || node.initializer !== initializer ? createPropertyDeclaration(modifiers, name, postfixToken, type, initializer) : node; } export function updateClassStaticBlockDeclaration(node, modifiers, body) { return node.modifiers !== modifiers || node.body !== body ? createClassStaticBlockDeclaration(modifiers, body) : node; } export function updateBinaryExpression(node, modifiers, left, type, operatorToken, right) { return node.modifiers !== modifiers || node.left !== left || node.type !== type || node.operatorToken !== operatorToken || node.right !== right ? createBinaryExpression(modifiers, left, type, operatorToken, right) : node; } export function updatePrefixUnaryExpression(node, operand) { return node.operand !== operand ? createPrefixUnaryExpression(node.operator, operand) : node; } export function updatePostfixUnaryExpression(node, operand) { return node.operand !== operand ? createPostfixUnaryExpression(operand, node.operator) : node; } export function updateYieldExpression(node, asteriskToken, expression) { return node.asteriskToken !== asteriskToken || node.expression !== expression ? createYieldExpression(asteriskToken, expression) : node; } export function updateArrowFunction(node, modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) { return node.modifiers !== modifiers || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.equalsGreaterThanToken !== equalsGreaterThanToken || node.body !== body ? createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) : node; } export function updateFunctionExpression(node, modifiers, asteriskToken, name, typeParameters, parameters, type, body) { return node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) : node; } export function updateAsExpression(node, expression, type) { return node.expression !== expression || node.type !== type ? createAsExpression(expression, type) : node; } export function updateSatisfiesExpression(node, expression, type) { return node.expression !== expression || node.type !== type ? createSatisfiesExpression(expression, type) : node; } export function updateConditionalExpression(node, condition, questionToken, whenTrue, colonToken, whenFalse) { return node.condition !== condition || node.questionToken !== questionToken || node.whenTrue !== whenTrue || node.colonToken !== colonToken || node.whenFalse !== whenFalse ? createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse) : node; } export function updatePropertyAccessExpression(node, expression, questionDotToken, name) { return node.expression !== expression || node.questionDotToken !== questionDotToken || node.name !== name ? createPropertyAccessExpression(expression, questionDotToken, name, node.flags) : node; } export function updateElementAccessExpression(node, expression, questionDotToken, argumentExpression) { return node.expression !== expression || node.questionDotToken !== questionDotToken || node.argumentExpression !== argumentExpression ? createElementAccessExpression(expression, questionDotToken, argumentExpression, node.flags) : node; } export function updateCallExpression(node, expression, questionDotToken, typeArguments, arguments_) { return node.expression !== expression || node.questionDotToken !== questionDotToken || node.typeArguments !== typeArguments || node.arguments !== arguments_ ? createCallExpression(expression, questionDotToken, typeArguments, arguments_, node.flags) : node; } export function updateNewExpression(node, expression, typeArguments, arguments_) { return node.expression !== expression || node.typeArguments !== typeArguments || node.arguments !== arguments_ ? createNewExpression(expression, typeArguments, arguments_) : node; } export function updateMetaProperty(node, name) { return node.name !== name ? createMetaProperty(node.keywordToken, name) : node; } export function updateNonNullExpression(node, expression) { return node.expression !== expression ? createNonNullExpression(expression, node.flags) : node; } export function updateSpreadElement(node, expression) { return node.expression !== expression ? createSpreadElement(expression) : node; } export function updateTemplateExpression(node, head, templateSpans) { return node.head !== head || node.templateSpans !== templateSpans ? createTemplateExpression(head, templateSpans) : node; } export function updateTemplateSpan(node, expression, literal) { return node.expression !== expression || node.literal !== literal ? createTemplateSpan(expression, literal) : node; } export function updateTaggedTemplateExpression(node, tag, questionDotToken, typeArguments, template) { return node.tag !== tag || node.questionDotToken !== questionDotToken || node.typeArguments !== typeArguments || node.template !== template ? createTaggedTemplateExpression(tag, questionDotToken, typeArguments, template, node.flags) : node; } export function updateParenthesizedExpression(node, expression) { return node.expression !== expression ? createParenthesizedExpression(expression) : node; } export function updateArrayLiteralExpression(node, elements) { return node.elements !== elements ? createArrayLiteralExpression(elements, node.multiLine) : node; } export function updateObjectLiteralExpression(node, properties) { return node.properties !== properties ? createObjectLiteralExpression(properties, node.multiLine) : node; } export function updateSpreadAssignment(node, expression) { return node.expression !== expression ? createSpreadAssignment(expression) : node; } export function updatePropertyAssignment(node, modifiers, name, postfixToken, type, initializer) { return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.type !== type || node.initializer !== initializer ? createPropertyAssignment(modifiers, name, postfixToken, type, initializer) : node; } export function updateShorthandPropertyAssignment(node, modifiers, name, postfixToken, type, equalsToken, objectAssignmentInitializer) { return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.type !== type || node.equalsToken !== equalsToken || node.objectAssignmentInitializer !== objectAssignmentInitializer ? createShorthandPropertyAssignment(modifiers, name, postfixToken, type, equalsToken, objectAssignmentInitializer) : node; } export function updateDeleteExpression(node, expression) { return node.expression !== expression ? createDeleteExpression(expression) : node; } export function updateTypeOfExpression(node, expression) { return node.expression !== expression ? createTypeOfExpression(expression) : node; } export function updateVoidExpression(node, expression) { return node.expression !== expression ? createVoidExpression(expression) : node; } export function updateAwaitExpression(node, expression) { return node.expression !== expression ? createAwaitExpression(expression) : node; } export function updateTypeAssertion(node, type, expression) { return node.type !== type || node.expression !== expression ? createTypeAssertion(type, expression) : node; } export function updateUnionTypeNode(node, types) { return node.types !== types ? createUnionTypeNode(types) : node; } export function updateIntersectionTypeNode(node, types) { return node.types !== types ? createIntersectionTypeNode(types) : node; } export function updateConditionalTypeNode(node, checkType, extendsType, trueType, falseType) { return node.checkType !== checkType || node.extendsType !== extendsType || node.trueType !== trueType || node.falseType !== falseType ? createConditionalTypeNode(checkType, extendsType, trueType, falseType) : node; } export function updateTypeOperatorNode(node, type) { return node.type !== type ? createTypeOperatorNode(node.operator, type) : node; } export function updateInferTypeNode(node, typeParameter) { return node.typeParameter !== typeParameter ? createInferTypeNode(typeParameter) : node; } export function updateArrayTypeNode(node, elementType) { return node.elementType !== elementType ? createArrayTypeNode(elementType) : node; } export function updateIndexedAccessTypeNode(node, objectType, indexType) { return node.objectType !== objectType || node.indexType !== indexType ? createIndexedAccessTypeNode(objectType, indexType) : node; } export function updateTypeReferenceNode(node, typeName, typeArguments) { return node.typeName !== typeName || node.typeArguments !== typeArguments ? createTypeReferenceNode(typeName, typeArguments) : node; } export function updateExpressionWithTypeArguments(node, expression, typeArguments) { return node.expression !== expression || node.typeArguments !== typeArguments ? createExpressionWithTypeArguments(expression, typeArguments) : node; } export function updateLiteralTypeNode(node, literal) { return node.literal !== literal ? createLiteralTypeNode(literal) : node; } export function updateTypePredicateNode(node, assertsModifier, parameterName, type) { return node.assertsModifier !== assertsModifier || node.parameterName !== parameterName || node.type !== type ? createTypePredicateNode(assertsModifier, parameterName, type) : node; } export function updateImportAttribute(node, name, value) { return node.name !== name || node.value !== value ? createImportAttribute(name, value) : node; } export function updateImportAttributes(node, attributes) { return node.attributes !== attributes ? createImportAttributes(node.token, attributes, node.multiLine) : node; } export function updateTypeQueryNode(node, exprName, typeArguments) { return node.exprName !== exprName || node.typeArguments !== typeArguments ? createTypeQueryNode(exprName, typeArguments) : node; } export function updateMappedTypeNode(node, readonlyToken, typeParameter, nameType, questionToken, type, members) { return node.readonlyToken !== readonlyToken || node.typeParameter !== typeParameter || node.nameType !== nameType || node.questionToken !== questionToken || node.type !== type || node.members !== members ? createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type, members) : node; } export function updateTypeLiteralNode(node, members) { return node.members !== members ? createTypeLiteralNode(members) : node; } export function updateTupleTypeNode(node, elements) { return node.elements !== elements ? createTupleTypeNode(elements) : node; } export function updateNamedTupleMember(node, dotDotDotToken, name, questionToken, type) { return node.dotDotDotToken !== dotDotDotToken || node.name !== name || node.questionToken !== questionToken || node.type !== type ? createNamedTupleMember(dotDotDotToken, name, questionToken, type) : node; } export function updateOptionalTypeNode(node, type) { return node.type !== type ? createOptionalTypeNode(type) : node; } export function updateRestTypeNode(node, type) { return node.type !== type ? createRestTypeNode(type) : node; } export function updateParenthesizedTypeNode(node, type) { return node.type !== type ? createParenthesizedTypeNode(type) : node; } export function updateFunctionTypeNode(node, typeParameters, parameters, type) { return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createFunctionTypeNode(typeParameters, parameters, type) : node; } export function updateConstructorTypeNode(node, modifiers, typeParameters, parameters, type) { return node.modifiers !== modifiers || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createConstructorTypeNode(modifiers, typeParameters, parameters, type) : node; } export function updateTemplateLiteralTypeNode(node, head, templateSpans) { return node.head !== head || node.templateSpans !== templateSpans ? createTemplateLiteralTypeNode(head, templateSpans) : node; } export function updateTemplateLiteralTypeSpan(node, type, literal) { return node.type !== type || node.literal !== literal ? createTemplateLiteralTypeSpan(type, literal) : node; } export function updateSyntheticExpression(node, tupleNameSource) { return node.tupleNameSource !== tupleNameSource ? createSyntheticExpression(node.type, node.isSpread, tupleNameSource) : node; } export function updatePartiallyEmittedExpression(node, expression) { return node.expression !== expression ? createPartiallyEmittedExpression(expression) : node; } export function updateJsxElement(node, openingElement, children, closingElement) { return node.openingElement !== openingElement || node.children !== children || node.closingElement !== closingElement ? createJsxElement(openingElement, children, closingElement) : node; } export function updateJsxAttributes(node, properties) { return node.properties !== properties ? createJsxAttributes(properties) : node; } export function updateJsxNamespacedName(node, namespace, name) { return node.namespace !== namespace || node.name !== name ? createJsxNamespacedName(namespace, name) : node; } export function updateJsxOpeningElement(node, tagName, typeArguments, attributes) { return node.tagName !== tagName || node.typeArguments !== typeArguments || node.attributes !== attributes ? createJsxOpeningElement(tagName, typeArguments, attributes) : node; } export function updateJsxSelfClosingElement(node, tagName, typeArguments, attributes) { return node.tagName !== tagName || node.typeArguments !== typeArguments || node.attributes !== attributes ? createJsxSelfClosingElement(tagName, typeArguments, attributes) : node; } export function updateJsxFragment(node, openingFragment, children, closingFragment) { return node.openingFragment !== openingFragment || node.children !== children || node.closingFragment !== closingFragment ? createJsxFragment(openingFragment, children, closingFragment) : node; } export function updateJsxAttribute(node, name, initializer) { return node.name !== name || node.initializer !== initializer ? createJsxAttribute(name, initializer) : node; } export function updateJsxSpreadAttribute(node, expression) { return node.expression !== expression ? createJsxSpreadAttribute(expression) : node; } export function updateJsxClosingElement(node, tagName) { return node.tagName !== tagName ? createJsxClosingElement(tagName) : node; } export function updateJsxExpression(node, dotDotDotToken, expression) { return node.dotDotDotToken !== dotDotDotToken || node.expression !== expression ? createJsxExpression(dotDotDotToken, expression) : node; } export function updateSyntaxList(node, children) { return node.children !== children ? createSyntaxList(children) : node; } export function updateJSDoc(node, comment, tags) { return node.comment !== comment || node.tags !== tags ? createJSDoc(comment, tags) : node; } export function updateJSDocTypeExpression(node, type) { return node.type !== type ? createJSDocTypeExpression(type) : node; } export function updateJSDocNonNullableType(node, type) { return node.type !== type ? createJSDocNonNullableType(type) : node; } export function updateJSDocNullableType(node, type) { return node.type !== type ? createJSDocNullableType(type) : node; } export function updateJSDocVariadicType(node, type) { return node.type !== type ? createJSDocVariadicType(type) : node; } export function updateJSDocOptionalType(node, type) { return node.type !== type ? createJSDocOptionalType(type) : node; } export function updateJSDocTypeTag(node, tagName, typeExpression, comment) { return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocTypeTag(tagName, typeExpression, comment) : node; } export function updateJSDocUnknownTag(node, tagName, comment) { return node.tagName !== tagName || node.comment !== comment ? createJSDocUnknownTag(tagName, comment) : node; } export function updateJSDocTemplateTag(node, tagName, constraint, typeParameters, comment) { return node.tagName !== tagName || node.constraint !== constraint || node.typeParameters !== typeParameters || node.comment !== comment ? createJSDocTemplateTag(tagName, constraint, typeParameters, comment) : node; } export function updateJSDocReturnTag(node, tagName, typeExpression, comment) { return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocReturnTag(tagName, typeExpression, comment) : node; } export function updateJSDocPublicTag(node, tagName, comment) { return node.tagName !== tagName || node.comment !== comment ? createJSDocPublicTag(tagName, comment) : node; } export function updateJSDocPrivateTag(node, tagName, comment) { return node.tagName !== tagName || node.comment !== comment ? createJSDocPrivateTag(tagName, comment) : node; } export function updateJSDocProtectedTag(node, tagName, comment) { return node.tagName !== tagName || node.comment !== comment ? createJSDocProtectedTag(tagName, comment) : node; } export function updateJSDocReadonlyTag(node, tagName, comment) { return node.tagName !== tagName || node.comment !== comment ? createJSDocReadonlyTag(tagName, comment) : node; } export function updateJSDocOverrideTag(node, tagName, comment) { return node.tagName !== tagName || node.comment !== comment ? createJSDocOverrideTag(tagName, comment) : node; } export function updateJSDocDeprecatedTag(node, tagName, comment) { return node.tagName !== tagName || node.comment !== comment ? createJSDocDeprecatedTag(tagName, comment) : node; } export function updateJSDocSeeTag(node, tagName, nameExpression, comment) { return node.tagName !== tagName || node.nameExpression !== nameExpression || node.comment !== comment ? createJSDocSeeTag(tagName, nameExpression, comment) : node; } export function updateJSDocImplementsTag(node, tagName, className, comment) { return node.tagName !== tagName || node.className !== className || node.comment !== comment ? createJSDocImplementsTag(tagName, className, comment) : node; } export function updateJSDocAugmentsTag(node, tagName, className, comment) { return node.tagName !== tagName || node.className !== className || node.comment !== comment ? createJSDocAugmentsTag(tagName, className, comment) : node; } export function updateJSDocSatisfiesTag(node, tagName, typeExpression, comment) { return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocSatisfiesTag(tagName, typeExpression, comment) : node; } export function updateJSDocThrowsTag(node, tagName, typeExpression, comment) { return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocThrowsTag(tagName, typeExpression, comment) : node; } export function updateJSDocThisTag(node, tagName, typeExpression, comment) { return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocThisTag(tagName, typeExpression, comment) : node; } export function updateJSDocImportTag(node, tagName, importClause, moduleSpecifier, attributes, comment) { return node.tagName !== tagName || node.importClause !== importClause || node.moduleSpecifier !== moduleSpecifier || node.attributes !== attributes || node.comment !== comment ? createJSDocImportTag(tagName, importClause, moduleSpecifier, attributes, comment) : node; } export function updateJSDocCallbackTag(node, tagName, typeExpression, name, comment) { return node.tagName !== tagName || node.typeExpression !== typeExpression || node.name !== name || node.comment !== comment ? createJSDocCallbackTag(tagName, typeExpression, name, comment) : node; } export function updateJSDocOverloadTag(node, tagName, typeExpression, comment) { return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocOverloadTag(tagName, typeExpression, comment) : node; } export function updateJSDocTypedefTag(node, tagName, typeExpression, name, comment) { return node.tagName !== tagName || node.typeExpression !== typeExpression || node.name !== name || node.comment !== comment ? createJSDocTypedefTag(tagName, typeExpression, name, comment) : node; } export function updateJSDocSignature(node, typeParameters, parameters, type) { return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createJSDocSignature(typeParameters, parameters, type) : node; } export function updateJSDocNameReference(node, name) { return node.name !== name ? createJSDocNameReference(name) : node; } export function updateModuleDeclaration(node, modifiers, name, body) { return node.modifiers !== modifiers || node.name !== name || node.body !== body ? createModuleDeclaration(modifiers, node.keyword, name, body) : node; } export function updateImportEqualsDeclaration(node, modifiers, name, moduleReference) { return node.modifiers !== modifiers || node.name !== name || node.moduleReference !== moduleReference ? createImportEqualsDeclaration(modifiers, node.isTypeOnly, name, moduleReference) : node; } export function updateExportDeclaration(node, modifiers, exportClause, moduleSpecifier, attributes) { return node.modifiers !== modifiers || node.exportClause !== exportClause || node.moduleSpecifier !== moduleSpecifier || node.attributes !== attributes ? createExportDeclaration(modifiers, node.isTypeOnly, exportClause, moduleSpecifier, attributes) : node; } export function updateImportTypeNode(node, argument, attributes, qualifier, typeArguments) { return node.argument !== argument || node.attributes !== attributes || node.qualifier !== qualifier || node.typeArguments !== typeArguments ? createImportTypeNode(node.isTypeOf, argument, attributes, qualifier, typeArguments) : node; } export function updateImportClause(node, name, namedBindings) { return node.name !== name || node.namedBindings !== namedBindings ? createImportClause(node.phaseModifier, name, namedBindings) : node; } export function updateImportSpecifier(node, propertyName, name) { return node.propertyName !== propertyName || node.name !== name ? createImportSpecifier(node.isTypeOnly, propertyName, name) : node; } export function updateJSDocLink(node, name) { return node.name !== name ? createJSDocLink(name, node.text) : node; } export function updateJSDocLinkPlain(node, name) { return node.name !== name ? createJSDocLinkPlain(name, node.text) : node; } export function updateJSDocLinkCode(node, name) { return node.name !== name ? createJSDocLinkCode(name, node.text) : node; } export function updateTypeParameterDeclaration(node, modifiers, name, constraint, expression, defaultType) { return node.modifiers !== modifiers || node.name !== name || node.constraint !== constraint || node.expression !== expression || node.defaultType !== defaultType ? createTypeParameterDeclaration(modifiers, name, constraint, expression, defaultType) : node; } export function updateSyntheticReferenceExpression(node, expression, thisArg) { return node.expression !== expression || node.thisArg !== thisArg ? createSyntheticReferenceExpression(expression, thisArg) : node; } export function updateJSDocTypeLiteral(node, jsdocPropertyTags) { return node.jsdocPropertyTags !== jsdocPropertyTags ? createJSDocTypeLiteral(jsdocPropertyTags, node.isArrayType) : node; } export function updateForInStatement(node, awaitModifier, initializer, expression, statement) { return node.awaitModifier !== awaitModifier || node.initializer !== initializer || node.expression !== expression || node.statement !== statement ? createForInStatement(awaitModifier, initializer, expression, statement) : node; } export function updateForOfStatement(node, awaitModifier, initializer, expression, statement) { return node.awaitModifier !== awaitModifier || node.initializer !== initializer || node.expression !== expression || node.statement !== statement ? createForOfStatement(awaitModifier, initializer, expression, statement) : node; } export function updateCaseClause(node, expression, statements) { return node.expression !== expression || node.statements !== statements ? createCaseClause(expression, statements) : node; } export function updateDefaultClause(node, expression, statements) { return node.expression !== expression || node.statements !== statements ? createDefaultClause(expression, statements) : node; } export function updateObjectBindingPattern(node, elements) { return node.elements !== elements ? createObjectBindingPattern(elements) : node; } export function updateArrayBindingPattern(node, elements) { return node.elements !== elements ? createArrayBindingPattern(elements) : node; } export function updateJSDocParameterTag(node, tagName, name, typeExpression, comment) { return node.tagName !== tagName || node.name !== name || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocParameterTag(tagName, name, node.isBracketed, typeExpression, node.isNameFirst, comment) : node; } export function updateJSDocPropertyTag(node, tagName, name, typeExpression, comment) { return node.tagName !== tagName || node.name !== name || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocPropertyTag(tagName, name, node.isBracketed, typeExpression, node.isNameFirst, comment) : node; } export function createSourceFile(statements, endOfFileToken, text, fileName, path) { return new NodeObject(SyntaxKind.SourceFile, { statements: createNodeArray(statements), endOfFileToken, text, fileName, path, }); } function cloneSourceFileWithChanges(source, statements, endOfFileToken) { return new NodeObject(SyntaxKind.SourceFile, { ...cloneSourceFileData(source), statements: createNodeArray(statements), endOfFileToken, }); } export function updateSourceFile(node, statements, endOfFileToken) { return node.statements !== statements || node.endOfFileToken !== endOfFileToken ? cloneSourceFileWithChanges(node, statements, endOfFileToken) : node; } //# sourceMappingURL=factory.generated.js.map