@laboverwire/stitch 0.6.4 → 0.7.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.
- package/CHANGELOG.md +12 -1
- package/dist/index.js +1 -1
- package/dist/internal-list-apply.js.map +1 -1
- package/dist/react/hooks/useRootEntityList.js +1 -1
- package/dist/react/hooks/useScopedEntities.js +1 -1
- package/dist/react/hooks/useTopLevelEntities.js +1 -1
- package/dist/react/index.js +9 -9
- package/dist/react/provider.js +2 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +6 -0
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/vue/StitchAuth.d.ts.map +1 -1
- package/dist/vue/StoreRoot.d.ts.map +1 -1
- package/dist/vue/StoreRoot.js +1 -1
- package/dist/vue/composables/useRootEntityList.js +1 -1
- package/dist/vue/composables/useScopedEntities.js +1 -1
- package/dist/vue/composables/useStore.js +1 -1
- package/dist/vue/composables/useTopLevelEntities.js +1 -1
- package/dist/vue/index.js +11 -11
- package/package.json +13 -17
package/CHANGELOG.md
CHANGED
|
@@ -2,9 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
- _Nothing yet._
|
|
6
|
+
|
|
7
|
+
## 0.7.0
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- **Raised the minimum Node version to `>=22.22.1` (dropped Node 20).** `engines.node` moves from `>=20` to `>=22.22.1`; installing on Node 20 (EOL April 2026) or any Node below 22.22.1 now emits an `EBADENGINE` warning, a hard failure under `engine-strict` or pnpm. Two dev-toolchain upgrades drove the floor: vitest 5 (floor Node `^22.12.0 || ^24 || >=26`) and lint-staged 17 (floor Node `>=22.22.1`, the binding constraint); the pre-commit pipeline is unchanged (`prettier --write` then `oxlint --fix` on staged `src` files). CI now runs Node 22 and 24 instead of 20 and 22. No `@laboverwire/stitch` runtime or type surface changed.
|
|
12
|
+
- **Upgraded the build compiler to TypeScript 7 and replaced the ESLint toolchain with oxlint.** `typescript` moves from `^6.0.3` to `^7.0.2`, and `eslint`, `@eslint/js`, `typescript-eslint`, `eslint-plugin-react-hooks`, `eslint-config-prettier`, and `globals` are replaced by a single `oxlint` dev dependency (`eslint.config.js` → `.oxlintrc.json`). oxlint reproduces the prior lint coverage: its `correctness` rules plus the typescript-eslint `recommended` syntactic rules enforced as errors (`no-explicit-any`, `ban-ts-comment`, `no-namespace`, and the rest), and the `react-hooks` rules — `rules-of-hooks` (error) and `exhaustive-deps` (warn) — scoped to the React bindings under `src/react`. No type-aware rules were in use, so none are lost. The published `.d.ts` are unchanged from the previous TypeScript 6 build (verified by diffing both outputs), so there is no consumer-facing type or runtime change. Prettier remains the formatter. Trims 115 transitive dev dependencies.
|
|
13
|
+
|
|
14
|
+
## 0.6.5
|
|
15
|
+
|
|
5
16
|
### Added
|
|
6
17
|
|
|
7
|
-
-
|
|
18
|
+
- **`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.
|
|
8
19
|
|
|
9
20
|
## 0.6.4
|
|
10
21
|
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { createStore } from
|
|
1
|
+
export { createStore } from './store.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-list-apply.js","sourceRoot":"","sources":["../src/internal-list-apply.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CACxB,IAAgB,EAChB,MAAe,EACf,EAAkC;IAElC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,MAAM,IAAI,GAAG,MAAkB,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"internal-list-apply.js","sourceRoot":"","sources":["../src/internal-list-apply.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CACxB,IAAgB,EAChB,MAAe,EACf,EAAkC;IAElC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,MAAM,IAAI,GAAG,MAAkB,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,QAAQ,EAAE,CAAC;YACd,IAAI,GAAG,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,QAAQ,EAAE,CAAC;YACd,IAAI,GAAG,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,QAAQ,EAAE,CAAC;YACd,IAAI,GAAG,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YACzB,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;QACD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC","sourcesContent":["export type ListItem = Record<string, unknown> & { id: string };\n\nexport function applyEvent(\n prev: ListItem[],\n entity: unknown,\n op: 'insert' | 'update' | 'delete'\n): ListItem[] {\n if (!entity || typeof entity !== 'object' || !('id' in entity)) return prev;\n const item = entity as ListItem;\n const idx = prev.findIndex((d) => d.id === item.id);\n switch (op) {\n case 'insert': {\n if (idx < 0) return [...prev, item];\n const next = prev.slice();\n next[idx] = item;\n return next;\n }\n case 'update': {\n if (idx < 0) return prev;\n const next = prev.slice();\n next[idx] = item;\n return next;\n }\n case 'delete': {\n if (idx < 0) return prev;\n return [...prev.slice(0, idx), ...prev.slice(idx + 1)];\n }\n default:\n return prev;\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useEffect, useState, useCallback } from 'react';
|
|
2
|
-
import { applyEvent } from
|
|
2
|
+
import { applyEvent } from '../../internal-list-apply.js';
|
|
3
3
|
export function useRootEntityList(store) {
|
|
4
4
|
const rootEntity = store.config.scope.rootEntity;
|
|
5
5
|
const [items, setItems] = useState([]);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useEffect, useState, useCallback } from 'react';
|
|
2
|
-
import { applyEvent } from
|
|
2
|
+
import { applyEvent } from '../../internal-list-apply.js';
|
|
3
3
|
export function useScopedEntities(store, scopeId, entity) {
|
|
4
4
|
const effectiveScopeField = store.config.scope.scopeField;
|
|
5
5
|
const [data, setData] = useState([]);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
|
-
import { applyEvent } from
|
|
2
|
+
import { applyEvent } from '../../internal-list-apply.js';
|
|
3
3
|
export function useTopLevelEntities(store, entity) {
|
|
4
4
|
const [items, setItems] = useState([]);
|
|
5
5
|
const [loading, setLoading] = useState(true);
|
package/dist/react/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { StoreContext, useStore } from
|
|
2
|
-
export { StoreProvider, AuthProvider } from
|
|
3
|
-
export { useEntitySnapshot, useEntitySnapshotAsMap } from
|
|
4
|
-
export { useConnectionStatus } from
|
|
5
|
-
export { useScopedEntities } from
|
|
6
|
-
export { useRootEntityList } from
|
|
7
|
-
export { useTopLevelEntities } from
|
|
8
|
-
export { useChildCounts } from
|
|
9
|
-
export { useSyncScope } from
|
|
1
|
+
export { StoreContext, useStore } from './context.js';
|
|
2
|
+
export { StoreProvider, AuthProvider } from './provider.js';
|
|
3
|
+
export { useEntitySnapshot, useEntitySnapshotAsMap } from './hooks/useEntitySnapshot.js';
|
|
4
|
+
export { useConnectionStatus } from './hooks/useConnectionStatus.js';
|
|
5
|
+
export { useScopedEntities } from './hooks/useScopedEntities.js';
|
|
6
|
+
export { useRootEntityList } from './hooks/useRootEntityList.js';
|
|
7
|
+
export { useTopLevelEntities } from './hooks/useTopLevelEntities.js';
|
|
8
|
+
export { useChildCounts } from './hooks/useChildCounts.js';
|
|
9
|
+
export { useSyncScope } from './hooks/useSyncScope.js';
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
package/dist/react/provider.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useState, useMemo } from 'react';
|
|
3
|
-
import { StoreContext } from
|
|
3
|
+
import { StoreContext } from './context.js';
|
|
4
4
|
/**
|
|
5
5
|
* Store lifecycle only — initializes the store, tracks connection status, and
|
|
6
6
|
* handles visibility-change reconnection. Authentication concerns (userId, session
|
package/dist/store.d.ts.map
CHANGED
|
@@ -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;
|
|
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;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StitchAuth.d.ts","sourceRoot":"","sources":["../../src/vue/StitchAuth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;GAIG;AACH,eAAO,MAAM,UAAU;;cAIM,QAAQ,CAAC,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"StitchAuth.d.ts","sourceRoot":"","sources":["../../src/vue/StitchAuth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;GAIG;AACH,eAAO,MAAM,UAAU;;cAIM,QAAQ,CAAC,KAAK,CAAC;;;;QAC9B,IAAI;QAAU,OAAO;;;QACd,IAAI;QAAW,OAAO;;;QACnB,IAAI,EAAc,QAAQ,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO;;;QAC5C,IAAI,EAAc,QAAQ,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAD1B,IAAI;+BACD,OAAO,CAAC,IAAI,CAAC;4EA4BvE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreRoot.d.ts","sourceRoot":"","sources":["../../src/vue/StoreRoot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAoB,KAAK,EAAE,MAAM,aAAa,CAAC;AAG3D;;;;;GAKG;AACH,eAAO,MAAM,SAAS;;cAIO,QAAQ,CAAC,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"StoreRoot.d.ts","sourceRoot":"","sources":["../../src/vue/StoreRoot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAoB,KAAK,EAAE,MAAM,aAAa,CAAC;AAG3D;;;;;GAKG;AACH,eAAO,MAAM,SAAS;;cAIO,QAAQ,CAAC,KAAK,CAAC;;;;QAC3B,IAAI;QAAU,OAAO;;;QACrB,IAAI,EAAc,QAAQ,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO;;;;;;;;;;;;;;;;;;;qBAAzB,OAAO,CAAC,MAAM,CAAC;4EAkG/D,CAAC"}
|
package/dist/vue/StoreRoot.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, provide, shallowRef, onMounted, onUnmounted, watch } from 'vue';
|
|
2
|
-
import { STITCH_KEY } from
|
|
2
|
+
import { STITCH_KEY } from './injection-key.js';
|
|
3
3
|
/**
|
|
4
4
|
* Store lifecycle component. Initializes the store, tracks connection status, and
|
|
5
5
|
* handles visibility-change reconnection. Authentication concerns (userId, session
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { shallowRef, watch, onBeforeUnmount } from 'vue';
|
|
2
|
-
import { applyEvent } from
|
|
2
|
+
import { applyEvent } from '../../internal-list-apply.js';
|
|
3
3
|
export function useRootEntityList(store) {
|
|
4
4
|
const rootEntity = store.config.scope.rootEntity;
|
|
5
5
|
const items = shallowRef([]);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { shallowRef, watch, toValue, onBeforeUnmount } from 'vue';
|
|
2
|
-
import { applyEvent } from
|
|
2
|
+
import { applyEvent } from '../../internal-list-apply.js';
|
|
3
3
|
export function useScopedEntities(store, scopeId, entity) {
|
|
4
4
|
const effectiveScopeField = store.config.scope.scopeField;
|
|
5
5
|
const data = shallowRef([]);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { shallowRef, watch, onBeforeUnmount } from 'vue';
|
|
2
|
-
import { applyEvent } from
|
|
2
|
+
import { applyEvent } from '../../internal-list-apply.js';
|
|
3
3
|
export function useTopLevelEntities(store, entity) {
|
|
4
4
|
const items = shallowRef([]);
|
|
5
5
|
const loading = shallowRef(true);
|
package/dist/vue/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export { STITCH_KEY } from
|
|
2
|
-
export { StoreRoot } from
|
|
3
|
-
export { StitchAuth } from
|
|
4
|
-
export { useStore } from
|
|
5
|
-
export { useEntitySnapshot, useEntitySnapshotAsMap } from
|
|
6
|
-
export { useConnectionStatus } from
|
|
7
|
-
export { useSyncScope } from
|
|
8
|
-
export { useRootEntityList } from
|
|
9
|
-
export { useScopedEntities } from
|
|
10
|
-
export { useChildCounts } from
|
|
11
|
-
export { useTopLevelEntities } from
|
|
1
|
+
export { STITCH_KEY } from './injection-key.js';
|
|
2
|
+
export { StoreRoot } from './StoreRoot.js';
|
|
3
|
+
export { StitchAuth } from './StitchAuth.js';
|
|
4
|
+
export { useStore } from './composables/useStore.js';
|
|
5
|
+
export { useEntitySnapshot, useEntitySnapshotAsMap } from './composables/useEntitySnapshot.js';
|
|
6
|
+
export { useConnectionStatus } from './composables/useConnectionStatus.js';
|
|
7
|
+
export { useSyncScope } from './composables/useSyncScope.js';
|
|
8
|
+
export { useRootEntityList } from './composables/useRootEntityList.js';
|
|
9
|
+
export { useScopedEntities } from './composables/useScopedEntities.js';
|
|
10
|
+
export { useChildCounts } from './composables/useChildCounts.js';
|
|
11
|
+
export { useTopLevelEntities } from './composables/useTopLevelEntities.js';
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@laboverwire/stitch",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.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",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"types": "./dist/index.d.ts",
|
|
10
10
|
"sideEffects": false,
|
|
11
11
|
"engines": {
|
|
12
|
-
"node": ">=
|
|
12
|
+
"node": ">=22.22.1"
|
|
13
13
|
},
|
|
14
14
|
"repository": {
|
|
15
15
|
"type": "git",
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
],
|
|
40
40
|
"scripts": {
|
|
41
41
|
"type-check": "tsc --noEmit",
|
|
42
|
-
"lint": "
|
|
43
|
-
"lint:fix": "
|
|
42
|
+
"lint": "oxlint",
|
|
43
|
+
"lint:fix": "oxlint --fix",
|
|
44
44
|
"format": "prettier --write 'src/**/*.{ts,tsx}'",
|
|
45
45
|
"format:check": "prettier --check 'src/**/*.{ts,tsx}'",
|
|
46
46
|
"test": "vitest run",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"lint-staged": {
|
|
57
57
|
"src/**/*.{ts,tsx}": [
|
|
58
58
|
"prettier --write",
|
|
59
|
-
"
|
|
59
|
+
"oxlint --fix"
|
|
60
60
|
]
|
|
61
61
|
},
|
|
62
62
|
"exports": {
|
|
@@ -89,29 +89,25 @@
|
|
|
89
89
|
}
|
|
90
90
|
},
|
|
91
91
|
"devDependencies": {
|
|
92
|
-
"@eslint/js": "^10.0.1",
|
|
93
92
|
"@testing-library/react": "^16.3.2",
|
|
94
93
|
"@types/react": "^19.2.18",
|
|
95
|
-
"@vitest/browser": "^
|
|
96
|
-
"@vitest/browser-playwright": "^
|
|
97
|
-
"@vitest/ui": "^
|
|
94
|
+
"@vitest/browser": "^5.0.5",
|
|
95
|
+
"@vitest/browser-playwright": "^5.0.5",
|
|
96
|
+
"@vitest/ui": "^5.0.5",
|
|
98
97
|
"esbuild": "^0.28.1",
|
|
99
|
-
"eslint": "^10.8.0",
|
|
100
|
-
"eslint-config-prettier": "^10.1.8",
|
|
101
|
-
"eslint-plugin-react-hooks": "^7.1.1",
|
|
102
|
-
"globals": "^17.9.0",
|
|
103
98
|
"husky": "^9.1.7",
|
|
104
|
-
"lint-staged": "^
|
|
99
|
+
"lint-staged": "^17.6.0",
|
|
100
|
+
"oxlint": "^1.89.0",
|
|
105
101
|
"playwright": "^1.62.1",
|
|
106
102
|
"prettier": "^3.9.6",
|
|
107
103
|
"react": "^19.2.8",
|
|
108
104
|
"react-dom": "^19.2.8",
|
|
109
105
|
"rollup": "^4.62.4",
|
|
110
|
-
"typescript": "^
|
|
111
|
-
"
|
|
106
|
+
"typescript": "^7.0.2",
|
|
107
|
+
"vite": "^8.3.5",
|
|
112
108
|
"vite-plugin-top-level-await": "^1.6.0",
|
|
113
109
|
"vite-plugin-wasm": "^3.6.0",
|
|
114
|
-
"vitest": "^
|
|
110
|
+
"vitest": "^5.0.5",
|
|
115
111
|
"vue": "^3.5.42"
|
|
116
112
|
},
|
|
117
113
|
"overrides": {
|