fes.js/packages/plugin-swc/src/swcOptions.ts
2025-09-05 22:40:22 +08:00

44 lines
1.4 KiB
TypeScript

import { createRequire } from 'node:module';
import { deepmerge } from '@fesjs/utils';
const esmRequire = createRequire(import.meta.url);
const Supported = ['chrome', 'opera', 'edge', 'firefox', 'safari', 'ie', 'ios', 'android', 'node', 'electron'];
export function buildSwcOptions(targets, config, isJsx, isTs, minify = false) {
if (config.swc?.loader?.cjsPkg) {
delete config.swc.loader.cjsPkg;
}
return deepmerge(
{
// sync: true,
env: {
targets: Object.keys(targets)
.filter(key => Supported.includes(key))
.reduce((memo, key) => {
memo[key] = targets[key];
return memo;
}, {}),
mode: 'usage',
coreJs: esmRequire('core-js/package.json').version,
},
jsc: {
parser: {
syntax: isTs ? 'typescript' : 'ecmascript',
jsx: isTs ? undefined : isJsx,
tsx: isTs ? isJsx : undefined,
},
experimental: isJsx
? {
plugins: [['swc-plugin-vue-jsx', {}]],
}
: undefined,
},
isModule: 'unknown',
minify: minify ? {} : false,
},
config.swc?.loader || {},
);
}