v-daemon
Version:
Daemon script for v-spot-client
109 lines (87 loc) • 8.62 kB
JavaScript
/**
* Define subject for
* @function subjectFor
* @param {string} filename
*/
;
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _require = require('child_process'),
execFile = _require.execFile;
var path = require('path');
var debug = require('debug')('v:daemon:subject');
function parseJSON(str) {
try {
return JSON.parse(str);
} catch (e) {
return str;
}
}
/** @lends subjectFor */
function subjectFor(filename) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var _options$verbose = options.verbose,
verbose = _options$verbose === undefined ? false : _options$verbose,
subject = options.subject;
var target = {};
return new Proxy(target, {
get: function get(target, name) {
var isMethod = !['constructor', 'then', 'catch', 'inspect', 'valueOf'].includes(name);
if (!isMethod) {
return target[name];
}
if ((typeof name === 'undefined' ? 'undefined' : (0, _typeof3.default)(name)) === 'symbol') {
return target[name];
}
var verb = String(name).trim();
filename = path.resolve(filename);
return function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
return _context.abrupt('return', new _promise2.default(function (resolve, reject) {
execFile(filename, [verb].concat((0, _toConsumableArray3.default)(args)), function (err, stdout, stderr) {
debug('exec', filename, { subject: subject, verb: verb, args: args });
if (verbose) {
console.log('[v-daemon] Call "' + subject + '.' + verb + '"');
}
if (stderr || err) {
var message = String(stderr || stdout).trim() || 'Call failed : "' + name + '"';
reject(new Error(message));
} else {
var result = parseJSON(String(stdout).trim());
resolve(result);
}
});
}));
case 1:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
function execFileProxy() {
return _ref.apply(this, arguments);
}
return execFileProxy;
}();
}
});
}
module.exports = subjectFor;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN1YmplY3RGb3IuanMiXSwibmFtZXMiOlsicmVxdWlyZSIsImV4ZWNGaWxlIiwicGF0aCIsImRlYnVnIiwicGFyc2VKU09OIiwic3RyIiwiSlNPTiIsInBhcnNlIiwiZSIsInN1YmplY3RGb3IiLCJmaWxlbmFtZSIsIm9wdGlvbnMiLCJ2ZXJib3NlIiwic3ViamVjdCIsInRhcmdldCIsIlByb3h5IiwiZ2V0IiwibmFtZSIsImlzTWV0aG9kIiwiaW5jbHVkZXMiLCJ2ZXJiIiwiU3RyaW5nIiwidHJpbSIsInJlc29sdmUiLCJhcmdzIiwicmVqZWN0IiwiZXJyIiwic3Rkb3V0Iiwic3RkZXJyIiwiY29uc29sZSIsImxvZyIsIm1lc3NhZ2UiLCJFcnJvciIsInJlc3VsdCIsImV4ZWNGaWxlUHJveHkiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFLQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBRW1CQSxRQUFRLGVBQVIsQztJQUFaQyxRLFlBQUFBLFE7O0FBQ1AsSUFBTUMsT0FBT0YsUUFBUSxNQUFSLENBQWI7QUFDQSxJQUFNRyxRQUFRSCxRQUFRLE9BQVIsRUFBaUIsa0JBQWpCLENBQWQ7O0FBRUEsU0FBU0ksU0FBVCxDQUFvQkMsR0FBcEIsRUFBeUI7QUFDdkIsTUFBSTtBQUNGLFdBQU9DLEtBQUtDLEtBQUwsQ0FBV0YsR0FBWCxDQUFQO0FBQ0QsR0FGRCxDQUVFLE9BQU9HLENBQVAsRUFBVTtBQUNWLFdBQU9ILEdBQVA7QUFDRDtBQUNGOztBQUVEO0FBQ0EsU0FBU0ksVUFBVCxDQUFxQkMsUUFBckIsRUFBNkM7QUFBQSxNQUFkQyxPQUFjLHVFQUFKLEVBQUk7QUFBQSx5QkFJdkNBLE9BSnVDLENBRXpDQyxPQUZ5QztBQUFBLE1BRXpDQSxPQUZ5QyxvQ0FFL0IsS0FGK0I7QUFBQSxNQUd6Q0MsT0FIeUMsR0FJdkNGLE9BSnVDLENBR3pDRSxPQUh5Qzs7O0FBTTNDLE1BQU1DLFNBQVMsRUFBZjtBQUNBLFNBQU8sSUFBSUMsS0FBSixDQUFVRCxNQUFWLEVBQWtCO0FBQ3ZCRSxPQUR1QixlQUNsQkYsTUFEa0IsRUFDVkcsSUFEVSxFQUNKO0FBQ2pCLFVBQU1DLFdBQVcsQ0FBQyxDQUNoQixhQURnQixFQUNELE1BREMsRUFDTyxPQURQLEVBQ2dCLFNBRGhCLEVBQzJCLFNBRDNCLEVBRWhCQyxRQUZnQixDQUVQRixJQUZPLENBQWxCO0FBR0EsVUFBSSxDQUFDQyxRQUFMLEVBQWU7QUFDYixlQUFPSixPQUFPRyxJQUFQLENBQVA7QUFDRDtBQUNELFVBQUksUUFBT0EsSUFBUCx1REFBT0EsSUFBUCxPQUFnQixRQUFwQixFQUE4QjtBQUM1QixlQUFPSCxPQUFPRyxJQUFQLENBQVA7QUFDRDtBQUNELFVBQU1HLE9BQU9DLE9BQU9KLElBQVAsRUFBYUssSUFBYixFQUFiO0FBQ0FaLGlCQUFXUixLQUFLcUIsT0FBTCxDQUFhYixRQUFiLENBQVg7QUFDQTtBQUFBLDRGQUFPO0FBQUEsNENBQWlDYyxJQUFqQztBQUFpQ0EsZ0JBQWpDO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtREFDRSxzQkFBWSxVQUFDRCxPQUFELEVBQVVFLE1BQVYsRUFBcUI7QUFDdEN4Qiw2QkFBU1MsUUFBVCxHQUFvQlUsSUFBcEIsMENBQTZCSSxJQUE3QixJQUFvQyxVQUFDRSxHQUFELEVBQU1DLE1BQU4sRUFBY0MsTUFBZCxFQUF5QjtBQUMzRHpCLDRCQUFNLE1BQU4sRUFBY08sUUFBZCxFQUF3QixFQUFDRyxnQkFBRCxFQUFVTyxVQUFWLEVBQWdCSSxVQUFoQixFQUF4QjtBQUNBLDBCQUFJWixPQUFKLEVBQWE7QUFDWGlCLGdDQUFRQyxHQUFSLHVCQUFnQ2pCLE9BQWhDLFNBQTJDTyxJQUEzQztBQUNEO0FBQ0QsMEJBQUlRLFVBQVVGLEdBQWQsRUFBbUI7QUFDakIsNEJBQU1LLFVBQVVWLE9BQU9PLFVBQVVELE1BQWpCLEVBQXlCTCxJQUF6QiwwQkFBcURMLElBQXJELE1BQWhCO0FBQ0FRLCtCQUFPLElBQUlPLEtBQUosQ0FBVUQsT0FBVixDQUFQO0FBQ0QsdUJBSEQsTUFHTztBQUNMLDRCQUFNRSxTQUFTN0IsVUFBVWlCLE9BQU9NLE1BQVAsRUFBZUwsSUFBZixFQUFWLENBQWY7QUFDQUMsZ0NBQVFVLE1BQVI7QUFDRDtBQUNGLHFCQVpEO0FBYUQsbUJBZE0sQ0FERjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUFQOztBQUFBLGlCQUFzQkMsYUFBdEI7QUFBQTtBQUFBOztBQUFBLGVBQXNCQSxhQUF0QjtBQUFBO0FBaUJEO0FBOUJzQixHQUFsQixDQUFQO0FBZ0NEOztBQUVEQyxPQUFPQyxPQUFQLEdBQWlCM0IsVUFBakIiLCJmaWxlIjoic3ViamVjdEZvci5qcyIsInNvdXJjZVJvb3QiOiJsaWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlZmluZSBzdWJqZWN0IGZvclxuICogQGZ1bmN0aW9uIHN1YmplY3RGb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICovXG4ndXNlIHN0cmljdCdcblxuY29uc3Qge2V4ZWNGaWxlfSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCd2OmRhZW1vbjpzdWJqZWN0JylcblxuZnVuY3Rpb24gcGFyc2VKU09OIChzdHIpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gc3RyXG4gIH1cbn1cblxuLyoqIEBsZW5kcyBzdWJqZWN0Rm9yICovXG5mdW5jdGlvbiBzdWJqZWN0Rm9yIChmaWxlbmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB2ZXJib3NlID0gZmFsc2UsXG4gICAgc3ViamVjdFxuICB9ID0gb3B0aW9uc1xuXG4gIGNvbnN0IHRhcmdldCA9IHt9XG4gIHJldHVybiBuZXcgUHJveHkodGFyZ2V0LCB7XG4gICAgZ2V0ICh0YXJnZXQsIG5hbWUpIHtcbiAgICAgIGNvbnN0IGlzTWV0aG9kID0gIVtcbiAgICAgICAgJ2NvbnN0cnVjdG9yJywgJ3RoZW4nLCAnY2F0Y2gnLCAnaW5zcGVjdCcsICd2YWx1ZU9mJ1xuICAgICAgXS5pbmNsdWRlcyhuYW1lKVxuICAgICAgaWYgKCFpc01ldGhvZCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0W25hbWVdXG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXRbbmFtZV1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHZlcmIgPSBTdHJpbmcobmFtZSkudHJpbSgpXG4gICAgICBmaWxlbmFtZSA9IHBhdGgucmVzb2x2ZShmaWxlbmFtZSlcbiAgICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiBleGVjRmlsZVByb3h5ICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgZXhlY0ZpbGUoZmlsZW5hbWUsIFt2ZXJiLCAuLi5hcmdzXSwgKGVyciwgc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgICAgIGRlYnVnKCdleGVjJywgZmlsZW5hbWUsIHtzdWJqZWN0LCB2ZXJiLCBhcmdzfSlcbiAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbdi1kYWVtb25dIENhbGwgXCIke3N1YmplY3R9LiR7dmVyYn1cImApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RkZXJyIHx8IGVycikge1xuICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gU3RyaW5nKHN0ZGVyciB8fCBzdGRvdXQpLnRyaW0oKSB8fCBgQ2FsbCBmYWlsZWQgOiBcIiR7bmFtZX1cImBcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlSlNPTihTdHJpbmcoc3Rkb3V0KS50cmltKCkpXG4gICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN1YmplY3RGb3IiXX0=