UNPKG

@dhmk/zustand-lens

Version:

Lens support for zustand

87 lines (86 loc) 3.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.persistOptions = exports.combineWatchers = exports.watch = exports.subscribe = exports.namedSetter = exports.customSetter = exports.mergeDeepLeft = exports.mergeDeep = void 0; var utils_1 = require("@dhmk/utils"); var utils_2 = require("@dhmk/utils"); Object.defineProperty(exports, "mergeDeep", { enumerable: true, get: function () { return utils_2.mergeDeep; } }); var mergeDeepLeft = function (a, b) { return (0, utils_1.mergeDeep)(b, a); }; exports.mergeDeepLeft = mergeDeepLeft; var customSetter = function (setter) { return function (fn) { return function (set, get, api, ctx) { return fn(setter(set), get, api, ctx); }; }; }; exports.customSetter = customSetter; exports.namedSetter = (0, exports.customSetter)(function (set) { return function (partial, name, replace) { return set(partial, replace, name); }; }); function subscribe(store, selector, effect, options) { if (options === void 0) { options = {}; } var _a = options.equalityFn, equalityFn = _a === void 0 ? Object.is : _a, _b = options.fireImmediately, fireImmediately = _b === void 0 ? false : _b; var curr = selector(store.getState()); if (fireImmediately) effect(curr, curr); return store.subscribe(function (state) { var next = selector(state); if (!equalityFn(next, curr)) { var prev = curr; effect((curr = next), prev); } }); } exports.subscribe = subscribe; function watch(selector, effect, options) { if (options === void 0) { options = {}; } var _a = options.equalityFn, equalityFn = _a === void 0 ? Object.is : _a, _b = options.fireImmediately, fireImmediately = _b === void 0 ? false : _b; var curr; if (fireImmediately) effect(undefined, undefined); return function (set, ctx) { if (!curr) curr = selector(ctx.get()); set(); var next = selector(ctx.get()); if (!equalityFn(next, curr)) { var prev = curr; effect((curr = next), prev); } }; } exports.watch = watch; function combineWatchers() { var fns = []; for (var _i = 0; _i < arguments.length; _i++) { fns[_i] = arguments[_i]; } var initialized; var runWatchers = function (ctx) { return fns.forEach(function (fn) { return fn(function () { }, ctx); }); }; return function (set, ctx) { if (!initialized) { initialized = true; runWatchers(ctx); } set(); runWatchers(ctx); }; } exports.combineWatchers = combineWatchers; var persist = Symbol("persist"); function persistOptions(conf) { var _a; return _a = {}, _a[persist] = conf, _a; } exports.persistOptions = persistOptions; function walk(x, fn) { return (0, utils_1.isPlainObject)(x) ? (0, utils_1.objectMap)(fn(x), function (v) { return walk(v, fn); }) : x; } var zustandPersistOptions = { merge: function (persistedState, currentState) { if (persistedState === void 0) { persistedState = {}; } return walk((0, utils_1.mergeDeep)(currentState, persistedState), function (x) { var _a, _b, _c; return (_c = (_b = (_a = x[persist]) === null || _a === void 0 ? void 0 : _a.load) === null || _b === void 0 ? void 0 : _b.call(_a, x)) !== null && _c !== void 0 ? _c : x; }); }, partialize: function (state) { return walk(state, function (x) { var _a, _b, _c; return (_c = (_b = (_a = x[persist]) === null || _a === void 0 ? void 0 : _a.save) === null || _b === void 0 ? void 0 : _b.call(_a, x)) !== null && _c !== void 0 ? _c : x; }); }, }; // for typescript persistOptions.merge = zustandPersistOptions.merge; persistOptions.partialize = zustandPersistOptions.partialize;