UNPKG

@rxx/worker

Version:

React MVI micro framework.

205 lines 13.5 kB
"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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