Module Brr.Store

Persistent storage.

Persisent key-value store implemented over webstorage. Safe if no one tampers with the storage outside of the program. FIXME/TODO this still relies on the jsoo representation, add safer keys with type indexed codecs.

Storage scope

type scope = [
| `Session
| `Persist
]

The storage scope.

val support : scope -> bool

support scope is true iff values can be stored in scope.

Keys

type 'a key

The type for keys whose lookup value is 'a

val key : ?⁠ns:Jstr.t -> unit -> 'a key

key ~ns () is a new storage key in namespace ns. If ns is unspecified, the key lives in a global namespace.

Warning. Reordering invocations of key in the same namespace will most of the time corrupt existing storage. This means that all key calls should always be performed at initialization time. Store.force_version can be used to easily version your store and aleviate this problem.

Storage

In the functions below scope defaults to `Persist.

val mem : ?⁠scope:scope -> 'a key -> bool

mem k is true iff k has a mapping.

val add : ?⁠scope:scope -> 'a key -> 'a -> unit

add k v maps k to v.

val rem : ?⁠scope:scope -> 'a key -> unit

rem k unbinds k.

val find : ?⁠scope:scope -> 'a key -> 'a option

find k is k's mapping in m, if any.

val get : ?⁠scope:scope -> ?⁠absent:'a -> 'a key -> 'a

get k is k's mapping. If absent is provided and m has not binding for k, absent is returned.

raises Invalid_argument

if k is not bound and absent is unspecified or if scope is not supported.

val clear : ?⁠scope:scope -> unit -> unit

clear (), clears all mapping.

Versioning

val force_version : ?⁠scope:scope -> string -> unit

force_version v checks that the version of the store is v. If it's not it clears the store and sets the version to v.