From 80a757819f0697b86d37c3f8f0521b3fc894a289 Mon Sep 17 00:00:00 2001 From: Logan Smyth Date: Fri, 13 Jan 2017 22:13:27 -0800 Subject: [PATCH] Validate importKind and ensure code generation exists. --- packages/babel-generator/src/generators/modules.js | 5 +++++ .../test/fixtures/flow/type-annotations/actual.js | 4 ++++ .../test/fixtures/flow/type-annotations/expected.js | 4 ++++ packages/babel-types/src/definitions/es2015.js | 4 ++++ 4 files changed, 17 insertions(+) diff --git a/packages/babel-generator/src/generators/modules.js b/packages/babel-generator/src/generators/modules.js index 6a87a0251253..f92ed919e48e 100644 --- a/packages/babel-generator/src/generators/modules.js +++ b/packages/babel-generator/src/generators/modules.js @@ -1,6 +1,11 @@ import * as t from "babel-types"; export function ImportSpecifier(node: Object) { + if (node.importKind === "type" || node.importKind === "typeof") { + this.word(node.importKind); + this.space(); + } + this.print(node.imported, node); if (node.local && node.local.name !== node.imported.name) { this.space(); diff --git a/packages/babel-generator/test/fixtures/flow/type-annotations/actual.js b/packages/babel-generator/test/fixtures/flow/type-annotations/actual.js index 2690152d344f..d252ef635ac6 100644 --- a/packages/babel-generator/test/fixtures/flow/type-annotations/actual.js +++ b/packages/babel-generator/test/fixtures/flow/type-annotations/actual.js @@ -97,6 +97,10 @@ import type { foo as bar } from "baz"; import type from "foo"; import type, { foo } from "bar"; import type * as namespace from "bar"; +import { type Foo } from "bar"; +import { typeof Foo } from "bar"; +import { type Foo as Bar } from "bar"; +import { typeof Foo as Bar } from "bar"; export type { foo }; export type { bar } from "bar"; export interface baz { p: number }; diff --git a/packages/babel-generator/test/fixtures/flow/type-annotations/expected.js b/packages/babel-generator/test/fixtures/flow/type-annotations/expected.js index 7a9406eaa34b..205513cb00ef 100644 --- a/packages/babel-generator/test/fixtures/flow/type-annotations/expected.js +++ b/packages/babel-generator/test/fixtures/flow/type-annotations/expected.js @@ -101,6 +101,10 @@ import type { foo as bar } from "baz"; import type from "foo"; import type, { foo } from "bar"; import type * as namespace from "bar"; +import { type Foo } from "bar"; +import { typeof Foo } from "bar"; +import { type Foo as Bar } from "bar"; +import { typeof Foo as Bar } from "bar"; export type { foo }; export type { bar } from "bar"; export interface baz { p: number }; diff --git a/packages/babel-types/src/definitions/es2015.js b/packages/babel-types/src/definitions/es2015.js index 4f4ff0807ce7..820ddcf2388f 100644 --- a/packages/babel-types/src/definitions/es2015.js +++ b/packages/babel-types/src/definitions/es2015.js @@ -227,6 +227,10 @@ defineType("ImportSpecifier", { }, imported: { validate: assertNodeType("Identifier") + }, + importKind: { + // Handle Flowtype's extension "import {typeof foo} from" + validate: assertOneOf(null, "type", "typeof") } } });