UNPKG

@gleif-it/did-webs-ts

Version:
67 lines (66 loc) 2.31 kB
"use strict"; 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;