UNPKG

@rxx/worker

Version:

React MVI micro framework.

147 lines 9.29 kB
"use strict"; /** * The MIT License (MIT) * Copyright (c) Taketoshi Aono * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * @fileoverview * @author Taketoshi Aono */ Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var state_handler_1 = require("../handler/state-handler"); var utils_1 = require("../utils"); var rxjs_1 = require("rxjs"); /** * History size. */ var MAX_HISTORY_LENGTH = 10; /** * Intent decorator that assign StateHandler to instance properties. */ function intent(Base) { var EnhancedIntent = /** @class */ (function (_super) { tslib_1.__extends(EnhancedIntent, _super); function EnhancedIntent(dispatch, handlers) { var _this = _super.call(this, handlers) || this; _this.dispatch = dispatch; for (var key in handlers) { _this[key] = handlers[key]; } return _this; } return EnhancedIntent; }(Base)); return EnhancedIntent; } exports.intent = intent; /** * Singleton event publisher. */ var Intent = /** @class */ (function (_super) { tslib_1.__extends(Intent, _super); function Intent() { var _this = _super !== null && _super.apply(this, arguments) || this; /** * Event history. */ _this.history = []; _this.children = []; _this.subscribers = []; return _this; } Intent.prototype.subscribeEvent = function (subscriber) { this.subscribers.push(subscriber); }; Intent.prototype.unsubscribeEvent = function (subscriber) { this.subscribers = this.subscribers.filter(function (s) { return s !== subscriber; }); }; Intent.prototype.unsubscribeAll = function () { this.subscribers = []; }; Intent.prototype.subscribe = function (props) { return new rxjs_1.Subscription(); }; Intent.prototype.clone = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return this; }; /** * Publish event. * @override * @param key Event name. If 'RETRY' passed, past published event will be republishing. * @param args Event args. If a first argument was 'RETRY', specify history index. * If empty, last event will be publishing. */ Intent.prototype.push = function (key, args) { return tslib_1.__awaiter(this, void 0, void 0, function () { var target, subjects, fire; var _this = this; return tslib_1.__generator(this, function (_a) { if (key === 'RETRY') { target = args ? this.findHistory(args) : this.history[this.history.length - 1]; if (target) { target.fire(); } return [2 /*return*/]; } subjects = this.findSubjects(key); if (!subjects.length) { return [2 /*return*/]; } fire = function () { subjects.forEach(function (subject) { return subject.next({ data: args, state: _this.state }); }); _this.subscribers.forEach(function (s) { return s(key, args); }); }; this.history.push({ fire: fire, key: key }); if (this.history.length > MAX_HISTORY_LENGTH) { this.history.shift(); } fire(); return [2 /*return*/, Promise.resolve()]; }); }); }; Intent.prototype.getStreamStore = function () { return this.store; }; /** * Return callback function that will publish event. * @override * @param key Event name. * @param v Event args. Override publish args. */ Intent.prototype.callback = function (key, v) { var _this = this; return function (args) { return _this.push(key, utils_1.isDefined(v) ? v : args); }; }; Intent.prototype.findSubjects = function (key) { return this.store.get(key); }; Intent.prototype.findHistory = function (retryKey) { return this.history.filter(function (_a) { var key = _a.key; return key === retryKey; })[0]; }; return Intent; }(state_handler_1.StateHandler)); exports.Intent = Intent; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ludGVudC9pbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRzs7O0FBRUgsMERBQXdEO0FBRXhELGtDQUE2QztBQUM3Qyw2QkFBb0M7QUFHcEM7O0dBRUc7QUFDSCxJQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQWlCOUI7O0dBRUc7QUFDSCxTQUFnQixNQUFNLENBQThCLElBQU87SUFDekQ7UUFBNkIsMENBQWE7UUFDeEMsd0JBQVksUUFBUSxFQUFFLFFBQVE7WUFBOUIsWUFDRSxrQkFBTSxRQUFRLENBQUMsU0FLaEI7WUFKQyxLQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN6QixLQUFLLElBQU0sR0FBRyxJQUFJLFFBQVEsRUFBRTtnQkFDMUIsS0FBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMzQjs7UUFDSCxDQUFDO1FBQ0gscUJBQUM7SUFBRCxDQUFDLEFBUkQsQ0FBOEIsSUFBWSxHQVF6QztJQUVELE9BQU8sY0FBcUIsQ0FBQztBQUMvQixDQUFDO0FBWkQsd0JBWUM7QUFFRDs7R0FFRztBQUNIO0lBQTRCLGtDQUFZO0lBQXhDO1FBQUEscUVBOEZDO1FBN0ZDOztXQUVHO1FBQ0ssYUFBTyxHQUFvQyxFQUFFLENBQUM7UUFFOUMsY0FBUSxHQUFhLEVBQUUsQ0FBQztRQUl4QixpQkFBVyxHQUE4QyxFQUFFLENBQUM7O0lBb0Z0RSxDQUFDO0lBbEZRLCtCQUFjLEdBQXJCLFVBQXNCLFVBQWlEO1FBQ3JFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxpQ0FBZ0IsR0FBdkIsVUFBd0IsVUFBaUQ7UUFDdkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0s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