From 20f9df023aebc1b315f8a849f66d6522248269be Mon Sep 17 00:00:00 2001 From: Yifei Date: Wed, 19 Jun 2024 14:08:24 +0800 Subject: [PATCH] feat: enable stage3 decorator for swc based on typescript version --- .../solutions/module-tools/src/builder/feature/index.ts | 8 ++++++-- .../solutions/module-tools/src/builder/feature/swc.ts | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/solutions/module-tools/src/builder/feature/index.ts b/packages/solutions/module-tools/src/builder/feature/index.ts index b8988db22869..86be5e4c89db 100644 --- a/packages/solutions/module-tools/src/builder/feature/index.ts +++ b/packages/solutions/module-tools/src/builder/feature/index.ts @@ -1,5 +1,5 @@ import { HookList, Context } from '../../types'; -import { getProjectTsconfig } from '../../utils/dts'; +import { detectTSVersion, getProjectTsconfig } from '../../utils/dts'; import { formatCjs } from './format-cjs'; import { css } from './style'; import { minify } from './terser'; @@ -29,6 +29,10 @@ export async function getInternalList(context: Context): Promise { const emitDecoratorMetadata = userTsconfig?.compilerOptions?.emitDecoratorMetadata ?? false; + const tsVersion = await detectTSVersion( + context.api.useAppContext().appDirectory, + ); + const { transformImport, transformLodash, externalHelpers, format, target } = context.config; @@ -42,7 +46,7 @@ export async function getInternalList(context: Context): Promise { : format === 'umd' || target === 'es5'; if (enbaleSwcTransform) { const { swcTransform } = await import('./swc'); - internal.push(swcTransform(userTsconfig)); + internal.push(swcTransform(userTsconfig, tsVersion)); } if (enableSwcRenderChunk) { diff --git a/packages/solutions/module-tools/src/builder/feature/swc.ts b/packages/solutions/module-tools/src/builder/feature/swc.ts index 1b0e4e25fb2f..588126a0715c 100644 --- a/packages/solutions/module-tools/src/builder/feature/swc.ts +++ b/packages/solutions/module-tools/src/builder/feature/swc.ts @@ -40,7 +40,7 @@ const getSwcTarget = (target: string): JscTarget => { return 'es2022'; }; -export const swcTransform = (userTsconfig: ITsconfig) => ({ +export const swcTransform = (userTsconfig: ITsconfig, tsVersion: number) => ({ name, apply(compiler: ICompiler) { const tsUseDefineForClassFields = @@ -102,6 +102,10 @@ export const swcTransform = (userTsconfig: ITsconfig) => ({ useDefineForClassFields, legacyDecorator: emitDecoratorMetadata ? true : undefined, decoratorMetadata: emitDecoratorMetadata ? true : undefined, + decoratorVersion: + !emitDecoratorMetadata && tsVersion >= 5 + ? '2022-03' + : undefined, }, externalHelpers, target: getSwcTarget(target),