@ic-reactor/react 3.13.0 → 4.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 (174) hide show
  1. package/README.md +237 -787
  2. package/dist/index.d.ts +260 -16
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +471 -23
  5. package/dist/index.js.map +1 -1
  6. package/llms.txt +82 -278
  7. package/package.json +11 -39
  8. package/src/index.tsx +612 -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,147 +0,0 @@
1
- import { useMemo } from "react"
2
- import {
3
- QueryKey,
4
- useSuspenseQuery,
5
- QueryObserverOptions,
6
- UseSuspenseQueryResult,
7
- QueryFunction,
8
- } from "@tanstack/react-query"
9
- import {
10
- FunctionName,
11
- Reactor,
12
- TransformKey,
13
- ReactorArgs,
14
- ReactorReturnOk,
15
- ReactorQueryData,
16
- ReactorReturnErr,
17
- } from "@ic-reactor/core"
18
- import { CallConfig } from "@icp-sdk/core/agent"
19
- import {
20
- mountWhileSuspended,
21
- retryOption,
22
- useMountQueryClient,
23
- } from "../utils.js"
24
-
25
- export interface UseActorSuspenseQueryParameters<
26
- Service,
27
- Method extends FunctionName<Service>,
28
- Transform extends TransformKey = "candid",
29
- Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
30
- > extends Omit<
31
- QueryObserverOptions<
32
- ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
33
- ReactorReturnErr<Service, Method, Transform>,
34
- Selected,
35
- ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
36
- QueryKey
37
- >,
38
- "queryKey" | "queryFn"
39
- > {
40
- reactor: Reactor<Service, Transform>
41
- functionName: Method
42
- args?: ReactorArgs<Service, Method, Transform>
43
- callConfig?: CallConfig
44
- queryKey?: QueryKey
45
- }
46
-
47
- export type UseActorSuspenseQueryConfig<
48
- Service,
49
- Method extends FunctionName<Service>,
50
- Transform extends TransformKey = "candid",
51
- Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
52
- > = Omit<
53
- UseActorSuspenseQueryParameters<Service, Method, Transform, Selected>,
54
- "reactor"
55
- >
56
-
57
- export type UseActorSuspenseQueryResult<
58
- Service,
59
- Method extends FunctionName<Service>,
60
- Transform extends TransformKey = "candid",
61
- Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
62
- > = UseSuspenseQueryResult<
63
- Selected,
64
- ReactorReturnErr<Service, Method, Transform>
65
- >
66
-
67
- /**
68
- * Hook for executing suspense-enabled query calls on a canister.
69
- *
70
- * @example
71
- * const { data } = useReactorSuspenseQuery({
72
- * reactor,
73
- * functionName: "getUser",
74
- * args: ["user-123"],
75
- * })
76
- *
77
- * // With select transformation
78
- * const { data } = useReactorSuspenseQuery({
79
- * reactor,
80
- * functionName: "getUser",
81
- * args: ["user-123"],
82
- * select: (user) => user.name,
83
- * })
84
- */
85
- export const useActorSuspenseQuery = <
86
- Service,
87
- Method extends FunctionName<Service>,
88
- Transform extends TransformKey = "candid",
89
- Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
90
- >({
91
- reactor,
92
- functionName,
93
- args,
94
- callConfig,
95
- queryKey: defaultQueryKey,
96
- ...options
97
- }: UseActorSuspenseQueryParameters<
98
- Service,
99
- Method,
100
- Transform,
101
- Selected
102
- >): UseActorSuspenseQueryResult<Service, Method, Transform, Selected> => {
103
- useMountQueryClient(reactor.queryClient)
104
-
105
- // Memoize query options to prevent unnecessary re-computations
106
- // For an update method, the options also carry its default `retry`; see
107
- // `Reactor.getQueryRetry`.
108
- const { queryKey, queryFn, retry } = useMemo(
109
- () =>
110
- reactor.getQueryOptions<Method>({
111
- callConfig,
112
- functionName,
113
- args,
114
- queryKey: defaultQueryKey,
115
- }),
116
- // `canisterId` is mutable reactor state that `setCanisterId` can change,
117
- // while `reactor` itself stays the same object — so it has to be a
118
- // dependency in its own right or the key stays pinned to the old canister.
119
- [
120
- reactor,
121
- reactor.canisterId?.toString(),
122
- callConfig,
123
- functionName,
124
- args,
125
- defaultQueryKey,
126
- ]
127
- )
128
-
129
- try {
130
- return useSuspenseQuery(
131
- {
132
- // Suspense queries don't support skipToken, so cast the queryFn
133
- queryFn: queryFn as QueryFunction<
134
- ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
135
- QueryKey
136
- >,
137
- ...options,
138
- queryKey,
139
- ...retryOption(options.retry, retry),
140
- },
141
- reactor.queryClient
142
- )
143
- } catch (thrown) {
144
- mountWhileSuspended(reactor.queryClient, thrown)
145
- throw thrown
146
- }
147
- }
package/src/index.ts DELETED
@@ -1,31 +0,0 @@
1
- // Re-export core (following TanStack Query's pattern)
2
- // Users can import everything from @ic-reactor/react without needing @ic-reactor/core
3
- export * from "@ic-reactor/core"
4
-
5
- // Re-export hooks
6
- export * from "./hooks/index.js"
7
-
8
- // Validation utilities for React
9
- export * from "./validation.js"
10
-
11
- // React-specific exports
12
- export * from "./createActorHooks.js"
13
- export * from "./defineReactor.js"
14
- export * from "./defineDisplayReactor.js"
15
- export * from "./createReactorProvider.js"
16
-
17
- export * from "./createQuery.js"
18
- export * from "./createSuspenseQuery.js"
19
- export * from "./createInfiniteQuery.js"
20
- export * from "./createSuspenseInfiniteQuery.js"
21
- export * from "./createMutation.js"
22
-
23
- export * from "./auth/index.js"
24
-
25
- export * from "./types.js"
26
-
27
- // TanStack Query's marker for a query whose args are not known yet, which the
28
- // non-suspense query hooks and createQueryFactory take in place of args. It is
29
- // the same symbol as @tanstack/react-query's, so either import works.
30
- export { skipToken } from "@tanstack/react-query"
31
- export type { SkipToken } from "@tanstack/react-query"
@@ -1,81 +0,0 @@
1
- /**
2
- * Which `AuthenticationManager`s a `createReactorProvider` value owns, for the
3
- * provider to dispose when its tree unmounts. Not part of the public API.
4
- *
5
- * A value owns the managers built for it: those constructed while its factory
6
- * ran, and those a `defineReactor` or `defineDisplayReactor` result in it
7
- * builds later, on first use. A manager built elsewhere and handed in, such as
8
- * an app-wide one every provider shares, belongs to whoever built it, and
9
- * disposing it on each remount would stop its client following the session.
10
- *
11
- * A result's `authentication` is a getter that builds the manager on first
12
- * read, and building one loads the optional `@icp-sdk/auth` peer in a browser.
13
- * A provider that read it to release the manager would build one only to
14
- * dispose it, for every reactor whose tree never signed in. Each result
15
- * registers a reader here instead, which answers without building anything.
16
- *
17
- * Kept apart from `defineReactorShared.ts` so that the provider does not pull
18
- * that module's reactor setup into an app that builds its reactors by hand.
19
- */
20
- import type { AuthenticationManager } from "./auth/authentication-manager.js"
21
-
22
- const readers = new WeakMap<object, () => AuthenticationManager | undefined>()
23
-
24
- /** The managers constructed during a running {@link collectAuthentication}. */
25
- let collecting: Set<AuthenticationManager> | undefined
26
-
27
- /**
28
- * Records how to read the manager `owner` built, once it has built one.
29
- *
30
- * @internal
31
- */
32
- export function registerAuthentication(
33
- owner: object,
34
- read: () => AuthenticationManager | undefined
35
- ): void {
36
- readers.set(owner, read)
37
- }
38
-
39
- /**
40
- * The manager a registered result built, or `undefined` for one that has not
41
- * built one yet, for one that was handed a manager, and for anything that was
42
- * never registered.
43
- *
44
- * @internal
45
- */
46
- export function authenticationOf(
47
- owner: object
48
- ): AuthenticationManager | undefined {
49
- return readers.get(owner)?.()
50
- }
51
-
52
- /**
53
- * Called by each `AuthenticationManager` as it is constructed.
54
- *
55
- * @internal
56
- */
57
- export function recordAuthentication(manager: AuthenticationManager): void {
58
- collecting?.add(manager)
59
- }
60
-
61
- /**
62
- * Runs `build` and returns what it returned, with every manager constructed
63
- * while it ran. `build` runs synchronously, so a server rendering several
64
- * requests at once cannot interleave another request's managers.
65
- *
66
- * @internal
67
- */
68
- export function collectAuthentication<T>(build: () => T): {
69
- value: T
70
- built: AuthenticationManager[]
71
- } {
72
- const outer = collecting
73
- const built = new Set<AuthenticationManager>()
74
- collecting = built
75
- try {
76
- const value = build()
77
- return { value, built: [...built] }
78
- } finally {
79
- collecting = outer
80
- }
81
- }
package/src/server.ts DELETED
@@ -1,23 +0,0 @@
1
- /**
2
- * The `react-server` entry of `@ic-reactor/react`.
3
- *
4
- * React Server Components are bundled with the `react-server` export
5
- * condition, and `package.json` routes that condition here instead of to
6
- * `index.ts`. The main entry also loads every hook, and a bundler rejects a
7
- * hook import anywhere in the server graph, so a server component that
8
- * imported only `Reactor` from it failed to build.
9
- *
10
- * This entry carries the core runtime (`Reactor`, `DisplayReactor`,
11
- * `ClientManager`, the error classes and utilities) and the framework-free
12
- * validation helpers, and nothing that imports React. A hook or a hook factory
13
- * imported in a server component is therefore a missing export at build time,
14
- * which is the error to get: those only run in a `"use client"` module.
15
- *
16
- * TypeScript does not read the `react-server` condition, so types still come
17
- * from the main entry.
18
- */
19
- export * from "@ic-reactor/core"
20
-
21
- // Plain functions over `ValidationError`, useful in a server action that maps
22
- // a rejected call onto form field errors.
23
- export * from "./validation.js"
package/src/testing.ts DELETED
@@ -1,18 +0,0 @@
1
- /**
2
- * `@ic-reactor/react/testing`: the testing utilities of
3
- * `@ic-reactor/core/testing`, re-exported for an app that depends on
4
- * `@ic-reactor/react` alone. The main entry re-exports `@ic-reactor/core` the
5
- * same way, but a package manager that installs strictly does not let such an
6
- * app import `@ic-reactor/core/testing` itself.
7
- *
8
- * Nothing here imports React, and neither the main entry nor the
9
- * `react-server` entry imports this one, so none of it reaches an app bundle.
10
- *
11
- * @example
12
- * ```typescript
13
- * import { createTestCanister, installFakeReplica } from "@ic-reactor/react/testing"
14
- * ```
15
- *
16
- * @packageDocumentation
17
- */
18
- export * from "@ic-reactor/core/testing"