From 4c2f8d9337c2c45da345e536c1f44157d64a14bd Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Thu, 10 Jan 2019 13:57:00 -0500 Subject: [PATCH] @babel/generator: Add emit and builder for TSImportType (#9309) --- .../babel-generator/src/generators/typescript.js | 15 +++++++++++++++ .../typescript/types-import-type/input.js | 3 +++ .../typescript/types-import-type/output.js | 3 +++ .../babel-types/src/definitions/typescript.js | 12 +++++++++++- 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 packages/babel-generator/test/fixtures/typescript/types-import-type/input.js create mode 100644 packages/babel-generator/test/fixtures/typescript/types-import-type/output.js diff --git a/packages/babel-generator/src/generators/typescript.js b/packages/babel-generator/src/generators/typescript.js index 33489ebbb2..83c279c1f1 100644 --- a/packages/babel-generator/src/generators/typescript.js +++ b/packages/babel-generator/src/generators/typescript.js @@ -476,6 +476,21 @@ export function TSModuleBlock(node) { this.tsPrintBraced(node.body, node); } +export function TSImportType(node) { + const { argument, qualifier, typeParameters } = node; + this.word("import"); + this.token("("); + this.print(argument, node); + this.token(")"); + if (qualifier) { + this.token("."); + this.print(qualifier, node); + } + if (typeParameters) { + this.print(typeParameters, node); + } +} + export function TSImportEqualsDeclaration(node) { const { isExport, id, moduleReference } = node; if (isExport) { diff --git a/packages/babel-generator/test/fixtures/typescript/types-import-type/input.js b/packages/babel-generator/test/fixtures/typescript/types-import-type/input.js new file mode 100644 index 0000000000..848a461d3c --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/types-import-type/input.js @@ -0,0 +1,3 @@ +let x: typeof import('./x'); +let Y: import('./y').Y; +let z: import("/z").foo.bar; \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/typescript/types-import-type/output.js b/packages/babel-generator/test/fixtures/typescript/types-import-type/output.js new file mode 100644 index 0000000000..848a461d3c --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/types-import-type/output.js @@ -0,0 +1,3 @@ +let x: typeof import('./x'); +let Y: import('./y').Y; +let z: import("/z").foo.bar; \ No newline at end of file diff --git a/packages/babel-types/src/definitions/typescript.js b/packages/babel-types/src/definitions/typescript.js index 2971853575..4f321adb3b 100644 --- a/packages/babel-types/src/definitions/typescript.js +++ b/packages/babel-types/src/definitions/typescript.js @@ -185,7 +185,7 @@ defineType("TSTypeQuery", { aliases: ["TSType"], visitor: ["exprName"], fields: { - exprName: validateType("TSEntityName"), + exprName: validateType(["TSEntityName", "TSImportType"]), }, }); @@ -405,6 +405,16 @@ defineType("TSModuleBlock", { }, }); +defineType("TSImportType", { + aliases: ["TSType"], + visitor: ["argument", "qualifier", "typeParameters"], + fields: { + argument: validateType("StringLiteral"), + qualifier: validateOptionalType("TSEntityName"), + typeParameters: validateOptionalType("TSTypeParameterInstantiation"), + }, +}); + defineType("TSImportEqualsDeclaration", { aliases: ["Statement"], visitor: ["id", "moduleReference"],