UNPKG

@rxx/worker

Version:

React MVI micro framework.

71 lines (70 loc) 2.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var rxjs_1 = require("rxjs"); var WorkerPostEventType; (function (WorkerPostEventType) { WorkerPostEventType["INITIALIZED"] = "INITIALIZED"; WorkerPostEventType["DISPATCHED"] = "DISPATCHED"; WorkerPostEventType["UPDATE"] = "UPDATE"; })(WorkerPostEventType = exports.WorkerPostEventType || (exports.WorkerPostEventType = {})); var WorkerReceiveEventType; (function (WorkerReceiveEventType) { WorkerReceiveEventType["DISPATCH"] = "DISPATCH"; WorkerReceiveEventType["INITIALIZE"] = "INITIALIZE"; WorkerReceiveEventType["EXIT"] = "EXIT"; })(WorkerReceiveEventType = exports.WorkerReceiveEventType || (exports.WorkerReceiveEventType = {})); exports.initWorker = function (provisioning) { var subject = new rxjs_1.Subject(); var subscription = new rxjs_1.Subscription(); var post = process.env.RMVI_TEST ? function (_a) { var type = _a.type, payload = _a.payload; global['RECEIVE_WORKER_MESSAGE']({ type: type, payload: payload }); } : typeof postMessage === 'function' ? function (_a) { var type = _a.type, payload = _a.payload; postMessage({ type: type, payload: payload }); } : function () { }; if (typeof Worker === 'function') { onmessage = function (e) { var data = e.data; subject.next(data); }; } var publisher = provisioning.getPublisher(); subscription.add(subject.subscribe(function (_a) { var type = _a.type, payload = _a.payload; switch (type) { case WorkerReceiveEventType.DISPATCH: publisher(payload.type, payload.payload); provisioning.emitAsync(function () { return post({ type: WorkerPostEventType.DISPATCHED, payload: payload }); }); break; case WorkerReceiveEventType.INITIALIZE: provisioning.prepare(payload); provisioning.subscribe(function (state, isInitial) { if (isInitial) { post({ type: WorkerPostEventType.INITIALIZED, payload: state.view, }); } else { post({ type: WorkerPostEventType.UPDATE, payload: state.view }); } }, true); break; case WorkerReceiveEventType.EXIT: publisher.unsubscribe(); provisioning.dispose(); subscription.unsubscribe(); break; default: return; } })); return subject; };