UNPKG

react-torch

Version:

A lib to server-side render with react.

87 lines (86 loc) 3.44 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.select = exports.subscribe = exports.createPureModel = void 0; var store_1 = require("./store"); var lifecircle_1 = require("./lifecircle"); var storeHook_1 = require("./storeHook"); var util_1 = require("./util"); var createPureModel = function (initializer, options) { if (options === void 0) { options = {}; } var _a = (0, lifecircle_1.createLifeCircleManager)(), preload = _a.preload, start = _a.start, finish = _a.finish; var hasStore = false; var setupStore = function (storeOptions) { if (hasStore) { throw new Error("Expected calling setupStore only once in initializer: " + initializer.toString()); } hasStore = true; return (0, store_1.createStore)(__assign(__assign({ devtools: true }, storeOptions), { preloadedState: options.preloadedState })); }; var implementations = { setupStore: setupStore, setupPreload: preload.setup, setupStart: start.setup, setupFinish: finish.setup, }; var result = (0, storeHook_1.run)(function () { var result = initializer(); if (!result) { throw new Error("Expected initialzer returning { store, actions }, but got " + result); } var store = result.store, actions = result.actions; if (!store) { throw new Error("Expected initialzer returning { store, actions }, but got a invalid store: " + store); } if (!actions) { throw new Error("Expected initialzer returning { store, actions }, but got a invalid actions: " + actions); } return { store: store, actions: actions }; }, implementations); return __assign(__assign({}, result), { preload: preload, start: start, finish: finish }); }; exports.createPureModel = createPureModel; function subscribe(model, listener) { var unsubscribe = model.store.subscribe(function () { if (!model.start.hasRun()) { return; } var state = model.store.getState(); listener(state); }); return unsubscribe; } exports.subscribe = subscribe; function select(options) { if (!(0, util_1.isPlainObject)(options)) { throw new Error("Expected subscribe(options) recieved { store, listener, selector?, compare? }, instead of " + options); } var model = options.model, selector = options.selector, listener = options.listener, _a = options.compare, compare = _a === void 0 ? util_1.shallowEqual : _a; var prevState = selector(model.store.getState()); var unsubscribe = model.store.subscribe(function () { if (!model.start.hasRun()) { return; } var state = model.store.getState(); var currState = selector(state); if (!compare(currState, prevState)) { prevState = currState; listener(currState); } else { prevState = currState; } }); return unsubscribe; } exports.select = select;