| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /* eslint-disable
- no-unmodified-loop-condition,
- no-unused-vars,
- */
- // TODO: This file was created by bulk-decaffeinate.
- // Fix any style issues and re-enable lint.
- /*
- * decaffeinate suggestions:
- * DS101: Remove unnecessary use of Array.from
- * DS102: Remove unnecessary code created because of implicit returns
- * DS207: Consider shorter variations of null checks
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
- */
- let ProjectIterator
- const Heap = require('heap')
- module.exports =
- ProjectIterator =
- ProjectIterator =
- class ProjectIterator {
- constructor(packs, before, getPackByIdFn) {
- this.before = before
- this.getPackByIdFn = getPackByIdFn
- const byEndTs = (a, b) =>
- b.meta.end_ts - a.meta.end_ts || a.fromIndex - b.fromIndex
- this.packs = packs.slice().sort(byEndTs)
- this.queue = new Heap(byEndTs)
- }
- next(callback) {
- // what's up next
- // console.log ">>> top item", iterator.packs[0]
- const iterator = this
- const { before } = this
- const { queue } = iterator
- const opsToReturn = []
- let nextPack = iterator.packs[0]
- let lowWaterMark =
- (nextPack != null ? nextPack.meta.end_ts : undefined) || 0
- let nextItem = queue.peek()
- // console.log "queue empty?", queue.empty()
- // console.log "nextItem", nextItem
- // console.log "nextItem.meta.end_ts", nextItem?.meta.end_ts
- // console.log "lowWaterMark", lowWaterMark
- while (
- before != null &&
- (nextPack != null ? nextPack.meta.start_ts : undefined) > before
- ) {
- // discard pack that is outside range
- iterator.packs.shift()
- nextPack = iterator.packs[0]
- lowWaterMark =
- (nextPack != null ? nextPack.meta.end_ts : undefined) || 0
- }
- if (
- (queue.empty() ||
- (nextItem != null ? nextItem.meta.end_ts : undefined) <=
- lowWaterMark) &&
- nextPack != null
- ) {
- // retrieve the next pack and populate the queue
- return this.getPackByIdFn(
- nextPack.project_id,
- nextPack.doc_id,
- nextPack._id,
- function (err, pack) {
- if (err != null) {
- return callback(err)
- }
- iterator.packs.shift() // have now retrieved this pack, remove it
- // console.log "got pack", pack
- for (const op of Array.from(pack.pack)) {
- // console.log "adding op", op
- if (before == null || op.meta.end_ts < before) {
- op.doc_id = nextPack.doc_id
- op.project_id = nextPack.project_id
- queue.push(op)
- }
- }
- // now try again
- return iterator.next(callback)
- }
- )
- }
- // console.log "nextItem", nextItem, "lowWaterMark", lowWaterMark
- while (
- nextItem != null &&
- (nextItem != null ? nextItem.meta.end_ts : undefined) > lowWaterMark
- ) {
- opsToReturn.push(nextItem)
- queue.pop()
- nextItem = queue.peek()
- }
- // console.log "queue empty?", queue.empty()
- // console.log "nextPack", nextPack?
- if (queue.empty() && nextPack == null) {
- // got everything
- iterator._done = true
- }
- return callback(null, opsToReturn)
- }
- done() {
- return this._done
- }
- }
|