UNPKG

@rxx/core

Version:

React MVI micro framework.

127 lines 10.2 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 rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); function isObject(o) { return (Object.prototype.toString.call(o) === '[object Object]' && o.constructor === Object); } var isArray = Array.isArray; var Collector = /** @class */ (function () { function Collector() { this.code = 'const template = '; this.observables = []; this.values = []; this.id = 0; } Collector.prototype.collect = function (object, startWithNull) { var _this = this; if (startWithNull === void 0) { startWithNull = false; } if (object instanceof rxjs_1.Observable) { return object; } if (!isArray(Object) && !isObject(object)) { throw new Error('Invalid object passed to combineTemplate'); } this.doCollect(object); this.initInjector(); if (!this.observables.length) { return rxjs_1.of(object); } return rxjs_1.combineLatest.apply(void 0, this.observables.map(function (_a) { var observable = _a.observable; var NULL_VALUE = {}; var firstValue = NULL_VALUE; var sub = observable.subscribe(function (v) { return (firstValue = v); }); sub.unsubscribe(); if (firstValue === NULL_VALUE && startWithNull) { return observable.pipe(operators_1.startWith(null)); } return observable; })).pipe(operators_1.map(function (results) { var values = {}; results.forEach(function (value, i) { values[_this.observables[i].key] = value; }); _this.values.forEach(function (_a) { var key = _a.key, value = _a.value; return (values[key] = value); }); return _this.injector(values); })); }; Collector.prototype.doCollect = function (object) { var _this = this; if (isObject(object)) { this.code += '{'; for (var key in object) { var k = JSON.stringify(key); if (object[key] instanceof rxjs_1.Observable) { this.code += k + ": values[" + ++this.id + "]"; this.observables.push({ observable: object[key], key: String(this.id), }); } else { this.code += k + ": "; this.doCollect(object[key]); } this.code += ','; } this.sliceComma(); this.code += '}'; } else if (isArray(object)) { this.code += '['; object.forEach(function (o, i) { if (o instanceof rxjs_1.Observable) { _this.code += "values[" + ++_this.id + "]"; _this.observables.push({ observable: o, key: String(_this.id) }); } else { _this.doCollect(o); } _this.code += ','; }); this.sliceComma(); this.code += ']'; } else { this.code += "values[" + ++this.id + "]"; this.values.push({ value: object, key: String(this.id) }); } }; Collector.prototype.sliceComma = function () { if (this.code.charAt(this.code.length - 1) === ',') { this.code = this.code.slice(0, this.code.length - 1); } }; Collector.prototype.initInjector = function () { this.code += '\n;return template;'; this.injector = Function('values', this.code); }; return Collector; }()); function combineTemplate(object, startWithNull) { if (startWithNull === void 0) { startWithNull = true; } return new Collector().collect(object, startWithNull); } exports.combineTemplate = combineTemplate; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZS10ZW1wbGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vYnNlcnZhYmxlL2NvbWJpbmUtdGVtcGxhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7QUFFSCw2QkFBcUQ7QUFDckQsNENBQWdEO0FBa0NoRCxTQUFTLFFBQVEsQ0FBQyxDQUFDO0lBQ2pCLE9BQU8sQ0FDTCxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssaUJBQWlCO1FBQ3ZELENBQUMsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUN6QixDQUFDO0FBQ0osQ0FBQztBQUNPLElBQUEsdUJBQU8sQ0FBVztBQUcxQjtJQUFBO1FBQ1UsU0FBSSxHQUFHLG1CQUFtQixDQUFDO1FBRTNCLGdCQUFXLEdBQW1ELEVBQUUsQ0FBQztRQUNqRSxXQUFNLEdBQWtDLEVBQUUsQ0FBQztRQUUzQyxPQUFFLEdBQUcsQ0FBQyxDQUFDO0lBK0ZqQixDQUFDO0lBN0ZRLDJCQUFPLEdBQWQsVUFDRSxNQUFtRCxFQUNuRCxhQUE4QjtRQUZoQyxpQkEyQ0M7UUF6Q0MsOEJBQUEsRUFBQSxxQkFBOEI7UUFFOUIsSUFBSSxNQUFNLFlBQVksaUJBQVUsRUFBRTtZQUNoQyxPQUFPLE1BQU0sQ0FBQztTQUNmO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7U0FDN0Q7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDNUIsT0FBTyxTQUFFLENBQUMsTUFBTSxDQUFv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