fetchium 0.0.0 → 0.1.1

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 (210) hide show
  1. package/CHANGELOG.md +250 -0
  2. package/README.md +287 -0
  3. package/dist/cjs/development/QueryClient-CLi3ONNM.js +2 -0
  4. package/dist/cjs/development/QueryClient-CLi3ONNM.js.map +1 -0
  5. package/dist/cjs/development/QueryController-BQA49OYU.js +2 -0
  6. package/dist/cjs/development/QueryController-BQA49OYU.js.map +1 -0
  7. package/dist/cjs/development/index.js +2 -0
  8. package/dist/cjs/development/index.js.map +1 -0
  9. package/dist/cjs/development/mutation-CikIl_6k.js +2 -0
  10. package/dist/cjs/development/mutation-CikIl_6k.js.map +1 -0
  11. package/dist/cjs/development/package.json +3 -0
  12. package/dist/cjs/development/react/index.js +2 -0
  13. package/dist/cjs/development/react/index.js.map +1 -0
  14. package/dist/cjs/development/rest/index.js +2 -0
  15. package/dist/cjs/development/rest/index.js.map +1 -0
  16. package/dist/cjs/development/shared-Ct5zKrt4.js +2 -0
  17. package/dist/cjs/development/shared-Ct5zKrt4.js.map +1 -0
  18. package/dist/cjs/development/stores/async.js +2 -0
  19. package/dist/cjs/development/stores/async.js.map +1 -0
  20. package/dist/cjs/development/stores/sync.js +2 -0
  21. package/dist/cjs/development/stores/sync.js.map +1 -0
  22. package/dist/cjs/development/subscriptions/polling.js +2 -0
  23. package/dist/cjs/development/subscriptions/polling.js.map +1 -0
  24. package/dist/cjs/development/topic/index.js +2 -0
  25. package/dist/cjs/development/topic/index.js.map +1 -0
  26. package/dist/cjs/production/QueryClient-N0MJmuHW.js +2 -0
  27. package/dist/cjs/production/QueryClient-N0MJmuHW.js.map +1 -0
  28. package/dist/cjs/production/QueryController-BQA49OYU.js +2 -0
  29. package/dist/cjs/production/QueryController-BQA49OYU.js.map +1 -0
  30. package/dist/cjs/production/index.js +2 -0
  31. package/dist/cjs/production/index.js.map +1 -0
  32. package/dist/cjs/production/mutation-P_Yb4LI9.js +2 -0
  33. package/dist/cjs/production/mutation-P_Yb4LI9.js.map +1 -0
  34. package/dist/cjs/production/package.json +3 -0
  35. package/dist/cjs/production/react/index.js +2 -0
  36. package/dist/cjs/production/react/index.js.map +1 -0
  37. package/dist/cjs/production/rest/index.js +2 -0
  38. package/dist/cjs/production/rest/index.js.map +1 -0
  39. package/dist/cjs/production/shared-Ct5zKrt4.js +2 -0
  40. package/dist/cjs/production/shared-Ct5zKrt4.js.map +1 -0
  41. package/dist/cjs/production/stores/async.js +2 -0
  42. package/dist/cjs/production/stores/async.js.map +1 -0
  43. package/dist/cjs/production/stores/sync.js +2 -0
  44. package/dist/cjs/production/stores/sync.js.map +1 -0
  45. package/dist/cjs/production/subscriptions/polling.js +2 -0
  46. package/dist/cjs/production/subscriptions/polling.js.map +1 -0
  47. package/dist/cjs/production/topic/index.js +2 -0
  48. package/dist/cjs/production/topic/index.js.map +1 -0
  49. package/dist/esm/ConstraintMatcher.d.ts +42 -0
  50. package/dist/esm/ConstraintMatcher.d.ts.map +1 -0
  51. package/dist/esm/EntityInstance.d.ts +38 -0
  52. package/dist/esm/EntityInstance.d.ts.map +1 -0
  53. package/dist/esm/EntityStore.d.ts +14 -0
  54. package/dist/esm/EntityStore.d.ts.map +1 -0
  55. package/dist/esm/GcManager.d.ts +38 -0
  56. package/dist/esm/GcManager.d.ts.map +1 -0
  57. package/dist/esm/LiveCollection.d.ts +86 -0
  58. package/dist/esm/LiveCollection.d.ts.map +1 -0
  59. package/dist/esm/MutationResult.d.ts +22 -0
  60. package/dist/esm/MutationResult.d.ts.map +1 -0
  61. package/dist/esm/NetworkManager.d.ts +62 -0
  62. package/dist/esm/NetworkManager.d.ts.map +1 -0
  63. package/dist/esm/QueryClient.d.ts +98 -0
  64. package/dist/esm/QueryClient.d.ts.map +1 -0
  65. package/dist/esm/QueryController.d.ts +49 -0
  66. package/dist/esm/QueryController.d.ts.map +1 -0
  67. package/dist/esm/QueryResult.d.ts +67 -0
  68. package/dist/esm/QueryResult.d.ts.map +1 -0
  69. package/dist/esm/applyEntities.d.ts +12 -0
  70. package/dist/esm/applyEntities.d.ts.map +1 -0
  71. package/dist/esm/development/QueryClient-Dtde3pss.js +2572 -0
  72. package/dist/esm/development/QueryClient-Dtde3pss.js.map +1 -0
  73. package/dist/esm/development/QueryController-Ch_ncxiI.js +14 -0
  74. package/dist/esm/development/QueryController-Ch_ncxiI.js.map +1 -0
  75. package/dist/esm/development/index.js +32 -0
  76. package/dist/esm/development/index.js.map +1 -0
  77. package/dist/esm/development/mutation-UZshUQAf.js +58 -0
  78. package/dist/esm/development/mutation-UZshUQAf.js.map +1 -0
  79. package/dist/esm/development/react/index.js +40 -0
  80. package/dist/esm/development/react/index.js.map +1 -0
  81. package/dist/esm/development/rest/index.js +142 -0
  82. package/dist/esm/development/rest/index.js.map +1 -0
  83. package/dist/esm/development/shared-DcuVH8Pf.js +15 -0
  84. package/dist/esm/development/shared-DcuVH8Pf.js.map +1 -0
  85. package/dist/esm/development/stores/async.js +214 -0
  86. package/dist/esm/development/stores/async.js.map +1 -0
  87. package/dist/esm/development/stores/sync.js +149 -0
  88. package/dist/esm/development/stores/sync.js.map +1 -0
  89. package/dist/esm/development/subscriptions/polling.js +25 -0
  90. package/dist/esm/development/subscriptions/polling.js.map +1 -0
  91. package/dist/esm/development/topic/index.js +86 -0
  92. package/dist/esm/development/topic/index.js.map +1 -0
  93. package/dist/esm/errors.d.ts +4 -0
  94. package/dist/esm/errors.d.ts.map +1 -0
  95. package/dist/esm/fieldRef.d.ts +15 -0
  96. package/dist/esm/fieldRef.d.ts.map +1 -0
  97. package/dist/esm/index.d.ts +15 -0
  98. package/dist/esm/index.d.ts.map +1 -0
  99. package/dist/esm/mutation.d.ts +34 -0
  100. package/dist/esm/mutation.d.ts.map +1 -0
  101. package/dist/esm/parseEntities.d.ts +44 -0
  102. package/dist/esm/parseEntities.d.ts.map +1 -0
  103. package/dist/esm/production/QueryClient-YqnBxFy1.js +2457 -0
  104. package/dist/esm/production/QueryClient-YqnBxFy1.js.map +1 -0
  105. package/dist/esm/production/QueryController-Ch_ncxiI.js +14 -0
  106. package/dist/esm/production/QueryController-Ch_ncxiI.js.map +1 -0
  107. package/dist/esm/production/index.js +32 -0
  108. package/dist/esm/production/index.js.map +1 -0
  109. package/dist/esm/production/mutation-pgFl1uIY.js +58 -0
  110. package/dist/esm/production/mutation-pgFl1uIY.js.map +1 -0
  111. package/dist/esm/production/react/index.js +40 -0
  112. package/dist/esm/production/react/index.js.map +1 -0
  113. package/dist/esm/production/rest/index.js +142 -0
  114. package/dist/esm/production/rest/index.js.map +1 -0
  115. package/dist/esm/production/shared-DcuVH8Pf.js +15 -0
  116. package/dist/esm/production/shared-DcuVH8Pf.js.map +1 -0
  117. package/dist/esm/production/stores/async.js +214 -0
  118. package/dist/esm/production/stores/async.js.map +1 -0
  119. package/dist/esm/production/stores/sync.js +149 -0
  120. package/dist/esm/production/stores/sync.js.map +1 -0
  121. package/dist/esm/production/subscriptions/polling.js +25 -0
  122. package/dist/esm/production/subscriptions/polling.js.map +1 -0
  123. package/dist/esm/production/topic/index.js +86 -0
  124. package/dist/esm/production/topic/index.js.map +1 -0
  125. package/dist/esm/proxy.d.ts +20 -0
  126. package/dist/esm/proxy.d.ts.map +1 -0
  127. package/dist/esm/proxyId.d.ts +8 -0
  128. package/dist/esm/proxyId.d.ts.map +1 -0
  129. package/dist/esm/query-types.d.ts +60 -0
  130. package/dist/esm/query-types.d.ts.map +1 -0
  131. package/dist/esm/query.d.ts +64 -0
  132. package/dist/esm/query.d.ts.map +1 -0
  133. package/dist/esm/react/index.d.ts +2 -0
  134. package/dist/esm/react/index.d.ts.map +1 -0
  135. package/dist/esm/react/use-query.d.ts +5 -0
  136. package/dist/esm/react/use-query.d.ts.map +1 -0
  137. package/dist/esm/rest/RESTMutation.d.ts +18 -0
  138. package/dist/esm/rest/RESTMutation.d.ts.map +1 -0
  139. package/dist/esm/rest/RESTQuery.d.ts +24 -0
  140. package/dist/esm/rest/RESTQuery.d.ts.map +1 -0
  141. package/dist/esm/rest/RESTQueryController.d.ts +34 -0
  142. package/dist/esm/rest/RESTQueryController.d.ts.map +1 -0
  143. package/dist/esm/rest/index.d.ts +5 -0
  144. package/dist/esm/rest/index.d.ts.map +1 -0
  145. package/dist/esm/retry.d.ts +4 -0
  146. package/dist/esm/retry.d.ts.map +1 -0
  147. package/dist/esm/stores/async.d.ts +80 -0
  148. package/dist/esm/stores/async.d.ts.map +1 -0
  149. package/dist/esm/stores/shared.d.ts +12 -0
  150. package/dist/esm/stores/shared.d.ts.map +1 -0
  151. package/dist/esm/stores/sync.d.ts +41 -0
  152. package/dist/esm/stores/sync.d.ts.map +1 -0
  153. package/dist/esm/subscriptions/polling.d.ts +6 -0
  154. package/dist/esm/subscriptions/polling.d.ts.map +1 -0
  155. package/dist/esm/testing/MockClient.d.ts +64 -0
  156. package/dist/esm/testing/MockClient.d.ts.map +1 -0
  157. package/dist/esm/testing/auto-generate.d.ts +20 -0
  158. package/dist/esm/testing/auto-generate.d.ts.map +1 -0
  159. package/dist/esm/testing/entity-factory.d.ts +13 -0
  160. package/dist/esm/testing/entity-factory.d.ts.map +1 -0
  161. package/dist/esm/testing/index.d.ts +6 -0
  162. package/dist/esm/testing/index.d.ts.map +1 -0
  163. package/dist/esm/testing/types.d.ts +37 -0
  164. package/dist/esm/testing/types.d.ts.map +1 -0
  165. package/dist/esm/topic/TopicQuery.d.ts +10 -0
  166. package/dist/esm/topic/TopicQuery.d.ts.map +1 -0
  167. package/dist/esm/topic/TopicQueryController.d.ts +43 -0
  168. package/dist/esm/topic/TopicQueryController.d.ts.map +1 -0
  169. package/dist/esm/topic/index.d.ts +3 -0
  170. package/dist/esm/topic/index.d.ts.map +1 -0
  171. package/dist/esm/type-utils.d.ts +16 -0
  172. package/dist/esm/type-utils.d.ts.map +1 -0
  173. package/dist/esm/typeDefs.d.ts +86 -0
  174. package/dist/esm/typeDefs.d.ts.map +1 -0
  175. package/dist/esm/types.d.ts +277 -0
  176. package/dist/esm/types.d.ts.map +1 -0
  177. package/dist/esm/utils.d.ts +38 -0
  178. package/dist/esm/utils.d.ts.map +1 -0
  179. package/index.d.ts +1 -0
  180. package/package.json +181 -5
  181. package/plugin/.claude-plugin/plugin.json +10 -0
  182. package/plugin/agents/fetchium.md +168 -0
  183. package/plugin/docs/api/fetchium-react.md +135 -0
  184. package/plugin/docs/api/fetchium.md +674 -0
  185. package/plugin/docs/api/stores-async.md +219 -0
  186. package/plugin/docs/api/stores-sync.md +133 -0
  187. package/plugin/docs/core/entities.md +351 -0
  188. package/plugin/docs/core/queries.md +600 -0
  189. package/plugin/docs/core/streaming.md +550 -0
  190. package/plugin/docs/core/types.md +374 -0
  191. package/plugin/docs/data/caching.md +298 -0
  192. package/plugin/docs/data/live-data.md +435 -0
  193. package/plugin/docs/data/mutations.md +465 -0
  194. package/plugin/docs/guides/auth.md +318 -0
  195. package/plugin/docs/guides/error-handling.md +351 -0
  196. package/plugin/docs/guides/offline.md +270 -0
  197. package/plugin/docs/guides/testing.md +301 -0
  198. package/plugin/docs/quickstart.md +170 -0
  199. package/plugin/docs/reference/pagination.md +519 -0
  200. package/plugin/docs/reference/rest-queries.md +107 -0
  201. package/plugin/docs/reference/why-signalium.md +364 -0
  202. package/plugin/docs/setup/project-setup.md +319 -0
  203. package/plugin/install.mjs +88 -0
  204. package/plugin/skills/design/SKILL.md +140 -0
  205. package/plugin/skills/teach/SKILL.md +105 -0
  206. package/stores/async.d.ts +1 -0
  207. package/stores/async.js +15 -0
  208. package/stores/sync.d.ts +1 -0
  209. package/stores/sync.js +15 -0
  210. package/index.js +0 -1
@@ -0,0 +1,62 @@
1
+ /**
2
+ * NetworkManager - Tracks network connectivity status
3
+ *
4
+ * Features:
5
+ * - Signal-based reactivity for online/offline status
6
+ * - Automatic detection using navigator.onLine and events
7
+ * - Manual override capability for testing and custom scenarios
8
+ * - Platform-agnostic (works in browser and React Native)
9
+ */
10
+ import { Signal, Context } from 'signalium';
11
+ export declare class NetworkManager {
12
+ private onlineSignal;
13
+ private manualOverride;
14
+ private eventListenersAttached;
15
+ constructor(initialStatus?: boolean);
16
+ /**
17
+ * Returns true if the network is currently online
18
+ */
19
+ get isOnline(): boolean;
20
+ /**
21
+ * Manually set the network status (useful for testing)
22
+ */
23
+ setNetworkStatus(online: boolean): void;
24
+ /**
25
+ * Clear manual override and return to automatic detection
26
+ */
27
+ clearManualOverride(): void;
28
+ /**
29
+ * Get the reactive signal for online status
30
+ * This allows reactive functions to depend on network status
31
+ */
32
+ getOnlineSignal(): Signal<boolean>;
33
+ /**
34
+ * Detect current online status from the environment
35
+ */
36
+ private detectOnlineStatus;
37
+ /**
38
+ * Check if we can attach event listeners (browser or React Native)
39
+ */
40
+ private canAttachListeners;
41
+ /**
42
+ * Remove event listeners and clean up resources.
43
+ */
44
+ destroy(): void;
45
+ private handleOnline;
46
+ private handleOffline;
47
+ /**
48
+ * Attach event listeners for online/offline events
49
+ */
50
+ private attachEventListeners;
51
+ }
52
+ export declare class NoOpNetworkManager {
53
+ private static readonly onlineSignal;
54
+ get isOnline(): boolean;
55
+ setNetworkStatus(_online: boolean): void;
56
+ clearManualOverride(): void;
57
+ getOnlineSignal(): Signal<boolean>;
58
+ destroy(): void;
59
+ }
60
+ export declare const defaultNetworkManager: NetworkManager;
61
+ export declare const NetworkManagerContext: Context<NetworkManager>;
62
+ //# sourceMappingURL=NetworkManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkManager.d.ts","sourceRoot":"","sources":["../../src/NetworkManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAU,MAAM,EAAW,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7D,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,sBAAsB,CAAS;gBAE3B,aAAa,CAAC,EAAE,OAAO;IAWnC;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,CAOtB;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAKvC;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAK3B;;;OAGG;IACH,eAAe,IAAI,MAAM,CAAC,OAAO,CAAC;IAIlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,aAAa,CAAuC;IAE5D;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAsB7B;AAGD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAiC;IAErE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIxC,mBAAmB,IAAI,IAAI;IAI3B,eAAe,IAAI,MAAM,CAAC,OAAO,CAAC;IAIlC,OAAO,IAAI,IAAI;CAGhB;AAGD,eAAO,MAAM,qBAAqB,gBAAuB,CAAC;AAG1D,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,cAAc,CAAkD,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { ReactiveTask, type Context } from 'signalium';
2
+ import { EntityDef, MutationEvent, QueryPromise, InternalTypeDef, InvalidateTarget } from './types.js';
3
+ import { EntityStore } from './EntityStore.js';
4
+ import { EntityInstance } from './EntityInstance.js';
5
+ import { NetworkManager } from './NetworkManager.js';
6
+ import { QueryInstance } from './QueryResult.js';
7
+ import { MutationResultImpl } from './MutationResult.js';
8
+ import { MutationDefinition } from './mutation.js';
9
+ import { GcManager, NoOpGcManager } from './GcManager.js';
10
+ import { Query, QueryDefinition } from './query.js';
11
+ import { type ParseResult } from './parseEntities.js';
12
+ import { type ApplyResult } from './applyEntities.js';
13
+ import { ValidatorDef } from './typeDefs.js';
14
+ import { ConstraintMatcher } from './ConstraintMatcher.js';
15
+ import { LiveCollectionBinding } from './LiveCollection.js';
16
+ import { QueryController } from './QueryController.js';
17
+ import { type QueryContext, type QueryStore, type QueryParams, type PreloadedEntityMap } from './query-types.js';
18
+ export interface QueryClientConfig {
19
+ store?: QueryStore;
20
+ controllers?: QueryController[];
21
+ networkManager?: NetworkManager;
22
+ gcManager?: GcManager | NoOpGcManager;
23
+ log?: {
24
+ error?: (message: string, error?: unknown) => void;
25
+ warn?: (message: string, error?: unknown) => void;
26
+ info?: (message: string) => void;
27
+ debug?: (message: string) => void;
28
+ };
29
+ evictionMultiplier?: number;
30
+ }
31
+ export { type QueryContext, type QueryCacheOptions, type QueryConfigOptions, type FetchNextConfig, type QueryParams, type QueryStore, type CachedQuery, type PreloadedEntityMap, type MaybePromise, resolveBaseUrl, extractParamsForKey, queryKeyFor, } from './query-types.js';
32
+ export declare class QueryClient {
33
+ entityMap: EntityStore;
34
+ queryInstances: Map<number, QueryInstance<any>>;
35
+ mutationInstances: Map<string, MutationResultImpl<unknown, unknown>>;
36
+ gcManager: GcManager | NoOpGcManager;
37
+ networkManager: NetworkManager;
38
+ isServer: boolean;
39
+ store: QueryStore;
40
+ currentParseId: number;
41
+ private context;
42
+ private typenameRegistry;
43
+ private constraintRegistry;
44
+ private mergedDefCache;
45
+ private controllers;
46
+ private networkUnsubscribe;
47
+ constructor(config?: QueryClientConfig);
48
+ /**
49
+ * Returns the registered controller instance for the given controller class.
50
+ * Throws if no controller of that class has been registered.
51
+ */
52
+ getController(controllerClass: typeof QueryController): QueryController;
53
+ getContext(): QueryContext;
54
+ private registerEntityDef;
55
+ getEntityDefsForTypename(typename: string): ValidatorDef<any>[] | undefined;
56
+ getMergedDef(typename: string): ValidatorDef<any> | undefined;
57
+ saveQueryData(queryDef: QueryDefinition<QueryParams | undefined, unknown, unknown>, queryKey: number, data: unknown, updatedAt: number, entityRefs?: Map<EntityInstance, number>): void;
58
+ activateQuery(queryInstance: QueryInstance<any>): void;
59
+ loadCachedQuery(queryDef: QueryDefinition<QueryParams | undefined, unknown, unknown>, queryKey: number): import("./query-types.js").MaybePromise<import("./query-types.js").CachedQuery | undefined>;
60
+ /**
61
+ * Loads a query from the document store and returns a QueryResult
62
+ * that triggers fetches and prepopulates with cached data
63
+ */
64
+ getQuery<T extends Query>(queryDef: QueryDefinition<any, any, any>, params: QueryParams | undefined): QueryPromise<T>;
65
+ /**
66
+ * Gets or creates a MutationResult for the given mutation definition.
67
+ * Mutations are cached by their definition ID.
68
+ */
69
+ getMutation<Request, Response>(mutationDef: MutationDefinition<Request, Response>): ReactiveTask<Response, [Request]>;
70
+ /**
71
+ * Parse data: validates, formats, produces parsed entity data objects.
72
+ * Does NOT touch the entity store. Call applyRefs() after to commit entities.
73
+ */
74
+ parseData(obj: unknown, shape: InternalTypeDef, preloadedEntities?: PreloadedEntityMap): ParseResult;
75
+ /**
76
+ * Apply entities from parseData() via a single depth-first walk: creates/
77
+ * updates EntityInstances, replaces parsed data with proxies, counts child
78
+ * refs. Returns the reified data and root-level entity refs.
79
+ */
80
+ applyRefs(parseResult: ParseResult, persist?: boolean, appendMode?: boolean): ApplyResult;
81
+ /**
82
+ * Parse and apply data as a root entity. For non-entity results, injects
83
+ * QUERY_ID onto the payload. Returns the root EntityInstance (created or
84
+ * found in the store by the standard entity pipeline).
85
+ */
86
+ parseAndApplyRootEntity(obj: unknown, queryId: number, rootEntityShape: ValidatorDef<any>, persist: boolean, appendMode?: boolean, preloadedEntities?: PreloadedEntityMap): EntityInstance;
87
+ prepareEntity(key: number, obj: Record<string, unknown>, shape: EntityDef): EntityInstance;
88
+ applyMutationEvent(event: MutationEvent): void;
89
+ invalidateQueries(targets: ReadonlyArray<InvalidateTarget>): void;
90
+ private handleEviction;
91
+ getOrCreateMatcher(typename: string): ConstraintMatcher;
92
+ registerLiveCollection(binding: LiveCollectionBinding): void;
93
+ unregisterLiveCollection(binding: LiveCollectionBinding): void;
94
+ private routeEvent;
95
+ destroy(): void;
96
+ }
97
+ export declare const QueryClientContext: Context<QueryClient | undefined>;
98
+ //# sourceMappingURL=QueryClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryClient.d.ts","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { type QueryContext } from './query-types.js';
2
+ import type { Query } from './query.js';
3
+ import type { Mutation } from './mutation.js';
4
+ export interface IQueryClientForController {
5
+ getContext(): QueryContext;
6
+ applyMutationEvent(event: import('./types.js').MutationEvent): void;
7
+ }
8
+ export declare abstract class QueryController {
9
+ protected queryClient: IQueryClientForController | undefined;
10
+ /**
11
+ * Called once by QueryClient when this controller is registered.
12
+ * Subclasses can override to do setup (e.g. open a WebSocket connection).
13
+ */
14
+ register(queryClient: IQueryClientForController): void;
15
+ /**
16
+ * Called when the network comes online or goes offline.
17
+ * Subclasses can override to reconnect persistent connections (e.g. WebSocket).
18
+ */
19
+ onNetworkStatusChange?(isOnline: boolean): void;
20
+ /**
21
+ * Called when the QueryClient is destroyed.
22
+ * Subclasses can override to clean up connections or timers.
23
+ */
24
+ destroy?(): void;
25
+ /**
26
+ * Send the query and return the raw response data.
27
+ * @param ctx The query execution context (a reified Query instance with params applied).
28
+ * @param signal AbortSignal to cancel the in-flight request.
29
+ */
30
+ abstract send(ctx: Query, signal: AbortSignal): Promise<unknown>;
31
+ /**
32
+ * Fetch the next page of results. Only implement if the controller supports pagination.
33
+ * @param ctx The query execution context. `ctx.resultData` contains the current page's data.
34
+ * @param signal AbortSignal to cancel the in-flight request.
35
+ */
36
+ sendNext?(ctx: Query, signal: AbortSignal): Promise<unknown>;
37
+ /**
38
+ * Return true if more pages are available for the current result.
39
+ * Called reactively — do not perform async work here.
40
+ */
41
+ hasNext?(ctx: Query): boolean;
42
+ /**
43
+ * Send a mutation and return the raw response data.
44
+ * @param ctx The mutation execution context (a reified Mutation instance with params applied).
45
+ * @param signal AbortSignal to cancel the in-flight request.
46
+ */
47
+ sendMutation?(ctx: Mutation, signal: AbortSignal): Promise<unknown>;
48
+ }
49
+ //# sourceMappingURL=QueryController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryController.d.ts","sourceRoot":"","sources":["../../src/QueryController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAO9C,MAAM,WAAW,yBAAyB;IACxC,UAAU,IAAI,YAAY,CAAC;IAC3B,kBAAkB,CAAC,KAAK,EAAE,OAAO,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;CACrE;AAMD,8BAAsB,eAAe;IACnC,SAAS,CAAC,WAAW,EAAE,yBAAyB,GAAG,SAAS,CAAC;IAE7D;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,yBAAyB,GAAG,IAAI;IAItD;;;OAGG;IACH,qBAAqB,CAAC,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAE/C;;;OAGG;IACH,OAAO,CAAC,IAAI,IAAI;IAEhB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhE;;;;OAIG;IACH,QAAQ,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAE5D;;;OAGG;IACH,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO;IAE7B;;;;OAIG;IACH,YAAY,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;CACpE"}
@@ -0,0 +1,67 @@
1
+ import { DiscriminatedReactivePromise } from 'signalium';
2
+ import { type QueryResult } from './types.js';
3
+ import { type QueryClient, type QueryParams, type QueryConfigOptions } from './QueryClient.js';
4
+ import { Query, QueryDefinition, type ResolvedRetryConfig } from './query.js';
5
+ import { EntityInstance } from './EntityInstance.js';
6
+ /**
7
+ * Thin fetch/relay orchestrator. Data management (proxy, notifier, child refs,
8
+ * live data) is fully delegated to a root EntityInstance.
9
+ */
10
+ export declare class QueryInstance<T extends Query> {
11
+ def: QueryDefinition<any, any, any>;
12
+ queryKey: number;
13
+ storageKey: number;
14
+ /** The public-facing ReactivePromise returned to consumers. */
15
+ readonly relay: DiscriminatedReactivePromise<QueryResult<T>>;
16
+ private queryClient;
17
+ private initialized;
18
+ private updatedAt;
19
+ private params;
20
+ private unsubscribe?;
21
+ private _relayState;
22
+ private wasPaused;
23
+ private currentParams;
24
+ private debounceTimer;
25
+ /** Resolved per-instance options (depend on actual params). */
26
+ config: QueryConfigOptions | undefined;
27
+ retryConfig: ResolvedRetryConfig;
28
+ /** Controller for aborting in-flight fetches and retry waits. */
29
+ private _abortController;
30
+ /** Cached execution context, recreated only when storageKey (params) changes. */
31
+ private _executionCtx;
32
+ private _executionCtxKey;
33
+ /** Root entity that holds parsed data, proxy, child refs, and bindings.
34
+ * For entity results, this is undefined until the first apply discovers it. */
35
+ rootEntity: EntityInstance | undefined;
36
+ /** Extra methods (__refetch, __fetchNext) attached to the root entity proxy. */
37
+ private _extraMethods;
38
+ /** Query id injected as QUERY_ID on non-entity payloads. */
39
+ private _queryId;
40
+ get key(): number;
41
+ private get relayState();
42
+ constructor(def: QueryDefinition<any, any, any>, queryClient: QueryClient, queryKey: number, params: QueryParams | undefined);
43
+ /** Apply raw data (fresh or cached) to the root entity and return the proxy. */
44
+ private applyData;
45
+ /** Save query metadata (the __entityRef pointer, updatedAt, ref set). */
46
+ private saveQueryMetadata;
47
+ private initialize;
48
+ private setupSubscription;
49
+ private getOrCreateExecutionContext;
50
+ private resolveAndApplyOptions;
51
+ private runQuery;
52
+ private runQueryImmediately;
53
+ private runDebounced;
54
+ refetch: () => DiscriminatedReactivePromise<QueryResult<T>>;
55
+ markStale(): void;
56
+ get resolvedParams(): QueryParams | undefined;
57
+ /** In-flight fetchNext promise for deduplication. */
58
+ private _fetchNextPromise;
59
+ /** Controller for aborting in-flight fetchNext requests. */
60
+ private _fetchNextAbort;
61
+ fetchNext: () => Promise<QueryResult<T>>;
62
+ private get hasNext();
63
+ private runFetchNext;
64
+ private get isStale();
65
+ private get isPaused();
66
+ }
67
+ //# sourceMappingURL=QueryResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryResult.d.ts","sourceRoot":"","sources":["../../src/QueryResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,4BAA4B,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAAe,KAAK,WAAW,EAAkB,MAAM,YAAY,CAAC;AAC3E,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EAIxB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAsB,MAAM,YAAY,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD;;;GAGG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,KAAK;IACxC,GAAG,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAM;IAExB,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7D,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,MAAM,CAAsC;IAEpD,OAAO,CAAC,WAAW,CAAC,CAAyB;IAE7C,OAAO,CAAC,WAAW,CAAqD;IACxE,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,aAAa,CAAwD;IAE7E,+DAA+D;IAC/D,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAa;IACnD,WAAW,EAAE,mBAAmB,CAAiC;IAEjE,iEAAiE;IACjE,OAAO,CAAC,gBAAgB,CAA0C;IAElE,iFAAiF;IACjF,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,gBAAgB,CAAc;IAEtC;oFACgF;IAChF,UAAU,EAAE,cAAc,GAAG,SAAS,CAAC;IAEvC,gFAAgF;IAChF,OAAO,CAAC,aAAa,CAAuD;IAE5E,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAa;IAE7B,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,OAAO,KAAK,UAAU,GAKrB;gBAGC,GAAG,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACnC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,GAAG,SAAS;IA2FjC,gFAAgF;IAChF,OAAO,CAAC,SAAS;IA4BjB,yEAAyE;IACzE,OAAO,CAAC,iBAAiB;YAaX,UAAU;IAuCxB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,2BAA2B;IAgBnC,OAAO,CAAC,sBAAsB;YAMhB,QAAQ;IA8BtB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,YAAY;IAiBpB,OAAO,QAAO,4BAA4B,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAIxD;IAEF,SAAS,IAAI,IAAI;IAIjB,IAAI,cAAc,IAAI,WAAW,GAAG,SAAS,CAE5C;IAED,qDAAqD;IACrD,OAAO,CAAC,iBAAiB,CAAkD;IAE3E,4DAA4D;IAC5D,OAAO,CAAC,eAAe,CAA0C;IAEjE,SAAS,QAAO,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CA4BrC;IAEF,OAAO,KAAK,OAAO,GAMlB;YAEa,YAAY;IA2B1B,OAAO,KAAK,OAAO,GAOlB;IAED,OAAO,KAAK,QAAQ,GAiBnB;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { EntityInstance } from './EntityInstance.js';
2
+ import type { ParseContext } from './parseEntities.js';
3
+ export interface ApplyResult {
4
+ data: unknown;
5
+ entityRefs: Map<EntityInstance, number>;
6
+ }
7
+ /**
8
+ * Single depth-first walk from the root that applies entities to the store,
9
+ * replaces parsed data objects with entity proxies, and counts child refs.
10
+ */
11
+ export declare function applyEntityRefs(ctx: ParseContext, rootData: unknown, persist: boolean, appendMode?: boolean): ApplyResult;
12
+ //# sourceMappingURL=applyEntities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyEntities.d.ts","sourceRoot":"","sources":["../../src/applyEntities.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,oBAAoB,CAAC;AAYrE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,EAChB,UAAU,GAAE,OAAe,GAC1B,WAAW,CASb"}