Spaces:
Paused
Paused
| /* eslint-disable jsdoc/valid-types -- doesn't allow `readonly`. | |
| TODO: remove eslint-disable when https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/164 is fixed | |
| */ | |
| /** | |
| * @typedef {{ readonly [type: string]: ReadonlyArray<string> }} VisitorKeys | |
| */ | |
| /* eslint-enable jsdoc/valid-types -- doesn't allow `readonly string[]`. TODO: check why */ | |
| /** | |
| * @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", | |
| "attributes" | |
| ], | |
| ExportDefaultDeclaration: [ | |
| "declaration" | |
| ], | |
| ExportNamedDeclaration: [ | |
| "declaration", | |
| "specifiers", | |
| "source", | |
| "attributes" | |
| ], | |
| 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" | |
| ], | |
| ImportAttribute: [ | |
| "key", | |
| "value" | |
| ], | |
| ImportDeclaration: [ | |
| "specifiers", | |
| "source", | |
| "attributes" | |
| ], | |
| ImportDefaultSpecifier: [ | |
| "local" | |
| ], | |
| ImportExpression: [ | |
| "source", | |
| "options" | |
| ], | |
| 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; | |