specmatic
Version:
Node wrapper for Specmatic
71 lines (70 loc) • 16.1 kB
JavaScript
;
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.callCore = void 0;
var _path = _interopRequireDefault(require("path"));
var _config = require("../config");
var _logger = _interopRequireDefault(require("../common/logger"));
var _child_process = require("child_process");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
var callCore = exports.callCore = function callCore(args, done, onOutput) {
var jvmArgs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
var rootPath = _path["default"].resolve(__dirname, '..', '..');
var specmaticJarPath = _path["default"].resolve(rootPath, _config.specmaticCoreJarName);
return callJar(specmaticJarPath, args, done, onOutput, jvmArgs);
};
function callJar(jarPath, args, done, onOutput) {
var _javaProcess$stdout, _javaProcess$stderr;
var jvmArgs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
var argsList = _toConsumableArray(jvmArgs);
if (process.env['endpointsAPI']) {
argsList.push("-DendpointsAPI=\"".concat(process.env['endpointsAPI'], "\""));
}
// Pass configuration through environment variables instead of JVM -D system properties
var envVars = _objectSpread({}, process.env);
if (!envVars['SPECMATIC_EXECUTOR']) {
envVars['SPECMATIC_EXECUTOR'] = "npm";
}
argsList.push.apply(argsList, ['-jar', jarPath]);
argsList.push.apply(argsList, _toConsumableArray(args.map(function (arg) {
return String(arg);
})));
var prettyPrintedCLIArgs = ["java"].concat(_toConsumableArray(argsList)).map(function (arg) {
return JSON.stringify(arg);
}).join(' ');
_logger["default"].info("CLI: Running command: ".concat(prettyPrintedCLIArgs));
var javaProcess = (0, _child_process.spawn)('java', argsList, {
stdio: 'pipe',
stderr: 'pipe',
shell: false,
env: envVars
});
(_javaProcess$stdout = javaProcess.stdout) === null || _javaProcess$stdout === void 0 || _javaProcess$stdout.on('data', function (data) {
onOutput("".concat(data), false);
});
(_javaProcess$stderr = javaProcess.stderr) === null || _javaProcess$stderr === void 0 || _javaProcess$stderr.on('data', function (data) {
onOutput("".concat(data), true);
});
javaProcess.on('close', function (code) {
if (code) {
done(new Error('Command exited with non zero code: ' + code));
} else {
done(null);
}
});
return javaProcess;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvbmZpZyIsIl9sb2dnZXIiLCJfY2hpbGRfcHJvY2VzcyIsImUiLCJfX2VzTW9kdWxlIiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIl90eXBlb2YiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiYSIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJpdGVyYXRvciIsImlzQXJyYXkiLCJuIiwiY2FsbENvcmUiLCJleHBvcnRzIiwiYXJncyIsImRvbmUiLCJvbk91dHB1dCIsImp2bUFyZ3MiLCJ1bmRlZmluZWQiLCJyb290UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwic3BlY21hdGljSmFyUGF0aCIsInNwZWNtYXRpY0NvcmVKYXJOYW1lIiwiY2FsbEphciIsImphclBhdGgiLCJfamF2YVByb2Nlc3Mkc3Rkb3V0IiwiX2phdmFQcm9jZXNzJHN0ZGVyciIsImFyZ3NMaXN0IiwicHJvY2VzcyIsImVudiIsImNvbmNhdCIsImVudlZhcnMiLCJtYXAiLCJhcmciLCJwcmV0dHlQcmludGVkQ0xJQXJncyIsIkpTT04iLCJzdHJpbmdpZnkiLCJqb2luIiwibG9nZ2VyIiwiaW5mbyIsImphdmFQcm9jZXNzIiwic3Bhd24iLCJzdGRpbyIsInN0ZGVyciIsInNoZWxsIiwic3Rkb3V0Iiwib24iLCJkYXRhIiwiY29kZSIsIkVycm9yIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi9ydW5uZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4ZWNTaCBmcm9tICdleGVjLXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc3BlY21hdGljQ29yZUphck5hbWUgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9jb21tb24vbG9nZ2VyJztcbmltcG9ydCB7IENoaWxkUHJvY2VzcywgZXhlYywgc3Bhd24sIFNwYXduT3B0aW9ucyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuXG5jb25zdCBjYWxsQ29yZSA9IChhcmdzOiAoc3RyaW5nIHwgbnVtYmVyKVtdLCBkb25lOiAoZXJyb3I6IGFueSkgPT4gdm9pZCwgb25PdXRwdXQ6IChtZXNzYWdlOiBzdHJpbmcsIGVycm9yOiBib29sZWFuKSA9PiB2b2lkLCBqdm1BcmdzOiBzdHJpbmdbXSA9IFtdKTogQ2hpbGRQcm9jZXNzID0+IHtcbiAgICBjb25zdCByb290UGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicpO1xuICAgIGNvbnN0IHNwZWNtYXRpY0phclBhdGggPSBwYXRoLnJlc29sdmUocm9vdFBhdGgsIHNwZWNtYXRpY0NvcmVKYXJOYW1lKTtcbiAgICByZXR1cm4gY2FsbEphcihzcGVjbWF0aWNKYXJQYXRoLCBhcmdzLCBkb25lLCBvbk91dHB1dCwganZtQXJncyk7XG59O1xuXG5mdW5jdGlvbiBjYWxsSmFyKGphclBhdGg6IHN0cmluZywgYXJnczogKHN0cmluZyB8IG51bWJlcilbXSwgZG9uZTogKGVycm9yOiBhbnkpID0+IHZvaWQsIG9uT3V0cHV0OiAobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogYm9vbGVhbikgPT4gdm9pZCwganZtQXJnczogc3RyaW5nW10gPSBbXSk6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgYXJnc0xpc3Q6IHN0cmluZ1tdID0gWy4uLmp2bUFyZ3NdO1xuICAgIGlmIChwcm9jZXNzLmVudlsnZW5kcG9pbnRzQVBJJ10pIHtcbiAgICAgICAgYXJnc0xpc3QucHVzaChgLURlbmRwb2ludHNBUEk9XCIke3Byb2Nlc3MuZW52WydlbmRwb2ludHNBUEknXX1cImApO1xuICAgIH1cbiAgICAvLyBQYXNzIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW5zdGVhZCBvZiBKVk0gLUQgc3lzdGVtIHByb3BlcnRpZXNcbiAgICBjb25zdCBlbnZWYXJzOiBOb2RlSlMuUHJvY2Vzc0VudiA9IHsgLi4ucHJvY2Vzcy5lbnYgfTtcbiAgICBpZiAoIWVudlZhcnNbJ1NQRUNNQVRJQ19FWEVDVVRPUiddKSB7XG4gICAgICAgIGVudlZhcnNbJ1NQRUNNQVRJQ19FWEVDVVRPUiddID0gXCJucG1cIlxuICAgIH1cblxuICAgIGFyZ3NMaXN0LnB1c2goLi4uWyctamFyJywgamFyUGF0aF0pO1xuICAgIGFyZ3NMaXN0LnB1c2goLi4uYXJncy5tYXAoYXJnID0+IFN0cmluZyhhcmcpKSk7XG4gICAgY29uc3QgcHJldHR5UHJpbnRlZENMSUFyZ3MgPSBbYGphdmFgLCAuLi5hcmdzTGlzdF0ubWFwKGFyZyA9PiBKU09OLnN0cmluZ2lmeShhcmcpKS5qb2luKCcgJyk7XG5cbiAgICBsb2dnZXIuaW5mbyhgQ0xJOiBSdW5uaW5nIGNvbW1hbmQ6ICR7cHJldHR5UHJpbnRlZENMSUFyZ3N9YCk7XG4gICAgY29uc3QgamF2YVByb2Nlc3M6IENoaWxkUHJvY2VzcyA9IHNwYXduKCdqYXZhJywgYXJnc0xpc3QsIHsgc3RkaW86ICdwaXBlJywgc3RkZXJyOiAncGlwZScsIHNoZWxsOiBmYWxzZSwgZW52OiBlbnZWYXJzIH0gYXMgU3Bhd25PcHRpb25zKTtcbiAgICBqYXZhUHJvY2Vzcy5zdGRvdXQ/Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGRhdGE6IFN0cmluZykge1xuICAgICAgICBvbk91dHB1dChgJHtkYXRhfWAsIGZhbHNlKTtcbiAgICB9KTtcbiAgICBqYXZhUHJvY2Vzcy5zdGRlcnI/Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGRhdGE6IFN0cmluZykge1xuICAgICAgICBvbk91dHB1dChgJHtkYXRhfWAsIHRydWUpO1xuICAgIH0pO1xuICAgIGphdmFQcm9jZXNzLm9uKCdjbG9zZScsIGZ1bmN0aW9uIChjb2RlOm51bWJlcikge1xuICAgICAgICBpZiAoY29kZSkge1xuICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoJ0NvbW1hbmQgZXhpdGVkIHdpdGggbm9uIHplcm8gY29kZTogJyArIGNvZGUpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG9uZShudWxsKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBqYXZhUHJvY2Vzcztcbn1cblxuZXhwb3J0IHsgY2FsbENvcmUgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUgsT0FBQTtBQUF3RSxTQUFBRCx1QkFBQUssQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLGdCQUFBQSxDQUFBO0FBQUEsU0FBQUUsUUFBQUYsQ0FBQSxFQUFBRyxDQUFBLFFBQUFDLENBQUEsR0FBQUMs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