UNPKG

@sap/cf-tools

Version:
87 lines 3.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Cli = void 0; const child_process_1 = require("child_process"); const comment_json_1 = require("comment-json"); const _ = require("lodash"); const types_1 = require("./types"); class Cli { static execute(args, options, token) { token = token || { isCancellationRequested: false, onCancellationRequested: () => { return; }, }; Cli.updateSpawnOptions(options); return new Promise((resolve) => { let stderr = ""; let stdout = ""; if (token.isCancellationRequested) { Cli.cliResultOnExit(stdout, resolve, stderr, types_1.CF_CMD_EXIT_CODE.CANCEL_REQ); return; } const childProcess = (0, child_process_1.spawn)(Cli.CF_CMD, args, options); childProcess.stdin.end(); childProcess.stdout.on("data", (data) => { stdout = stdout.concat(data); }); childProcess.stderr.on("data", (data) => { stderr = stderr.concat(data); }); childProcess.on("exit", (code) => { Cli.cliResultOnExit(stdout, resolve, stderr, code); }); childProcess.on("error", (err) => { const message = (_.get(err, "code") === "ENOENT" ? `${Cli.CF_CMD}: command not found` : _.get(err, "message")); resolve({ stdout: stdout, stderr: stderr, error: message, exitCode: types_1.CF_CMD_EXIT_CODE.ERROR }); }); token.onCancellationRequested(() => { childProcess.kill(); Cli.cliResultOnExit("", resolve, "", types_1.CF_CMD_EXIT_CODE.CANCELED); }); }); } static cliResultOnExit(stdout, resolve, stderr, code) { if (stdout) { if (stdout.indexOf("error_code") > 0) { try { const cfErr = (0, comment_json_1.parse)(stdout); const message = (_.get(cfErr, "code") === 10002 ? Cli.CF_LOGIN_ERROR : _.get(cfErr, "description", "Internal error occured")); resolve({ stdout: stdout, stderr: stderr, exitCode: types_1.CF_CMD_EXIT_CODE.ERROR, error: message }); return; } catch (e) { } } else if (stdout.startsWith("FAILED") && stdout.indexOf("Error creating request") > 0) { resolve({ stdout: stdout, stderr: stderr, error: Cli.CF_LOGIN_ERROR, exitCode: types_1.CF_CMD_EXIT_CODE.ERROR }); return; } else if (/failed.*\bError\b:/g.test(stdout)) { try { (0, comment_json_1.parse)(stdout); } catch (e) { resolve({ stdout: stdout, stderr: stderr, error: stdout, exitCode: types_1.CF_CMD_EXIT_CODE.ERROR }); return; } } else if (stdout.startsWith("FAILED") && stdout.indexOf("No API endpoint set") > 0) { resolve({ stdout: stdout, stderr: stderr, error: stdout, exitCode: types_1.CF_CMD_EXIT_CODE.ERROR }); return; } } resolve({ stdout: stdout, stderr: stderr, exitCode: code }); } static updateSpawnOptions(options) { if (options) { options.env = Object.assign(Object.assign(Object.assign({}, process.env), { NODE_VERSION: process.versions.node }), options.env); _.defaults(options, { cwd: _.get(options, "cmd", __dirname) }); } } } exports.Cli = Cli; Cli.CF_LOGIN_ERROR = "Not logged in. Use 'cf login' to log in."; Cli.CF_CMD = "cf"; //# sourceMappingURL=cli.js.map