cosmiconfig-typescript-swc-loader
Version:
Fast TypeScript config file handler for cosmiconfig using SWC
27 lines (26 loc) • 934 B
JavaScript
import { transformSync } from "@swc/core";
import vm from "vm";
export function TypeScriptSWCLoader(options) {
return (_path, content) => {
const script = transformSync(content, {
// TODO: migrate to `ts-config.json` based config (#3)
module: {
type: "commonjs",
},
jsc: {
target: "es3",
parser: {
syntax: "typescript",
},
},
...options,
});
const vmScript = new vm.Script(script.code);
const sandbox = { module: { exports: {} }, exports: {} };
vmScript.runInNewContext(sandbox, options);
return Object.keys(sandbox.module.exports).length > 0
? sandbox.module.exports
: // eslint-disable-next-line @typescript-eslint/no-explicit-any
sandbox.exports.default || sandbox.exports;
};
}