@ic-reactor/react 3.13.0 → 4.0.0-beta.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 (174) hide show
  1. package/README.md +234 -787
  2. package/dist/index.d.ts +259 -16
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +470 -23
  5. package/dist/index.js.map +1 -1
  6. package/llms.txt +80 -278
  7. package/package.json +11 -39
  8. package/src/index.tsx +611 -0
  9. package/dist/auth/auth-client-compat.d.ts +0 -122
  10. package/dist/auth/auth-client-compat.d.ts.map +0 -1
  11. package/dist/auth/auth-client-compat.js +0 -162
  12. package/dist/auth/auth-client-compat.js.map +0 -1
  13. package/dist/auth/authentication-manager.d.ts +0 -405
  14. package/dist/auth/authentication-manager.d.ts.map +0 -1
  15. package/dist/auth/authentication-manager.js +0 -1537
  16. package/dist/auth/authentication-manager.js.map +0 -1
  17. package/dist/auth/constants.d.ts +0 -24
  18. package/dist/auth/constants.d.ts.map +0 -1
  19. package/dist/auth/constants.js +0 -24
  20. package/dist/auth/constants.js.map +0 -1
  21. package/dist/auth/createIdentityAttributeHooks.d.ts +0 -14
  22. package/dist/auth/createIdentityAttributeHooks.d.ts.map +0 -1
  23. package/dist/auth/createIdentityAttributeHooks.js +0 -122
  24. package/dist/auth/createIdentityAttributeHooks.js.map +0 -1
  25. package/dist/auth/identity-attributes-manager.d.ts +0 -27
  26. package/dist/auth/identity-attributes-manager.d.ts.map +0 -1
  27. package/dist/auth/identity-attributes-manager.js +0 -191
  28. package/dist/auth/identity-attributes-manager.js.map +0 -1
  29. package/dist/auth/identity-attributes.d.ts +0 -19
  30. package/dist/auth/identity-attributes.d.ts.map +0 -1
  31. package/dist/auth/identity-attributes.js +0 -227
  32. package/dist/auth/identity-attributes.js.map +0 -1
  33. package/dist/auth/index.d.ts +0 -8
  34. package/dist/auth/index.d.ts.map +0 -1
  35. package/dist/auth/index.js +0 -8
  36. package/dist/auth/index.js.map +0 -1
  37. package/dist/auth/local-ii-probe.d.ts +0 -57
  38. package/dist/auth/local-ii-probe.d.ts.map +0 -1
  39. package/dist/auth/local-ii-probe.js +0 -121
  40. package/dist/auth/local-ii-probe.js.map +0 -1
  41. package/dist/auth/types.d.ts +0 -222
  42. package/dist/auth/types.d.ts.map +0 -1
  43. package/dist/auth/types.js +0 -2
  44. package/dist/auth/types.js.map +0 -1
  45. package/dist/createActorHooks.d.ts +0 -41
  46. package/dist/createActorHooks.d.ts.map +0 -1
  47. package/dist/createActorHooks.js +0 -17
  48. package/dist/createActorHooks.js.map +0 -1
  49. package/dist/createInfiniteQuery.d.ts +0 -185
  50. package/dist/createInfiniteQuery.d.ts.map +0 -1
  51. package/dist/createInfiniteQuery.js +0 -198
  52. package/dist/createInfiniteQuery.js.map +0 -1
  53. package/dist/createMutation.d.ts +0 -33
  54. package/dist/createMutation.d.ts.map +0 -1
  55. package/dist/createMutation.js +0 -199
  56. package/dist/createMutation.js.map +0 -1
  57. package/dist/createQuery.d.ts +0 -63
  58. package/dist/createQuery.d.ts.map +0 -1
  59. package/dist/createQuery.js +0 -204
  60. package/dist/createQuery.js.map +0 -1
  61. package/dist/createReactorProvider.d.ts +0 -158
  62. package/dist/createReactorProvider.d.ts.map +0 -1
  63. package/dist/createReactorProvider.js +0 -256
  64. package/dist/createReactorProvider.js.map +0 -1
  65. package/dist/createSuspenseInfiniteQuery.d.ts +0 -154
  66. package/dist/createSuspenseInfiniteQuery.d.ts.map +0 -1
  67. package/dist/createSuspenseInfiniteQuery.js +0 -209
  68. package/dist/createSuspenseInfiniteQuery.js.map +0 -1
  69. package/dist/createSuspenseQuery.d.ts +0 -46
  70. package/dist/createSuspenseQuery.d.ts.map +0 -1
  71. package/dist/createSuspenseQuery.js +0 -158
  72. package/dist/createSuspenseQuery.js.map +0 -1
  73. package/dist/defineDisplayReactor.d.ts +0 -43
  74. package/dist/defineDisplayReactor.d.ts.map +0 -1
  75. package/dist/defineDisplayReactor.js +0 -42
  76. package/dist/defineDisplayReactor.js.map +0 -1
  77. package/dist/defineReactor.d.ts +0 -99
  78. package/dist/defineReactor.d.ts.map +0 -1
  79. package/dist/defineReactor.js +0 -15
  80. package/dist/defineReactor.js.map +0 -1
  81. package/dist/defineReactorShared.d.ts +0 -84
  82. package/dist/defineReactorShared.d.ts.map +0 -1
  83. package/dist/defineReactorShared.js +0 -139
  84. package/dist/defineReactorShared.js.map +0 -1
  85. package/dist/hooks/createAuthHooks.d.ts +0 -50
  86. package/dist/hooks/createAuthHooks.d.ts.map +0 -1
  87. package/dist/hooks/createAuthHooks.js +0 -291
  88. package/dist/hooks/createAuthHooks.js.map +0 -1
  89. package/dist/hooks/index.d.ts +0 -21
  90. package/dist/hooks/index.d.ts.map +0 -1
  91. package/dist/hooks/index.js +0 -24
  92. package/dist/hooks/index.js.map +0 -1
  93. package/dist/hooks/useActorInfiniteQuery.d.ts +0 -67
  94. package/dist/hooks/useActorInfiniteQuery.d.ts.map +0 -1
  95. package/dist/hooks/useActorInfiniteQuery.js +0 -89
  96. package/dist/hooks/useActorInfiniteQuery.js.map +0 -1
  97. package/dist/hooks/useActorMethod.d.ts +0 -148
  98. package/dist/hooks/useActorMethod.d.ts.map +0 -1
  99. package/dist/hooks/useActorMethod.js +0 -394
  100. package/dist/hooks/useActorMethod.js.map +0 -1
  101. package/dist/hooks/useActorMutation.d.ts +0 -51
  102. package/dist/hooks/useActorMutation.d.ts.map +0 -1
  103. package/dist/hooks/useActorMutation.js +0 -70
  104. package/dist/hooks/useActorMutation.js.map +0 -1
  105. package/dist/hooks/useActorQuery.d.ts +0 -45
  106. package/dist/hooks/useActorQuery.d.ts.map +0 -1
  107. package/dist/hooks/useActorQuery.js +0 -67
  108. package/dist/hooks/useActorQuery.js.map +0 -1
  109. package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts +0 -51
  110. package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts.map +0 -1
  111. package/dist/hooks/useActorSuspenseInfiniteQuery.js +0 -76
  112. package/dist/hooks/useActorSuspenseInfiniteQuery.js.map +0 -1
  113. package/dist/hooks/useActorSuspenseQuery.d.ts +0 -32
  114. package/dist/hooks/useActorSuspenseQuery.d.ts.map +0 -1
  115. package/dist/hooks/useActorSuspenseQuery.js +0 -58
  116. package/dist/hooks/useActorSuspenseQuery.js.map +0 -1
  117. package/dist/ownedAuthentication.d.ts +0 -52
  118. package/dist/ownedAuthentication.d.ts.map +0 -1
  119. package/dist/ownedAuthentication.js +0 -49
  120. package/dist/ownedAuthentication.js.map +0 -1
  121. package/dist/server.d.ts +0 -21
  122. package/dist/server.d.ts.map +0 -1
  123. package/dist/server.js +0 -23
  124. package/dist/server.js.map +0 -1
  125. package/dist/testing.d.ts +0 -19
  126. package/dist/testing.d.ts.map +0 -1
  127. package/dist/testing.js +0 -19
  128. package/dist/testing.js.map +0 -1
  129. package/dist/types.d.ts +0 -671
  130. package/dist/types.d.ts.map +0 -1
  131. package/dist/types.js +0 -5
  132. package/dist/types.js.map +0 -1
  133. package/dist/utils.d.ts +0 -207
  134. package/dist/utils.d.ts.map +0 -1
  135. package/dist/utils.js +0 -405
  136. package/dist/utils.js.map +0 -1
  137. package/dist/validation.d.ts +0 -136
  138. package/dist/validation.d.ts.map +0 -1
  139. package/dist/validation.js +0 -144
  140. package/dist/validation.js.map +0 -1
  141. package/src/auth/auth-client-compat.ts +0 -273
  142. package/src/auth/authentication-manager.ts +0 -1682
  143. package/src/auth/constants.ts +0 -32
  144. package/src/auth/createIdentityAttributeHooks.ts +0 -169
  145. package/src/auth/identity-attributes-manager.ts +0 -226
  146. package/src/auth/identity-attributes.ts +0 -345
  147. package/src/auth/index.ts +0 -7
  148. package/src/auth/local-ii-probe.ts +0 -173
  149. package/src/auth/types.ts +0 -243
  150. package/src/createActorHooks.ts +0 -208
  151. package/src/createInfiniteQuery.ts +0 -670
  152. package/src/createMutation.ts +0 -324
  153. package/src/createQuery.ts +0 -369
  154. package/src/createReactorProvider.ts +0 -365
  155. package/src/createSuspenseInfiniteQuery.ts +0 -651
  156. package/src/createSuspenseQuery.ts +0 -304
  157. package/src/defineDisplayReactor.ts +0 -62
  158. package/src/defineReactor.ts +0 -142
  159. package/src/defineReactorShared.ts +0 -268
  160. package/src/hooks/createAuthHooks.ts +0 -371
  161. package/src/hooks/index.ts +0 -103
  162. package/src/hooks/useActorInfiniteQuery.ts +0 -278
  163. package/src/hooks/useActorMethod.ts +0 -710
  164. package/src/hooks/useActorMutation.ts +0 -205
  165. package/src/hooks/useActorQuery.ts +0 -157
  166. package/src/hooks/useActorSuspenseInfiniteQuery.ts +0 -248
  167. package/src/hooks/useActorSuspenseQuery.ts +0 -147
  168. package/src/index.ts +0 -31
  169. package/src/ownedAuthentication.ts +0 -81
  170. package/src/server.ts +0 -23
  171. package/src/testing.ts +0 -18
  172. package/src/types.ts +0 -948
  173. package/src/utils.ts +0 -505
  174. package/src/validation.ts +0 -226
@@ -1,154 +0,0 @@
1
- /**
2
- * Suspense Infinite Query Factory - Generic wrapper for React Query suspense-based paginated canister data
3
- *
4
- * Creates unified fetch/hook/invalidate functions for any paginated canister method.
5
- * Works with any Reactor instance.
6
- *
7
- * Uses `useSuspenseInfiniteQuery` which:
8
- * - Requires wrapping in <Suspense> boundary
9
- * - Data is always defined (no undefined checks)
10
- * - Does NOT support `enabled` or `placeholderData` options
11
- *
12
- * @example
13
- * const postsQuery = createSuspenseInfiniteQuery(reactor, {
14
- * functionName: "get_posts",
15
- * initialPageParam: 0,
16
- * getArgs: (cursor) => [{ cursor, limit: 10 }] as const,
17
- * getNextPageParam: (lastPage) => lastPage.nextCursor,
18
- * })
19
- *
20
- * // In component (wrap in Suspense)
21
- * const { data, fetchNextPage, hasNextPage } = postsQuery.useSuspenseInfiniteQuery()
22
- *
23
- * // Flatten all pages
24
- * const allPosts = data.pages.flatMap(page => page.posts)
25
- */
26
- import type { Reactor, FunctionName, ReactorArgs, BaseActor, TransformKey, ReactorReturnOk, ReactorQueryData, ReactorReturnErr } from "@ic-reactor/core";
27
- import { QueryKey, InfiniteData, UseSuspenseInfiniteQueryResult, UseSuspenseInfiniteQueryOptions, InfiniteQueryObserverOptions } from "@tanstack/react-query";
28
- import { CallConfig } from "@icp-sdk/core/agent";
29
- import type { NoInfer, QueryCacheControls, QueryFactoryMethods } from "./types.js";
30
- type SuspenseInfiniteFactoryCallOptions = {
31
- queryKey?: QueryKey;
32
- };
33
- type SuspenseInfiniteQueryFactoryFn<Service, Method extends FunctionName<Service>, Transform extends TransformKey, TPageParam, Selected> = QueryFactoryMethods & {
34
- (getArgs: (pageParam: TPageParam) => ReactorArgs<Service, Method, Transform>): SuspenseInfiniteQueryResult<SuspenseInfiniteQueryPageData<Service, Method, Transform>, TPageParam, Selected, SuspenseInfiniteQueryError<Service, Method, Transform>>;
35
- (getArgs: (pageParam: TPageParam) => ReactorArgs<Service, Method, Transform>, options?: SuspenseInfiniteFactoryCallOptions): SuspenseInfiniteQueryResult<SuspenseInfiniteQueryPageData<Service, Method, Transform>, TPageParam, Selected, SuspenseInfiniteQueryError<Service, Method, Transform>>;
36
- };
37
- /** The raw page data type returned by the query function */
38
- export type SuspenseInfiniteQueryPageData<Service = BaseActor, Method extends FunctionName<Service> = FunctionName<Service>, Transform extends TransformKey = "candid"> = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>;
39
- /** The error type for infinite queries */
40
- export type SuspenseInfiniteQueryError<Service = BaseActor, Method extends FunctionName<Service> = FunctionName<Service>, Transform extends TransformKey = "candid"> = ReactorReturnErr<Service, Method, Transform>;
41
- /**
42
- * Configuration for createSuspenseInfiniteQuery.
43
- * Extends InfiniteQueryObserverOptions to accept all React Query options at the create level.
44
- *
45
- * @template Service - The actor interface type
46
- * @template Method - The method name on the actor
47
- * @template Transform - The transformation key (identity, display, etc.)
48
- * @template TPageParam - The type of the page parameter
49
- * @template Selected - The type returned after select transformation
50
- */
51
- export interface SuspenseInfiniteQueryConfig<Service = BaseActor, Method extends FunctionName<Service> = FunctionName<Service>, Transform extends TransformKey = "candid", TPageParam = unknown, Selected = InfiniteData<SuspenseInfiniteQueryPageData<Service, Method, Transform>, TPageParam>> extends Omit<InfiniteQueryObserverOptions<SuspenseInfiniteQueryPageData<Service, Method, Transform>, SuspenseInfiniteQueryError<Service, Method, Transform>, Selected, QueryKey, TPageParam>, "queryKey" | "queryFn"> {
52
- /** The method to call on the canister */
53
- functionName: Method;
54
- /** Call configuration for the actor method */
55
- callConfig?: CallConfig;
56
- /** Custom query key (optional, auto-generated if not provided) */
57
- queryKey?: QueryKey;
58
- /** Function to get args from page parameter */
59
- getArgs: (pageParam: TPageParam) => ReactorArgs<Service, Method, Transform>;
60
- /**
61
- * Narrows what the cache key derives from the call arguments.
62
- *
63
- * By default the key is scoped by `getArgs(initialPageParam)`, so two
64
- * infinite queries on the same method with different arguments stay in
65
- * separate cache entries. Supply this when those args embed the cursor and
66
- * only part of them identifies the query.
67
- */
68
- getKeyArgs?: (args: ReactorArgs<Service, Method, Transform>) => unknown;
69
- }
70
- /**
71
- * Configuration for createSuspenseInfiniteQueryFactory (without getArgs; provided at call time).
72
- */
73
- export type SuspenseInfiniteQueryFactoryConfig<Service = BaseActor, Method extends FunctionName<Service> = FunctionName<Service>, Transform extends TransformKey = "candid", TPageParam = unknown, Selected = InfiniteData<SuspenseInfiniteQueryPageData<Service, Method, Transform>, TPageParam>> = Omit<SuspenseInfiniteQueryConfig<Service, Method, Transform, TPageParam, Selected>, "getArgs">;
74
- /**
75
- * useSuspenseInfiniteQuery hook with chained select support.
76
- */
77
- export interface UseSuspenseInfiniteQueryWithSelect<TPageData, TPageParam, Selected = InfiniteData<TPageData, TPageParam>, TError = Error> {
78
- (options?: Omit<UseSuspenseInfiniteQueryOptions<TPageData, TError, Selected, QueryKey, TPageParam>, "select" | "queryKey" | "queryFn" | "initialPageParam" | "getNextPageParam" | "getPreviousPageParam">): UseSuspenseInfiniteQueryResult<Selected, TError>;
79
- <TFinal = Selected>(options: Omit<UseSuspenseInfiniteQueryOptions<TPageData, TError, TFinal, QueryKey, TPageParam>, "queryKey" | "queryFn" | "select" | "initialPageParam" | "getNextPageParam" | "getPreviousPageParam"> & {
80
- select: (data: Selected) => TFinal;
81
- }): UseSuspenseInfiniteQueryResult<TFinal, TError>;
82
- }
83
- /**
84
- * Result from createSuspenseInfiniteQuery
85
- *
86
- * `cancel()`, `reset()` and `optimisticUpdate()` act on the whole page set:
87
- * `optimisticUpdate` gets and returns the raw `InfiniteData`, `{ pages,
88
- * pageParams }`.
89
- *
90
- * @template TPageData - The raw page data type
91
- * @template TPageParam - The page parameter type
92
- * @template Selected - The type after select transformation
93
- * @template TError - The error type
94
- */
95
- export interface SuspenseInfiniteQueryResult<TPageData, TPageParam, Selected = InfiniteData<TPageData, TPageParam>, TError = Error> extends QueryCacheControls<InfiniteData<TPageData, TPageParam>> {
96
- /** Fetch first page in loader (uses ensureInfiniteQueryData for cache-first) */
97
- fetch: () => Promise<Selected>;
98
- /** React hook for components - supports pagination */
99
- useSuspenseInfiniteQuery: UseSuspenseInfiniteQueryWithSelect<TPageData, TPageParam, Selected, TError>;
100
- /** Invalidate the cache (refetches if query is active) */
101
- invalidate: () => Promise<void>;
102
- /** Get query key (for advanced React Query usage) */
103
- getQueryKey: () => QueryKey;
104
- /**
105
- * Read data directly from cache without fetching.
106
- * Returns undefined if data is not in cache.
107
- */
108
- getCacheData: {
109
- (): Selected | undefined;
110
- <TFinal>(select: (data: Selected) => TFinal): TFinal | undefined;
111
- };
112
- }
113
- export declare function createSuspenseInfiniteQuery<Service, Transform extends TransformKey, Method extends FunctionName<Service> = FunctionName<Service>, TPageParam = unknown, Selected = InfiniteData<SuspenseInfiniteQueryPageData<Service, Method, Transform>, TPageParam>>(reactor: Reactor<Service, Transform>, config: SuspenseInfiniteQueryConfig<NoInfer<Service>, Method, Transform, TPageParam, Selected>): SuspenseInfiniteQueryResult<SuspenseInfiniteQueryPageData<Service, Method, Transform>, TPageParam, Selected, SuspenseInfiniteQueryError<Service, Method, Transform>>;
114
- /**
115
- * Create a suspense infinite query factory that accepts getArgs at call time.
116
- * Useful when pagination logic varies by context.
117
- *
118
- * @template Service - The actor interface type
119
- * @template Method - The method name on the actor
120
- * @template Transform - The transformation key (identity, display, etc.)
121
- * @template TPageParam - The page parameter type
122
- * @template Selected - The type returned after select transformation
123
- *
124
- * @param reactor - The Reactor instance
125
- * @param config - Suspense infinite query configuration (without getArgs)
126
- * @returns A function that accepts getArgs and returns a SuspenseInfiniteQueryResult
127
- *
128
- * @example
129
- * const getPostsQuery = createSuspenseInfiniteQueryFactory(reactor, {
130
- * functionName: "get_posts",
131
- * initialPageParam: 0,
132
- * getKeyArgs: (args) => {
133
- * const [{ userId }] = args
134
- * return [{ userId }]
135
- * },
136
- * getNextPageParam: (lastPage) => lastPage.nextCursor,
137
- * })
138
- *
139
- * // Create query with specific args builder
140
- * const userPostsQuery = getPostsQuery((cursor) => [{ userId, cursor, limit: 10 }])
141
- * const { data, fetchNextPage } = userPostsQuery.useSuspenseInfiniteQuery()
142
- *
143
- * // Optional: append a manual query-key suffix in addition to auto key args
144
- * const scopedPostsQuery = getPostsQuery(
145
- * (cursor) => [{ userId, cursor, limit: 10 }],
146
- * { queryKey: ["v2"] }
147
- * )
148
- *
149
- * // Every list this factory made, whatever its args and pages
150
- * await getPostsQuery.invalidate()
151
- */
152
- export declare function createSuspenseInfiniteQueryFactory<Service, Transform extends TransformKey, Method extends FunctionName<Service> = FunctionName<Service>, TPageParam = unknown, Selected = InfiniteData<SuspenseInfiniteQueryPageData<Service, Method, Transform>, TPageParam>>(reactor: Reactor<Service, Transform>, config: SuspenseInfiniteQueryFactoryConfig<NoInfer<Service>, Method, Transform, TPageParam, Selected>): SuspenseInfiniteQueryFactoryFn<Service, Method, Transform, TPageParam, Selected>;
153
- export {};
154
- //# sourceMappingURL=createSuspenseInfiniteQuery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSuspenseInfiniteQuery.d.ts","sourceRoot":"","sources":["../src/createSuspenseInfiniteQuery.ts"],"names":[],"mappings":"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"}
@@ -1,209 +0,0 @@
1
- /**
2
- * Suspense Infinite Query Factory - Generic wrapper for React Query suspense-based paginated canister data
3
- *
4
- * Creates unified fetch/hook/invalidate functions for any paginated canister method.
5
- * Works with any Reactor instance.
6
- *
7
- * Uses `useSuspenseInfiniteQuery` which:
8
- * - Requires wrapping in <Suspense> boundary
9
- * - Data is always defined (no undefined checks)
10
- * - Does NOT support `enabled` or `placeholderData` options
11
- *
12
- * @example
13
- * const postsQuery = createSuspenseInfiniteQuery(reactor, {
14
- * functionName: "get_posts",
15
- * initialPageParam: 0,
16
- * getArgs: (cursor) => [{ cursor, limit: 10 }] as const,
17
- * getNextPageParam: (lastPage) => lastPage.nextCursor,
18
- * })
19
- *
20
- * // In component (wrap in Suspense)
21
- * const { data, fetchNextPage, hasNextPage } = postsQuery.useSuspenseInfiniteQuery()
22
- *
23
- * // Flatten all pages
24
- * const allPosts = data.pages.flatMap(page => page.posts)
25
- */
26
- import { useMemo } from "react";
27
- import { useSuspenseInfiniteQuery, } from "@tanstack/react-query";
28
- import { buildChainedSelect, callConfigForKey, mergeFactoryQueryKey, mountWhileSuspended, normalizeQueryData, pickFetchOptions, queryCacheControls, retryOption, useMountQueryClient, withQueryFactoryMethods, } from "./utils.js";
29
- // ============================================================================
30
- // Internal Implementation
31
- // ============================================================================
32
- const createSuspenseInfiniteQueryImpl = (reactor, config) => {
33
- const { functionName, callConfig, queryKey: customQueryKey, initialPageParam, getArgs, getKeyArgs, getNextPageParam, getPreviousPageParam, maxPages, staleTime = 5 * 60 * 1000, select, ...rest } = config;
34
- // Fold the call arguments into the key — see the matching comment in
35
- // createInfiniteQuery. Without them every infinite query on a method shares
36
- // one cache entry, because the arguments live in a `getArgs` closure rather
37
- // than in the config.
38
- const getQueryKey = () => {
39
- const initialArgs = getArgs(initialPageParam);
40
- const keyArgs = getKeyArgs?.(initialArgs) ?? initialArgs;
41
- return reactor.generateQueryKey({
42
- functionName,
43
- queryKey: mergeFactoryQueryKey(customQueryKey, undefined, keyArgs),
44
- }, callConfig);
45
- };
46
- // Query function - accepts QueryFunctionContext
47
- const queryFn = async (context) => {
48
- // pageParam is typed as unknown in QueryFunctionContext, but we know its type
49
- const pageParam = context.pageParam;
50
- const args = getArgs(pageParam);
51
- const result = await reactor.callMethod({
52
- functionName,
53
- args,
54
- callConfig: callConfigForKey(context.queryKey, callConfig),
55
- });
56
- return normalizeQueryData(result);
57
- };
58
- // Get infinite query options for fetchInfiniteQuery
59
- const getInfiniteQueryOptions = () => {
60
- const queryKey = getQueryKey();
61
- return {
62
- // How the query function runs, shared with the hook; see
63
- // pickFetchOptions. An update method's `retry` defaults as
64
- // `Reactor.getQueryRetry` says.
65
- ...pickFetchOptions(rest),
66
- ...retryOption(rest.retry, reactor.getQueryRetry(functionName, queryKey)),
67
- queryKey,
68
- queryFn,
69
- initialPageParam,
70
- getNextPageParam,
71
- staleTime,
72
- };
73
- };
74
- // Fetch function for loaders (cache-first, fetches first page)
75
- const fetch = async () => {
76
- // Use ensureInfiniteQueryData to get cached data or fetch if stale. A
77
- // sign-in or sign-out while it is in flight cancels it; it then runs again
78
- // for the new identity rather than rejecting with TanStack's
79
- // CancelledError, as `reactor.fetchQuery` does.
80
- const result = await reactor.clientManager.fetchAcrossIdentitySwitch(() => reactor.queryClient.ensureInfiniteQueryData(getInfiniteQueryOptions()));
81
- // Result is already InfiniteData format
82
- return select ? select(result) : result;
83
- };
84
- // Implementation
85
- const useSuspenseInfiniteQueryHook = (options) => {
86
- useMountQueryClient(reactor.queryClient);
87
- // Memoized and identity-preserving; see buildChainedSelect for why the
88
- // function identity matters to the observer's select-result cache.
89
- const chainedSelect = useMemo(() => buildChainedSelect(select, options?.select), [options?.select]);
90
- const queryKey = getQueryKey();
91
- try {
92
- return useSuspenseInfiniteQuery({
93
- queryKey,
94
- queryFn,
95
- initialPageParam,
96
- getNextPageParam,
97
- getPreviousPageParam,
98
- maxPages,
99
- staleTime,
100
- ...rest,
101
- ...options,
102
- select: chainedSelect,
103
- // The hook's `retry`, else the config's, else an update method's
104
- // default; see `Reactor.getQueryRetry`.
105
- ...retryOption(options?.retry ?? rest.retry, reactor.getQueryRetry(functionName, queryKey)),
106
- }, reactor.queryClient);
107
- }
108
- catch (thrown) {
109
- mountWhileSuspended(reactor.queryClient, thrown);
110
- throw thrown;
111
- }
112
- };
113
- // Invalidate function
114
- const invalidate = async () => {
115
- const queryKey = getQueryKey();
116
- await reactor.queryClient.invalidateQueries({ queryKey });
117
- };
118
- // Get data from cache without fetching
119
- const getCacheData = (selectFn) => {
120
- const queryKey = getQueryKey();
121
- const cachedRawData = reactor.queryClient.getQueryData(queryKey);
122
- if (cachedRawData === undefined) {
123
- return undefined;
124
- }
125
- // Apply config.select to raw cache data
126
- const selectedData = (select ? select(cachedRawData) : cachedRawData);
127
- // Apply optional select parameter
128
- if (selectFn) {
129
- return selectFn(selectedData);
130
- }
131
- return selectedData;
132
- };
133
- return {
134
- fetch,
135
- useSuspenseInfiniteQuery: useSuspenseInfiniteQueryHook,
136
- invalidate,
137
- getQueryKey,
138
- getCacheData,
139
- ...queryCacheControls(reactor, getQueryKey),
140
- };
141
- };
142
- // ============================================================================
143
- // Factory Function
144
- // ============================================================================
145
- export function createSuspenseInfiniteQuery(reactor, config) {
146
- return createSuspenseInfiniteQueryImpl(reactor, config);
147
- }
148
- // ============================================================================
149
- // Factory with Dynamic Args
150
- // ============================================================================
151
- /**
152
- * Create a suspense infinite query factory that accepts getArgs at call time.
153
- * Useful when pagination logic varies by context.
154
- *
155
- * @template Service - The actor interface type
156
- * @template Method - The method name on the actor
157
- * @template Transform - The transformation key (identity, display, etc.)
158
- * @template TPageParam - The page parameter type
159
- * @template Selected - The type returned after select transformation
160
- *
161
- * @param reactor - The Reactor instance
162
- * @param config - Suspense infinite query configuration (without getArgs)
163
- * @returns A function that accepts getArgs and returns a SuspenseInfiniteQueryResult
164
- *
165
- * @example
166
- * const getPostsQuery = createSuspenseInfiniteQueryFactory(reactor, {
167
- * functionName: "get_posts",
168
- * initialPageParam: 0,
169
- * getKeyArgs: (args) => {
170
- * const [{ userId }] = args
171
- * return [{ userId }]
172
- * },
173
- * getNextPageParam: (lastPage) => lastPage.nextCursor,
174
- * })
175
- *
176
- * // Create query with specific args builder
177
- * const userPostsQuery = getPostsQuery((cursor) => [{ userId, cursor, limit: 10 }])
178
- * const { data, fetchNextPage } = userPostsQuery.useSuspenseInfiniteQuery()
179
- *
180
- * // Optional: append a manual query-key suffix in addition to auto key args
181
- * const scopedPostsQuery = getPostsQuery(
182
- * (cursor) => [{ userId, cursor, limit: 10 }],
183
- * { queryKey: ["v2"] }
184
- * )
185
- *
186
- * // Every list this factory made, whatever its args and pages
187
- * await getPostsQuery.invalidate()
188
- */
189
- export function createSuspenseInfiniteQueryFactory(reactor, config) {
190
- const factory = (getArgs, options) => {
191
- // Only the caller-supplied segments are merged here; the args-derived
192
- // segment is added by the impl, which does it for every infinite query.
193
- // Applying it in both places would append the args twice.
194
- const queryKey = mergeFactoryQueryKey(config.queryKey, options?.queryKey, undefined);
195
- return createSuspenseInfiniteQueryImpl(reactor, {
196
- ...config,
197
- queryKey,
198
- getArgs,
199
- });
200
- };
201
- // What every instance's key starts with: the method, the `callConfig`
202
- // segments and the config `queryKey`. A per-call `queryKey` and the args
203
- // segment come after them.
204
- return withQueryFactoryMethods(factory, reactor, () => reactor.generateQueryKey({
205
- functionName: config.functionName,
206
- queryKey: config.queryKey,
207
- }, config.callConfig));
208
- }
209
- //# sourceMappingURL=createSuspenseInfiniteQuery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSuspenseInfiniteQuery.js","sourceRoot":"","sources":["../src/createSuspenseInfiniteQuery.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- /**
2
- * Suspense Query Factory - Generic wrapper for React Suspense-based canister data
3
- *
4
- * Creates unified fetch/hook/invalidate functions for any canister method.
5
- * Works with any Reactor instance.
6
- *
7
- * Uses `useSuspenseQuery` which:
8
- * - Requires wrapping in <Suspense> boundary
9
- * - Data is always defined (no undefined checks)
10
- * - Does NOT support `enabled` option
11
- *
12
- * @example
13
- * const userQuery = createSuspenseQuery(todoManager, {
14
- * functionName: "get_user",
15
- * select: (result) => result.user,
16
- * })
17
- *
18
- * // In component (wrap in Suspense)
19
- * const { data: user } = userQuery.useSuspenseQuery() // data is never undefined!
20
- */
21
- import type { Reactor, FunctionName, ReactorArgs, TransformKey } from "@ic-reactor/core";
22
- import type { QueryFnData, QueryError, SuspenseQueryConfig, SuspenseQueryResult, SuspenseQueryFactoryConfig, QueryFactoryFn, NoInfer } from "./types.js";
23
- export declare function createSuspenseQuery<Service, Transform extends TransformKey, Method extends FunctionName<Service> = FunctionName<Service>, Selected = QueryFnData<Service, Method, Transform>>(reactor: Reactor<Service, Transform>, config: SuspenseQueryConfig<NoInfer<Service>, Method, Transform, Selected>): SuspenseQueryResult<QueryFnData<Service, Method, Transform>, Selected, QueryError<Service, Method, Transform>>;
24
- /**
25
- * Create a suspense query factory: a function that takes the method's args
26
- * and returns the suspense query object for them, the same object for the
27
- * same args.
28
- *
29
- * The function also has `getQueryKey()`, the key prefix every query it
30
- * returns shares, and `invalidate()`, which invalidates all of them whatever
31
- * their args. Pass the function itself to a mutation's `invalidateQueries` to
32
- * refresh every instance after the mutation.
33
- *
34
- * @example
35
- * const getBalance = createSuspenseQueryFactory(ledger, {
36
- * functionName: "icrc1_balance_of",
37
- * })
38
- *
39
- * // In a component under <Suspense>
40
- * const { data } = getBalance([{ owner, subaccount: [] }]).useSuspenseQuery()
41
- *
42
- * // Refetch every account's balance
43
- * await getBalance.invalidate()
44
- */
45
- export declare function createSuspenseQueryFactory<Service, Transform extends TransformKey, Method extends FunctionName<Service> = FunctionName<Service>, Selected = QueryFnData<Service, Method, Transform>>(reactor: Reactor<Service, Transform>, config: SuspenseQueryFactoryConfig<NoInfer<Service>, Method, Transform, Selected>): QueryFactoryFn<ReactorArgs<Service, Method, Transform>, SuspenseQueryResult<QueryFnData<Service, Method, Transform>, Selected, QueryError<Service, Method, Transform>>>;
46
- //# sourceMappingURL=createSuspenseQuery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSuspenseQuery.d.ts","sourceRoot":"","sources":["../src/createSuspenseQuery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,WAAW,EACX,YAAY,EACb,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,mBAAmB,EAEnB,mBAAmB,EACnB,0BAA0B,EAC1B,cAAc,EACd,OAAO,EACR,MAAM,YAAY,CAAA;AA0JnB,wBAAgB,mBAAmB,CACjC,OAAO,EACP,SAAS,SAAS,YAAY,EAC9B,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,EAC5D,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAElD,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EACpC,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,GACzE,mBAAmB,CACpB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EACvC,QAAQ,EACR,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CACvC,CAKA;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EACP,SAAS,SAAS,YAAY,EAC9B,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,EAC5D,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAElD,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EACpC,MAAM,EAAE,0BAA0B,CAChC,OAAO,CAAC,OAAO,CAAC,EAChB,MAAM,EACN,SAAS,EACT,QAAQ,CACT,GACA,cAAc,CACf,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EACvC,mBAAmB,CACjB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EACvC,QAAQ,EACR,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CACvC,CACF,CA+CA"}
@@ -1,158 +0,0 @@
1
- /**
2
- * Suspense Query Factory - Generic wrapper for React Suspense-based canister data
3
- *
4
- * Creates unified fetch/hook/invalidate functions for any canister method.
5
- * Works with any Reactor instance.
6
- *
7
- * Uses `useSuspenseQuery` which:
8
- * - Requires wrapping in <Suspense> boundary
9
- * - Data is always defined (no undefined checks)
10
- * - Does NOT support `enabled` option
11
- *
12
- * @example
13
- * const userQuery = createSuspenseQuery(todoManager, {
14
- * functionName: "get_user",
15
- * select: (result) => result.user,
16
- * })
17
- *
18
- * // In component (wrap in Suspense)
19
- * const { data: user } = userQuery.useSuspenseQuery() // data is never undefined!
20
- */
21
- import { useMemo } from "react";
22
- import { useSuspenseQuery } from "@tanstack/react-query";
23
- import { buildChainedSelect, createBoundedCache, mountWhileSuspended, pickFetchOptions, queryCacheControls, retryOption, useMountQueryClient, withQueryFactoryMethods, } from "./utils.js";
24
- // ============================================================================
25
- // Internal Implementation
26
- // ============================================================================
27
- const createSuspenseQueryImpl = (reactor, config) => {
28
- const { functionName, args, callConfig, staleTime = 5 * 60 * 1000, select, queryKey: customQueryKey, ...rest } = config;
29
- // `callConfig` goes wherever the hooks send it: to the call and into the
30
- // key, so a query of another canister or agent has an entry of its own.
31
- const params = { functionName, args, queryKey: customQueryKey, callConfig };
32
- const getQueryKey = () => reactor.generateQueryKey(params, callConfig);
33
- const applySelect = (raw) => select ? select(raw) : raw;
34
- // How the query function runs, shared with the hook; see pickFetchOptions.
35
- const fetchOptions = pickFetchOptions(rest);
36
- /** Cache-first fetch for use in loaders / route preloading. */
37
- const fetch = async () => {
38
- // Through the reactor rather than straight to the QueryClient: overriding
39
- // `fetchQuery` in a Reactor subclass is a documented way to add logic to
40
- // every factory fetch.
41
- const result = await reactor.fetchQuery(params, fetchOptions);
42
- return applySelect(result);
43
- };
44
- /** Fire-and-forget prefetch — warms the cache without blocking. */
45
- const prefetch = () => {
46
- const baseOptions = reactor.getQueryOptions(params);
47
- // Runs again when a sign-in or sign-out cancels it, and never rejects;
48
- // see `prefetch` in createQuery.
49
- return reactor.clientManager
50
- .fetchAcrossIdentitySwitch(() => reactor.queryClient.prefetchQuery({
51
- ...fetchOptions,
52
- // An update method's default `retry`; see `Reactor.getQueryRetry`.
53
- ...retryOption(fetchOptions.retry, baseOptions.retry),
54
- queryKey: baseOptions.queryKey,
55
- queryFn: baseOptions.queryFn,
56
- staleTime,
57
- }))
58
- .catch(() => undefined);
59
- };
60
- const useSuspenseQueryHook = (options) => {
61
- useMountQueryClient(reactor.queryClient);
62
- const baseOptions = reactor.getQueryOptions(params);
63
- // Memoized so the observer's select-result cache can hit; see
64
- // buildChainedSelect. `select` comes from the factory config and is stable.
65
- const chainedSelect = useMemo(() => buildChainedSelect(select, options?.select), [options?.select]);
66
- try {
67
- return useSuspenseQuery({
68
- queryKey: baseOptions.queryKey,
69
- staleTime,
70
- ...rest,
71
- ...options,
72
- queryFn: baseOptions.queryFn,
73
- select: chainedSelect,
74
- // The hook's `retry`, else the config's, else an update method's
75
- // default; see `Reactor.getQueryRetry`.
76
- ...retryOption(options?.retry ?? rest.retry, baseOptions.retry),
77
- }, reactor.queryClient);
78
- }
79
- catch (thrown) {
80
- mountWhileSuspended(reactor.queryClient, thrown);
81
- throw thrown;
82
- }
83
- };
84
- const invalidate = async () => {
85
- await reactor.queryClient.invalidateQueries({ queryKey: getQueryKey() });
86
- };
87
- const getCacheData = (selectFn) => {
88
- const raw = reactor.getQueryData(params, callConfig);
89
- if (raw === undefined)
90
- return undefined;
91
- const selected = applySelect(raw);
92
- return selectFn ? selectFn(selected) : selected;
93
- };
94
- const setData = (updater) => {
95
- return reactor.queryClient.setQueryData(getQueryKey(), updater);
96
- };
97
- return {
98
- fetch,
99
- prefetch,
100
- useSuspenseQuery: useSuspenseQueryHook,
101
- invalidate,
102
- getQueryKey,
103
- getCacheData,
104
- setData,
105
- ...queryCacheControls(reactor, getQueryKey),
106
- };
107
- };
108
- // ============================================================================
109
- // Public Factory Function
110
- // ============================================================================
111
- export function createSuspenseQuery(reactor, config) {
112
- return createSuspenseQueryImpl(reactor, config);
113
- }
114
- // ============================================================================
115
- // Convenience: Create suspense query with dynamic args
116
- // ============================================================================
117
- /**
118
- * Create a suspense query factory: a function that takes the method's args
119
- * and returns the suspense query object for them, the same object for the
120
- * same args.
121
- *
122
- * The function also has `getQueryKey()`, the key prefix every query it
123
- * returns shares, and `invalidate()`, which invalidates all of them whatever
124
- * their args. Pass the function itself to a mutation's `invalidateQueries` to
125
- * refresh every instance after the mutation.
126
- *
127
- * @example
128
- * const getBalance = createSuspenseQueryFactory(ledger, {
129
- * functionName: "icrc1_balance_of",
130
- * })
131
- *
132
- * // In a component under <Suspense>
133
- * const { data } = getBalance([{ owner, subaccount: [] }]).useSuspenseQuery()
134
- *
135
- * // Refetch every account's balance
136
- * await getBalance.invalidate()
137
- */
138
- export function createSuspenseQueryFactory(reactor, config) {
139
- const cache = createBoundedCache();
140
- const factory = (args) => {
141
- const key = reactor.generateQueryKey({ functionName: config.functionName, args }, config.callConfig);
142
- const cacheKey = JSON.stringify(key);
143
- const existing = cache.get(cacheKey);
144
- if (existing)
145
- return existing;
146
- const result = createSuspenseQueryImpl(reactor, {
147
- ...config,
148
- args,
149
- });
150
- cache.set(cacheKey, result);
151
- return result;
152
- };
153
- // The method's own prefix, at the canister and agent the config's
154
- // `callConfig` names. A config `queryKey` follows the args segment in every
155
- // instance's key, so it cannot narrow the prefix.
156
- return withQueryFactoryMethods(factory, reactor, () => reactor.generateQueryKey({ functionName: config.functionName }, config.callConfig));
157
- }
158
- //# sourceMappingURL=createSuspenseQuery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSuspenseQuery.js","sourceRoot":"","sources":["../src/createSuspenseQuery.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- import { DisplayReactor } from "@ic-reactor/core";
2
- import type { BaseActor, DisplayReactorParameters } from "@ic-reactor/core";
3
- import type { DefineReactorSharedParameters, DefineReactorResult } from "./defineReactorShared.js";
4
- /** Options for {@link defineDisplayReactor}: `defineReactor`'s, plus validators. */
5
- export interface DefineDisplayReactorOptions<Service> extends DefineReactorSharedParameters {
6
- /** Optional initial argument validators (receive display types). */
7
- validators?: DisplayReactorParameters<Service>["validators"];
8
- }
9
- /**
10
- * One-call bootstrap for a {@link DisplayReactor} and its React hooks: the
11
- * display counterpart of `defineReactor`, taking the same options.
12
- *
13
- * A DisplayReactor takes and returns UI-friendly values — text for
14
- * `Principal`, `nat`, `int` and 64-bit integers, hex for blobs — which suits
15
- * forms and components. Its codecs are built on zod, so this adds zod to the
16
- * bundle. `defineReactor`, which builds a plain `Reactor` with raw Candid
17
- * values, does not need zod, but until its deprecated `display` flag is removed
18
- * at the next major it bundles zod anyway; `createActorHooks(new Reactor(...))`
19
- * is the setup without it.
20
- *
21
- * Replaces `defineReactor({ display: true })`, which is deprecated.
22
- *
23
- * @example
24
- * ```typescript
25
- * import { defineDisplayReactor } from "@ic-reactor/react"
26
- * import { idlFactory, type _SERVICE } from "./declarations/backend"
27
- *
28
- * export const { reactor, useActorQuery, useActorMutation, useAuth } =
29
- * defineDisplayReactor<_SERVICE>({
30
- * name: "backend",
31
- * idlFactory,
32
- * canisterId: "rrkah-fqaaa-aaaaa-aaaaq-cai",
33
- * })
34
- *
35
- * function Balance() {
36
- * // `nat` arrives as text, ready to render.
37
- * const { data } = useActorQuery({ functionName: "get_balance" })
38
- * return <span>{data}</span>
39
- * }
40
- * ```
41
- */
42
- export declare function defineDisplayReactor<Service = BaseActor>(params: DefineDisplayReactorOptions<Service>): DefineReactorResult<Service, "display", DisplayReactor<Service>>;
43
- //# sourceMappingURL=defineDisplayReactor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defineDisplayReactor.d.ts","sourceRoot":"","sources":["../src/defineDisplayReactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAE3E,OAAO,KAAK,EACV,6BAA6B,EAC7B,mBAAmB,EACpB,MAAM,0BAA0B,CAAA;AAEjC,oFAAoF;AACpF,MAAM,WAAW,2BAA2B,CAC1C,OAAO,CACP,SAAQ,6BAA6B;IACrC,oEAAoE;IACpE,UAAU,CAAC,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;CAC7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAG,SAAS,EACtD,MAAM,EAAE,2BAA2B,CAAC,OAAO,CAAC,GAC3C,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAUlE"}