UNPKG

launch.io

Version:

Launch.IO is an Ultra Hip, Simple, and Fast, Time Traveling React State Management Library

65 lines (64 loc) 2.66 kB
"use strict"; /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ /* eslint-disable @typescript-eslint/no-explicit-any */ 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 }); var history_1 = require("../services/history"); var bindActions_1 = require("../utils/bindActions"); var checkIsPromise = function (value) { return (!!value && (typeof value === "object" || typeof value === "function") && typeof value.then === "function"); }; var reducer = function (launchActions, serviceActions, launcher, options, state, action) { var serviceAction = serviceActions[action.serviceName][action.actionName]; var newState = __assign({}, state); var boundActions = bindActions_1.default(launchActions, launcher); if (action.serviceName === history_1.default.name) { newState = serviceAction({ state: state, actions: boundActions[history_1.default.name], }, { serviceActions: serviceActions, boundActions: boundActions }); return newState; } var updatedState = serviceAction({ state: state[action.serviceName], actions: boundActions[action.serviceName], }, action.payload); if (updatedState && !checkIsPromise(updatedState)) { newState[action.serviceName] = updatedState; if (options.enableTimeTravel) { newState._history = history_1.default.actions.add({ state: state, actions: boundActions[history_1.default.name], }, { newState: newState, action: { serviceName: action.serviceName, actionName: action.actionName, payload: action.payload, }, timeTravelActionContext: { serviceActions: serviceActions, boundActions: boundActions, }, timeTravelHistoryLimit: options.timeTravelHistoryLimit, }); } return newState; } return state; }; exports.default = (function (launchActions, serviceActions, launcher, options) { return function (state, action) { return reducer(launchActions, serviceActions, launcher, options, state, action); }; });