@dxos/feed-store 0.7.5-labs.e27f9b9 → 0.7.5-main.2567c87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs +40 -9
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +40 -9
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +40 -9
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/feed-set-iterator.d.ts +6 -0
- package/dist/types/src/feed-set-iterator.d.ts.map +1 -1
- package/package.json +17 -17
- package/src/feed-set-iterator.ts +21 -0
|
@@ -378,9 +378,10 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
378
378
|
});
|
|
379
379
|
this._subscriptions = new EventSubscriptions();
|
|
380
380
|
this.stalled = new Event2();
|
|
381
|
+
this._reiterateBlocks = [];
|
|
381
382
|
invariant3(_selector, void 0, {
|
|
382
383
|
F: __dxlog_file3,
|
|
383
|
-
L:
|
|
384
|
+
L: 61,
|
|
384
385
|
S: this,
|
|
385
386
|
A: [
|
|
386
387
|
"_selector",
|
|
@@ -389,7 +390,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
389
390
|
});
|
|
390
391
|
invariant3(options, void 0, {
|
|
391
392
|
F: __dxlog_file3,
|
|
392
|
-
L:
|
|
393
|
+
L: 62,
|
|
393
394
|
S: this,
|
|
394
395
|
A: [
|
|
395
396
|
"options",
|
|
@@ -420,12 +421,13 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
420
421
|
}));
|
|
421
422
|
}
|
|
422
423
|
reiterateBlock(block) {
|
|
424
|
+
this._reiterateBlocks.push(block);
|
|
423
425
|
this._trigger.wake();
|
|
424
426
|
}
|
|
425
427
|
async addFeed(feed) {
|
|
426
428
|
invariant3(!this._feedQueues.has(feed.key), `Feed already added: ${feed.key}`, {
|
|
427
429
|
F: __dxlog_file3,
|
|
428
|
-
L:
|
|
430
|
+
L: 98,
|
|
429
431
|
S: this,
|
|
430
432
|
A: [
|
|
431
433
|
"!this._feedQueues.has(feed.key)",
|
|
@@ -434,7 +436,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
434
436
|
});
|
|
435
437
|
invariant3(feed.properties.opened, void 0, {
|
|
436
438
|
F: __dxlog_file3,
|
|
437
|
-
L:
|
|
439
|
+
L: 99,
|
|
438
440
|
S: this,
|
|
439
441
|
A: [
|
|
440
442
|
"feed.properties.opened",
|
|
@@ -445,7 +447,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
445
447
|
feedKey: feed.key
|
|
446
448
|
}, {
|
|
447
449
|
F: __dxlog_file3,
|
|
448
|
-
L:
|
|
450
|
+
L: 100,
|
|
449
451
|
S: this,
|
|
450
452
|
C: (f, a) => f(...a)
|
|
451
453
|
});
|
|
@@ -472,12 +474,35 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
472
474
|
await Promise.all(Array.from(this._feedQueues.values()).map((queue) => queue.close()));
|
|
473
475
|
this._trigger.wake();
|
|
474
476
|
}
|
|
477
|
+
_getNextBlockForReiteration() {
|
|
478
|
+
const block = this._reiterateBlocks.shift();
|
|
479
|
+
invariant3(block, void 0, {
|
|
480
|
+
F: __dxlog_file3,
|
|
481
|
+
L: 139,
|
|
482
|
+
S: this,
|
|
483
|
+
A: [
|
|
484
|
+
"block",
|
|
485
|
+
""
|
|
486
|
+
]
|
|
487
|
+
});
|
|
488
|
+
log3("reiterate", {
|
|
489
|
+
key: block?.feedKey.toHex(),
|
|
490
|
+
seq: block?.seq
|
|
491
|
+
}, {
|
|
492
|
+
F: __dxlog_file3,
|
|
493
|
+
L: 140,
|
|
494
|
+
S: this,
|
|
495
|
+
C: (f, a) => f(...a)
|
|
496
|
+
});
|
|
497
|
+
return block;
|
|
498
|
+
}
|
|
475
499
|
/**
|
|
476
500
|
* Gets the next block from the selected queue.
|
|
477
501
|
*/
|
|
478
502
|
async _nextBlock() {
|
|
479
503
|
let t;
|
|
480
504
|
while (this._running) {
|
|
505
|
+
let stalled = false;
|
|
481
506
|
const queues = Array.from(this._feedQueues.values());
|
|
482
507
|
const blocks = queues.map((queue) => queue.peek()).filter(isNotNullOrUndefined);
|
|
483
508
|
if (blocks.length) {
|
|
@@ -487,7 +512,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
487
512
|
blocks
|
|
488
513
|
}, {
|
|
489
514
|
F: __dxlog_file3,
|
|
490
|
-
L:
|
|
515
|
+
L: 158,
|
|
491
516
|
S: this,
|
|
492
517
|
C: (f, a) => f(...a)
|
|
493
518
|
});
|
|
@@ -496,6 +521,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
496
521
|
t = setTimeout(() => {
|
|
497
522
|
this.stalled.emit(this);
|
|
498
523
|
this._trigger.wake();
|
|
524
|
+
stalled = true;
|
|
499
525
|
}, this.options.stallTimeout);
|
|
500
526
|
}
|
|
501
527
|
} else {
|
|
@@ -509,7 +535,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
509
535
|
const queue = this._feedQueues.get(blocks[idx].feedKey);
|
|
510
536
|
log3("popping", queue.toJSON(), {
|
|
511
537
|
F: __dxlog_file3,
|
|
512
|
-
L:
|
|
538
|
+
L: 179,
|
|
513
539
|
S: this,
|
|
514
540
|
C: (f, a) => f(...a)
|
|
515
541
|
});
|
|
@@ -517,7 +543,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
517
543
|
const message = await queue.pop();
|
|
518
544
|
invariant3(message === blocks[idx], void 0, {
|
|
519
545
|
F: __dxlog_file3,
|
|
520
|
-
L:
|
|
546
|
+
L: 182,
|
|
521
547
|
S: this,
|
|
522
548
|
A: [
|
|
523
549
|
"message === blocks[idx]",
|
|
@@ -530,14 +556,19 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
530
556
|
feedKey: queue.feed.key
|
|
531
557
|
}, {
|
|
532
558
|
F: __dxlog_file3,
|
|
533
|
-
L:
|
|
559
|
+
L: 186,
|
|
534
560
|
S: this,
|
|
535
561
|
C: (f, a) => f(...a)
|
|
536
562
|
});
|
|
537
563
|
}
|
|
538
564
|
}
|
|
565
|
+
} else if (this._reiterateBlocks.length) {
|
|
566
|
+
return this._getNextBlockForReiteration();
|
|
539
567
|
}
|
|
540
568
|
await this._trigger.wait();
|
|
569
|
+
if (stalled && this._reiterateBlocks.length) {
|
|
570
|
+
return this._getNextBlockForReiteration();
|
|
571
|
+
}
|
|
541
572
|
}
|
|
542
573
|
}
|
|
543
574
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/feed-iterator.ts", "../../../src/feed-queue.ts", "../../../src/feed-set-iterator.ts", "../../../src/feed-writer.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport safeRace from 'race-as-promised';\n\nimport { Trigger } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { FeedQueue } from './feed-queue';\nimport { type FeedWrapper } from './feed-wrapper';\nimport { type FeedBlock } from './types';\n\n/**\n * Base class for an async iterable feed.\n */\nexport abstract class AbstractFeedIterator<T> implements AsyncIterable<FeedBlock<T>> {\n private readonly _stopTrigger = new Trigger();\n\n protected _open = false;\n protected _running = false;\n\n toJSON() {\n return {\n open: this.isOpen,\n running: this.isRunning,\n };\n }\n\n get isOpen() {\n return this._open;\n }\n\n get isRunning() {\n return this._running;\n }\n\n async open() {\n if (!this._open) {\n log('opening...');\n await this._onOpen();\n this._open = true;\n\n await this.start();\n log('opened');\n }\n }\n\n async close() {\n if (this._open) {\n log('closing...');\n await this.stop();\n\n await this._onClose();\n this._open = false;\n log('closed');\n }\n }\n\n async start() {\n invariant(this._open);\n if (!this._running) {\n this._running = true;\n }\n }\n\n async stop() {\n invariant(this._open);\n if (this._running) {\n this._running = false;\n this._stopTrigger.wake();\n }\n }\n\n //\n // AsyncIterable\n //\n\n [Symbol.asyncIterator]() {\n return this._generator();\n }\n\n async *_generator() {\n log('started');\n while (this._running) {\n // https://github.com/nodejs/node/issues/17469\n const block = await safeRace([this._stopTrigger.wait(), this._nextBlock()]);\n\n if (block === undefined) {\n break;\n }\n\n yield block;\n }\n\n log('stopped');\n }\n\n abstract _onOpen(): Promise<void>;\n abstract _onClose(): Promise<void>;\n abstract _nextBlock(): Promise<FeedBlock<T> | undefined>;\n}\n\n/**\n * Iterator that reads blocks from a single feed.\n */\nexport class FeedIterator<T extends {}> extends AbstractFeedIterator<T> {\n private readonly _queue: FeedQueue<T>;\n\n constructor(private readonly _feed: FeedWrapper<T>) {\n super();\n this._queue = new FeedQueue<T>(this._feed);\n }\n\n override async _onOpen(): Promise<void> {\n await this._queue.open();\n }\n\n override async _onClose(): Promise<void> {\n await this._queue.close();\n }\n\n override async _nextBlock(): Promise<FeedBlock<T> | undefined> {\n return this._queue.pop();\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { inspect } from 'node:util';\nimport { Writable } from 'streamx';\n\nimport { Event, latch, Trigger } from '@dxos/async';\nimport { inspectObject } from '@dxos/debug';\nimport type { ReadStreamOptions } from '@dxos/hypercore';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { type FeedWrapper } from './feed-wrapper';\nimport { type FeedBlock } from './types';\n\nexport const defaultReadStreamOptions: ReadStreamOptions = {\n live: true, // Keep reading until closed.\n batch: 1024, // Read in batches.\n};\n\nexport type FeedQueueOptions = {};\n\n/**\n * Async queue using an AsyncIterator created from a hypercore.\n */\nexport class FeedQueue<T extends {}> {\n public updated = new Event<FeedQueue<T>>();\n\n private readonly _messageTrigger = new Trigger<FeedBlock<T>>({\n autoReset: true,\n });\n\n private _feedConsumer?: Writable = undefined;\n private _next?: () => void;\n private _currentBlock?: FeedBlock<T> = undefined;\n private _index = -1;\n\n // prettier-ignore\n constructor(\n private readonly _feed: FeedWrapper<T>,\n private readonly _options: FeedQueueOptions = {},\n ) {}\n\n [inspect.custom]() {\n return inspectObject(this);\n }\n\n toJSON() {\n return {\n feedKey: this._feed.key,\n index: this.index,\n length: this.length,\n open: this.isOpen,\n };\n }\n\n get feed() {\n return this._feed;\n }\n\n get isOpen(): boolean {\n return Boolean(this._feedConsumer);\n }\n\n get length(): number {\n return this._feed.properties.length;\n }\n\n /**\n * Index (seq) of the NEXT block to be read, or -1 if not open.\n */\n get index() {\n return this._index;\n }\n\n /**\n * Opens (or reopens) the queue.\n * @param options.start Starting index. First mutation to be read would have `seq == options.start`.\n */\n async open(options: ReadStreamOptions = {}) {\n if (this.isOpen) {\n // TODO(burdon): Warn if re-opening (e.g., with different starting point).\n return;\n }\n\n this._index = options.start ?? 0;\n // if (this._index !== 0) {\n // console.warn('Start index not yet supported.');\n // }\n\n log('opening', { feedKey: this._feed.key });\n\n // TODO(burdon): Open with starting range.\n const opts = Object.assign({}, defaultReadStreamOptions, options);\n const feedStream = this._feed.createReadableStream(opts);\n\n this._feedConsumer = new Writable({\n write: (data: any, next: () => void) => {\n this._next = () => {\n this._next = undefined;\n this._currentBlock = undefined;\n this._index++;\n next();\n };\n\n this._currentBlock = {\n feedKey: this._feed.key,\n seq: this._index,\n data,\n };\n\n this._messageTrigger.wake(this._currentBlock);\n this.updated.emit(this);\n },\n });\n\n const onClose = () => {\n this.feed.core.off('close', onClose);\n this._feedConsumer?.off('close', onClose);\n this._feedConsumer?.off('error', onError);\n\n this._destroyConsumer();\n };\n\n const onError = (err?: Error) => {\n if (!err) {\n return;\n }\n\n if (err.message === 'Writable stream closed prematurely' || err.message === 'Feed is closed') {\n return;\n }\n\n log.catch(err, { feedKey: this._feed.key });\n };\n\n // Called if feed is closed externally.\n this._feed.core.once('close', onClose);\n this._feedConsumer.on('error', onError);\n\n // Called when queue is closed. Throws exception if waiting for `pop`.\n this._feedConsumer.once('close', onClose);\n\n // Pipe readable stream into writable consumer.\n feedStream.pipe(this._feedConsumer, (err) => {\n if (err) {\n onError(err);\n }\n this._destroyConsumer();\n });\n\n log('opened');\n }\n\n /**\n * Closes the queue.\n */\n async close() {\n if (this.isOpen) {\n invariant(this._feedConsumer);\n invariant(!this._feed.properties.closed);\n\n log('closing', { feedKey: this._feed.key });\n const [closed, setClosed] = latch();\n this._feedConsumer.once('close', setClosed);\n this._feedConsumer.destroy();\n this._next?.(); // Release any message currently in the queue (otherwise destroy will block).\n await closed();\n log('closed');\n }\n }\n\n /**\n * Get the block at the head of the queue without removing it.\n */\n peek(): FeedBlock<T> | undefined {\n return this._currentBlock;\n }\n\n /**\n * Pop block at the head of the queue.\n */\n async pop(): Promise<FeedBlock<T>> {\n if (!this.isOpen) {\n throw new Error(`Queue closed: ${this.feed.key.truncate()}`);\n }\n\n let block = this.peek();\n if (!block) {\n block = await this._messageTrigger.wait();\n }\n\n if (block) {\n this._next?.();\n }\n\n return block;\n }\n\n private _destroyConsumer() {\n if (this._feedConsumer) {\n log('queue closed', { feedKey: this._feed.key });\n this._feedConsumer = undefined;\n this._next = undefined;\n this._currentBlock = undefined;\n this._index = -1;\n }\n }\n}\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { Event, EventSubscriptions, Trigger } from '@dxos/async';\nimport { inspectObject } from '@dxos/debug';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { ComplexMap, isNotNullOrUndefined } from '@dxos/util';\n\nimport { AbstractFeedIterator } from './feed-iterator';\nimport { FeedQueue } from './feed-queue';\nimport { type FeedWrapper } from './feed-wrapper';\nimport { type FeedBlock } from './types';\n\n/**\n * Select next block.\n */\nexport type FeedBlockSelector<T> = (blocks: FeedBlock<T>[]) => number | undefined;\n\nexport type FeedIndex = {\n feedKey: PublicKey;\n index: number;\n};\n\nexport type FeedSetIteratorOptions = {\n // TODO(burdon): Should we remove this and assume the feeds are positioned before adding?\n start?: FeedIndex[];\n stallTimeout?: number;\n};\n\nexport const defaultFeedSetIteratorOptions = {\n stallTimeout: 1000,\n};\n\n/**\n * Iterator that reads blocks from multiple feeds, ordering them based on a traversal callback.\n */\nexport class FeedSetIterator<T extends {}> extends AbstractFeedIterator<T> {\n private readonly _feedQueues = new ComplexMap<PublicKey, FeedQueue<T>>(PublicKey.hash);\n\n private readonly _trigger = new Trigger({ autoReset: true });\n private readonly _subscriptions = new EventSubscriptions();\n\n public readonly stalled = new Event<FeedSetIterator<T>>();\n\n constructor(\n private readonly _selector: FeedBlockSelector<T>,\n public readonly options: FeedSetIteratorOptions = defaultFeedSetIteratorOptions,\n ) {\n super();\n invariant(_selector);\n invariant(options);\n }\n\n [inspect.custom]() {\n return inspectObject(this);\n }\n\n override toJSON() {\n return {\n open: this.isOpen,\n running: this.isRunning,\n indexes: this.indexes,\n };\n }\n\n get size() {\n return this._feedQueues.size;\n }\n\n get feeds(): FeedWrapper<T>[] {\n return Array.from(this._feedQueues.values()).map((feedQueue) => feedQueue.feed);\n }\n\n get indexes(): FeedIndex[] {\n return Array.from(this._feedQueues.values()).map((feedQueue) => ({\n feedKey: feedQueue.feed.key,\n index: feedQueue.index,\n }));\n }\n\n reiterateBlock(block: FeedBlock<T>) {\n this._trigger.wake();\n }\n\n async addFeed(feed: FeedWrapper<T>) {\n invariant(!this._feedQueues.has(feed.key), `Feed already added: ${feed.key}`);\n invariant(feed.properties.opened);\n log('feed added', { feedKey: feed.key });\n\n // Create queue and listen for updates.\n const queue = new FeedQueue<T>(feed);\n this._feedQueues.set(feed.key, queue);\n this._subscriptions.add(\n queue.updated.on(() => {\n this._trigger.wake();\n }),\n );\n\n await queue.open({\n start: this.options.start?.find((index) => index.feedKey.equals(feed.key))?.index,\n });\n\n // Wake when feed added or queue updated.\n this._trigger.wake();\n }\n\n hasFeed(feedKey: PublicKey) {\n return this._feedQueues.has(feedKey);\n }\n\n override async _onOpen(): Promise<void> {\n for (const queue of this._feedQueues.values()) {\n await queue.open();\n }\n }\n\n override async _onClose(): Promise<void> {\n this._subscriptions.clear();\n await Promise.all(Array.from(this._feedQueues.values()).map((queue) => queue.close()));\n\n // Wake when feed added or queue updated.\n this._trigger.wake();\n }\n\n /**\n * Gets the next block from the selected queue.\n */\n override async _nextBlock(): Promise<FeedBlock<T> | undefined> {\n let t: NodeJS.Timeout | undefined;\n\n while (this._running) {\n // Get blocks from the head of each queue.\n const queues = Array.from(this._feedQueues.values());\n const blocks = queues.map((queue) => queue.peek()).filter(isNotNullOrUndefined);\n if (blocks.length) {\n // Get the selected block from candidates.\n const idx = this._selector(blocks);\n log('selected', { idx, blocks });\n if (idx === undefined) {\n // Timeout if all candidates are rejected.\n if (t === undefined) {\n t = setTimeout(() => {\n this.stalled.emit(this);\n this._trigger.wake();\n }, this.options.stallTimeout);\n }\n } else {\n if (t !== undefined) {\n clearTimeout(t);\n t = undefined;\n }\n if (idx >= blocks.length) {\n throw new Error(`Index out of bounds: ${idx} of ${blocks.length}`);\n }\n\n // Pop from queue.\n const queue = this._feedQueues.get(blocks[idx].feedKey)!;\n log('popping', queue.toJSON());\n try {\n const message = await queue.pop();\n invariant(message === blocks[idx]);\n return message;\n } catch (err) {\n // TODO(burdon): Same queue closed twice.\n log.warn('queue closed', { feedKey: queue.feed.key });\n // console.log(Array.from(this._feedQueues.values()));\n }\n }\n }\n\n // Wait until feed added, new block, or closing.\n await this._trigger.wait();\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type PublicKey } from '@dxos/keys';\n\nexport type WriteReceipt = {\n feedKey: PublicKey;\n seq: number;\n};\n\nexport type WriteOptions = {\n /**\n * Called after the write is complete.\n * Runs and completes before the mutation is read from the pipeline.\n */\n afterWrite?: (receipt: WriteReceipt) => Promise<void>;\n};\n\nexport interface FeedWriter<T extends {}> {\n /**\n * Write data to the feed.\n * Awaits `afterWrite` before returning.\n */\n write(data: T, options?: WriteOptions): Promise<WriteReceipt>;\n}\n\nexport const createFeedWriter = <T extends {}>(cb: (data: T) => Promise<WriteReceipt>): FeedWriter<T> => ({\n write: async (data: T) => {\n return cb(data);\n },\n});\n\nexport const writeMessages = async <T extends {}>(writer: FeedWriter<T>, messages: T[]): Promise<WriteReceipt[]> => {\n const receipts: WriteReceipt[] = [];\n // NOTE: Write messages sequentially.\n for (const message of messages) {\n receipts.push(await writer.write(message));\n }\n return receipts;\n};\n"],
|
|
5
|
-
"mappings": "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
|
|
6
|
-
"names": ["safeRace", "Trigger", "invariant", "log", "inspect", "Writable", "Event", "latch", "Trigger", "inspectObject", "invariant", "log", "defaultReadStreamOptions", "live", "batch", "FeedQueue", "constructor", "_feed", "_options", "updated", "_messageTrigger", "autoReset", "_feedConsumer", "undefined", "_currentBlock", "_index", "custom", "toJSON", "feedKey", "key", "index", "length", "open", "isOpen", "feed", "Boolean", "properties", "options", "start", "opts", "Object", "assign", "feedStream", "createReadableStream", "write", "data", "next", "_next", "seq", "wake", "emit", "onClose", "core", "off", "onError", "_destroyConsumer", "err", "message", "catch", "once", "on", "pipe", "close", "closed", "setClosed", "destroy", "peek", "pop", "Error", "truncate", "block", "wait", "AbstractFeedIterator", "_stopTrigger", "Trigger", "_open", "_running", "toJSON", "open", "isOpen", "running", "isRunning", "log", "_onOpen", "start", "close", "stop", "_onClose", "invariant", "wake", "Symbol", "asyncIterator", "_generator", "block", "safeRace", "wait", "_nextBlock", "undefined", "FeedIterator", "constructor", "_feed", "_queue", "FeedQueue", "pop", "inspect", "Event", "EventSubscriptions", "Trigger", "inspectObject", "invariant", "PublicKey", "log", "ComplexMap", "isNotNullOrUndefined", "defaultFeedSetIteratorOptions", "stallTimeout", "FeedSetIterator", "AbstractFeedIterator", "constructor", "_selector", "options", "_feedQueues", "ComplexMap", "PublicKey", "hash", "_trigger", "Trigger", "autoReset", "_subscriptions", "EventSubscriptions", "stalled", "Event", "invariant", "inspect", "custom", "inspectObject", "toJSON", "open", "isOpen", "running", "isRunning", "indexes", "size", "feeds", "Array", "from", "values", "map", "feedQueue", "feed", "feedKey", "key", "index", "reiterateBlock", "block", "wake", "addFeed", "has", "properties", "opened", "log", "queue", "FeedQueue", "set", "add", "updated", "on", "start", "find", "equals", "hasFeed", "_onOpen", "_onClose", "clear", "Promise", "all", "close", "_nextBlock", "t", "_running", "queues", "blocks", "peek", "filter", "isNotNullOrUndefined", "length", "idx", "undefined", "setTimeout", "emit", "clearTimeout", "Error", "get", "message", "pop", "err", "warn", "wait", "createFeedWriter", "cb", "write", "data", "writeMessages", "writer", "messages", "receipts", "message", "push"]
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport safeRace from 'race-as-promised';\n\nimport { Trigger } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { FeedQueue } from './feed-queue';\nimport { type FeedWrapper } from './feed-wrapper';\nimport { type FeedBlock } from './types';\n\n/**\n * Base class for an async iterable feed.\n */\nexport abstract class AbstractFeedIterator<T> implements AsyncIterable<FeedBlock<T>> {\n private readonly _stopTrigger = new Trigger();\n\n protected _open = false;\n protected _running = false;\n\n toJSON() {\n return {\n open: this.isOpen,\n running: this.isRunning,\n };\n }\n\n get isOpen() {\n return this._open;\n }\n\n get isRunning() {\n return this._running;\n }\n\n async open() {\n if (!this._open) {\n log('opening...');\n await this._onOpen();\n this._open = true;\n\n await this.start();\n log('opened');\n }\n }\n\n async close() {\n if (this._open) {\n log('closing...');\n await this.stop();\n\n await this._onClose();\n this._open = false;\n log('closed');\n }\n }\n\n async start() {\n invariant(this._open);\n if (!this._running) {\n this._running = true;\n }\n }\n\n async stop() {\n invariant(this._open);\n if (this._running) {\n this._running = false;\n this._stopTrigger.wake();\n }\n }\n\n //\n // AsyncIterable\n //\n\n [Symbol.asyncIterator]() {\n return this._generator();\n }\n\n async *_generator() {\n log('started');\n while (this._running) {\n // https://github.com/nodejs/node/issues/17469\n const block = await safeRace([this._stopTrigger.wait(), this._nextBlock()]);\n\n if (block === undefined) {\n break;\n }\n\n yield block;\n }\n\n log('stopped');\n }\n\n abstract _onOpen(): Promise<void>;\n abstract _onClose(): Promise<void>;\n abstract _nextBlock(): Promise<FeedBlock<T> | undefined>;\n}\n\n/**\n * Iterator that reads blocks from a single feed.\n */\nexport class FeedIterator<T extends {}> extends AbstractFeedIterator<T> {\n private readonly _queue: FeedQueue<T>;\n\n constructor(private readonly _feed: FeedWrapper<T>) {\n super();\n this._queue = new FeedQueue<T>(this._feed);\n }\n\n override async _onOpen(): Promise<void> {\n await this._queue.open();\n }\n\n override async _onClose(): Promise<void> {\n await this._queue.close();\n }\n\n override async _nextBlock(): Promise<FeedBlock<T> | undefined> {\n return this._queue.pop();\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { inspect } from 'node:util';\nimport { Writable } from 'streamx';\n\nimport { Event, latch, Trigger } from '@dxos/async';\nimport { inspectObject } from '@dxos/debug';\nimport type { ReadStreamOptions } from '@dxos/hypercore';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { type FeedWrapper } from './feed-wrapper';\nimport { type FeedBlock } from './types';\n\nexport const defaultReadStreamOptions: ReadStreamOptions = {\n live: true, // Keep reading until closed.\n batch: 1024, // Read in batches.\n};\n\nexport type FeedQueueOptions = {};\n\n/**\n * Async queue using an AsyncIterator created from a hypercore.\n */\nexport class FeedQueue<T extends {}> {\n public updated = new Event<FeedQueue<T>>();\n\n private readonly _messageTrigger = new Trigger<FeedBlock<T>>({\n autoReset: true,\n });\n\n private _feedConsumer?: Writable = undefined;\n private _next?: () => void;\n private _currentBlock?: FeedBlock<T> = undefined;\n private _index = -1;\n\n // prettier-ignore\n constructor(\n private readonly _feed: FeedWrapper<T>,\n private readonly _options: FeedQueueOptions = {},\n ) {}\n\n [inspect.custom]() {\n return inspectObject(this);\n }\n\n toJSON() {\n return {\n feedKey: this._feed.key,\n index: this.index,\n length: this.length,\n open: this.isOpen,\n };\n }\n\n get feed() {\n return this._feed;\n }\n\n get isOpen(): boolean {\n return Boolean(this._feedConsumer);\n }\n\n get length(): number {\n return this._feed.properties.length;\n }\n\n /**\n * Index (seq) of the NEXT block to be read, or -1 if not open.\n */\n get index() {\n return this._index;\n }\n\n /**\n * Opens (or reopens) the queue.\n * @param options.start Starting index. First mutation to be read would have `seq == options.start`.\n */\n async open(options: ReadStreamOptions = {}) {\n if (this.isOpen) {\n // TODO(burdon): Warn if re-opening (e.g., with different starting point).\n return;\n }\n\n this._index = options.start ?? 0;\n // if (this._index !== 0) {\n // console.warn('Start index not yet supported.');\n // }\n\n log('opening', { feedKey: this._feed.key });\n\n // TODO(burdon): Open with starting range.\n const opts = Object.assign({}, defaultReadStreamOptions, options);\n const feedStream = this._feed.createReadableStream(opts);\n\n this._feedConsumer = new Writable({\n write: (data: any, next: () => void) => {\n this._next = () => {\n this._next = undefined;\n this._currentBlock = undefined;\n this._index++;\n next();\n };\n\n this._currentBlock = {\n feedKey: this._feed.key,\n seq: this._index,\n data,\n };\n\n this._messageTrigger.wake(this._currentBlock);\n this.updated.emit(this);\n },\n });\n\n const onClose = () => {\n this.feed.core.off('close', onClose);\n this._feedConsumer?.off('close', onClose);\n this._feedConsumer?.off('error', onError);\n\n this._destroyConsumer();\n };\n\n const onError = (err?: Error) => {\n if (!err) {\n return;\n }\n\n if (err.message === 'Writable stream closed prematurely' || err.message === 'Feed is closed') {\n return;\n }\n\n log.catch(err, { feedKey: this._feed.key });\n };\n\n // Called if feed is closed externally.\n this._feed.core.once('close', onClose);\n this._feedConsumer.on('error', onError);\n\n // Called when queue is closed. Throws exception if waiting for `pop`.\n this._feedConsumer.once('close', onClose);\n\n // Pipe readable stream into writable consumer.\n feedStream.pipe(this._feedConsumer, (err) => {\n if (err) {\n onError(err);\n }\n this._destroyConsumer();\n });\n\n log('opened');\n }\n\n /**\n * Closes the queue.\n */\n async close() {\n if (this.isOpen) {\n invariant(this._feedConsumer);\n invariant(!this._feed.properties.closed);\n\n log('closing', { feedKey: this._feed.key });\n const [closed, setClosed] = latch();\n this._feedConsumer.once('close', setClosed);\n this._feedConsumer.destroy();\n this._next?.(); // Release any message currently in the queue (otherwise destroy will block).\n await closed();\n log('closed');\n }\n }\n\n /**\n * Get the block at the head of the queue without removing it.\n */\n peek(): FeedBlock<T> | undefined {\n return this._currentBlock;\n }\n\n /**\n * Pop block at the head of the queue.\n */\n async pop(): Promise<FeedBlock<T>> {\n if (!this.isOpen) {\n throw new Error(`Queue closed: ${this.feed.key.truncate()}`);\n }\n\n let block = this.peek();\n if (!block) {\n block = await this._messageTrigger.wait();\n }\n\n if (block) {\n this._next?.();\n }\n\n return block;\n }\n\n private _destroyConsumer() {\n if (this._feedConsumer) {\n log('queue closed', { feedKey: this._feed.key });\n this._feedConsumer = undefined;\n this._next = undefined;\n this._currentBlock = undefined;\n this._index = -1;\n }\n }\n}\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { inspect } from 'node:util';\n\nimport { Event, EventSubscriptions, Trigger } from '@dxos/async';\nimport { inspectObject } from '@dxos/debug';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { ComplexMap, isNotNullOrUndefined } from '@dxos/util';\n\nimport { AbstractFeedIterator } from './feed-iterator';\nimport { FeedQueue } from './feed-queue';\nimport { type FeedWrapper } from './feed-wrapper';\nimport { type FeedBlock } from './types';\n\n/**\n * Select next block.\n */\nexport type FeedBlockSelector<T> = (blocks: FeedBlock<T>[]) => number | undefined;\n\nexport type FeedIndex = {\n feedKey: PublicKey;\n index: number;\n};\n\nexport type FeedSetIteratorOptions = {\n // TODO(burdon): Should we remove this and assume the feeds are positioned before adding?\n start?: FeedIndex[];\n stallTimeout?: number;\n};\n\nexport const defaultFeedSetIteratorOptions = {\n stallTimeout: 1000,\n};\n\n/**\n * Iterator that reads blocks from multiple feeds, ordering them based on a traversal callback.\n */\nexport class FeedSetIterator<T extends {}> extends AbstractFeedIterator<T> {\n private readonly _feedQueues = new ComplexMap<PublicKey, FeedQueue<T>>(PublicKey.hash);\n\n private readonly _trigger = new Trigger({ autoReset: true });\n private readonly _subscriptions = new EventSubscriptions();\n\n public readonly stalled = new Event<FeedSetIterator<T>>();\n\n /**\n * Blocks to be retried once all feeds are processed or stalled.\n * It is used to retry blocks that failed to be processed.\n */\n private readonly _reiterateBlocks: FeedBlock<T>[] = [];\n\n constructor(\n private readonly _selector: FeedBlockSelector<T>,\n public readonly options: FeedSetIteratorOptions = defaultFeedSetIteratorOptions,\n ) {\n super();\n invariant(_selector);\n invariant(options);\n }\n\n [inspect.custom]() {\n return inspectObject(this);\n }\n\n override toJSON() {\n return {\n open: this.isOpen,\n running: this.isRunning,\n indexes: this.indexes,\n };\n }\n\n get size() {\n return this._feedQueues.size;\n }\n\n get feeds(): FeedWrapper<T>[] {\n return Array.from(this._feedQueues.values()).map((feedQueue) => feedQueue.feed);\n }\n\n get indexes(): FeedIndex[] {\n return Array.from(this._feedQueues.values()).map((feedQueue) => ({\n feedKey: feedQueue.feed.key,\n index: feedQueue.index,\n }));\n }\n\n reiterateBlock(block: FeedBlock<T>) {\n this._reiterateBlocks.push(block);\n this._trigger.wake();\n }\n\n async addFeed(feed: FeedWrapper<T>) {\n invariant(!this._feedQueues.has(feed.key), `Feed already added: ${feed.key}`);\n invariant(feed.properties.opened);\n log('feed added', { feedKey: feed.key });\n\n // Create queue and listen for updates.\n const queue = new FeedQueue<T>(feed);\n this._feedQueues.set(feed.key, queue);\n this._subscriptions.add(\n queue.updated.on(() => {\n this._trigger.wake();\n }),\n );\n\n await queue.open({\n start: this.options.start?.find((index) => index.feedKey.equals(feed.key))?.index,\n });\n\n // Wake when feed added or queue updated.\n this._trigger.wake();\n }\n\n hasFeed(feedKey: PublicKey) {\n return this._feedQueues.has(feedKey);\n }\n\n override async _onOpen(): Promise<void> {\n for (const queue of this._feedQueues.values()) {\n await queue.open();\n }\n }\n\n override async _onClose(): Promise<void> {\n this._subscriptions.clear();\n await Promise.all(Array.from(this._feedQueues.values()).map((queue) => queue.close()));\n\n // Wake when feed added or queue updated.\n this._trigger.wake();\n }\n\n private _getNextBlockForReiteration() {\n const block = this._reiterateBlocks.shift();\n invariant(block);\n log('reiterate', { key: block?.feedKey.toHex(), seq: block?.seq });\n return block;\n }\n\n /**\n * Gets the next block from the selected queue.\n */\n override async _nextBlock(): Promise<FeedBlock<T> | undefined> {\n let t: NodeJS.Timeout | undefined;\n\n while (this._running) {\n let stalled = false;\n // Get blocks from the head of each queue.\n const queues = Array.from(this._feedQueues.values());\n const blocks = queues.map((queue) => queue.peek()).filter(isNotNullOrUndefined);\n if (blocks.length) {\n // Get the selected block from candidates.\n const idx = this._selector(blocks);\n log('selected', { idx, blocks });\n if (idx === undefined) {\n // Timeout if all candidates are rejected.\n if (t === undefined) {\n t = setTimeout(() => {\n this.stalled.emit(this);\n this._trigger.wake();\n stalled = true;\n }, this.options.stallTimeout);\n }\n } else {\n if (t !== undefined) {\n clearTimeout(t);\n t = undefined;\n }\n if (idx >= blocks.length) {\n throw new Error(`Index out of bounds: ${idx} of ${blocks.length}`);\n }\n\n // Pop from queue.\n const queue = this._feedQueues.get(blocks[idx].feedKey)!;\n log('popping', queue.toJSON());\n try {\n const message = await queue.pop();\n invariant(message === blocks[idx]);\n return message;\n } catch (err) {\n // TODO(burdon): Same queue closed twice.\n log.warn('queue closed', { feedKey: queue.feed.key });\n // console.log(Array.from(this._feedQueues.values()));\n }\n }\n } else if (this._reiterateBlocks.length) {\n return this._getNextBlockForReiteration();\n }\n\n // Wait until feed added, new block, or closing.\n await this._trigger.wait();\n if (stalled && this._reiterateBlocks.length) {\n return this._getNextBlockForReiteration();\n }\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type PublicKey } from '@dxos/keys';\n\nexport type WriteReceipt = {\n feedKey: PublicKey;\n seq: number;\n};\n\nexport type WriteOptions = {\n /**\n * Called after the write is complete.\n * Runs and completes before the mutation is read from the pipeline.\n */\n afterWrite?: (receipt: WriteReceipt) => Promise<void>;\n};\n\nexport interface FeedWriter<T extends {}> {\n /**\n * Write data to the feed.\n * Awaits `afterWrite` before returning.\n */\n write(data: T, options?: WriteOptions): Promise<WriteReceipt>;\n}\n\nexport const createFeedWriter = <T extends {}>(cb: (data: T) => Promise<WriteReceipt>): FeedWriter<T> => ({\n write: async (data: T) => {\n return cb(data);\n },\n});\n\nexport const writeMessages = async <T extends {}>(writer: FeedWriter<T>, messages: T[]): Promise<WriteReceipt[]> => {\n const receipts: WriteReceipt[] = [];\n // NOTE: Write messages sequentially.\n for (const message of messages) {\n receipts.push(await writer.write(message));\n }\n return receipts;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["safeRace", "Trigger", "invariant", "log", "inspect", "Writable", "Event", "latch", "Trigger", "inspectObject", "invariant", "log", "defaultReadStreamOptions", "live", "batch", "FeedQueue", "constructor", "_feed", "_options", "updated", "_messageTrigger", "autoReset", "_feedConsumer", "undefined", "_currentBlock", "_index", "custom", "toJSON", "feedKey", "key", "index", "length", "open", "isOpen", "feed", "Boolean", "properties", "options", "start", "opts", "Object", "assign", "feedStream", "createReadableStream", "write", "data", "next", "_next", "seq", "wake", "emit", "onClose", "core", "off", "onError", "_destroyConsumer", "err", "message", "catch", "once", "on", "pipe", "close", "closed", "setClosed", "destroy", "peek", "pop", "Error", "truncate", "block", "wait", "AbstractFeedIterator", "_stopTrigger", "Trigger", "_open", "_running", "toJSON", "open", "isOpen", "running", "isRunning", "log", "_onOpen", "start", "close", "stop", "_onClose", "invariant", "wake", "Symbol", "asyncIterator", "_generator", "block", "safeRace", "wait", "_nextBlock", "undefined", "FeedIterator", "constructor", "_feed", "_queue", "FeedQueue", "pop", "inspect", "Event", "EventSubscriptions", "Trigger", "inspectObject", "invariant", "PublicKey", "log", "ComplexMap", "isNotNullOrUndefined", "defaultFeedSetIteratorOptions", "stallTimeout", "FeedSetIterator", "AbstractFeedIterator", "constructor", "_selector", "options", "_feedQueues", "ComplexMap", "PublicKey", "hash", "_trigger", "Trigger", "autoReset", "_subscriptions", "EventSubscriptions", "stalled", "Event", "_reiterateBlocks", "invariant", "inspect", "custom", "inspectObject", "toJSON", "open", "isOpen", "running", "isRunning", "indexes", "size", "feeds", "Array", "from", "values", "map", "feedQueue", "feed", "feedKey", "key", "index", "reiterateBlock", "block", "push", "wake", "addFeed", "has", "properties", "opened", "log", "queue", "FeedQueue", "set", "add", "updated", "on", "start", "find", "equals", "hasFeed", "_onOpen", "_onClose", "clear", "Promise", "all", "close", "_getNextBlockForReiteration", "shift", "toHex", "seq", "_nextBlock", "t", "_running", "queues", "blocks", "peek", "filter", "isNotNullOrUndefined", "length", "idx", "undefined", "setTimeout", "emit", "clearTimeout", "Error", "get", "message", "pop", "err", "warn", "wait", "createFeedWriter", "cb", "write", "data", "writeMessages", "writer", "messages", "receipts", "message", "push"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/common/feed-store/src/feed-wrapper.ts":{"bytes":34379,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"streamx","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/common/feed-store/src/feed-factory.ts":{"bytes":9251,"imports":[{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/hypercore","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/common/feed-store/src/feed-wrapper.ts","kind":"import-statement","original":"./feed-wrapper"}],"format":"esm"},"packages/common/feed-store/src/feed-queue.ts":{"bytes":19868,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"streamx","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/common/feed-store/src/feed-iterator.ts":{"bytes":10231,"imports":[{"path":"race-as-promised","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/common/feed-store/src/feed-queue.ts","kind":"import-statement","original":"./feed-queue"}],"format":"esm"},"packages/common/feed-store/src/feed-set-iterator.ts":{"bytes":20398,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/common/feed-store/src/feed-iterator.ts","kind":"import-statement","original":"./feed-iterator"},{"path":"packages/common/feed-store/src/feed-queue.ts","kind":"import-statement","original":"./feed-queue"}],"format":"esm"},"packages/common/feed-store/src/feed-store.ts":{"bytes":12315,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/common/feed-store/src/feed-writer.ts":{"bytes":2686,"imports":[],"format":"esm"},"packages/common/feed-store/src/types.ts":{"bytes":614,"imports":[],"format":"esm"},"packages/common/feed-store/src/index.ts":{"bytes":1196,"imports":[{"path":"packages/common/feed-store/src/feed-factory.ts","kind":"import-statement","original":"./feed-factory"},{"path":"packages/common/feed-store/src/feed-iterator.ts","kind":"import-statement","original":"./feed-iterator"},{"path":"packages/common/feed-store/src/feed-set-iterator.ts","kind":"import-statement","original":"./feed-set-iterator"},{"path":"packages/common/feed-store/src/feed-queue.ts","kind":"import-statement","original":"./feed-queue"},{"path":"packages/common/feed-store/src/feed-store.ts","kind":"import-statement","original":"./feed-store"},{"path":"packages/common/feed-store/src/feed-wrapper.ts","kind":"import-statement","original":"./feed-wrapper"},{"path":"packages/common/feed-store/src/feed-writer.ts","kind":"import-statement","original":"./feed-writer"},{"path":"packages/common/feed-store/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/common/feed-store/src/testing/mocks.ts":{"bytes":3541,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"format":"esm"},"packages/common/feed-store/src/testing/test-generator.ts":{"bytes":5631,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/hypercore","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true}],"format":"esm"},"packages/common/feed-store/src/testing/test-builder.ts":{"bytes":9730,"imports":[{"path":"@dxos/keyring","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"packages/common/feed-store/src/testing/test-generator.ts","kind":"import-statement","original":"./test-generator"},{"path":"packages/common/feed-store/src/feed-factory.ts","kind":"import-statement","original":"../feed-factory"},{"path":"packages/common/feed-store/src/feed-store.ts","kind":"import-statement","original":"../feed-store"}],"format":"esm"},"packages/common/feed-store/src/testing/index.ts":{"bytes":705,"imports":[{"path":"packages/common/feed-store/src/testing/mocks.ts","kind":"import-statement","original":"./mocks"},{"path":"packages/common/feed-store/src/testing/test-builder.ts","kind":"import-statement","original":"./test-builder"},{"path":"packages/common/feed-store/src/testing/test-generator.ts","kind":"import-statement","original":"./test-generator"}],"format":"esm"}},"outputs":{"packages/common/feed-store/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":24224},"packages/common/feed-store/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/common/feed-store/dist/lib/browser/chunk-I3RTOCTQ.mjs","kind":"import-statement"},{"path":"race-as-promised","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"streamx","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["AbstractFeedIterator","FeedFactory","FeedIterator","FeedQueue","FeedSetIterator","FeedStore","FeedWrapper","createFeedWriter","defaultFeedSetIteratorOptions","defaultReadStreamOptions","writeMessages"],"entryPoint":"packages/common/feed-store/src/index.ts","inputs":{"packages/common/feed-store/src/index.ts":{"bytesInOutput":0},"packages/common/feed-store/src/feed-iterator.ts":{"bytesInOutput":2802},"packages/common/feed-store/src/feed-queue.ts":{"bytesInOutput":4935},"packages/common/feed-store/src/feed-set-iterator.ts":{"bytesInOutput":4985},"packages/common/feed-store/src/feed-writer.ts":{"bytesInOutput":273}},"bytes":13628},"packages/common/feed-store/dist/lib/browser/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":9598},"packages/common/feed-store/dist/lib/browser/testing/index.mjs":{"imports":[{"path":"packages/common/feed-store/dist/lib/browser/chunk-I3RTOCTQ.mjs","kind":"import-statement"},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/keyring","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/hypercore","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true}],"exports":["MockFeedWriter","TestBuilder","TestGenerator","TestItemBuilder","defaultCodec","defaultTestBlockGenerator","defaultTestGenerator","defaultValueEncoding"],"entryPoint":"packages/common/feed-store/src/testing/index.ts","inputs":{"packages/common/feed-store/src/testing/mocks.ts":{"bytesInOutput":784},"packages/common/feed-store/src/testing/index.ts":{"bytesInOutput":0},"packages/common/feed-store/src/testing/test-builder.ts":{"bytesInOutput":1800},"packages/common/feed-store/src/testing/test-generator.ts":{"bytesInOutput":961}},"bytes":4085},"packages/common/feed-store/dist/lib/browser/chunk-I3RTOCTQ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":26062},"packages/common/feed-store/dist/lib/browser/chunk-I3RTOCTQ.mjs":{"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"streamx","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/hypercore","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["FeedFactory","FeedStore","FeedWrapper"],"inputs":{"packages/common/feed-store/src/feed-wrapper.ts":{"bytesInOutput":8215},"packages/common/feed-store/src/feed-factory.ts":{"bytesInOutput":2015},"packages/common/feed-store/src/feed-store.ts":{"bytesInOutput":3129}},"bytes":13642}}}
|
|
1
|
+
{"inputs":{"packages/common/feed-store/src/feed-wrapper.ts":{"bytes":34379,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"streamx","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/common/feed-store/src/feed-factory.ts":{"bytes":9251,"imports":[{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/hypercore","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/common/feed-store/src/feed-wrapper.ts","kind":"import-statement","original":"./feed-wrapper"}],"format":"esm"},"packages/common/feed-store/src/feed-queue.ts":{"bytes":19868,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"streamx","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/common/feed-store/src/feed-iterator.ts":{"bytes":10231,"imports":[{"path":"race-as-promised","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/common/feed-store/src/feed-queue.ts","kind":"import-statement","original":"./feed-queue"}],"format":"esm"},"packages/common/feed-store/src/feed-set-iterator.ts":{"bytes":23256,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/common/feed-store/src/feed-iterator.ts","kind":"import-statement","original":"./feed-iterator"},{"path":"packages/common/feed-store/src/feed-queue.ts","kind":"import-statement","original":"./feed-queue"}],"format":"esm"},"packages/common/feed-store/src/feed-store.ts":{"bytes":12315,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/common/feed-store/src/feed-writer.ts":{"bytes":2686,"imports":[],"format":"esm"},"packages/common/feed-store/src/types.ts":{"bytes":614,"imports":[],"format":"esm"},"packages/common/feed-store/src/index.ts":{"bytes":1196,"imports":[{"path":"packages/common/feed-store/src/feed-factory.ts","kind":"import-statement","original":"./feed-factory"},{"path":"packages/common/feed-store/src/feed-iterator.ts","kind":"import-statement","original":"./feed-iterator"},{"path":"packages/common/feed-store/src/feed-set-iterator.ts","kind":"import-statement","original":"./feed-set-iterator"},{"path":"packages/common/feed-store/src/feed-queue.ts","kind":"import-statement","original":"./feed-queue"},{"path":"packages/common/feed-store/src/feed-store.ts","kind":"import-statement","original":"./feed-store"},{"path":"packages/common/feed-store/src/feed-wrapper.ts","kind":"import-statement","original":"./feed-wrapper"},{"path":"packages/common/feed-store/src/feed-writer.ts","kind":"import-statement","original":"./feed-writer"},{"path":"packages/common/feed-store/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/common/feed-store/src/testing/mocks.ts":{"bytes":3541,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"format":"esm"},"packages/common/feed-store/src/testing/test-generator.ts":{"bytes":5631,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/hypercore","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true}],"format":"esm"},"packages/common/feed-store/src/testing/test-builder.ts":{"bytes":9730,"imports":[{"path":"@dxos/keyring","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"packages/common/feed-store/src/testing/test-generator.ts","kind":"import-statement","original":"./test-generator"},{"path":"packages/common/feed-store/src/feed-factory.ts","kind":"import-statement","original":"../feed-factory"},{"path":"packages/common/feed-store/src/feed-store.ts","kind":"import-statement","original":"../feed-store"}],"format":"esm"},"packages/common/feed-store/src/testing/index.ts":{"bytes":705,"imports":[{"path":"packages/common/feed-store/src/testing/mocks.ts","kind":"import-statement","original":"./mocks"},{"path":"packages/common/feed-store/src/testing/test-builder.ts","kind":"import-statement","original":"./test-builder"},{"path":"packages/common/feed-store/src/testing/test-generator.ts","kind":"import-statement","original":"./test-generator"}],"format":"esm"}},"outputs":{"packages/common/feed-store/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":25451},"packages/common/feed-store/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/common/feed-store/dist/lib/browser/chunk-I3RTOCTQ.mjs","kind":"import-statement"},{"path":"race-as-promised","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"streamx","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["AbstractFeedIterator","FeedFactory","FeedIterator","FeedQueue","FeedSetIterator","FeedStore","FeedWrapper","createFeedWriter","defaultFeedSetIteratorOptions","defaultReadStreamOptions","writeMessages"],"entryPoint":"packages/common/feed-store/src/index.ts","inputs":{"packages/common/feed-store/src/index.ts":{"bytesInOutput":0},"packages/common/feed-store/src/feed-iterator.ts":{"bytesInOutput":2802},"packages/common/feed-store/src/feed-queue.ts":{"bytesInOutput":4935},"packages/common/feed-store/src/feed-set-iterator.ts":{"bytesInOutput":5749},"packages/common/feed-store/src/feed-writer.ts":{"bytesInOutput":273}},"bytes":14392},"packages/common/feed-store/dist/lib/browser/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":9598},"packages/common/feed-store/dist/lib/browser/testing/index.mjs":{"imports":[{"path":"packages/common/feed-store/dist/lib/browser/chunk-I3RTOCTQ.mjs","kind":"import-statement"},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/keyring","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/hypercore","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true}],"exports":["MockFeedWriter","TestBuilder","TestGenerator","TestItemBuilder","defaultCodec","defaultTestBlockGenerator","defaultTestGenerator","defaultValueEncoding"],"entryPoint":"packages/common/feed-store/src/testing/index.ts","inputs":{"packages/common/feed-store/src/testing/mocks.ts":{"bytesInOutput":784},"packages/common/feed-store/src/testing/index.ts":{"bytesInOutput":0},"packages/common/feed-store/src/testing/test-builder.ts":{"bytesInOutput":1800},"packages/common/feed-store/src/testing/test-generator.ts":{"bytesInOutput":961}},"bytes":4085},"packages/common/feed-store/dist/lib/browser/chunk-I3RTOCTQ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":26062},"packages/common/feed-store/dist/lib/browser/chunk-I3RTOCTQ.mjs":{"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"streamx","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/hypercore","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["FeedFactory","FeedStore","FeedWrapper"],"inputs":{"packages/common/feed-store/src/feed-wrapper.ts":{"bytesInOutput":8215},"packages/common/feed-store/src/feed-factory.ts":{"bytesInOutput":2015},"packages/common/feed-store/src/feed-store.ts":{"bytesInOutput":3129}},"bytes":13642}}}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -408,9 +408,10 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
408
408
|
});
|
|
409
409
|
this._subscriptions = new import_async3.EventSubscriptions();
|
|
410
410
|
this.stalled = new import_async3.Event();
|
|
411
|
+
this._reiterateBlocks = [];
|
|
411
412
|
(0, import_invariant3.invariant)(_selector, void 0, {
|
|
412
413
|
F: __dxlog_file3,
|
|
413
|
-
L:
|
|
414
|
+
L: 61,
|
|
414
415
|
S: this,
|
|
415
416
|
A: [
|
|
416
417
|
"_selector",
|
|
@@ -419,7 +420,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
419
420
|
});
|
|
420
421
|
(0, import_invariant3.invariant)(options, void 0, {
|
|
421
422
|
F: __dxlog_file3,
|
|
422
|
-
L:
|
|
423
|
+
L: 62,
|
|
423
424
|
S: this,
|
|
424
425
|
A: [
|
|
425
426
|
"options",
|
|
@@ -450,12 +451,13 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
450
451
|
}));
|
|
451
452
|
}
|
|
452
453
|
reiterateBlock(block) {
|
|
454
|
+
this._reiterateBlocks.push(block);
|
|
453
455
|
this._trigger.wake();
|
|
454
456
|
}
|
|
455
457
|
async addFeed(feed) {
|
|
456
458
|
(0, import_invariant3.invariant)(!this._feedQueues.has(feed.key), `Feed already added: ${feed.key}`, {
|
|
457
459
|
F: __dxlog_file3,
|
|
458
|
-
L:
|
|
460
|
+
L: 98,
|
|
459
461
|
S: this,
|
|
460
462
|
A: [
|
|
461
463
|
"!this._feedQueues.has(feed.key)",
|
|
@@ -464,7 +466,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
464
466
|
});
|
|
465
467
|
(0, import_invariant3.invariant)(feed.properties.opened, void 0, {
|
|
466
468
|
F: __dxlog_file3,
|
|
467
|
-
L:
|
|
469
|
+
L: 99,
|
|
468
470
|
S: this,
|
|
469
471
|
A: [
|
|
470
472
|
"feed.properties.opened",
|
|
@@ -475,7 +477,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
475
477
|
feedKey: feed.key
|
|
476
478
|
}, {
|
|
477
479
|
F: __dxlog_file3,
|
|
478
|
-
L:
|
|
480
|
+
L: 100,
|
|
479
481
|
S: this,
|
|
480
482
|
C: (f, a) => f(...a)
|
|
481
483
|
});
|
|
@@ -502,12 +504,35 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
502
504
|
await Promise.all(Array.from(this._feedQueues.values()).map((queue) => queue.close()));
|
|
503
505
|
this._trigger.wake();
|
|
504
506
|
}
|
|
507
|
+
_getNextBlockForReiteration() {
|
|
508
|
+
const block = this._reiterateBlocks.shift();
|
|
509
|
+
(0, import_invariant3.invariant)(block, void 0, {
|
|
510
|
+
F: __dxlog_file3,
|
|
511
|
+
L: 139,
|
|
512
|
+
S: this,
|
|
513
|
+
A: [
|
|
514
|
+
"block",
|
|
515
|
+
""
|
|
516
|
+
]
|
|
517
|
+
});
|
|
518
|
+
(0, import_log3.log)("reiterate", {
|
|
519
|
+
key: block?.feedKey.toHex(),
|
|
520
|
+
seq: block?.seq
|
|
521
|
+
}, {
|
|
522
|
+
F: __dxlog_file3,
|
|
523
|
+
L: 140,
|
|
524
|
+
S: this,
|
|
525
|
+
C: (f, a) => f(...a)
|
|
526
|
+
});
|
|
527
|
+
return block;
|
|
528
|
+
}
|
|
505
529
|
/**
|
|
506
530
|
* Gets the next block from the selected queue.
|
|
507
531
|
*/
|
|
508
532
|
async _nextBlock() {
|
|
509
533
|
let t;
|
|
510
534
|
while (this._running) {
|
|
535
|
+
let stalled = false;
|
|
511
536
|
const queues = Array.from(this._feedQueues.values());
|
|
512
537
|
const blocks = queues.map((queue) => queue.peek()).filter(import_util.isNotNullOrUndefined);
|
|
513
538
|
if (blocks.length) {
|
|
@@ -517,7 +542,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
517
542
|
blocks
|
|
518
543
|
}, {
|
|
519
544
|
F: __dxlog_file3,
|
|
520
|
-
L:
|
|
545
|
+
L: 158,
|
|
521
546
|
S: this,
|
|
522
547
|
C: (f, a) => f(...a)
|
|
523
548
|
});
|
|
@@ -526,6 +551,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
526
551
|
t = setTimeout(() => {
|
|
527
552
|
this.stalled.emit(this);
|
|
528
553
|
this._trigger.wake();
|
|
554
|
+
stalled = true;
|
|
529
555
|
}, this.options.stallTimeout);
|
|
530
556
|
}
|
|
531
557
|
} else {
|
|
@@ -539,7 +565,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
539
565
|
const queue = this._feedQueues.get(blocks[idx].feedKey);
|
|
540
566
|
(0, import_log3.log)("popping", queue.toJSON(), {
|
|
541
567
|
F: __dxlog_file3,
|
|
542
|
-
L:
|
|
568
|
+
L: 179,
|
|
543
569
|
S: this,
|
|
544
570
|
C: (f, a) => f(...a)
|
|
545
571
|
});
|
|
@@ -547,7 +573,7 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
547
573
|
const message = await queue.pop();
|
|
548
574
|
(0, import_invariant3.invariant)(message === blocks[idx], void 0, {
|
|
549
575
|
F: __dxlog_file3,
|
|
550
|
-
L:
|
|
576
|
+
L: 182,
|
|
551
577
|
S: this,
|
|
552
578
|
A: [
|
|
553
579
|
"message === blocks[idx]",
|
|
@@ -560,14 +586,19 @@ var FeedSetIterator = class extends AbstractFeedIterator {
|
|
|
560
586
|
feedKey: queue.feed.key
|
|
561
587
|
}, {
|
|
562
588
|
F: __dxlog_file3,
|
|
563
|
-
L:
|
|
589
|
+
L: 186,
|
|
564
590
|
S: this,
|
|
565
591
|
C: (f, a) => f(...a)
|
|
566
592
|
});
|
|
567
593
|
}
|
|
568
594
|
}
|
|
595
|
+
} else if (this._reiterateBlocks.length) {
|
|
596
|
+
return this._getNextBlockForReiteration();
|
|
569
597
|
}
|
|
570
598
|
await this._trigger.wait();
|
|
599
|
+
if (stalled && this._reiterateBlocks.length) {
|
|
600
|
+
return this._getNextBlockForReiteration();
|
|
601
|
+
}
|
|
571
602
|
}
|
|
572
603
|
}
|
|
573
604
|
};
|