@codechecks/client
Version:
Open source platform for code review automation
62 lines • 2.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = require("fs");
const lodash_1 = require("lodash");
const JSON5 = require("json5");
const moduleExecutor_1 = require("./moduleExecutor");
const logger_1 = require("../logger");
const errors_1 = require("../utils/errors");
async function executeTs(filePath, options) {
const customModuleHandler = (module, filename) => {
const compiled = transpileTypescriptModule(filename);
module._compile(compiled, filename);
};
require.extensions[".ts"] = customModuleHandler;
require.extensions[".tsx"] = customModuleHandler;
let codeChecksModule;
try {
codeChecksModule = require(filePath);
}
catch (e) {
logger_1.logger.error("Error while executing CodeChecks file!");
throw e;
}
await moduleExecutor_1.moduleExecutor(codeChecksModule, options);
}
exports.executeTs = executeTs;
function transpileTypescriptModule(path) {
const contents = fs_1.readFileSync(path, "utf8");
const isInsideNodeModules = path.indexOf("node_modules") !== -1;
const hasTypescript = !!require.resolve("typescript");
let source;
if (isInsideNodeModules) {
source = contents;
}
else {
if (!hasTypescript) {
throw errors_1.crash("File written in TS but typescript package is not installed.");
}
source = transpileTypescript(contents);
}
if (!source) {
throw errors_1.crash(`Couldnt parse ${path}`);
}
return source;
}
exports.transpileTypescriptModule = transpileTypescriptModule;
function transpileTypescript(path) {
const ts = require("typescript");
let compilerOptions;
if (fs_1.existsSync("tsconfig.json")) {
compilerOptions = JSON5.parse(fs_1.readFileSync("tsconfig.json", "utf8"));
}
else {
compilerOptions = ts.getDefaultCompilerOptions();
}
if (lodash_1.get(compilerOptions, "compilerOptions.module")) {
compilerOptions.compilerOptions.module = "commonjs";
}
let result = ts.transpileModule(path, compilerOptions);
return result.outputText;
}
//# sourceMappingURL=tsExecutor.js.map