UNPKG

@berenddeboer/nx-aws-cdk

Version:

Nx self-inferring plugin for AWS CDK stacks

81 lines 3.51 kB
"use strict"; 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