@gleif-it/did-webs-ts
Version:
did-webs typescript library
67 lines (66 loc) • 2.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sortKeyEventStream = exports._fancyPrintSortedEvents = void 0;
// Add type guard for key events
const hasAid = (event) => {
return 'i' in event;
};
const isSequencedEvent = (event) => {
return 's' in event;
};
// custom print function for sorted events
const _fancyPrintSortedEvents = (sorted, depth = 0) => {
const indent = (level) => ' '.repeat(level * 2);
const printObject = (obj, currentDepth) => {
if (obj === null || typeof obj !== 'object') {
return String(obj);
}
if (Array.isArray(obj)) {
return ('[\n' +
obj
.map((item) => indent(currentDepth + 1) + printObject(item, currentDepth + 1))
.join(',\n') +
'\n' +
indent(currentDepth) +
']');
}
const entries = Object.entries(obj);
return ('{\n' +
entries
.map(([key, value]) => indent(currentDepth + 1) +
key +
': ' +
printObject(value, currentDepth + 1))
.join(',\n') +
'\n' +
indent(currentDepth) +
'}');
};
const output = Array.from(sorted.entries())
.map(([aid, events]) => indent(depth) + aid + ': ' + printObject(events, depth + 1))
.join('\n');
console.log(output);
};
exports._fancyPrintSortedEvents = _fancyPrintSortedEvents;
const sortKeyEventStream = (events) => {
const sorted = new Map();
events.forEach((event) => {
// Only include events that have an 'i' field and a sequence number 's'
if (!hasAid(event) || !isSequencedEvent(event))
return;
const aid = event.i;
if (!sorted.has(aid)) {
sorted.set(aid, []);
}
const eventsForAid = sorted.get(aid);
if (eventsForAid) {
eventsForAid.push(event);
}
});
// For each AID, sort events by sequence number ('s') in descending order (largest first)
sorted.forEach((eventList, aid) => {
sorted.set(aid, eventList.sort((a, b) => Number(b.s) - Number(a.s)));
});
return sorted;
};
exports.sortKeyEventStream = sortKeyEventStream;