roar-sdk
Version:
Node.js SDK for developing Roar inspectors
160 lines (120 loc) • 4.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
exports.generateHash = generateHash;
exports.formatError = formatError;
exports.formatErrorToJSON = formatErrorToJSON;
exports.execScript = execScript;
exports.parsePowershellOutput = parsePowershellOutput;
var _child_process = require('child_process');
var _child_process2 = _interopRequireDefault(_child_process);
var _crypto = require('crypto');
var _crypto2 = _interopRequireDefault(_crypto);
var _errorFormatter = require('error-formatter');
var _errorFormatter2 = _interopRequireDefault(_errorFormatter);
var _os = require('os');
var _os2 = _interopRequireDefault(_os);
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
var _bluebird = require('bluebird');
var _bluebird2 = _interopRequireDefault(_bluebird);
var _configure = require('./configure');
var _configure2 = _interopRequireDefault(_configure);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function isNumeric(num) {
return !isNaN(num);
}
// --- Modules
// --- Libraries
function format(err, data) {
if (data) {
err.data = data;
}
return err;
}
function generateHash(obj) {
return _crypto2.default.createHash('sha256').update((0, _stringify2.default)(obj)).digest('hex');
}
function formatError(err, data) {
return (0, _errorFormatter2.default)(format(err, data));
}
function formatErrorToJSON(err, data) {
return _errorFormatter2.default.json(format(err, data));
}
function execScript(cmd, args) {
var cli = _child_process2.default.spawn(cmd, args);
console.log('changing pid to', cli.pid);
global.sdkEventEmitter.emit('update-pid', cli.pid);
console.log('ready to spawn', cmd, args);
return new _bluebird2.default(function (resolve, reject) {
var stdout = '';
var stderr = '';
cli.stdout.on('data', function (data) {
stdout += data;
});
cli.stderr.on('data', function (data) {
stderr += data;
});
cli.on('exit', function (code) {
//console.log('command is done', stderr, stdout);
if (stderr) {
console.log('command got stderr', stderr);
//reject(stderr);
// Log it?
}
global.sdkEventEmitter.emit('update-pid', process.pid);
resolve(stdout.split(/\r?\n/));
});
});
}
function parsePowershellOutput(lines) {
var i = 0;
var objects = {};
var location = '';
var ref = objects;
while (i < lines.length) {
var line = lines[i];
if (line.indexOf('++START') !== -1) {
var breaks = line.split('::');
location += '/' + breaks[1];
if (isNumeric(breaks[1])) {
ref[+breaks[1]] = line.indexOf('[]') !== -1 ? [] : {};
ref = ref[+breaks[1]];
} else {
ref[breaks[1]] = line.indexOf('[]') !== -1 ? [] : {};
ref = ref[breaks[1]];
}
} else if (line.indexOf('++STOP') !== -1) {
var path = location.split('/');
ref = objects;
path.slice(1, path.length - 1).forEach(function (p) {
if (isNumeric(p)) {
ref = ref[+p];
} else {
ref = ref[p];
}
});
location = path.slice(0, path.length - 1).join('/');
} else if (location !== '' && line.indexOf(':') !== -1) {
var pair = line.split(':');
var name = pair[0].trim();
var value = pair[1].replace(/\r?\n/g, '').trim();
if (value === 'True' || value === 'False') {
value = value === 'True';
} else if (!(typeof value === 'string' && value === '') && isNumeric(value)) {
value = +value;
} else if (typeof value === 'string' && value.match(/\d{1,2}\/\d{1,2}\/\d{4} \d{1}:\d{2}:\d{2} (AM|PM)/) !== null) {
value = (0, _moment2.default)(value, 'MM/DD/YYYY hh:mm:ss A').toDate();
} else if (typeof value === 'string' && value.match(/\d{1,2}\/\d{1,2}\/\d{4} \d{1}/) !== null) {
value = (0, _moment2.default)(value, 'MM/DD/YYYY h').toDate();
}
ref[name] = value;
}
i++;
}
return objects;
}
//# sourceMappingURL=utils.js.map