@laboverwire/stitch 0.6.4 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,12 @@
6
6
 
7
7
  - _Nothing yet._
8
8
 
9
+ ## 0.6.5
10
+
11
+ ### Added
12
+
13
+ - **`updateIf` / `deleteIf` — version-fenced compare-and-set writes.** `updateIf(entity, id, fields, expectedVersion): Promise<number>` applies `fields` only if the row's server version still equals `expectedVersion`, resolving with the new version; `deleteIf(entity, id, expectedVersion): Promise<void>` removes the row under the same fence. Both are **remote-first / online-only** — sent to the broker first, never optimistically queued, applied locally only on success — so they reject when there is no connected remote rather than queuing the write for later. A stale-version failure surfaces as the engine's terminal `err.kind = 'preconditionFailed'` (distinct from the retryable `conflict`); the adapter forwards the rejection untouched, so callers read `err.kind` directly. These surface the `@laboverwire/stitch-wasm` 0.6.0 CAS methods (from stitch-rs #47) that the 0.6.4 floor bump already made available, so no new engine floor is needed. Closes #57.
14
+
9
15
  ## 0.6.4
10
16
 
11
17
  ### Fixed
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,aAAa,EAEb,YAAY,EAKZ,KAAK,EACL,WAAW,EACX,YAAY,EACb,MAAM,YAAY,CAAC;AAqUpB,wBAAgB,WAAW,CAAC,CAAC,SAAS,YAAY,GAAG,aAAa,EAChE,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,YAAY,GACrB,KAAK,CAAC,CAAC,CAAC,CAIV"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,aAAa,EAEb,YAAY,EAKZ,KAAK,EACL,WAAW,EACX,YAAY,EACb,MAAM,YAAY,CAAC;AAkVpB,wBAAgB,WAAW,CAAC,CAAC,SAAS,YAAY,GAAG,aAAa,EAChE,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,YAAY,GACrB,KAAK,CAAC,CAAC,CAAC,CAIV"}
package/dist/store.js CHANGED
@@ -147,6 +147,12 @@ class StitchStore {
147
147
  delete(entity, id, tag) {
148
148
  return this.#afterReady(() => this.#inner.delete(entity, id, tag ?? undefined));
149
149
  }
150
+ updateIf(entity, id, fields, expectedVersion) {
151
+ return this.#afterReady(() => this.#inner.updateIf(entity, id, fields, expectedVersion));
152
+ }
153
+ deleteIf(entity, id, expectedVersion) {
154
+ return this.#afterReady(() => this.#inner.deleteIf(entity, id, expectedVersion));
155
+ }
150
156
  subscribeToScope(scopeId, entity, callback) {
151
157
  return deferrableSubscribe(() => this.#inner.ready(), () => this.#readyPromise, () => this.#inner.subscribeToScope(scopeId, entity, callback), callback);
152
158
  }
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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","sourcesContent":["import { createStore as createWasmStore } from '@laboverwire/stitch-wasm';\nimport type { Store as WasmStore } from '@laboverwire/stitch-wasm';\nimport type {\n ConnectionStatus,\n DefaultSchema,\n EntityKey,\n EntitySchema,\n ListFilter,\n MemoryStore,\n OriginTag,\n SortField,\n Store,\n StoreConfig,\n StoreOptions,\n} from './types.ts';\n\nconst EMPTY_ARRAY: Record<string, unknown>[] = [];\nconst EMPTY_MAP: Record<string, Record<string, unknown>> = {};\n\nfunction normalizeStatus(raw: string): ConnectionStatus {\n switch (raw) {\n case 'Connected':\n return 'connected';\n case 'Connecting':\n return 'connecting';\n case 'Disconnected':\n return 'disconnected';\n case 'Error':\n return 'error';\n default:\n return 'offline';\n }\n}\n\nfunction cacheKey(scopeId: string, entity: string): string {\n return `${scopeId} ${entity}`;\n}\n\nfunction deferrableSubscribe(\n isReady: () => boolean,\n whenReady: () => Promise<void>,\n subscribeNow: () => () => void,\n poke: () => void\n): () => void {\n if (isReady()) {\n const live = subscribeNow();\n poke();\n return live;\n }\n let live: (() => void) | null = null;\n let cancelled = false;\n void whenReady().then(() => {\n if (cancelled) return;\n live = subscribeNow();\n poke();\n });\n return () => {\n cancelled = true;\n if (live) {\n live();\n live = null;\n }\n };\n}\n\nclass MemoryView implements MemoryStore {\n #inner: WasmStore;\n #whenReady: () => Promise<void>;\n #arrays = new Map<string, { version: number; data: Record<string, unknown>[] }>();\n #maps = new Map<string, { version: number; data: Record<string, Record<string, unknown>> }>();\n\n constructor(inner: WasmStore, whenReady: () => Promise<void>) {\n this.#inner = inner;\n this.#whenReady = whenReady;\n }\n\n getSnapshot(entity: string, scopeId: string): Record<string, unknown>[] {\n if (!this.#inner.ready()) return EMPTY_ARRAY;\n const version = this.#inner.getVersion(scopeId, entity);\n const key = cacheKey(scopeId, entity);\n const hit = this.#arrays.get(key);\n if (hit && hit.version === version) return hit.data;\n const data = this.#inner.getSnapshot(entity, scopeId) as Record<string, unknown>[];\n this.#arrays.set(key, { version, data });\n return data;\n }\n\n getSnapshotAsMap(entity: string, scopeId: string): Record<string, Record<string, unknown>> {\n if (!this.#inner.ready()) return EMPTY_MAP;\n const version = this.#inner.getVersion(scopeId, entity);\n const key = cacheKey(scopeId, entity);\n const hit = this.#maps.get(key);\n if (hit && hit.version === version) return hit.data;\n const data = this.#inner.getSnapshotAsMap(entity, scopeId) as Record<\n string,\n Record<string, unknown>\n >;\n this.#maps.set(key, { version, data });\n return data;\n }\n\n subscribeToScope(scopeId: string, entity: string, callback: () => void): () => void {\n return deferrableSubscribe(\n () => this.#inner.ready(),\n this.#whenReady,\n () => this.#inner.subscribeToScope(scopeId, entity, callback) as () => void,\n callback\n );\n }\n}\n\nclass StitchStore<S extends EntitySchema = DefaultSchema> implements Store<S> {\n readonly config: StoreConfig;\n readonly memory: MemoryStore;\n #inner: WasmStore;\n #memory: MemoryView;\n #hasPersistence: boolean;\n #hasRemote: boolean;\n #reconnectValidator: (() => Promise<void>) | null = null;\n #readyPromise: Promise<void>;\n #resolveReady!: () => void;\n\n constructor(inner: WasmStore, config: StoreConfig, options: StoreOptions) {\n this.#inner = inner;\n this.config = config;\n this.#hasPersistence = options.persistence != null;\n this.#hasRemote = options.remote != null;\n this.#readyPromise = new Promise<void>((resolve) => {\n this.#resolveReady = resolve;\n });\n this.#memory = new MemoryView(inner, () => this.#readyPromise);\n this.memory = this.#memory;\n }\n\n #afterReady<T>(fn: () => Promise<T>): Promise<T> {\n return this.#inner.ready() ? fn() : this.#readyPromise.then(fn);\n }\n\n async initialize(): Promise<void> {\n await this.#inner.initialize();\n this.#resolveReady();\n }\n\n destroy(): Promise<void> {\n return this.#inner.ready() ? this.#inner.destroy() : Promise.resolve();\n }\n\n get ready(): boolean {\n return this.#inner.ready();\n }\n\n read<K extends EntityKey<S>>(entity: K, id: string): S[K] | null {\n if (!this.#inner.ready()) return null;\n return (this.#inner.read(entity, id) ?? null) as S[K] | null;\n }\n\n getSnapshot<K extends EntityKey<S>>(entity: K, scopeId: string): S[K][] {\n return this.#memory.getSnapshot(entity, scopeId) as S[K][];\n }\n\n getSnapshotAsMap<K extends EntityKey<S>>(entity: K, scopeId: string): Record<string, S[K]> {\n return this.#memory.getSnapshotAsMap(entity, scopeId) as Record<string, S[K]>;\n }\n\n list<K extends EntityKey<S>>(entity: K, filter?: ListFilter): Promise<S[K][]> {\n return this.#afterReady(() => this.#inner.list(entity, filter ?? {})) as Promise<S[K][]>;\n }\n\n listRootEntities(sort?: SortField[]): Promise<Record<string, unknown>[]> {\n return this.#afterReady(() => this.#inner.listRootEntities(sort ?? [])) as Promise<\n Record<string, unknown>[]\n >;\n }\n\n getChildCount<K extends EntityKey<S>>(entity: K, scopeId: string): number {\n if (!this.#inner.ready()) return 0;\n return this.#inner.getChildCount(entity, scopeId);\n }\n\n getVersion<K extends EntityKey<S>>(scopeId: string, entity: K): number {\n if (!this.#inner.ready()) return 0;\n return this.#inner.getVersion(scopeId, entity);\n }\n\n create<K extends EntityKey<S>>(\n entity: K,\n scopeId: string,\n data: Partial<S[K]> & Record<string, unknown>,\n tag?: OriginTag\n ): Promise<string> {\n return this.#afterReady(() => this.#inner.create(entity, scopeId, data, tag ?? undefined));\n }\n\n update<K extends EntityKey<S>>(\n entity: K,\n id: string,\n fields: Partial<S[K]>,\n tag?: OriginTag\n ): Promise<void> {\n return this.#afterReady(() => this.#inner.update(entity, id, fields, tag ?? undefined));\n }\n\n delete<K extends EntityKey<S>>(entity: K, id: string, tag?: OriginTag): Promise<void> {\n return this.#afterReady(() => this.#inner.delete(entity, id, tag ?? undefined));\n }\n\n subscribeToScope<K extends EntityKey<S>>(\n scopeId: string,\n entity: K,\n callback: () => void\n ): () => void {\n return deferrableSubscribe(\n () => this.#inner.ready(),\n () => this.#readyPromise,\n () => this.#inner.subscribeToScope(scopeId, entity, callback) as () => void,\n callback\n );\n }\n\n subscribeToEntity<K extends EntityKey<S>>(\n entity: K,\n callback: (data: S[K] | null, op: 'insert' | 'update' | 'delete') => void\n ): () => void {\n return deferrableSubscribe(\n () => this.#inner.ready(),\n () => this.#readyPromise,\n () =>\n this.#inner.subscribeToEntity(entity, (data: unknown, op: 'insert' | 'update' | 'delete') =>\n callback((data ?? null) as S[K] | null, op)\n ) as () => void,\n () => callback(null, 'update')\n );\n }\n\n beginBatch(): void {\n if (this.#inner.ready()) this.#inner.beginBatch();\n }\n\n endBatch(): void {\n if (this.#inner.ready()) this.#inner.endBatch();\n }\n\n replaceScope(scopeId: string): Promise<void> {\n return this.#afterReady(() => this.#inner.replaceScope(scopeId));\n }\n\n closeScope(scopeId: string): Promise<void> {\n return this.#afterReady(() => this.#inner.closeScope(scopeId));\n }\n\n loadScope(scopeId: string, data: Record<string, Record<string, unknown>[]>): Promise<void> {\n return this.#afterReady(() => this.#inner.loadScope(scopeId, data));\n }\n\n clearScope(scopeId: string): Promise<void> {\n return this.#afterReady(() => this.#inner.clearScope(scopeId));\n }\n\n get connectionStatus(): ConnectionStatus {\n if (!this.#inner.ready()) return 'offline';\n return normalizeStatus(this.#inner.connectionStatus());\n }\n\n subscribeToConnectionStatus(cb: (s: ConnectionStatus) => void): () => void {\n return deferrableSubscribe(\n () => this.#inner.ready(),\n () => this.#readyPromise,\n () =>\n this.#inner.subscribeToConnectionStatus((raw: string) =>\n cb(normalizeStatus(raw))\n ) as () => void,\n () => cb(normalizeStatus(this.#inner.connectionStatus()))\n );\n }\n\n disconnect(): Promise<void> {\n return this.#inner.ready() ? this.#inner.disconnect() : Promise.resolve();\n }\n\n async reconnect(serverUrl: string, getTicket?: () => Promise<string>): Promise<void> {\n if (this.#reconnectValidator) await this.#reconnectValidator();\n const ticket = getTicket ? await getTicket() : undefined;\n await this.#inner.reconnect(serverUrl, ticket ?? undefined);\n }\n\n get isReconnecting(): boolean {\n if (!this.#inner.ready()) return false;\n return this.#inner.isReconnecting();\n }\n\n setAuthenticatedUser(userId: string): void {\n if (this.#inner.ready()) this.#inner.setAuthenticatedUser(userId);\n else void this.#readyPromise.then(() => this.#inner.setAuthenticatedUser(userId));\n }\n\n setSessionInvalidHandler(handler: () => void): void {\n if (this.#inner.ready()) this.#inner.setSessionInvalidHandler(handler);\n else void this.#readyPromise.then(() => this.#inner.setSessionInvalidHandler(handler));\n }\n\n setReconnectValidator(validator: () => Promise<void>): void {\n this.#reconnectValidator = validator;\n }\n\n resetForLogout(): Promise<void> {\n return this.#inner.ready() ? this.#inner.resetForLogout() : Promise.resolve();\n }\n\n readLocalState(entity: string, id: string): Promise<Record<string, unknown> | null> {\n return this.#afterReady(() =>\n this.#inner\n .readLocalState(entity, id)\n .then((r: unknown) => (r ?? null) as Record<string, unknown> | null)\n );\n }\n\n updateLocalState(entity: string, id: string, fields: Record<string, unknown>): Promise<void> {\n return this.#afterReady(() => this.#inner.updateLocalState(entity, id, fields));\n }\n\n pendingMutationCount(scopeId: string): Promise<number> {\n return this.#afterReady(() => this.#inner.pendingMutationCount(scopeId));\n }\n\n request(topic: string, payload: unknown): Promise<Record<string, unknown>> {\n return this.#afterReady(() => this.#inner.request(topic, payload)) as Promise<\n Record<string, unknown>\n >;\n }\n\n get hasPersistence(): boolean {\n return this.#hasPersistence;\n }\n\n get hasRemote(): boolean {\n return this.#hasRemote;\n }\n}\n\nexport function createStore<S extends EntitySchema = DefaultSchema>(\n config: StoreConfig,\n options?: StoreOptions\n): Store<S> {\n const resolvedOptions = options ?? {};\n const inner = createWasmStore(config, resolvedOptions);\n return new StitchStore<S>(inner, config, resolvedOptions);\n}\n"]}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAgB1E,MAAM,WAAW,GAA8B,EAAE,CAAC;AAClD,MAAM,SAAS,GAA4C,EAAE,CAAC;AAE9D,SAAS,eAAe,CAAC,GAAW;IAClC,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,YAAY;YACf,OAAO,YAAY,CAAC;QACtB,KAAK,cAAc;YACjB,OAAO,cAAc,CAAC;QACxB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe,EAAE,MAAc;IAC/C,OAAO,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAsB,EACtB,SAA8B,EAC9B,YAA8B,EAC9B,IAAgB;IAEhB,IAAI,OAAO,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;QAC5B,IAAI,EAAE,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,GAAwB,IAAI,CAAC;IACrC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QACzB,IAAI,SAAS;YAAE,OAAO;QACtB,IAAI,GAAG,YAAY,EAAE,CAAC;QACtB,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,EAAE;QACV,SAAS,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU;IACd,MAAM,CAAY;IAClB,UAAU,CAAsB;IAChC,OAAO,GAAG,IAAI,GAAG,EAAgE,CAAC;IAClF,KAAK,GAAG,IAAI,GAAG,EAA8E,CAAC;IAE9F,YAAY,KAAgB,EAAE,SAA8B;QAC1D,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,OAAe;QACzC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAAE,OAAO,WAAW,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO;YAAE,OAAO,GAAG,CAAC,IAAI,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAA8B,CAAC;QACnF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,MAAc,EAAE,OAAe;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAAE,OAAO,SAAS,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO;YAAE,OAAO,GAAG,CAAC,IAAI,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAGxD,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,OAAe,EAAE,MAAc,EAAE,QAAoB;QACpE,OAAO,mBAAmB,CACxB,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EACzB,IAAI,CAAC,UAAU,EACf,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAe,EAC3E,QAAQ,CACT,CAAC;IACJ,CAAC;CACF;AAED,MAAM,WAAW;IACN,MAAM,CAAc;IACpB,MAAM,CAAc;IAC7B,MAAM,CAAY;IAClB,OAAO,CAAa;IACpB,eAAe,CAAU;IACzB,UAAU,CAAU;IACpB,mBAAmB,GAAiC,IAAI,CAAC;IACzD,aAAa,CAAgB;IAC7B,aAAa,CAAc;IAE3B,YAAY,KAAgB,EAAE,MAAmB,EAAE,OAAqB;QACtE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACjD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,WAAW,CAAI,EAAoB;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACzE,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,CAAyB,MAAS,EAAE,EAAU;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,IAAI,CAAgB,CAAC;IAC/D,CAAC;IAED,WAAW,CAAyB,MAAS,EAAE,OAAe;QAC5D,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAW,CAAC;IAC7D,CAAC;IAED,gBAAgB,CAAyB,MAAS,EAAE,OAAe;QACjE,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAyB,CAAC;IAChF,CAAC;IAED,IAAI,CAAyB,MAAS,EAAE,MAAmB;QACzD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAoB,CAAC;IAC3F,CAAC;IAED,gBAAgB,CAAC,IAAkB;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,IAAI,EAAE,CAAC,CAErE,CAAC;IACJ,CAAC;IAED,aAAa,CAAyB,MAAS,EAAE,OAAe;QAC9D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAAE,OAAO,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,UAAU,CAAyB,OAAe,EAAE,MAAS;QAC3D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAAE,OAAO,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CACJ,MAAS,EACT,OAAe,EACf,IAA6C,EAC7C,GAAe;QAEf,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,CACJ,MAAS,EACT,EAAU,EACV,MAAqB,EACrB,GAAe;QAEf,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,CAAyB,MAAS,EAAE,EAAU,EAAE,GAAe;QACnE,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,QAAQ,CACN,MAAS,EACT,EAAU,EACV,MAAqB,EACrB,eAAuB;QAEvB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,QAAQ,CAAyB,MAAS,EAAE,EAAU,EAAE,eAAuB;QAC7E,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,gBAAgB,CACd,OAAe,EACf,MAAS,EACT,QAAoB;QAEpB,OAAO,mBAAmB,CACxB,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EACzB,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EACxB,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAe,EAC3E,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,iBAAiB,CACf,MAAS,EACT,QAAyE;QAEzE,OAAO,mBAAmB,CACxB,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EACzB,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EACxB,GAAG,EAAE,CACH,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,IAAa,EAAE,EAAkC,EAAE,EAAE,CAC1F,QAAQ,CAAC,CAAC,IAAI,IAAI,IAAI,CAAgB,EAAE,EAAE,CAAC,CAC9B,EACjB,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAC/B,CAAC;IACJ,CAAC;IAED,UAAU;QACR,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IACpD,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAClD,CAAC;IAED,YAAY,CAAC,OAAe;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,SAAS,CAAC,OAAe,EAAE,IAA+C;QACxE,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,gBAAgB;QAClB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAAE,OAAO,SAAS,CAAC;QAC3C,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,2BAA2B,CAAC,EAAiC;QAC3D,OAAO,mBAAmB,CACxB,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EACzB,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EACxB,GAAG,EAAE,CACH,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,GAAW,EAAE,EAAE,CACtD,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CACX,EACjB,GAAG,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,SAAiC;QAClE,IAAI,IAAI,CAAC,mBAAmB;YAAE,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACzD,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,cAAc;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAAE,OAAO,KAAK,CAAC;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IACtC,CAAC;IAED,oBAAoB,CAAC,MAAc;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;;YAC7D,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,wBAAwB,CAAC,OAAmB;QAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;;YAClE,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,qBAAqB,CAAC,SAA8B;QAClD,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;IACvC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAChF,CAAC;IAED,cAAc,CAAC,MAAc,EAAE,EAAU;QACvC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAC3B,IAAI,CAAC,MAAM;aACR,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC;aAC1B,IAAI,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAmC,CAAC,CACvE,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,MAAc,EAAE,EAAU,EAAE,MAA+B;QAC1E,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,oBAAoB,CAAC,OAAe;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,OAAgB;QACrC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAEhE,CAAC;IACJ,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CACzB,MAAmB,EACnB,OAAsB;IAEtB,MAAM,eAAe,GAAG,OAAO,IAAI,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACvD,OAAO,IAAI,WAAW,CAAI,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;AAC5D,CAAC","sourcesContent":["import { createStore as createWasmStore } from '@laboverwire/stitch-wasm';\nimport type { Store as WasmStore } from '@laboverwire/stitch-wasm';\nimport type {\n ConnectionStatus,\n DefaultSchema,\n EntityKey,\n EntitySchema,\n ListFilter,\n MemoryStore,\n OriginTag,\n SortField,\n Store,\n StoreConfig,\n StoreOptions,\n} from './types.ts';\n\nconst EMPTY_ARRAY: Record<string, unknown>[] = [];\nconst EMPTY_MAP: Record<string, Record<string, unknown>> = {};\n\nfunction normalizeStatus(raw: string): ConnectionStatus {\n switch (raw) {\n case 'Connected':\n return 'connected';\n case 'Connecting':\n return 'connecting';\n case 'Disconnected':\n return 'disconnected';\n case 'Error':\n return 'error';\n default:\n return 'offline';\n }\n}\n\nfunction cacheKey(scopeId: string, entity: string): string {\n return `${scopeId} ${entity}`;\n}\n\nfunction deferrableSubscribe(\n isReady: () => boolean,\n whenReady: () => Promise<void>,\n subscribeNow: () => () => void,\n poke: () => void\n): () => void {\n if (isReady()) {\n const live = subscribeNow();\n poke();\n return live;\n }\n let live: (() => void) | null = null;\n let cancelled = false;\n void whenReady().then(() => {\n if (cancelled) return;\n live = subscribeNow();\n poke();\n });\n return () => {\n cancelled = true;\n if (live) {\n live();\n live = null;\n }\n };\n}\n\nclass MemoryView implements MemoryStore {\n #inner: WasmStore;\n #whenReady: () => Promise<void>;\n #arrays = new Map<string, { version: number; data: Record<string, unknown>[] }>();\n #maps = new Map<string, { version: number; data: Record<string, Record<string, unknown>> }>();\n\n constructor(inner: WasmStore, whenReady: () => Promise<void>) {\n this.#inner = inner;\n this.#whenReady = whenReady;\n }\n\n getSnapshot(entity: string, scopeId: string): Record<string, unknown>[] {\n if (!this.#inner.ready()) return EMPTY_ARRAY;\n const version = this.#inner.getVersion(scopeId, entity);\n const key = cacheKey(scopeId, entity);\n const hit = this.#arrays.get(key);\n if (hit && hit.version === version) return hit.data;\n const data = this.#inner.getSnapshot(entity, scopeId) as Record<string, unknown>[];\n this.#arrays.set(key, { version, data });\n return data;\n }\n\n getSnapshotAsMap(entity: string, scopeId: string): Record<string, Record<string, unknown>> {\n if (!this.#inner.ready()) return EMPTY_MAP;\n const version = this.#inner.getVersion(scopeId, entity);\n const key = cacheKey(scopeId, entity);\n const hit = this.#maps.get(key);\n if (hit && hit.version === version) return hit.data;\n const data = this.#inner.getSnapshotAsMap(entity, scopeId) as Record<\n string,\n Record<string, unknown>\n >;\n this.#maps.set(key, { version, data });\n return data;\n }\n\n subscribeToScope(scopeId: string, entity: string, callback: () => void): () => void {\n return deferrableSubscribe(\n () => this.#inner.ready(),\n this.#whenReady,\n () => this.#inner.subscribeToScope(scopeId, entity, callback) as () => void,\n callback\n );\n }\n}\n\nclass StitchStore<S extends EntitySchema = DefaultSchema> implements Store<S> {\n readonly config: StoreConfig;\n readonly memory: MemoryStore;\n #inner: WasmStore;\n #memory: MemoryView;\n #hasPersistence: boolean;\n #hasRemote: boolean;\n #reconnectValidator: (() => Promise<void>) | null = null;\n #readyPromise: Promise<void>;\n #resolveReady!: () => void;\n\n constructor(inner: WasmStore, config: StoreConfig, options: StoreOptions) {\n this.#inner = inner;\n this.config = config;\n this.#hasPersistence = options.persistence != null;\n this.#hasRemote = options.remote != null;\n this.#readyPromise = new Promise<void>((resolve) => {\n this.#resolveReady = resolve;\n });\n this.#memory = new MemoryView(inner, () => this.#readyPromise);\n this.memory = this.#memory;\n }\n\n #afterReady<T>(fn: () => Promise<T>): Promise<T> {\n return this.#inner.ready() ? fn() : this.#readyPromise.then(fn);\n }\n\n async initialize(): Promise<void> {\n await this.#inner.initialize();\n this.#resolveReady();\n }\n\n destroy(): Promise<void> {\n return this.#inner.ready() ? this.#inner.destroy() : Promise.resolve();\n }\n\n get ready(): boolean {\n return this.#inner.ready();\n }\n\n read<K extends EntityKey<S>>(entity: K, id: string): S[K] | null {\n if (!this.#inner.ready()) return null;\n return (this.#inner.read(entity, id) ?? null) as S[K] | null;\n }\n\n getSnapshot<K extends EntityKey<S>>(entity: K, scopeId: string): S[K][] {\n return this.#memory.getSnapshot(entity, scopeId) as S[K][];\n }\n\n getSnapshotAsMap<K extends EntityKey<S>>(entity: K, scopeId: string): Record<string, S[K]> {\n return this.#memory.getSnapshotAsMap(entity, scopeId) as Record<string, S[K]>;\n }\n\n list<K extends EntityKey<S>>(entity: K, filter?: ListFilter): Promise<S[K][]> {\n return this.#afterReady(() => this.#inner.list(entity, filter ?? {})) as Promise<S[K][]>;\n }\n\n listRootEntities(sort?: SortField[]): Promise<Record<string, unknown>[]> {\n return this.#afterReady(() => this.#inner.listRootEntities(sort ?? [])) as Promise<\n Record<string, unknown>[]\n >;\n }\n\n getChildCount<K extends EntityKey<S>>(entity: K, scopeId: string): number {\n if (!this.#inner.ready()) return 0;\n return this.#inner.getChildCount(entity, scopeId);\n }\n\n getVersion<K extends EntityKey<S>>(scopeId: string, entity: K): number {\n if (!this.#inner.ready()) return 0;\n return this.#inner.getVersion(scopeId, entity);\n }\n\n create<K extends EntityKey<S>>(\n entity: K,\n scopeId: string,\n data: Partial<S[K]> & Record<string, unknown>,\n tag?: OriginTag\n ): Promise<string> {\n return this.#afterReady(() => this.#inner.create(entity, scopeId, data, tag ?? undefined));\n }\n\n update<K extends EntityKey<S>>(\n entity: K,\n id: string,\n fields: Partial<S[K]>,\n tag?: OriginTag\n ): Promise<void> {\n return this.#afterReady(() => this.#inner.update(entity, id, fields, tag ?? undefined));\n }\n\n delete<K extends EntityKey<S>>(entity: K, id: string, tag?: OriginTag): Promise<void> {\n return this.#afterReady(() => this.#inner.delete(entity, id, tag ?? undefined));\n }\n\n updateIf<K extends EntityKey<S>>(\n entity: K,\n id: string,\n fields: Partial<S[K]>,\n expectedVersion: number\n ): Promise<number> {\n return this.#afterReady(() => this.#inner.updateIf(entity, id, fields, expectedVersion));\n }\n\n deleteIf<K extends EntityKey<S>>(entity: K, id: string, expectedVersion: number): Promise<void> {\n return this.#afterReady(() => this.#inner.deleteIf(entity, id, expectedVersion));\n }\n\n subscribeToScope<K extends EntityKey<S>>(\n scopeId: string,\n entity: K,\n callback: () => void\n ): () => void {\n return deferrableSubscribe(\n () => this.#inner.ready(),\n () => this.#readyPromise,\n () => this.#inner.subscribeToScope(scopeId, entity, callback) as () => void,\n callback\n );\n }\n\n subscribeToEntity<K extends EntityKey<S>>(\n entity: K,\n callback: (data: S[K] | null, op: 'insert' | 'update' | 'delete') => void\n ): () => void {\n return deferrableSubscribe(\n () => this.#inner.ready(),\n () => this.#readyPromise,\n () =>\n this.#inner.subscribeToEntity(entity, (data: unknown, op: 'insert' | 'update' | 'delete') =>\n callback((data ?? null) as S[K] | null, op)\n ) as () => void,\n () => callback(null, 'update')\n );\n }\n\n beginBatch(): void {\n if (this.#inner.ready()) this.#inner.beginBatch();\n }\n\n endBatch(): void {\n if (this.#inner.ready()) this.#inner.endBatch();\n }\n\n replaceScope(scopeId: string): Promise<void> {\n return this.#afterReady(() => this.#inner.replaceScope(scopeId));\n }\n\n closeScope(scopeId: string): Promise<void> {\n return this.#afterReady(() => this.#inner.closeScope(scopeId));\n }\n\n loadScope(scopeId: string, data: Record<string, Record<string, unknown>[]>): Promise<void> {\n return this.#afterReady(() => this.#inner.loadScope(scopeId, data));\n }\n\n clearScope(scopeId: string): Promise<void> {\n return this.#afterReady(() => this.#inner.clearScope(scopeId));\n }\n\n get connectionStatus(): ConnectionStatus {\n if (!this.#inner.ready()) return 'offline';\n return normalizeStatus(this.#inner.connectionStatus());\n }\n\n subscribeToConnectionStatus(cb: (s: ConnectionStatus) => void): () => void {\n return deferrableSubscribe(\n () => this.#inner.ready(),\n () => this.#readyPromise,\n () =>\n this.#inner.subscribeToConnectionStatus((raw: string) =>\n cb(normalizeStatus(raw))\n ) as () => void,\n () => cb(normalizeStatus(this.#inner.connectionStatus()))\n );\n }\n\n disconnect(): Promise<void> {\n return this.#inner.ready() ? this.#inner.disconnect() : Promise.resolve();\n }\n\n async reconnect(serverUrl: string, getTicket?: () => Promise<string>): Promise<void> {\n if (this.#reconnectValidator) await this.#reconnectValidator();\n const ticket = getTicket ? await getTicket() : undefined;\n await this.#inner.reconnect(serverUrl, ticket ?? undefined);\n }\n\n get isReconnecting(): boolean {\n if (!this.#inner.ready()) return false;\n return this.#inner.isReconnecting();\n }\n\n setAuthenticatedUser(userId: string): void {\n if (this.#inner.ready()) this.#inner.setAuthenticatedUser(userId);\n else void this.#readyPromise.then(() => this.#inner.setAuthenticatedUser(userId));\n }\n\n setSessionInvalidHandler(handler: () => void): void {\n if (this.#inner.ready()) this.#inner.setSessionInvalidHandler(handler);\n else void this.#readyPromise.then(() => this.#inner.setSessionInvalidHandler(handler));\n }\n\n setReconnectValidator(validator: () => Promise<void>): void {\n this.#reconnectValidator = validator;\n }\n\n resetForLogout(): Promise<void> {\n return this.#inner.ready() ? this.#inner.resetForLogout() : Promise.resolve();\n }\n\n readLocalState(entity: string, id: string): Promise<Record<string, unknown> | null> {\n return this.#afterReady(() =>\n this.#inner\n .readLocalState(entity, id)\n .then((r: unknown) => (r ?? null) as Record<string, unknown> | null)\n );\n }\n\n updateLocalState(entity: string, id: string, fields: Record<string, unknown>): Promise<void> {\n return this.#afterReady(() => this.#inner.updateLocalState(entity, id, fields));\n }\n\n pendingMutationCount(scopeId: string): Promise<number> {\n return this.#afterReady(() => this.#inner.pendingMutationCount(scopeId));\n }\n\n request(topic: string, payload: unknown): Promise<Record<string, unknown>> {\n return this.#afterReady(() => this.#inner.request(topic, payload)) as Promise<\n Record<string, unknown>\n >;\n }\n\n get hasPersistence(): boolean {\n return this.#hasPersistence;\n }\n\n get hasRemote(): boolean {\n return this.#hasRemote;\n }\n}\n\nexport function createStore<S extends EntitySchema = DefaultSchema>(\n config: StoreConfig,\n options?: StoreOptions\n): Store<S> {\n const resolvedOptions = options ?? {};\n const inner = createWasmStore(config, resolvedOptions);\n return new StitchStore<S>(inner, config, resolvedOptions);\n}\n"]}
package/dist/types.d.ts CHANGED
@@ -97,6 +97,8 @@ export interface Store<S extends EntitySchema = DefaultSchema> {
97
97
  create<K extends EntityKey<S>>(entity: K, scopeId: string, data: Partial<S[K]> & Record<string, unknown>, tag?: OriginTag): Promise<string>;
98
98
  update<K extends EntityKey<S>>(entity: K, id: string, fields: Partial<S[K]>, tag?: OriginTag): Promise<void>;
99
99
  delete<K extends EntityKey<S>>(entity: K, id: string, tag?: OriginTag): Promise<void>;
100
+ updateIf<K extends EntityKey<S>>(entity: K, id: string, fields: Partial<S[K]>, expectedVersion: number): Promise<number>;
101
+ deleteIf<K extends EntityKey<S>>(entity: K, id: string, expectedVersion: number): Promise<void>;
100
102
  subscribeToScope<K extends EntityKey<S>>(scopeId: string, entity: K, callback: () => void): () => void;
101
103
  subscribeToEntity<K extends EntityKey<S>>(entity: K, callback: (data: S[K] | null, op: 'insert' | 'update' | 'delete') => void): () => void;
102
104
  beginBatch(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface SchemaField {\n name: string;\n type: 'string' | 'number' | 'boolean' | 'object' | 'array';\n required?: boolean;\n default?: unknown;\n}\n\nexport interface ForeignKeyDefinition {\n field: string;\n references: string;\n onDelete: 'cascade' | 'set_null' | 'restrict';\n}\n\nexport interface EntityDefinition {\n fields: SchemaField[];\n foreignKeys?: ForeignKeyDefinition[];\n uniqueConstraints?: string[][];\n indexes?: string[];\n}\n\nexport interface StoreConfig {\n entities: Record<string, EntityDefinition>;\n scope: {\n rootEntity: string;\n childEntities: string[];\n scopeField: string;\n };\n topLevelEntities?: Array<{\n entity: string;\n subscriptionPattern: string;\n }>;\n localOnlyEntities?: Record<string, EntityDefinition>;\n syncTopicPrefix?: string;\n responseTopicPrefix?: string;\n versionField?: string;\n updatedAtField?: string;\n userScopeField?: string;\n}\n\nexport type OriginTag = 'remote' | 'load' | 'clear';\n\nexport type ConnectionStatus = 'connected' | 'disconnected' | 'connecting' | 'error' | 'offline';\n\nexport type SortDirection = 'asc' | 'desc';\n\nexport interface SortField {\n field: string;\n direction: SortDirection;\n}\n\nexport interface ListFilter {\n scopeId?: string;\n sort?: SortField[];\n projection?: string[];\n}\n\nexport interface PersistenceConfig {\n dbName: string;\n passphrase?: string;\n}\n\nexport interface RemoteConfig {\n url: string;\n clientId?: string;\n ticket?: string;\n username?: string;\n password?: string;\n autoConnect?: boolean;\n}\n\nexport interface StoreOptions {\n persistence?: PersistenceConfig;\n remote?: RemoteConfig;\n}\n\n/**\n * A schema maps entity name → record type. Users declare their own:\n *\n * ```ts\n * type Schema = { project: Project; task: Task };\n * const store = createStore<Schema>(config, options);\n * ```\n *\n * When no generic argument is supplied, methods fall back to `Record<string, unknown>`.\n */\nexport type EntitySchema = Record<string, object>;\nexport type DefaultSchema = Record<string, Record<string, unknown>>;\nexport type EntityKey<S extends EntitySchema> = keyof S & string;\n\n/**\n * Read-only view over the in-memory cache, exposed for `useSyncExternalStore`-style\n * subscriptions. Snapshots are referentially stable until the scope's version changes.\n */\nexport interface MemoryStore {\n getSnapshot(entity: string, scopeId: string): Record<string, unknown>[];\n getSnapshotAsMap(entity: string, scopeId: string): Record<string, Record<string, unknown>>;\n subscribeToScope(scopeId: string, entity: string, callback: () => void): () => void;\n}\n\nexport interface Store<S extends EntitySchema = DefaultSchema> {\n initialize(): Promise<void>;\n destroy(): Promise<void>;\n readonly ready: boolean;\n\n read<K extends EntityKey<S>>(entity: K, id: string): S[K] | null;\n getSnapshot<K extends EntityKey<S>>(entity: K, scopeId: string): S[K][];\n getSnapshotAsMap<K extends EntityKey<S>>(entity: K, scopeId: string): Record<string, S[K]>;\n\n list<K extends EntityKey<S>>(entity: K, filter?: ListFilter): Promise<S[K][]>;\n listRootEntities(sort?: SortField[]): Promise<Record<string, unknown>[]>;\n getChildCount<K extends EntityKey<S>>(entity: K, scopeId: string): number;\n getVersion<K extends EntityKey<S>>(scopeId: string, entity: K): number;\n\n create<K extends EntityKey<S>>(\n entity: K,\n scopeId: string,\n data: Partial<S[K]> & Record<string, unknown>,\n tag?: OriginTag\n ): Promise<string>;\n update<K extends EntityKey<S>>(\n entity: K,\n id: string,\n fields: Partial<S[K]>,\n tag?: OriginTag\n ): Promise<void>;\n delete<K extends EntityKey<S>>(entity: K, id: string, tag?: OriginTag): Promise<void>;\n\n subscribeToScope<K extends EntityKey<S>>(\n scopeId: string,\n entity: K,\n callback: () => void\n ): () => void;\n subscribeToEntity<K extends EntityKey<S>>(\n entity: K,\n callback: (data: S[K] | null, op: 'insert' | 'update' | 'delete') => void\n ): () => void;\n\n beginBatch(): void;\n endBatch(): void;\n\n replaceScope(scopeId: string): Promise<void>;\n closeScope(scopeId: string): Promise<void>;\n loadScope(scopeId: string, data: Record<string, Record<string, unknown>[]>): Promise<void>;\n clearScope(scopeId: string): Promise<void>;\n\n readonly connectionStatus: ConnectionStatus;\n subscribeToConnectionStatus(cb: (s: ConnectionStatus) => void): () => void;\n disconnect(): Promise<void>;\n reconnect(serverUrl: string, getTicket?: () => Promise<string>): Promise<void>;\n readonly isReconnecting: boolean;\n\n setAuthenticatedUser(userId: string): void;\n setSessionInvalidHandler(handler: () => void): void;\n setReconnectValidator(validator: () => Promise<void>): void;\n resetForLogout(): Promise<void>;\n\n readLocalState(entity: string, id: string): Promise<Record<string, unknown> | null>;\n updateLocalState(entity: string, id: string, fields: Record<string, unknown>): Promise<void>;\n pendingMutationCount(scopeId: string): Promise<number>;\n\n request(topic: string, payload: unknown): Promise<Record<string, unknown>>;\n\n readonly hasPersistence: boolean;\n readonly hasRemote: boolean;\n\n readonly memory: MemoryStore;\n readonly config: StoreConfig;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface SchemaField {\n name: string;\n type: 'string' | 'number' | 'boolean' | 'object' | 'array';\n required?: boolean;\n default?: unknown;\n}\n\nexport interface ForeignKeyDefinition {\n field: string;\n references: string;\n onDelete: 'cascade' | 'set_null' | 'restrict';\n}\n\nexport interface EntityDefinition {\n fields: SchemaField[];\n foreignKeys?: ForeignKeyDefinition[];\n uniqueConstraints?: string[][];\n indexes?: string[];\n}\n\nexport interface StoreConfig {\n entities: Record<string, EntityDefinition>;\n scope: {\n rootEntity: string;\n childEntities: string[];\n scopeField: string;\n };\n topLevelEntities?: Array<{\n entity: string;\n subscriptionPattern: string;\n }>;\n localOnlyEntities?: Record<string, EntityDefinition>;\n syncTopicPrefix?: string;\n responseTopicPrefix?: string;\n versionField?: string;\n updatedAtField?: string;\n userScopeField?: string;\n}\n\nexport type OriginTag = 'remote' | 'load' | 'clear';\n\nexport type ConnectionStatus = 'connected' | 'disconnected' | 'connecting' | 'error' | 'offline';\n\nexport type SortDirection = 'asc' | 'desc';\n\nexport interface SortField {\n field: string;\n direction: SortDirection;\n}\n\nexport interface ListFilter {\n scopeId?: string;\n sort?: SortField[];\n projection?: string[];\n}\n\nexport interface PersistenceConfig {\n dbName: string;\n passphrase?: string;\n}\n\nexport interface RemoteConfig {\n url: string;\n clientId?: string;\n ticket?: string;\n username?: string;\n password?: string;\n autoConnect?: boolean;\n}\n\nexport interface StoreOptions {\n persistence?: PersistenceConfig;\n remote?: RemoteConfig;\n}\n\n/**\n * A schema maps entity name → record type. Users declare their own:\n *\n * ```ts\n * type Schema = { project: Project; task: Task };\n * const store = createStore<Schema>(config, options);\n * ```\n *\n * When no generic argument is supplied, methods fall back to `Record<string, unknown>`.\n */\nexport type EntitySchema = Record<string, object>;\nexport type DefaultSchema = Record<string, Record<string, unknown>>;\nexport type EntityKey<S extends EntitySchema> = keyof S & string;\n\n/**\n * Read-only view over the in-memory cache, exposed for `useSyncExternalStore`-style\n * subscriptions. Snapshots are referentially stable until the scope's version changes.\n */\nexport interface MemoryStore {\n getSnapshot(entity: string, scopeId: string): Record<string, unknown>[];\n getSnapshotAsMap(entity: string, scopeId: string): Record<string, Record<string, unknown>>;\n subscribeToScope(scopeId: string, entity: string, callback: () => void): () => void;\n}\n\nexport interface Store<S extends EntitySchema = DefaultSchema> {\n initialize(): Promise<void>;\n destroy(): Promise<void>;\n readonly ready: boolean;\n\n read<K extends EntityKey<S>>(entity: K, id: string): S[K] | null;\n getSnapshot<K extends EntityKey<S>>(entity: K, scopeId: string): S[K][];\n getSnapshotAsMap<K extends EntityKey<S>>(entity: K, scopeId: string): Record<string, S[K]>;\n\n list<K extends EntityKey<S>>(entity: K, filter?: ListFilter): Promise<S[K][]>;\n listRootEntities(sort?: SortField[]): Promise<Record<string, unknown>[]>;\n getChildCount<K extends EntityKey<S>>(entity: K, scopeId: string): number;\n getVersion<K extends EntityKey<S>>(scopeId: string, entity: K): number;\n\n create<K extends EntityKey<S>>(\n entity: K,\n scopeId: string,\n data: Partial<S[K]> & Record<string, unknown>,\n tag?: OriginTag\n ): Promise<string>;\n update<K extends EntityKey<S>>(\n entity: K,\n id: string,\n fields: Partial<S[K]>,\n tag?: OriginTag\n ): Promise<void>;\n delete<K extends EntityKey<S>>(entity: K, id: string, tag?: OriginTag): Promise<void>;\n updateIf<K extends EntityKey<S>>(\n entity: K,\n id: string,\n fields: Partial<S[K]>,\n expectedVersion: number\n ): Promise<number>;\n deleteIf<K extends EntityKey<S>>(entity: K, id: string, expectedVersion: number): Promise<void>;\n\n subscribeToScope<K extends EntityKey<S>>(\n scopeId: string,\n entity: K,\n callback: () => void\n ): () => void;\n subscribeToEntity<K extends EntityKey<S>>(\n entity: K,\n callback: (data: S[K] | null, op: 'insert' | 'update' | 'delete') => void\n ): () => void;\n\n beginBatch(): void;\n endBatch(): void;\n\n replaceScope(scopeId: string): Promise<void>;\n closeScope(scopeId: string): Promise<void>;\n loadScope(scopeId: string, data: Record<string, Record<string, unknown>[]>): Promise<void>;\n clearScope(scopeId: string): Promise<void>;\n\n readonly connectionStatus: ConnectionStatus;\n subscribeToConnectionStatus(cb: (s: ConnectionStatus) => void): () => void;\n disconnect(): Promise<void>;\n reconnect(serverUrl: string, getTicket?: () => Promise<string>): Promise<void>;\n readonly isReconnecting: boolean;\n\n setAuthenticatedUser(userId: string): void;\n setSessionInvalidHandler(handler: () => void): void;\n setReconnectValidator(validator: () => Promise<void>): void;\n resetForLogout(): Promise<void>;\n\n readLocalState(entity: string, id: string): Promise<Record<string, unknown> | null>;\n updateLocalState(entity: string, id: string, fields: Record<string, unknown>): Promise<void>;\n pendingMutationCount(scopeId: string): Promise<number>;\n\n request(topic: string, payload: unknown): Promise<Record<string, unknown>>;\n\n readonly hasPersistence: boolean;\n readonly hasRemote: boolean;\n\n readonly memory: MemoryStore;\n readonly config: StoreConfig;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@laboverwire/stitch",
3
- "version": "0.6.4",
3
+ "version": "0.6.5",
4
4
  "description": "Reactive state synchronization library bridging an in-memory store, IndexedDB persistence, and MQTT-based remote sync.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "LabOverWire",