|
|
- /**
- * @typedef {{ readonly [type: string]: ReadonlyArray<string> }} VisitorKeys
- */
-
- /**
- * @type {VisitorKeys}
- */
- const KEYS = {
- ArrayExpression: [
- "elements"
- ],
- ArrayPattern: [
- "elements"
- ],
- ArrowFunctionExpression: [
- "params",
- "body"
- ],
- AssignmentExpression: [
- "left",
- "right"
- ],
- AssignmentPattern: [
- "left",
- "right"
- ],
- AwaitExpression: [
- "argument"
- ],
- BinaryExpression: [
- "left",
- "right"
- ],
- BlockStatement: [
- "body"
- ],
- BreakStatement: [
- "label"
- ],
- CallExpression: [
- "callee",
- "arguments"
- ],
- CatchClause: [
- "param",
- "body"
- ],
- ChainExpression: [
- "expression"
- ],
- ClassBody: [
- "body"
- ],
- ClassDeclaration: [
- "id",
- "superClass",
- "body"
- ],
- ClassExpression: [
- "id",
- "superClass",
- "body"
- ],
- ConditionalExpression: [
- "test",
- "consequent",
- "alternate"
- ],
- ContinueStatement: [
- "label"
- ],
- DebuggerStatement: [],
- DoWhileStatement: [
- "body",
- "test"
- ],
- EmptyStatement: [],
- ExperimentalRestProperty: [
- "argument"
- ],
- ExperimentalSpreadProperty: [
- "argument"
- ],
- ExportAllDeclaration: [
- "exported",
- "source"
- ],
- ExportDefaultDeclaration: [
- "declaration"
- ],
- ExportNamedDeclaration: [
- "declaration",
- "specifiers",
- "source"
- ],
- ExportSpecifier: [
- "exported",
- "local"
- ],
- ExpressionStatement: [
- "expression"
- ],
- ForInStatement: [
- "left",
- "right",
- "body"
- ],
- ForOfStatement: [
- "left",
- "right",
- "body"
- ],
- ForStatement: [
- "init",
- "test",
- "update",
- "body"
- ],
- FunctionDeclaration: [
- "id",
- "params",
- "body"
- ],
- FunctionExpression: [
- "id",
- "params",
- "body"
- ],
- Identifier: [],
- IfStatement: [
- "test",
- "consequent",
- "alternate"
- ],
- ImportDeclaration: [
- "specifiers",
- "source"
- ],
- ImportDefaultSpecifier: [
- "local"
- ],
- ImportExpression: [
- "source"
- ],
- ImportNamespaceSpecifier: [
- "local"
- ],
- ImportSpecifier: [
- "imported",
- "local"
- ],
- JSXAttribute: [
- "name",
- "value"
- ],
- JSXClosingElement: [
- "name"
- ],
- JSXClosingFragment: [],
- JSXElement: [
- "openingElement",
- "children",
- "closingElement"
- ],
- JSXEmptyExpression: [],
- JSXExpressionContainer: [
- "expression"
- ],
- JSXFragment: [
- "openingFragment",
- "children",
- "closingFragment"
- ],
- JSXIdentifier: [],
- JSXMemberExpression: [
- "object",
- "property"
- ],
- JSXNamespacedName: [
- "namespace",
- "name"
- ],
- JSXOpeningElement: [
- "name",
- "attributes"
- ],
- JSXOpeningFragment: [],
- JSXSpreadAttribute: [
- "argument"
- ],
- JSXSpreadChild: [
- "expression"
- ],
- JSXText: [],
- LabeledStatement: [
- "label",
- "body"
- ],
- Literal: [],
- LogicalExpression: [
- "left",
- "right"
- ],
- MemberExpression: [
- "object",
- "property"
- ],
- MetaProperty: [
- "meta",
- "property"
- ],
- MethodDefinition: [
- "key",
- "value"
- ],
- NewExpression: [
- "callee",
- "arguments"
- ],
- ObjectExpression: [
- "properties"
- ],
- ObjectPattern: [
- "properties"
- ],
- PrivateIdentifier: [],
- Program: [
- "body"
- ],
- Property: [
- "key",
- "value"
- ],
- PropertyDefinition: [
- "key",
- "value"
- ],
- RestElement: [
- "argument"
- ],
- ReturnStatement: [
- "argument"
- ],
- SequenceExpression: [
- "expressions"
- ],
- SpreadElement: [
- "argument"
- ],
- StaticBlock: [
- "body"
- ],
- Super: [],
- SwitchCase: [
- "test",
- "consequent"
- ],
- SwitchStatement: [
- "discriminant",
- "cases"
- ],
- TaggedTemplateExpression: [
- "tag",
- "quasi"
- ],
- TemplateElement: [],
- TemplateLiteral: [
- "quasis",
- "expressions"
- ],
- ThisExpression: [],
- ThrowStatement: [
- "argument"
- ],
- TryStatement: [
- "block",
- "handler",
- "finalizer"
- ],
- UnaryExpression: [
- "argument"
- ],
- UpdateExpression: [
- "argument"
- ],
- VariableDeclaration: [
- "declarations"
- ],
- VariableDeclarator: [
- "id",
- "init"
- ],
- WhileStatement: [
- "test",
- "body"
- ],
- WithStatement: [
- "object",
- "body"
- ],
- YieldExpression: [
- "argument"
- ]
- };
-
- // Types.
- const NODE_TYPES = Object.keys(KEYS);
-
- // Freeze the keys.
- for (const type of NODE_TYPES) {
- Object.freeze(KEYS[type]);
- }
- Object.freeze(KEYS);
-
- export default KEYS;
|