txho
Version:
Get a Bitcoin transaction as JSON for CLI and node
54 lines (53 loc) • 2.25 kB
JavaScript
;
exports.__esModule = true;
var recursiveCloneAndFilter = function (object, predicate, objectPath, knownObjects) {
if (objectPath === void 0) { objectPath = []; }
if (knownObjects === void 0) { knownObjects = []; }
if (object && !knownObjects.includes(object) && typeof object === 'object') {
if (object.constructor && object.constructor.name === 'Object') {
var currentknownObjects_1 = knownObjects.concat([object]);
var copy_1 = {};
Object.keys(object).forEach(function (key) {
var value = object[key];
var currentPath = objectPath.concat(key);
if (predicate(currentPath, value)) {
copy_1[key] = recursiveCloneAndFilter(value, predicate, currentPath, currentknownObjects_1);
}
});
return copy_1;
}
else if (Array.isArray(object)) {
var copy_2 = [];
object.forEach(function (value, index) {
copy_2[index] = recursiveCloneAndFilter(value, predicate, objectPath, knownObjects);
});
return copy_2;
}
}
return object;
};
var arrayStartsWithArray = function (a, b) {
return (b.filter(function (element, index) {
return a[index] !== b[index];
}).length === 0);
};
exports["default"] = (function (object, projection) {
var defaultPredicate = !Object.values(projection).includes(1);
return recursiveCloneAndFilter(object, function (cpath) {
var filteredPaths = Object.keys(projection).filter(function (ppathString) {
var cpathString = cpath.join('.');
var ppath = ppathString.split('.');
if (arrayStartsWithArray(ppath, cpath) || arrayStartsWithArray(cpath, ppath)) {
if (defaultPredicate) {
return ppathString === cpathString && !projection[ppathString] === defaultPredicate;
}
return ppathString === cpathString || !projection[ppathString] === defaultPredicate;
}
return false;
});
if (filteredPaths.length) {
return !defaultPredicate;
}
return defaultPredicate;
});
});