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

history

readonly

An atom containing the store's history.

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

id

readonly

The random id of the store.

readonly id: string

props

readonly
readonly props: Props

query

readonly

A StoreQueries instance for this store.

readonly query: StoreQueries<R>

schema

readonly
readonly schema: StoreSchema<R, Props>

scopedTypes

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

sideEffects

readonly
readonly sideEffects: StoreSideEffects<R>

Methods


allRecords()

Get an array of all values in the store.

allRecords(): R[]

applyDiff()

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

Parameters

NameDescription

diff

{ runCallbacks, ignoreEphemeralKeys, }

{
  ignoreEphemeralKeys?: boolean
  runCallbacks?: boolean
}

Returns

void

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
): ComputedCache<Result, Record>

Parameters

NameDescription

name

string

The name of the derivation cache.

derive

(record: Record) => Result | undefined

A function used to derive the value of the cache.

isEqual

(a: Record, b: Record) => boolean

Returns

ComputedCache<Result, Record>

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

string

The name of the derivation cache.

selector

(record: Record) => Selection | undefined

A function that returns a subset of the original shape

derive

(input: Selection) => Result | undefined

A function used to derive the value of the cache.

Returns

ComputedCache<Result, Record>

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


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

the records diff

scope

Returns

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

get()

Get the value of a store record by its id.

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

Parameters

NameDescription

id

K

The id of the record to get.

Returns

RecordFromId<K> | undefined

getSnapshot()

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

Parameters

NameDescription

scope

'all' | RecordScope

Returns


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


has()

Get whether the record store has a id.

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

Parameters

NameDescription

id

K

The id of the record to check.

Returns

boolean

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.

Returns

() => void

A function to remove the listener.


loadSnapshot()

loadSnapshot(snapshot: StoreSnapshot<R>): void

Parameters

NameDescription

snapshot

Returns

void

loadStoreSnapshot()

Load a serialized snapshot.

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

Parameters

NameDescription

snapshot

The snapshot to load.

Returns

void

mergeRemoteChanges()

Merge changes from a remote source without triggering listeners.

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

Parameters

NameDescription

fn

() => void

A function that merges the external changes.

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

The snapshot to load.

Returns


put()

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

put(records: R[], phaseOverride?: 'initialize'): void

Parameters

NameDescription

records

R[]

The records to add.

phaseOverride

'initialize'

Returns

void

remove()

Remove some records from the store via their ids.

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

Parameters

NameDescription

ids

IdOf<R>[]

The ids of the records to remove.

Returns

void

serialize()

Creates a JSON payload from the record store.

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

Parameters

NameDescription

scope

'all' | RecordScope

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

Returns

The record store snapshot as a JSON payload.


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

K

The id of the record to get.

Returns

RecordFromId<K> | undefined

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

K

The id of the record to update.

updater

(record: RecordFromId<K>) => RecordFromId<K>

A function that updates the record.

Returns

void

validate()

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

Parameters

NameDescription

phase

  | 'createRecord'
  | 'initialize'
  | 'tests'
  | 'updateRecord'

Returns

void

Prev
RecordType
Next
StoreQueries