Module Note_brr_legacy.StoreSource

Persistent storage.

Persisent key-value store implemented over webstorage. Safe if no one tampers with the storage outside of the program.

XXX.

Storage scope

Sourcetype scope = [
  1. | `Session
  2. | `Persist
]

The storage scope.

Keys

Sourcetype 'a key

The type for keys whose lookup value is 'a

Sourceval 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.

Sourceval mem : ?scope:scope -> 'a key -> bool

mem k is true iff k has a mapping.

Sourceval add : ?scope:scope -> 'a key -> 'a -> unit

add k v maps k to v.

Sourceval rem : ?scope:scope -> 'a key -> unit

rem k unbinds k.

Sourceval find : ?scope:scope -> 'a key -> 'a option

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

Sourceval 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.

Sourceval clear : ?scope:scope -> unit -> unit

clear (), clears all mapping.

Sourceval ev : unit Note.event

ev fires on storage changes. FIXME provide something sensitive, e.g. key watching.

Versioning

Sourceval 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.