@signalium/query 1.0.13 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cjs/development/index.js +2994 -0
  3. package/dist/cjs/development/index.js.map +1 -0
  4. package/dist/cjs/development/react/index.js +52 -0
  5. package/dist/cjs/development/react/index.js.map +1 -0
  6. package/dist/cjs/{stores/shared.js → development/shared-5acOO-tS.js} +11 -14
  7. package/dist/cjs/development/shared-5acOO-tS.js.map +1 -0
  8. package/dist/cjs/development/stores/async.js +304 -0
  9. package/dist/cjs/development/stores/async.js.map +1 -0
  10. package/dist/cjs/development/stores/sync.js +214 -0
  11. package/dist/cjs/development/stores/sync.js.map +1 -0
  12. package/dist/cjs/production/index.js +2994 -0
  13. package/dist/cjs/production/index.js.map +1 -0
  14. package/dist/cjs/production/package.json +3 -0
  15. package/dist/cjs/production/react/index.js +52 -0
  16. package/dist/cjs/production/react/index.js.map +1 -0
  17. package/dist/cjs/production/shared-5acOO-tS.js +20 -0
  18. package/dist/cjs/production/shared-5acOO-tS.js.map +1 -0
  19. package/dist/cjs/production/stores/async.js +304 -0
  20. package/dist/cjs/production/stores/async.js.map +1 -0
  21. package/dist/cjs/production/stores/sync.js +214 -0
  22. package/dist/cjs/production/stores/sync.js.map +1 -0
  23. package/dist/esm/EntityMap.d.ts +22 -0
  24. package/dist/esm/EntityMap.d.ts.map +1 -1
  25. package/dist/esm/MutationResult.d.ts +43 -0
  26. package/dist/esm/MutationResult.d.ts.map +1 -0
  27. package/dist/esm/QueryClient.d.ts +31 -2
  28. package/dist/esm/QueryClient.d.ts.map +1 -1
  29. package/dist/esm/development/index.js +2994 -0
  30. package/dist/esm/development/index.js.map +1 -0
  31. package/dist/esm/development/react/index.js +52 -0
  32. package/dist/esm/development/react/index.js.map +1 -0
  33. package/dist/esm/development/shared-Br5plsKm.js +21 -0
  34. package/dist/esm/development/shared-Br5plsKm.js.map +1 -0
  35. package/dist/esm/development/stores/async.js +304 -0
  36. package/dist/esm/development/stores/async.js.map +1 -0
  37. package/dist/esm/development/stores/sync.js +214 -0
  38. package/dist/esm/development/stores/sync.js.map +1 -0
  39. package/dist/esm/index.d.ts +5 -0
  40. package/dist/esm/index.d.ts.map +1 -1
  41. package/dist/esm/mutation.d.ts +82 -0
  42. package/dist/esm/mutation.d.ts.map +1 -0
  43. package/dist/esm/parseEntities.d.ts.map +1 -1
  44. package/dist/esm/production/index.js +2994 -0
  45. package/dist/esm/production/index.js.map +1 -0
  46. package/dist/esm/production/react/index.js +52 -0
  47. package/dist/esm/production/react/index.js.map +1 -0
  48. package/dist/esm/production/shared-Br5plsKm.js +21 -0
  49. package/dist/esm/production/shared-Br5plsKm.js.map +1 -0
  50. package/dist/esm/production/stores/async.js +304 -0
  51. package/dist/esm/production/stores/async.js.map +1 -0
  52. package/dist/esm/production/stores/sync.js +214 -0
  53. package/dist/esm/production/stores/sync.js.map +1 -0
  54. package/dist/esm/proxy.d.ts +9 -6
  55. package/dist/esm/proxy.d.ts.map +1 -1
  56. package/dist/esm/query.d.ts +3 -1
  57. package/dist/esm/query.d.ts.map +1 -1
  58. package/dist/esm/typeDefs.d.ts +4 -2
  59. package/dist/esm/typeDefs.d.ts.map +1 -1
  60. package/dist/esm/types.d.ts +71 -4
  61. package/dist/esm/types.d.ts.map +1 -1
  62. package/dist/esm/utils.d.ts +35 -0
  63. package/dist/esm/utils.d.ts.map +1 -1
  64. package/package.json +55 -21
  65. package/stores/async.js +1 -1
  66. package/stores/sync.js +1 -1
  67. package/dist/cjs/EntityMap.js +0 -103
  68. package/dist/cjs/EntityMap.js.map +0 -1
  69. package/dist/cjs/MemoryEvictionManager.js +0 -56
  70. package/dist/cjs/MemoryEvictionManager.js.map +0 -1
  71. package/dist/cjs/NetworkManager.js +0 -125
  72. package/dist/cjs/NetworkManager.js.map +0 -1
  73. package/dist/cjs/QueryClient.js +0 -162
  74. package/dist/cjs/QueryClient.js.map +0 -1
  75. package/dist/cjs/QueryResult.js +0 -920
  76. package/dist/cjs/QueryResult.js.map +0 -1
  77. package/dist/cjs/RefetchManager.js +0 -88
  78. package/dist/cjs/RefetchManager.js.map +0 -1
  79. package/dist/cjs/errors.js +0 -129
  80. package/dist/cjs/errors.js.map +0 -1
  81. package/dist/cjs/index.js +0 -43
  82. package/dist/cjs/index.js.map +0 -1
  83. package/dist/cjs/parseEntities.js +0 -142
  84. package/dist/cjs/parseEntities.js.map +0 -1
  85. package/dist/cjs/pathInterpolator.js +0 -69
  86. package/dist/cjs/pathInterpolator.js.map +0 -1
  87. package/dist/cjs/proxy.js +0 -263
  88. package/dist/cjs/proxy.js.map +0 -1
  89. package/dist/cjs/query.js +0 -184
  90. package/dist/cjs/query.js.map +0 -1
  91. package/dist/cjs/react/index.js +0 -6
  92. package/dist/cjs/react/index.js.map +0 -1
  93. package/dist/cjs/react/use-query.js +0 -56
  94. package/dist/cjs/react/use-query.js.map +0 -1
  95. package/dist/cjs/stores/async.js +0 -344
  96. package/dist/cjs/stores/async.js.map +0 -1
  97. package/dist/cjs/stores/shared.js.map +0 -1
  98. package/dist/cjs/stores/sync.js +0 -240
  99. package/dist/cjs/stores/sync.js.map +0 -1
  100. package/dist/cjs/tsconfig.cjs.tsbuildinfo +0 -1
  101. package/dist/cjs/type-utils.js +0 -3
  102. package/dist/cjs/type-utils.js.map +0 -1
  103. package/dist/cjs/typeDefs.js +0 -620
  104. package/dist/cjs/typeDefs.js.map +0 -1
  105. package/dist/cjs/types.js +0 -33
  106. package/dist/cjs/types.js.map +0 -1
  107. package/dist/cjs/utils.js +0 -23
  108. package/dist/cjs/utils.js.map +0 -1
  109. package/dist/esm/EntityMap.js +0 -99
  110. package/dist/esm/EntityMap.js.map +0 -1
  111. package/dist/esm/MemoryEvictionManager.js +0 -51
  112. package/dist/esm/MemoryEvictionManager.js.map +0 -1
  113. package/dist/esm/NetworkManager.js +0 -120
  114. package/dist/esm/NetworkManager.js.map +0 -1
  115. package/dist/esm/QueryClient.js +0 -154
  116. package/dist/esm/QueryClient.js.map +0 -1
  117. package/dist/esm/QueryResult.js +0 -916
  118. package/dist/esm/QueryResult.js.map +0 -1
  119. package/dist/esm/RefetchManager.js +0 -83
  120. package/dist/esm/RefetchManager.js.map +0 -1
  121. package/dist/esm/errors.js +0 -125
  122. package/dist/esm/errors.js.map +0 -1
  123. package/dist/esm/index.js +0 -8
  124. package/dist/esm/index.js.map +0 -1
  125. package/dist/esm/parseEntities.js +0 -135
  126. package/dist/esm/parseEntities.js.map +0 -1
  127. package/dist/esm/pathInterpolator.js +0 -66
  128. package/dist/esm/pathInterpolator.js.map +0 -1
  129. package/dist/esm/proxy.js +0 -254
  130. package/dist/esm/proxy.js.map +0 -1
  131. package/dist/esm/query.js +0 -177
  132. package/dist/esm/query.js.map +0 -1
  133. package/dist/esm/react/index.js +0 -2
  134. package/dist/esm/react/index.js.map +0 -1
  135. package/dist/esm/react/use-query.js +0 -53
  136. package/dist/esm/react/use-query.js.map +0 -1
  137. package/dist/esm/stores/async.js +0 -340
  138. package/dist/esm/stores/async.js.map +0 -1
  139. package/dist/esm/stores/shared.js +0 -13
  140. package/dist/esm/stores/shared.js.map +0 -1
  141. package/dist/esm/stores/sync.js +0 -234
  142. package/dist/esm/stores/sync.js.map +0 -1
  143. package/dist/esm/type-utils.js +0 -2
  144. package/dist/esm/type-utils.js.map +0 -1
  145. package/dist/esm/typeDefs.js +0 -606
  146. package/dist/esm/typeDefs.js.map +0 -1
  147. package/dist/esm/types.js +0 -30
  148. package/dist/esm/types.js.map +0 -1
  149. package/dist/esm/utils.js +0 -20
  150. package/dist/esm/utils.js.map +0 -1
  151. /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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"}
@@ -14,6 +14,11 @@ export type EntityRecord = Required<PreloadedEntityRecord>;
14
14
  export declare class EntityStore {
15
15
  private map;
16
16
  private queryClient;
17
+ /**
18
+ * Tracks pending optimistic updates by entity key.
19
+ * Each entity can only have one pending update at a time (throws if concurrent).
20
+ */
21
+ private pendingOptimisticUpdates;
17
22
  constructor(queryClient: QueryClient);
18
23
  hasEntity(key: number): boolean;
19
24
  getEntity(key: number): PreloadedEntityRecord | EntityRecord | undefined;
@@ -21,6 +26,23 @@ export declare class EntityStore {
21
26
  hydratePreloadedEntity(key: number, shape: EntityDef): EntityRecord;
22
27
  setPreloadedEntity(key: number, data: Record<string, unknown>): PreloadedEntityRecord;
23
28
  setEntity(key: number, obj: Record<string, unknown>, shape: EntityDef, entityRefs?: Set<number>): EntityRecord;
29
+ /**
30
+ * Register a pending optimistic update for an entity.
31
+ * Snapshots the current state and applies the optimistic update.
32
+ *
33
+ * @throws Error if the entity already has a pending optimistic update
34
+ */
35
+ registerOptimisticUpdate(entityKey: number, fields: Record<string, unknown>): void;
36
+ /**
37
+ * Revert the optimistic update for an entity, restoring its snapshot.
38
+ * Called when a mutation fails.
39
+ */
40
+ revertOptimisticUpdate(entityKey: number): void;
41
+ /**
42
+ * Clear the optimistic update for an entity without reverting.
43
+ * Called when a mutation succeeds (the optimistic update is now confirmed).
44
+ */
45
+ clearOptimisticUpdates(entityKey: number): void;
24
46
  private createEntityProxy;
25
47
  }
26
48
  //# sourceMappingURL=EntityMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityMap.d.ts","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,QAAQ,EAAY,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC;AAE3D,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAA2D;IACtE,OAAO,CAAC,WAAW,CAAc;gBAErB,WAAW,EAAE,WAAW;IAIpC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,YAAY,GAAG,SAAS;IAIxE,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAsBpE,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,YAAY;IAWnE,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,qBAAqB;IAgBrF,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,YAAY;IAkB9G,OAAO,CAAC,iBAAiB;CAyC1B"}
1
+ {"version":3,"file":"EntityMap.d.ts","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,QAAQ,EAAY,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA4BpD,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC;AAU3D,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAA2D;IACtE,OAAO,CAAC,WAAW,CAAc;IAEjC;;;OAGG;IACH,OAAO,CAAC,wBAAwB,CAA8C;gBAElE,WAAW,EAAE,WAAW;IAIpC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,YAAY,GAAG,SAAS;IAIxE,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAsBpE,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,YAAY;IAWnE,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,qBAAqB;IAgBrF,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,YAAY;IAsB9G;;;;;OAKG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA+BlF;;;OAGG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAsB/C;;;OAGG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/C,OAAO,CAAC,iBAAiB;CA0C1B"}
@@ -0,0 +1,43 @@
1
+ import { BaseMutationResult, MutationResult } from './types.js';
2
+ import { type QueryClient } from './QueryClient.js';
3
+ import { MutationDefinition } from './mutation.js';
4
+ /**
5
+ * MutationResult is a thin wrapper around ReactiveTask that adds:
6
+ * - Optimistic update support with rollback on failure
7
+ * - Entity parsing from responses
8
+ * - reset() functionality
9
+ */
10
+ export declare class MutationResultImpl<Request, Response> implements BaseMutationResult<Request, Response> {
11
+ def: MutationDefinition<Request, Response>;
12
+ private queryClient;
13
+ private _task;
14
+ private _pendingOptimisticKeys;
15
+ constructor(def: MutationDefinition<Request, Response>, queryClient: QueryClient);
16
+ private createTask;
17
+ get value(): Response | undefined;
18
+ get error(): unknown;
19
+ get isPending(): boolean;
20
+ get isRejected(): boolean;
21
+ get isResolved(): boolean;
22
+ get isSettled(): boolean;
23
+ get isReady(): boolean;
24
+ then<TResult1 = Response, TResult2 = never>(onfulfilled?: ((value: Response) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null | undefined): Promise<TResult1 | TResult2>;
25
+ catch<TResult = never>(onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null | undefined): Promise<Response | TResult>;
26
+ finally(onfinally?: (() => void) | null | undefined): Promise<Response>;
27
+ get [Symbol.toStringTag](): string;
28
+ run: (request: Request) => MutationResult<Request, Response>;
29
+ reset: () => void;
30
+ private applyOptimisticUpdates;
31
+ /**
32
+ * Recursively walks the data according to its shape, finding and updating all entities.
33
+ */
34
+ private findAndUpdateEntities;
35
+ private findAndUpdateEntitiesInArray;
36
+ private findAndUpdateEntitiesInObject;
37
+ private revertOptimisticUpdates;
38
+ private clearOptimisticUpdates;
39
+ private parseAndUpdateEntities;
40
+ private executeWithRetry;
41
+ private getRetryConfig;
42
+ }
43
+ //# sourceMappingURL=MutationResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutationResult.d.ts","sourceRoot":"","sources":["../../src/MutationResult.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,kBAAkB,EAIlB,cAAc,EAKf,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAOnD;;;;;GAKG;AACH,qBAAa,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAE,YAAW,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACjG,GAAG,EAAE,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC3C,OAAO,CAAC,WAAW,CAAc;IAGjC,OAAO,CAAC,KAAK,CAAoC;IAIjD,OAAO,CAAC,sBAAsB,CAA0B;gBAE5C,GAAG,EAAE,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,WAAW;IAMhF,OAAO,CAAC,UAAU;IAwBlB,IAAI,KAAK,IAAI,QAAQ,GAAG,SAAS,CAEhC;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAMD,IAAI,CAAC,QAAQ,GAAG,QAAQ,EAAE,QAAQ,GAAG,KAAK,EACxC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,EACxF,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GACtF,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAI/B,KAAK,CAAC,OAAO,GAAG,KAAK,EACnB,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GACpF,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;IAI9B,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIvE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IAMD,GAAG,YAAa,OAAO,KAAG,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAUzD;IAEF,KAAK,QAAO,IAAI,CAMd;IAMF,OAAO,CAAC,sBAAsB;IAc9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsD7B,OAAO,CAAC,4BAA4B;IAMpC,OAAO,CAAC,6BAA6B;IAwCrC,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,sBAAsB;YAkBhB,gBAAgB;IAyB9B,OAAO,CAAC,cAAc;CAyBvB"}
@@ -11,15 +11,18 @@
11
11
  * - Self-contained validator (no external dependencies except Signalium)
12
12
  */
13
13
  import { type Context } from 'signalium';
14
- import { QueryResult, EntityDef, RefetchInterval, NetworkMode, RetryConfig, TypeDef } from './types.js';
14
+ import { QueryResult, EntityDef, RefetchInterval, NetworkMode, RetryConfig, TypeDef, BaseUrlValue, QueryRequestInit, MutationResult } from './types.js';
15
15
  import { EntityRecord, EntityStore } from './EntityMap.js';
16
16
  import { NetworkManager } from './NetworkManager.js';
17
17
  import { QueryResultImpl } from './QueryResult.js';
18
+ import { MutationResultImpl } from './MutationResult.js';
19
+ import { MutationDefinition } from './mutation.js';
18
20
  import { RefetchManager } from './RefetchManager.js';
19
21
  import { MemoryEvictionManager } from './MemoryEvictionManager.js';
20
22
  import { type Signal } from 'signalium';
21
23
  export interface QueryContext {
22
- fetch: typeof fetch;
24
+ fetch: (url: string, init?: QueryRequestInit) => Promise<Response>;
25
+ baseUrl?: BaseUrlValue;
23
26
  log?: {
24
27
  error?: (message: string, error?: unknown) => void;
25
28
  warn?: (message: string, error?: unknown) => void;
@@ -29,6 +32,11 @@ export interface QueryContext {
29
32
  evictionMultiplier?: number;
30
33
  refetchMultiplier?: number;
31
34
  }
35
+ /**
36
+ * Resolves a BaseUrlValue to a string.
37
+ * Handles static strings, Signals, and functions.
38
+ */
39
+ export declare function resolveBaseUrl(baseUrl: BaseUrlValue | undefined): string | undefined;
32
40
  export interface QueryCacheOptions {
33
41
  maxCount?: number;
34
42
  gcTime?: number;
@@ -153,6 +161,7 @@ export declare class QueryClient {
153
161
  private context;
154
162
  private entityMap;
155
163
  queryInstances: Map<number, QueryResultImpl<unknown>>;
164
+ mutationInstances: Map<string, MutationResultImpl<unknown, unknown>>;
156
165
  memoryEvictionManager: MemoryEvictionManager;
157
166
  refetchManager: RefetchManager;
158
167
  networkManager: NetworkManager;
@@ -168,6 +177,26 @@ export declare class QueryClient {
168
177
  * that triggers fetches and prepopulates with cached data
169
178
  */
170
179
  getQuery<T>(queryDef: AnyQueryDefinition<any, any, any>, params: QueryParams | undefined): QueryResult<T, unknown, unknown>;
180
+ /**
181
+ * Gets or creates a MutationResult for the given mutation definition.
182
+ * Mutations are cached by their definition ID.
183
+ */
184
+ getMutation<Request, Response>(mutationDef: MutationDefinition<Request, Response>): MutationResult<Request, Response>;
185
+ /**
186
+ * Register pending optimistic updates for an entity.
187
+ * Called by MutationResult when applying optimistic updates.
188
+ */
189
+ registerOptimisticUpdate(entityKey: number, fields: Record<string, unknown>): void;
190
+ /**
191
+ * Clear pending optimistic updates for an entity without reverting.
192
+ * Called by MutationResult when mutation succeeds.
193
+ */
194
+ clearOptimisticUpdates(entityKey: number): void;
195
+ /**
196
+ * Revert pending optimistic updates for an entity, restoring its snapshot.
197
+ * Called by MutationResult when mutation fails.
198
+ */
199
+ revertOptimisticUpdate(entityKey: number): void;
171
200
  hydrateEntity(key: number, shape: EntityDef): EntityRecord;
172
201
  saveEntity(key: number, obj: Record<string, unknown>, shape: EntityDef, entityRefs?: Set<number>): EntityRecord;
173
202
  getNestedEntityRefIds(key: number, refIds: Set<number>): Set<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"QueryClient.d.ts","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryClient.d.ts","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}