-
Notifications
You must be signed in to change notification settings - Fork 409
Closed
Labels
Description
What problem does this feature solve?
I'd like to build a module which uses stage3 decorator. In modern.js app + rspack, I can easily configure swc to do so:
export default defineConfig<'rspack'>({
plugins: [
appTools({
bundler: 'experimental-rspack',
}),
],
tools: {
swc: {
jsc: {
transform: {
decoratorVersion: '2022-03',
},
},
},
},
});However, it seems modern.js module is using esbuild and there is no way to explicitly configure using swc or enable swc for this decorator transform.
Example file you can test with:
function loggedMethod<This, Args extends any[], Return>(
target: (this: This, ...args: Args) => Return,
context: ClassMethodDecoratorContext<
This,
(this: This, ...args: Args) => Return
>,
) {
const methodName = String(context.name);
function replacementMethod(this: This, ...args: Args): Return {
console.log(`LOG: Entering method '${methodName}'.`);
const result = target.call(this, ...args);
console.log(`LOG: Exiting method '${methodName}'.`);
return result;
}
return replacementMethod;
}
export class Person {
name: string;
constructor(name: string) {
this.name = name;
}
@loggedMethod
greet() {
console.log(`Hello, my name is ${this.name}.`);
}
}What does the proposed API look like?
Maybe use SWC when "experimentalDecorator" of tsconfig is true?
Related: https://modernjs.dev/module-tools/en/guide/advance/in-depth-about-build.html#use-swc
Reactions are currently unavailable