@selfage/cli
Version:
Basic CLI to buid, run and format TypeScript code.
45 lines • 6.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.compile = compile;
exports.readCompilerOptions = readCompilerOptions;
const fs = require("fs");
const path = require("path");
const resolve = require("resolve");
const io_helper_1 = require("../io_helper");
const child_process_1 = require("child_process");
async function compile(entryFile, tsconfigFile = "./tsconfig.json", extraFiles = new Array()) {
let compilerOptions = await readCompilerOptions(tsconfigFile);
let incremental = false;
let args = new Array();
for (let propertyName of Object.keys(compilerOptions)) {
args.push(`--${propertyName}`, `${compilerOptions[propertyName]}`);
if (propertyName === "incremental") {
incremental = true;
}
}
let entryModulePath = (0, io_helper_1.stripFileExtension)(entryFile);
if (incremental) {
args.push("--tsBuildInfoFile", `${entryModulePath}.tsbuildinfo`);
}
let entryFileNormalized = entryModulePath + ".ts";
let extraFilesNormalized = extraFiles.map((file) => (0, io_helper_1.stripFileExtension)(file) + ".ts");
(0, child_process_1.execSync)(`npx tsc ${args.join(" ")} ${extraFilesNormalized.join(" ")} ${entryFileNormalized}`, {
stdio: 'inherit',
windowsHide: true,
});
}
async function readCompilerOptions(tsconfigFile) {
let tsconfig = JSON.parse((await fs.promises.readFile(tsconfigFile)).toString());
let compilerOptions = tsconfig.compilerOptions;
if (tsconfig.extends) {
let baseDir = path.dirname(tsconfigFile);
let baseTsconfigFile = resolve.sync(tsconfig.extends, {
basedir: baseDir,
extensions: [".json"],
});
let baseCompilerOptions = await readCompilerOptions(baseTsconfigFile);
compilerOptions = { ...baseCompilerOptions, ...compilerOptions };
}
return compilerOptions;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLDBCQWdDQztBQUVELGtEQWVDO0FBdkRELHlCQUEwQjtBQUMxQiw2QkFBOEI7QUFDOUIsbUNBQW9DO0FBQ3BDLDRDQUFrRDtBQUNsRCxpREFBeUM7QUFFbEMsS0FBSyxVQUFVLE9BQU8sQ0FDM0IsU0FBaUIsRUFDakIsWUFBWSxHQUFHLGlCQUFpQixFQUNoQyxhQUFhLElBQUksS0FBSyxFQUFVO0lBRWhDLElBQUksZUFBZSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUQsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLElBQUksSUFBSSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFDL0IsS0FBSyxJQUFJLFlBQVksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFlBQVksRUFBRSxFQUFFLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRSxJQUFJLFlBQVksS0FBSyxhQUFhLEVBQUUsQ0FBQztZQUNuQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxlQUFlLEdBQUcsSUFBQSw4QkFBa0IsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUNwRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxlQUFlLGNBQWMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxJQUFJLG1CQUFtQixHQUFHLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDbEQsSUFBSSxvQkFBb0IsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUN2QyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBQSw4QkFBa0IsRUFBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQzNDLENBQUM7SUFFRixJQUFBLHdCQUFRLEVBQ04sV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FDcEQsR0FBRyxDQUNKLElBQUksbUJBQW1CLEVBQUUsRUFDMUI7UUFDRSxLQUFLLEVBQUUsU0FBUztRQUNoQixXQUFXLEVBQUUsSUFBSTtLQUNsQixDQUNGLENBQUM7QUFDSixDQUFDO0FBRU0sS0FBSyxVQUFVLG1CQUFtQixDQUFDLFlBQW9CO0lBQzVELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQ3ZCLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUN0RCxDQUFDO0lBQ0YsSUFBSSxlQUFlLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztJQUMvQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pDLElBQUksZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ3BELE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQztTQUN0QixDQUFDLENBQUM7UUFDSCxJQUFJLG1CQUFtQixHQUFHLE1BQU0sbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RSxlQUFlLEdBQUcsRUFBRSxHQUFHLG1CQUFtQixFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUNELE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5pbXBvcnQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuaW1wb3J0IHJlc29sdmUgPSByZXF1aXJlKFwicmVzb2x2ZVwiKTtcbmltcG9ydCB7IHN0cmlwRmlsZUV4dGVuc2lvbiB9IGZyb20gXCIuLi9pb19oZWxwZXJcIjtcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbXBpbGUoXG4gIGVudHJ5RmlsZTogc3RyaW5nLFxuICB0c2NvbmZpZ0ZpbGUgPSBcIi4vdHNjb25maWcuanNvblwiLFxuICBleHRyYUZpbGVzID0gbmV3IEFycmF5PHN0cmluZz4oKVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBjb21waWxlck9wdGlvbnMgPSBhd2FpdCByZWFkQ29tcGlsZXJPcHRpb25zKHRzY29uZmlnRmlsZSk7XG4gIGxldCBpbmNyZW1lbnRhbCA9IGZhbHNlO1xuICBsZXQgYXJncyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGZvciAobGV0IHByb3BlcnR5TmFtZSBvZiBPYmplY3Qua2V5cyhjb21waWxlck9wdGlvbnMpKSB7XG4gICAgYXJncy5wdXNoKGAtLSR7cHJvcGVydHlOYW1lfWAsIGAke2NvbXBpbGVyT3B0aW9uc1twcm9wZXJ0eU5hbWVdfWApO1xuICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiaW5jcmVtZW50YWxcIikge1xuICAgICAgaW5jcmVtZW50YWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBsZXQgZW50cnlNb2R1bGVQYXRoID0gc3RyaXBGaWxlRXh0ZW5zaW9uKGVudHJ5RmlsZSk7XG4gIGlmIChpbmNyZW1lbnRhbCkge1xuICAgIGFyZ3MucHVzaChcIi0tdHNCdWlsZEluZm9GaWxlXCIsIGAke2VudHJ5TW9kdWxlUGF0aH0udHNidWlsZGluZm9gKTtcbiAgfVxuICBsZXQgZW50cnlGaWxlTm9ybWFsaXplZCA9IGVudHJ5TW9kdWxlUGF0aCArIFwiLnRzXCI7XG4gIGxldCBleHRyYUZpbGVzTm9ybWFsaXplZCA9IGV4dHJhRmlsZXMubWFwKFxuICAgIChmaWxlKSA9PiBzdHJpcEZpbGVFeHRlbnNpb24oZmlsZSkgKyBcIi50c1wiXG4gICk7XG5cbiAgZXhlY1N5bmMoXG4gICAgYG5weCB0c2MgJHthcmdzLmpvaW4oXCIgXCIpfSAke2V4dHJhRmlsZXNOb3JtYWxpemVkLmpvaW4oXG4gICAgICBcIiBcIlxuICAgICl9ICR7ZW50cnlGaWxlTm9ybWFsaXplZH1gLFxuICAgIHtcbiAgICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgICB3aW5kb3dzSGlkZTogdHJ1ZSxcbiAgICB9LFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZENvbXBpbGVyT3B0aW9ucyh0c2NvbmZpZ0ZpbGU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gIGxldCB0c2NvbmZpZyA9IEpTT04ucGFyc2UoXG4gICAgKGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKHRzY29uZmlnRmlsZSkpLnRvU3RyaW5nKClcbiAgKTtcbiAgbGV0IGNvbXBpbGVyT3B0aW9ucyA9IHRzY29uZmlnLmNvbXBpbGVyT3B0aW9ucztcbiAgaWYgKHRzY29uZmlnLmV4dGVuZHMpIHtcbiAgICBsZXQgYmFzZURpciA9IHBhdGguZGlybmFtZSh0c2NvbmZpZ0ZpbGUpO1xuICAgIGxldCBiYXNlVHNjb25maWdGaWxlID0gcmVzb2x2ZS5zeW5jKHRzY29uZmlnLmV4dGVuZHMsIHtcbiAgICAgIGJhc2VkaXI6IGJhc2VEaXIsXG4gICAgICBleHRlbnNpb25zOiBbXCIuanNvblwiXSxcbiAgICB9KTtcbiAgICBsZXQgYmFzZUNvbXBpbGVyT3B0aW9ucyA9IGF3YWl0IHJlYWRDb21waWxlck9wdGlvbnMoYmFzZVRzY29uZmlnRmlsZSk7XG4gICAgY29tcGlsZXJPcHRpb25zID0geyAuLi5iYXNlQ29tcGlsZXJPcHRpb25zLCAuLi5jb21waWxlck9wdGlvbnMgfTtcbiAgfVxuICByZXR1cm4gY29tcGlsZXJPcHRpb25zO1xufVxuIl19