@ic-reactor/react 2.0.1 → 3.0.0-beta.2

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 (155) hide show
  1. package/README.md +283 -87
  2. package/dist/createActorHooks.d.ts +39 -0
  3. package/dist/createActorHooks.d.ts.map +1 -0
  4. package/dist/createActorHooks.js +30 -0
  5. package/dist/createActorHooks.js.map +1 -0
  6. package/dist/createAuthHooks.d.ts +37 -0
  7. package/dist/createAuthHooks.d.ts.map +1 -0
  8. package/dist/createAuthHooks.js +94 -0
  9. package/dist/createAuthHooks.js.map +1 -0
  10. package/dist/createInfiniteQuery.d.ts +129 -0
  11. package/dist/createInfiniteQuery.d.ts.map +1 -0
  12. package/dist/createInfiniteQuery.js +160 -0
  13. package/dist/createInfiniteQuery.js.map +1 -0
  14. package/dist/createMutation.d.ts +19 -0
  15. package/dist/createMutation.d.ts.map +1 -0
  16. package/dist/createMutation.js +98 -0
  17. package/dist/createMutation.js.map +1 -0
  18. package/dist/createQuery.d.ts +20 -0
  19. package/dist/createQuery.d.ts.map +1 -0
  20. package/dist/createQuery.js +111 -0
  21. package/dist/createQuery.js.map +1 -0
  22. package/dist/createSuspenseInfiniteQuery.d.ts +122 -0
  23. package/dist/createSuspenseInfiniteQuery.d.ts.map +1 -0
  24. package/dist/createSuspenseInfiniteQuery.js +160 -0
  25. package/dist/createSuspenseInfiniteQuery.js.map +1 -0
  26. package/dist/createSuspenseQuery.d.ts +25 -0
  27. package/dist/createSuspenseQuery.d.ts.map +1 -0
  28. package/dist/createSuspenseQuery.js +116 -0
  29. package/dist/createSuspenseQuery.js.map +1 -0
  30. package/dist/hooks/index.d.ts +6 -2
  31. package/dist/hooks/index.d.ts.map +1 -0
  32. package/dist/hooks/index.js +6 -18
  33. package/dist/hooks/index.js.map +1 -0
  34. package/dist/hooks/useActorInfiniteQuery.d.ts +37 -0
  35. package/dist/hooks/useActorInfiniteQuery.d.ts.map +1 -0
  36. package/dist/hooks/useActorInfiniteQuery.js +33 -0
  37. package/dist/hooks/useActorInfiniteQuery.js.map +1 -0
  38. package/dist/hooks/useActorMutation.d.ts +23 -0
  39. package/dist/hooks/useActorMutation.d.ts.map +1 -0
  40. package/dist/hooks/useActorMutation.js +39 -0
  41. package/dist/hooks/useActorMutation.js.map +1 -0
  42. package/dist/hooks/useActorQuery.d.ts +32 -0
  43. package/dist/hooks/useActorQuery.d.ts.map +1 -0
  44. package/dist/hooks/useActorQuery.js +35 -0
  45. package/dist/hooks/useActorQuery.js.map +1 -0
  46. package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts +36 -0
  47. package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts.map +1 -0
  48. package/dist/hooks/useActorSuspenseInfiniteQuery.js +33 -0
  49. package/dist/hooks/useActorSuspenseInfiniteQuery.js.map +1 -0
  50. package/dist/hooks/useActorSuspenseQuery.d.ts +32 -0
  51. package/dist/hooks/useActorSuspenseQuery.d.ts.map +1 -0
  52. package/dist/hooks/useActorSuspenseQuery.js +36 -0
  53. package/dist/hooks/useActorSuspenseQuery.js.map +1 -0
  54. package/dist/index.d.ts +11 -8
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +17 -49
  57. package/dist/index.js.map +1 -0
  58. package/dist/types.d.ts +232 -13
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +5 -22
  61. package/dist/types.js.map +1 -0
  62. package/dist/validation.d.ts +131 -0
  63. package/dist/validation.d.ts.map +1 -0
  64. package/dist/validation.js +125 -0
  65. package/dist/validation.js.map +1 -0
  66. package/package.json +70 -35
  67. package/LICENSE.md +0 -8
  68. package/dist/context/actor/create.d.ts +0 -63
  69. package/dist/context/actor/create.js +0 -119
  70. package/dist/context/actor/hooks/useActorInterface.d.ts +0 -4
  71. package/dist/context/actor/hooks/useActorInterface.js +0 -10
  72. package/dist/context/actor/hooks/useActorState.d.ts +0 -21
  73. package/dist/context/actor/hooks/useActorState.js +0 -25
  74. package/dist/context/actor/hooks/useActorStore.d.ts +0 -32
  75. package/dist/context/actor/hooks/useActorStore.js +0 -36
  76. package/dist/context/actor/hooks/useInitializeActor.d.ts +0 -6
  77. package/dist/context/actor/hooks/useInitializeActor.js +0 -10
  78. package/dist/context/actor/hooks/useMethod.d.ts +0 -29
  79. package/dist/context/actor/hooks/useMethod.js +0 -34
  80. package/dist/context/actor/hooks/useMethodAttributes.d.ts +0 -7
  81. package/dist/context/actor/hooks/useMethodAttributes.js +0 -11
  82. package/dist/context/actor/hooks/useMethodNames.d.ts +0 -7
  83. package/dist/context/actor/hooks/useMethodNames.js +0 -11
  84. package/dist/context/actor/hooks/useQueryCall.d.ts +0 -28
  85. package/dist/context/actor/hooks/useQueryCall.js +0 -33
  86. package/dist/context/actor/hooks/useUpdateCall.d.ts +0 -29
  87. package/dist/context/actor/hooks/useUpdateCall.js +0 -34
  88. package/dist/context/actor/hooks/useVisitMethod.d.ts +0 -8
  89. package/dist/context/actor/hooks/useVisitMethod.js +0 -13
  90. package/dist/context/actor/hooks/useVisitService.d.ts +0 -8
  91. package/dist/context/actor/hooks/useVisitService.js +0 -13
  92. package/dist/context/actor/index.d.ts +0 -16
  93. package/dist/context/actor/index.js +0 -33
  94. package/dist/context/actor/provider.d.ts +0 -71
  95. package/dist/context/actor/provider.js +0 -75
  96. package/dist/context/actor/types.d.ts +0 -35
  97. package/dist/context/actor/types.js +0 -2
  98. package/dist/context/adapter/create.d.ts +0 -2
  99. package/dist/context/adapter/create.js +0 -102
  100. package/dist/context/adapter/hooks/useCandidAdapter.d.ts +0 -23
  101. package/dist/context/adapter/hooks/useCandidAdapter.js +0 -27
  102. package/dist/context/adapter/hooks/useCandidEvaluation.d.ts +0 -5
  103. package/dist/context/adapter/hooks/useCandidEvaluation.js +0 -9
  104. package/dist/context/adapter/index.d.ts +0 -6
  105. package/dist/context/adapter/index.js +0 -24
  106. package/dist/context/adapter/provider.d.ts +0 -23
  107. package/dist/context/adapter/provider.js +0 -27
  108. package/dist/context/adapter/types.d.ts +0 -52
  109. package/dist/context/adapter/types.js +0 -2
  110. package/dist/context/agent/create.d.ts +0 -74
  111. package/dist/context/agent/create.js +0 -104
  112. package/dist/context/agent/hooks/useAgent.d.ts +0 -14
  113. package/dist/context/agent/hooks/useAgent.js +0 -18
  114. package/dist/context/agent/hooks/useAgentManager.d.ts +0 -14
  115. package/dist/context/agent/hooks/useAgentManager.js +0 -18
  116. package/dist/context/agent/hooks/useAgentState.d.ts +0 -21
  117. package/dist/context/agent/hooks/useAgentState.js +0 -25
  118. package/dist/context/agent/hooks/useAuth.d.ts +0 -57
  119. package/dist/context/agent/hooks/useAuth.js +0 -61
  120. package/dist/context/agent/hooks/useAuthState.d.ts +0 -19
  121. package/dist/context/agent/hooks/useAuthState.js +0 -23
  122. package/dist/context/agent/hooks/useUserPrincipal.d.ts +0 -17
  123. package/dist/context/agent/hooks/useUserPrincipal.js +0 -21
  124. package/dist/context/agent/index.d.ts +0 -12
  125. package/dist/context/agent/index.js +0 -29
  126. package/dist/context/agent/provider.d.ts +0 -28
  127. package/dist/context/agent/provider.js +0 -32
  128. package/dist/context/agent/types.d.ts +0 -17
  129. package/dist/context/agent/types.js +0 -2
  130. package/dist/core.d.ts +0 -1
  131. package/dist/core.js +0 -9
  132. package/dist/createReactor.d.ts +0 -49
  133. package/dist/createReactor.js +0 -69
  134. package/dist/helpers/actorHooks.d.ts +0 -18
  135. package/dist/helpers/actorHooks.js +0 -283
  136. package/dist/helpers/agentHooks.d.ts +0 -3
  137. package/dist/helpers/agentHooks.js +0 -22
  138. package/dist/helpers/authHooks.d.ts +0 -2
  139. package/dist/helpers/authHooks.js +0 -120
  140. package/dist/helpers/extractActorContext.d.ts +0 -4
  141. package/dist/helpers/extractActorContext.js +0 -44
  142. package/dist/helpers/extractAgentContext.d.ts +0 -28
  143. package/dist/helpers/extractAgentContext.js +0 -59
  144. package/dist/helpers/index.d.ts +0 -5
  145. package/dist/helpers/index.js +0 -21
  146. package/dist/helpers/types.d.ts +0 -222
  147. package/dist/helpers/types.js +0 -2
  148. package/dist/hooks/types.d.ts +0 -22
  149. package/dist/hooks/types.js +0 -2
  150. package/dist/hooks/useActor.d.ts +0 -67
  151. package/dist/hooks/useActor.js +0 -197
  152. package/dist/hooks/useActorManager.d.ts +0 -68
  153. package/dist/hooks/useActorManager.js +0 -75
  154. package/dist/utils.d.ts +0 -1
  155. package/dist/utils.js +0 -17
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Suspense Infinite Query Factory - Generic wrapper for React Query suspense-based paginated canister data
3
+ *
4
+ * Creates unified fetch/hook/refetch 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 }],
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, 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 { NoInfer } from "./types";
30
+ /** The raw page data type returned by the query function */
31
+ export type SuspenseInfiniteQueryPageData<A = BaseActor, M extends FunctionName<A> = FunctionName<A>, T extends TransformKey = "candid"> = ReactorReturnOk<A, M, T>;
32
+ /** The error type for infinite queries */
33
+ export type SuspenseInfiniteQueryError<A = BaseActor, M extends FunctionName<A> = FunctionName<A>, T extends TransformKey = "candid"> = ReactorReturnErr<A, M, T>;
34
+ /**
35
+ * Configuration for createActorSuspenseInfiniteQuery.
36
+ * Extends InfiniteQueryObserverOptions to accept all React Query options at the create level.
37
+ *
38
+ * @template A - The actor interface type
39
+ * @template M - The method name on the actor
40
+ * @template T - The transformation key (identity, display, etc.)
41
+ * @template TPageParam - The type of the page parameter
42
+ * @template TSelected - The type returned after select transformation
43
+ */
44
+ export interface SuspenseInfiniteQueryConfig<A = BaseActor, M extends FunctionName<A> = FunctionName<A>, T extends TransformKey = "candid", TPageParam = unknown, TSelected = InfiniteData<SuspenseInfiniteQueryPageData<A, M, T>, TPageParam>> extends Omit<InfiniteQueryObserverOptions<SuspenseInfiniteQueryPageData<A, M, T>, SuspenseInfiniteQueryError<A, M, T>, TSelected, QueryKey, TPageParam>, "queryKey" | "queryFn"> {
45
+ /** The method to call on the canister */
46
+ functionName: M;
47
+ /** Call configuration for the actor method */
48
+ callConfig?: CallConfig;
49
+ /** Custom query key (optional, auto-generated if not provided) */
50
+ queryKey?: QueryKey;
51
+ /** Function to get args from page parameter */
52
+ getArgs: (pageParam: TPageParam) => ReactorArgs<A, M, T>;
53
+ }
54
+ /**
55
+ * Configuration for createActorSuspenseInfiniteQueryFactory (without initialPageParam, getArgs determined at call time).
56
+ */
57
+ export type SuspenseInfiniteQueryFactoryConfig<A = BaseActor, M extends FunctionName<A> = FunctionName<A>, T extends TransformKey = "candid", TPageParam = unknown, TSelected = InfiniteData<SuspenseInfiniteQueryPageData<A, M, T>, TPageParam>> = Omit<SuspenseInfiniteQueryConfig<A, M, T, TPageParam, TSelected>, "getArgs">;
58
+ /**
59
+ * useSuspenseInfiniteQuery hook with chained select support.
60
+ */
61
+ export interface UseSuspenseInfiniteQueryWithSelect<TPageData, TPageParam, TSelected = InfiniteData<TPageData, TPageParam>, TError = Error> {
62
+ (options?: Omit<UseSuspenseInfiniteQueryOptions<TPageData, TError, TSelected, QueryKey, TPageParam>, "select" | "queryKey" | "queryFn" | "initialPageParam" | "getNextPageParam" | "getPreviousPageParam">): UseSuspenseInfiniteQueryResult<TSelected, TError>;
63
+ <TFinal = TSelected>(options: Omit<UseSuspenseInfiniteQueryOptions<TPageData, TError, TFinal, QueryKey, TPageParam>, "queryKey" | "queryFn" | "select" | "initialPageParam" | "getNextPageParam" | "getPreviousPageParam"> & {
64
+ select: (data: TSelected) => TFinal;
65
+ }): UseSuspenseInfiniteQueryResult<TFinal, TError>;
66
+ }
67
+ /**
68
+ * Result from createActorSuspenseInfiniteQuery
69
+ *
70
+ * @template TPageData - The raw page data type
71
+ * @template TPageParam - The page parameter type
72
+ * @template TSelected - The type after select transformation
73
+ * @template TError - The error type
74
+ */
75
+ export interface SuspenseInfiniteQueryResult<TPageData, TPageParam, TSelected = InfiniteData<TPageData, TPageParam>, TError = Error> {
76
+ /** Fetch first page in loader (uses ensureInfiniteQueryData for cache-first) */
77
+ fetch: () => Promise<TSelected>;
78
+ /** React hook for components - supports pagination */
79
+ useSuspenseInfiniteQuery: UseSuspenseInfiniteQueryWithSelect<TPageData, TPageParam, TSelected, TError>;
80
+ /** Invalidate and refetch cache */
81
+ refetch: () => Promise<void>;
82
+ /** Get query key (for advanced React Query usage) */
83
+ getQueryKey: () => QueryKey;
84
+ /**
85
+ * Read data directly from cache without fetching.
86
+ * Returns undefined if data is not in cache.
87
+ */
88
+ getCacheData: {
89
+ (): TSelected | undefined;
90
+ <TFinal>(select: (data: TSelected) => TFinal): TFinal | undefined;
91
+ };
92
+ }
93
+ export declare function createSuspenseInfiniteQuery<A, T extends TransformKey, M extends FunctionName<A> = FunctionName<A>, TPageParam = unknown, TSelected = InfiniteData<SuspenseInfiniteQueryPageData<A, M, T>, TPageParam>>(reactor: Reactor<A, T>, config: SuspenseInfiniteQueryConfig<NoInfer<A>, M, T, TPageParam, TSelected>): SuspenseInfiniteQueryResult<SuspenseInfiniteQueryPageData<A, M, T>, TPageParam, TSelected, SuspenseInfiniteQueryError<A, M, T>>;
94
+ /**
95
+ * Create a suspense infinite query factory that accepts getArgs at call time.
96
+ * Useful when pagination logic varies by context.
97
+ *
98
+ * @template A - The actor interface type
99
+ * @template M - The method name on the actor
100
+ * @template T - The transformation key (identity, display, etc.)
101
+ * @template TPageParam - The page parameter type
102
+ * @template TSelected - The type returned after select transformation
103
+ *
104
+ * @param reactor - The Reactor instance
105
+ * @param config - Suspense infinite query configuration (without getArgs)
106
+ * @returns A function that accepts getArgs and returns an SuspenseActorInfiniteQueryResult
107
+ *
108
+ * @example
109
+ * const getPostsQuery = createActorSuspenseInfiniteQueryFactory(reactor, {
110
+ * functionName: "get_posts",
111
+ * initialPageParam: 0,
112
+ * getNextPageParam: (lastPage) => lastPage.nextCursor,
113
+ * })
114
+ *
115
+ * // Create query with specific args builder
116
+ * const userPostsQuery = getPostsQuery((cursor) => [{ userId, cursor, limit: 10 }])
117
+ * const { data, fetchNextPage } = userPostsQuery.useSuspenseInfiniteQuery()
118
+ */
119
+ export declare function createSuspenseInfiniteQueryFactory<A, T extends TransformKey, M extends FunctionName<A> = FunctionName<A>, TPageParam = unknown, TSelected = InfiniteData<SuspenseInfiniteQueryPageData<A, M, T>, TPageParam>>(reactor: Reactor<A, T>, config: SuspenseInfiniteQueryFactoryConfig<NoInfer<A>, M, T, TPageParam, TSelected>): (getArgs: (pageParam: TPageParam) => ReactorArgs<A, M, T>, options?: {
120
+ queryKey?: QueryKey;
121
+ }) => SuspenseInfiniteQueryResult<SuspenseInfiniteQueryPageData<A, M, T>, TPageParam, TSelected, SuspenseInfiniteQueryError<A, M, T>>;
122
+ //# sourceMappingURL=createSuspenseInfiniteQuery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSuspenseInfiniteQuery.d.ts","sourceRoot":"","sources":["../src/createSuspenseInfiniteQuery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Suspense Infinite Query Factory - Generic wrapper for React Query suspense-based paginated canister data
3
+ *
4
+ * Creates unified fetch/hook/refetch 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 }],
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 { useSuspenseInfiniteQuery, } from "@tanstack/react-query";
27
+ // ============================================================================
28
+ // Internal Implementation
29
+ // ============================================================================
30
+ const createSuspenseInfiniteQueryImpl = (reactor, config) => {
31
+ const { functionName, callConfig, queryKey: customQueryKey, initialPageParam, getArgs, getNextPageParam, getPreviousPageParam, maxPages, staleTime = 5 * 60 * 1000, select, ...rest } = config;
32
+ // Get query key from actor manager
33
+ const getQueryKey = () => {
34
+ return reactor.generateQueryKey({
35
+ functionName,
36
+ queryKey: customQueryKey,
37
+ });
38
+ };
39
+ // Query function - accepts QueryFunctionContext
40
+ const queryFn = async (context) => {
41
+ // pageParam is typed as unknown in QueryFunctionContext, but we know its type
42
+ const pageParam = context.pageParam;
43
+ const args = getArgs(pageParam);
44
+ const result = await reactor.callMethod({
45
+ functionName,
46
+ args,
47
+ callConfig,
48
+ });
49
+ return result;
50
+ };
51
+ // Get infinite query options for fetchInfiniteQuery
52
+ const getInfiniteQueryOptions = () => ({
53
+ queryKey: getQueryKey(),
54
+ queryFn,
55
+ initialPageParam,
56
+ getNextPageParam,
57
+ staleTime,
58
+ });
59
+ // Fetch function for loaders (cache-first, fetches first page)
60
+ const fetch = async () => {
61
+ // Use ensureInfiniteQueryData to get cached data or fetch if stale
62
+ const result = await reactor.queryClient.ensureInfiniteQueryData(getInfiniteQueryOptions());
63
+ // Result is already InfiniteData format
64
+ return select ? select(result) : result;
65
+ };
66
+ // Implementation
67
+ const useSuspenseInfiniteQueryHook = (options) => {
68
+ // Chain the selects: raw -> config.select -> options.select
69
+ const chainedSelect = (rawData) => {
70
+ const firstPass = select ? select(rawData) : rawData;
71
+ if (options?.select) {
72
+ return options.select(firstPass);
73
+ }
74
+ return firstPass;
75
+ };
76
+ return useSuspenseInfiniteQuery({
77
+ queryKey: getQueryKey(),
78
+ queryFn,
79
+ initialPageParam,
80
+ getNextPageParam,
81
+ getPreviousPageParam,
82
+ maxPages,
83
+ staleTime,
84
+ ...rest,
85
+ ...options,
86
+ select: chainedSelect,
87
+ }, reactor.queryClient);
88
+ };
89
+ // Refetch/invalidate function
90
+ const refetch = async () => {
91
+ const queryKey = getQueryKey();
92
+ await reactor.queryClient.refetchQueries({ queryKey });
93
+ };
94
+ // Get data from cache without fetching
95
+ const getCacheData = (selectFn) => {
96
+ const queryKey = getQueryKey();
97
+ const cachedRawData = reactor.queryClient.getQueryData(queryKey);
98
+ if (cachedRawData === undefined) {
99
+ return undefined;
100
+ }
101
+ // Apply config.select to raw cache data
102
+ const selectedData = (select ? select(cachedRawData) : cachedRawData);
103
+ // Apply optional select parameter
104
+ if (selectFn) {
105
+ return selectFn(selectedData);
106
+ }
107
+ return selectedData;
108
+ };
109
+ return {
110
+ fetch,
111
+ useSuspenseInfiniteQuery: useSuspenseInfiniteQueryHook,
112
+ refetch,
113
+ getQueryKey,
114
+ getCacheData,
115
+ };
116
+ };
117
+ // ============================================================================
118
+ // Factory Function
119
+ // ============================================================================
120
+ export function createSuspenseInfiniteQuery(reactor, config) {
121
+ return createSuspenseInfiniteQueryImpl(reactor, config);
122
+ }
123
+ // ============================================================================
124
+ // Factory with Dynamic Args
125
+ // ============================================================================
126
+ /**
127
+ * Create a suspense infinite query factory that accepts getArgs at call time.
128
+ * Useful when pagination logic varies by context.
129
+ *
130
+ * @template A - The actor interface type
131
+ * @template M - The method name on the actor
132
+ * @template T - The transformation key (identity, display, etc.)
133
+ * @template TPageParam - The page parameter type
134
+ * @template TSelected - The type returned after select transformation
135
+ *
136
+ * @param reactor - The Reactor instance
137
+ * @param config - Suspense infinite query configuration (without getArgs)
138
+ * @returns A function that accepts getArgs and returns an SuspenseActorInfiniteQueryResult
139
+ *
140
+ * @example
141
+ * const getPostsQuery = createActorSuspenseInfiniteQueryFactory(reactor, {
142
+ * functionName: "get_posts",
143
+ * initialPageParam: 0,
144
+ * getNextPageParam: (lastPage) => lastPage.nextCursor,
145
+ * })
146
+ *
147
+ * // Create query with specific args builder
148
+ * const userPostsQuery = getPostsQuery((cursor) => [{ userId, cursor, limit: 10 }])
149
+ * const { data, fetchNextPage } = userPostsQuery.useSuspenseInfiniteQuery()
150
+ */
151
+ export function createSuspenseInfiniteQueryFactory(reactor, config) {
152
+ return (getArgs, options) => {
153
+ return createSuspenseInfiniteQueryImpl(reactor, {
154
+ ...config,
155
+ ...options,
156
+ getArgs,
157
+ });
158
+ };
159
+ }
160
+ //# sourceMappingURL=createSuspenseInfiniteQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSuspenseInfiniteQuery.js","sourceRoot":"","sources":["../src/createSuspenseInfiniteQuery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Suspense Query Factory - Generic wrapper for React Suspense-based canister data
3
+ *
4
+ * Creates unified fetch/hook/refetch 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, NoInfer } from "./types";
23
+ export declare function createSuspenseQuery<A, T extends TransformKey, M extends FunctionName<A> = FunctionName<A>, TSelected = QueryFnData<A, M, T>>(reactor: Reactor<A, T>, config: SuspenseQueryConfig<NoInfer<A>, M, T, TSelected>): SuspenseQueryResult<QueryFnData<A, M, T>, TSelected, QueryError<A, M, T>>;
24
+ export declare function createSuspenseQueryFactory<A, T extends TransformKey, M extends FunctionName<A> = FunctionName<A>, TSelected = QueryFnData<A, M, T>>(reactor: Reactor<A, T>, config: SuspenseQueryFactoryConfig<NoInfer<A>, M, T, TSelected>): (args: ReactorArgs<A, M, T>) => SuspenseQueryResult<QueryFnData<A, M, T>, TSelected, QueryError<A, M, T>>;
25
+ //# sourceMappingURL=createSuspenseQuery.d.ts.map
@@ -0,0 +1 @@
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;AAEzB,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,mBAAmB,EAEnB,mBAAmB,EACnB,0BAA0B,EAC1B,OAAO,EACR,MAAM,SAAS,CAAA;AAqHhB,wBAAgB,mBAAmB,CACjC,CAAC,EACD,CAAC,SAAS,YAAY,EACtB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EAC3C,SAAS,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAEhC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,GACvD,mBAAmB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAK3E;AAMD,wBAAgB,0BAA0B,CACxC,CAAC,EACD,CAAC,SAAS,YAAY,EACtB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EAC3C,SAAS,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAEhC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,MAAM,EAAE,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,GAC9D,CACD,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KACvB,mBAAmB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAgC7E"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Suspense Query Factory - Generic wrapper for React Suspense-based canister data
3
+ *
4
+ * Creates unified fetch/hook/refetch 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 { useSuspenseQuery } from "@tanstack/react-query";
22
+ // ============================================================================
23
+ // Internal Implementation
24
+ // ============================================================================
25
+ const createSuspenseQueryImpl = (reactor, config) => {
26
+ const { functionName, args, staleTime = 5 * 60 * 1000, select, queryKey: customQueryKey, ...rest } = config;
27
+ const params = {
28
+ functionName,
29
+ args,
30
+ queryKey: customQueryKey,
31
+ };
32
+ // Get query key from actor manager
33
+ const getQueryKey = () => {
34
+ return reactor.generateQueryKey(params);
35
+ };
36
+ // Fetch function for loaders (cache-first)
37
+ const fetch = async () => {
38
+ const result = await reactor.fetchQuery(params);
39
+ return select ? select(result) : result;
40
+ };
41
+ // Implementation
42
+ const useSuspenseQueryHook = (options) => {
43
+ const baseOptions = reactor.getQueryOptions(params);
44
+ // Chain the selects: raw -> config.select -> options.select
45
+ const chainedSelect = (rawData) => {
46
+ const firstPass = config.select ? config.select(rawData) : rawData;
47
+ if (options?.select) {
48
+ return options.select(firstPass);
49
+ }
50
+ return firstPass;
51
+ };
52
+ return useSuspenseQuery({
53
+ queryKey: baseOptions.queryKey,
54
+ staleTime,
55
+ ...rest,
56
+ ...options,
57
+ queryFn: baseOptions.queryFn,
58
+ select: chainedSelect,
59
+ }, reactor.queryClient);
60
+ };
61
+ // Refetch/invalidate function
62
+ const refetch = async () => {
63
+ const queryKey = getQueryKey();
64
+ await reactor.queryClient.refetchQueries({ queryKey });
65
+ };
66
+ // Get data from cache without fetching
67
+ const getCacheData = (selectFn) => {
68
+ const cachedRawData = reactor.getQueryData(params);
69
+ if (cachedRawData === undefined) {
70
+ return undefined;
71
+ }
72
+ // Apply config.select to raw cache data
73
+ const selectedData = (config.select ? config.select(cachedRawData) : cachedRawData);
74
+ // Apply optional select parameter
75
+ if (selectFn) {
76
+ return selectFn(selectedData);
77
+ }
78
+ return selectedData;
79
+ };
80
+ return {
81
+ fetch,
82
+ useSuspenseQuery: useSuspenseQueryHook,
83
+ refetch,
84
+ getQueryKey,
85
+ getCacheData,
86
+ };
87
+ };
88
+ // ============================================================================
89
+ // Factory Function
90
+ // ============================================================================
91
+ export function createSuspenseQuery(reactor, config) {
92
+ return createSuspenseQueryImpl(reactor, config);
93
+ }
94
+ // ============================================================================
95
+ // Convenience: Create suspense query with dynamic args
96
+ // ============================================================================
97
+ export function createSuspenseQueryFactory(reactor, config) {
98
+ const cache = new Map();
99
+ return (args) => {
100
+ const key = reactor.generateQueryKey({
101
+ functionName: config.functionName,
102
+ args,
103
+ });
104
+ const cacheKey = JSON.stringify(key);
105
+ if (cache.has(cacheKey)) {
106
+ return cache.get(cacheKey);
107
+ }
108
+ const result = createSuspenseQueryImpl(reactor, {
109
+ ...config,
110
+ args,
111
+ });
112
+ cache.set(cacheKey, result);
113
+ return result;
114
+ };
115
+ }
116
+ //# sourceMappingURL=createSuspenseQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSuspenseQuery.js","sourceRoot":"","sources":["../src/createSuspenseQuery.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,6 @@
1
- export * from "./useActor";
2
- export * from "./useActorManager";
1
+ export { useActorQuery as useReactorQuery } from "./useActorQuery";
2
+ export { useActorMutation as useReactorMutation } from "./useActorMutation";
3
+ export { useActorSuspenseQuery as useReactorSuspenseQuery } from "./useActorSuspenseQuery";
4
+ export { useActorInfiniteQuery as useReactorInfiniteQuery } from "./useActorInfiniteQuery";
5
+ export { useActorSuspenseInfiniteQuery as useReactorSuspenseInfiniteQuery } from "./useActorSuspenseInfiniteQuery";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,gBAAgB,IAAI,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAE,qBAAqB,IAAI,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAC1F,OAAO,EAAE,qBAAqB,IAAI,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAC1F,OAAO,EAAE,6BAA6B,IAAI,+BAA+B,EAAE,MAAM,iCAAiC,CAAA"}
@@ -1,18 +1,6 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./useActor"), exports);
18
- __exportStar(require("./useActorManager"), exports);
1
+ export { useActorQuery as useReactorQuery } from "./useActorQuery";
2
+ export { useActorMutation as useReactorMutation } from "./useActorMutation";
3
+ export { useActorSuspenseQuery as useReactorSuspenseQuery } from "./useActorSuspenseQuery";
4
+ export { useActorInfiniteQuery as useReactorInfiniteQuery } from "./useActorInfiniteQuery";
5
+ export { useActorSuspenseInfiniteQuery as useReactorSuspenseInfiniteQuery } from "./useActorSuspenseInfiniteQuery";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,gBAAgB,IAAI,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAE,qBAAqB,IAAI,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAC1F,OAAO,EAAE,qBAAqB,IAAI,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAC1F,OAAO,EAAE,6BAA6B,IAAI,+BAA+B,EAAE,MAAM,iCAAiC,CAAA"}
@@ -0,0 +1,37 @@
1
+ import { QueryKey, UseInfiniteQueryResult, InfiniteData } from "@tanstack/react-query";
2
+ import { FunctionName, Reactor, TransformKey, ReactorArgs, ReactorReturnOk, ReactorReturnErr } from "@ic-reactor/core";
3
+ import { CallConfig } from "@icp-sdk/core/agent";
4
+ export interface UseActorInfiniteQueryParameters<A, M extends FunctionName<A>, T extends TransformKey = "candid", TPageParam = unknown> {
5
+ reactor: Reactor<A, T>;
6
+ functionName: M;
7
+ getArgs: (pageParam: TPageParam) => ReactorArgs<A, M, T>;
8
+ callConfig?: CallConfig;
9
+ queryKey?: QueryKey;
10
+ initialPageParam: TPageParam;
11
+ getNextPageParam: (lastPage: ReactorReturnOk<A, M, T>, allPages: ReactorReturnOk<A, M, T>[], lastPageParam: TPageParam, allPageParams: TPageParam[]) => TPageParam | undefined | null;
12
+ getPreviousPageParam?: (firstPage: ReactorReturnOk<A, M, T>, allPages: ReactorReturnOk<A, M, T>[], firstPageParam: TPageParam, allPageParams: TPageParam[]) => TPageParam | undefined | null;
13
+ maxPages?: number;
14
+ enabled?: boolean;
15
+ staleTime?: number;
16
+ gcTime?: number;
17
+ refetchOnWindowFocus?: boolean;
18
+ refetchOnMount?: boolean;
19
+ refetchOnReconnect?: boolean;
20
+ select?: (data: InfiniteData<ReactorReturnOk<A, M, T>, TPageParam>) => InfiniteData<ReactorReturnOk<A, M, T>, TPageParam>;
21
+ }
22
+ export type UseActorInfiniteQueryConfig<A, M extends FunctionName<A>, T extends TransformKey = "candid", TPageParam = unknown> = Omit<UseActorInfiniteQueryParameters<A, M, T, TPageParam>, "reactor">;
23
+ export type UseActorInfiniteQueryResult<A, M extends FunctionName<A>, T extends TransformKey = "candid", TPageParam = unknown> = UseInfiniteQueryResult<InfiniteData<ReactorReturnOk<A, M, T>, TPageParam>, ReactorReturnErr<A, M, T>>;
24
+ /**
25
+ * Hook for executing infinite/paginated query calls on a canister.
26
+ *
27
+ * @example
28
+ * const { data, fetchNextPage, hasNextPage } = useActorInfiniteQuery({
29
+ * reactor,
30
+ * functionName: "getItems",
31
+ * getArgs: (pageParam) => [{ offset: pageParam, limit: 10 }],
32
+ * initialPageParam: 0,
33
+ * getNextPageParam: (lastPage) => lastPage.nextOffset,
34
+ * })
35
+ */
36
+ export declare const useActorInfiniteQuery: <A, M extends FunctionName<A>, T extends TransformKey = "candid", TPageParam = unknown>({ reactor, functionName, getArgs, callConfig, queryKey, ...options }: UseActorInfiniteQueryParameters<A, M, T, TPageParam>) => UseActorInfiniteQueryResult<A, M, T, TPageParam>;
37
+ //# sourceMappingURL=useActorInfiniteQuery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useActorInfiniteQuery.d.ts","sourceRoot":"","sources":["../../src/hooks/useActorInfiniteQuery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { useMemo, useCallback } from "react";
2
+ import { useInfiniteQuery, } from "@tanstack/react-query";
3
+ /**
4
+ * Hook for executing infinite/paginated query calls on a canister.
5
+ *
6
+ * @example
7
+ * const { data, fetchNextPage, hasNextPage } = useActorInfiniteQuery({
8
+ * reactor,
9
+ * functionName: "getItems",
10
+ * getArgs: (pageParam) => [{ offset: pageParam, limit: 10 }],
11
+ * initialPageParam: 0,
12
+ * getNextPageParam: (lastPage) => lastPage.nextOffset,
13
+ * })
14
+ */
15
+ export const useActorInfiniteQuery = ({ reactor, functionName, getArgs, callConfig, queryKey, ...options }) => {
16
+ // Memoize queryKey to prevent unnecessary re-calculations
17
+ const baseQueryKey = useMemo(() => queryKey ?? reactor.generateQueryKey({ functionName }), [queryKey, reactor, functionName]);
18
+ // Memoize queryFn to prevent recreation on every render
19
+ const queryFn = useCallback(async ({ pageParam }) => {
20
+ const args = getArgs(pageParam);
21
+ return reactor.callMethod({
22
+ functionName,
23
+ args,
24
+ callConfig,
25
+ });
26
+ }, [reactor, functionName, getArgs, callConfig]);
27
+ return useInfiniteQuery({
28
+ queryKey: baseQueryKey,
29
+ queryFn,
30
+ ...options,
31
+ }, reactor.queryClient);
32
+ };
33
+ //# sourceMappingURL=useActorInfiniteQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useActorInfiniteQuery.js","sourceRoot":"","sources":["../../src/hooks/useActorInfiniteQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EAEL,gBAAgB,GAGjB,MAAM,uBAAuB,CAAA;AAgE9B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAKnC,EACA,OAAO,EACP,YAAY,EACZ,OAAO,EACP,UAAU,EACV,QAAQ,EACR,GAAG,OAAO,EAMX,EAAoD,EAAE;IACrD,0DAA0D;IAC1D,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAC,EAC5D,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAClC,CAAA;IAED,wDAAwD;IACxD,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,EAAE,EAAE,SAAS,EAA6B,EAAE,EAAE;QACjD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;QAC/B,OAAO,OAAO,CAAC,UAAU,CAAC;YACxB,YAAY;YACZ,IAAI;YACJ,UAAU;SACX,CAAC,CAAA;IACJ,CAAC,EACD,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,CAC7C,CAAA;IAED,OAAO,gBAAgB,CACrB;QACE,QAAQ,EAAE,YAAY;QACtB,OAAO;QACP,GAAG,OAAO;KACJ,EACR,OAAO,CAAC,WAAW,CACgC,CAAA;AACvD,CAAC,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { UseMutationOptions, UseMutationResult, QueryKey } from "@tanstack/react-query";
2
+ import { Reactor, ReactorArgs, ReactorReturnOk, FunctionName, TransformKey, ReactorReturnErr } from "@ic-reactor/core";
3
+ import { CallConfig } from "@icp-sdk/core/agent";
4
+ export interface UseActorMutationParameters<A, M extends FunctionName<A>, T extends TransformKey = "candid"> extends Omit<UseMutationOptions<ReactorReturnOk<A, M, T>, ReactorReturnErr<A, M, T>, ReactorArgs<A, M, T>>, "mutationFn"> {
5
+ reactor: Reactor<A, T>;
6
+ functionName: M;
7
+ callConfig?: CallConfig;
8
+ refetchQueries?: QueryKey[];
9
+ }
10
+ export type UseActorMutationConfig<A, M extends FunctionName<A>, T extends TransformKey = "candid"> = Omit<UseActorMutationParameters<A, M, T>, "reactor">;
11
+ export type UseActorMutationResult<A, M extends FunctionName<A>, T extends TransformKey = "candid"> = UseMutationResult<ReactorReturnOk<A, M, T>, ReactorReturnErr<A, M, T>, ReactorArgs<A, M, T>>;
12
+ /**
13
+ * Hook for executing mutation calls on a canister.
14
+ *
15
+ * @example
16
+ * const { mutate, isPending } = useActorMutation({
17
+ * reactor,
18
+ * functionName: "transfer",
19
+ * onSuccess: () => console.log("Success!"),
20
+ * })
21
+ */
22
+ export declare const useActorMutation: <A, M extends FunctionName<A>, T extends TransformKey = "candid">({ reactor, functionName, refetchQueries, onSuccess, callConfig, ...options }: UseActorMutationParameters<A, M, T>) => UseActorMutationResult<A, M, T>;
23
+ //# sourceMappingURL=useActorMutation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useActorMutation.d.ts","sourceRoot":"","sources":["../../src/hooks/useActorMutation.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,EACT,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,OAAO,EACP,WAAW,EACX,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,MAAM,WAAW,0BAA0B,CACzC,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,CACjC,SAAQ,IAAI,CACZ,kBAAkB,CAChB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACxB,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACzB,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACrB,EACD,YAAY,CACb;IACC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACtB,YAAY,EAAE,CAAC,CAAA;IACf,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAA;CAC5B;AAED,MAAM,MAAM,sBAAsB,CAChC,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,IAC/B,IAAI,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;AAExD,MAAM,MAAM,sBAAsB,CAChC,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,IAC/B,iBAAiB,CACnB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACxB,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACzB,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACrB,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,GAC3B,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,EACjC,8EAOC,0BAA0B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAmDtE,CAAA"}