@swc-node/register
Version:
SWC node register
110 lines • 4.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.register = void 0;
const tslib_1 = require("tslib");
const os_1 = require("os");
const path_1 = require("path");
const core_1 = require("@swc-node/core");
const sourcemap_support_1 = require("@swc-node/sourcemap-support");
const pirates_1 = require("pirates");
const ts = tslib_1.__importStar(require("typescript"));
const read_default_tsconfig_1 = require("./read-default-tsconfig");
const DEFAULT_EXTENSIONS = ['.js', '.jsx', '.es6', '.es', '.mjs', '.ts', '.tsx'];
const PLATFORM = os_1.platform();
function toTsTarget(target) {
switch (target) {
case ts.ScriptTarget.ES3:
return 'es3';
case ts.ScriptTarget.ES5:
return 'es5';
case ts.ScriptTarget.ES2015:
return 'es2015';
case ts.ScriptTarget.ES2016:
return 'es2016';
case ts.ScriptTarget.ES2017:
return 'es2017';
case ts.ScriptTarget.ES2018:
return 'es2018';
case ts.ScriptTarget.ES2019:
case ts.ScriptTarget.ES2020:
case ts.ScriptTarget.ESNext:
case ts.ScriptTarget.Latest:
return 'es2019';
case ts.ScriptTarget.JSON:
return 'es5';
}
}
function toModule(moduleKind) {
switch (moduleKind) {
case ts.ModuleKind.CommonJS:
return 'commonjs';
case ts.ModuleKind.UMD:
return 'umd';
case ts.ModuleKind.AMD:
return 'amd';
case ts.ModuleKind.ES2015:
case ts.ModuleKind.ES2020:
case ts.ModuleKind.ESNext:
case ts.ModuleKind.None:
return 'es6';
case ts.ModuleKind.System:
throw new TypeError('Do not support system kind module');
}
}
function compile(sourcecode, filename, options) {
var _a, _b, _c, _d, _e;
if (filename.endsWith('.d.ts')) {
return '';
}
if (options.files && options.files.length) {
if (PLATFORM === 'win32' &&
options.files.every((file) => filename !== path_1.resolve(process.cwd(), file))) {
return sourcecode;
}
if (PLATFORM !== 'win32' && options.files.every((file) => !filename.endsWith(file))) {
return sourcecode;
}
}
if (options && typeof options.fallbackToTs === 'function' && options.fallbackToTs(filename)) {
delete options.fallbackToTs;
const { outputText, sourceMapText } = ts.transpileModule(sourcecode, {
fileName: filename,
compilerOptions: options,
});
if (sourceMapText) {
sourcemap_support_1.SourcemapMap.set(filename, sourceMapText);
}
return outputText;
}
else {
const { code, map } = core_1.transformSync(sourcecode, filename, {
target: toTsTarget((_a = options.target) !== null && _a !== void 0 ? _a : ts.ScriptTarget.ES2018),
module: toModule((_b = options.module) !== null && _b !== void 0 ? _b : ts.ModuleKind.ES2015),
sourcemap: options.sourceMap !== false,
jsx: filename.endsWith('.tsx') || filename.endsWith('.jsx') || Boolean(options.jsx),
react: options.jsxFactory || options.jsxFragmentFactory
? {
pragma: options.jsxFactory,
pragmaFrag: options.jsxFragmentFactory,
}
: undefined,
experimentalDecorators: (_c = options.experimentalDecorators) !== null && _c !== void 0 ? _c : false,
emitDecoratorMetadata: (_d = options.emitDecoratorMetadata) !== null && _d !== void 0 ? _d : false,
dynamicImport: options.module ? options.module >= ts.ModuleKind.ES2020 : true,
esModuleInterop: (_e = options.esModuleInterop) !== null && _e !== void 0 ? _e : false,
});
// in case of map is undefined
if (map) {
sourcemap_support_1.SourcemapMap.set(filename, map);
}
return code;
}
}
function register(options = read_default_tsconfig_1.readDefaultTsConfig()) {
sourcemap_support_1.installSourceMapSupport();
pirates_1.addHook((code, filename) => compile(code, filename, options), {
exts: DEFAULT_EXTENSIONS,
});
}
exports.register = register;
//# sourceMappingURL=register.js.map