@berenddeboer/nx-aws-cdk
Version:
Nx self-inferring plugin for AWS CDK stacks
81 lines • 3.51 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.LARGE_BUFFER = exports.executorPropKeys = void 0;
exports.parseArgs = parseArgs;
exports.createCommand = createCommand;
exports.runCommandProcess = runCommandProcess;
const child_process_1 = require("child_process");
const fs_1 = require("fs");
const devkit_1 = require("@nx/devkit");
exports.executorPropKeys = ["stacks"];
exports.LARGE_BUFFER = 1024 * 1000000;
function parseArgs(options) {
const keys = Object.keys(options);
return keys
.filter((prop) => exports.executorPropKeys.indexOf(prop) < 0)
.reduce((acc, key) => ((acc[key] = options[key]), acc), {});
}
function createCommand(command, options) {
// We cannot start cdk in a monorepo, else it won't detect imported packages
// Workaround provided here: https://github.com/adrian-goe/nx-aws-cdk-v2/issues/679
// This improves upon that by detecting the main file to pass to CDK
// from cdk.json.
const NX_WORKSPACE_ROOT = process.env.NX_WORKSPACE_ROOT ?? "";
const packageManager = (0, devkit_1.detectPackageManager)();
const packageManagerExecutor = packageManager === "npm" ? "npx" : `${packageManager} dlx`;
const projectPath = `${NX_WORKSPACE_ROOT}/${options.root}`;
const cdk_json = JSON.parse((0, fs_1.readFileSync)(`${projectPath}/cdk.json`).toString());
const app = cdk_json["app"];
const main = app.split(" ").pop();
const generatePath = `"${packageManagerExecutor} ts-node --require tsconfig-paths/register --project ${projectPath}/tsconfig.app.json ${projectPath}/${main}"`;
const cdk = `node --require ts-node/register ${NX_WORKSPACE_ROOT}/node_modules/aws-cdk/bin/cdk.js -a ${generatePath}`;
let commands = [cdk, command];
if (options.stacks) {
commands = commands.concat(options.stacks);
}
if (options.context) {
Object.keys(options.context).forEach((key) => {
commands.push(`--context ${key}=${options.context[key]}`);
});
}
for (const arg in options.otherArgs) {
commands.push(`--${arg}=${options.otherArgs[arg]}`);
}
return commands.join(" ");
}
function runCommandProcess(command, cwd) {
return new Promise((resolve) => {
devkit_1.logger.debug(`Executing command: ${command}`);
const childProcess = (0, child_process_1.exec)(command, {
maxBuffer: exports.LARGE_BUFFER,
env: process.env,
cwd: cwd,
});
// Ensure the child process is killed when the parent exits
const processExitListener = () => childProcess.kill();
process.on("exit", processExitListener);
process.on("SIGTERM", processExitListener);
process.stdin.on("data", (data) => {
childProcess.stdin.write(data);
childProcess.stdin.end();
});
childProcess.stdout.on("data", (data) => {
process.stdout.write(data);
});
childProcess.stderr.on("data", (err) => {
process.stderr.write(err);
});
childProcess.on("close", (code) => {
if (code === 0) {
resolve(true);
}
else {
resolve(false);
}
process.removeListener("exit", processExitListener);
process.removeListener("SIGTERM", processExitListener);
process.stdin.removeListener("data", processExitListener);
});
});
}
//# sourceMappingURL=executor.util.js.map
;