Table of contents

A store of records.

class Store<R extends UnknownRecord = UnknownRecord, Props = unknown> {}

Constructor

Constructs a new instance of the Store class

Parameters
NameDescription

config

{
  schema: StoreSchema<R, Props>
  initialData?: SerializedStore<R>
  id?: string
  props: Props
}

Properties

allRecords

Get an array of all values in the store.

allRecords: () => R[]

clear

Removes all records from the store.

clear: () => void

createComputedCache

Create a computed cache.

createComputedCache: <Result, Record extends R = R>(
  name: string,
  derive: (record: Record) => Result | undefined,
  isEqual?: ((a: Record, b: Record) => boolean) | undefined
) => ComputedCache<Result, Record>
Parameters
NameDescription

name

The name of the derivation cache.

derive

A function used to derive the value of the cache.


createSelectedComputedCache

Create a computed cache from a selector

createSelectedComputedCache: <Selection, Result, Record extends R = R>(
  name: string,
  selector: (record: Record) => Selection | undefined,
  derive: (input: Selection) => Result | undefined
) => ComputedCache<Result, Record>
Parameters
NameDescription

name

The name of the derivation cache.

selector

A function that returns a subset of the original shape

derive

A function used to derive the value of the cache.


get

Get the value of a store record by its id.

get: <K extends IdOf<R>>(id: K) => RecordFromId<K> | undefined
Parameters
NameDescription

id

The id of the record to get.


has

Get whether the record store has a id.

has: <K extends IdOf<R>>(id: K) => boolean
Parameters
NameDescription

id

The id of the record to check.


history

An atom containing the store's history.

readonly history: Atom<number, RecordsDiff<R>>

id

The random id of the store.

readonly id: string

listen

Add a new listener to the store.

listen: (
  onHistory: StoreListener<R>,
  filters?: Partial<StoreListenerFilters>
) => () => void
Parameters
NameDescription

onHistory

The listener to call when the store updates.

filters

Filters to apply to the listener.


mergeRemoteChanges

Merge changes from a remote source without triggering listeners.

mergeRemoteChanges: (fn: () => void) => void
Parameters
NameDescription

fn

A function that merges the external changes.


props

readonly props: Props

put

Add some records to the store. It's an error if they already exist.

put: (records: R[], phaseOverride?: 'initialize') => void
Parameters
NameDescription

records

The records to add.


query

A StoreQueries instance for this store.

readonly query: StoreQueries<R>

remove

Remove some records from the store via their ids.

remove: (ids: IdOf<R>[]) => void
Parameters
NameDescription

ids

The ids of the records to remove.


schema

readonly schema: StoreSchema<R, Props>

scopedTypes

readonly scopedTypes: {
  readonly [K in RecordScope]: ReadonlySet<R['typeName']>
}

serialize

Creates a JSON payload from the record store.

serialize: (scope?: 'all' | RecordScope) => SerializedStore<R>
Parameters
NameDescription

scope

The scope of records to serialize. Defaults to 'document'.


sideEffects

readonly sideEffects: StoreSideEffects<R>

unsafeGetWithoutCapture

Get the value of a store record by its id without updating its epoch.

unsafeGetWithoutCapture: <K extends IdOf<R>>(
  id: K
) => RecordFromId<K> | undefined
Parameters
NameDescription

id

The id of the record to get.


update

Update a record. To update multiple records at once, use the update method of the TypedStore class.

update: <K extends IdOf<R>>(
  id: K,
  updater: (record: RecordFromId<K>) => RecordFromId<K>
) => void
Parameters
NameDescription

id

The id of the record to update.

updater

A function that updates the record.


Methods


applyDiff()

applyDiff(
  diff: RecordsDiff<R>,
  {
    runCallbacks,
    ignoreEphemeralKeys,
  }?: {
    ignoreEphemeralKeys?: boolean
    runCallbacks?: boolean
  }
): void
Parameters
NameDescription

diff

RecordsDiff<R>

{ runCallbacks, ignoreEphemeralKeys, }

{
  ignoreEphemeralKeys?: boolean
  runCallbacks?: boolean
}
Returns
void

dispose()

dispose(): void

extractingChanges()

Run fn and return a RecordsDiff of the changes that occurred as a result.

extractingChanges(fn: () => void): RecordsDiff<R>
Parameters
NameDescription

fn

() => void
Returns
RecordsDiff<R>

filterChangesByScope()

Filters out non-document changes from a diff. Returns null if there are no changes left.

filterChangesByScope(
  change: RecordsDiff<R>,
  scope: RecordScope
): {
  added: { [K in IdOf<R>]: R }
  removed: { [K in IdOf<R>]: R }
  updated: { [K_1 in IdOf<R>]: [from: R, to: R] }
} | null
Parameters
NameDescription

change

RecordsDiff<R>

the records diff

scope

RecordScope
Returns
{
  added: { [K in IdOf<R>]: R }
  removed: { [K in IdOf<R>]: R }
  updated: { [K_1 in IdOf<R>]: [from: R, to: R] }
} | null

getSnapshot()

getSnapshot(scope?: 'all' | RecordScope): StoreSnapshot<R>
Parameters
NameDescription

scope

'all' | RecordScope
Returns
StoreSnapshot<R>

getStoreSnapshot()

Get a serialized snapshot of the store and its schema.

const snapshot = store.getStoreSnapshot()
store.loadStoreSnapshot(snapshot)
getStoreSnapshot(scope?: 'all' | RecordScope): StoreSnapshot<R>
Parameters
NameDescription

scope

'all' | RecordScope

The scope of records to serialize. Defaults to 'document'.

Returns
StoreSnapshot<R>

loadSnapshot()

loadSnapshot(snapshot: StoreSnapshot<R>): void
Parameters
NameDescription

snapshot

StoreSnapshot<R>
Returns
void

loadStoreSnapshot()

Load a serialized snapshot.

const snapshot = store.getStoreSnapshot()
store.loadStoreSnapshot(snapshot)
loadStoreSnapshot(snapshot: StoreSnapshot<R>): void
Parameters
NameDescription

snapshot

StoreSnapshot<R>

The snapshot to load.

Returns
void

migrateSnapshot()

Migrate a serialized snapshot of the store and its schema.

const snapshot = store.getSnapshot()
store.migrateSnapshot(snapshot)
migrateSnapshot(snapshot: StoreSnapshot<R>): StoreSnapshot<R>
Parameters
NameDescription

snapshot

StoreSnapshot<R>

The snapshot to load.

Returns
StoreSnapshot<R>

validate()

validate(
  phase: 'createRecord' | 'initialize' | 'tests' | 'updateRecord'
): void
Parameters
NameDescription

phase

  | 'createRecord'
  | 'initialize'
  | 'tests'
  | 'updateRecord'
Returns
void

RecordTypeStoreQueries