@zag-js/core
Version:
A minimal implementation of xstate fsm for UI machines
19 lines (18 loc) • 467 B
JavaScript
// src/memo.ts
import { isEqual } from "@zag-js/utils";
function memo(getDeps, fn, opts) {
let deps = [];
let result;
return (depArgs) => {
const newDeps = getDeps(depArgs);
const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => !isEqual(deps[index], dep));
if (!depsChanged) return result;
deps = newDeps;
result = fn(newDeps, depArgs);
opts?.onChange?.(result);
return result;
};
}
export {
memo
};