From e1ccd759736e68f3e11bb47eeaff60fde8c94838 Mon Sep 17 00:00:00 2001 From: Manuel Date: Tue, 11 Feb 2025 18:56:53 +0100 Subject: [PATCH] fix: support `TSImportType` --- .changeset/fuzzy-keys-provide.md | 5 +++++ src/handlers.js | 10 ++++++++++ test/samples/ts-import-type/expected.ts | 2 ++ test/samples/ts-import-type/expected.ts.map | 11 +++++++++++ test/samples/ts-import-type/input.ts | 2 ++ 5 files changed, 30 insertions(+) create mode 100644 .changeset/fuzzy-keys-provide.md create mode 100644 test/samples/ts-import-type/expected.ts create mode 100644 test/samples/ts-import-type/expected.ts.map create mode 100644 test/samples/ts-import-type/input.ts diff --git a/.changeset/fuzzy-keys-provide.md b/.changeset/fuzzy-keys-provide.md new file mode 100644 index 0000000..35ade1c --- /dev/null +++ b/.changeset/fuzzy-keys-provide.md @@ -0,0 +1,5 @@ +--- +'esrap': patch +--- + +fix: support `TSImportType` diff --git a/src/handlers.js b/src/handlers.js index 379f4c8..31fc82e 100644 --- a/src/handlers.js +++ b/src/handlers.js @@ -605,6 +605,16 @@ function handle_type_annotation(node, state) { handle_type_annotation(node.indexType, state); state.commands.push(']'); break; + case 'TSImportType': + state.commands.push('import('); + handle(node.argument, state); + state.commands.push(')'); + + if (node.qualifier) { + state.commands.push('.'); + handle(node.qualifier, state); + } + break; default: throw new Error(`Not implemented type annotation ${node.type}`); } diff --git a/test/samples/ts-import-type/expected.ts b/test/samples/ts-import-type/expected.ts new file mode 100644 index 0000000..486cfe8 --- /dev/null +++ b/test/samples/ts-import-type/expected.ts @@ -0,0 +1,2 @@ +const foo: import('foo/bar') = 123; +const bar: import('foo/bar').baz = 234; \ No newline at end of file diff --git a/test/samples/ts-import-type/expected.ts.map b/test/samples/ts-import-type/expected.ts.map new file mode 100644 index 0000000..6159fb2 --- /dev/null +++ b/test/samples/ts-import-type/expected.ts.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "names": [], + "sources": [ + "input.js" + ], + "sourcesContent": [ + "const foo: import('foo/bar') = 123;\nconst bar: import('foo/bar').baz = 234;\n" + ], + "mappings": "MAAM,GAAsB,SAAV,SAAS,IAAI,GAAG;MAC5B,GAA0B,SAAd,SAAS,EAAE,GAAG,GAAG,GAAG" +} \ No newline at end of file diff --git a/test/samples/ts-import-type/input.ts b/test/samples/ts-import-type/input.ts new file mode 100644 index 0000000..54fdd12 --- /dev/null +++ b/test/samples/ts-import-type/input.ts @@ -0,0 +1,2 @@ +const foo: import('foo/bar') = 123; +const bar: import('foo/bar').baz = 234;