@rxx/worker
Version:
React MVI micro framework.
71 lines (70 loc) • 2.82 kB
JavaScript
;
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;
};