From b5ca15f52b21f6804b82ab96a6a0fcaeef24bbac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 25 Nov 2022 19:34:07 +0900 Subject: [PATCH 1/6] Add a test --- .../tests/ts-resolver/stc/2/input.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/input.ts diff --git a/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/input.ts b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/input.ts new file mode 100644 index 000000000000..a3dbaf484a8a --- /dev/null +++ b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/input.ts @@ -0,0 +1,11 @@ +type Movable = { + move(distance: number): void; +}; + +const car = { + start() { }, + move(d) { + // d should be number + }, + stop() { } +} satisfies Movable & Record; From 4bbe80f48b3f7a10e2509a9a1acb55f34b57fdcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 25 Nov 2022 19:34:14 +0900 Subject: [PATCH 2/6] Handle `TsSatisfiesExpr` --- crates/swc_ecma_transforms_base/src/resolver/mod.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crates/swc_ecma_transforms_base/src/resolver/mod.rs b/crates/swc_ecma_transforms_base/src/resolver/mod.rs index c9fbbbca5825..ce58b1d34d44 100644 --- a/crates/swc_ecma_transforms_base/src/resolver/mod.rs +++ b/crates/swc_ecma_transforms_base/src/resolver/mod.rs @@ -1133,6 +1133,14 @@ impl<'a> VisitMut for Resolver<'a> { n.expr.visit_mut_with(self); } + fn visit_mut_ts_satisfies_expr(&mut self, n: &mut TsSatisfiesExpr) { + if self.config.handle_types { + n.type_ann.visit_mut_with(self); + } + + n.expr.visit_mut_with(self); + } + fn visit_mut_ts_call_signature_decl(&mut self, n: &mut TsCallSignatureDecl) { if !self.config.handle_types { return; From ff76db1518d06b7a1ceb83c4737511981fb448f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 25 Nov 2022 19:38:12 +0900 Subject: [PATCH 3/6] Add a test --- .../tests/ts-resolver/stc/3/input.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/input.ts diff --git a/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/input.ts b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/input.ts new file mode 100644 index 000000000000..3c286bc680cf --- /dev/null +++ b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/input.ts @@ -0,0 +1,11 @@ +type Movable = { + move(distance: number): void; +}; + +const car = { + start() { }, + move(d) { + // d should be number + }, + stop() { } +} as Movable & Record; From fcc5bd6f4045c33284e86e5498f38ec87b3f5130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 25 Nov 2022 19:41:31 +0900 Subject: [PATCH 4/6] fix --- crates/swc_ecma_visit/src/lib.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/crates/swc_ecma_visit/src/lib.rs b/crates/swc_ecma_visit/src/lib.rs index 6d4d76a85661..6124c33f6030 100644 --- a/crates/swc_ecma_visit/src/lib.rs +++ b/crates/swc_ecma_visit/src/lib.rs @@ -1816,6 +1816,18 @@ define!({ pub type_args: Box, } + #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] + pub struct TsSatisfiesExpr { + pub span: Span, + #[serde(rename = "expression")] + pub expr: Box, + #[serde(rename = "typeAnnotation")] + pub struct TsSatisfiesExpr { + pub span: Span, + pub expr: Box, + pub type_ann: Box, + } + pub struct ReservedUnused { pub span: Span, pub body: Option>, From 64f06948679771f526faa13d2b9a7aa54c406ad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 25 Nov 2022 19:41:47 +0900 Subject: [PATCH 5/6] Update test refs --- .../tests/ts-resolver/stc/2/output.ts | 8 ++++++++ .../tests/ts-resolver/stc/3/output.ts | 8 ++++++++ 2 files changed, 16 insertions(+) create mode 100644 crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/output.ts create mode 100644 crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/output.ts diff --git a/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/output.ts b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/output.ts new file mode 100644 index 000000000000..116681a13d8b --- /dev/null +++ b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/output.ts @@ -0,0 +1,8 @@ +type Movable__1 = { + move__0(distance: number): void; +}; +const car__1 = { + start () {}, + move (d__3) {}, + stop () {} +} satisfies Movable__1 & Record; diff --git a/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/output.ts b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/output.ts new file mode 100644 index 000000000000..9b84927bf215 --- /dev/null +++ b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/output.ts @@ -0,0 +1,8 @@ +type Movable__1 = { + move__0(distance: number): void; +}; +const car__1 = { + start () {}, + move (d__3) {}, + stop () {} +} as Movable__1 & Record; From 9e741eeb27e3efcdfb8cb2e0e11e93930a0faa8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 25 Nov 2022 19:42:36 +0900 Subject: [PATCH 6/6] fix --- crates/swc_ecma_visit/src/lib.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/crates/swc_ecma_visit/src/lib.rs b/crates/swc_ecma_visit/src/lib.rs index 6124c33f6030..ddde6e709ade 100644 --- a/crates/swc_ecma_visit/src/lib.rs +++ b/crates/swc_ecma_visit/src/lib.rs @@ -1816,12 +1816,6 @@ define!({ pub type_args: Box, } - #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] - pub struct TsSatisfiesExpr { - pub span: Span, - #[serde(rename = "expression")] - pub expr: Box, - #[serde(rename = "typeAnnotation")] pub struct TsSatisfiesExpr { pub span: Span, pub expr: Box,