@rxx/worker
Version:
React MVI micro framework.
127 lines • 10.2 kB
JavaScript
"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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