cdktg
Version:
Agile Threat Modeling as Code
67 lines • 7.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SynthCommand = void 0;
const path = require("path");
const execa = require("execa");
const fs = require("fs-extra");
const which = require("which");
class SynthCommand {
constructor() {
this.command = "synth <filename>";
this.describe = "synthesize the models";
this.builder = (args) => {
args.positional("filename", { demandOption: true, type: "string" });
args.option("watch", {
boolean: true,
alias: "w",
describe: "get watch with it!",
});
return args;
};
this.handler = async (args) => {
const { filename } = args;
if (!fs.existsSync(filename)) {
throw new Error(`File ${filename} not exist!`);
}
const exitCode = await trySynth();
if (args.watch) {
watchLoop();
}
else {
process.exit(exitCode);
}
function watchLoop() {
console.log(`Watching for changes in ${filename}...`);
const watch = fs.watch(filename);
watch.on("change", (event) => {
if (event !== "change") {
return;
}
process.stdout.write("\x1Bc"); // clear the screen
watch.close();
trySynth()
.then(() => watchLoop())
.catch(() => watchLoop());
});
}
async function trySynth() {
const command = await (async () => {
switch (path.extname(filename)) {
case ".ts":
return require.resolve("ts-node/dist/bin");
case ".py":
return which("python3", { all: false });
default:
throw new Error("Unknown file extension");
}
})();
const result = await execa(command, [filename], {
stdio: ["ignore", "inherit", "inherit"],
});
return result.exitCode;
}
};
}
}
exports.SynthCommand = SynthCommand;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL3N5bnRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsK0JBQStCO0FBQy9CLCtCQUErQjtBQVEvQixNQUFhLFlBQVk7SUFBekI7UUFHUyxZQUFPLEdBQUcsa0JBQWtCLENBQUM7UUFDN0IsYUFBUSxHQUFHLHVCQUF1QixDQUFDO1FBRTFDLFlBQU8sR0FBRyxDQUFDLElBQVUsRUFBVyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDbkIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsS0FBSyxFQUFFLEdBQUc7Z0JBQ1YsUUFBUSxFQUFFLG9CQUFvQjthQUMvQixDQUFDLENBQUM7WUFFSCxPQUFPLElBQTBCLENBQUM7UUFDcEMsQ0FBQyxDQUFDO1FBRUssWUFBTyxHQUFHLEtBQUssRUFBRSxJQUFrQixFQUFFLEVBQUU7WUFDNUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQztZQUUxQixJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLFFBQVEsYUFBYSxDQUFDLENBQUM7YUFDaEQ7WUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsRUFBRSxDQUFDO1lBRWxDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxTQUFTLEVBQUUsQ0FBQzthQUNiO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDeEI7WUFFRCxTQUFTLFNBQVM7Z0JBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLFFBQVEsS0FBSyxDQUFDLENBQUM7Z0JBRXRELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRWpDLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQzNCLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRTt3QkFDdEIsT0FBTztxQkFDUjtvQkFFRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtvQkFFbEQsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUVkLFFBQVEsRUFBRTt5QkFDUCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7eUJBQ3ZCLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxLQUFLLFVBQVUsUUFBUTtnQkFDckIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUNoQyxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQzlCLEtBQUssS0FBSzs0QkFDUixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt3QkFDN0MsS0FBSyxLQUFLOzRCQUNSLE9BQU8sS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO3dCQUMxQzs0QkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7cUJBQzdDO2dCQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBRUwsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQzlDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDO2lCQUN4QyxDQUFDLENBQUM7Z0JBRUgsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQUE7QUF2RUQsb0NBdUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgZXhlY2EgZnJvbSBcImV4ZWNhXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIHdoaWNoIGZyb20gXCJ3aGljaFwiO1xuaW1wb3J0IHsgQ29tbWFuZE1vZHVsZSwgQXJndW1lbnRzLCBBcmd2LCBPcHRpb25zIH0gZnJvbSBcInlhcmdzXCI7XG5cbmludGVyZmFjZSBTeW50aE9wdGlvbnMgZXh0ZW5kcyBPcHRpb25zIHtcbiAgd2F0Y2g6IGJvb2xlYW47XG4gIGZpbGVuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTeW50aENvbW1hbmQ8VSBleHRlbmRzIFN5bnRoT3B0aW9ucz5cbiAgaW1wbGVtZW50cyBDb21tYW5kTW9kdWxlPHt9LCBVPlxue1xuICBwdWJsaWMgY29tbWFuZCA9IFwic3ludGggPGZpbGVuYW1lPlwiO1xuICBwdWJsaWMgZGVzY3JpYmUgPSBcInN5bnRoZXNpemUgdGhlIG1vZGVsc1wiO1xuXG4gIGJ1aWxkZXIgPSAoYXJnczogQXJndik6IEFyZ3Y8VT4gPT4ge1xuICAgIGFyZ3MucG9zaXRpb25hbChcImZpbGVuYW1lXCIsIHsgZGVtYW5kT3B0aW9uOiB0cnVlLCB0eXBlOiBcInN0cmluZ1wiIH0pO1xuICAgIGFyZ3Mub3B0aW9uKFwid2F0Y2hcIiwge1xuICAgICAgYm9vbGVhbjogdHJ1ZSxcbiAgICAgIGFsaWFzOiBcIndcIixcbiAgICAgIGRlc2NyaWJlOiBcImdldCB3YXRjaCB3aXRoIGl0IVwiLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyZ3MgYXMgdW5rbm93biBhcyBBcmd2PFU+O1xuICB9O1xuXG4gIHB1YmxpYyBoYW5kbGVyID0gYXN5bmMgKGFyZ3M6IEFyZ3VtZW50czxVPikgPT4ge1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IGFyZ3M7XG5cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZW5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtmaWxlbmFtZX0gbm90IGV4aXN0IWApO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXRDb2RlID0gYXdhaXQgdHJ5U3ludGgoKTtcblxuICAgIGlmIChhcmdzLndhdGNoKSB7XG4gICAgICB3YXRjaExvb3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5leGl0KGV4aXRDb2RlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXRjaExvb3AoKSB7XG4gICAgICBjb25zb2xlLmxvZyhgV2F0Y2hpbmcgZm9yIGNoYW5nZXMgaW4gJHtmaWxlbmFtZX0uLi5gKTtcblxuICAgICAgY29uc3Qgd2F0Y2ggPSBmcy53YXRjaChmaWxlbmFtZSk7XG5cbiAgICAgIHdhdGNoLm9uKFwiY2hhbmdlXCIsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQgIT09IFwiY2hhbmdlXCIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxceDFCY1wiKTsgLy8gY2xlYXIgdGhlIHNjcmVlblxuXG4gICAgICAgIHdhdGNoLmNsb3NlKCk7XG5cbiAgICAgICAgdHJ5U3ludGgoKVxuICAgICAgICAgIC50aGVuKCgpID0+IHdhdGNoTG9vcCgpKVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiB3YXRjaExvb3AoKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB0cnlTeW50aCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgY29uc3QgY29tbWFuZCA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAocGF0aC5leHRuYW1lKGZpbGVuYW1lKSkge1xuICAgICAgICAgIGNhc2UgXCIudHNcIjpcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlLnJlc29sdmUoXCJ0cy1ub2RlL2Rpc3QvYmluXCIpO1xuICAgICAgICAgIGNhc2UgXCIucHlcIjpcbiAgICAgICAgICAgIHJldHVybiB3aGljaChcInB5dGhvbjNcIiwgeyBhbGw6IGZhbHNlIH0pO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGZpbGUgZXh0ZW5zaW9uXCIpO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjYShjb21tYW5kLCBbZmlsZW5hbWVdLCB7XG4gICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiXSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0LmV4aXRDb2RlO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==