diff --git a/packages/babel-types/src/definitions/core.js b/packages/babel-types/src/definitions/core.js index 4569a367e7..9897dec2e0 100644 --- a/packages/babel-types/src/definitions/core.js +++ b/packages/babel-types/src/definitions/core.js @@ -1,5 +1,4 @@ -/* eslint max-len: "off" */ - +// @flow import * as t from "../index"; import { @@ -848,7 +847,7 @@ defineType("WithStatement", { aliases: ["Statement"], fields: { object: { - object: assertNodeType("Expression"), + validate: assertNodeType("Expression"), }, body: { validate: assertNodeType("BlockStatement", "Statement"), diff --git a/packages/babel-types/src/definitions/es2015.js b/packages/babel-types/src/definitions/es2015.js index c785a007d7..728fd69c34 100644 --- a/packages/babel-types/src/definitions/es2015.js +++ b/packages/babel-types/src/definitions/es2015.js @@ -1,5 +1,4 @@ -/* eslint max-len: "off" */ - +// @flow import defineType, { assertNodeType, assertValueType, @@ -396,7 +395,7 @@ export const classMethodOrPropertyCommon = { ); const computed = assertNodeType("Expression"); - return function(node, key, val) { + return function(node: Object, key: string, val: any) { const validator = node.computed ? computed : normal; validator(node, key, val); }; diff --git a/packages/babel-types/src/definitions/experimental.js b/packages/babel-types/src/definitions/experimental.js index 860fe0ecd8..69925f54af 100644 --- a/packages/babel-types/src/definitions/experimental.js +++ b/packages/babel-types/src/definitions/experimental.js @@ -1,3 +1,4 @@ +// @flow import defineType, { assertEach, assertNodeType, diff --git a/packages/babel-types/src/definitions/flow.js b/packages/babel-types/src/definitions/flow.js index 7dba2e48e7..3e722abc5e 100644 --- a/packages/babel-types/src/definitions/flow.js +++ b/packages/babel-types/src/definitions/flow.js @@ -1,3 +1,4 @@ +// @flow import defineType, { assertEach, assertNodeType, diff --git a/packages/babel-types/src/definitions/index.js b/packages/babel-types/src/definitions/index.js index 566d7223db..eec228e457 100644 --- a/packages/babel-types/src/definitions/index.js +++ b/packages/babel-types/src/definitions/index.js @@ -1,3 +1,4 @@ +// @flow import * as t from "../index"; export const VISITOR_KEYS = {}; @@ -30,8 +31,8 @@ export function assertEach(callback: Function): Function { return validator; } -export function assertOneOf(...vals): Function { - function validate(node, key, val) { +export function assertOneOf(...vals: Array): Function { + function validate(node: Object, key: string, val: any): void { if (vals.indexOf(val) < 0) { throw new TypeError( `Property ${key} expected value to be one of ${JSON.stringify( @@ -125,7 +126,9 @@ export function chain(...fns: Array): Function { export default function defineType( type: string, opts: { - fields?: Object, + fields?: { + [string]: {| validate?: Function, default?: any, optional?: boolean |}, + }, visitor?: Array, aliases?: Array, builder?: Array, @@ -135,24 +138,25 @@ export default function defineType( ) { const inherits = (opts.inherits && store[opts.inherits]) || {}; - opts.fields = opts.fields || inherits.fields || {}; - opts.visitor = opts.visitor || inherits.visitor || []; - opts.aliases = opts.aliases || inherits.aliases || []; - opts.builder = opts.builder || inherits.builder || opts.visitor || []; + const fields = opts.fields || inherits.fields || {}; + const visitor = opts.visitor || inherits.visitor || []; + const aliases = opts.aliases || inherits.aliases || []; + const builder = opts.builder || inherits.builder || opts.visitor || []; if (opts.deprecatedAlias) { DEPRECATED_KEYS[opts.deprecatedAlias] = type; } // ensure all field keys are represented in `fields` - for (const key of (opts.visitor.concat(opts.builder): Array)) { - opts.fields[key] = opts.fields[key] || {}; + for (const key of (visitor.concat(builder): Array)) { + // $FlowIssue + fields[key] = fields[key] || {}; } - for (const key in opts.fields) { - const field = opts.fields[key]; + for (const key in fields) { + const field = fields[key]; - if (opts.builder.indexOf(key) === -1) { + if (builder.indexOf(key) === -1) { field.optional = true; } if (field.default === undefined) { @@ -162,10 +166,10 @@ export default function defineType( } } - VISITOR_KEYS[type] = opts.visitor; - BUILDER_KEYS[type] = opts.builder; - NODE_FIELDS[type] = opts.fields; - ALIAS_KEYS[type] = opts.aliases; + VISITOR_KEYS[type] = opts.visitor = visitor; + BUILDER_KEYS[type] = opts.builder = builder; + NODE_FIELDS[type] = opts.fields = fields; + ALIAS_KEYS[type] = opts.aliases = aliases; store[type] = opts; } diff --git a/packages/babel-types/src/definitions/jsx.js b/packages/babel-types/src/definitions/jsx.js index bfa2142e06..90c759350d 100644 --- a/packages/babel-types/src/definitions/jsx.js +++ b/packages/babel-types/src/definitions/jsx.js @@ -1,3 +1,4 @@ +// @flow import defineType, { assertNodeType, assertValueType, diff --git a/packages/babel-types/src/definitions/misc.js b/packages/babel-types/src/definitions/misc.js index 103d76c619..0c2c5e68a4 100644 --- a/packages/babel-types/src/definitions/misc.js +++ b/packages/babel-types/src/definitions/misc.js @@ -1,3 +1,4 @@ +// @flow import defineType, { assertNodeType } from "./index"; defineType("Noop", {