@signalium/query 1.0.13 → 1.0.14
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 +14 -0
- package/dist/cjs/development/index.js +2985 -0
- package/dist/cjs/development/index.js.map +1 -0
- package/dist/cjs/development/react/index.js +52 -0
- package/dist/cjs/development/react/index.js.map +1 -0
- package/dist/cjs/{stores/shared.js → development/shared-5acOO-tS.js} +11 -14
- package/dist/cjs/development/shared-5acOO-tS.js.map +1 -0
- package/dist/cjs/development/stores/async.js +304 -0
- package/dist/cjs/development/stores/async.js.map +1 -0
- package/dist/cjs/development/stores/sync.js +214 -0
- package/dist/cjs/development/stores/sync.js.map +1 -0
- package/dist/cjs/production/index.js +2985 -0
- package/dist/cjs/production/index.js.map +1 -0
- package/dist/cjs/production/package.json +3 -0
- package/dist/cjs/production/react/index.js +52 -0
- package/dist/cjs/production/react/index.js.map +1 -0
- package/dist/cjs/production/shared-5acOO-tS.js +20 -0
- package/dist/cjs/production/shared-5acOO-tS.js.map +1 -0
- package/dist/cjs/production/stores/async.js +304 -0
- package/dist/cjs/production/stores/async.js.map +1 -0
- package/dist/cjs/production/stores/sync.js +214 -0
- package/dist/cjs/production/stores/sync.js.map +1 -0
- package/dist/esm/EntityMap.d.ts +22 -0
- package/dist/esm/EntityMap.d.ts.map +1 -1
- package/dist/esm/MutationResult.d.ts +43 -0
- package/dist/esm/MutationResult.d.ts.map +1 -0
- package/dist/esm/QueryClient.d.ts +31 -2
- package/dist/esm/QueryClient.d.ts.map +1 -1
- package/dist/esm/development/index.js +2985 -0
- package/dist/esm/development/index.js.map +1 -0
- package/dist/esm/development/react/index.js +52 -0
- package/dist/esm/development/react/index.js.map +1 -0
- package/dist/esm/development/shared-Br5plsKm.js +21 -0
- package/dist/esm/development/shared-Br5plsKm.js.map +1 -0
- package/dist/esm/development/stores/async.js +304 -0
- package/dist/esm/development/stores/async.js.map +1 -0
- package/dist/esm/development/stores/sync.js +214 -0
- package/dist/esm/development/stores/sync.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/mutation.d.ts +82 -0
- package/dist/esm/mutation.d.ts.map +1 -0
- package/dist/esm/parseEntities.d.ts.map +1 -1
- package/dist/esm/production/index.js +2985 -0
- package/dist/esm/production/index.js.map +1 -0
- package/dist/esm/production/react/index.js +52 -0
- package/dist/esm/production/react/index.js.map +1 -0
- package/dist/esm/production/shared-Br5plsKm.js +21 -0
- package/dist/esm/production/shared-Br5plsKm.js.map +1 -0
- package/dist/esm/production/stores/async.js +304 -0
- package/dist/esm/production/stores/async.js.map +1 -0
- package/dist/esm/production/stores/sync.js +214 -0
- package/dist/esm/production/stores/sync.js.map +1 -0
- package/dist/esm/proxy.d.ts +6 -5
- package/dist/esm/proxy.d.ts.map +1 -1
- package/dist/esm/query.d.ts +3 -1
- package/dist/esm/query.d.ts.map +1 -1
- package/dist/esm/typeDefs.d.ts +4 -2
- package/dist/esm/typeDefs.d.ts.map +1 -1
- package/dist/esm/types.d.ts +71 -4
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/utils.d.ts +35 -0
- package/dist/esm/utils.d.ts.map +1 -1
- package/package.json +55 -21
- package/stores/async.js +1 -1
- package/stores/sync.js +1 -1
- package/dist/cjs/EntityMap.js +0 -103
- package/dist/cjs/EntityMap.js.map +0 -1
- package/dist/cjs/MemoryEvictionManager.js +0 -56
- package/dist/cjs/MemoryEvictionManager.js.map +0 -1
- package/dist/cjs/NetworkManager.js +0 -125
- package/dist/cjs/NetworkManager.js.map +0 -1
- package/dist/cjs/QueryClient.js +0 -162
- package/dist/cjs/QueryClient.js.map +0 -1
- package/dist/cjs/QueryResult.js +0 -920
- package/dist/cjs/QueryResult.js.map +0 -1
- package/dist/cjs/RefetchManager.js +0 -88
- package/dist/cjs/RefetchManager.js.map +0 -1
- package/dist/cjs/errors.js +0 -129
- package/dist/cjs/errors.js.map +0 -1
- package/dist/cjs/index.js +0 -43
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/parseEntities.js +0 -142
- package/dist/cjs/parseEntities.js.map +0 -1
- package/dist/cjs/pathInterpolator.js +0 -69
- package/dist/cjs/pathInterpolator.js.map +0 -1
- package/dist/cjs/proxy.js +0 -263
- package/dist/cjs/proxy.js.map +0 -1
- package/dist/cjs/query.js +0 -184
- package/dist/cjs/query.js.map +0 -1
- package/dist/cjs/react/index.js +0 -6
- package/dist/cjs/react/index.js.map +0 -1
- package/dist/cjs/react/use-query.js +0 -56
- package/dist/cjs/react/use-query.js.map +0 -1
- package/dist/cjs/stores/async.js +0 -344
- package/dist/cjs/stores/async.js.map +0 -1
- package/dist/cjs/stores/shared.js.map +0 -1
- package/dist/cjs/stores/sync.js +0 -240
- package/dist/cjs/stores/sync.js.map +0 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +0 -1
- package/dist/cjs/type-utils.js +0 -3
- package/dist/cjs/type-utils.js.map +0 -1
- package/dist/cjs/typeDefs.js +0 -620
- package/dist/cjs/typeDefs.js.map +0 -1
- package/dist/cjs/types.js +0 -33
- package/dist/cjs/types.js.map +0 -1
- package/dist/cjs/utils.js +0 -23
- package/dist/cjs/utils.js.map +0 -1
- package/dist/esm/EntityMap.js +0 -99
- package/dist/esm/EntityMap.js.map +0 -1
- package/dist/esm/MemoryEvictionManager.js +0 -51
- package/dist/esm/MemoryEvictionManager.js.map +0 -1
- package/dist/esm/NetworkManager.js +0 -120
- package/dist/esm/NetworkManager.js.map +0 -1
- package/dist/esm/QueryClient.js +0 -154
- package/dist/esm/QueryClient.js.map +0 -1
- package/dist/esm/QueryResult.js +0 -916
- package/dist/esm/QueryResult.js.map +0 -1
- package/dist/esm/RefetchManager.js +0 -83
- package/dist/esm/RefetchManager.js.map +0 -1
- package/dist/esm/errors.js +0 -125
- package/dist/esm/errors.js.map +0 -1
- package/dist/esm/index.js +0 -8
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/parseEntities.js +0 -135
- package/dist/esm/parseEntities.js.map +0 -1
- package/dist/esm/pathInterpolator.js +0 -66
- package/dist/esm/pathInterpolator.js.map +0 -1
- package/dist/esm/proxy.js +0 -254
- package/dist/esm/proxy.js.map +0 -1
- package/dist/esm/query.js +0 -177
- package/dist/esm/query.js.map +0 -1
- package/dist/esm/react/index.js +0 -2
- package/dist/esm/react/index.js.map +0 -1
- package/dist/esm/react/use-query.js +0 -53
- package/dist/esm/react/use-query.js.map +0 -1
- package/dist/esm/stores/async.js +0 -340
- package/dist/esm/stores/async.js.map +0 -1
- package/dist/esm/stores/shared.js +0 -13
- package/dist/esm/stores/shared.js.map +0 -1
- package/dist/esm/stores/sync.js +0 -234
- package/dist/esm/stores/sync.js.map +0 -1
- package/dist/esm/type-utils.js +0 -2
- package/dist/esm/type-utils.js.map +0 -1
- package/dist/esm/typeDefs.js +0 -606
- package/dist/esm/typeDefs.js.map +0 -1
- package/dist/esm/types.js +0 -30
- package/dist/esm/types.js.map +0 -1
- package/dist/esm/utils.js +0 -20
- package/dist/esm/utils.js.map +0 -1
- /package/dist/cjs/{package.json → development/package.json} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sources":["../../../../src/stores/sync.ts"],"sourcesContent":["import { EntityStore } from '../EntityMap.js';\nimport { CachedQuery, CachedQueryExtra, QueryDefinition, QueryStore } from '../QueryClient.js';\nimport {\n optimisticInsertRefsKeyFor,\n refCountKeyFor,\n refIdsKeyFor,\n streamOrphanRefsKeyFor,\n updatedAtKeyFor,\n valueKeyFor,\n} from './shared.js';\n\nexport interface SyncPersistentStore {\n has(key: string): boolean;\n\n getString(key: string): string | undefined;\n setString(key: string, value: string): void;\n\n getNumber(key: string): number | undefined;\n setNumber(key: string, value: number): void;\n\n getBuffer(key: string): Uint32Array | undefined;\n setBuffer(key: string, value: Uint32Array): void;\n\n delete(key: string): void;\n}\n\nconst DEFAULT_MAX_COUNT = 50;\nconst DEFAULT_GC_TIME = 1000 * 60 * 60 * 24; // 24 hours\n\nexport class MemoryPersistentStore implements SyncPersistentStore {\n private readonly kv: Record<string, unknown> = Object.create(null);\n\n has(key: string): boolean {\n return key in this.kv;\n }\n\n getString(key: string): string | undefined {\n return this.kv[key] as string | undefined;\n }\n\n setString(key: string, value: string): void {\n this.kv[key] = value;\n }\n\n getNumber(key: string): number | undefined {\n return this.kv[key] as number | undefined;\n }\n\n setNumber(key: string, value: number): void {\n this.kv[key] = value;\n }\n\n getBuffer(key: string): Uint32Array | undefined {\n return this.kv[key] as Uint32Array | undefined;\n }\n\n setBuffer(key: string, value: Uint32Array): void {\n this.kv[key] = value;\n }\n\n delete(key: string): void {\n delete this.kv[key];\n }\n}\n\n// Query Type keys\nexport const queueKeyFor = (queryDefId: string) => `sq:doc:queue:${queryDefId}`;\n\nexport class SyncQueryStore implements QueryStore {\n queues: Map<string, Uint32Array> = new Map();\n\n constructor(private readonly kv: SyncPersistentStore) {}\n\n loadQuery(\n queryDef: QueryDefinition<any, any, any>,\n queryKey: number,\n entityMap: EntityStore,\n ): CachedQuery | undefined {\n const updatedAt = this.kv.getNumber(updatedAtKeyFor(queryKey));\n\n if (updatedAt === undefined || updatedAt < Date.now() - (queryDef.cache?.gcTime ?? DEFAULT_GC_TIME)) {\n return;\n }\n\n const valueStr = this.kv.getString(valueKeyFor(queryKey));\n\n if (valueStr === undefined) {\n return;\n }\n\n const entityIds = this.kv.getBuffer(refIdsKeyFor(queryKey));\n\n if (entityIds !== undefined) {\n this.preloadEntities(entityIds, entityMap);\n }\n\n // Load extra data (stream orphans and optimistic inserts)\n const streamOrphanRefs = this.kv.getBuffer(streamOrphanRefsKeyFor(queryKey));\n const optimisticInsertRefs = this.kv.getBuffer(optimisticInsertRefsKeyFor(queryKey));\n\n // Preload entities for extra data\n if (streamOrphanRefs !== undefined) {\n this.preloadEntities(streamOrphanRefs, entityMap);\n }\n if (optimisticInsertRefs !== undefined) {\n this.preloadEntities(optimisticInsertRefs, entityMap);\n }\n\n let extra: CachedQueryExtra | undefined;\n if (streamOrphanRefs !== undefined || optimisticInsertRefs !== undefined) {\n extra = {};\n if (streamOrphanRefs !== undefined) {\n extra.streamOrphanRefs = Array.from(streamOrphanRefs);\n }\n if (optimisticInsertRefs !== undefined) {\n extra.optimisticInsertRefs = Array.from(optimisticInsertRefs);\n }\n }\n\n this.activateQuery(queryDef, queryKey);\n\n return {\n value: JSON.parse(valueStr) as Record<string, unknown>,\n refIds: entityIds === undefined ? undefined : new Set(entityIds ?? []),\n updatedAt,\n extra,\n };\n }\n\n private preloadEntities(entityIds: Uint32Array, entityMap: EntityStore): void {\n for (const entityId of entityIds) {\n const entityValue = this.kv.getString(valueKeyFor(entityId));\n\n if (entityValue === undefined) {\n continue;\n }\n\n const entity = JSON.parse(entityValue) as Record<string, unknown>;\n entityMap.setPreloadedEntity(entityId, entity);\n\n const childIds = this.kv.getBuffer(refIdsKeyFor(entityId));\n\n if (childIds === undefined) {\n continue;\n }\n\n this.preloadEntities(childIds, entityMap);\n }\n }\n\n saveQuery(\n queryDef: QueryDefinition<any, any, any>,\n queryKey: number,\n value: unknown,\n updatedAt: number,\n refIds?: Set<number>,\n extra?: CachedQueryExtra,\n ): void {\n this.setValue(queryKey, value, refIds);\n this.kv.setNumber(updatedAtKeyFor(queryKey), updatedAt);\n\n // Save extra data\n if (extra?.streamOrphanRefs !== undefined && extra.streamOrphanRefs.length > 0) {\n this.kv.setBuffer(streamOrphanRefsKeyFor(queryKey), new Uint32Array(extra.streamOrphanRefs));\n } else {\n this.kv.delete(streamOrphanRefsKeyFor(queryKey));\n }\n\n if (extra?.optimisticInsertRefs !== undefined && extra.optimisticInsertRefs.length > 0) {\n this.kv.setBuffer(optimisticInsertRefsKeyFor(queryKey), new Uint32Array(extra.optimisticInsertRefs));\n } else {\n this.kv.delete(optimisticInsertRefsKeyFor(queryKey));\n }\n\n this.activateQuery(queryDef, queryKey);\n }\n\n saveEntity(entityKey: number, value: unknown, refIds?: Set<number>): void {\n this.setValue(entityKey, value, refIds);\n }\n\n activateQuery(queryDef: QueryDefinition<any, any, any>, queryKey: number): void {\n if (!this.kv.has(valueKeyFor(queryKey))) {\n // Query not in store, nothing to do. This can happen if the query has\n // been evicted from the cache, but is still active in memory.\n return;\n }\n\n let queue = this.queues.get(queryDef.id);\n\n if (queue === undefined) {\n const maxCount = queryDef.cache?.maxCount ?? DEFAULT_MAX_COUNT;\n queue = this.kv.getBuffer(queueKeyFor(queryDef.id));\n\n if (queue === undefined) {\n queue = new Uint32Array(maxCount);\n this.kv.setBuffer(queueKeyFor(queryDef.id), queue);\n } else if (queue.length !== maxCount) {\n queue = new Uint32Array(queue.buffer, 0, maxCount);\n this.kv.setBuffer(queueKeyFor(queryDef.id), queue);\n }\n\n this.queues.set(queryDef.id, queue);\n }\n\n const indexOfKey = queue.indexOf(queryKey);\n\n // Item already in queue, move to front\n if (indexOfKey >= 0) {\n if (indexOfKey === 0) {\n // Already at front, nothing to do\n return;\n }\n // Shift items right to make space at front\n queue.copyWithin(1, 0, indexOfKey);\n queue[0] = queryKey;\n return;\n }\n\n // Item not in queue, add to front and evict tail\n const evicted = queue[queue.length - 1];\n queue.copyWithin(1, 0, queue.length - 1);\n queue[0] = queryKey;\n\n if (evicted !== 0) {\n this.deleteQuery(evicted);\n this.kv.delete(updatedAtKeyFor(evicted));\n }\n }\n\n private setValue(id: number, value: unknown, refIds?: Set<number>): void {\n const kv = this.kv;\n\n kv.setString(valueKeyFor(id), JSON.stringify(value));\n\n const refIdsKey = refIdsKeyFor(id);\n\n const prevRefIds = kv.getBuffer(refIdsKey);\n\n if (refIds === undefined || refIds.size === 0) {\n kv.delete(refIdsKey);\n\n // Decrement all previous refs\n if (prevRefIds !== undefined) {\n for (let i = 0; i < prevRefIds.length; i++) {\n const refId = prevRefIds[i];\n this.decrementRefCount(refId);\n }\n }\n } else {\n // Convert the set to a Uint32Array and capture all the refIds before we\n // delete previous ones from the set\n const newRefIds = new Uint32Array(refIds);\n\n if (prevRefIds !== undefined) {\n // Process new refs: increment if not in old\n for (let i = 0; i < prevRefIds.length; i++) {\n const refId = prevRefIds[i];\n\n if (refIds.has(refId)) {\n refIds.delete(refId);\n } else {\n this.decrementRefCount(refId);\n }\n }\n }\n\n // No previous refs, increment all unique new refs\n for (const refId of refIds) {\n this.incrementRefCount(refId);\n }\n\n kv.setBuffer(refIdsKey, newRefIds);\n }\n }\n\n deleteQuery(id: number): void {\n const kv = this.kv;\n\n kv.delete(valueKeyFor(id));\n kv.delete(refCountKeyFor(id));\n\n const refIds = kv.getBuffer(refIdsKeyFor(id));\n kv.delete(refIdsKeyFor(id)); // Clean up the refIds key\n\n if (refIds === undefined) {\n return;\n }\n\n // Decrement ref counts for all referenced entities\n for (const refId of refIds) {\n if (refId !== 0) {\n this.decrementRefCount(refId);\n }\n }\n }\n\n private incrementRefCount(refId: number): void {\n const refCountKey = refCountKeyFor(refId);\n const currentCount = this.kv.getNumber(refCountKey) ?? 0;\n const newCount = currentCount + 1;\n this.kv.setNumber(refCountKey, newCount);\n }\n\n private decrementRefCount(refId: number): void {\n const refCountKey = refCountKeyFor(refId);\n const currentCount = this.kv.getNumber(refCountKey);\n\n if (currentCount === undefined) {\n // Already deleted or never existed\n return;\n }\n\n const newCount = currentCount - 1;\n\n if (newCount === 0) {\n // Entity exists, cascade delete it\n this.deleteQuery(refId);\n } else {\n this.kv.setNumber(refCountKey, newCount);\n }\n }\n}\n"],"names":["updatedAtKeyFor","valueKeyFor","refIdsKeyFor","streamOrphanRefsKeyFor","optimisticInsertRefsKeyFor","refCountKeyFor"],"mappings":"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"}
|