Property

function property<T>(key: string, defaultValue: T) {
  const [_, setUpdatedAt] = useSyncedState("updatedAt", 0);
  const [value, setter] = useSyncedState(key, defaultValue);

  return {
    value: value,
    set: function (newValue) {
      setUpdatedAt(Date.now());
      setter(newValue);
    },
    modify: function (fn: (currentValue: T) => T) {
      setUpdatedAt(Date.now());
      setter(fn);
    },
  };
}