@dhmk/zustand-lens
Version:
Lens support for zustand
87 lines (86 loc) • 3.79 kB
JavaScript
;
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;