{
  "Node": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "reference",
        "name": "string"
      },
      "loc": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "SourceLocation"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      }
    },
    "base": []
  },
  "SourceLocation": {
    "kind": "interface",
    "props": {
      "source": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "string"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      },
      "start": {
        "kind": "reference",
        "name": "Position"
      },
      "end": {
        "kind": "reference",
        "name": "Position"
      }
    },
    "base": []
  },
  "Position": {
    "kind": "interface",
    "props": {
      "line": {
        "kind": "reference",
        "name": "number"
      },
      "column": {
        "kind": "reference",
        "name": "number"
      }
    },
    "base": []
  },
  "Identifier": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "Identifier"
      },
      "name": {
        "kind": "reference",
        "name": "string"
      }
    },
    "base": [
      "Expression",
      "Pattern"
    ]
  },
  "Literal": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "Literal"
      },
      "value": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "string"
          },
          {
            "kind": "reference",
            "name": "boolean"
          },
          {
            "kind": "literal",
            "value": null
          },
          {
            "kind": "reference",
            "name": "number"
          },
          {
            "kind": "reference",
            "name": "RegExp"
          }
        ]
      }
    },
    "base": [
      "Expression"
    ]
  },
  "RegExpLiteral": {
    "kind": "interface",
    "props": {
      "regex": {
        "kind": "object",
        "items": {
          "pattern": {
            "kind": "reference",
            "name": "string"
          },
          "flags": {
            "kind": "reference",
            "name": "string"
          }
        }
      }
    },
    "base": [
      "Literal"
    ]
  },
  "Program": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "Program"
      },
      "body": {
        "kind": "array",
        "base": {
          "kind": "union",
          "types": [
            {
              "kind": "reference",
              "name": "Statement"
            },
            {
              "kind": "reference",
              "name": "ModuleDeclaration"
            }
          ]
        }
      },
      "sourceType": {
        "kind": "union",
        "types": [
          {
            "kind": "literal",
            "value": "script"
          },
          {
            "kind": "literal",
            "value": "module"
          }
        ]
      }
    },
    "base": [
      "Node"
    ]
  },
  "Function": {
    "kind": "interface",
    "props": {
      "id": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Identifier"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      },
      "params": {
        "kind": "array",
        "base": {
          "kind": "reference",
          "name": "Pattern"
        }
      },
      "body": {
        "kind": "reference",
        "name": "FunctionBody"
      },
      "generator": {
        "kind": "reference",
        "name": "boolean"
      }
    },
    "base": [
      "Node"
    ]
  },
  "Statement": {
    "kind": "interface",
    "props": {},
    "base": [
      "Node"
    ]
  },
  "ExpressionStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ExpressionStatement"
      },
      "expression": {
        "kind": "reference",
        "name": "Expression"
      }
    },
    "base": [
      "Statement"
    ]
  },
  "Directive": {
    "kind": "interface",
    "props": {
      "expression": {
        "kind": "reference",
        "name": "Literal"
      },
      "directive": {
        "kind": "reference",
        "name": "string"
      }
    },
    "base": [
      "ExpressionStatement"
    ]
  },
  "BlockStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "BlockStatement"
      },
      "body": {
        "kind": "array",
        "base": {
          "kind": "reference",
          "name": "Statement"
        }
      }
    },
    "base": [
      "Statement"
    ]
  },
  "FunctionBody": {
    "kind": "interface",
    "props": {
      "body": {
        "kind": "array",
        "base": {
          "kind": "union",
          "types": [
            {
              "kind": "reference",
              "name": "Directive"
            },
            {
              "kind": "reference",
              "name": "Statement"
            }
          ]
        }
      }
    },
    "base": [
      "BlockStatement"
    ]
  },
  "EmptyStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "EmptyStatement"
      }
    },
    "base": [
      "Statement"
    ]
  },
  "DebuggerStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "DebuggerStatement"
      }
    },
    "base": [
      "Statement"
    ]
  },
  "WithStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "WithStatement"
      },
      "object": {
        "kind": "reference",
        "name": "Expression"
      },
      "body": {
        "kind": "reference",
        "name": "Statement"
      }
    },
    "base": [
      "Statement"
    ]
  },
  "ReturnStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ReturnStatement"
      },
      "argument": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Expression"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      }
    },
    "base": [
      "Statement"
    ]
  },
  "LabeledStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "LabeledStatement"
      },
      "label": {
        "kind": "reference",
        "name": "Identifier"
      },
      "body": {
        "kind": "reference",
        "name": "Statement"
      }
    },
    "base": [
      "Statement"
    ]
  },
  "BreakStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "BreakStatement"
      },
      "label": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Identifier"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      }
    },
    "base": [
      "Statement"
    ]
  },
  "ContinueStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ContinueStatement"
      },
      "label": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Identifier"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      }
    },
    "base": [
      "Statement"
    ]
  },
  "IfStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "IfStatement"
      },
      "test": {
        "kind": "reference",
        "name": "Expression"
      },
      "consequent": {
        "kind": "reference",
        "name": "Statement"
      },
      "alternate": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Statement"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      }
    },
    "base": [
      "Statement"
    ]
  },
  "SwitchStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "SwitchStatement"
      },
      "discriminant": {
        "kind": "reference",
        "name": "Expression"
      },
      "cases": {
        "kind": "array",
        "base": {
          "kind": "reference",
          "name": "SwitchCase"
        }
      }
    },
    "base": [
      "Statement"
    ]
  },
  "SwitchCase": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "SwitchCase"
      },
      "test": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Expression"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      },
      "consequent": {
        "kind": "array",
        "base": {
          "kind": "reference",
          "name": "Statement"
        }
      }
    },
    "base": [
      "Node"
    ]
  },
  "ThrowStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ThrowStatement"
      },
      "argument": {
        "kind": "reference",
        "name": "Expression"
      }
    },
    "base": [
      "Statement"
    ]
  },
  "TryStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "TryStatement"
      },
      "block": {
        "kind": "reference",
        "name": "BlockStatement"
      },
      "handler": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "CatchClause"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      },
      "finalizer": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "BlockStatement"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      }
    },
    "base": [
      "Statement"
    ]
  },
  "CatchClause": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "CatchClause"
      },
      "param": {
        "kind": "reference",
        "name": "Pattern"
      },
      "body": {
        "kind": "reference",
        "name": "BlockStatement"
      }
    },
    "base": [
      "Node"
    ]
  },
  "WhileStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "WhileStatement"
      },
      "test": {
        "kind": "reference",
        "name": "Expression"
      },
      "body": {
        "kind": "reference",
        "name": "Statement"
      }
    },
    "base": [
      "Statement"
    ]
  },
  "DoWhileStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "DoWhileStatement"
      },
      "body": {
        "kind": "reference",
        "name": "Statement"
      },
      "test": {
        "kind": "reference",
        "name": "Expression"
      }
    },
    "base": [
      "Statement"
    ]
  },
  "ForStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ForStatement"
      },
      "init": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "VariableDeclaration"
          },
          {
            "kind": "reference",
            "name": "Expression"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      },
      "test": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Expression"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      },
      "update": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Expression"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      },
      "body": {
        "kind": "reference",
        "name": "Statement"
      }
    },
    "base": [
      "Statement"
    ]
  },
  "ForInStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ForInStatement"
      },
      "left": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "VariableDeclaration"
          },
          {
            "kind": "reference",
            "name": "Pattern"
          }
        ]
      },
      "right": {
        "kind": "reference",
        "name": "Expression"
      },
      "body": {
        "kind": "reference",
        "name": "Statement"
      }
    },
    "base": [
      "Statement"
    ]
  },
  "Declaration": {
    "kind": "interface",
    "props": {},
    "base": [
      "Statement"
    ]
  },
  "FunctionDeclaration": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "FunctionDeclaration"
      },
      "id": {
        "kind": "reference",
        "name": "Identifier"
      }
    },
    "base": [
      "Function",
      "Declaration"
    ]
  },
  "VariableDeclaration": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "VariableDeclaration"
      },
      "declarations": {
        "kind": "array",
        "base": {
          "kind": "reference",
          "name": "VariableDeclarator"
        }
      },
      "kind": {
        "kind": "union",
        "types": [
          {
            "kind": "literal",
            "value": "var"
          },
          {
            "kind": "literal",
            "value": "let"
          },
          {
            "kind": "literal",
            "value": "const"
          }
        ]
      }
    },
    "base": [
      "Declaration"
    ]
  },
  "VariableDeclarator": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "VariableDeclarator"
      },
      "id": {
        "kind": "reference",
        "name": "Pattern"
      },
      "init": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Expression"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      }
    },
    "base": [
      "Node"
    ]
  },
  "Expression": {
    "kind": "interface",
    "props": {},
    "base": [
      "Node"
    ]
  },
  "ThisExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ThisExpression"
      }
    },
    "base": [
      "Expression"
    ]
  },
  "ArrayExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ArrayExpression"
      },
      "elements": {
        "kind": "array",
        "base": {
          "kind": "union",
          "types": [
            {
              "kind": "reference",
              "name": "Expression"
            },
            {
              "kind": "reference",
              "name": "SpreadElement"
            },
            {
              "kind": "literal",
              "value": null
            }
          ]
        }
      }
    },
    "base": [
      "Expression"
    ]
  },
  "ObjectExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ObjectExpression"
      },
      "properties": {
        "kind": "array",
        "base": {
          "kind": "reference",
          "name": "Property"
        }
      }
    },
    "base": [
      "Expression"
    ]
  },
  "Property": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "Property"
      },
      "key": {
        "kind": "reference",
        "name": "Expression"
      },
      "value": {
        "kind": "reference",
        "name": "Expression"
      },
      "kind": {
        "kind": "union",
        "types": [
          {
            "kind": "literal",
            "value": "init"
          },
          {
            "kind": "literal",
            "value": "get"
          },
          {
            "kind": "literal",
            "value": "set"
          }
        ]
      },
      "method": {
        "kind": "reference",
        "name": "boolean"
      },
      "shorthand": {
        "kind": "reference",
        "name": "boolean"
      },
      "computed": {
        "kind": "reference",
        "name": "boolean"
      }
    },
    "base": [
      "Node"
    ]
  },
  "FunctionExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "FunctionExpression"
      }
    },
    "base": [
      "Function",
      "Expression"
    ]
  },
  "UnaryExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "UnaryExpression"
      },
      "operator": {
        "kind": "reference",
        "name": "UnaryOperator"
      },
      "prefix": {
        "kind": "reference",
        "name": "boolean"
      },
      "argument": {
        "kind": "reference",
        "name": "Expression"
      }
    },
    "base": [
      "Expression"
    ]
  },
  "UnaryOperator": {
    "kind": "enum",
    "values": [
      "-",
      "+",
      "!",
      "~",
      "typeof",
      "void",
      "delete"
    ]
  },
  "UpdateExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "UpdateExpression"
      },
      "operator": {
        "kind": "reference",
        "name": "UpdateOperator"
      },
      "argument": {
        "kind": "reference",
        "name": "Expression"
      },
      "prefix": {
        "kind": "reference",
        "name": "boolean"
      }
    },
    "base": [
      "Expression"
    ]
  },
  "UpdateOperator": {
    "kind": "enum",
    "values": [
      "++",
      "--"
    ]
  },
  "BinaryExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "BinaryExpression"
      },
      "operator": {
        "kind": "reference",
        "name": "BinaryOperator"
      },
      "left": {
        "kind": "reference",
        "name": "Expression"
      },
      "right": {
        "kind": "reference",
        "name": "Expression"
      }
    },
    "base": [
      "Expression"
    ]
  },
  "BinaryOperator": {
    "kind": "enum",
    "values": [
      "==",
      "!=",
      "===",
      "!==",
      "<",
      "<=",
      ">",
      ">=",
      "<<",
      ">>",
      ">>>",
      "+",
      "-",
      "*",
      "/",
      "%",
      "|",
      "^",
      "&",
      "in",
      "instanceof",
      "**"
    ]
  },
  "AssignmentExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "AssignmentExpression"
      },
      "operator": {
        "kind": "reference",
        "name": "AssignmentOperator"
      },
      "left": {
        "kind": "reference",
        "name": "Pattern"
      },
      "right": {
        "kind": "reference",
        "name": "Expression"
      }
    },
    "base": [
      "Expression"
    ]
  },
  "AssignmentOperator": {
    "kind": "enum",
    "values": [
      "=",
      "+=",
      "-=",
      "*=",
      "/=",
      "%=",
      "<<=",
      ">>=",
      ">>>=",
      "|=",
      "^=",
      "&=",
      "**="
    ]
  },
  "LogicalExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "LogicalExpression"
      },
      "operator": {
        "kind": "reference",
        "name": "LogicalOperator"
      },
      "left": {
        "kind": "reference",
        "name": "Expression"
      },
      "right": {
        "kind": "reference",
        "name": "Expression"
      }
    },
    "base": [
      "Expression"
    ]
  },
  "LogicalOperator": {
    "kind": "enum",
    "values": [
      "||",
      "&&"
    ]
  },
  "MemberExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "MemberExpression"
      },
      "object": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Expression"
          },
          {
            "kind": "reference",
            "name": "Super"
          }
        ]
      },
      "property": {
        "kind": "reference",
        "name": "Expression"
      },
      "computed": {
        "kind": "reference",
        "name": "boolean"
      }
    },
    "base": [
      "Expression",
      "Pattern"
    ]
  },
  "ConditionalExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ConditionalExpression"
      },
      "test": {
        "kind": "reference",
        "name": "Expression"
      },
      "alternate": {
        "kind": "reference",
        "name": "Expression"
      },
      "consequent": {
        "kind": "reference",
        "name": "Expression"
      }
    },
    "base": [
      "Expression"
    ]
  },
  "CallExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "CallExpression"
      },
      "callee": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Expression"
          },
          {
            "kind": "reference",
            "name": "Super"
          }
        ]
      },
      "arguments": {
        "kind": "array",
        "base": {
          "kind": "union",
          "types": [
            {
              "kind": "reference",
              "name": "Expression"
            },
            {
              "kind": "reference",
              "name": "SpreadElement"
            }
          ]
        }
      }
    },
    "base": [
      "Expression"
    ]
  },
  "NewExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "NewExpression"
      },
      "callee": {
        "kind": "reference",
        "name": "Expression"
      },
      "arguments": {
        "kind": "array",
        "base": {
          "kind": "union",
          "types": [
            {
              "kind": "reference",
              "name": "Expression"
            },
            {
              "kind": "reference",
              "name": "SpreadElement"
            }
          ]
        }
      }
    },
    "base": [
      "Expression"
    ]
  },
  "SequenceExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "SequenceExpression"
      },
      "expressions": {
        "kind": "array",
        "base": {
          "kind": "reference",
          "name": "Expression"
        }
      }
    },
    "base": [
      "Expression"
    ]
  },
  "Pattern": {
    "kind": "interface",
    "props": {},
    "base": [
      "Node"
    ]
  },
  "ForOfStatement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ForOfStatement"
      }
    },
    "base": [
      "ForInStatement"
    ]
  },
  "Super": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "Super"
      }
    },
    "base": [
      "Node"
    ]
  },
  "SpreadElement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "SpreadElement"
      },
      "argument": {
        "kind": "reference",
        "name": "Expression"
      }
    },
    "base": [
      "Node"
    ]
  },
  "ArrowFunctionExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ArrowFunctionExpression"
      },
      "body": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "FunctionBody"
          },
          {
            "kind": "reference",
            "name": "Expression"
          }
        ]
      },
      "expression": {
        "kind": "reference",
        "name": "boolean"
      },
      "generator": {
        "kind": "literal",
        "value": false
      }
    },
    "base": [
      "Function",
      "Expression"
    ]
  },
  "YieldExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "YieldExpression"
      },
      "argument": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Expression"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      },
      "delegate": {
        "kind": "reference",
        "name": "boolean"
      }
    },
    "base": [
      "Expression"
    ]
  },
  "TemplateLiteral": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "TemplateLiteral"
      },
      "quasis": {
        "kind": "array",
        "base": {
          "kind": "reference",
          "name": "TemplateElement"
        }
      },
      "expressions": {
        "kind": "array",
        "base": {
          "kind": "reference",
          "name": "Expression"
        }
      }
    },
    "base": [
      "Expression"
    ]
  },
  "TaggedTemplateExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "TaggedTemplateExpression"
      },
      "tag": {
        "kind": "reference",
        "name": "Expression"
      },
      "quasi": {
        "kind": "reference",
        "name": "TemplateLiteral"
      }
    },
    "base": [
      "Expression"
    ]
  },
  "TemplateElement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "TemplateElement"
      },
      "tail": {
        "kind": "reference",
        "name": "boolean"
      },
      "value": {
        "kind": "object",
        "items": {
          "cooked": {
            "kind": "reference",
            "name": "string"
          },
          "raw": {
            "kind": "reference",
            "name": "string"
          }
        }
      }
    },
    "base": [
      "Node"
    ]
  },
  "AssignmentProperty": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "Property"
      },
      "value": {
        "kind": "reference",
        "name": "Pattern"
      },
      "kind": {
        "kind": "literal",
        "value": "init"
      },
      "method": {
        "kind": "literal",
        "value": false
      }
    },
    "base": [
      "Property"
    ]
  },
  "ObjectPattern": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ObjectPattern"
      },
      "properties": {
        "kind": "array",
        "base": {
          "kind": "reference",
          "name": "AssignmentProperty"
        }
      }
    },
    "base": [
      "Pattern"
    ]
  },
  "ArrayPattern": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ArrayPattern"
      },
      "elements": {
        "kind": "array",
        "base": {
          "kind": "union",
          "types": [
            {
              "kind": "reference",
              "name": "Pattern"
            },
            {
              "kind": "literal",
              "value": null
            }
          ]
        }
      }
    },
    "base": [
      "Pattern"
    ]
  },
  "RestElement": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "RestElement"
      },
      "argument": {
        "kind": "reference",
        "name": "Pattern"
      }
    },
    "base": [
      "Pattern"
    ]
  },
  "AssignmentPattern": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "AssignmentPattern"
      },
      "left": {
        "kind": "reference",
        "name": "Pattern"
      },
      "right": {
        "kind": "reference",
        "name": "Expression"
      }
    },
    "base": [
      "Pattern"
    ]
  },
  "Class": {
    "kind": "interface",
    "props": {
      "id": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Identifier"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      },
      "superClass": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Expression"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      },
      "body": {
        "kind": "reference",
        "name": "ClassBody"
      }
    },
    "base": [
      "Node"
    ]
  },
  "ClassBody": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ClassBody"
      },
      "body": {
        "kind": "array",
        "base": {
          "kind": "reference",
          "name": "MethodDefinition"
        }
      }
    },
    "base": [
      "Node"
    ]
  },
  "MethodDefinition": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "MethodDefinition"
      },
      "key": {
        "kind": "reference",
        "name": "Expression"
      },
      "value": {
        "kind": "reference",
        "name": "FunctionExpression"
      },
      "kind": {
        "kind": "union",
        "types": [
          {
            "kind": "literal",
            "value": "constructor"
          },
          {
            "kind": "literal",
            "value": "method"
          },
          {
            "kind": "literal",
            "value": "get"
          },
          {
            "kind": "literal",
            "value": "set"
          }
        ]
      },
      "computed": {
        "kind": "reference",
        "name": "boolean"
      },
      "static": {
        "kind": "reference",
        "name": "boolean"
      }
    },
    "base": [
      "Node"
    ]
  },
  "ClassDeclaration": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ClassDeclaration"
      },
      "id": {
        "kind": "reference",
        "name": "Identifier"
      }
    },
    "base": [
      "Class",
      "Declaration"
    ]
  },
  "ClassExpression": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ClassExpression"
      }
    },
    "base": [
      "Class",
      "Expression"
    ]
  },
  "MetaProperty": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "MetaProperty"
      },
      "meta": {
        "kind": "reference",
        "name": "Identifier"
      },
      "property": {
        "kind": "reference",
        "name": "Identifier"
      }
    },
    "base": [
      "Expression"
    ]
  },
  "ModuleDeclaration": {
    "kind": "interface",
    "props": {},
    "base": [
      "Node"
    ]
  },
  "ModuleSpecifier": {
    "kind": "interface",
    "props": {
      "local": {
        "kind": "reference",
        "name": "Identifier"
      }
    },
    "base": [
      "Node"
    ]
  },
  "ImportDeclaration": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ImportDeclaration"
      },
      "specifiers": {
        "kind": "array",
        "base": {
          "kind": "union",
          "types": [
            {
              "kind": "reference",
              "name": "ImportSpecifier"
            },
            {
              "kind": "reference",
              "name": "ImportDefaultSpecifier"
            },
            {
              "kind": "reference",
              "name": "ImportNamespaceSpecifier"
            }
          ]
        }
      },
      "source": {
        "kind": "reference",
        "name": "Literal"
      }
    },
    "base": [
      "ModuleDeclaration"
    ]
  },
  "ImportSpecifier": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ImportSpecifier"
      },
      "imported": {
        "kind": "reference",
        "name": "Identifier"
      }
    },
    "base": [
      "ModuleSpecifier"
    ]
  },
  "ImportDefaultSpecifier": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ImportDefaultSpecifier"
      }
    },
    "base": [
      "ModuleSpecifier"
    ]
  },
  "ImportNamespaceSpecifier": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ImportNamespaceSpecifier"
      }
    },
    "base": [
      "ModuleSpecifier"
    ]
  },
  "ExportNamedDeclaration": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ExportNamedDeclaration"
      },
      "declaration": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Declaration"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      },
      "specifiers": {
        "kind": "array",
        "base": {
          "kind": "reference",
          "name": "ExportSpecifier"
        }
      },
      "source": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "Literal"
          },
          {
            "kind": "literal",
            "value": null
          }
        ]
      }
    },
    "base": [
      "ModuleDeclaration"
    ]
  },
  "ExportSpecifier": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ExportSpecifier"
      },
      "exported": {
        "kind": "reference",
        "name": "Identifier"
      }
    },
    "base": [
      "ModuleSpecifier"
    ]
  },
  "AnonymousDefaultExportedFunctionDeclaration": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "FunctionDeclaration"
      },
      "id": {
        "kind": "literal",
        "value": null
      }
    },
    "base": [
      "Function"
    ]
  },
  "AnonymousDefaultExportedClassDeclaration": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ClassDeclaration"
      },
      "id": {
        "kind": "literal",
        "value": null
      }
    },
    "base": [
      "Class"
    ]
  },
  "ExportDefaultDeclaration": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ExportDefaultDeclaration"
      },
      "declaration": {
        "kind": "union",
        "types": [
          {
            "kind": "reference",
            "name": "AnonymousDefaultExportedFunctionDeclaration"
          },
          {
            "kind": "reference",
            "name": "FunctionDeclaration"
          },
          {
            "kind": "reference",
            "name": "AnonymousDefaultExportedClassDeclaration"
          },
          {
            "kind": "reference",
            "name": "ClassDeclaration"
          },
          {
            "kind": "reference",
            "name": "Expression"
          }
        ]
      }
    },
    "base": [
      "ModuleDeclaration"
    ]
  },
  "ExportAllDeclaration": {
    "kind": "interface",
    "props": {
      "type": {
        "kind": "literal",
        "value": "ExportAllDeclaration"
      },
      "source": {
        "kind": "reference",
        "name": "Literal"
      }
    },
    "base": [
      "ModuleDeclaration"
    ]
  }
}