UNPKG

typedux

Version:

Slightly adjusted Redux (awesome by default) for TS

78 lines 2.98 kB
var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spread = (this && this.__spread) || function () { for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); return ar; }; (function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "@3fv/guard"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.selectorChain = void 0; var guard_1 = require("@3fv/guard"); function continueSelectorChain(store, state, data, keyPath) { if (keyPath === void 0) { keyPath = []; } keyPath = keyPath || []; // noinspection DuplicatedCode var nextSelector = (function () { // TRACK FIRST PROP ACCESS var firstGet = keyPath.map(function () { return true; }); // CHECK IF KEY SHOULD BE NUMBER function resolveKey(value, key, index) { if (firstGet[index]) { if (Array.isArray(value)) { var keyNum = guard_1.toNumber(key); if (guard_1.isNumber(keyNum)) { key = keyPath[index] = keyNum; } } firstGet[index] = false; } return key; } function getterFn(state) { return keyPath.reduce(function (value, key, index) { return value[resolveKey(value, key, index)]; }, state); } var getter = Object.assign(getterFn, { subscribe: function (listener) { return store.observe(getterFn, listener); } }); return getter; // overrideCallback(getter, keyPath) }); return (new Proxy(nextSelector, { get: function (target, key) { return continueSelectorChain(store, state, undefined, __spread(keyPath, [key])); } })); } //PropChainType<S, S,SelectorChainDataAccessor<S,S>> function selectorChain(store, state) { return continueSelectorChain(store, state, state); } exports.selectorChain = selectorChain; }); //# sourceMappingURL=SelectorChain.js.map