diff --git a/packages/babel-generator/test/fixtures/typescript/export-type/input.js b/packages/babel-generator/test/fixtures/typescript/export-type/input.js new file mode 100644 index 000000000000..cbf7e0f4977e --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/export-type/input.js @@ -0,0 +1,3 @@ +type A = 2; +export type { A }; +export type { B } from "./mod"; diff --git a/packages/babel-generator/test/fixtures/typescript/export-type/output.js b/packages/babel-generator/test/fixtures/typescript/export-type/output.js new file mode 100644 index 000000000000..51245b7a5ae7 --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/export-type/output.js @@ -0,0 +1,3 @@ +type A = 2; +export type { A }; +export type { B } from "./mod"; \ No newline at end of file diff --git a/packages/babel-parser/src/plugins/typescript/index.js b/packages/babel-parser/src/plugins/typescript/index.js index ef3ab43b4f1e..11446ef321c8 100644 --- a/packages/babel-parser/src/plugins/typescript/index.js +++ b/packages/babel-parser/src/plugins/typescript/index.js @@ -1885,6 +1885,13 @@ export default (superClass: Class): Class => this.semicolon(); return this.finishNode(decl, "TSNamespaceExportDeclaration"); } else { + if (this.isContextual("type") && this.lookahead().type === tt.braceL) { + this.next(); + node.exportKind = "type"; + } else { + node.exportKind = "value"; + } + return super.parseExport(node); } } diff --git a/packages/babel-parser/test/fixtures/experimental/export-extensions/default-type-with-typescript/input.js b/packages/babel-parser/test/fixtures/experimental/export-extensions/default-type-with-typescript/input.js new file mode 100644 index 000000000000..2086d067fcdf --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/export-extensions/default-type-with-typescript/input.js @@ -0,0 +1 @@ +export type from 'test'; diff --git a/packages/babel-parser/test/fixtures/experimental/export-extensions/default-type-with-typescript/options.json b/packages/babel-parser/test/fixtures/experimental/export-extensions/default-type-with-typescript/options.json new file mode 100644 index 000000000000..fa7f17816e59 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/export-extensions/default-type-with-typescript/options.json @@ -0,0 +1,5 @@ +{ + "plugins": ["exportDefaultFrom", "typescript"], + "sourceType": "module", + "throws": "Unexpected token, expected \"=\" (1:17)" +} diff --git a/packages/babel-parser/test/fixtures/experimental/export-extensions/export-with-ts/output.json b/packages/babel-parser/test/fixtures/experimental/export-extensions/export-with-ts/output.json index 912eb1b41745..efe8b515d611 100644 --- a/packages/babel-parser/test/fixtures/experimental/export-extensions/export-with-ts/output.json +++ b/packages/babel-parser/test/fixtures/experimental/export-extensions/export-with-ts/output.json @@ -43,6 +43,7 @@ "column": 26 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -110,6 +111,7 @@ "column": 29 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -176,6 +178,7 @@ "column": 16 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -226,6 +229,7 @@ "column": 21 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -291,6 +295,7 @@ "column": 18 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -356,6 +361,7 @@ "column": 21 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -421,6 +427,7 @@ "column": 27 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { diff --git a/packages/babel-parser/test/fixtures/typescript/class/abstract-false-positive/output.json b/packages/babel-parser/test/fixtures/typescript/class/abstract-false-positive/output.json index e9716a7942b7..f7f4be716603 100644 --- a/packages/babel-parser/test/fixtures/typescript/class/abstract-false-positive/output.json +++ b/packages/babel-parser/test/fixtures/typescript/class/abstract-false-positive/output.json @@ -43,6 +43,7 @@ "column": 24 } }, + "exportKind": "value", "declaration": { "type": "Identifier", "start": 78, diff --git a/packages/babel-parser/test/fixtures/typescript/class/abstract/output.json b/packages/babel-parser/test/fixtures/typescript/class/abstract/output.json index 779c334d8f43..50d59f6e6383 100644 --- a/packages/babel-parser/test/fixtures/typescript/class/abstract/output.json +++ b/packages/babel-parser/test/fixtures/typescript/class/abstract/output.json @@ -144,6 +144,7 @@ "column": 27 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -229,6 +230,7 @@ "column": 33 } }, + "exportKind": "value", "declaration": { "type": "ClassDeclaration", "start": 148, @@ -296,6 +298,7 @@ "column": 36 } }, + "exportKind": "value", "declaration": { "type": "ClassDeclaration", "start": 182, diff --git a/packages/babel-parser/test/fixtures/typescript/enum/export-const/output.json b/packages/babel-parser/test/fixtures/typescript/enum/export-const/output.json index f897f84f6293..f0db16702d27 100644 --- a/packages/babel-parser/test/fixtures/typescript/enum/export-const/output.json +++ b/packages/babel-parser/test/fixtures/typescript/enum/export-const/output.json @@ -43,6 +43,7 @@ "column": 22 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { diff --git a/packages/babel-parser/test/fixtures/typescript/enum/export-declare-const/output.json b/packages/babel-parser/test/fixtures/typescript/enum/export-declare-const/output.json index d0a529fa2711..642d7f4d29c5 100644 --- a/packages/babel-parser/test/fixtures/typescript/enum/export-declare-const/output.json +++ b/packages/babel-parser/test/fixtures/typescript/enum/export-declare-const/output.json @@ -43,6 +43,7 @@ "column": 30 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { diff --git a/packages/babel-parser/test/fixtures/typescript/enum/export/output.json b/packages/babel-parser/test/fixtures/typescript/enum/export/output.json index d78f0c7187e1..883c7397ecaf 100644 --- a/packages/babel-parser/test/fixtures/typescript/enum/export/output.json +++ b/packages/babel-parser/test/fixtures/typescript/enum/export/output.json @@ -43,6 +43,7 @@ "column": 16 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { diff --git a/packages/babel-parser/test/fixtures/typescript/export/declare/output.json b/packages/babel-parser/test/fixtures/typescript/export/declare/output.json index bd75590c3bd1..9112e4c162a5 100644 --- a/packages/babel-parser/test/fixtures/typescript/export/declare/output.json +++ b/packages/babel-parser/test/fixtures/typescript/export/declare/output.json @@ -43,6 +43,7 @@ "column": 31 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -142,6 +143,7 @@ "column": 34 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -225,6 +227,7 @@ "column": 25 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -292,6 +295,7 @@ "column": 29 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -358,6 +362,7 @@ "column": 31 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -423,6 +428,7 @@ "column": 26 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -489,6 +495,7 @@ "column": 29 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -555,6 +562,7 @@ "column": 26 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { diff --git a/packages/babel-parser/test/fixtures/typescript/export/export-type-from/input.ts b/packages/babel-parser/test/fixtures/typescript/export/export-type-from/input.ts new file mode 100644 index 000000000000..a33a1717515e --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/export/export-type-from/input.ts @@ -0,0 +1 @@ +export type { T } from './mod'; diff --git a/packages/babel-parser/test/fixtures/typescript/export/export-type-from/output.json b/packages/babel-parser/test/fixtures/typescript/export/export-type-from/output.json new file mode 100644 index 000000000000..ce157bf4f047 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/export/export-type-from/output.json @@ -0,0 +1,123 @@ +{ + "type": "File", + "start": 0, + "end": 31, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 31 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 31, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 31 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "ExportNamedDeclaration", + "start": 0, + "end": 31, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 31 + } + }, + "exportKind": "type", + "specifiers": [ + { + "type": "ExportSpecifier", + "start": 14, + "end": 15, + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "local": { + "type": "Identifier", + "start": 14, + "end": 15, + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 15 + }, + "identifierName": "T" + }, + "name": "T" + }, + "exported": { + "type": "Identifier", + "start": 14, + "end": 15, + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 15 + }, + "identifierName": "T" + }, + "name": "T" + } + } + ], + "source": { + "type": "StringLiteral", + "start": 23, + "end": 30, + "loc": { + "start": { + "line": 1, + "column": 23 + }, + "end": { + "line": 1, + "column": 30 + } + }, + "extra": { + "rawValue": "./mod", + "raw": "'./mod'" + }, + "value": "./mod" + }, + "declaration": null + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/typescript/export/export-type/input.ts b/packages/babel-parser/test/fixtures/typescript/export/export-type/input.ts new file mode 100644 index 000000000000..ec228e9bc1da --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/export/export-type/input.ts @@ -0,0 +1,2 @@ +type A = 2; +export type { A }; diff --git a/packages/babel-parser/test/fixtures/typescript/export/export-type/output.json b/packages/babel-parser/test/fixtures/typescript/export/export-type/output.json new file mode 100644 index 000000000000..51485202740c --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/export/export-type/output.json @@ -0,0 +1,171 @@ +{ + "type": "File", + "start": 0, + "end": 30, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 18 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 30, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 18 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "TSTypeAliasDeclaration", + "start": 0, + "end": 11, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "id": { + "type": "Identifier", + "start": 5, + "end": 6, + "loc": { + "start": { + "line": 1, + "column": 5 + }, + "end": { + "line": 1, + "column": 6 + }, + "identifierName": "A" + }, + "name": "A" + }, + "typeAnnotation": { + "type": "TSLiteralType", + "start": 9, + "end": 10, + "loc": { + "start": { + "line": 1, + "column": 9 + }, + "end": { + "line": 1, + "column": 10 + } + }, + "literal": { + "type": "NumericLiteral", + "start": 9, + "end": 10, + "loc": { + "start": { + "line": 1, + "column": 9 + }, + "end": { + "line": 1, + "column": 10 + } + }, + "extra": { + "rawValue": 2, + "raw": "2" + }, + "value": 2 + } + } + }, + { + "type": "ExportNamedDeclaration", + "start": 12, + "end": 30, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 18 + } + }, + "exportKind": "type", + "specifiers": [ + { + "type": "ExportSpecifier", + "start": 26, + "end": 27, + "loc": { + "start": { + "line": 2, + "column": 14 + }, + "end": { + "line": 2, + "column": 15 + } + }, + "local": { + "type": "Identifier", + "start": 26, + "end": 27, + "loc": { + "start": { + "line": 2, + "column": 14 + }, + "end": { + "line": 2, + "column": 15 + }, + "identifierName": "A" + }, + "name": "A" + }, + "exported": { + "type": "Identifier", + "start": 26, + "end": 27, + "loc": { + "start": { + "line": 2, + "column": 14 + }, + "end": { + "line": 2, + "column": 15 + }, + "identifierName": "A" + }, + "name": "A" + } + } + ], + "source": null, + "declaration": null + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/typescript/export/nested-same-name/output.json b/packages/babel-parser/test/fixtures/typescript/export/nested-same-name/output.json index df135e3005c0..e687b30cabb8 100644 --- a/packages/babel-parser/test/fixtures/typescript/export/nested-same-name/output.json +++ b/packages/babel-parser/test/fixtures/typescript/export/nested-same-name/output.json @@ -43,6 +43,7 @@ "column": 19 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -130,6 +131,7 @@ "column": 1 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -192,6 +194,7 @@ "column": 23 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { diff --git a/packages/babel-parser/test/fixtures/typescript/function/export-default/output.json b/packages/babel-parser/test/fixtures/typescript/function/export-default/output.json index 9ed0b4a6e22b..42c8c034dd19 100644 --- a/packages/babel-parser/test/fixtures/typescript/function/export-default/output.json +++ b/packages/babel-parser/test/fixtures/typescript/function/export-default/output.json @@ -43,6 +43,7 @@ "column": 42 } }, + "exportKind": "value", "declaration": { "type": "TSDeclareFunction", "start": 15, diff --git a/packages/babel-parser/test/fixtures/typescript/function/overloads/output.json b/packages/babel-parser/test/fixtures/typescript/function/overloads/output.json index 2f66c7db6e15..0ed87c620a55 100644 --- a/packages/babel-parser/test/fixtures/typescript/function/overloads/output.json +++ b/packages/babel-parser/test/fixtures/typescript/function/overloads/output.json @@ -43,6 +43,7 @@ "column": 37 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -173,6 +174,7 @@ "column": 37 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { diff --git a/packages/babel-parser/test/fixtures/typescript/import/export-named-import-require/output.json b/packages/babel-parser/test/fixtures/typescript/import/export-named-import-require/output.json index 4c31f00de348..e69632d570ab 100644 --- a/packages/babel-parser/test/fixtures/typescript/import/export-named-import-require/output.json +++ b/packages/babel-parser/test/fixtures/typescript/import/export-named-import-require/output.json @@ -111,6 +111,7 @@ "column": 13 } }, + "exportKind": "value", "specifiers": [ { "type": "ExportSpecifier", diff --git a/packages/babel-parser/test/fixtures/typescript/interface/export/output.json b/packages/babel-parser/test/fixtures/typescript/interface/export/output.json index 1ad5c8ab4df6..5a5a83277c72 100644 --- a/packages/babel-parser/test/fixtures/typescript/interface/export/output.json +++ b/packages/babel-parser/test/fixtures/typescript/interface/export/output.json @@ -43,6 +43,7 @@ "column": 21 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -108,6 +109,7 @@ "column": 29 } }, + "exportKind": "value", "declaration": { "type": "TSInterfaceDeclaration", "start": 37, diff --git a/packages/babel-parser/test/fixtures/typescript/module-namespace/head-export/output.json b/packages/babel-parser/test/fixtures/typescript/module-namespace/head-export/output.json index 178571a6d6df..d731128cf4b1 100644 --- a/packages/babel-parser/test/fixtures/typescript/module-namespace/head-export/output.json +++ b/packages/babel-parser/test/fixtures/typescript/module-namespace/head-export/output.json @@ -43,6 +43,7 @@ "column": 23 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -140,6 +141,7 @@ "column": 18 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { diff --git a/packages/babel-parser/test/fixtures/typescript/regression/is-default-export/output.json b/packages/babel-parser/test/fixtures/typescript/regression/is-default-export/output.json index 406eee594b58..fa086ca6810d 100644 --- a/packages/babel-parser/test/fixtures/typescript/regression/is-default-export/output.json +++ b/packages/babel-parser/test/fixtures/typescript/regression/is-default-export/output.json @@ -43,6 +43,7 @@ "column": 23 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -107,6 +108,7 @@ "column": 16 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { @@ -157,6 +159,7 @@ "column": 21 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { diff --git a/packages/babel-parser/test/fixtures/typescript/scope/export-declare-function-after/output.json b/packages/babel-parser/test/fixtures/typescript/scope/export-declare-function-after/output.json index c207baa1677a..3532a53a3ffd 100644 --- a/packages/babel-parser/test/fixtures/typescript/scope/export-declare-function-after/output.json +++ b/packages/babel-parser/test/fixtures/typescript/scope/export-declare-function-after/output.json @@ -109,6 +109,7 @@ "column": 15 } }, + "exportKind": "value", "specifiers": [ { "type": "ExportSpecifier", diff --git a/packages/babel-parser/test/fixtures/typescript/scope/export-declare-function-before/output.json b/packages/babel-parser/test/fixtures/typescript/scope/export-declare-function-before/output.json index b7071b10e90f..df5b73f76cf8 100644 --- a/packages/babel-parser/test/fixtures/typescript/scope/export-declare-function-before/output.json +++ b/packages/babel-parser/test/fixtures/typescript/scope/export-declare-function-before/output.json @@ -43,6 +43,7 @@ "column": 15 } }, + "exportKind": "value", "specifiers": [ { "type": "ExportSpecifier", diff --git a/packages/babel-parser/test/fixtures/typescript/scope/export-enum-after/output.json b/packages/babel-parser/test/fixtures/typescript/scope/export-enum-after/output.json index c8738ce00309..4033028297ce 100644 --- a/packages/babel-parser/test/fixtures/typescript/scope/export-enum-after/output.json +++ b/packages/babel-parser/test/fixtures/typescript/scope/export-enum-after/output.json @@ -94,6 +94,7 @@ "column": 26 } }, + "exportKind": "value", "specifiers": [ { "type": "ExportSpecifier", diff --git a/packages/babel-parser/test/fixtures/typescript/scope/export-enum-before/output.json b/packages/babel-parser/test/fixtures/typescript/scope/export-enum-before/output.json index 43ce8b85cb55..40da2edef6d4 100644 --- a/packages/babel-parser/test/fixtures/typescript/scope/export-enum-before/output.json +++ b/packages/babel-parser/test/fixtures/typescript/scope/export-enum-before/output.json @@ -43,6 +43,7 @@ "column": 26 } }, + "exportKind": "value", "specifiers": [ { "type": "ExportSpecifier", diff --git a/packages/babel-parser/test/fixtures/typescript/scope/export-interface-after/output.json b/packages/babel-parser/test/fixtures/typescript/scope/export-interface-after/output.json index 9e575d18d39e..263dec8e48ce 100644 --- a/packages/babel-parser/test/fixtures/typescript/scope/export-interface-after/output.json +++ b/packages/babel-parser/test/fixtures/typescript/scope/export-interface-after/output.json @@ -91,6 +91,7 @@ "column": 13 } }, + "exportKind": "value", "specifiers": [ { "type": "ExportSpecifier", diff --git a/packages/babel-parser/test/fixtures/typescript/scope/export-interface-before/output.json b/packages/babel-parser/test/fixtures/typescript/scope/export-interface-before/output.json index dd48538d82d9..b568f8c09849 100644 --- a/packages/babel-parser/test/fixtures/typescript/scope/export-interface-before/output.json +++ b/packages/babel-parser/test/fixtures/typescript/scope/export-interface-before/output.json @@ -43,6 +43,7 @@ "column": 13 } }, + "exportKind": "value", "specifiers": [ { "type": "ExportSpecifier", diff --git a/packages/babel-parser/test/fixtures/typescript/scope/export-namespace/output.json b/packages/babel-parser/test/fixtures/typescript/scope/export-namespace/output.json index ec2b4c8349b5..301c98de69f7 100644 --- a/packages/babel-parser/test/fixtures/typescript/scope/export-namespace/output.json +++ b/packages/babel-parser/test/fixtures/typescript/scope/export-namespace/output.json @@ -91,6 +91,7 @@ "column": 13 } }, + "exportKind": "value", "specifiers": [ { "type": "ExportSpecifier", diff --git a/packages/babel-parser/test/fixtures/typescript/scope/export-type-after/output.json b/packages/babel-parser/test/fixtures/typescript/scope/export-type-after/output.json index d4259d15a749..3053978d881c 100644 --- a/packages/babel-parser/test/fixtures/typescript/scope/export-type-after/output.json +++ b/packages/babel-parser/test/fixtures/typescript/scope/export-type-after/output.json @@ -90,6 +90,7 @@ "column": 13 } }, + "exportKind": "value", "specifiers": [ { "type": "ExportSpecifier", diff --git a/packages/babel-parser/test/fixtures/typescript/scope/export-type-before/output.json b/packages/babel-parser/test/fixtures/typescript/scope/export-type-before/output.json index 5086f1f05376..7b700a883bdb 100644 --- a/packages/babel-parser/test/fixtures/typescript/scope/export-type-before/output.json +++ b/packages/babel-parser/test/fixtures/typescript/scope/export-type-before/output.json @@ -43,6 +43,7 @@ "column": 13 } }, + "exportKind": "value", "specifiers": [ { "type": "ExportSpecifier", diff --git a/packages/babel-parser/test/fixtures/typescript/scope/function-type-before-declaration/output.json b/packages/babel-parser/test/fixtures/typescript/scope/function-type-before-declaration/output.json index c17c84eca906..d3685c7d0db1 100644 --- a/packages/babel-parser/test/fixtures/typescript/scope/function-type-before-declaration/output.json +++ b/packages/babel-parser/test/fixtures/typescript/scope/function-type-before-declaration/output.json @@ -160,6 +160,7 @@ "column": 13 } }, + "exportKind": "value", "specifiers": [ { "type": "ExportSpecifier", diff --git a/packages/babel-parser/test/fixtures/typescript/scope/module-declaration-var-2/output.json b/packages/babel-parser/test/fixtures/typescript/scope/module-declaration-var-2/output.json index 9bb0caf6808d..e1b72e08c71d 100644 --- a/packages/babel-parser/test/fixtures/typescript/scope/module-declaration-var-2/output.json +++ b/packages/babel-parser/test/fixtures/typescript/scope/module-declaration-var-2/output.json @@ -43,6 +43,7 @@ "column": 1 } }, + "declare": true, "id": { "type": "Identifier", "start": 14, @@ -76,8 +77,7 @@ } }, "body": [] - }, - "declare": true + } }, { "type": "TSModuleDeclaration", @@ -139,6 +139,7 @@ "column": 22 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { diff --git a/packages/babel-parser/test/fixtures/typescript/scope/module-declaration-var/output.json b/packages/babel-parser/test/fixtures/typescript/scope/module-declaration-var/output.json index 77f4b16a6ac7..0de95961df1a 100644 --- a/packages/babel-parser/test/fixtures/typescript/scope/module-declaration-var/output.json +++ b/packages/babel-parser/test/fixtures/typescript/scope/module-declaration-var/output.json @@ -43,6 +43,7 @@ "column": 1 } }, + "declare": true, "id": { "type": "Identifier", "start": 14, @@ -76,8 +77,7 @@ } }, "body": [] - }, - "declare": true + } }, { "type": "TSModuleDeclaration", @@ -142,6 +142,7 @@ "column": 22 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { diff --git a/packages/babel-parser/test/fixtures/typescript/type-alias/export/output.json b/packages/babel-parser/test/fixtures/typescript/type-alias/export/output.json index 829dc8b3afcc..edaea4e5fd66 100644 --- a/packages/babel-parser/test/fixtures/typescript/type-alias/export/output.json +++ b/packages/babel-parser/test/fixtures/typescript/type-alias/export/output.json @@ -43,6 +43,7 @@ "column": 23 } }, + "exportKind": "value", "specifiers": [], "source": null, "declaration": { diff --git a/packages/babel-plugin-transform-typescript/src/index.js b/packages/babel-plugin-transform-typescript/src/index.js index c0a24c3463b7..c6e303c8c5af 100644 --- a/packages/babel-plugin-transform-typescript/src/index.js +++ b/packages/babel-plugin-transform-typescript/src/index.js @@ -234,7 +234,18 @@ export default declare( }, ExportNamedDeclaration(path) { + if (path.node.exportKind === "type") { + path.remove(); + return; + } + // remove export declaration if it's exporting only types + // This logic is needed when exportKind is "value", because + // currently the "type" keyword is optional. + // TODO: + // Also, currently @babel/parser sets exportKind to "value" for + // export interface A {} + // etc. if ( !path.node.source && path.node.specifiers.length > 0 && diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/exports/export-type-from/input.ts b/packages/babel-plugin-transform-typescript/test/fixtures/exports/export-type-from/input.ts new file mode 100644 index 000000000000..d49327a766e3 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/exports/export-type-from/input.ts @@ -0,0 +1,2 @@ +export type { A } from "./mod"; +; diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/exports/export-type-from/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/exports/export-type-from/output.mjs new file mode 100644 index 000000000000..092bc2b04126 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/exports/export-type-from/output.mjs @@ -0,0 +1 @@ +; diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/exports/export-type/input.ts b/packages/babel-plugin-transform-typescript/test/fixtures/exports/export-type/input.ts new file mode 100644 index 000000000000..4a7f4367fecb --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/exports/export-type/input.ts @@ -0,0 +1,4 @@ +type A = 2; + +export type { A }; +; diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/exports/export-type/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/exports/export-type/output.mjs new file mode 100644 index 000000000000..092bc2b04126 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/exports/export-type/output.mjs @@ -0,0 +1 @@ +;