UNPKG

@bleed-believer/path-alias

Version:
55 lines (54 loc) 1.82 kB
import { dirname, resolve } from "path"; const cache = new Map(); export function tsConfigToSwcOptions(tsConfigResult) { const cached = cache.get(tsConfigResult); if (cached) { return structuredClone(cached); } const options = {}; const { path, config } = tsConfigResult; const { emitDecoratorMetadata, experimentalDecorators, removeComments, module, target, sourceMap, sourceRoot, jsx, inlineSourceMap, baseUrl, paths } = config.compilerOptions ?? {}; options.cwd = dirname(path); options.sourceRoot = sourceRoot; options.sourceMaps = inlineSourceMap ? 'inline' : sourceMap; // options.exclude = config.exclude // ?.map(x => join(options.cwd!, x)) // ?.map(x => micromatch.makeRe(x).source); options.jsc = { target: target?.toLowerCase() ?? 'es2022', parser: { syntax: 'typescript', decorators: experimentalDecorators, tsx: !!jsx }, transform: { decoratorMetadata: emitDecoratorMetadata }, preserveAllComments: !removeComments, baseUrl: resolve(dirname(path), baseUrl ?? '.'), paths }; switch(module?.toLowerCase()){ case 'umd': case 'none': case 'system': case 'commonjs': { options.isModule = false; break; } default: { const type = module === 'nodenext' ? 'nodenext' : 'es6'; options.isModule = true; options.module = { type, strict: true, strictMode: true, resolveFully: true }; } } cache.set(tsConfigResult, structuredClone(options)); return options; }