UNPKG

@swc-node/register

Version:
110 lines 4.34 kB
"use strict"; 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