diff --git a/.changeset/tall-rocks-jam.md b/.changeset/tall-rocks-jam.md new file mode 100644 index 000000000000..249da848d7b3 --- /dev/null +++ b/.changeset/tall-rocks-jam.md @@ -0,0 +1,6 @@ +--- +swc_core: patch +swc_ecma_transforms_module: patch +--- + +fix(es/modules): Allow TypeScript nodes for `Rewriter` diff --git a/crates/swc/tests/fixture/issues-9xxx/9592/input/.swcrc b/crates/swc/tests/fixture/issues-9xxx/9592/input/.swcrc new file mode 100644 index 000000000000..01c263df3a04 --- /dev/null +++ b/crates/swc/tests/fixture/issues-9xxx/9592/input/.swcrc @@ -0,0 +1,36 @@ +{ + "$schema": "https://swc.rs/schema.json", + "jsc": { + "parser": { + "syntax": "typescript", + "decorators": true, + "dynamicImport": true, + "dts": true, + "tsx": false + }, + "target": "es5", + "baseUrl": "./", + "preserveAllComments": false, + "experimental": { + "emitIsolatedDts": true + }, + "paths": { + "@lib/*": [ + "src/*" + ], + "@tests/*": [ + "tests/*" + ] + }, + "loose": false + }, + "module": { + "type": "commonjs", + "strict": true, + "strictMode": true, + "lazy": false, + "noInterop": false + }, + "minify": false, + "isModule": true +} \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-9xxx/9592/input/1.ts b/crates/swc/tests/fixture/issues-9xxx/9592/input/1.ts new file mode 100644 index 000000000000..36c35bdd54ce --- /dev/null +++ b/crates/swc/tests/fixture/issues-9xxx/9592/input/1.ts @@ -0,0 +1,10 @@ +export type SafeResult = { data: T; error: undefined } | { data: undefined; error: any }; + +export const safe = (fn: () => T): SafeResult => { + try { + const data = fn(); + return { data, error: undefined }; + } catch (error) { + return { data: undefined, error }; + } +}; \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-9xxx/9592/output/1.d.ts b/crates/swc/tests/fixture/issues-9xxx/9592/output/1.d.ts new file mode 100644 index 000000000000..db4164f78cc9 --- /dev/null +++ b/crates/swc/tests/fixture/issues-9xxx/9592/output/1.d.ts @@ -0,0 +1,8 @@ +export type SafeResult = { + data: T; + error: undefined; +} | { + data: undefined; + error: any; +}; +export declare const safe: (fn: () => T) => SafeResult; diff --git a/crates/swc/tests/fixture/issues-9xxx/9592/output/1.ts b/crates/swc/tests/fixture/issues-9xxx/9592/output/1.ts new file mode 100644 index 000000000000..2b22bb8718ce --- /dev/null +++ b/crates/swc/tests/fixture/issues-9xxx/9592/output/1.ts @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "safe", { + enumerable: true, + get: function() { + return safe; + } +}); +var safe = function(fn) { + try { + var data = fn(); + return { + data: data, + error: undefined + }; + } catch (error) { + return { + data: undefined, + error: error + }; + } +}; diff --git a/crates/swc_ecma_transforms_module/src/rewriter.rs b/crates/swc_ecma_transforms_module/src/rewriter.rs index ff32e2f68c8e..1bcf96502d4e 100644 --- a/crates/swc_ecma_transforms_module/src/rewriter.rs +++ b/crates/swc_ecma_transforms_module/src/rewriter.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use anyhow::Context; use swc_common::FileName; use swc_ecma_ast::*; -use swc_ecma_visit::{as_folder, noop_visit_mut_type, Fold, VisitMut, VisitMutWith}; +use swc_ecma_visit::{as_folder, Fold, VisitMut, VisitMutWith}; use crate::path::ImportResolver; @@ -18,8 +18,6 @@ struct Rewriter { } impl VisitMut for Rewriter { - noop_visit_mut_type!(fail); - fn visit_mut_call_expr(&mut self, e: &mut CallExpr) { e.visit_mut_children_with(self);