UNPKG

diffusion

Version:

Diffusion JavaScript client

67 lines (50 loc) 1.97 kB
var RangeQueryParameters = require('features/time-series/range-query-parameters'); var Long = require('long'); function nonNull(e) { return !!e; } function comparingSequenceNumbers(e1, e2) { return e1.originalEvent.sequence !== e2.originalEvent.sequence ? e1.originalEvent.sequence - e2.originalEvent.sequence : e1.sequence - e2.sequence; } function replaceWithLatest(allEvents) { var latestByOriginalSequence = {}; allEvents.forEach(function(e) { var k = e.originalEvent.sequence; if (!latestByOriginalSequence[k] || latestByOriginalSequence[k].sequence.toNumber() < e.sequence.toNumber()) { latestByOriginalSequence[k] = e; } }); return function(e) { var originalSequence = e.originalEvent.sequence; var latest = latestByOriginalSequence[originalSequence]; if (!latest) { return null; } if (!e.isEditEvent) { delete latestByOriginalSequence[originalSequence]; return latest; } else if (e.sequence.equals(latest.sequence)) { delete latestByOriginalSequence[originalSequence]; return e; } else { return null; } }; } function QueryResult(selectedCount, eventCount, streamStructure, events) { this.events = events; this.selectedCount = selectedCount.toNumber(); this.isComplete = (selectedCount.equals(eventCount)); this.streamStructure = streamStructure; this.merge = function(other) { var merged = events.concat(other.events) .sort(comparingSequenceNumbers) .map(replaceWithLatest(events.concat(other.events))) .filter(nonNull); var count = Long.fromNumber(merged.length); return new QueryResult(count, count, RangeQueryParameters.StreamStructure.VALUE_EVENT_STREAM, merged); }; } module.exports = QueryResult;