@divine/synchronization
Advanced tools
Comparing version 1.2.0 to 1.2.1
@@ -1464,32 +1464,33 @@ (function (global, factory) { | ||
PubSubBase.prototype.subscribe = function (filter, timeout) { | ||
return tslib_es6.__asyncGenerator(this, arguments, function subscribe_1() { | ||
var queue; | ||
if (typeof filter === 'number') { | ||
timeout = filter; | ||
filter = undefined; | ||
} | ||
if (filter === undefined) { | ||
filter = function () { return true; }; | ||
} | ||
var queue = this._createQueue(filter); | ||
// Splitting this function ensures the topic queue is present even before AsyncGenerator.next() is called | ||
this._topic.add(queue); | ||
return this._subscribe(queue, timeout); | ||
}; | ||
PubSubBase.prototype._subscribe = function (queue, timeout) { | ||
return tslib_es6.__asyncGenerator(this, arguments, function _subscribe_1() { | ||
return tslib_es6.__generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
if (typeof filter === 'number') { | ||
timeout = filter; | ||
filter = undefined; | ||
} | ||
if (filter === undefined) { | ||
filter = function () { return true; }; | ||
} | ||
queue = this._createQueue(filter); | ||
_a.trys.push([0, , 6, 7]); | ||
_a.label = 1; | ||
case 1: | ||
_a.trys.push([1, , 7, 8]); | ||
this._topic.add(queue); | ||
_a.label = 2; | ||
case 2: | ||
return [4 /*yield*/, tslib_es6.__await(queue.shiftOrWait(timeout))]; | ||
case 3: return [4 /*yield*/, tslib_es6.__await.apply(void 0, [_a.sent()])]; | ||
case 4: return [4 /*yield*/, _a.sent()]; | ||
case 5: | ||
case 2: return [4 /*yield*/, tslib_es6.__await.apply(void 0, [_a.sent()])]; | ||
case 3: return [4 /*yield*/, _a.sent()]; | ||
case 4: | ||
_a.sent(); | ||
return [3 /*break*/, 2]; | ||
case 6: return [3 /*break*/, 8]; | ||
case 7: | ||
return [3 /*break*/, 1]; | ||
case 5: return [3 /*break*/, 7]; | ||
case 6: | ||
this._topic.delete(queue); | ||
return [7 /*endfinally*/]; | ||
case 8: return [2 /*return*/]; | ||
case 7: return [2 /*return*/]; | ||
} | ||
@@ -1496,0 +1497,0 @@ }); |
@@ -17,2 +17,3 @@ import { BlockingQueue, DRRData } from './queue'; | ||
subscribe(timeout?: number): AsyncGenerator<T | undefined, void>; | ||
private _subscribe; | ||
get subscribers(): number; | ||
@@ -19,0 +20,0 @@ protected abstract _createQueue(filter: (value: T) => boolean): FilteredQueue<T, W>; |
@@ -75,33 +75,34 @@ "use strict"; | ||
PubSubBase.prototype.subscribe = function (filter, timeout) { | ||
return tslib_1.__asyncGenerator(this, arguments, function subscribe_1() { | ||
var queue; | ||
if (typeof filter === 'number') { | ||
timeout = filter; | ||
filter = undefined; | ||
} | ||
if (filter === undefined) { | ||
filter = function () { return true; }; | ||
} | ||
var queue = this._createQueue(filter); | ||
// Splitting this function ensures the topic queue is present even before AsyncGenerator.next() is called | ||
this._topic.add(queue); | ||
return this._subscribe(queue, timeout); | ||
}; | ||
PubSubBase.prototype._subscribe = function (queue, timeout) { | ||
return tslib_1.__asyncGenerator(this, arguments, function _subscribe_1() { | ||
return tslib_1.__generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
if (typeof filter === 'number') { | ||
timeout = filter; | ||
filter = undefined; | ||
} | ||
if (filter === undefined) { | ||
filter = function () { return true; }; | ||
} | ||
queue = this._createQueue(filter); | ||
_a.trys.push([0, , 6, 7]); | ||
_a.label = 1; | ||
case 1: | ||
_a.trys.push([1, , 7, 8]); | ||
this._topic.add(queue); | ||
_a.label = 2; | ||
case 2: | ||
if (!true) return [3 /*break*/, 6]; | ||
if (!true) return [3 /*break*/, 5]; | ||
return [4 /*yield*/, tslib_1.__await(queue.shiftOrWait(timeout))]; | ||
case 3: return [4 /*yield*/, tslib_1.__await.apply(void 0, [_a.sent()])]; | ||
case 4: return [4 /*yield*/, _a.sent()]; | ||
case 5: | ||
case 2: return [4 /*yield*/, tslib_1.__await.apply(void 0, [_a.sent()])]; | ||
case 3: return [4 /*yield*/, _a.sent()]; | ||
case 4: | ||
_a.sent(); | ||
return [3 /*break*/, 2]; | ||
case 6: return [3 /*break*/, 8]; | ||
case 7: | ||
return [3 /*break*/, 1]; | ||
case 5: return [3 /*break*/, 7]; | ||
case 6: | ||
this._topic.delete(queue); | ||
return [7 /*endfinally*/]; | ||
case 8: return [2 /*return*/]; | ||
case 7: return [2 /*return*/]; | ||
} | ||
@@ -108,0 +109,0 @@ }); |
{ | ||
"name": "@divine/synchronization", | ||
"version": "1.2.0", | ||
"version": "1.2.1", | ||
"description": "The Divine Synchronization Library", | ||
@@ -5,0 +5,0 @@ "main": "lib/src/index.js", |
@@ -51,3 +51,3 @@ import { BlockingQueue, DRRData, FairQueue, Queue } from './queue'; | ||
subscribe(timeout?: number): AsyncGenerator<T | undefined, void>; | ||
async *subscribe(filter?: ((data: T) => boolean) | number, timeout?: number): AsyncGenerator<T | undefined, void> { | ||
subscribe(filter?: ((data: T) => boolean) | number, timeout?: number): AsyncGenerator<T | undefined, void> { | ||
if (typeof filter === 'number') { | ||
@@ -64,5 +64,9 @@ timeout = filter; | ||
// Splitting this function ensures the topic queue is present even before AsyncGenerator.next() is called | ||
this._topic.add(queue); | ||
return this._subscribe(queue, timeout) | ||
} | ||
private async* _subscribe(queue: FilteredQueue<T, W>, timeout: number | undefined) { | ||
try { | ||
this._topic.add(queue); | ||
while (true) { | ||
@@ -69,0 +73,0 @@ yield await queue.shiftOrWait(timeout); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
223311
3034