diff --git a/.changeset/beige-cheetahs-applaud.md b/.changeset/beige-cheetahs-applaud.md new file mode 100644 index 000000000000..3a6badd61f2c --- /dev/null +++ b/.changeset/beige-cheetahs-applaud.md @@ -0,0 +1,6 @@ +--- +swc_core: patch +swc_ecma_transforms_proposal: patch +--- + +fix(es/transforms): rewrite class references in non-static members diff --git a/crates/swc/tests/fixture/issues-11xxx/11744/input/.swcrc b/crates/swc/tests/fixture/issues-11xxx/11744/input/.swcrc new file mode 100644 index 000000000000..bb0dd061faa2 --- /dev/null +++ b/crates/swc/tests/fixture/issues-11xxx/11744/input/.swcrc @@ -0,0 +1,19 @@ +{ + "jsc": { + "parser": { + "syntax": "ecmascript", + "decorators": true + }, + "transform": { + "decoratorVersion": "2022-03", + "legacyDecorator": false + }, + "target": "es2022", + "loose": false, + "minify": { + "compress": false + } + }, + "isModule": true, + "minify": false +} diff --git a/crates/swc/tests/fixture/issues-11xxx/11744/input/index.js b/crates/swc/tests/fixture/issues-11xxx/11744/input/index.js new file mode 100644 index 000000000000..243bd17d31f2 --- /dev/null +++ b/crates/swc/tests/fixture/issues-11xxx/11744/input/index.js @@ -0,0 +1,13 @@ +function Component(target) { + return class subTarget extends target { }; +} + +@Component +class ScrollView { + static scrollInterval = 100; + autoScroll() { + console.log(ScrollView.scrollInterval) + } +} + +new ScrollView().autoScroll(); \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-11xxx/11744/output/index.js b/crates/swc/tests/fixture/issues-11xxx/11744/output/index.js new file mode 100644 index 000000000000..35dd763e54e5 --- /dev/null +++ b/crates/swc/tests/fixture/issues-11xxx/11744/output/index.js @@ -0,0 +1,25 @@ +import { _ as _apply_decs_2203_r } from "@swc/helpers/_/_apply_decs_2203_r"; +import { _ as _identity } from "@swc/helpers/_/_identity"; +var _initClass; +function Component(target) { + return class subTarget extends target { + }; +} +let _ScrollView; +new class extends _identity { + constructor(){ + super(_ScrollView), _initClass(); + } + static [class ScrollView { + static{ + ({ c: [_ScrollView, _initClass] } = _apply_decs_2203_r(this, [], [ + Component + ])); + } + autoScroll() { + console.log(_ScrollView.scrollInterval); + } + }]; + scrollInterval = 100; +}(); +new _ScrollView().autoScroll(); diff --git a/crates/swc_ecma_transforms_proposal/src/decorator_impl.rs b/crates/swc_ecma_transforms_proposal/src/decorator_impl.rs index 98e4186d6589..f6e4c068c475 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorator_impl.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorator_impl.rs @@ -1756,10 +1756,10 @@ impl DecoratorPass { | ClassMember::AutoAccessor(..) => { replace_ident(m, c.ident.to_id(), &new_class_name); } - ClassMember::Method(method) if method.is_static => { + ClassMember::Method(method) => { replace_ident(method, c.ident.to_id(), &new_class_name); } - ClassMember::PrivateMethod(method) if method.is_static => { + ClassMember::PrivateMethod(method) => { replace_ident(method, c.ident.to_id(), &new_class_name); }