{
  "ArrayExpression":           ["elements"],
  "ArrayPattern":              ["elements", "typeAnnotation"],
  "ArrowFunctionExpression":   ["params", "body", "returnType"],
  "AssignmentExpression":      ["left", "right"],
  "AssignmentPattern":         ["left", "right"],
  "AwaitExpression":           ["argument"],
  "BinaryExpression":          ["left", "right"],
  "BlockStatement":            ["body"],
  "BreakStatement":            ["label"],
  "CallExpression":            ["callee", "arguments"],
  "CatchClause":               ["param", "body"],
  "ClassBody":                 ["body"],
  "ClassDeclaration":          ["id", "body", "superClass", "typeParameters", "superTypeParameters", "implements"],
  "ClassExpression":           ["id", "body", "superClass", "typeParameters", "superTypeParameters", "implements"],
  "ComprehensionBlock":        ["left", "right", "body"],
  "ComprehensionExpression":   ["filter", "blocks", "body"],
  "ConditionalExpression":     ["test", "consequent", "alternate"],
  "ContinueStatement":         ["label"],
  "Decorator":                 ["expression"],
  "DebuggerStatement":         [],
  "DoWhileStatement":          ["body", "test"],
  "DoExpression":              ["body"],
  "EmptyStatement":            [],
  "ExportAllDeclaration":      ["source"],
  "ExportDefaultDeclaration":  ["declaration"],
  "ExportNamedDeclaration":    ["declaration", "specifiers", "source"],
  "ExportSpecifier":           ["local", "exported"],
  "ExpressionStatement":       ["expression"],
  "File":                      ["program"],
  "ForInStatement":            ["left", "right", "body"],
  "ForOfStatement":            ["left", "right", "body"],
  "ForStatement":              ["init", "test", "update", "body"],
  "FunctionDeclaration":       ["id", "params", "body", "returnType", "typeParameters"],
  "FunctionExpression":        ["id", "params", "body", "returnType", "typeParameters"],
  "Identifier":                ["typeAnnotation"],
  "IfStatement":               ["test", "consequent", "alternate"],
  "ImportDefaultSpecifier":    ["local"],
  "ImportNamespaceSpecifier":  ["local"],
  "ImportDeclaration":         ["specifiers", "source"],
  "ImportSpecifier":           ["imported", "local"],
  "LabeledStatement":          ["label", "body"],
  "Literal":                   [],
  "LogicalExpression":         ["left", "right"],
  "MemberExpression":          ["object", "property"],
  "MetaProperty":              ["meta", "property"],
  "MethodDefinition":          ["key", "value"],
  "NewExpression":             ["callee", "arguments"],
  "ObjectExpression":          ["properties"],
  "ObjectPattern":             ["properties", "typeAnnotation"],
  "Program":                   ["body"],
  "Property":                  ["key", "value"],
  "RestElement":               ["argument", "typeAnnotation"],
  "ReturnStatement":           ["argument"],
  "SequenceExpression":        ["expressions"],
  "SpreadElement":             ["argument"],
  "SpreadProperty":            ["argument"],
  "Super":                     [],
  "SwitchCase":                ["test", "consequent"],
  "SwitchStatement":           ["discriminant", "cases"],
  "TaggedTemplateExpression":  ["tag", "quasi"],
  "TemplateElement":           [],
  "TemplateLiteral":           ["quasis", "expressions"],
  "ThisExpression":            [],
  "ThrowStatement":            ["argument"],
  "TryStatement":              ["block", "handlers", "handler", "guardedHandlers", "finalizer"],
  "UnaryExpression":           ["argument"],
  "UpdateExpression":          ["argument"],
  "VariableDeclaration":       ["declarations"],
  "VariableDeclarator":        ["id", "init"],
  "WhileStatement":            ["test", "body"],
  "WithStatement":             ["object", "body"],
  "YieldExpression":           ["argument"],

  "AnyTypeAnnotation":           [],
  "ArrayTypeAnnotation":         ["elementType"],
  "BooleanTypeAnnotation":       [],
  "ClassImplements":             ["id", "typeParameters"],
  "ClassProperty":               ["key", "value", "typeAnnotation"],
  "DeclareClass":                ["id", "typeParameters", "extends", "body"],
  "DeclareFunction":             ["id"],
  "DeclareModule":               ["id", "body"],
  "DeclareVariable":             ["id"],
  "FunctionTypeAnnotation":      ["typeParameters", "params", "rest", "returnType"],
  "FunctionTypeParam":           ["name", "typeAnnotation"],
  "GenericTypeAnnotation":       ["id", "typeParameters"],
  "InterfaceExtends":            ["id", "typeParameters"],
  "InterfaceDeclaration":        ["id", "typeParameters", "extends", "body"],
  "IntersectionTypeAnnotation":  ["types"],
  "NullableTypeAnnotation":      ["typeAnnotation"],
  "NumberTypeAnnotation":        [],
  "StringLiteralTypeAnnotation": [],
  "StringTypeAnnotation":        [],
  "TupleTypeAnnotation":         ["types"],
  "TypeofTypeAnnotation":        ["argument"],
  "TypeAlias":                   ["id", "typeParameters", "right"],
  "TypeAnnotation":              ["typeAnnotation"],
  "TypeCastExpression":          ["expression", "typeAnnotation"],
  "TypeParameterDeclaration":    ["params"],
  "TypeParameterInstantiation":  ["params"],
  "ObjectTypeAnnotation":        ["key", "value"],
  "ObjectTypeCallProperty":      ["value"],
  "ObjectTypeIndexer":           ["id", "key", "value"],
  "ObjectTypeProperty":          ["key", "value"],
  "QualifiedTypeIdentifier":     ["id", "qualification"],
  "UnionTypeAnnotation":         ["types"],
  "VoidTypeAnnotation":          [],

  "JSXAttribute":              ["name", "value"],
  "JSXClosingElement":         ["name"],
  "JSXElement":                ["openingElement", "closingElement", "children"],
  "JSXEmptyExpression":        [],
  "JSXExpressionContainer":    ["expression"],
  "JSXIdentifier":             [],
  "JSXMemberExpression":       ["object", "property"],
  "JSXNamespacedName":         ["namespace", "name"],
  "JSXOpeningElement":         ["name", "attributes"],
  "JSXSpreadAttribute":        ["argument"]
}
