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