@laboverwire/stitch 0.4.1 → 0.4.3
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 +20 -0
- package/dist/index.js.map +1 -1
- package/dist/internal-list-apply.js.map +1 -1
- package/dist/internal-utils.d.ts +1 -0
- package/dist/internal-utils.d.ts.map +1 -1
- package/dist/internal-utils.js +6 -1
- package/dist/internal-utils.js.map +1 -1
- package/dist/internal-wasm-error.js.map +1 -1
- package/dist/memory-store.js.map +1 -1
- package/dist/offline-queue.d.ts.map +1 -1
- package/dist/offline-queue.js +13 -11
- package/dist/offline-queue.js.map +1 -1
- package/dist/persistence-layer.js.map +1 -1
- package/dist/react/context.js.map +1 -1
- package/dist/react/hooks/useChildCounts.js.map +1 -1
- package/dist/react/hooks/useConnectionStatus.js.map +1 -1
- package/dist/react/hooks/useEntitySnapshot.js.map +1 -1
- package/dist/react/hooks/useRootEntityList.js.map +1 -1
- package/dist/react/hooks/useScopedEntities.js.map +1 -1
- package/dist/react/hooks/useSyncScope.js.map +1 -1
- package/dist/react/hooks/useTopLevelEntities.js.map +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/provider.js.map +1 -1
- package/dist/remote-sync-layer.js.map +1 -1
- package/dist/store.js.map +1 -1
- package/dist/sync-engine.js.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/vue/StitchAuth.js.map +1 -1
- package/dist/vue/StoreRoot.js.map +1 -1
- package/dist/vue/composables/useChildCounts.js.map +1 -1
- package/dist/vue/composables/useConnectionStatus.js.map +1 -1
- package/dist/vue/composables/useEntitySnapshot.js.map +1 -1
- package/dist/vue/composables/useRootEntityList.js.map +1 -1
- package/dist/vue/composables/useScopedEntities.js.map +1 -1
- package/dist/vue/composables/useStore.js.map +1 -1
- package/dist/vue/composables/useSyncScope.js.map +1 -1
- package/dist/vue/composables/useTopLevelEntities.js.map +1 -1
- package/dist/vue/index.js.map +1 -1
- package/dist/vue/injection-key.js.map +1 -1
- package/package.json +2 -2
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"}
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StitchAuth.js","sourceRoot":"","sources":["../../src/vue/StitchAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC;AAI7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC;IACxC,IAAI,EAAE,YAAY;IAElB,KAAK,EAAE;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,MAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC1D,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;QAC5C,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;QAC/C,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAgC,EAAE,OAAO,EAAE,SAAS,EAAE;QAChF,mBAAmB,EAAE,EAAE,IAAI,EAAE,QAAyC,EAAE,OAAO,EAAE,SAAS,EAAE;KAC7F;IAED,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;QACpB,KAAK,CACH,GAAG,EAAE,CACH;YACE,KAAK,CAAC,KAAK;YACX,KAAK,CAAC,aAAa;YACnB,KAAK,CAAC,MAAM;YACZ,KAAK,CAAC,gBAAgB;YACtB,KAAK,CAAC,mBAAmB;SACjB,EACZ,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,kBAAkB,CAAC,EAAE,EAAE;YACrE,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,KAAK,CAAC,UAAU,EAAE,CAAC;gBACnB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;YACD,IAAI,MAAM;gBAAE,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,cAAc;gBAAE,KAAK,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;YACnE,IAAI,kBAAkB;gBAAE,KAAK,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QAC1E,CAAC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;QAEF,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;IACjC,CAAC;CACF,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"StitchAuth.js","sourceRoot":"","sources":["../../src/vue/StitchAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC;AAI7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC;IACxC,IAAI,EAAE,YAAY;IAElB,KAAK,EAAE;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,MAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC1D,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;QAC5C,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;QAC/C,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAgC,EAAE,OAAO,EAAE,SAAS,EAAE;QAChF,mBAAmB,EAAE,EAAE,IAAI,EAAE,QAAyC,EAAE,OAAO,EAAE,SAAS,EAAE;KAC7F;IAED,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;QACpB,KAAK,CACH,GAAG,EAAE,CACH;YACE,KAAK,CAAC,KAAK;YACX,KAAK,CAAC,aAAa;YACnB,KAAK,CAAC,MAAM;YACZ,KAAK,CAAC,gBAAgB;YACtB,KAAK,CAAC,mBAAmB;SACjB,EACZ,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,kBAAkB,CAAC,EAAE,EAAE;YACrE,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,KAAK,CAAC,UAAU,EAAE,CAAC;gBACnB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;YACD,IAAI,MAAM;gBAAE,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,cAAc;gBAAE,KAAK,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;YACnE,IAAI,kBAAkB;gBAAE,KAAK,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QAC1E,CAAC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;QAEF,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;IACjC,CAAC;CACF,CAAC,CAAC","sourcesContent":["import { defineComponent, watch } from 'vue';\nimport type { PropType } from 'vue';\nimport type { Store } from '../types.ts';\n\n/**\n * Binds authentication-related state to the store. Nest inside a {@link StoreRoot}.\n * Controls `setAuthenticatedUser`, session-invalid + reconnect-validator handlers, and\n * tears down the store via `resetForLogout()` when `authenticated` transitions to false.\n */\nexport const StitchAuth = defineComponent({\n name: 'StitchAuth',\n\n props: {\n store: { type: Object as PropType<Store>, required: true },\n userId: { type: String, default: undefined },\n authenticated: { type: Boolean, default: true },\n onSessionInvalid: { type: Function as PropType<() => void>, default: undefined },\n onReconnectValidate: { type: Function as PropType<() => Promise<void>>, default: undefined },\n },\n\n setup(props, { slots }) {\n watch(\n () =>\n [\n props.store,\n props.authenticated,\n props.userId,\n props.onSessionInvalid,\n props.onReconnectValidate,\n ] as const,\n ([store, authenticated, userId, sessionHandler, reconnectValidator]) => {\n if (!authenticated) {\n store.disconnect();\n store.resetForLogout();\n return;\n }\n if (userId) store.setAuthenticatedUser(userId);\n if (sessionHandler) store.setSessionInvalidHandler(sessionHandler);\n if (reconnectValidator) store.setReconnectValidator(reconnectValidator);\n },\n { immediate: true }\n );\n\n return () => slots.default?.();\n },\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreRoot.js","sourceRoot":"","sources":["../../src/vue/StoreRoot.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StoreRoot.js","sourceRoot":"","sources":["../../src/vue/StoreRoot.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineComponent, provide, shallowRef, onMounted, onUnmounted, watch } from 'vue';\nimport type { PropType } from 'vue';\nimport type { ConnectionStatus, Store } from '../types.ts';\nimport { STITCH_KEY } from './injection-key.ts';\n\n/**\n * Store lifecycle component. Initializes the store, tracks connection status, and\n * handles visibility-change reconnection. Authentication concerns (userId, session\n * handlers, logout gating) live in {@link StitchAuth} — compose both if you need\n * an auth-aware app.\n */\nexport const StoreRoot = defineComponent({\n name: 'StoreRoot',\n\n props: {\n store: { type: Object as PropType<Store>, required: true },\n serverUrl: { type: String, default: undefined },\n getTicket: { type: Function as PropType<() => Promise<string>>, default: undefined },\n },\n\n setup(props, { slots }) {\n const initialized = shallowRef(false);\n const connectionStatus = shallowRef<ConnectionStatus>('offline');\n const error = shallowRef<Error | null>(null);\n\n const context = {\n get store() {\n return props.store;\n },\n get initialized() {\n return initialized.value;\n },\n get connectionStatus() {\n return connectionStatus.value;\n },\n get error() {\n return error.value;\n },\n };\n\n provide(STITCH_KEY, context);\n\n watch(\n () => props.store,\n (store) => {\n let mounted = true;\n async function init() {\n try {\n if (!store.ready) await store.initialize();\n if (mounted) initialized.value = true;\n } catch (err) {\n console.error('[StoreRoot] Initialization failed:', err);\n if (mounted) {\n error.value = err instanceof Error ? err : new Error('Store initialization failed');\n }\n }\n }\n init();\n return () => {\n mounted = false;\n };\n },\n { immediate: true }\n );\n\n let unsubStatus: (() => void) | null = null;\n\n function handleBeforeUnload() {\n props.store.disconnect();\n }\n\n onMounted(() => {\n unsubStatus = props.store.subscribeToConnectionStatus((status) => {\n connectionStatus.value = status;\n });\n window.addEventListener('beforeunload', handleBeforeUnload);\n });\n\n onUnmounted(() => {\n unsubStatus?.();\n window.removeEventListener('beforeunload', handleBeforeUnload);\n });\n\n watch(\n () => [initialized.value, props.store, props.serverUrl, props.getTicket] as const,\n ([ready, store, serverUrl, getTicket]) => {\n if (!ready || !store.hasRemote) return;\n\n let lastHidden = 0;\n const STALE_THRESHOLD_MS = 30_000;\n\n function handleVisibilityChange() {\n if (document.hidden) {\n lastHidden = Date.now();\n return;\n }\n if (lastHidden > 0 && Date.now() - lastHidden > STALE_THRESHOLD_MS && serverUrl) {\n if (store.connectionStatus !== 'connected' && !store.isReconnecting) {\n store\n .reconnect(serverUrl, getTicket)\n .catch((err: unknown) =>\n console.error('[StoreRoot] Reconnect on wake failed:', err)\n );\n }\n }\n }\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n return () => document.removeEventListener('visibilitychange', handleVisibilityChange);\n },\n { immediate: true }\n );\n\n return () => slots.default?.();\n },\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChildCounts.js","sourceRoot":"","sources":["../../../src/vue/composables/useChildCounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAIzD,MAAM,UAAU,cAAc,CAAC,KAAY,EAAE,MAAc;IACzD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;IACjD,MAAM,MAAM,GAAG,UAAU,CAAsB,IAAI,GAAG,EAAE,CAAC,CAAC;IAC1D,IAAI,WAAW,GAAwB,IAAI,CAAC;IAE5C,KAAK,CACH,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,CAAU,EAC9B,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC7B,WAAW,EAAE,EAAE,CAAC;QAChB,WAAW,GAAG,IAAI,CAAC;QAEnB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,MAAM,GAAmE,EAAE,CAAC;QAElF,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;iBAC5C,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBAChB,IAAI,SAAS;oBAAE,OAAO;gBACtB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;gBACvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAW,CAAC;oBACzC,IAAI,GAAG;wBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnD,CAAC;gBACD,KAAK,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,MAAM,EAAE,CAAC;oBACvC,IAAI,EAAE,KAAK,QAAQ;wBAAE,SAAS;oBAC9B,MAAM,GAAG,GAAG,CAA4B,CAAC;oBACzC,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAW,CAAC;oBACtC,IAAI,CAAC,GAAG;wBAAE,SAAS;oBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACnC,IAAI,EAAE,KAAK,QAAQ;wBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;yBAC3C,IAAI,EAAE,KAAK,QAAQ;wBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;gBACpE,CAAC;gBACD,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YACtB,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACV,IAAI,SAAS;oBAAE,OAAO;gBACtB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,WAAW,GAAG,CAAC,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE;YACxD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,QAAQ,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;YACD,IAAI,EAAE,KAAK,QAAQ;gBAAE,OAAO;YAC5B,IAAI,OAAO,UAAU,KAAK,QAAQ;gBAAE,OAAO;YAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,UAAqC,CAAC;YACrD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAW,CAAC;YACzC,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,EAAE,KAAK,QAAQ;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;iBAC3C,IAAI,EAAE,KAAK,QAAQ;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,QAAQ,EAAE,CAAC;QAEX,SAAS,CAAC,GAAG,EAAE;YACb,SAAS,GAAG,IAAI,CAAC;YACjB,WAAW,EAAE,EAAE,CAAC;YAChB,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IAEF,eAAe,CAAC,GAAG,EAAE;QACnB,WAAW,EAAE,EAAE,CAAC;QAChB,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"useChildCounts.js","sourceRoot":"","sources":["../../../src/vue/composables/useChildCounts.ts"],"names":[],"mappings":"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","sourcesContent":["import { shallowRef, watch, onBeforeUnmount } from 'vue';\nimport type { ShallowRef } from 'vue';\nimport type { Store } from '../../types.ts';\n\nexport function useChildCounts(store: Store, entity: string): ShallowRef<Map<string, number>> {\n const scopeField = store.config.scope.scopeField;\n const counts = shallowRef<Map<string, number>>(new Map());\n let unsubscribe: (() => void) | null = null;\n\n watch(\n () => [store, entity] as const,\n ([s, ent], _prev, onCleanup) => {\n unsubscribe?.();\n unsubscribe = null;\n\n let fetched = false;\n let cancelled = false;\n const buffer: Array<{ entity: unknown; op: 'insert' | 'update' | 'delete' }> = [];\n\n const fetchAll = () => {\n s.list(ent, { projection: ['id', scopeField] })\n .then((records) => {\n if (cancelled) return;\n const next = new Map<string, number>();\n for (const record of records) {\n const sid = record[scopeField] as string;\n if (sid) next.set(sid, (next.get(sid) ?? 0) + 1);\n }\n for (const { entity: e, op } of buffer) {\n if (op === 'update') continue;\n const rec = e as Record<string, unknown>;\n const sid = rec[scopeField] as string;\n if (!sid) continue;\n const current = next.get(sid) ?? 0;\n if (op === 'insert') next.set(sid, current + 1);\n else if (op === 'delete') next.set(sid, Math.max(0, current - 1));\n }\n buffer.length = 0;\n fetched = true;\n counts.value = next;\n })\n .catch(() => {\n if (cancelled) return;\n fetched = true;\n buffer.length = 0;\n });\n };\n\n unsubscribe = s.subscribeToEntity(ent, (entityData, op) => {\n if (entityData === null) {\n fetchAll();\n return;\n }\n if (op === 'update') return;\n if (typeof entityData !== 'object') return;\n if (!fetched) {\n buffer.push({ entity: entityData, op });\n return;\n }\n const record = entityData as Record<string, unknown>;\n const sid = record[scopeField] as string;\n if (!sid) return;\n const next = new Map(counts.value);\n const current = next.get(sid) ?? 0;\n if (op === 'insert') next.set(sid, current + 1);\n else if (op === 'delete') next.set(sid, Math.max(0, current - 1));\n counts.value = next;\n });\n\n fetchAll();\n\n onCleanup(() => {\n cancelled = true;\n unsubscribe?.();\n unsubscribe = null;\n });\n },\n { immediate: true }\n );\n\n onBeforeUnmount(() => {\n unsubscribe?.();\n unsubscribe = null;\n });\n\n return counts;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConnectionStatus.js","sourceRoot":"","sources":["../../../src/vue/composables/useConnectionStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAIxC,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,MAAM,MAAM,GAAG,UAAU,CAAmB,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAEpE,KAAK,CACH,GAAG,EAAE,CAAC,KAAK,EACX,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QACtB,MAAM,WAAW,GAAG,CAAC,CAAC,2BAA2B,CAAC,CAAC,IAAI,EAAE,EAAE;YACzD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"useConnectionStatus.js","sourceRoot":"","sources":["../../../src/vue/composables/useConnectionStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAIxC,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,MAAM,MAAM,GAAG,UAAU,CAAmB,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAEpE,KAAK,CACH,GAAG,EAAE,CAAC,KAAK,EACX,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QACtB,MAAM,WAAW,GAAG,CAAC,CAAC,2BAA2B,CAAC,CAAC,IAAI,EAAE,EAAE;YACzD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { watch, shallowRef } from 'vue';\nimport type { ShallowRef } from 'vue';\nimport type { ConnectionStatus, Store } from '../../types.ts';\n\nexport function useConnectionStatus(store: Store): ShallowRef<ConnectionStatus> {\n const status = shallowRef<ConnectionStatus>(store.connectionStatus);\n\n watch(\n () => store,\n (s, _prev, onCleanup) => {\n const unsubscribe = s.subscribeToConnectionStatus((next) => {\n status.value = next;\n });\n onCleanup(unsubscribe);\n },\n { immediate: true }\n );\n\n return status;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEntitySnapshot.js","sourceRoot":"","sources":["../../../src/vue/composables/useEntitySnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAIjD,MAAM,WAAW,GAA8B,EAAE,CAAC;AAClD,MAAM,SAAS,GAA4C,EAAE,CAAC;AAE9D,SAAS,aAAa,CAAC,aAAkC;IACvD,IAAI,QAAQ,IAAI,aAAa;QAAE,OAAQ,aAAuB,CAAC,MAAM,CAAC;IACtE,OAAO,aAA4B,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAA0B,EAC1B,OAAiC,EACjC,MAAgC;IAEhC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,UAAU,CAA4B,WAAW,CAAC,CAAC;IAEpE,KAAK,CACH,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAU,EAClD,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACzD,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAA0B,EAC1B,OAAiC,EACjC,MAAgC;IAEhC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,UAAU,CAA0C,SAAS,CAAC,CAAC;IAEhF,KAAK,CACH,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAU,EAClD,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACzD,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"useEntitySnapshot.js","sourceRoot":"","sources":["../../../src/vue/composables/useEntitySnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAIjD,MAAM,WAAW,GAA8B,EAAE,CAAC;AAClD,MAAM,SAAS,GAA4C,EAAE,CAAC;AAE9D,SAAS,aAAa,CAAC,aAAkC;IACvD,IAAI,QAAQ,IAAI,aAAa;QAAE,OAAQ,aAAuB,CAAC,MAAM,CAAC;IACtE,OAAO,aAA4B,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAA0B,EAC1B,OAAiC,EACjC,MAAgC;IAEhC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,UAAU,CAA4B,WAAW,CAAC,CAAC;IAEpE,KAAK,CACH,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAU,EAClD,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACzD,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAA0B,EAC1B,OAAiC,EACjC,MAAgC;IAEhC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,UAAU,CAA0C,SAAS,CAAC,CAAC;IAEhF,KAAK,CACH,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAU,EAClD,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACzD,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import { watch, shallowRef, toValue } from 'vue';\nimport type { ShallowRef, MaybeRefOrGetter } from 'vue';\nimport type { MemoryStore, Store } from '../../types.ts';\n\nconst EMPTY_ARRAY: Record<string, unknown>[] = [];\nconst EMPTY_MAP: Record<string, Record<string, unknown>> = {};\n\nfunction resolveMemory(storeOrMemory: MemoryStore | Store): MemoryStore {\n if ('memory' in storeOrMemory) return (storeOrMemory as Store).memory;\n return storeOrMemory as MemoryStore;\n}\n\nexport function useEntitySnapshot(\n store: MemoryStore | Store,\n scopeId: MaybeRefOrGetter<string>,\n entity: MaybeRefOrGetter<string>\n): ShallowRef<Record<string, unknown>[]> {\n const memory = resolveMemory(store);\n const snapshot = shallowRef<Record<string, unknown>[]>(EMPTY_ARRAY);\n\n watch(\n () => [toValue(scopeId), toValue(entity)] as const,\n ([sid, ent], _prev, onCleanup) => {\n if (!sid) {\n snapshot.value = EMPTY_ARRAY;\n return;\n }\n snapshot.value = memory.getSnapshot(ent, sid);\n const unsubscribe = memory.subscribeToScope(sid, ent, () => {\n snapshot.value = memory.getSnapshot(ent, sid);\n });\n onCleanup(unsubscribe);\n },\n { immediate: true }\n );\n\n return snapshot;\n}\n\nexport function useEntitySnapshotAsMap(\n store: MemoryStore | Store,\n scopeId: MaybeRefOrGetter<string>,\n entity: MaybeRefOrGetter<string>\n): ShallowRef<Record<string, Record<string, unknown>>> {\n const memory = resolveMemory(store);\n const snapshot = shallowRef<Record<string, Record<string, unknown>>>(EMPTY_MAP);\n\n watch(\n () => [toValue(scopeId), toValue(entity)] as const,\n ([sid, ent], _prev, onCleanup) => {\n if (!sid) {\n snapshot.value = EMPTY_MAP;\n return;\n }\n snapshot.value = memory.getSnapshotAsMap(ent, sid);\n const unsubscribe = memory.subscribeToScope(sid, ent, () => {\n snapshot.value = memory.getSnapshotAsMap(ent, sid);\n });\n onCleanup(unsubscribe);\n },\n { immediate: true }\n );\n\n return snapshot;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRootEntityList.js","sourceRoot":"","sources":["../../../src/vue/composables/useRootEntityList.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useRootEntityList.js","sourceRoot":"","sources":["../../../src/vue/composables/useRootEntityList.ts"],"names":[],"mappings":"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","sourcesContent":["import { shallowRef, watch, onBeforeUnmount } from 'vue';\nimport type { ShallowRef } from 'vue';\nimport type { Store } from '../../types.ts';\nimport { applyEvent, type ListItem } from '../../internal-list-apply.ts';\n\nexport function useRootEntityList(store: Store): {\n items: ShallowRef<ListItem[]>;\n loading: ShallowRef<boolean>;\n error: ShallowRef<Error | null>;\n refetch: () => Promise<void>;\n} {\n const rootEntity = store.config.scope.rootEntity;\n\n const items = shallowRef<ListItem[]>([]);\n const loading = shallowRef(true);\n const error = shallowRef<Error | null>(null);\n\n let unsubscribe: (() => void) | null = null;\n let cancelled = false;\n\n async function refetch(): Promise<void> {\n loading.value = true;\n error.value = null;\n try {\n const entities = await store.listRootEntities();\n items.value = entities as ListItem[];\n } catch (err) {\n error.value = err instanceof Error ? err : new Error('Failed to fetch root entities');\n } finally {\n loading.value = false;\n }\n }\n\n watch(\n () => store,\n (s, _prev, onCleanup) => {\n unsubscribe?.();\n cancelled = false;\n\n let fetched = false;\n const buffer: Array<{ entity: unknown; op: 'insert' | 'update' | 'delete' }> = [];\n\n const fetchAll = () => {\n s.listRootEntities()\n .then((entities) => {\n if (cancelled) return;\n let result = entities as ListItem[];\n for (const { entity, op } of buffer) result = applyEvent(result, entity, op);\n buffer.length = 0;\n fetched = true;\n items.value = result;\n loading.value = false;\n })\n .catch((err) => {\n if (cancelled) return;\n fetched = true;\n buffer.length = 0;\n error.value = err instanceof Error ? err : new Error('Failed to fetch root entities');\n loading.value = false;\n });\n };\n\n unsubscribe = s.subscribeToEntity(rootEntity, (entity, op) => {\n if (entity === null) {\n fetchAll();\n return;\n }\n if (!fetched) {\n buffer.push({ entity, op });\n return;\n }\n items.value = applyEvent(items.value, entity, op);\n });\n\n fetchAll();\n\n onCleanup(() => {\n cancelled = true;\n unsubscribe?.();\n unsubscribe = null;\n });\n },\n { immediate: true }\n );\n\n onBeforeUnmount(() => {\n cancelled = true;\n unsubscribe?.();\n unsubscribe = null;\n });\n\n return { items, loading, error, refetch };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useScopedEntities.js","sourceRoot":"","sources":["../../../src/vue/composables/useScopedEntities.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useScopedEntities.js","sourceRoot":"","sources":["../../../src/vue/composables/useScopedEntities.ts"],"names":[],"mappings":"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","sourcesContent":["import { shallowRef, watch, toValue, onBeforeUnmount } from 'vue';\nimport type { ShallowRef, MaybeRefOrGetter } from 'vue';\nimport type { Store } from '../../types.ts';\nimport { applyEvent, type ListItem } from '../../internal-list-apply.ts';\n\nexport function useScopedEntities(\n store: Store,\n scopeId: MaybeRefOrGetter<string | null>,\n entity: MaybeRefOrGetter<string>\n): {\n data: ShallowRef<ListItem[]>;\n loading: ShallowRef<boolean>;\n error: ShallowRef<Error | null>;\n refetch: () => Promise<void>;\n} {\n const effectiveScopeField = store.config.scope.scopeField;\n const data = shallowRef<ListItem[]>([]);\n const loading = shallowRef(true);\n const error = shallowRef<Error | null>(null);\n\n async function refetch(): Promise<void> {\n const sid = toValue(scopeId);\n const ent = toValue(entity);\n if (!sid) {\n data.value = [];\n loading.value = false;\n return;\n }\n loading.value = true;\n error.value = null;\n try {\n const rows = await store.list(ent, { scopeId: sid });\n data.value = rows as ListItem[];\n } catch (err) {\n error.value = err instanceof Error ? err : new Error('Failed to fetch entities');\n } finally {\n loading.value = false;\n }\n }\n\n let unsubscribe: (() => void) | null = null;\n\n watch(\n () => [toValue(scopeId), toValue(entity)] as const,\n ([sid, ent], _prev, onCleanup) => {\n unsubscribe?.();\n unsubscribe = null;\n\n if (!sid) {\n data.value = [];\n loading.value = false;\n return;\n }\n\n let fetched = false;\n let cancelled = false;\n const buffer: Array<{ entity: unknown; op: 'insert' | 'update' | 'delete' }> = [];\n\n const fetchAll = () => {\n store\n .list(ent, { scopeId: sid })\n .then((rows) => {\n if (cancelled) return;\n let result = rows as ListItem[];\n for (const { entity: e, op } of buffer) result = applyEvent(result, e, op);\n buffer.length = 0;\n fetched = true;\n data.value = result;\n loading.value = false;\n })\n .catch((err) => {\n if (cancelled) return;\n fetched = true;\n buffer.length = 0;\n error.value = err instanceof Error ? err : new Error('Failed to fetch entities');\n loading.value = false;\n });\n };\n\n unsubscribe = store.subscribeToEntity(ent, (entityData, op) => {\n if (entityData === null) {\n fetchAll();\n return;\n }\n const rec = entityData as Record<string, unknown>;\n if (rec[effectiveScopeField] !== sid) return;\n if (!fetched) {\n buffer.push({ entity: entityData, op });\n return;\n }\n data.value = applyEvent(data.value, entityData, op);\n });\n\n fetchAll();\n\n onCleanup(() => {\n cancelled = true;\n unsubscribe?.();\n unsubscribe = null;\n });\n },\n { immediate: true }\n );\n\n onBeforeUnmount(() => {\n unsubscribe?.();\n unsubscribe = null;\n });\n\n return { data, loading, error, refetch };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStore.js","sourceRoot":"","sources":["../../../src/vue/composables/useStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,MAAM,UAAU,QAAQ;IACtB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACtE,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"useStore.js","sourceRoot":"","sources":["../../../src/vue/composables/useStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,MAAM,UAAU,QAAQ;IACtB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACtE,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import { inject } from 'vue';\nimport { STITCH_KEY } from '../injection-key.ts';\nimport type { StitchContext } from '../injection-key.ts';\n\nexport function useStore(): StitchContext {\n const ctx = inject(STITCH_KEY);\n if (!ctx) throw new Error('useStore must be used within a StoreRoot');\n return ctx;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSyncScope.js","sourceRoot":"","sources":["../../../src/vue/composables/useSyncScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAI9D,MAAM,UAAU,YAAY,CAC1B,KAAY,EACZ,OAAwC;IAOxC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,UAAU,CAAe,IAAI,CAAC,CAAC;IACjD,IAAI,aAAa,GAAkB,IAAI,CAAC;IAExC,KAAK,UAAU,SAAS;QACtB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAI,aAAa,KAAK,GAAG;YAAE,OAAO;QAE1C,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;QACrB,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;QAEvB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC7B,aAAa,GAAG,GAAG,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACnF,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,UAAU,UAAU;QACvB,IAAI,CAAC,aAAa;YAAE,OAAO;QAE3B,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACtC,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,KAAK,CACH,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EACtB,GAAG,EAAE;QACH,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAChD,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,WAAW,CAAC,GAAG,EAAE;QACf,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAChD,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACvD,CAAC"}
|
|
1
|
+
{"version":3,"file":"useSyncScope.js","sourceRoot":"","sources":["../../../src/vue/composables/useSyncScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAI9D,MAAM,UAAU,YAAY,CAC1B,KAAY,EACZ,OAAwC;IAOxC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,UAAU,CAAe,IAAI,CAAC,CAAC;IACjD,IAAI,aAAa,GAAkB,IAAI,CAAC;IAExC,KAAK,UAAU,SAAS;QACtB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAI,aAAa,KAAK,GAAG;YAAE,OAAO;QAE1C,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;QACrB,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;QAEvB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC7B,aAAa,GAAG,GAAG,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACnF,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,UAAU,UAAU;QACvB,IAAI,CAAC,aAAa;YAAE,OAAO;QAE3B,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACtC,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,KAAK,CACH,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EACtB,GAAG,EAAE;QACH,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAChD,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,WAAW,CAAC,GAAG,EAAE;QACf,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAChD,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACvD,CAAC","sourcesContent":["import { watch, shallowRef, toValue, onUnmounted } from 'vue';\nimport type { ShallowRef, MaybeRefOrGetter } from 'vue';\nimport type { Store } from '../../types.ts';\n\nexport function useSyncScope(\n store: Store,\n scopeId: MaybeRefOrGetter<string | null>\n): {\n syncing: ShallowRef<boolean>;\n syncError: ShallowRef<Error | null>;\n openScope: () => Promise<void>;\n closeScope: () => Promise<void>;\n} {\n const syncing = shallowRef(false);\n const syncError = shallowRef<Error | null>(null);\n let openedScopeId: string | null = null;\n\n async function openScope(): Promise<void> {\n const sid = toValue(scopeId);\n if (!sid || openedScopeId === sid) return;\n\n syncing.value = true;\n syncError.value = null;\n\n try {\n await store.replaceScope(sid);\n if (toValue(scopeId) === sid) {\n openedScopeId = sid;\n }\n } catch (err) {\n syncError.value = err instanceof Error ? err : new Error('Failed to open scope');\n } finally {\n syncing.value = false;\n }\n }\n\n async function closeScope(): Promise<void> {\n if (!openedScopeId) return;\n\n try {\n await store.closeScope(openedScopeId);\n openedScopeId = null;\n } catch (err) {\n console.error('[useSyncScope] Failed to close scope:', err);\n }\n }\n\n watch(\n () => toValue(scopeId),\n () => {\n if (openedScopeId) {\n store.closeScope(openedScopeId).catch(() => {});\n openedScopeId = null;\n }\n }\n );\n\n onUnmounted(() => {\n if (openedScopeId) {\n store.closeScope(openedScopeId).catch(() => {});\n openedScopeId = null;\n }\n });\n\n return { syncing, syncError, openScope, closeScope };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTopLevelEntities.js","sourceRoot":"","sources":["../../../src/vue/composables/useTopLevelEntities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAiB,MAAM,8BAA8B,CAAC;AAEzE,MAAM,UAAU,mBAAmB,CACjC,KAAY,EACZ,MAAc;IAKd,MAAM,KAAK,GAAG,UAAU,CAAa,EAAE,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,WAAW,GAAwB,IAAI,CAAC;IAE5C,KAAK,CACH,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,CAAU,EAC9B,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC7B,WAAW,EAAE,EAAE,CAAC;QAChB,WAAW,GAAG,IAAI,CAAC;QAEnB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,MAAM,GAAmE,EAAE,CAAC;QAElF,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;iBACR,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACb,IAAI,SAAS;oBAAE,OAAO;gBACtB,IAAI,MAAM,GAAG,IAAkB,CAAC;gBAChC,KAAK,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,MAAM;oBAAE,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3E,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClB,OAAO,GAAG,IAAI,CAAC;gBACf,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;gBACrB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACxB,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACV,IAAI,SAAS;oBAAE,OAAO;gBACtB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACxB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,WAAW,GAAG,CAAC,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE;YACxD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,QAAQ,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YACD,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,QAAQ,EAAE,CAAC;QAEX,SAAS,CAAC,GAAG,EAAE;YACb,SAAS,GAAG,IAAI,CAAC;YACjB,WAAW,EAAE,EAAE,CAAC;YAChB,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IAEF,eAAe,CAAC,GAAG,EAAE;QACnB,WAAW,EAAE,EAAE,CAAC;QAChB,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"useTopLevelEntities.js","sourceRoot":"","sources":["../../../src/vue/composables/useTopLevelEntities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAiB,MAAM,8BAA8B,CAAC;AAEzE,MAAM,UAAU,mBAAmB,CACjC,KAAY,EACZ,MAAc;IAKd,MAAM,KAAK,GAAG,UAAU,CAAa,EAAE,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,WAAW,GAAwB,IAAI,CAAC;IAE5C,KAAK,CACH,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,CAAU,EAC9B,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC7B,WAAW,EAAE,EAAE,CAAC;QAChB,WAAW,GAAG,IAAI,CAAC;QAEnB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,MAAM,GAAmE,EAAE,CAAC;QAElF,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;iBACR,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACb,IAAI,SAAS;oBAAE,OAAO;gBACtB,IAAI,MAAM,GAAG,IAAkB,CAAC;gBAChC,KAAK,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,MAAM;oBAAE,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3E,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClB,OAAO,GAAG,IAAI,CAAC;gBACf,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;gBACrB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACxB,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACV,IAAI,SAAS;oBAAE,OAAO;gBACtB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACxB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,WAAW,GAAG,CAAC,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE;YACxD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,QAAQ,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YACD,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,QAAQ,EAAE,CAAC;QAEX,SAAS,CAAC,GAAG,EAAE;YACb,SAAS,GAAG,IAAI,CAAC;YACjB,WAAW,EAAE,EAAE,CAAC;YAChB,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IAEF,eAAe,CAAC,GAAG,EAAE;QACnB,WAAW,EAAE,EAAE,CAAC;QAChB,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC","sourcesContent":["import { shallowRef, watch, onBeforeUnmount } from 'vue';\nimport type { ShallowRef } from 'vue';\nimport type { Store } from '../../types.ts';\nimport { applyEvent, type ListItem } from '../../internal-list-apply.ts';\n\nexport function useTopLevelEntities(\n store: Store,\n entity: string\n): {\n items: ShallowRef<ListItem[]>;\n loading: ShallowRef<boolean>;\n} {\n const items = shallowRef<ListItem[]>([]);\n const loading = shallowRef(true);\n let unsubscribe: (() => void) | null = null;\n\n watch(\n () => [store, entity] as const,\n ([s, ent], _prev, onCleanup) => {\n unsubscribe?.();\n unsubscribe = null;\n\n let fetched = false;\n let cancelled = false;\n const buffer: Array<{ entity: unknown; op: 'insert' | 'update' | 'delete' }> = [];\n\n const fetchAll = () => {\n s.list(ent)\n .then((rows) => {\n if (cancelled) return;\n let result = rows as ListItem[];\n for (const { entity: e, op } of buffer) result = applyEvent(result, e, op);\n buffer.length = 0;\n fetched = true;\n items.value = result;\n loading.value = false;\n })\n .catch(() => {\n if (cancelled) return;\n fetched = true;\n buffer.length = 0;\n loading.value = false;\n });\n };\n\n unsubscribe = s.subscribeToEntity(ent, (entityData, op) => {\n if (entityData === null) {\n fetchAll();\n return;\n }\n if (!fetched) {\n buffer.push({ entity: entityData, op });\n return;\n }\n items.value = applyEvent(items.value, entityData, op);\n });\n\n fetchAll();\n\n onCleanup(() => {\n cancelled = true;\n unsubscribe?.();\n unsubscribe = null;\n });\n },\n { immediate: true }\n );\n\n onBeforeUnmount(() => {\n unsubscribe?.();\n unsubscribe = null;\n });\n\n return { items, loading };\n}\n"]}
|
package/dist/vue/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC","sourcesContent":["export { STITCH_KEY } from './injection-key.ts';\nexport type { StitchContext } from './injection-key.ts';\nexport { StoreRoot } from './StoreRoot.ts';\nexport { StitchAuth } from './StitchAuth.ts';\nexport { useStore } from './composables/useStore.ts';\nexport { useEntitySnapshot, useEntitySnapshotAsMap } from './composables/useEntitySnapshot.ts';\nexport { useConnectionStatus } from './composables/useConnectionStatus.ts';\nexport { useSyncScope } from './composables/useSyncScope.ts';\nexport { useRootEntityList } from './composables/useRootEntityList.ts';\nexport { useScopedEntities } from './composables/useScopedEntities.ts';\nexport { useChildCounts } from './composables/useChildCounts.ts';\nexport { useTopLevelEntities } from './composables/useTopLevelEntities.ts';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injection-key.js","sourceRoot":"","sources":["../../src/vue/injection-key.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,UAAU,GAAgC,MAAM,CAAC,QAAQ,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"injection-key.js","sourceRoot":"","sources":["../../src/vue/injection-key.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,UAAU,GAAgC,MAAM,CAAC,QAAQ,CAAC,CAAC","sourcesContent":["import type { InjectionKey } from 'vue';\nimport type { ConnectionStatus, Store } from '../types.ts';\n\nexport interface StitchContext {\n store: Store;\n initialized: boolean;\n connectionStatus: ConnectionStatus;\n error: Error | null;\n}\n\nexport const STITCH_KEY: InjectionKey<StitchContext> = Symbol('stitch');\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@laboverwire/stitch",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
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",
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
"lint-staged": "^16.4.0",
|
|
104
104
|
"playwright": "^1.59.1",
|
|
105
105
|
"prettier": "^3.8.3",
|
|
106
|
-
"typescript": "^
|
|
106
|
+
"typescript": "^6.0.3",
|
|
107
107
|
"typescript-eslint": "^8.59.0",
|
|
108
108
|
"vitest": "^4.1.5",
|
|
109
109
|
"vue": "^3.3.0"
|