@laboverwire/stitch 0.4.3 → 0.5.0

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.
Files changed (45) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +8 -5
  3. package/dist/index.d.ts +1 -8
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +0 -7
  6. package/dist/index.js.map +1 -1
  7. package/dist/react/provider.d.ts +2 -2
  8. package/dist/react/provider.d.ts.map +1 -1
  9. package/dist/store.d.ts +2 -2
  10. package/dist/store.d.ts.map +1 -1
  11. package/dist/store.js +190 -724
  12. package/dist/store.js.map +1 -1
  13. package/dist/types.d.ts +23 -161
  14. package/dist/types.d.ts.map +1 -1
  15. package/dist/types.js +1 -6
  16. package/dist/types.js.map +1 -1
  17. package/package.json +16 -7
  18. package/dist/internal-utils.d.ts +0 -4
  19. package/dist/internal-utils.d.ts.map +0 -1
  20. package/dist/internal-utils.js +0 -20
  21. package/dist/internal-utils.js.map +0 -1
  22. package/dist/internal-wasm-error.d.ts +0 -9
  23. package/dist/internal-wasm-error.d.ts.map +0 -1
  24. package/dist/internal-wasm-error.js +0 -48
  25. package/dist/internal-wasm-error.js.map +0 -1
  26. package/dist/memory-store.d.ts +0 -3
  27. package/dist/memory-store.d.ts.map +0 -1
  28. package/dist/memory-store.js +0 -572
  29. package/dist/memory-store.js.map +0 -1
  30. package/dist/offline-queue.d.ts +0 -6
  31. package/dist/offline-queue.d.ts.map +0 -1
  32. package/dist/offline-queue.js +0 -363
  33. package/dist/offline-queue.js.map +0 -1
  34. package/dist/persistence-layer.d.ts +0 -7
  35. package/dist/persistence-layer.d.ts.map +0 -1
  36. package/dist/persistence-layer.js +0 -409
  37. package/dist/persistence-layer.js.map +0 -1
  38. package/dist/remote-sync-layer.d.ts +0 -8
  39. package/dist/remote-sync-layer.d.ts.map +0 -1
  40. package/dist/remote-sync-layer.js +0 -439
  41. package/dist/remote-sync-layer.js.map +0 -1
  42. package/dist/sync-engine.d.ts +0 -3
  43. package/dist/sync-engine.d.ts.map +0 -1
  44. package/dist/sync-engine.js +0 -643
  45. package/dist/sync-engine.js.map +0 -1
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 type {\n StoreConfig,\n StoreOptions,\n Store,\n MemoryStore,\n PersistenceLayer,\n RemoteSyncLayer,\n OfflineQueue,\n LocalAccessor,\n MutationSender,\n ConnectionStatus,\n SortField,\n ListFilter,\n SyncMutation,\n OriginTag,\n} from './types.ts';\nimport { OwnershipError } from './types.ts';\nimport { createMemoryStore } from './memory-store.ts';\nimport { createPersistenceLayer } from './persistence-layer.ts';\nimport { createRemoteSyncLayer } from './remote-sync-layer.ts';\nimport { createPersistentOfflineQueue, createInMemoryOfflineQueue } from './offline-queue.ts';\nimport { stripNulls, isTransientSyncError } from './internal-utils.ts';\n\ntype PersistenceLayerExt = PersistenceLayer & {\n notifyCorruption(): void;\n setSuppressNotifications(suppress: boolean): void;\n notifyAllEntitySubscribers(): void;\n};\n\ntype RemoteSyncLayerExt = RemoteSyncLayer & {\n setMutationCallback(cb: (mutation: SyncMutation) => void): void;\n setConnectionChangeCallback(cb: (status: ConnectionStatus) => void): void;\n setOnConnectedCallback(cb: () => void): void;\n readonly isInitialSyncDone: boolean;\n};\n\ntype OfflineQueueExt = OfflineQueue & {\n setAuthenticatedUser?(userId: string | null): void;\n};\n\nclass StoreImpl implements Store {\n readonly config: StoreConfig;\n readonly memory: MemoryStore;\n private _persistence: PersistenceLayerExt | null = null;\n private _remote: RemoteSyncLayerExt | null = null;\n private _queue: OfflineQueueExt | null = null;\n private readonly options: StoreOptions;\n private _ready = false;\n private _initPromise: Promise<void> | null = null;\n private _connectionStatus: ConnectionStatus = 'offline';\n private statusListeners: Set<(status: ConnectionStatus) => void> = new Set();\n private currentScopeId: string | null = null;\n private initialSyncDone = false;\n private _authenticatedUser: string | null = null;\n private _earlySubscribers: Array<{\n entity: string;\n callback: (data: unknown, op: 'insert' | 'update' | 'delete') => void;\n memoryUnsub: () => void;\n persistenceUnsub: (() => void) | null;\n }> = [];\n\n constructor(config: StoreConfig, options: StoreOptions) {\n this.config = config;\n this.options = options;\n this.memory = createMemoryStore(config);\n }\n\n get ready(): boolean {\n return this._ready;\n }\n\n get connectionStatus(): ConnectionStatus {\n if (this._remote) return this._remote.connectionStatus;\n return this._connectionStatus;\n }\n\n get isReconnecting(): boolean {\n return this._remote?.isReconnecting ?? false;\n }\n\n get hasPersistence(): boolean {\n return this._persistence !== null;\n }\n\n get hasRemote(): boolean {\n return this._remote !== null;\n }\n\n async initialize(): Promise<void> {\n if (this._ready) return;\n if (this._initPromise) return this._initPromise;\n this._initPromise = this.doInitialize().finally(() => {\n this._initPromise = null;\n });\n return this._initPromise;\n }\n\n private async doInitialize(): Promise<void> {\n if (this._ready) return;\n\n await this.memory.ensureReady();\n\n if (this.options.persistence) {\n const persistence = createPersistenceLayer(this.config);\n this._persistence = persistence;\n await persistence.open(this.options.persistence.dbName);\n\n this.memory.onCorruption(() => {\n persistence.notifyCorruption();\n });\n\n for (const entry of this._earlySubscribers) {\n entry.persistenceUnsub = persistence.subscribe(entry.entity, entry.callback);\n }\n this._earlySubscribers = [];\n }\n\n if (this.options.remote) {\n const remote = createRemoteSyncLayer(this.config);\n this._remote = remote;\n\n if (this._authenticatedUser) {\n remote.setAuthenticatedUser(this._authenticatedUser);\n }\n\n if (this._persistence) {\n const queue = createPersistentOfflineQueue(this._persistence, this.config.scope.rootEntity);\n this._queue = queue;\n if (this._authenticatedUser && 'setAuthenticatedUser' in queue) {\n (queue as OfflineQueueExt).setAuthenticatedUser!(this._authenticatedUser);\n }\n } else {\n this._queue = createInMemoryOfflineQueue(this.config.scope.rootEntity);\n }\n\n remote.setMutationCallback((mutation) => {\n this.handleRemoteMutation(mutation);\n });\n\n remote.setConnectionChangeCallback((status) => {\n this._connectionStatus = status;\n for (const listener of this.statusListeners) {\n listener(status);\n }\n });\n\n remote.setOnConnectedCallback(() => {\n this.onConnected();\n });\n\n await remote.connect(this.options.remote.serverUrl, this.options.remote.getTicket);\n } else {\n this._connectionStatus = 'offline';\n this.initialSyncDone = true;\n }\n\n if (this._persistence) {\n this.setupPersistenceSubscriptions();\n }\n\n this._ready = true;\n\n if (this._persistence) {\n this._persistence.notifyAllEntitySubscribers();\n }\n }\n\n destroy(): void {\n this._persistence?.close();\n this._remote?.disconnect();\n this._ready = false;\n this._initPromise = null;\n }\n\n read(entity: string, id: string): Record<string, unknown> | null {\n return this.memory.read(entity, id);\n }\n\n getSnapshot(entity: string, scopeId: string): Record<string, unknown>[] {\n return this.memory.getSnapshot(entity, scopeId);\n }\n\n getSnapshotAsMap(entity: string, scopeId: string): Record<string, Record<string, unknown>> {\n return this.memory.getSnapshotAsMap(entity, scopeId);\n }\n\n async list(entity: string, filter?: ListFilter): Promise<Record<string, unknown>[]> {\n if (this._persistence) {\n const { scopeField } = this.config.scope;\n const options: Record<string, unknown> = {};\n if (filter?.scopeId) {\n options.filters = [{ field: scopeField, op: 'eq', value: filter.scopeId }];\n }\n if (filter?.sort && filter.sort.length > 0) {\n options.sort = filter.sort;\n }\n if (filter?.projection && filter.projection.length > 0) {\n options.projection = filter.projection;\n }\n return this._persistence.list(entity, options);\n }\n\n const scopeId = filter?.scopeId ?? '';\n return Promise.resolve(this.memory.list(entity, scopeId));\n }\n\n async listRootEntities(sort?: SortField[]): Promise<Record<string, unknown>[]> {\n if (!this.initialSyncDone && this._remote) return [];\n\n if (this._persistence) {\n const { rootEntity } = this.config.scope;\n const options: Record<string, unknown> = {};\n if (sort && sort.length > 0) {\n options.sort = sort;\n }\n return this._persistence.list(rootEntity, options);\n }\n\n return Promise.resolve(this.memory.list(this.config.scope.rootEntity, ''));\n }\n\n async getChildCount(entity: string, scopeId: string): Promise<number> {\n if (this._persistence) {\n const { scopeField } = this.config.scope;\n return this._persistence.count(entity, {\n filters: [{ field: scopeField, op: 'eq', value: scopeId }],\n });\n }\n return this.memory.list(entity, scopeId).length;\n }\n\n async create(\n entity: string,\n scopeId: string,\n data: Record<string, unknown>,\n tag?: OriginTag\n ): Promise<string> {\n const { rootEntity } = this.config.scope;\n const id = (data.id as string) || crypto.randomUUID();\n const record = stripNulls({ ...data, id });\n const effectiveScopeId = entity === rootEntity ? id : scopeId;\n\n this.memory.create(entity, effectiveScopeId, record, tag);\n\n if (this._persistence) {\n try {\n await this._persistence.create(entity, record);\n } catch (err) {\n console.error(`[Stitch] Persistence create ${entity} failed:`, err);\n }\n }\n\n if (this._queue && effectiveScopeId) {\n await this._queue.queue({\n op: 'insert',\n entity,\n id,\n scopeId: effectiveScopeId,\n data: record,\n });\n }\n\n if (this._remote && this._remote.connectionStatus === 'connected' && effectiveScopeId) {\n try {\n await this._remote.syncCreate(entity, effectiveScopeId, record);\n await this._queue?.remove(entity, id, effectiveScopeId, 'insert');\n } catch (err) {\n if (err instanceof OwnershipError) {\n await this._queue?.remove(entity, id, effectiveScopeId, 'insert');\n console.warn(`[Stitch] OwnershipError on create ${entity}/${id}:`, err.message);\n return id;\n }\n if (!isTransientSyncError(err)) {\n console.error(`[Stitch] Failed to sync create ${entity}:`, err);\n }\n }\n }\n\n return id;\n }\n\n async update(\n entity: string,\n id: string,\n fields: Record<string, unknown>,\n tag?: OriginTag\n ): Promise<void> {\n const { rootEntity, scopeField } = this.config.scope;\n\n const memExisting = this.memory.read(entity, id);\n let scopeId: string | undefined;\n\n if (memExisting) {\n scopeId = entity === rootEntity ? id : (memExisting[scopeField] as string | undefined);\n if (scopeId) {\n this.memory.update(entity, id, fields, tag);\n }\n }\n\n if (this._persistence) {\n if (!scopeId) {\n let existing: Record<string, unknown>;\n try {\n existing = await this._persistence.read(entity, id);\n } catch (readErr) {\n const msg = readErr instanceof Error ? readErr.message : String(readErr);\n if (/not found/i.test(msg)) return;\n throw readErr;\n }\n scopeId = entity === rootEntity ? id : (existing[scopeField] as string | undefined);\n if (scopeId && !memExisting) {\n this.memory.update(entity, id, fields, tag);\n }\n }\n\n try {\n await this._persistence.update(entity, id, fields);\n } catch (updErr) {\n console.error(`[Stitch] Persistence update ${entity} failed:`, updErr);\n }\n } else if (!memExisting) {\n return;\n }\n\n if (this._queue && scopeId) {\n await this._queue.queue({ op: 'update', entity, id, scopeId, data: fields });\n }\n\n if (this._remote && this._remote.connectionStatus === 'connected' && scopeId) {\n try {\n await this._remote.syncUpdate(entity, scopeId, id, fields);\n await this._queue?.remove(entity, id, scopeId, 'update');\n } catch (err) {\n if (err instanceof OwnershipError) {\n await this._queue?.remove(entity, id, scopeId, 'update');\n console.warn(`[Stitch] OwnershipError on update ${entity}/${id}:`, err.message);\n return;\n }\n const isNotFound = err instanceof Error && /not found/i.test(err.message);\n if (isNotFound && entity === rootEntity) {\n try {\n if (this._persistence) {\n await this._persistence.delete(rootEntity, id);\n }\n this.memory.delete(rootEntity, id);\n } catch (cleanupErr) {\n console.error(`[Stitch] Cleanup delete ${rootEntity}/${id} failed:`, cleanupErr);\n }\n await this._queue?.remove(entity, id, scopeId, 'update');\n } else if (isNotFound) {\n try {\n let full: Record<string, unknown>;\n if (this._persistence) {\n full = await this._persistence.read(entity, id);\n } else {\n full = this.memory.read(entity, id) ?? {};\n }\n await this._remote.syncCreate(entity, scopeId, full);\n } catch (createErr) {\n if (createErr instanceof OwnershipError) {\n await this._queue?.remove(entity, id, scopeId, 'update');\n console.warn(`[Stitch] OwnershipError on upsert ${entity}/${id}:`, createErr.message);\n return;\n }\n if (!isTransientSyncError(createErr)) {\n console.error(`[Stitch] Failed to sync upsert ${entity}:`, createErr);\n }\n }\n } else if (!isTransientSyncError(err)) {\n console.error(`[Stitch] Failed to sync update ${entity}:`, err);\n }\n }\n }\n }\n\n async delete(entity: string, id: string, tag?: OriginTag): Promise<void> {\n const { rootEntity, scopeField } = this.config.scope;\n\n const memExisting = this.memory.read(entity, id);\n let scopeId: string | undefined;\n\n if (memExisting) {\n scopeId = entity === rootEntity ? id : (memExisting[scopeField] as string | undefined);\n if (scopeId) {\n this.memory.delete(entity, id, tag);\n }\n }\n\n if (this._persistence) {\n if (!scopeId) {\n let existing: Record<string, unknown>;\n try {\n existing = await this._persistence.read(entity, id);\n } catch (readErr) {\n const msg = readErr instanceof Error ? readErr.message : String(readErr);\n if (/not found/i.test(msg)) return;\n throw readErr;\n }\n scopeId = entity === rootEntity ? id : (existing[scopeField] as string | undefined);\n if (scopeId && !memExisting) {\n this.memory.delete(entity, id, tag);\n }\n }\n\n try {\n await this._persistence.delete(entity, id);\n } catch (delErr) {\n const msg = delErr instanceof Error ? delErr.message : String(delErr);\n if (/not found/i.test(msg)) return;\n console.error(`[Stitch] Persistence delete ${entity} failed:`, delErr);\n }\n } else if (!memExisting) {\n return;\n }\n\n if (this._queue && scopeId) {\n await this._queue.queue({ op: 'delete', entity, id, scopeId, data: null });\n }\n\n if (this._remote && this._remote.connectionStatus === 'connected' && scopeId) {\n try {\n await this._remote.syncDelete(entity, scopeId, id);\n await this._queue?.remove(entity, id, scopeId, 'delete');\n } catch (err) {\n if (err instanceof OwnershipError) {\n await this._queue?.remove(entity, id, scopeId, 'delete');\n console.warn(`[Stitch] OwnershipError on delete ${entity}/${id}:`, err.message);\n return;\n }\n const isNotFound = err instanceof Error && /not found/i.test(err.message);\n if (!isNotFound && !isTransientSyncError(err)) {\n console.error(`[Stitch] Failed to sync delete ${entity}:`, err);\n }\n }\n }\n }\n\n subscribeToScope(scopeId: string, entity: string, callback: () => void): () => void {\n return this.memory.subscribeToScope(scopeId, entity, callback);\n }\n\n subscribeToEntity(\n entity: string,\n callback: (data: Record<string, unknown> | null, op: 'insert' | 'update' | 'delete') => void\n ): () => void {\n const memUnsub = this.memory.onMutation((event) => {\n if (event.entity !== entity) return;\n if (this._persistence && event.originTag !== 'load' && event.originTag !== 'clear') return;\n const op = event.operation === 'create' ? 'insert' : event.operation;\n callback(event.data, op as 'insert' | 'update' | 'delete');\n });\n\n const entry: (typeof this._earlySubscribers)[number] = {\n entity,\n callback: (data, op) => {\n callback((data ?? null) as Record<string, unknown> | null, op);\n },\n memoryUnsub: memUnsub,\n persistenceUnsub: null,\n };\n\n if (this._persistence) {\n entry.persistenceUnsub = this._persistence.subscribe(entity, entry.callback);\n } else {\n this._earlySubscribers.push(entry);\n }\n\n return () => {\n entry.memoryUnsub();\n entry.persistenceUnsub?.();\n const idx = this._earlySubscribers.indexOf(entry);\n if (idx >= 0) this._earlySubscribers.splice(idx, 1);\n };\n }\n\n beginBatch(): void {\n this.memory.beginBatch();\n }\n\n endBatch(): void {\n this.memory.endBatch();\n }\n\n async replaceScope(scopeId: string): Promise<void> {\n if (this.currentScopeId === scopeId) return;\n\n const { rootEntity, childEntities } = this.config.scope;\n\n if (this.currentScopeId && this.currentScopeId !== scopeId) {\n const prevScope = this.currentScopeId;\n this.currentScopeId = scopeId;\n this.closeScope(prevScope).catch(() => {});\n } else {\n this.currentScopeId = scopeId;\n }\n\n if (this._remote && this._remote.connectionStatus === 'connected') {\n if (this._persistence) {\n this._persistence.setSuppressNotifications(true);\n }\n try {\n const state = await this._remote.openScope(scopeId);\n\n if (this._persistence) {\n const localAccessor = this.createLocalAccessor();\n const versionField = this.config.versionField ?? 'version';\n\n if (state.root && state.root.id) {\n if (state.root[versionField] != null && typeof state.root[versionField] !== 'number') {\n state.root[versionField] = Number(state.root[versionField]) || 1;\n }\n try {\n await localAccessor.read(rootEntity, state.root.id as string);\n await localAccessor.update(rootEntity, state.root.id as string, state.root);\n } catch {\n await localAccessor.create(rootEntity, state.root);\n }\n } else {\n try {\n await localAccessor.read(rootEntity, scopeId);\n } catch {\n return;\n }\n }\n\n for (const childEntity of childEntities) {\n const serverChildren = state.children[childEntity] ?? [];\n await this._remote.reconcileChildren(\n scopeId,\n childEntity,\n serverChildren,\n localAccessor,\n this._queue\n );\n }\n\n for (const mutation of state.bufferedMutations) {\n await this._remote.applyMutationToDb(mutation, localAccessor);\n }\n\n const bundle = await this.loadScopeFromPersistence(scopeId);\n if (bundle) {\n this.memory.loadScope(scopeId, bundle, 'load');\n }\n await this.loadRootIntoMemory(rootEntity, scopeId);\n } else {\n this.memory.loadScope(scopeId, state.children, 'load');\n if (state.root && state.root.id) {\n this.memory.create(rootEntity, scopeId, state.root, 'load');\n }\n }\n } catch (err) {\n console.error('[Stitch] Failed to open scope from server:', err);\n if (this._persistence) {\n const bundle = await this.loadScopeFromPersistence(scopeId);\n if (bundle) {\n this.memory.loadScope(scopeId, bundle, 'load');\n }\n await this.loadRootIntoMemory(rootEntity, scopeId);\n }\n } finally {\n if (this._persistence) {\n this._persistence.setSuppressNotifications(false);\n }\n }\n } else if (this._persistence) {\n const bundle = await this.loadScopeFromPersistence(scopeId);\n if (bundle) {\n this.memory.loadScope(scopeId, bundle, 'load');\n }\n await this.loadRootIntoMemory(rootEntity, scopeId);\n }\n }\n\n async closeScope(scopeId: string): Promise<void> {\n if (this._remote) {\n await this._remote.closeScope(scopeId);\n }\n if (this.currentScopeId === scopeId) {\n this.currentScopeId = null;\n }\n }\n\n loadScope(scopeId: string, data: Record<string, Record<string, unknown>[]>): void {\n this.memory.loadScope(scopeId, data);\n }\n\n clearScope(scopeId: string): void {\n this.memory.clearScope(scopeId);\n }\n\n subscribeToConnectionStatus(cb: (s: ConnectionStatus) => void): () => void {\n if (this._remote) {\n return this._remote.subscribeToConnectionStatus(cb);\n }\n this.statusListeners.add(cb);\n cb(this._connectionStatus);\n return () => this.statusListeners.delete(cb);\n }\n\n disconnect(): void {\n this._remote?.disconnect();\n this._connectionStatus = 'offline';\n }\n\n async reconnect(serverUrl: string, getTicket?: () => Promise<string>): Promise<void> {\n if (this._remote) {\n await this._remote.reconnect(serverUrl, getTicket);\n }\n }\n\n setAuthenticatedUser(userId: string): void {\n this._authenticatedUser = userId;\n this._remote?.setAuthenticatedUser(userId);\n if (this._queue && 'setAuthenticatedUser' in this._queue) {\n (this._queue as OfflineQueueExt).setAuthenticatedUser!(userId);\n }\n }\n\n setSessionInvalidHandler(handler: () => void): void {\n this._remote?.setSessionInvalidHandler(handler);\n }\n\n setReconnectValidator(validator: () => Promise<void>): void {\n this._remote?.setReconnectValidator(validator);\n }\n\n resetForLogout(): void {\n this._remote?.resetForLogout();\n this._persistence?.close();\n this._persistence = null;\n this._queue = null;\n this._ready = false;\n this._initPromise = null;\n this._earlySubscribers = [];\n this.currentScopeId = null;\n this._authenticatedUser = null;\n this.initialSyncDone = false;\n this._connectionStatus = 'offline';\n sessionStorage.removeItem('stitch_cached_user');\n sessionStorage.removeItem('stitch_pending_logout');\n }\n\n async request(topic: string, payload: unknown): Promise<Record<string, unknown>> {\n if (!this._remote) throw new Error('No remote connection');\n return this._remote.request(topic, payload);\n }\n\n async readLocalState(entity: string, id: string): Promise<Record<string, unknown> | null> {\n if (this._persistence) {\n return this._persistence.readLocalState(entity, id);\n }\n return this.memory.read(entity, id);\n }\n\n async updateLocalState(\n entity: string,\n id: string,\n fields: Record<string, unknown>\n ): Promise<void> {\n if (this._persistence) {\n await this._persistence.updateLocalState(entity, id, fields);\n } else {\n const existing = this.memory.read(entity, id);\n if (existing) {\n this.memory.update(entity, id, fields);\n }\n }\n }\n\n async getCachedUser(): Promise<Record<string, unknown> | null> {\n try {\n const raw = sessionStorage.getItem('stitch_cached_user');\n if (!raw) return null;\n const envelope: unknown = JSON.parse(raw);\n if (typeof envelope !== 'object' || envelope === null) return null;\n const { user, cachedAt } = envelope as Record<string, unknown>;\n const MAX_AGE_MS = 15 * 60 * 1000;\n if (typeof cachedAt !== 'number' || Date.now() - cachedAt > MAX_AGE_MS) {\n sessionStorage.removeItem('stitch_cached_user');\n return null;\n }\n if (typeof user !== 'object' || user === null) return null;\n return user as Record<string, unknown>;\n } catch {\n return null;\n }\n }\n\n async setCachedUser(user: Record<string, unknown>): Promise<void> {\n sessionStorage.setItem('stitch_cached_user', JSON.stringify({ user, cachedAt: Date.now() }));\n sessionStorage.removeItem('stitch_pending_logout');\n }\n\n async clearCachedUser(): Promise<void> {\n sessionStorage.removeItem('stitch_cached_user');\n }\n\n async hasPendingLogout(): Promise<boolean> {\n return sessionStorage.getItem('stitch_pending_logout') === 'true';\n }\n\n async setPendingLogout(pending: boolean): Promise<void> {\n if (pending) {\n sessionStorage.setItem('stitch_pending_logout', 'true');\n } else {\n sessionStorage.removeItem('stitch_pending_logout');\n }\n }\n\n async flushPendingLogout(logoutFn: () => Promise<void>): Promise<void> {\n const pending = await this.hasPendingLogout();\n if (!pending) return;\n try {\n await logoutFn();\n await this.setPendingLogout(false);\n } catch {}\n }\n\n private async handleRemoteMutation(mutation: SyncMutation): Promise<void> {\n const localAccessor = this.createLocalAccessor();\n if (this._remote) {\n await this._remote.applyMutationToDb(mutation, localAccessor);\n }\n\n if (!this._persistence) {\n const { scopeField } = this.config.scope;\n switch (mutation.op) {\n case 'insert':\n if (mutation.data) {\n const sid = mutation.data[scopeField] as string | undefined;\n if (sid) {\n this.memory.create(\n mutation.entity,\n sid,\n { ...mutation.data, id: mutation.id },\n 'remote'\n );\n }\n }\n break;\n case 'update':\n if (mutation.data) {\n this.memory.update(mutation.entity, mutation.id, mutation.data, 'remote');\n }\n break;\n case 'delete':\n this.memory.delete(mutation.entity, mutation.id, 'remote');\n break;\n }\n }\n }\n\n private async onConnected(): Promise<void> {\n try {\n if (this._queue && this._remote) {\n const sender = this.createMutationSender();\n await this._queue.flush(sender);\n await this._queue.flush(sender);\n }\n if (this._remote) {\n const localAccessor = this.createLocalAccessor();\n this.initialSyncDone = false;\n await this._remote.syncRootEntityList(localAccessor, this._queue);\n this.initialSyncDone = true;\n }\n this._persistence?.notifyAllEntitySubscribers();\n } catch (err) {\n void err;\n this.initialSyncDone = true;\n }\n }\n\n private createLocalAccessor(): LocalAccessor {\n if (this._persistence) {\n return {\n read: (entity, id) => this._persistence!.read(entity, id),\n list: (entity, options) => this._persistence!.list(entity, options),\n create: (entity, data) => this._persistence!.create(entity, data),\n update: (entity, id, data) => this._persistence!.update(entity, id, data),\n delete: (entity, id) => this._persistence!.delete(entity, id),\n };\n }\n return {\n read: async (entity, id) => {\n const result = this.memory.read(entity, id);\n if (!result) throw new Error(`${entity} ${id} not found`);\n return result;\n },\n list: async (entity, options) => {\n const filters = (options as Record<string, unknown>).filters as\n | Array<{ field: string; op: string; value: unknown }>\n | undefined;\n if (filters && filters.length > 0) {\n const scopeFilter = filters.find((f) => f.field === this.config.scope.scopeField);\n if (scopeFilter) {\n return this.memory.list(entity, scopeFilter.value as string);\n }\n }\n return this.memory.list(entity, '');\n },\n create: async (entity, data) => {\n const { scopeField } = this.config.scope;\n const scopeId = data[scopeField] as string | undefined;\n this.memory.create(entity, scopeId ?? '', data, 'remote');\n },\n update: async (entity, id, data) => {\n this.memory.update(entity, id, data, 'remote');\n },\n delete: async (entity, id) => {\n this.memory.delete(entity, id, 'remote');\n },\n };\n }\n\n private createMutationSender(): MutationSender {\n return {\n syncCreate: (entity, scopeId, data) => this._remote!.syncCreate(entity, scopeId, data),\n syncUpdate: (entity, scopeId, id, data) =>\n this._remote!.syncUpdate(entity, scopeId, id, data),\n syncDelete: (entity, scopeId, id) => this._remote!.syncDelete(entity, scopeId, id),\n readEntity: async (entity, id) => {\n if (this._persistence) {\n return this._persistence.read(entity, id);\n }\n const result = this.memory.read(entity, id);\n if (!result) throw new Error(`${entity} ${id} not found`);\n return result;\n },\n deleteEntity: async (entity, id) => {\n if (this._persistence) {\n await this._persistence.delete(entity, id);\n }\n this.memory.delete(entity, id);\n },\n };\n }\n\n private async loadRootIntoMemory(rootEntity: string, scopeId: string): Promise<void> {\n if (!this._persistence) return;\n try {\n const rootRecord = await this._persistence.read(rootEntity, scopeId);\n this.memory.create(rootEntity, scopeId, rootRecord, 'load');\n } catch (readErr) {\n console.debug(`[Stitch] Root entity ${rootEntity}/${scopeId} not in persistence:`, readErr);\n }\n }\n\n private async loadScopeFromPersistence(\n scopeId: string\n ): Promise<Record<string, Record<string, unknown>[]> | null> {\n if (!this._persistence) return null;\n const { childEntities, scopeField } = this.config.scope;\n const children: Record<string, Record<string, unknown>[]> = {};\n for (const entity of childEntities) {\n children[entity] = await this._persistence.list(entity, {\n filters: [{ field: scopeField, op: 'eq', value: scopeId }],\n });\n }\n return children;\n }\n\n private setupPersistenceSubscriptions(): void {\n if (!this._persistence) return;\n\n const { childEntities, scopeField } = this.config.scope;\n\n for (const entity of childEntities) {\n this._persistence.subscribe(\n entity,\n (entityData: unknown, op: 'insert' | 'update' | 'delete') => {\n if (entityData === null || typeof entityData !== 'object') return;\n const record = entityData as Record<string, unknown>;\n const sid = record[scopeField] as string | undefined;\n if (!sid || sid !== this.currentScopeId) return;\n\n switch (op) {\n case 'insert':\n this.memory.create(entity, sid, record, 'remote');\n break;\n case 'update':\n this.memory.update(entity, record.id as string, record, 'remote');\n break;\n case 'delete':\n this.memory.delete(entity, record.id as string, 'remote');\n break;\n }\n }\n );\n }\n }\n}\n\nexport function createStore<\n S extends import('./types.ts').EntitySchema = import('./types.ts').DefaultSchema,\n>(config: StoreConfig, options?: StoreOptions): Store<S> {\n return new StoreImpl(config, options ?? {}) as unknown as Store<S>;\n}\n"]}
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\n/**\n * Wire a subscription now if the store is ready, otherwise defer wiring until\n * `whenReady` resolves. Returns an unsubscribe that cancels the pending wire or\n * the live subscription, whichever exists. `poke` fires once the deferred\n * subscription attaches so `useSyncExternalStore`-style consumers re-read.\n */\nfunction deferrableSubscribe(\n isReady: () => boolean,\n whenReady: () => Promise<void>,\n subscribeNow: () => () => void,\n poke: () => void\n): () => void {\n if (isReady()) return subscribeNow();\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"]}
package/dist/types.d.ts CHANGED
@@ -34,18 +34,6 @@ export interface StoreConfig {
34
34
  userScopeField?: string;
35
35
  }
36
36
  export type OriginTag = 'remote' | 'load' | 'clear';
37
- export interface MutationEvent {
38
- operation: 'create' | 'update' | 'delete';
39
- entity: string;
40
- id: string;
41
- scopeId: string;
42
- data: Record<string, unknown> | null;
43
- originTag: OriginTag | null;
44
- }
45
- export interface ScopeBundle {
46
- root: Record<string, unknown> | null;
47
- children: Record<string, Record<string, unknown>[]>;
48
- }
49
37
  export type ConnectionStatus = 'connected' | 'disconnected' | 'connecting' | 'error' | 'offline';
50
38
  export type SortDirection = 'asc' | 'desc';
51
39
  export interface SortField {
@@ -57,118 +45,16 @@ export interface ListFilter {
57
45
  sort?: SortField[];
58
46
  projection?: string[];
59
47
  }
60
- export interface SyncMutation {
61
- op: 'insert' | 'update' | 'delete';
62
- entity: string;
63
- id: string;
64
- data: Record<string, unknown> | null;
65
- operationId: string | null;
66
- }
67
- export interface ScopeState {
68
- root: Record<string, unknown>;
69
- children: Record<string, Record<string, unknown>[]>;
70
- version: number;
71
- bufferedMutations: SyncMutation[];
72
- }
73
- export declare class OwnershipError extends Error {
74
- constructor(message: string);
75
- }
76
- export interface MemoryStore {
77
- ensureReady(): Promise<void>;
78
- readonly isReady: boolean;
79
- readonly corrupted: boolean;
80
- onCorruption(callback: () => void): () => void;
81
- create(entity: string, scopeId: string, data: Record<string, unknown>, tag?: OriginTag): void;
82
- update(entity: string, id: string, fields: Record<string, unknown>, tag?: OriginTag): void;
83
- delete(entity: string, id: string, tag?: OriginTag): void;
84
- read(entity: string, id: string): Record<string, unknown> | null;
85
- list(entity: string, scopeId: string): Record<string, unknown>[];
86
- getSnapshot(entity: string, scopeId: string): Record<string, unknown>[];
87
- getSnapshotAsMap(entity: string, scopeId: string): Record<string, Record<string, unknown>>;
88
- subscribeToScope(scopeId: string, entity: string, callback: () => void): () => void;
89
- subscribeToEntity(entity: string, callback: () => void): () => void;
90
- onMutation(listener: (event: MutationEvent) => void): () => void;
91
- beginBatch(): void;
92
- endBatch(): void;
93
- loadScope(scopeId: string, data: Record<string, Record<string, unknown>[]>, tag?: OriginTag): void;
94
- clearScope(scopeId: string): void;
95
- onReady(callback: () => void): void;
96
- getLastOriginTag(): OriginTag | null;
97
- }
98
- export interface PersistenceLayer {
99
- open(dbName: string): Promise<void>;
100
- close(): void;
101
- create(entity: string, data: Record<string, unknown>): Promise<void>;
102
- read(entity: string, id: string): Promise<Record<string, unknown>>;
103
- update(entity: string, id: string, data: Record<string, unknown>): Promise<void>;
104
- delete(entity: string, id: string): Promise<void>;
105
- list(entity: string, options?: Record<string, unknown>): Promise<Record<string, unknown>[]>;
106
- count(entity: string, options?: Record<string, unknown>): Promise<number>;
107
- subscribe(entity: string, callback: (data: unknown, op: 'insert' | 'update' | 'delete') => void): () => void;
108
- readLocalState(entity: string, id: string): Promise<Record<string, unknown> | null>;
109
- updateLocalState(entity: string, id: string, fields: Record<string, unknown>): Promise<void>;
110
- readonly isOpen: boolean;
111
- }
112
- export interface PendingMutation {
113
- op: 'insert' | 'update' | 'delete';
114
- entity: string;
115
- id: string;
116
- scopeId: string;
117
- data: Record<string, unknown> | null;
118
- }
119
- export interface ConsolidatedMutation extends PendingMutation {
120
- recordIds: string[];
121
- }
122
- export interface MutationSender {
123
- syncCreate(entity: string, scopeId: string, data: Record<string, unknown>): Promise<void>;
124
- syncUpdate(entity: string, scopeId: string, id: string, data: Record<string, unknown>): Promise<void>;
125
- syncDelete(entity: string, scopeId: string, id: string): Promise<void>;
126
- readEntity(entity: string, id: string): Promise<Record<string, unknown>>;
127
- deleteEntity(entity: string, id: string): Promise<void>;
128
- }
129
- export interface OfflineQueue {
130
- queue(mutation: PendingMutation): Promise<void>;
131
- remove(entity: string, entityId: string, scopeId: string, op: string): Promise<void>;
132
- flush(sender: MutationSender): Promise<void>;
133
- clear(): Promise<void>;
134
- getPendingForScope(scopeId: string): Promise<PendingMutation[]>;
135
- hasPendingInsert(entity: string, entityId: string): Promise<boolean>;
136
- }
137
- export interface LocalAccessor {
138
- read(entity: string, id: string): Promise<Record<string, unknown>>;
139
- list(entity: string, options: Record<string, unknown>): Promise<Record<string, unknown>[]>;
140
- create(entity: string, data: Record<string, unknown>): Promise<void>;
141
- update(entity: string, id: string, data: Record<string, unknown>): Promise<void>;
142
- delete(entity: string, id: string): Promise<void>;
143
- }
144
- export interface RemoteSyncLayer {
145
- connect(serverUrl: string, getTicket?: () => Promise<string>): Promise<void>;
146
- disconnect(): void;
147
- reconnect(serverUrl: string, getTicket?: () => Promise<string>): Promise<void>;
148
- readonly isReconnecting: boolean;
149
- readonly connectionStatus: ConnectionStatus;
150
- subscribeToConnectionStatus(cb: (s: ConnectionStatus) => void): () => void;
151
- setAuthenticatedUser(userId: string): void;
152
- setSessionInvalidHandler(handler: () => void): void;
153
- setReconnectValidator(validator: () => Promise<void>): void;
154
- syncCreate(entity: string, scopeId: string, data: Record<string, unknown>): Promise<void>;
155
- syncUpdate(entity: string, scopeId: string, id: string, data: Record<string, unknown>): Promise<void>;
156
- syncDelete(entity: string, scopeId: string, id: string): Promise<void>;
157
- openScope(scopeId: string): Promise<ScopeState>;
158
- closeScope(scopeId: string): Promise<void>;
159
- fetchList(entity: string, scopeId?: string, sort?: SortField[]): Promise<Record<string, unknown>[] | null>;
160
- syncRootEntityList(localAccessor: LocalAccessor, queue: OfflineQueue | null): Promise<void>;
161
- reconcileChildren(scopeId: string, entity: string, serverRecords: Record<string, unknown>[], localAccessor: LocalAccessor, queue: OfflineQueue | null): Promise<void>;
162
- applyMutationToDb(mutation: SyncMutation, localAccessor: LocalAccessor): Promise<void>;
163
- request(topic: string, payload: unknown): Promise<Record<string, unknown>>;
164
- resetForLogout(): void;
165
- }
166
48
  export interface PersistenceConfig {
167
49
  dbName: string;
50
+ passphrase?: string;
168
51
  }
169
52
  export interface RemoteConfig {
170
- serverUrl: string;
171
- getTicket?: () => Promise<string>;
53
+ url: string;
54
+ clientId?: string;
55
+ ticket?: string;
56
+ username?: string;
57
+ password?: string;
172
58
  }
173
59
  export interface StoreOptions {
174
60
  persistence?: PersistenceConfig;
@@ -187,16 +73,26 @@ export interface StoreOptions {
187
73
  export type EntitySchema = Record<string, object>;
188
74
  export type DefaultSchema = Record<string, Record<string, unknown>>;
189
75
  export type EntityKey<S extends EntitySchema> = keyof S & string;
76
+ /**
77
+ * Read-only view over the in-memory cache, exposed for `useSyncExternalStore`-style
78
+ * subscriptions. Snapshots are referentially stable until the scope's version changes.
79
+ */
80
+ export interface MemoryStore {
81
+ getSnapshot(entity: string, scopeId: string): Record<string, unknown>[];
82
+ getSnapshotAsMap(entity: string, scopeId: string): Record<string, Record<string, unknown>>;
83
+ subscribeToScope(scopeId: string, entity: string, callback: () => void): () => void;
84
+ }
190
85
  export interface Store<S extends EntitySchema = DefaultSchema> {
191
86
  initialize(): Promise<void>;
192
- destroy(): void;
87
+ destroy(): Promise<void>;
193
88
  readonly ready: boolean;
194
89
  read<K extends EntityKey<S>>(entity: K, id: string): S[K] | null;
195
90
  getSnapshot<K extends EntityKey<S>>(entity: K, scopeId: string): S[K][];
196
91
  getSnapshotAsMap<K extends EntityKey<S>>(entity: K, scopeId: string): Record<string, S[K]>;
197
92
  list<K extends EntityKey<S>>(entity: K, filter?: ListFilter): Promise<S[K][]>;
198
93
  listRootEntities(sort?: SortField[]): Promise<Record<string, unknown>[]>;
199
- getChildCount<K extends EntityKey<S>>(entity: K, scopeId: string): Promise<number>;
94
+ getChildCount<K extends EntityKey<S>>(entity: K, scopeId: string): number;
95
+ getVersion<K extends EntityKey<S>>(scopeId: string, entity: K): number;
200
96
  create<K extends EntityKey<S>>(entity: K, scopeId: string, data: Partial<S[K]> & Record<string, unknown>, tag?: OriginTag): Promise<string>;
201
97
  update<K extends EntityKey<S>>(entity: K, id: string, fields: Partial<S[K]>, tag?: OriginTag): Promise<void>;
202
98
  delete<K extends EntityKey<S>>(entity: K, id: string, tag?: OriginTag): Promise<void>;
@@ -204,60 +100,26 @@ export interface Store<S extends EntitySchema = DefaultSchema> {
204
100
  subscribeToEntity<K extends EntityKey<S>>(entity: K, callback: (data: S[K] | null, op: 'insert' | 'update' | 'delete') => void): () => void;
205
101
  beginBatch(): void;
206
102
  endBatch(): void;
207
- /**
208
- * Load a scope's data into the in-memory store, replacing whatever scope was
209
- * previously active. Fetches the root entity and its children from persistence
210
- * (and the server, if remote sync is configured), reconciles with local state,
211
- * and subscribes to live mutations for the new scope.
212
- *
213
- * The in-memory WASM database is rebuilt on each call — only one scope is live
214
- * at a time. Use `closeScope(previousId)` before switching if you need a clean
215
- * teardown signal for the old scope.
216
- */
217
103
  replaceScope(scopeId: string): Promise<void>;
218
104
  closeScope(scopeId: string): Promise<void>;
219
- loadScope(scopeId: string, data: Record<string, Record<string, unknown>[]>): void;
220
- clearScope(scopeId: string): void;
105
+ loadScope(scopeId: string, data: Record<string, Record<string, unknown>[]>): Promise<void>;
106
+ clearScope(scopeId: string): Promise<void>;
221
107
  readonly connectionStatus: ConnectionStatus;
222
108
  subscribeToConnectionStatus(cb: (s: ConnectionStatus) => void): () => void;
223
- disconnect(): void;
109
+ disconnect(): Promise<void>;
224
110
  reconnect(serverUrl: string, getTicket?: () => Promise<string>): Promise<void>;
225
111
  readonly isReconnecting: boolean;
226
112
  setAuthenticatedUser(userId: string): void;
227
113
  setSessionInvalidHandler(handler: () => void): void;
228
114
  setReconnectValidator(validator: () => Promise<void>): void;
229
- resetForLogout(): void;
115
+ resetForLogout(): Promise<void>;
230
116
  readLocalState(entity: string, id: string): Promise<Record<string, unknown> | null>;
231
117
  updateLocalState(entity: string, id: string, fields: Record<string, unknown>): Promise<void>;
232
- getCachedUser(): Promise<Record<string, unknown> | null>;
233
- setCachedUser(user: Record<string, unknown>): Promise<void>;
234
- clearCachedUser(): Promise<void>;
235
- hasPendingLogout(): Promise<boolean>;
236
- setPendingLogout(pending: boolean): Promise<void>;
237
- flushPendingLogout(logoutFn: () => Promise<void>): Promise<void>;
118
+ pendingMutationCount(scopeId: string): Promise<number>;
238
119
  request(topic: string, payload: unknown): Promise<Record<string, unknown>>;
239
120
  readonly hasPersistence: boolean;
240
121
  readonly hasRemote: boolean;
241
122
  readonly memory: MemoryStore;
242
123
  readonly config: StoreConfig;
243
124
  }
244
- export interface SyncEngine {
245
- connect(serverUrl: string, wasmModule: unknown, getTicket?: () => Promise<string>): Promise<void>;
246
- reconnect(serverUrl: string, getTicket?: () => Promise<string>): Promise<void>;
247
- disconnect(): void;
248
- readonly isReconnecting: boolean;
249
- setMutationHandler(handler: (scopeId: string, mutation: SyncMutation) => void): void;
250
- setConnectionStatusHandler(handler: (status: ConnectionStatus) => void): void;
251
- setSessionInvalidHandler(handler: () => void): void;
252
- openScope(scopeId: string): Promise<ScopeState>;
253
- closeScope(scopeId: string): Promise<void>;
254
- createEntity(entity: string, scopeId: string | null, data: Record<string, unknown>): Promise<string>;
255
- updateEntity(entity: string, scopeId: string | null, id: string, data: Record<string, unknown>): Promise<void>;
256
- deleteEntity(entity: string, scopeId: string | null, id: string): Promise<void>;
257
- fetchList(entity: string, scopeId?: string, sort?: SortField[]): Promise<Record<string, unknown>[] | null>;
258
- bumpScopeVersion(scopeId: string): Promise<void>;
259
- request(topic: string, payload: unknown): Promise<Record<string, unknown>>;
260
- isSubscribedTo(scopeId: string): boolean;
261
- getAppliedVersion(scopeId: string): number;
262
- }
263
125
  //# sourceMappingURL=types.d.ts.map
@@ -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 CHANGED
@@ -1,7 +1,2 @@
1
- export class OwnershipError extends Error {
2
- constructor(message) {
3
- super(message);
4
- this.name = 'OwnershipError';
5
- }
6
- }
1
+ export {};
7
2
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAqFA,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF","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 interface MutationEvent {\n operation: 'create' | 'update' | 'delete';\n entity: string;\n id: string;\n scopeId: string;\n data: Record<string, unknown> | null;\n originTag: OriginTag | null;\n}\n\nexport interface ScopeBundle {\n root: Record<string, unknown> | null;\n children: Record<string, Record<string, unknown>[]>;\n}\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 SyncMutation {\n op: 'insert' | 'update' | 'delete';\n entity: string;\n id: string;\n data: Record<string, unknown> | null;\n operationId: string | null;\n}\n\nexport interface ScopeState {\n root: Record<string, unknown>;\n children: Record<string, Record<string, unknown>[]>;\n version: number;\n bufferedMutations: SyncMutation[];\n}\n\nexport class OwnershipError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'OwnershipError';\n }\n}\n\nexport interface MemoryStore {\n ensureReady(): Promise<void>;\n readonly isReady: boolean;\n readonly corrupted: boolean;\n onCorruption(callback: () => void): () => void;\n\n create(entity: string, scopeId: string, data: Record<string, unknown>, tag?: OriginTag): void;\n update(entity: string, id: string, fields: Record<string, unknown>, tag?: OriginTag): void;\n delete(entity: string, id: string, tag?: OriginTag): void;\n read(entity: string, id: string): Record<string, unknown> | null;\n list(entity: string, scopeId: string): Record<string, unknown>[];\n\n getSnapshot(entity: string, scopeId: string): Record<string, unknown>[];\n getSnapshotAsMap(entity: string, scopeId: string): Record<string, Record<string, unknown>>;\n\n subscribeToScope(scopeId: string, entity: string, callback: () => void): () => void;\n subscribeToEntity(entity: string, callback: () => void): () => void;\n onMutation(listener: (event: MutationEvent) => void): () => void;\n\n beginBatch(): void;\n endBatch(): void;\n\n loadScope(\n scopeId: string,\n data: Record<string, Record<string, unknown>[]>,\n tag?: OriginTag\n ): void;\n clearScope(scopeId: string): void;\n\n onReady(callback: () => void): void;\n getLastOriginTag(): OriginTag | null;\n}\n\nexport interface PersistenceLayer {\n open(dbName: string): Promise<void>;\n close(): void;\n\n create(entity: string, data: Record<string, unknown>): Promise<void>;\n read(entity: string, id: string): Promise<Record<string, unknown>>;\n update(entity: string, id: string, data: Record<string, unknown>): Promise<void>;\n delete(entity: string, id: string): Promise<void>;\n list(entity: string, options?: Record<string, unknown>): Promise<Record<string, unknown>[]>;\n count(entity: string, options?: Record<string, unknown>): Promise<number>;\n\n subscribe(\n entity: string,\n callback: (data: unknown, op: 'insert' | 'update' | 'delete') => void\n ): () => 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\n readonly isOpen: boolean;\n}\n\nexport interface PendingMutation {\n op: 'insert' | 'update' | 'delete';\n entity: string;\n id: string;\n scopeId: string;\n data: Record<string, unknown> | null;\n}\n\nexport interface ConsolidatedMutation extends PendingMutation {\n recordIds: string[];\n}\n\nexport interface MutationSender {\n syncCreate(entity: string, scopeId: string, data: Record<string, unknown>): Promise<void>;\n syncUpdate(\n entity: string,\n scopeId: string,\n id: string,\n data: Record<string, unknown>\n ): Promise<void>;\n syncDelete(entity: string, scopeId: string, id: string): Promise<void>;\n readEntity(entity: string, id: string): Promise<Record<string, unknown>>;\n deleteEntity(entity: string, id: string): Promise<void>;\n}\n\nexport interface OfflineQueue {\n queue(mutation: PendingMutation): Promise<void>;\n remove(entity: string, entityId: string, scopeId: string, op: string): Promise<void>;\n flush(sender: MutationSender): Promise<void>;\n clear(): Promise<void>;\n getPendingForScope(scopeId: string): Promise<PendingMutation[]>;\n hasPendingInsert(entity: string, entityId: string): Promise<boolean>;\n}\n\nexport interface LocalAccessor {\n read(entity: string, id: string): Promise<Record<string, unknown>>;\n list(entity: string, options: Record<string, unknown>): Promise<Record<string, unknown>[]>;\n create(entity: string, data: Record<string, unknown>): Promise<void>;\n update(entity: string, id: string, data: Record<string, unknown>): Promise<void>;\n delete(entity: string, id: string): Promise<void>;\n}\n\nexport interface RemoteSyncLayer {\n connect(serverUrl: string, getTicket?: () => Promise<string>): Promise<void>;\n disconnect(): void;\n reconnect(serverUrl: string, getTicket?: () => Promise<string>): Promise<void>;\n readonly isReconnecting: boolean;\n readonly connectionStatus: ConnectionStatus;\n subscribeToConnectionStatus(cb: (s: ConnectionStatus) => void): () => void;\n\n setAuthenticatedUser(userId: string): void;\n setSessionInvalidHandler(handler: () => void): void;\n setReconnectValidator(validator: () => Promise<void>): void;\n\n syncCreate(entity: string, scopeId: string, data: Record<string, unknown>): Promise<void>;\n syncUpdate(\n entity: string,\n scopeId: string,\n id: string,\n data: Record<string, unknown>\n ): Promise<void>;\n syncDelete(entity: string, scopeId: string, id: string): Promise<void>;\n\n openScope(scopeId: string): Promise<ScopeState>;\n closeScope(scopeId: string): Promise<void>;\n fetchList(\n entity: string,\n scopeId?: string,\n sort?: SortField[]\n ): Promise<Record<string, unknown>[] | null>;\n\n syncRootEntityList(localAccessor: LocalAccessor, queue: OfflineQueue | null): Promise<void>;\n reconcileChildren(\n scopeId: string,\n entity: string,\n serverRecords: Record<string, unknown>[],\n localAccessor: LocalAccessor,\n queue: OfflineQueue | null\n ): Promise<void>;\n applyMutationToDb(mutation: SyncMutation, localAccessor: LocalAccessor): Promise<void>;\n\n request(topic: string, payload: unknown): Promise<Record<string, unknown>>;\n\n resetForLogout(): void;\n}\n\nexport interface PersistenceConfig {\n dbName: string;\n}\n\nexport interface RemoteConfig {\n serverUrl: string;\n getTicket?: () => Promise<string>;\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\nexport interface Store<S extends EntitySchema = DefaultSchema> {\n initialize(): Promise<void>;\n destroy(): 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): Promise<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 /**\n * Load a scope's data into the in-memory store, replacing whatever scope was\n * previously active. Fetches the root entity and its children from persistence\n * (and the server, if remote sync is configured), reconciles with local state,\n * and subscribes to live mutations for the new scope.\n *\n * The in-memory WASM database is rebuilt on each call — only one scope is live\n * at a time. Use `closeScope(previousId)` before switching if you need a clean\n * teardown signal for the old scope.\n */\n replaceScope(scopeId: string): Promise<void>;\n closeScope(scopeId: string): Promise<void>;\n loadScope(scopeId: string, data: Record<string, Record<string, unknown>[]>): void;\n clearScope(scopeId: string): void;\n\n readonly connectionStatus: ConnectionStatus;\n subscribeToConnectionStatus(cb: (s: ConnectionStatus) => void): () => void;\n disconnect(): 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(): 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\n getCachedUser(): Promise<Record<string, unknown> | null>;\n setCachedUser(user: Record<string, unknown>): Promise<void>;\n clearCachedUser(): Promise<void>;\n hasPendingLogout(): Promise<boolean>;\n setPendingLogout(pending: boolean): Promise<void>;\n flushPendingLogout(logoutFn: () => Promise<void>): Promise<void>;\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\nexport interface SyncEngine {\n connect(serverUrl: string, wasmModule: unknown, getTicket?: () => Promise<string>): Promise<void>;\n reconnect(serverUrl: string, getTicket?: () => Promise<string>): Promise<void>;\n disconnect(): void;\n readonly isReconnecting: boolean;\n\n setMutationHandler(handler: (scopeId: string, mutation: SyncMutation) => void): void;\n setConnectionStatusHandler(handler: (status: ConnectionStatus) => void): void;\n setSessionInvalidHandler(handler: () => void): void;\n\n openScope(scopeId: string): Promise<ScopeState>;\n closeScope(scopeId: string): Promise<void>;\n\n createEntity(\n entity: string,\n scopeId: string | null,\n data: Record<string, unknown>\n ): Promise<string>;\n updateEntity(\n entity: string,\n scopeId: string | null,\n id: string,\n data: Record<string, unknown>\n ): Promise<void>;\n deleteEntity(entity: string, scopeId: string | null, id: string): Promise<void>;\n\n fetchList(\n entity: string,\n scopeId?: string,\n sort?: SortField[]\n ): Promise<Record<string, unknown>[] | null>;\n\n bumpScopeVersion(scopeId: string): Promise<void>;\n\n request(topic: string, payload: unknown): Promise<Record<string, unknown>>;\n\n isSubscribedTo(scopeId: string): boolean;\n getAppliedVersion(scopeId: string): number;\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}\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@laboverwire/stitch",
3
- "version": "0.4.3",
3
+ "version": "0.5.0",
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",
@@ -74,8 +74,7 @@
74
74
  }
75
75
  },
76
76
  "dependencies": {
77
- "mqdb-wasm": "^0.3.2",
78
- "mqtt5-wasm": "^1.0.0"
77
+ "@laboverwire/stitch-wasm": "^0.2.1"
79
78
  },
80
79
  "peerDependencies": {
81
80
  "react": "^19.0.0",
@@ -91,10 +90,12 @@
91
90
  },
92
91
  "devDependencies": {
93
92
  "@eslint/js": "^10.0.1",
93
+ "@testing-library/react": "^16.3.2",
94
94
  "@types/react": "^19.2.14",
95
- "@vitest/browser": "^4.1.5",
96
- "@vitest/browser-playwright": "^4.1.5",
97
- "@vitest/ui": "^4.1.5",
95
+ "@vitest/browser": "^4.1.10",
96
+ "@vitest/browser-playwright": "^4.1.10",
97
+ "@vitest/ui": "^4.1.10",
98
+ "esbuild": "^0.28.1",
98
99
  "eslint": "^10.2.1",
99
100
  "eslint-config-prettier": "^10.1.8",
100
101
  "eslint-plugin-react-hooks": "^7.1.1",
@@ -103,9 +104,17 @@
103
104
  "lint-staged": "^16.4.0",
104
105
  "playwright": "^1.59.1",
105
106
  "prettier": "^3.8.3",
107
+ "react": "^19.2.7",
108
+ "react-dom": "^19.2.7",
109
+ "rollup": "^4.62.2",
106
110
  "typescript": "^6.0.3",
107
111
  "typescript-eslint": "^8.59.0",
108
- "vitest": "^4.1.5",
112
+ "vite-plugin-top-level-await": "^1.6.0",
113
+ "vite-plugin-wasm": "^3.6.0",
114
+ "vitest": "^4.1.10",
109
115
  "vue": "^3.3.0"
116
+ },
117
+ "overrides": {
118
+ "uuid": "^11.1.1"
110
119
  }
111
120
  }
@@ -1,4 +0,0 @@
1
- export declare function stripNulls(obj: Record<string, unknown>): Record<string, unknown>;
2
- export declare function isTransientSyncError(err: unknown): boolean;
3
- export declare function isPermanentMutationError(err: unknown): boolean;
4
- //# sourceMappingURL=internal-utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"internal-utils.d.ts","sourceRoot":"","sources":["../src/internal-utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQhF;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAG1D;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAK9D"}
@@ -1,20 +0,0 @@
1
- export function stripNulls(obj) {
2
- const result = {};
3
- for (const [key, value] of Object.entries(obj)) {
4
- if (value != null) {
5
- result[key] = value;
6
- }
7
- }
8
- return result;
9
- }
10
- export function isTransientSyncError(err) {
11
- if (!(err instanceof Error))
12
- return false;
13
- return /timeout|disconnected/i.test(err.message);
14
- }
15
- export function isPermanentMutationError(err) {
16
- if (!(err instanceof Error))
17
- return false;
18
- return /unique constraint violation|foreign key violation|not null violation|cascade blocked|referenced by other entities/i.test(err.message);
19
- }
20
- //# sourceMappingURL=internal-utils.js.map