diff --git a/packages/babel-generator/src/generators/flow.js b/packages/babel-generator/src/generators/flow.js index 3fd7b8ac13..af69950849 100644 --- a/packages/babel-generator/src/generators/flow.js +++ b/packages/babel-generator/src/generators/flow.js @@ -1,4 +1,5 @@ import * as t from "babel-types"; +import { ExportAllDeclaration } from "./modules"; export function AnyTypeAnnotation() { this.word("any"); @@ -100,17 +101,10 @@ export function DeclareExportDeclaration(node: Object) { FlowExportDeclaration.apply(this, arguments); } -export function DeclareExportAllDeclaration(node: Object) { +export function DeclareExportAllDeclaration(/*node: Object*/) { this.word("declare"); this.space(); - this.word("export"); - this.space(); - this.token("*"); - this.space(); - this.word("from"); - this.space(); - this.print(node.source, node); - this.semicolon(); + ExportAllDeclaration.apply(this, arguments); } function FlowExportDeclaration(node: Object) { diff --git a/packages/babel-generator/src/generators/modules.js b/packages/babel-generator/src/generators/modules.js index 36ae34a4a8..9525aa4490 100644 --- a/packages/babel-generator/src/generators/modules.js +++ b/packages/babel-generator/src/generators/modules.js @@ -44,6 +44,10 @@ export function ExportNamespaceSpecifier(node: Object) { export function ExportAllDeclaration(node: Object) { this.word("export"); this.space(); + if (node.exportKind === "type") { + this.word("type"); + this.space(); + } this.token("*"); this.space(); this.word("from"); diff --git a/packages/babel-generator/test/fixtures/flow/declare-exports/actual.js b/packages/babel-generator/test/fixtures/flow/declare-exports/actual.js index 8cc628e464..222d7dc343 100644 --- a/packages/babel-generator/test/fixtures/flow/declare-exports/actual.js +++ b/packages/babel-generator/test/fixtures/flow/declare-exports/actual.js @@ -22,3 +22,5 @@ declare module B { declare export type B = {}; declare export interface Moon {} } + +declare module "foo" { declare export type * from "bar"; } diff --git a/packages/babel-generator/test/fixtures/flow/declare-exports/expected.js b/packages/babel-generator/test/fixtures/flow/declare-exports/expected.js index fee0ef0e75..cc5da01f9c 100644 --- a/packages/babel-generator/test/fixtures/flow/declare-exports/expected.js +++ b/packages/babel-generator/test/fixtures/flow/declare-exports/expected.js @@ -29,4 +29,7 @@ declare export { c, d } from 'bar'; declare module B { declare export type B = {}; declare export interface Moon {} +} +declare module "foo" { + declare export type * from "bar"; } \ No newline at end of file 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 a1f7ce71d5..15eddadab1 100644 --- a/packages/babel-generator/test/fixtures/flow/type-annotations/actual.js +++ b/packages/babel-generator/test/fixtures/flow/type-annotations/actual.js @@ -123,3 +123,4 @@ var a: {| subtract: (x: number, ...y: Array) => void |}; var a: {| id(x: T): T; |}; function foo(numVal: number = 2) {} function foo(numVal?: number = 2) {} +export type * from "foo"; 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 1e8c30dd10..664a182464 100644 --- a/packages/babel-generator/test/fixtures/flow/type-annotations/expected.js +++ b/packages/babel-generator/test/fixtures/flow/type-annotations/expected.js @@ -286,4 +286,6 @@ var a: {| function foo(numVal: number = 2) {} -function foo(numVal?: number = 2) {} \ No newline at end of file +function foo(numVal?: number = 2) {} + +export type * from "foo"; \ No newline at end of file diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-declare-exports/actual.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-declare-exports/actual.js index bf8f624350..d2eb3b9348 100644 --- a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-declare-exports/actual.js +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-declare-exports/actual.js @@ -12,4 +12,5 @@ declare export class A { static () : number } declare export class A mixins B, C {} declare export default class A {} declare export default function foo(): void; -declare export default string \ No newline at end of file +declare export default string +declare module "foo" { declare export type * from "bar"; } diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-type-annotations/actual.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-type-annotations/actual.js index aff79bc078..77aa96cf9b 100644 --- a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-type-annotations/actual.js +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-type-annotations/actual.js @@ -105,3 +105,4 @@ import {typeof V3, V4} from "foo"; export interface foo5 { p: number } export interface foo6 { p: T } import 'foo'; +export type * from "foo";