projen
Version:
CDK for software projects
90 lines • 8.8 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.synth = synth;
const fs = __importStar(require("fs"));
const common_1 = require("../../common");
const logging = __importStar(require("../../logging"));
async function synth(runtime, options) {
const workdir = runtime.workdir;
// if there are no tasks, we assume this is not a projen project (modern
// projects must at least have the "default" task).
if (runtime.tasks.length === 0) {
logging.error('Unable to find projen project. Use "projen new" to create a new project.');
process.exit(1);
}
// run synth once
const success = await trySynth();
if (options.watch) {
// if we are in watch mode, start the watch loop
watchLoop();
}
else if (!success) {
// make sure exit code is non-zero if we are not in watch mode
process.exit(1);
}
async function trySynth() {
// determine if post synthesis tasks should be executed (e.g. "yarn install").
process.env.PROJEN_DISABLE_POST = (!options.post).toString();
try {
const defaultTask = runtime.tasks.find((t) => t.name === common_1.DEFAULT_TASK);
if (!defaultTask) {
throw new Error('Unable to find a task named "default"');
}
await runtime.runTask(defaultTask.name);
return true;
}
catch (e) {
logging.error(`Synthesis failed: ${e.message}`);
return false;
}
}
function watchLoop() {
logging.info(`Watching for changes in ${workdir}...`);
const watch = fs.watch(workdir, { recursive: true });
watch.on("change", (event) => {
// we only care about "change" events
if (event !== "change") {
return;
}
process.stdout.write("\x1Bc"); // clear screen
watch.close();
trySynth()
.then(() => watchLoop())
.catch(() => watchLoop());
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NtZHMvc3ludGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQkEsc0JBeURDO0FBNUVELHVDQUF5QjtBQUN6Qix5Q0FBNEM7QUFDNUMsdURBQXlDO0FBaUJsQyxLQUFLLFVBQVUsS0FBSyxDQUFDLE9BQW9CLEVBQUUsT0FBcUI7SUFDckUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUVoQyx3RUFBd0U7SUFDeEUsbURBQW1EO0lBQ25ELElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDL0IsT0FBTyxDQUFDLEtBQUssQ0FDWCwwRUFBMEUsQ0FDM0UsQ0FBQztRQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsRUFBRSxDQUFDO0lBRWpDLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xCLGdEQUFnRDtRQUNoRCxTQUFTLEVBQUUsQ0FBQztJQUNkLENBQUM7U0FBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsOERBQThEO1FBQzlELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELEtBQUssVUFBVSxRQUFRO1FBQ3JCLDhFQUE4RTtRQUM5RSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUsscUJBQVksQ0FBQyxDQUFDO1lBRXZFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFFRCxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFzQixDQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN6RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxTQUFTO1FBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLE9BQU8sS0FBSyxDQUFDLENBQUM7UUFDdEQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzNCLHFDQUFxQztZQUNyQyxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkIsT0FBTztZQUNULENBQUM7WUFFRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWU7WUFDOUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2QsUUFBUSxFQUFFO2lCQUNQLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztpQkFDdkIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgREVGQVVMVF9UQVNLIH0gZnJvbSBcIi4uLy4uL2NvbW1vblwiO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tIFwiLi4vLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBUYXNrUnVudGltZSB9IGZyb20gXCIuLi90YXNrLXJ1bnRpbWVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTeW50aE9wdGlvbnMge1xuICAvKipcbiAgICogRXhlY3V0ZSBwb3N0IHN5bnRoZXNpcyBjb21tYW5kcy5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHdhdGNoaW5nIC5wcm9qZW5yYy5qcyBhbmQgcmUtc3ludGggd2hlbiBjaGFuZ2VkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgd2F0Y2g/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3ludGgocnVudGltZTogVGFza1J1bnRpbWUsIG9wdGlvbnM6IFN5bnRoT3B0aW9ucykge1xuICBjb25zdCB3b3JrZGlyID0gcnVudGltZS53b3JrZGlyO1xuXG4gIC8vIGlmIHRoZXJlIGFyZSBubyB0YXNrcywgd2UgYXNzdW1lIHRoaXMgaXMgbm90IGEgcHJvamVuIHByb2plY3QgKG1vZGVyblxuICAvLyBwcm9qZWN0cyBtdXN0IGF0IGxlYXN0IGhhdmUgdGhlIFwiZGVmYXVsdFwiIHRhc2spLlxuICBpZiAocnVudGltZS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnaW5nLmVycm9yKFxuICAgICAgJ1VuYWJsZSB0byBmaW5kIHByb2plbiBwcm9qZWN0LiBVc2UgXCJwcm9qZW4gbmV3XCIgdG8gY3JlYXRlIGEgbmV3IHByb2plY3QuJyxcbiAgICApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIHJ1biBzeW50aCBvbmNlXG4gIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCB0cnlTeW50aCgpO1xuXG4gIGlmIChvcHRpb25zLndhdGNoKSB7XG4gICAgLy8gaWYgd2UgYXJlIGluIHdhdGNoIG1vZGUsIHN0YXJ0IHRoZSB3YXRjaCBsb29wXG4gICAgd2F0Y2hMb29wKCk7XG4gIH0gZWxzZSBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAvLyBtYWtlIHN1cmUgZXhpdCBjb2RlIGlzIG5vbi16ZXJvIGlmIHdlIGFyZSBub3QgaW4gd2F0Y2ggbW9kZVxuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHRyeVN5bnRoKCkge1xuICAgIC8vIGRldGVybWluZSBpZiBwb3N0IHN5bnRoZXNpcyB0YXNrcyBzaG91bGQgYmUgZXhlY3V0ZWQgKGUuZy4gXCJ5YXJuIGluc3RhbGxcIikuXG4gICAgcHJvY2Vzcy5lbnYuUFJPSkVOX0RJU0FCTEVfUE9TVCA9ICghb3B0aW9ucy5wb3N0KS50b1N0cmluZygpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWZhdWx0VGFzayA9IHJ1bnRpbWUudGFza3MuZmluZCgodCkgPT4gdC5uYW1lID09PSBERUZBVUxUX1RBU0spO1xuXG4gICAgICBpZiAoIWRlZmF1bHRUYXNrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgYSB0YXNrIG5hbWVkIFwiZGVmYXVsdFwiJyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHJ1bnRpbWUucnVuVGFzayhkZWZhdWx0VGFzay5uYW1lKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dpbmcuZXJyb3IoYFN5bnRoZXNpcyBmYWlsZWQ6ICR7KGUgYXMgYW55KS5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdhdGNoTG9vcCgpIHtcbiAgICBsb2dnaW5nLmluZm8oYFdhdGNoaW5nIGZvciBjaGFuZ2VzIGluICR7d29ya2Rpcn0uLi5gKTtcbiAgICBjb25zdCB3YXRjaCA9IGZzLndhdGNoKHdvcmtkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHdhdGNoLm9uKFwiY2hhbmdlXCIsIChldmVudCkgPT4ge1xuICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IFwiY2hhbmdlXCIgZXZlbnRzXG4gICAgICBpZiAoZXZlbnQgIT09IFwiY2hhbmdlXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxceDFCY1wiKTsgLy8gY2xlYXIgc2NyZWVuXG4gICAgICB3YXRjaC5jbG9zZSgpO1xuICAgICAgdHJ5U3ludGgoKVxuICAgICAgICAudGhlbigoKSA9PiB3YXRjaExvb3AoKSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHdhdGNoTG9vcCgpKTtcbiAgICB9KTtcbiAgfVxufVxuIl19