UNPKG

@selfage/cli

Version:

Basic CLI to buid, run and format TypeScript code.

45 lines 6.7 kB
"use strict"; 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