@rxx/worker
Version:
React MVI micro framework.
205 lines • 13.5 kB
JavaScript
"use strict";
/**
* @fileoverview
* @author Taketoshi Aono
*/
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var rxjs_1 = require("rxjs");
var utils_1 = require("../utils");
/**
* Return true is p is thenable.
* @param p Maybe thenable object.
* @returns boolean If true, p is thenable, otherwise not a thenable.
*/
var isPromise = function (p) { return !!p && !!p.then; };
var isAggregate = function (p) {
return !!p && !!p.aggregate;
};
/**
* Process return value of flatscan and pass unwrapped value to callback function.
* @param value Return value of flatscan
* @param callback Callback function that receive unwrapped value.
*/
function unwrapValue(value, callback, errorBack) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var ret, _a, e_1;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, 8, , 9]);
if (!(value instanceof rxjs_1.Observable)) return [3 /*break*/, 3];
return [4 /*yield*/, value.toPromise()];
case 1:
ret = _b.sent();
return [4 /*yield*/, unwrapValue(ret, callback, errorBack)];
case 2:
_b.sent();
return [3 /*break*/, 7];
case 3:
if (!isPromise(value)) return [3 /*break*/, 6];
_a = unwrapValue;
return [4 /*yield*/, value];
case 4: return [4 /*yield*/, _a.apply(void 0, [_b.sent(), callback, errorBack])];
case 5:
_b.sent();
return [3 /*break*/, 7];
case 6:
if (utils_1.isDefined(value)) {
callback(value);
}
_b.label = 7;
case 7: return [3 /*break*/, 9];
case 8:
e_1 = _b.sent();
errorBack(e_1);
return [3 /*break*/, 9];
case 9: return [2 /*return*/];
}
});
});
}
/**
* Serial flow control queue.
*/
var LockableQueuedBuffer = /** @class */ (function () {
function LockableQueuedBuffer() {
this._isLocked = false;
this.buffer = [];
}
/**
* Execute function if not locked, otherwise buffered.
* This function accept only async function,
* and unlock if execution ended.
* @param fn Function that will execute.
*/
LockableQueuedBuffer.prototype.try = function (fn) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
if (this._isLocked) {
this.buffer.push(fn);
}
else {
this.run(fn);
}
return [2 /*return*/];
});
});
};
/**
* Drain all buffeed values.
* This function called automatically in 'try'.
*/
LockableQueuedBuffer.prototype.drain = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var next;
return tslib_1.__generator(this, function (_a) {
this._isLocked = false;
next = this.buffer.shift();
if (next) {
this.run(next);
}
return [2 /*return*/];
});
});
};
LockableQueuedBuffer.prototype.run = function (fn) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
this._isLocked = true;
return [4 /*yield*/, fn()];
case 1:
_a.sent();
return [4 /*yield*/, this.drain()];
case 2:
_a.sent();
return [2 /*return*/];
}
});
});
};
return LockableQueuedBuffer;
}());
function flatScan(handler, initial, options) {
var _this = this;
return function (observable) {
return rxjs_1.Observable.create(function (subscriber) {
var subscription;
var lastValue = initial;
var bufferingConfig;
var isBuffering = false;
var timer;
var serialQueue = new LockableQueuedBuffer();
if (options) {
bufferingConfig = options.bufferingConfig;
}
unwrapValue(initial || {}, function (initial) {
subscription = observable.subscribe(function (value) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var bufferingTime, handleValue;
var _this = this;
return tslib_1.__generator(this, function (_a) {
bufferingTime = 0;
if (bufferingConfig) {
bufferingTime = bufferingConfig(value);
}
handleValue = function (value) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var returnValue, e_2;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
returnValue = handler(lastValue, value);
if (!returnValue) {
return [2 /*return*/];
}
return [4 /*yield*/, unwrapValue(returnValue, function (unwrapedValue) {
if (isAggregate(unwrapedValue)) {
return handleValue(unwrapedValue);
}
lastValue = unwrapedValue;
if (isBuffering) {
return;
}
if (bufferingConfig) {
if (bufferingTime) {
isBuffering = true;
timer = setTimeout(function () {
isBuffering = false;
subscriber.next(lastValue);
}, bufferingTime);
}
else {
clearTimeout(timer);
subscriber.next(unwrapedValue);
}
}
else {
subscriber.next(unwrapedValue);
}
}, function (e) { return console.error(e); })];
case 1:
_a.sent();
return [3 /*break*/, 3];
case 2:
e_2 = _a.sent();
console.error(e_2);
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); };
serialQueue.try(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, handleValue(value)];
}); }); });
return [2 /*return*/];
});
}); }, function (error) { return console.error(error); });
}, function (e) { return console.error(e); });
return function () { return subscription && subscription.unsubscribe(); };
});
};
}
exports.flatScan = flatScan;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHNjYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb2JzZXJ2YWJsZS9mbGF0c2Nhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCw2QkFBa0U7QUFDbEUsa0NBQXFDO0FBa0JyQzs7OztHQUlHO0FBQ0gsSUFBTSxTQUFTLEdBQUcsVUFBSSxDQUFNLElBQXNCLE9BQUEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBZixDQUFlLENBQUM7QUFFbEUsSUFBTSxXQUFXLEdBQUcsVUFBSSxDQUFNO0lBQzVCLE9BQUEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7QUFBcEIsQ0FBb0IsQ0FBQztBQUV2Qjs7OztHQUlHO0FBQ0gsU0FBZSxXQUFXLENBQ3hCLEtBQTRCLEVBQzVCLFFBQTRCLEVBQzVCLFNBQTZCOzs7Ozs7O3lCQUd2QixDQUFBLEtBQUssWUFBWSxpQkFBVSxDQUFBLEVBQTNCLHdCQUEyQjtvQkFDakIscUJBQU0sS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFBOztvQkFBN0IsR0FBRyxHQUFHLFNBQXVCO29CQUNuQyxxQkFBTSxXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBQTs7b0JBQTNDLFNBQTJDLENBQUM7Ozt5QkFDbkMsU0FBUyxDQUFJLEtBQUssQ0FBQyxFQUFuQix3QkFBbUI7b0JBQ3RCLEtBQUEsV0FBVyxDQUFBO29CQUFDLHFCQUFNLEtBQUssRUFBQTt3QkFBN0IscUJBQU0sa0JBQVksU0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUMsRUFBQTs7b0JBQW5ELFNBQW1ELENBQUM7OztvQkFDL0MsSUFBSSxpQkFBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUMzQixRQUFRLENBQUMsS0FBWSxDQUFDLENBQUM7cUJBQ3hCOzs7OztvQkFFRCxTQUFTLENBQUMsR0FB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