@codebit-programando-solucoes/sequelize-paper-trail
Version:
Track changes to your Sequelize models data. Perfect for auditing or versioning.
117 lines (90 loc) • 2.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _deepDiff = require("deep-diff");
var _lodash = _interopRequireDefault(require("lodash"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const capitalizeFirstLetter = string => string.charAt(0).toUpperCase() + string.slice(1);
const toUnderscored = obj => {
_lodash.default.forEach(obj, (k, v) => {
obj[k] = v.replace(/(?:^|\.?)([A-Z])/g, (x, y) => `_${y.toLowerCase()}`).replace(/^_/, '');
});
return obj;
};
const calcDelta = (current, next, exclude, strict) => {
const DEBUG = false;
if (DEBUG) {
console.log('current', current);
console.log('next', next);
console.log('exclude', exclude);
}
const di = (0, _deepDiff.diff)(current, next);
if (DEBUG) {
console.log('di', di);
let diffs2 = [];
if (di) {
diffs2 = di.map(i => JSON.parse(JSON.stringify(i).replace('"__data",', '')));
}
console.log('diffs2', diffs2);
console.log('filter1', diffs2.filter(i => i.path.join(',').indexOf('_') === -1));
console.log('filter2', diffs2.filter(i => exclude.every(x => i.path.indexOf(x) === -1)));
}
let diffs = [];
if (di) {
diffs = di.map(i => JSON.parse(JSON.stringify(i).replace('"__data",', ''))).filter(i => {
// return i.path.join(",").indexOf("_") === -1;
// console.log('i', i)
// if (!strict && i.kind === 'E') {
// // console.log('str & num', i.lhs == i.rhs)
// // console.log('str & num (strict)', i.lhs === i.rhs)
// if (i.lhs != i.rhs) {
// return i;
// }
// } else {
// return i;
// }
if (!strict && i.kind === 'E') {
// eslint-disable-next-line eqeqeq
if (i.lhs != i.rhs) return i;
} else return i;
return false;
}).filter(i => exclude.every(x => i.path.indexOf(x) === -1));
}
if (diffs.length > 0) {
return diffs;
}
return null;
};
const diffToString = val => {
if (typeof val === 'undefined' || val === null) {
return '';
}
if (val === true) {
return '1';
}
if (val === false) {
return '0';
}
if (typeof val === 'string') {
return val;
}
if (!Number.isNaN(Number(val))) {
return `${String(val)}`;
}
if ((typeof val === 'undefined' ? 'undefined' : typeof val) === 'object') {
return `${JSON.stringify(val)}`;
}
if (Array.isArray(val)) {
return `${JSON.stringify(val)}`;
}
return '';
};
var _default = {
capitalizeFirstLetter,
toUnderscored,
calcDelta,
diffToString
};
exports.default = _default;