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
JavaScript
"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);
}; });