git-like-audit-trail
Version:
Git like audit trail
1,159 lines (962 loc) • 87.2 kB
JavaScript
'use strict';
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
var _regeneratorRuntime = require('@babel/runtime/regenerator');
var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
var _ = require('lodash');
var deepObjectDiff = require('deep-object-diff');
var elasticsearch = require('@elastic/elasticsearch');
var uuid = require('uuid');
var crypto = require('crypto');
var _typeof = require('@babel/runtime/helpers/typeof');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
var _asyncToGenerator__default = /*#__PURE__*/_interopDefaultLegacy(_asyncToGenerator);
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
var crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto);
var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var esClient;
function createESClient(input) {
var _input$endpoint$split;
return new elasticsearch.Client(_objectSpread({
nodes: (_input$endpoint$split = input === null || input === void 0 ? void 0 : input.endpoint.split(",")) !== null && _input$endpoint$split !== void 0 ? _input$endpoint$split : "http://localhost:9200"
}, input));
}
function getESClient(input) {
if (!esClient) {
console.log("[Audit Trail] Create new connection to Elasticsearch");
esClient = createESClient(input);
}
return esClient;
}
function elasticsearchInsert(_x) {
return _elasticsearchInsert.apply(this, arguments);
}
function _elasticsearchInsert() {
_elasticsearchInsert = _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee(_ref) {
var _ref$indexName, indexName, insertdata, client, result;
return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_ref$indexName = _ref.indexName, indexName = _ref$indexName === void 0 ? 'audit-trail' : _ref$indexName, insertdata = _ref.insertdata, client = _ref.client;
_context.prev = 1;
_context.next = 4;
return client.index({
index: indexName,
op_type: "create",
refresh: "true",
body: insertdata
});
case 4:
result = _context.sent;
return _context.abrupt("return", result.body);
case 8:
_context.prev = 8;
_context.t0 = _context["catch"](1);
console.log("[Audit Trail] elasticsearch insert error", _context.t0);
return _context.abrupt("return", null);
case 12:
case "end":
return _context.stop();
}
}
}, _callee, null, [[1, 8]]);
}));
return _elasticsearchInsert.apply(this, arguments);
}
function elasticsearchSearch(_x2) {
return _elasticsearchSearch.apply(this, arguments);
}
function _elasticsearchSearch() {
_elasticsearchSearch = _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee2(_ref2) {
var _ref2$indexName, indexName, commitHashArray, _ref2$size, size, _ref2$sort, sort, client, result;
return _regeneratorRuntime__default['default'].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_ref2$indexName = _ref2.indexName, indexName = _ref2$indexName === void 0 ? 'audit-trail' : _ref2$indexName, commitHashArray = _ref2.commitHashArray, _ref2$size = _ref2.size, size = _ref2$size === void 0 ? 1 : _ref2$size, _ref2$sort = _ref2.sort, sort = _ref2$sort === void 0 ? {
time: "desc"
} : _ref2$sort, client = _ref2.client;
_context2.prev = 1;
_context2.next = 4;
return client.search({
index: indexName,
size: size,
sort: sort,
body: {
query: {
match: {
commitHash: {
query: commitHashArray.join(" ")
}
}
}
}
});
case 4:
result = _context2.sent;
return _context2.abrupt("return", result);
case 8:
_context2.prev = 8;
_context2.t0 = _context2["catch"](1);
console.log("[Audit Trail] elasticsearch search error", _context2.t0);
return _context2.abrupt("return", null);
case 12:
case "end":
return _context2.stop();
}
}
}, _callee2, null, [[1, 8]]);
}));
return _elasticsearchSearch.apply(this, arguments);
}
function diffParser(diff, type) {
var change = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
if (diff !== null && _typeof__default['default'](diff) === "object") {
var keys = Object.keys(diff);
for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {
var key = _keys[_i];
if (key.toLowerCase() === type.toLowerCase()) {
diff = diff[key];
change[path.join(".")] = diff;
break;
} else {
diff[key] = diffParser(diff[key], type, change, [].concat(_toConsumableArray__default['default'](path), [key])).diff;
}
}
} else {
diff = diff[type];
}
return {
diff: diff,
change: change
};
}
function yamlLikeStringify(_ref) {
var input = _ref.input,
_ref$index = _ref.index,
index = _ref$index === void 0 ? 0 : _ref$index;
var result = "";
for (var i = 0; (_ref2 = i < ((_Object$keys = Object.keys(input)) === null || _Object$keys === void 0 ? void 0 : _Object$keys.length)) !== null && _ref2 !== void 0 ? _ref2 : 0; i++) {
var _ref2, _Object$keys, _Object$keys2;
var key = (_Object$keys2 = Object.keys(input)) === null || _Object$keys2 === void 0 ? void 0 : _Object$keys2[i];
if (___default['default'].isArrayLikeObject(input[key])) {
var tmp = [];
tmp.push(yamlLikeStringify({
input: input[key],
index: index + 1
}));
result = "".concat(result, "^").concat(index, "_").concat(encodeURIComponent(key), ":[").concat(tmp.join(","), "]$");
} else if (___default['default'].isObjectLike(input[key])) {
result = "".concat(result, "^").concat(index, "_").concat(encodeURIComponent(key), ":{").concat(yamlLikeStringify({
input: input[key],
index: index + 1
}), "}$");
console.log(input[key]);
} else {
result = "".concat(result, "^").concat(index, "_").concat(encodeURIComponent(key), ":").concat(encodeURIComponent(input[key]), "$");
}
}
return result;
}
function yamlLikeStringParser(_ref3) {
var _ref3$input = _ref3.input,
input = _ref3$input === void 0 ? "{}" : _ref3$input,
_ref3$index = _ref3.index,
index = _ref3$index === void 0 ? 0 : _ref3$index;
var result = {};
var regex = new RegExp("".concat(index, "_(.*?):(.*)"));
var searchTerm = "^".concat(index, "_");
var indexOfArray = [];
var _index = 0;
while (input.indexOf(searchTerm, _index) > -1) {
indexOfArray.push(input.indexOf(searchTerm, _index));
_index = input.indexOf(searchTerm, _index) + 1;
}
for (var i = 0; i < indexOfArray.length; i++) {
var substringEnd = indexOfArray[i + 1] || input.length - 1;
var _substring = input.substring(indexOfArray[i] + 1, substringEnd - 1);
var found = _substring.match(regex);
if (found && found.length > 0) {
if (found[2][found[2].length - 1] === "]") {
result[found[1]] = Object.values(yamlLikeStringParser({
input: found[2],
index: index + 1
}));
} else if (found[2][found[2].length - 1] === "}") {
result[found[1]] = yamlLikeStringParser({
input: found[2],
index: index + 1
});
} else {
result[found[1]] = decodeURIComponent(found[2]);
}
}
}
return result;
}
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(Object(source), true).forEach(function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var auditTrail = function auditTrail(options) {
// audit trail database info
this.auditTrailDBType = (options === null || options === void 0 ? void 0 : options.DBType) || "elasticsearch";
this.auditTrailHost = (options === null || options === void 0 ? void 0 : options.host) || "http://localhost:9200";
this.indexName = (options === null || options === void 0 ? void 0 : options.indexName) || "audit-trail";
this.ESinfo = options === null || options === void 0 ? void 0 : options.ESinfo; // custom database
this.customClient = options === null || options === void 0 ? void 0 : options.customClient;
this.customAddData = options === null || options === void 0 ? void 0 : options.customAddData;
this.customQueryFunction = options === null || options === void 0 ? void 0 : options.customQueryFunction; // target database (non audit trail database) manipulation (for revert)
this.databaseAddOneRowFunction = options === null || options === void 0 ? void 0 : options.databaseAddOneRowFunction;
this.databaseUpdateOneRowFunction = options === null || options === void 0 ? void 0 : options.databaseUpdateOneRowFunction;
this.databaseDeleteOneRowFunction = options === null || options === void 0 ? void 0 : options.databaseDeleteOneRowFunction;
this.databaseCustomFunction = options === null || options === void 0 ? void 0 : options.databaseCustomActionFunction;
if (this.auditTrailDBType === "elasticsearch") {
this.client = getESClient(_objectSpread$1({
endpoint: this.auditTrailHost
}, this.ESinfo));
} else if (this.auditTrailDBType === "CUSTOM") {
console.log("[Audit Trail] Custom DB Client");
}
};
function getRightmostIndexBeforeEnd(_ref) {
var _ref$input = _ref.input,
input = _ref$input === void 0 ? "" : _ref$input,
_ref$searchText = _ref.searchText,
searchText = _ref$searchText === void 0 ? "" : _ref$searchText,
_ref$index = _ref.index,
index = _ref$index === void 0 ? 0 : _ref$index,
end = _ref.end;
var i = 0;
while (i = input.indexOf(searchText, index)) {
if (i >= end || i === -1) {
break;
}
index = i + 1;
}
return index - 1;
}
function createTreeDiagram(_ref2) {
var commitHashMap = _ref2.commitHashMap,
_ref2$index = _ref2.index,
index = _ref2$index === void 0 ? 0 : _ref2$index,
_ref2$level = _ref2.level,
level = _ref2$level === void 0 ? 0 : _ref2$level,
_ref2$size = _ref2.size,
size = _ref2$size === void 0 ? 10 : _ref2$size,
_ref2$path = _ref2.path,
path = _ref2$path === void 0 ? "" : _ref2$path,
_ref2$onlyCurrentBran = _ref2.onlyCurrentBranch,
onlyCurrentBranch = _ref2$onlyCurrentBran === void 0 ? false : _ref2$onlyCurrentBran,
_ref2$before = _ref2.before,
before = _ref2$before === void 0 ? 5 : _ref2$before,
currentCommit = _ref2.currentCommit;
if (size <= 0) {
var _result2 = {};
___default['default'].set(_result2, path, {});
return _result2;
}
var currentIndex = index;
index = commitHashMap.indexOf("^".concat(level, "_"), index);
if (new RegExp('\\^[0-9]{1,}_').test(commitHashMap.substring(currentIndex + 2, index - 1))) {
// currentIndex + 2 for handling getRightmostIndexBeforeEnd case
var _result3 = {};
___default['default'].set(_result3, path, {});
return _result3;
}
if (index === -1) {
return createTreeDiagram({
commitHashMap: commitHashMap,
index: index,
level: level + 1,
size: 0,
path: path,
onlyCurrentBranch: onlyCurrentBranch,
before: before - 1
});
}
var result = {};
var commitHash = commitHashMap.substring(index + 1 + level.toString().length + 1, index + 1 + level.toString().length + 1 + 40);
if (path) {
path = "".concat(path, ".").concat(commitHash);
} else {
path = "".concat(commitHash);
}
if (onlyCurrentBranch && before > 0) {
var targetIndex = commitHashMap.indexOf("_".concat(currentCommit));
var closestIndex = getRightmostIndexBeforeEnd({
input: commitHashMap.substring(0, targetIndex),
searchText: "^".concat(level + 1, "_"),
index: index,
end: targetIndex
});
return createTreeDiagram({
commitHashMap: commitHashMap,
index: closestIndex,
level: level + 1,
size: size - 1,
path: path,
onlyCurrentBranch: onlyCurrentBranch,
before: before - 1,
currentCommit: currentCommit
});
}
var nextTwoIndex = commitHashMap.indexOf("^".concat(level + 2, "_"), index);
if (nextTwoIndex === -1) {
nextTwoIndex = commitHashMap.length;
}
var nextSameLevelIndex = commitHashMap.indexOf("^".concat(level, "_"), index + 1);
var _indexArray = [];
var _index = commitHashMap.indexOf("^".concat(level + 1, "_"), index);
while (_index !== -1 && _index < (nextSameLevelIndex != -1 ? nextSameLevelIndex : commitHashMap.length)) {
_indexArray.push(_index);
_index = commitHashMap.indexOf("^".concat(level + 1, "_"), _index + 1);
}
if (_indexArray.length > 1) {
// branch out --> array
for (var i = 0; i < _indexArray.length; i++) {
result = ___default['default'].merge(result, createTreeDiagram({
commitHashMap: commitHashMap,
index: _indexArray[i] - 1,
level: level + 1,
size: size - 1,
path: path,
onlyCurrentBranch: onlyCurrentBranch,
before: before - 1
}));
}
return result;
} else {
return createTreeDiagram({
commitHashMap: commitHashMap,
index: index,
level: level + 1,
size: size - 1,
path: path,
onlyCurrentBranch: onlyCurrentBranch,
before: before - 1
});
}
}
function createTreeDiagramD3(_x) {
return _createTreeDiagramD.apply(this, arguments);
}
function _createTreeDiagramD() {
_createTreeDiagramD = _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee11(_ref3) {
var commitHashMap, _ref3$index, index, _ref3$level, level, _ref3$size, size, _ref3$onlyCurrentBran, onlyCurrentBranch, _ref3$before, before, currentCommit, getCommitInfo, ignore, format, client, result, currentIndex, commitHash, _result$body$hits$hit3, _result$body3, _result$body3$hits, _result$body3$hits$hi, _result$body3$hits$hi2, _result, info, _iterator, _step, _info2, _ignore, _info, _tmp, _i5, _Object$entries, _Object$entries$_i, key, value, targetIndex, closestIndex, child, nextTwoIndex, nextSameLevelIndex, _indexArray, _index, i, _child, _child2;
return _regeneratorRuntime__default['default'].wrap(function _callee11$(_context12) {
while (1) {
switch (_context12.prev = _context12.next) {
case 0:
commitHashMap = _ref3.commitHashMap, _ref3$index = _ref3.index, index = _ref3$index === void 0 ? 0 : _ref3$index, _ref3$level = _ref3.level, level = _ref3$level === void 0 ? 0 : _ref3$level, _ref3$size = _ref3.size, size = _ref3$size === void 0 ? 10 : _ref3$size, _ref3$onlyCurrentBran = _ref3.onlyCurrentBranch, onlyCurrentBranch = _ref3$onlyCurrentBran === void 0 ? false : _ref3$onlyCurrentBran, _ref3$before = _ref3.before, before = _ref3$before === void 0 ? 5 : _ref3$before, currentCommit = _ref3.currentCommit, getCommitInfo = _ref3.getCommitInfo, ignore = _ref3.ignore, format = _ref3.format, client = _ref3.client;
result = {};
result.children = [];
currentIndex = index;
commitHash = commitHashMap.substring(index + 1 + level.toString().length + 1, index + 1 + level.toString().length + 1 + 40);
result.name = commitHash;
if (commitHash === currentCommit) {
result.currentCommit = true;
}
if (!getCommitInfo) {
_context12.next = 16;
break;
}
_context12.next = 10;
return queryElasticseaerch({
commitHashArray: [commitHash],
client: client
});
case 10:
_result = _context12.sent;
info = (_result$body$hits$hit3 = _result === null || _result === void 0 ? void 0 : (_result$body3 = _result.body) === null || _result$body3 === void 0 ? void 0 : (_result$body3$hits = _result$body3.hits) === null || _result$body3$hits === void 0 ? void 0 : (_result$body3$hits$hi = _result$body3$hits.hits) === null || _result$body3$hits$hi === void 0 ? void 0 : (_result$body3$hits$hi2 = _result$body3$hits$hi[0]) === null || _result$body3$hits$hi2 === void 0 ? void 0 : _result$body3$hits$hi2._source) !== null && _result$body$hits$hit3 !== void 0 ? _result$body$hits$hit3 : {};
_iterator = _createForOfIteratorHelper(ignore);
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
_ignore = _step.value;
if ((_info2 = info) !== null && _info2 !== void 0 && _info2[_ignore]) {
delete info[_ignore];
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
if (format === "text") {
_tmp = (_info = info) !== null && _info !== void 0 ? _info : {};
info = [];
for (_i5 = 0, _Object$entries = Object.entries(_tmp); _i5 < _Object$entries.length; _i5++) {
_Object$entries$_i = _slicedToArray__default['default'](_Object$entries[_i5], 2), key = _Object$entries$_i[0], value = _Object$entries$_i[1];
info.push("".concat(key, ": ").concat(value));
}
info = info.join("\n");
}
result.info = info;
case 16:
index = commitHashMap.indexOf("^".concat(level + 1, "_"), index);
if (!(new RegExp('\\^[0-9]{1,}_').test(commitHashMap.substring(currentIndex + 2, index - 1)) || index === -1 || size <= 0)) {
_context12.next = 20;
break;
}
// currentIndex + 2 for handling getRightmostIndexBeforeEnd case
// if have other level between current level & next level or no next level --> current level is branch out / head --> no children --> return
delete result.children;
return _context12.abrupt("return", result);
case 20:
if (!(onlyCurrentBranch && before > 0)) {
_context12.next = 28;
break;
}
targetIndex = commitHashMap.indexOf("_".concat(currentCommit));
closestIndex = getRightmostIndexBeforeEnd({
input: commitHashMap.substring(0, targetIndex),
searchText: "^".concat(level + 1, "_"),
index: index + 1,
end: targetIndex
});
_context12.next = 25;
return createTreeDiagramD3({
commitHashMap: commitHashMap,
index: closestIndex,
level: level + 1,
size: size - 1,
onlyCurrentBranch: onlyCurrentBranch,
before: before - 1,
getCommitInfo: getCommitInfo,
currentCommit: currentCommit,
ignore: ignore,
format: format,
client: client
});
case 25:
child = _context12.sent;
result.children.push(child);
return _context12.abrupt("return", result);
case 28:
// branch out checking
nextTwoIndex = commitHashMap.indexOf("^".concat(level + 2, "_"), index);
if (nextTwoIndex === -1) {
nextTwoIndex = commitHashMap.length;
}
nextSameLevelIndex = commitHashMap.indexOf("^".concat(level, "_"), index + 1);
_indexArray = [];
_index = commitHashMap.indexOf("^".concat(level + 1, "_"), index);
while (_index !== -1 && _index < (nextSameLevelIndex != -1 ? nextSameLevelIndex : commitHashMap.length)) {
_indexArray.push(_index);
_index = commitHashMap.indexOf("^".concat(level + 1, "_"), _index + 1);
}
if (!(_indexArray.length > 1)) {
_context12.next = 47;
break;
}
i = 0;
case 36:
if (!(i < _indexArray.length)) {
_context12.next = 44;
break;
}
_context12.next = 39;
return createTreeDiagramD3({
commitHashMap: commitHashMap,
index: _indexArray[i],
level: level + 1,
size: size - 1,
onlyCurrentBranch: onlyCurrentBranch,
before: before - 1,
getCommitInfo: getCommitInfo,
currentCommit: currentCommit,
ignore: ignore,
format: format,
client: client
});
case 39:
_child = _context12.sent;
result.children.push(_child);
case 41:
i++;
_context12.next = 36;
break;
case 44:
return _context12.abrupt("return", result);
case 47:
_context12.next = 49;
return createTreeDiagramD3({
commitHashMap: commitHashMap,
index: index,
level: level + 1,
size: size - 1,
onlyCurrentBranch: onlyCurrentBranch,
before: before - 1,
getCommitInfo: getCommitInfo,
currentCommit: currentCommit,
ignore: ignore,
format: format,
client: client
});
case 49:
_child2 = _context12.sent;
result.children.push(_child2);
return _context12.abrupt("return", result);
case 52:
case "end":
return _context12.stop();
}
}
}, _callee11);
}));
return _createTreeDiagramD.apply(this, arguments);
}
function queryElasticseaerch(_x2) {
return _queryElasticseaerch.apply(this, arguments);
}
function _queryElasticseaerch() {
_queryElasticseaerch = _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee12(_ref4) {
var commitHashArray, client, result;
return _regeneratorRuntime__default['default'].wrap(function _callee12$(_context13) {
while (1) {
switch (_context13.prev = _context13.next) {
case 0:
commitHashArray = _ref4.commitHashArray, client = _ref4.client;
_context13.next = 3;
return elasticsearchSearch({
commitHashArray: commitHashArray,
size: commitHashArray.length,
client: client
});
case 3:
result = _context13.sent;
return _context13.abrupt("return", result);
case 5:
case "end":
return _context13.stop();
}
}
}, _callee12);
}));
return _queryElasticseaerch.apply(this, arguments);
}
function addCurrentCommit(_ref5) {
var input = _ref5.input,
currentCommit = _ref5.currentCommit;
var result = {};
var inputKeys = Object.keys(input);
for (var i = 0; i < inputKeys.length; i++) {
var _tmp = addCurrentCommit({
input: input[inputKeys[i]],
currentCommit: currentCommit
});
if (currentCommit === inputKeys[i]) {
result[inputKeys[i]] = _objectSpread$1(_objectSpread$1({}, _tmp), {}, {
currentCommit: true
});
} else {
result[inputKeys[i]] = _objectSpread$1({}, _tmp);
}
}
return result;
}
function getCommitHashInfo(_x3) {
return _getCommitHashInfo.apply(this, arguments);
}
function _getCommitHashInfo() {
_getCommitHashInfo = _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee13(_ref6) {
var input, client, currentCommit, result, inputKeys, i, info, _tmp, _info$body, _info$body$hits, _info$body$hits$hits, _info$body$hits$hits$, _info$body2, _info$body2$hits, _info$body2$hits$hits, _info$body2$hits$hits2;
return _regeneratorRuntime__default['default'].wrap(function _callee13$(_context14) {
while (1) {
switch (_context14.prev = _context14.next) {
case 0:
input = _ref6.input, client = _ref6.client, currentCommit = _ref6.currentCommit;
result = {};
inputKeys = Object.keys(input);
i = 0;
case 4:
if (!(i < inputKeys.length)) {
_context14.next = 15;
break;
}
_context14.next = 7;
return queryElasticseaerch({
commitHashArray: [inputKeys[i]],
client: client
});
case 7:
info = _context14.sent;
_context14.next = 10;
return getCommitHashInfo({
input: input[inputKeys[i]],
client: client,
currentCommit: currentCommit
});
case 10:
_tmp = _context14.sent;
if (currentCommit === inputKeys[i]) {
result[inputKeys[i]] = _objectSpread$1(_objectSpread$1({}, _tmp), {}, {
info: info === null || info === void 0 ? void 0 : (_info$body = info.body) === null || _info$body === void 0 ? void 0 : (_info$body$hits = _info$body.hits) === null || _info$body$hits === void 0 ? void 0 : (_info$body$hits$hits = _info$body$hits.hits) === null || _info$body$hits$hits === void 0 ? void 0 : (_info$body$hits$hits$ = _info$body$hits$hits[0]) === null || _info$body$hits$hits$ === void 0 ? void 0 : _info$body$hits$hits$._source,
currentCommit: true
});
} else {
result[inputKeys[i]] = _objectSpread$1(_objectSpread$1({}, _tmp), {}, {
info: info === null || info === void 0 ? void 0 : (_info$body2 = info.body) === null || _info$body2 === void 0 ? void 0 : (_info$body2$hits = _info$body2.hits) === null || _info$body2$hits === void 0 ? void 0 : (_info$body2$hits$hits = _info$body2$hits.hits) === null || _info$body2$hits$hits === void 0 ? void 0 : (_info$body2$hits$hits2 = _info$body2$hits$hits[0]) === null || _info$body2$hits$hits2 === void 0 ? void 0 : _info$body2$hits$hits2._source
});
}
case 12:
i++;
_context14.next = 4;
break;
case 15:
return _context14.abrupt("return", result);
case 16:
case "end":
return _context14.stop();
}
}
}, _callee13);
}));
return _getCommitHashInfo.apply(this, arguments);
}
function getChanges(_ref7) {
var _changed$added, _changed$deleted;
var _ref7$changed = _ref7.changed,
changed = _ref7$changed === void 0 ? {
added: {},
deleted: {},
updated: {}
} : _ref7$changed,
revert = _ref7.revert;
var addedChange = diffParser((_changed$added = changed.added) !== null && _changed$added !== void 0 ? _changed$added : {}, "after");
var deletedChange = diffParser((_changed$deleted = changed.deleted) !== null && _changed$deleted !== void 0 ? _changed$deleted : {}, "before");
var updatedChange;
if (revert) {
var _changed$updated;
updatedChange = diffParser((_changed$updated = changed.updated) !== null && _changed$updated !== void 0 ? _changed$updated : {}, "before");
} else {
var _changed$updated2;
updatedChange = diffParser((_changed$updated2 = changed.updated) !== null && _changed$updated2 !== void 0 ? _changed$updated2 : {}, "after");
}
return {
addedChange: addedChange,
deletedChange: deletedChange,
updatedChange: updatedChange
};
}
function getShortestPath(_ref8) {
var _parseInt, _commitHashMap$match$, _commitHashMap$match, _parseInt2, _commitHashMap$match$2, _commitHashMap$match2;
var commitHashMap = _ref8.commitHashMap,
commitHash = _ref8.commitHash,
currentCommit = _ref8.currentCommit;
var currentLevel = (_parseInt = parseInt((_commitHashMap$match$ = (_commitHashMap$match = commitHashMap.match(new RegExp("\\^([0-9]+)_".concat(currentCommit)))) === null || _commitHashMap$match === void 0 ? void 0 : _commitHashMap$match[1]) !== null && _commitHashMap$match$ !== void 0 ? _commitHashMap$match$ : 0, 10)) !== null && _parseInt !== void 0 ? _parseInt : 0;
var targetLevel = (_parseInt2 = parseInt((_commitHashMap$match$2 = (_commitHashMap$match2 = commitHashMap.match(new RegExp("\\^([0-9]+)_".concat(commitHash)))) === null || _commitHashMap$match2 === void 0 ? void 0 : _commitHashMap$match2[1]) !== null && _commitHashMap$match$2 !== void 0 ? _commitHashMap$match$2 : 0, 10)) !== null && _parseInt2 !== void 0 ? _parseInt2 : 0;
var currentIndex = commitHashMap.indexOf("^".concat(currentLevel, "_").concat(currentCommit));
var targetIndex = commitHashMap.indexOf("^".concat(targetLevel, "_").concat(commitHash));
var forward = [];
var backward = [];
if (currentLevel > targetLevel) {
// current level revert to target level ---> same = end & different = find common point
var difference = currentLevel - targetLevel;
for (var i = 0; i < difference; i++) {
var _tmp = getRightmostIndexBeforeEnd({
input: commitHashMap.substring(0, currentIndex),
searchText: "^".concat(currentLevel - 1 - i, "_"),
end: currentIndex
});
backward.push(commitHashMap.substring(_tmp + 1 + (currentLevel - 1 - i).toString().length + 1, _tmp + 1 + (currentLevel - 1 - i).toString().length + 1 + 40));
}
if (backward[backward.length - 1] === commitHash) {
return {
backward: backward
};
}
var result = getShortestPath({
commitHashMap: commitHashMap.substring(0, Math.max(commitHashMap.indexOf("^".concat(currentLevel - difference, "_").concat(backward[backward.length - 1])) + 2 + (currentLevel - difference) + 40, targetIndex + 2 + targetLevel.toString().length + 40)),
commitHash: commitHash,
currentCommit: backward[backward.length - 1]
});
return {
forward: result.forward,
backward: backward.concat(result.backward)
};
} else if (currentLevel < targetLevel) {
var _result4$forward;
// target revert to same level --> same = end & diffent = find common point
forward.push(commitHash);
var _difference = targetLevel - currentLevel;
for (var _i = 0; _i < _difference; _i++) {
var _tmp2 = getRightmostIndexBeforeEnd({
input: commitHashMap.substring(0, targetIndex),
searchText: "^".concat(targetLevel - 1 - _i, "_"),
end: targetIndex
});
forward.push(commitHashMap.substring(_tmp2 + 1 + (targetLevel - 1 - _i).toString().length + 1, _tmp2 + 1 + (targetLevel - 1 - _i).toString().length + 1 + 40)); //reversed
}
if (forward[forward.length - 1] === currentCommit) {
return {
forward: forward
};
}
var _result4 = getShortestPath({
commitHashMap: commitHashMap.substring(0, Math.max(commitHashMap.indexOf("^".concat(targetLevel - _difference, "_").concat(forward[forward.length - 1])) + 2 + (targetLevel - _difference).toString().length + 40, currentIndex + 2 + currentLevel.toString().length + 40)),
commitHash: forward[forward.length - 1],
currentCommit: currentCommit
});
forward.pop();
return {
forward: forward.concat((_result4$forward = _result4.forward) !== null && _result4$forward !== void 0 ? _result4$forward : []),
backward: _result4.backward
};
} else if (currentLevel === targetLevel) {
if (currentIndex === targetIndex) {
return {};
} // both backward 10 --> check same or not --> same = remove duplicated value & diff = re run
for (var _i2 = 0; _i2 < 10; _i2++) {
var _tmp3 = getRightmostIndexBeforeEnd({
input: commitHashMap.substring(0, currentIndex),
searchText: "^".concat(currentLevel - 1 - _i2, "_"),
end: currentIndex
});
if (_tmp3 !== -1) {
backward.push(commitHashMap.substring(_tmp3 + 1 + (currentLevel - 1 - _i2).toString().length + 1, _tmp3 + 1 + (currentLevel - 1 - _i2).toString().length + 1 + 40));
} else {
break;
}
}
forward.push(commitHash);
for (var _i3 = 0; _i3 < 10; _i3++) {
var _tmp4 = getRightmostIndexBeforeEnd({
input: commitHashMap.substring(0, targetIndex),
searchText: "^".concat(targetLevel - 1 - _i3, "_"),
end: targetIndex
});
if (_tmp4 !== -1) {
forward.push(commitHashMap.substring(_tmp4 + 1 + (targetLevel - 1 - _i3).toString().length + 1, _tmp4 + 1 + (targetLevel - 1 - _i3).toString().length + 1 + 40));
} else {
break;
}
}
while (forward[forward.length - 2] === backward[backward.length - 2] && (backward[backward.length - 2] !== undefined || isNaN(backward[backward.length - 2]))) {
forward.pop();
backward.pop();
}
if (forward[forward.length - 1] === backward[backward.length - 1]) {
return {
forward: forward,
backward: backward
};
}
return getShortestPath({
commitHashMap: commitHashMap.substring(0, Math.max(forward[forward.length - 1], backward[backward.length - 1])),
commitHash: commitHashMap.substring(forward[forward.length - 1] + 1 + (targetLevel - 1 - 10).toString().length + 1, forward[forward.length - 1] + 1 + (targetLevel - 1 - 10).toString().length + 1 + 40),
currentCommit: commitHashMap.substring(backward[backward.length - 1] + 1 + (currentLevel - 1 - 10).toString().length + 1, backward[backward.length - 1] + 1 + (currentLevel - 1 - 10).toString().length + 1 + 40)
});
}
} // Get commit hash info by ID
auditTrail.prototype.queryByCommitHash = /*#__PURE__*/function () {
var _ref10 = _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee(_ref9) {
var _result$body, _result$body$hits, _result$body$hits$hit, _result$body$hits$hit2;
var commitHash, result;
return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
commitHash = _ref9.commitHash;
_context.next = 3;
return queryElasticseaerch({
commitHashArray: [commitHash],
client: this.client
});
case 3:
result = _context.sent;
return _context.abrupt("return", result === null || result === void 0 ? void 0 : (_result$body = result.body) === null || _result$body === void 0 ? void 0 : (_result$body$hits = _result$body.hits) === null || _result$body$hits === void 0 ? void 0 : (_result$body$hits$hit = _result$body$hits.hits) === null || _result$body$hits$hit === void 0 ? void 0 : (_result$body$hits$hit2 = _result$body$hits$hit[0]) === null || _result$body$hits$hit2 === void 0 ? void 0 : _result$body$hits$hit2._source);
case 5:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function (_x4) {
return _ref10.apply(this, arguments);
};
}(); // Get multiple commit hash info by IDs
auditTrail.prototype.batchQueryByCommitHash = /*#__PURE__*/function () {
var _ref12 = _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee2(_ref11) {
var _result$body2, _result$body2$hits, _result$body2$hits$hi;
var commitHashArray, result;
return _regeneratorRuntime__default['default'].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
commitHashArray = _ref11.commitHashArray;
_context2.next = 3;
return queryElasticseaerch({
commitHashArray: commitHashArray,
client: this.client
});
case 3:
result = _context2.sent;
return _context2.abrupt("return", result === null || result === void 0 ? void 0 : (_result$body2 = result.body) === null || _result$body2 === void 0 ? void 0 : (_result$body2$hits = _result$body2.hits) === null || _result$body2$hits === void 0 ? void 0 : (_result$body2$hits$hi = _result$body2$hits.hits) === null || _result$body2$hits$hi === void 0 ? void 0 : _result$body2$hits$hi.map(function (data) {
return data === null || data === void 0 ? void 0 : data._source;
}));
case 5:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
return function (_x5) {
return _ref12.apply(this, arguments);
};
}(); // Query for tree object array
auditTrail.prototype.query = /*#__PURE__*/function () {
var _ref14 = _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee3(_ref13) {
var _Object$keys, _parseInt3, _commitHashMap$match$3, _commitHashMap$match3;
var _ref13$commitHashMap, commitHashMap, _ref13$commitHash, commitHash, _ref13$before, before, _ref13$after, after, _ref13$onlyCurrentBra, onlyCurrentBranch, _ref13$getCommitInfo, getCommitInfo, commitMap, currentLevel, startingIndexArray, currentIndex, _index, index, realIndexArray, j, startingIndex, realStart, result;
return _regeneratorRuntime__default['default'].wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_ref13$commitHashMap = _ref13.commitHashMap, commitHashMap = _ref13$commitHashMap === void 0 ? "{}" : _ref13$commitHashMap, _ref13$commitHash = _ref13.commitHash, commitHash = _ref13$commitHash === void 0 ? "" : _ref13$commitHash, _ref13$before = _ref13.before, before = _ref13$before === void 0 ? 5 : _ref13$before, _ref13$after = _ref13.after, after = _ref13$after === void 0 ? 5 : _ref13$after, _ref13$onlyCurrentBra = _ref13.onlyCurrentBranch, onlyCurrentBranch = _ref13$onlyCurrentBra === void 0 ? false : _ref13$onlyCurrentBra, _ref13$getCommitInfo = _ref13.getCommitInfo, getCommitInfo = _ref13$getCommitInfo === void 0 ? true : _ref13$getCommitInfo;
commitMap = yamlLikeStringParser({
input: commitHashMap
});
if (!(((_Object$keys = Object.keys(commitMap)) === null || _Object$keys === void 0 ? void 0 : _Object$keys.length) === 0 || !commitHash || before === 0 && after === 0)) {
_context3.next = 5;
break;
}
console.log("CommitHashMap or commitHash empty or both before and after size set 0");
return _context3.abrupt("return", []);
case 5:
currentLevel = (_parseInt3 = parseInt((_commitHashMap$match$3 = (_commitHashMap$match3 = commitHashMap.match(new RegExp("\\^([0-9]+)_".concat(commitHash)))) === null || _commitHashMap$match3 === void 0 ? void 0 : _commitHashMap$match3[1]) !== null && _commitHashMap$match$3 !== void 0 ? _commitHashMap$match$3 : 0, 10)) !== null && _parseInt3 !== void 0 ? _parseInt3 : 0;
startingIndexArray = [];
currentIndex = commitHashMap.indexOf("^".concat(currentLevel, "_").concat(commitHash));
if (!onlyCurrentBranch) {
_index = commitHashMap.indexOf("^".concat(currentLevel - before > 0 ? currentLevel - before : 0, "_"));
while (_index != -1) {
startingIndexArray.push(_index);
_index = commitHashMap.indexOf("^".concat(currentLevel - before > 0 ? currentLevel - before : 0, "_"), _index + 1);
}
} else {
index = getRightmostIndexBeforeEnd({
input: commitHashMap.substring(0, currentIndex),
searchText: "^".concat(currentIndex - before, "_"),
end: currentIndex
});
startingIndexArray = [index];
}
realIndexArray = [];
j = 0;
case 11:
if (!(j < startingIndexArray.length)) {
_context3.next = 26;
break;
}
startingIndex = startingIndexArray[j];
realStart = currentLevel - before > 0 ? currentLevel - before : 0;
result = createTreeDiagram({
commitHashMap: commitHashMap,
index: startingIndex,
level: realStart,
size: before + after,
path: "",
onlyCurrentBranch: onlyCurrentBranch,
before: before > currentLevel ? currentLevel : before,
currentCommit: commitHash
});
if (!getCommitInfo) {
_context3.next = 21;
break;
}
_context3.next = 18;
return getCommitHashInfo({
input: result,
client: this.client,
currentCommit: commitHash
});
case 18:
result = _context3.sent;
_context3.next = 22;
break;
case 21:
result = addCurrentCommit({
input: result,
currentCommit: commitHash
});
case 22:
realIndexArray.push(result);
case 23:
j++;
_context3.next = 11;
break;
case 26:
return _context3.abrupt("return", realIndexArray);
case 27:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
return function (_x6) {
return _ref14.apply(this, arguments);
};
}(); // Query for D3 tree object array
auditTrail.prototype.queryD3 = /*#__PURE__*/function () {
var _ref16 = _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee4(_ref15) {
var _Object$keys2, _parseInt4, _commitHashMap$match$4, _commitHashMap$match4;
var _ref15$commitHashMap, commitHashMap, _ref15$commitHash, commitHash, _ref15$before, before, _ref15$after, after, _ref15$onlyCurrentBra, onlyCurrentBranch, _ref15$getCommitInfo, getCommitInfo, _ref15$ignore, ignore, _ref15$format, format, commitMap, currentLevel, startingIndexArray, currentIndex, _index, index, realIndexArray, j, startingIndex, realStart, result;
return _regeneratorRuntime__default['default'].wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_ref15$commitHashMap = _ref15.commitHashMap, commitHashMap = _ref15$commitHashMap === void 0 ? "{}" : _ref15$commitHashMap, _ref15$commitHash = _ref15.commitHash, commitHash = _ref15$commitHash === void 0 ? "" : _ref15$commitHash, _ref15$before = _ref15.before, before = _ref15$before === void 0 ? 5 : _ref15$before, _ref15$after = _ref15.after, after = _ref15$after === void 0 ? 5 : _ref15$after, _ref15$onlyCurrentBra = _ref15.onlyCurrentBranch, onlyCurrentBranch = _ref15$onlyCurrentBra === void 0 ? false : _ref15$onlyCurrentBra, _ref15$getCommitInfo = _ref15.getCommitInfo, getCommitInfo = _ref15$getCommitInfo === void 0 ? true : _ref15$getCommitInfo, _ref15$ignore = _ref15.ignore, ignore = _ref15$ignore === void 0 ? [] : _ref15$ignore, _ref15$format = _ref15.format, format = _ref15$format === void 0 ? "object" : _ref15$format;
if (typeof ignore === "string") {
ignore = [ignore];
}
commitMap = yamlLikeStringParser({
input: commitHashMap
});
if (!(((_Object$keys2 = Object.keys(commitMap)) === null || _Object$keys2 === void 0 ? void 0 : _Object$keys2.length) === 0 || !commitHash || before === 0 && after === 0)) {
_context4.next = 6;
break;
}
console.log("CommitHashMap or commitHash empty or both before and after size set 0");
return _context4.abrupt("return", []);
case 6:
currentLevel = (_parseInt4 = parseInt((_commitHashMap$match$4 = (_commitHashMap$match4 = commitHashMap.match(new RegExp("\\^([0-9]+)_".concat(commitHash)))) === null || _commitHashMap$match4 === void 0 ? void 0 : _commitHashMap$match4[1]) !== null && _commitHashMap$match$4 !== void 0 ? _commitHashMap$match$4 : 0, 10)) !== null && _parseInt4 !== void 0 ? _parseInt4 : 0;
startingIndexArray = [];
currentIndex = commitHashMap.indexOf("^".concat(currentLevel, "_").concat(commitHash));
if (!onlyCurrentBranch) {
_index = commitHashMap.indexOf("^".concat(currentLevel - before > 0 ? currentLevel - before : 0, "_"));
while (_index != -1) {
startingIndexArray.push(_index);
_index = commitHashMap.indexOf("^".concat(currentLevel - before > 0 ? currentLevel - before : 0, "_"), _index + 1);
}
} else {
index = getRightmostIndexBeforeEnd({
input: commitHashMap.substring(0, currentIndex),
searchText: "^".concat(currentLevel - before, "_"),
end: currentIndex
});
startingIndexArray = [index];
}
realIndexArray = [];
j = 0;
case 12:
if (!(j < startingIndexArray.length)) {
_context4.next = 22;
break;
}
startingIndex = startingIndexArray[j] !== -1 ? startingIndexArray[j] : currentIndex;
realStart = currentLevel - before > 0 ? currentLevel - before : 0; // create tree diagram with starting node starting le