UNPKG

@rxx/worker

Version:

React MVI micro framework.

257 lines 18.5 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 intent_1 = require("../intent/intent"); var store_1 = require("../store/store"); var operators_1 = require("rxjs/operators"); var factory_1 = require("../factory"); var worker_1 = require("../worker"); var power_assert_1 = tslib_1.__importDefault(require("power-assert")); var assert_1 = tslib_1.__importDefault(require("assert")); var Intent = /** @class */ (function () { function Intent() { } Intent.prototype.test = function () { return this.intent.for('test').pipe(operators_1.share()); }; Intent = tslib_1.__decorate([ intent_1.intent ], Intent); return Intent; }()); var TestStore = /** @class */ (function () { function TestStore() { } TestStore.prototype.initialize = function () { return { view: { base: this.intent.test().pipe(operators_1.scan(function (acc, next) { return acc + 1; }, 1), operators_1.share(), operators_1.startWith(1)), test: this.intent.test().pipe(operators_1.scan(function (acc, next) { return acc + 1; }, 1), operators_1.share(), operators_1.startWith(1)), test2: this.subject.pipe(operators_1.map(function (_a) { var type = _a.type, payload = _a.payload, states = _a.states; switch (type) { case 'subject-test': return payload + states.test2; default: return payload; } }), operators_1.startWith(1)), }, }; }; TestStore = tslib_1.__decorate([ store_1.store ], TestStore); return TestStore; }()); function testStore(observable, initialState) { return { view: observable.pipe(operators_1.scan(function (acc, args) { switch (args.type) { case 'test': return acc + 1; default: return acc; } }, initialState), operators_1.startWith(initialState)), }; } var TestStore2 = /** @class */ (function () { function TestStore2() { } TestStore2.prototype.initialize = function () { return { view: { test3: this.intent.test().pipe(operators_1.scan(function (acc, next) { return next.data; }, 1), operators_1.share(), operators_1.startWith(0)), }, }; }; TestStore2 = tslib_1.__decorate([ store_1.store ], TestStore2); return TestStore2; }()); var TestStore3 = /** @class */ (function () { function TestStore3() { } TestStore3.prototype.initialize = function () { return { view: { test: this.intent.test().pipe(operators_1.scan(function (acc, next) { return acc + 1; }, this.foo), operators_1.share(), operators_1.startWith(this.foo)), }, }; }; TestStore3 = tslib_1.__decorate([ store_1.store ], TestStore3); return TestStore3; }()); var Intent4 = /** @class */ (function () { function Intent4() { } Intent4.prototype.test = function () { return this.intent.for('on-click').pipe(operators_1.share()); }; Intent4 = tslib_1.__decorate([ intent_1.intent ], Intent4); return Intent4; }()); var TestStore4 = /** @class */ (function () { function TestStore4() { } TestStore4.prototype.initialize = function () { return { view: { test3: this.intent.test().pipe(operators_1.map(function (_a) { var state = _a.state; return state.view.base + 1; }), operators_1.startWith(0)), }, }; }; TestStore4 = tslib_1.__decorate([ store_1.store ], TestStore4); return TestStore4; }()); var WAIT_TIME_MS = 200; describe('factory.tsx', function () { var dispatched = []; beforeAll(function () { global['RECEIVE_WORKER_MESSAGE'] = function (_a) { var type = _a.type, payload = _a.payload; dispatched.push({ type: type, payload: payload }); }; }); afterEach(function () { dispatched.length = 0; }); describe('makeView/makeApp', function () { it('should pass intent and store to children.', function (done) { var subject = factory_1.run({}, {}, { store: TestStore, intent: Intent, }); subject.next({ type: 'INITIALIZE', payload: {} }); subject.next({ type: 'DISPATCH', payload: { type: 'test', payload: 1 }, }); setTimeout(function () { power_assert_1.default.strictEqual(dispatched.length, 3); assert_1.default.deepStrictEqual(dispatched[0], { type: worker_1.WorkerPostEventType.INITIALIZED, payload: { base: 1, test: 1, test2: 1, }, }); assert_1.default.deepStrictEqual(dispatched[1], { type: worker_1.WorkerPostEventType.UPDATE, payload: { base: 2, test: 2, test2: 1, }, }); assert_1.default.deepStrictEqual(dispatched[2], { type: worker_1.WorkerPostEventType.DISPATCHED, payload: { type: 'test', payload: 1 }, }); done(); }, WAIT_TIME_MS); }); it('should pass intent and store group to children.', function (done) { var subject = factory_1.run({}, {}, { store: [TestStore, TestStore2], intent: Intent, }); setTimeout(function () { subject.next({ type: 'INITIALIZE', payload: {} }); subject.next({ type: 'DISPATCH', payload: { type: 'test', payload: 1 }, }); setTimeout(function () { power_assert_1.default.strictEqual(dispatched.length, 3); assert_1.default.deepStrictEqual(dispatched[0], { type: worker_1.WorkerPostEventType.INITIALIZED, payload: { base: 1, test: 1, test2: 1, test3: 0, }, }); assert_1.default.deepStrictEqual(dispatched[1], { type: worker_1.WorkerPostEventType.UPDATE, payload: { base: 2, test: 2, test2: 1, test3: 1, }, }); assert_1.default.deepStrictEqual(dispatched[2], { type: worker_1.WorkerPostEventType.DISPATCHED, payload: { type: 'test', payload: 1 }, }); done(); }, WAIT_TIME_MS); }); }); it('should pass services', function (done) { var subject = factory_1.run({}, {}, { store: TestStore3, intent: Intent, service: { foo: 10 }, }); subject.next({ type: 'INITIALIZE', payload: {} }); subject.next({ type: 'DISPATCH', payload: { type: 'test', payload: 1 }, }); setTimeout(function () { power_assert_1.default.strictEqual(dispatched.length, 3); assert_1.default.deepStrictEqual(dispatched[0], { type: worker_1.WorkerPostEventType.INITIALIZED, payload: { test: 10, }, }); assert_1.default.deepStrictEqual(dispatched[1], { type: worker_1.WorkerPostEventType.UPDATE, payload: { test: 11, }, }); assert_1.default.deepStrictEqual(dispatched[2], { type: worker_1.WorkerPostEventType.DISPATCHED, payload: { type: 'test', payload: 1 }, }); done(); }, WAIT_TIME_MS); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL19fdGVzdHNfXy9mYWN0b3J5LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRzs7O0FBSUgsMkNBQTBDO0FBQzFDLHdDQUE4QztBQUc5Qyw0Q0FBcUU7QUFDckUsc0NBQTBDO0FBRTFDLG9DQUErRDtBQUMvRCxzRUFBa0M7QUFDbEMsMERBQWdDO0FBR2hDO0lBQUE7SUFNQSxDQUFDO0lBSFEscUJBQUksR0FBWDtRQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQVMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFMRyxNQUFNO1FBRFgsZUFBTTtPQUNELE1BQU0sQ0FNWDtJQUFELGFBQUM7Q0FBQSxBQU5ELElBTUM7QUFHRDtJQUFBO0lBa0NBLENBQUM7SUEzQlEsOEJBQVUsR0FBakI7UUFDRSxPQUFPO1lBQ0wsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FDM0IsZ0JBQUksQ0FBQyxVQUFDLEdBQUcsRUFBRSxJQUFTLElBQUssT0FBQSxHQUFHLEdBQUcsQ0FBQyxFQUFQLENBQU8sRUFBRSxDQUFDLENBQUMsRUFDcEMsaUJBQUssRUFBRSxFQUNQLHFCQUFTLENBQUMsQ0FBQyxDQUFDLENBQ2I7Z0JBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUMzQixnQkFBSSxDQUFDLFVBQUMsR0FBRyxFQUFFLElBQVMsSUFBSyxPQUFBLEdBQUcsR0FBRyxDQUFDLEVBQVAsQ0FBTyxFQUFFLENBQUMsQ0FBQyxFQUNwQyxpQkFBSyxFQUFFLEVBQ1AscUJBQVMsQ0FBQyxDQUFDLENBQUMsQ0FDYjtnQkFDRCxLQUFL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