effect 4.0.3 → 4.0.4

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 (207) hide show
  1. package/AGENTS.md +24 -0
  2. package/CLAUDE.md +24 -0
  3. package/ai-docs/package.json +2 -2
  4. package/ai-docs/src/52_graphql/10_basics.ts +111 -0
  5. package/ai-docs/src/52_graphql/20_testing.ts +45 -0
  6. package/ai-docs/src/52_graphql/30_batching.ts +116 -0
  7. package/ai-docs/src/52_graphql/40_aliased-batching.ts +122 -0
  8. package/ai-docs/src/52_graphql/50_errors-and-retries.ts +74 -0
  9. package/ai-docs/src/52_graphql/index.md +6 -0
  10. package/dist/Context.d.ts.map +1 -1
  11. package/dist/Context.js +9 -0
  12. package/dist/Context.js.map +1 -1
  13. package/dist/RequestResolver.d.ts.map +1 -1
  14. package/dist/RequestResolver.js +4 -10
  15. package/dist/RequestResolver.js.map +1 -1
  16. package/dist/Scheduler.d.ts +9 -0
  17. package/dist/Scheduler.d.ts.map +1 -1
  18. package/dist/Scheduler.js +9 -0
  19. package/dist/Scheduler.js.map +1 -1
  20. package/dist/Schema.d.ts +8 -0
  21. package/dist/Schema.d.ts.map +1 -1
  22. package/dist/Schema.js +7 -0
  23. package/dist/Schema.js.map +1 -1
  24. package/dist/SchemaGetter.d.ts +4 -0
  25. package/dist/SchemaGetter.d.ts.map +1 -1
  26. package/dist/SchemaGetter.js +52 -33
  27. package/dist/SchemaGetter.js.map +1 -1
  28. package/dist/Sink.d.ts.map +1 -1
  29. package/dist/Sink.js +38 -17
  30. package/dist/Sink.js.map +1 -1
  31. package/dist/Stream.d.ts +11 -0
  32. package/dist/Stream.d.ts.map +1 -1
  33. package/dist/Stream.js +16 -1
  34. package/dist/Stream.js.map +1 -1
  35. package/dist/Utils.js +8 -3
  36. package/dist/Utils.js.map +1 -1
  37. package/dist/ai/AnthropicStructuredOutput.js +0 -2
  38. package/dist/ai/AnthropicStructuredOutput.js.map +1 -1
  39. package/dist/ai/Chat.d.ts +2 -2
  40. package/dist/ai/Chat.d.ts.map +1 -1
  41. package/dist/ai/LanguageModel.d.ts +38 -7
  42. package/dist/ai/LanguageModel.d.ts.map +1 -1
  43. package/dist/ai/LanguageModel.js +25 -7
  44. package/dist/ai/LanguageModel.js.map +1 -1
  45. package/dist/ai/McpServer.d.ts +55 -0
  46. package/dist/ai/McpServer.d.ts.map +1 -1
  47. package/dist/ai/McpServer.js +132 -22
  48. package/dist/ai/McpServer.js.map +1 -1
  49. package/dist/ai/Prompt.d.ts.map +1 -1
  50. package/dist/ai/Prompt.js +28 -5
  51. package/dist/ai/Prompt.js.map +1 -1
  52. package/dist/ai/Response.d.ts +4 -3
  53. package/dist/ai/Response.d.ts.map +1 -1
  54. package/dist/ai/Response.js.map +1 -1
  55. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  56. package/dist/cluster/ClusterWorkflowEngine.js +46 -8
  57. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  58. package/dist/cluster/Sharding.d.ts.map +1 -1
  59. package/dist/cluster/Sharding.js +6 -4
  60. package/dist/cluster/Sharding.js.map +1 -1
  61. package/dist/encoding/Sse.d.ts +6 -0
  62. package/dist/encoding/Sse.d.ts.map +1 -1
  63. package/dist/encoding/Sse.js +62 -70
  64. package/dist/encoding/Sse.js.map +1 -1
  65. package/dist/graphql/GraphQL.d.ts +349 -0
  66. package/dist/graphql/GraphQL.d.ts.map +1 -0
  67. package/dist/graphql/GraphQL.js +207 -0
  68. package/dist/graphql/GraphQL.js.map +1 -0
  69. package/dist/graphql/GraphQLClient.d.ts +562 -0
  70. package/dist/graphql/GraphQLClient.d.ts.map +1 -0
  71. package/dist/graphql/GraphQLClient.js +498 -0
  72. package/dist/graphql/GraphQLClient.js.map +1 -0
  73. package/dist/graphql/GraphQLClientError.d.ts +445 -0
  74. package/dist/graphql/GraphQLClientError.d.ts.map +1 -0
  75. package/dist/graphql/GraphQLClientError.js +479 -0
  76. package/dist/graphql/GraphQLClientError.js.map +1 -0
  77. package/dist/graphql/GraphQLGroup.d.ts +118 -0
  78. package/dist/graphql/GraphQLGroup.d.ts.map +1 -0
  79. package/dist/graphql/GraphQLGroup.js +109 -0
  80. package/dist/graphql/GraphQLGroup.js.map +1 -0
  81. package/dist/graphql/GraphQLMiddleware.d.ts +249 -0
  82. package/dist/graphql/GraphQLMiddleware.d.ts.map +1 -0
  83. package/dist/graphql/GraphQLMiddleware.js +130 -0
  84. package/dist/graphql/GraphQLMiddleware.js.map +1 -0
  85. package/dist/graphql/GraphQLProtocol.d.ts +731 -0
  86. package/dist/graphql/GraphQLProtocol.d.ts.map +1 -0
  87. package/dist/graphql/GraphQLProtocol.js +719 -0
  88. package/dist/graphql/GraphQLProtocol.js.map +1 -0
  89. package/dist/graphql/GraphQLResolver.d.ts +453 -0
  90. package/dist/graphql/GraphQLResolver.d.ts.map +1 -0
  91. package/dist/graphql/GraphQLResolver.js +552 -0
  92. package/dist/graphql/GraphQLResolver.js.map +1 -0
  93. package/dist/graphql/index.d.ts +40 -0
  94. package/dist/graphql/index.d.ts.map +1 -0
  95. package/dist/graphql/index.js +41 -0
  96. package/dist/graphql/index.js.map +1 -0
  97. package/dist/http/HttpClient.d.ts +15 -0
  98. package/dist/http/HttpClient.d.ts.map +1 -1
  99. package/dist/http/HttpClient.js +24 -10
  100. package/dist/http/HttpClient.js.map +1 -1
  101. package/dist/http/HttpEffect.d.ts.map +1 -1
  102. package/dist/http/HttpEffect.js +14 -7
  103. package/dist/http/HttpEffect.js.map +1 -1
  104. package/dist/http/HttpMiddleware.d.ts.map +1 -1
  105. package/dist/http/HttpMiddleware.js +31 -32
  106. package/dist/http/HttpMiddleware.js.map +1 -1
  107. package/dist/http/HttpRouter.d.ts +35 -0
  108. package/dist/http/HttpRouter.d.ts.map +1 -1
  109. package/dist/http/HttpRouter.js +35 -0
  110. package/dist/http/HttpRouter.js.map +1 -1
  111. package/dist/http/HttpServerResponse.d.ts +8 -6
  112. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  113. package/dist/http/HttpServerResponse.js +27 -16
  114. package/dist/http/HttpServerResponse.js.map +1 -1
  115. package/dist/http/Multipart.d.ts.map +1 -1
  116. package/dist/http/Multipart.js +15 -1
  117. package/dist/http/Multipart.js.map +1 -1
  118. package/dist/http-api/HttpApiScalar.d.ts +5 -0
  119. package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
  120. package/dist/http-api/HttpApiScalar.js.map +1 -1
  121. package/dist/internal/dateTime.js +40 -35
  122. package/dist/internal/dateTime.js.map +1 -1
  123. package/dist/internal/effect.js +8 -3
  124. package/dist/internal/effect.js.map +1 -1
  125. package/dist/internal/graphql.d.ts +2 -0
  126. package/dist/internal/graphql.d.ts.map +1 -0
  127. package/dist/internal/graphql.js +195 -0
  128. package/dist/internal/graphql.js.map +1 -0
  129. package/dist/internal/graphqlHeaders.d.ts +4 -0
  130. package/dist/internal/graphqlHeaders.d.ts.map +1 -0
  131. package/dist/internal/graphqlHeaders.js +11 -0
  132. package/dist/internal/graphqlHeaders.js.map +1 -0
  133. package/dist/internal/request.js +20 -1
  134. package/dist/internal/request.js.map +1 -1
  135. package/dist/internal/schema/toCodeDocument.js +4 -1
  136. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  137. package/dist/internal/schema/toJsonSchemaDocument.js +29 -5
  138. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
  139. package/dist/internal/version.js +1 -1
  140. package/dist/net/Host.d.ts +49 -0
  141. package/dist/net/Host.d.ts.map +1 -1
  142. package/dist/net/Host.js +55 -0
  143. package/dist/net/Host.js.map +1 -1
  144. package/dist/net/NetAddress.d.ts +8 -0
  145. package/dist/net/NetAddress.d.ts.map +1 -1
  146. package/dist/net/NetAddress.js +8 -0
  147. package/dist/net/NetAddress.js.map +1 -1
  148. package/dist/rpc/RpcServer.d.ts.map +1 -1
  149. package/dist/rpc/RpcServer.js +36 -9
  150. package/dist/rpc/RpcServer.js.map +1 -1
  151. package/dist/socket/Socket.d.ts +6 -0
  152. package/dist/socket/Socket.d.ts.map +1 -1
  153. package/dist/socket/Socket.js.map +1 -1
  154. package/dist/workflow/DurableDeferred.d.ts.map +1 -1
  155. package/dist/workflow/DurableDeferred.js +32 -3
  156. package/dist/workflow/DurableDeferred.js.map +1 -1
  157. package/dist/workflow/WorkflowEngine.d.ts +24 -2
  158. package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
  159. package/dist/workflow/WorkflowEngine.js +11 -2
  160. package/dist/workflow/WorkflowEngine.js.map +1 -1
  161. package/package.json +6 -3
  162. package/src/Context.ts +9 -0
  163. package/src/RequestResolver.ts +4 -10
  164. package/src/Scheduler.ts +9 -0
  165. package/src/Schema.ts +8 -0
  166. package/src/SchemaGetter.ts +47 -35
  167. package/src/Sink.ts +45 -18
  168. package/src/Stream.ts +33 -4
  169. package/src/Utils.ts +8 -5
  170. package/src/ai/AnthropicStructuredOutput.ts +2 -2
  171. package/src/ai/Chat.ts +2 -2
  172. package/src/ai/LanguageModel.ts +96 -24
  173. package/src/ai/McpServer.ts +244 -90
  174. package/src/ai/Prompt.ts +24 -10
  175. package/src/ai/Response.ts +6 -3
  176. package/src/cluster/ClusterWorkflowEngine.ts +51 -12
  177. package/src/cluster/Sharding.ts +12 -9
  178. package/src/encoding/Sse.ts +69 -79
  179. package/src/graphql/GraphQL.ts +494 -0
  180. package/src/graphql/GraphQLClient.ts +912 -0
  181. package/src/graphql/GraphQLClientError.ts +542 -0
  182. package/src/graphql/GraphQLGroup.ts +167 -0
  183. package/src/graphql/GraphQLMiddleware.ts +253 -0
  184. package/src/graphql/GraphQLProtocol.ts +1286 -0
  185. package/src/graphql/GraphQLResolver.ts +1010 -0
  186. package/src/graphql/index.ts +48 -0
  187. package/src/http/HttpClient.ts +54 -10
  188. package/src/http/HttpEffect.ts +11 -5
  189. package/src/http/HttpMiddleware.ts +33 -34
  190. package/src/http/HttpRouter.ts +35 -0
  191. package/src/http/HttpServerResponse.ts +28 -16
  192. package/src/http/Multipart.ts +17 -1
  193. package/src/http-api/HttpApiScalar.ts +5 -0
  194. package/src/internal/dateTime.ts +13 -10
  195. package/src/internal/effect.ts +8 -3
  196. package/src/internal/graphql.ts +263 -0
  197. package/src/internal/graphqlHeaders.ts +11 -0
  198. package/src/internal/request.ts +31 -3
  199. package/src/internal/schema/toCodeDocument.ts +7 -1
  200. package/src/internal/schema/toJsonSchemaDocument.ts +34 -2
  201. package/src/internal/version.ts +1 -1
  202. package/src/net/Host.ts +72 -0
  203. package/src/net/NetAddress.ts +9 -0
  204. package/src/rpc/RpcServer.ts +55 -15
  205. package/src/socket/Socket.ts +6 -0
  206. package/src/workflow/DurableDeferred.ts +43 -5
  207. package/src/workflow/WorkflowEngine.ts +48 -4
@@ -0,0 +1,562 @@
1
+ import * as Context from "../Context.ts";
2
+ import * as Duration from "../Duration.ts";
3
+ import * as Effect from "../Effect.ts";
4
+ import * as Headers from "../http/Headers.ts";
5
+ import * as UrlParams from "../http/UrlParams.ts";
6
+ import * as Layer from "../Layer.ts";
7
+ import * as Schedule from "../Schedule.ts";
8
+ import * as Stream from "../Stream.ts";
9
+ import type * as GraphQL from "./GraphQL.ts";
10
+ import { GraphQLClientError, type GraphQLError } from "./GraphQLClientError.ts";
11
+ import type * as GraphQLGroup from "./GraphQLGroup.ts";
12
+ import type * as GraphQLMiddleware from "./GraphQLMiddleware.ts";
13
+ import { GraphQLProtocol } from "./GraphQLProtocol.ts";
14
+ /**
15
+ * Decoded `data` and response `errors` for a `{ partial: true }` call.
16
+ * The errors array may be empty.
17
+ *
18
+ * @stability experimental
19
+ * @category models
20
+ * @since 4.0.0
21
+ */
22
+ export interface PartialResult<A> {
23
+ readonly data: A;
24
+ readonly errors: ReadonlyArray<GraphQLError>;
25
+ }
26
+ type Args<Variables, Options> = {} extends Variables ? [variables?: Variables, options?: Options] : [variables: Variables, options?: Options];
27
+ type ArgsWithOptions<Variables, Options> = {} extends Variables ? [variables: Variables | undefined, options: Options] : [variables: Variables, options: Options];
28
+ /**
29
+ * The client method for a query or mutation.
30
+ *
31
+ * **Details**
32
+ *
33
+ * Called as `(variables?, options?)`. Without `partial`, or with
34
+ * `partial: false`, it returns the decoded result and fails with a
35
+ * `ResponseError` on any `errors`. With `partial: true` it returns
36
+ * `{ data, errors }`. `partial` must be a literal `true` or `false`, not
37
+ * an arbitrary `boolean`.
38
+ *
39
+ * An operation without variables is called as `client.Viewer()` or, with
40
+ * options, `client.Viewer(undefined, { headers })`.
41
+ *
42
+ * `headers` and `urlParams` are sent by the HTTP transport, ignored over
43
+ * graphql-ws, and visible to middleware either way as
44
+ * `GraphQLRequest.headers` and `GraphQLRequest.urlParams`. Header options
45
+ * accept `Headers.Input` and are normalized to `Headers.Headers` before
46
+ * middleware runs. `context` provides
47
+ * services for this call only, and removes them from the method's
48
+ * requirements.
49
+ *
50
+ * @stability experimental
51
+ * @category models
52
+ * @since 4.0.0
53
+ */
54
+ export interface OperationMethod<Op extends GraphQL.Any> {
55
+ /** The operation this method runs. */
56
+ readonly operation: Op;
57
+ <R2 = never>(...args: ArgsWithOptions<GraphQL.Variables<Op>, {
58
+ readonly headers?: Headers.Input | undefined;
59
+ readonly urlParams?: UrlParams.Input | undefined;
60
+ readonly context?: Context.Context<R2> | undefined;
61
+ readonly partial: true;
62
+ }>): Effect.Effect<PartialResult<GraphQL.Result<Op>>, GraphQL.Error<Op>, Exclude<GraphQL.Services<Op>, R2>>;
63
+ <R2 = never>(...args: Args<GraphQL.Variables<Op>, {
64
+ readonly headers?: Headers.Input | undefined;
65
+ readonly urlParams?: UrlParams.Input | undefined;
66
+ readonly context?: Context.Context<R2> | undefined;
67
+ readonly partial?: false | undefined;
68
+ }>): Effect.Effect<GraphQL.Result<Op>, GraphQL.Error<Op>, Exclude<GraphQL.Services<Op>, R2>>;
69
+ }
70
+ /**
71
+ * The client method for a subscription. It returns a `Stream` of decoded
72
+ * events; an event with `errors` fails the stream with a `ResponseError`,
73
+ * unless that error is retryable and the client resubscribes (see
74
+ * {@link make}). `headers`, `urlParams` and `context` work as for
75
+ * {@link OperationMethod}.
76
+ *
77
+ * @stability experimental
78
+ * @category models
79
+ * @since 4.0.0
80
+ */
81
+ export interface SubscriptionMethod<Op extends GraphQL.Any> {
82
+ /** The operation this method runs. */
83
+ readonly operation: Op;
84
+ <R2 = never>(...args: Args<GraphQL.Variables<Op>, {
85
+ readonly headers?: Headers.Input | undefined;
86
+ readonly urlParams?: UrlParams.Input | undefined;
87
+ readonly context?: Context.Context<R2> | undefined;
88
+ }>): Stream.Stream<GraphQL.Result<Op>, GraphQL.Error<Op>, Exclude<GraphQL.Services<Op>, R2>>;
89
+ }
90
+ /**
91
+ * The client method type for an operation, by its kind.
92
+ *
93
+ * @stability experimental
94
+ * @category models
95
+ * @since 4.0.0
96
+ */
97
+ export type Method<Op extends GraphQL.Any> = Op["kind"] extends "subscription" ? SubscriptionMethod<Op> : OperationMethod<Op>;
98
+ /**
99
+ * A client: one method per operation, keyed by operation name.
100
+ *
101
+ * @stability experimental
102
+ * @category models
103
+ * @since 4.0.0
104
+ */
105
+ export type GraphQLClient<Ops extends GraphQL.Any> = {
106
+ readonly [Op in Ops as Op["name"]]: Method<Op>;
107
+ };
108
+ /**
109
+ * Derives the client type for all operations in a `GraphQLGroup`.
110
+ *
111
+ * @stability experimental
112
+ * @category utility types
113
+ * @since 4.0.0
114
+ */
115
+ export type FromGroup<Group> = GraphQLClient<GraphQLGroup.Operations<Group>>;
116
+ /**
117
+ * The default subscription retry schedule: exponential from 500 milliseconds
118
+ * with factor 1.5, capped at 5 seconds, and never shorter than the server's
119
+ * `retryAfter`.
120
+ *
121
+ * @stability experimental
122
+ * @category constants
123
+ * @since 4.0.0
124
+ */
125
+ export declare const defaultSubscriptionRetry: Schedule.Schedule<Duration.Duration, GraphQLClientError>;
126
+ /**
127
+ * Builds a client from a group, requiring `GraphQLProtocol` and every
128
+ * middleware service attached to the group or its operations.
129
+ *
130
+ * **Details**
131
+ *
132
+ * Group middleware runs outside operation middleware. Within each level,
133
+ * middleware run in the order attached.
134
+ *
135
+ * `subscriptionRetry` decides how a subscription is retried after it fails
136
+ * with a retryable error: usually a `TransportError`, but also a
137
+ * `ResponseError` whose response carried a valid `Retry-After`, including an
138
+ * event with `errors` on a graphql-sse stream whose response had that header.
139
+ * It defaults to {@link defaultSubscriptionRetry}. Fatal errors are never
140
+ * retried, whatever the schedule. A retry starts a new subscription, so the
141
+ * server may send events again that the stream already emitted.
142
+ *
143
+ * **Example** (A client as a service)
144
+ *
145
+ * ```ts import.meta.vitest
146
+ * import { Context, Effect, Layer, Schema, Stream } from "effect"
147
+ * import { GraphQL, GraphQLClient, GraphQLGroup, GraphQLProtocol } from "effect/graphql"
148
+ *
149
+ * // What the generator emits for viewer.graphql
150
+ * const Viewer = GraphQL.query("Viewer", {
151
+ * document: "query Viewer{viewer{login}}",
152
+ * result: Schema.Struct({ viewer: Schema.Struct({ login: Schema.String }) })
153
+ * })
154
+ * const ViewerGraphQLGroup = GraphQLGroup.make(Viewer)
155
+ *
156
+ * class GitHub extends Context.Service<GitHub>()("app/GitHub", {
157
+ * make: GraphQLClient.make(ViewerGraphQLGroup)
158
+ * }) {}
159
+ *
160
+ * // A scripted transport; use GraphQLProtocol.layerHttp({ url }) for a real server
161
+ * const Scripted = Layer.succeed(GraphQLProtocol.GraphQLProtocol, {
162
+ * execute: () => Effect.succeed({ body: { data: { viewer: { login: "tim" } } } }),
163
+ * subscribe: () => Stream.empty
164
+ * })
165
+ *
166
+ * const program = GitHub.use((github) => github.Viewer()).pipe(
167
+ * Effect.provide(Layer.effect(GitHub, GitHub.make).pipe(Layer.provide(Scripted)))
168
+ * )
169
+ *
170
+ * await Effect.runPromise(program) // => { viewer: { login: "tim" } }
171
+ * ```
172
+ *
173
+ * **Example** (Partial results)
174
+ *
175
+ * ```ts import.meta.vitest
176
+ * import { Effect, Layer, Schema, Stream } from "effect"
177
+ * import { GraphQL, GraphQLClient, GraphQLGroup, GraphQLProtocol } from "effect/graphql"
178
+ *
179
+ * const Repos = GraphQL.query("Repos", {
180
+ * document: "query Repos{a:repository(owner:\"x\",name:\"a\"){name} b:repository(owner:\"x\",name:\"b\"){name}}",
181
+ * result: Schema.Struct({
182
+ * a: Schema.NullOr(Schema.Struct({ name: Schema.String })),
183
+ * b: Schema.NullOr(Schema.Struct({ name: Schema.String }))
184
+ * })
185
+ * })
186
+ *
187
+ * const Scripted = Layer.succeed(GraphQLProtocol.GraphQLProtocol, {
188
+ * execute: () =>
189
+ * Effect.succeed({
190
+ * body: {
191
+ * data: { a: { name: "a" }, b: null },
192
+ * errors: [{ message: "Could not resolve to a Repository", path: ["b"] }]
193
+ * }
194
+ * }),
195
+ * subscribe: () => Stream.empty
196
+ * })
197
+ *
198
+ * const program = Effect.gen(function*() {
199
+ * const client = yield* GraphQLClient.make(GraphQLGroup.make(Repos))
200
+ * // The default call fails with a ResponseError because `errors` is non-empty
201
+ * const failed = yield* Effect.flip(client.Repos())
202
+ * // With partial: true the decoded data comes back together with the errors
203
+ * const { data, errors } = yield* client.Repos(undefined, { partial: true })
204
+ * return [failed.reason._tag, data.a?.name, errors[0].path?.[0]]
205
+ * })
206
+ *
207
+ * await Effect.runPromise(program.pipe(Effect.provide(Scripted))) // => ["ResponseError", "a", "b"]
208
+ * ```
209
+ *
210
+ * @stability experimental
211
+ * @category constructors
212
+ * @since 4.0.0
213
+ */
214
+ export declare const make: <Ops extends GraphQL.Any>(group: GraphQLGroup.GraphQLGroup<Ops>, options?: {
215
+ readonly subscriptionRetry?: Schedule.Schedule<unknown, GraphQLClientError> | undefined;
216
+ } | undefined) => Effect.Effect<GraphQLClient<Ops>, never, GraphQLProtocol | GraphQLMiddleware.Identifier<GraphQL.Middleware<Ops>>>;
217
+ /**
218
+ * The `pageInfo` a paged connection must select.
219
+ *
220
+ * @stability experimental
221
+ * @category paging
222
+ * @since 4.0.0
223
+ */
224
+ export interface PageInfo {
225
+ readonly hasNextPage: boolean;
226
+ readonly endCursor: string | null;
227
+ }
228
+ /**
229
+ * What the `connection` getter of {@link pages} must return.
230
+ *
231
+ * @stability experimental
232
+ * @category paging
233
+ * @since 4.0.0
234
+ */
235
+ export interface Connection {
236
+ readonly pageInfo: PageInfo;
237
+ }
238
+ /**
239
+ * What the `connection` getter of {@link items} must return: a connection
240
+ * that also selects `nodes`.
241
+ *
242
+ * @stability experimental
243
+ * @category paging
244
+ * @since 4.0.0
245
+ */
246
+ export interface NodesConnection<Node> extends Connection {
247
+ readonly nodes: ReadonlyArray<Node> | null;
248
+ }
249
+ /**
250
+ * The type `variables` is given when the operation has no `$after` variable.
251
+ * Nothing is assignable to it, so the mistake is a compile error at the call.
252
+ *
253
+ * @stability experimental
254
+ * @category paging
255
+ * @since 4.0.0
256
+ */
257
+ export interface MissingAfterVariable {
258
+ readonly "effect/graphql": "GraphQLClient.pages requires the operation to declare a nullable `$after: String` variable";
259
+ }
260
+ /**
261
+ * The type `variables` is given when the operation's `after` variable is
262
+ * required or does not accept a `string`. The helper leaves `after` out on the
263
+ * first page and sends the previous `endCursor` afterwards, so it can only
264
+ * drive an optional variable that takes a string.
265
+ *
266
+ * @stability experimental
267
+ * @category paging
268
+ * @since 4.0.0
269
+ */
270
+ export interface InvalidAfterVariable {
271
+ readonly "effect/graphql": "GraphQLClient.pages requires the `after` variable to be optional and to accept a string";
272
+ }
273
+ /**
274
+ * The `variables` accepted by {@link pages} and {@link items}: the method's
275
+ * variables without `after`, which the helper supplies.
276
+ *
277
+ * **Details**
278
+ *
279
+ * The operation's `after` variable must be optional and accept a `string`.
280
+ * `after?: string | null`, from a nullable `$after: String`, and
281
+ * `after?: string`, from a `$after: String!` with a default value, are both
282
+ * accepted. A required `after` gives {@link InvalidAfterVariable}, as does one
283
+ * that does not accept a `string`; no `after` at all gives
284
+ * {@link MissingAfterVariable}.
285
+ *
286
+ * @stability experimental
287
+ * @category paging
288
+ * @since 4.0.0
289
+ */
290
+ export type PagingVariables<Variables> = "after" extends keyof Variables ? {} extends Pick<Variables, "after"> ? string extends Variables["after"] ? Omit<Variables, "after"> : InvalidAfterVariable : InvalidAfterVariable : MissingAfterVariable;
291
+ /**
292
+ * Pages forward through a cursor connection, emitting one connection per
293
+ * page.
294
+ *
295
+ * **Details**
296
+ *
297
+ * Requires an optional string `$after` variable (see {@link PagingVariables}).
298
+ * The first request omits `after`; subsequent requests use the previous
299
+ * `endCursor`. Pages are fetched only when pulled, so `Stream.take` stops
300
+ * further requests. Middleware runs on each page.
301
+ *
302
+ * `connection` extracts the connection from each result. `options` is
303
+ * forwarded to every call but cannot include `partial`: errors fail the stream.
304
+ * Its `headers` accept `Headers.Input`, just as for operation calls.
305
+ *
306
+ * The stream ends after a page whose `hasNextPage` is `false`. A `null`
307
+ * connection on the first page gives an empty stream; on a later page it
308
+ * fails with a `PaginationError`, as does `hasNextPage: true` with a `null`
309
+ * or unchanged `endCursor`.
310
+ *
311
+ * Root fields that come with every page, such as GitHub's `rateLimit`, are for
312
+ * middleware to read from the raw `ExecutionResult`.
313
+ *
314
+ * **Example** (Paging issues, two per page)
315
+ *
316
+ * ```ts import.meta.vitest
317
+ * import { Effect, Layer, Schema, Stream } from "effect"
318
+ * import { GraphQL, GraphQLClient, GraphQLGroup, GraphQLProtocol } from "effect/graphql"
319
+ *
320
+ * const RepoIssues = GraphQL.query("RepoIssues", {
321
+ * document: "query RepoIssues($owner:String!,$name:String!,$after:String){repository(owner:$owner,name:$name){issues(first:2,after:$after){pageInfo{hasNextPage endCursor}nodes{number}}}}",
322
+ * variables: { owner: Schema.String, name: Schema.String, after: Schema.optional(Schema.NullOr(Schema.String)) },
323
+ * result: Schema.Struct({
324
+ * repository: Schema.NullOr(Schema.Struct({
325
+ * issues: Schema.Struct({
326
+ * pageInfo: Schema.Struct({ hasNextPage: Schema.Boolean, endCursor: Schema.NullOr(Schema.String) }),
327
+ * nodes: Schema.NullOr(Schema.Array(Schema.NullOr(Schema.Struct({ number: Schema.Int }))))
328
+ * })
329
+ * }))
330
+ * })
331
+ * })
332
+ *
333
+ * // A scripted server with two pages
334
+ * const Scripted = Layer.succeed(GraphQLProtocol.GraphQLProtocol, {
335
+ * execute: (request) => {
336
+ * const after = (request.variables as { after?: string }).after
337
+ * const page = after === undefined
338
+ * ? { pageInfo: { hasNextPage: true, endCursor: "c1" }, nodes: [{ number: 1 }, { number: 2 }] }
339
+ * : { pageInfo: { hasNextPage: false, endCursor: null }, nodes: [{ number: 3 }] }
340
+ * return Effect.succeed({ body: { data: { repository: { issues: page } } } })
341
+ * },
342
+ * subscribe: () => Stream.empty
343
+ * })
344
+ *
345
+ * const program = Effect.gen(function*() {
346
+ * const client = yield* GraphQLClient.make(GraphQLGroup.make(RepoIssues))
347
+ * const pages = GraphQLClient.pages(client.RepoIssues, {
348
+ * variables: { owner: "Effect-TS", name: "effect" },
349
+ * connection: (result) => result.repository?.issues
350
+ * })
351
+ * return yield* Stream.runCollect(Stream.map(pages, (page) => page.pageInfo.endCursor))
352
+ * })
353
+ *
354
+ * await Effect.runPromise(program.pipe(Effect.provide(Scripted))) // => ["c1", null]
355
+ * ```
356
+ *
357
+ * @stability experimental
358
+ * @category paging
359
+ * @since 4.0.0
360
+ */
361
+ export declare const pages: <Op extends GraphQL.Any, C extends Connection, R2 = never>(method: OperationMethod<Op>, options: {
362
+ readonly variables: PagingVariables<GraphQL.Variables<Op>>;
363
+ readonly connection: (result: GraphQL.Result<Op>) => C | null | undefined;
364
+ readonly options?: {
365
+ readonly headers?: Headers.Input | undefined;
366
+ readonly urlParams?: UrlParams.Input | undefined;
367
+ readonly context?: Context.Context<R2> | undefined;
368
+ } | undefined;
369
+ }) => Stream.Stream<C, GraphQL.Error<Op>, Exclude<GraphQL.Services<Op>, R2>>;
370
+ /**
371
+ * Like {@link pages}, but emits decoded entries from `nodes`, including
372
+ * `null` entries. Use `Stream.filter(Predicate.isNotNull)` to drop them.
373
+ * For connections selecting only `edges`, use {@link pages} with
374
+ * `Stream.flatMap`.
375
+ *
376
+ * **Example** (Flattening issue numbers across pages)
377
+ *
378
+ * ```ts import.meta.vitest
379
+ * import { Effect, Layer, Schema, Stream } from "effect"
380
+ * import { GraphQL, GraphQLClient, GraphQLGroup, GraphQLProtocol } from "effect/graphql"
381
+ *
382
+ * const RepoIssues = GraphQL.query("RepoIssues", {
383
+ * document: "query RepoIssues($owner:String!,$name:String!,$after:String){repository(owner:$owner,name:$name){issues(first:2,after:$after){pageInfo{hasNextPage endCursor}nodes{number}}}}",
384
+ * variables: { owner: Schema.String, name: Schema.String, after: Schema.optional(Schema.NullOr(Schema.String)) },
385
+ * result: Schema.Struct({
386
+ * repository: Schema.NullOr(Schema.Struct({
387
+ * issues: Schema.Struct({
388
+ * pageInfo: Schema.Struct({ hasNextPage: Schema.Boolean, endCursor: Schema.NullOr(Schema.String) }),
389
+ * nodes: Schema.NullOr(Schema.Array(Schema.NullOr(Schema.Struct({ number: Schema.Int }))))
390
+ * })
391
+ * }))
392
+ * })
393
+ * })
394
+ *
395
+ * const Scripted = Layer.succeed(GraphQLProtocol.GraphQLProtocol, {
396
+ * execute: (request) => {
397
+ * const after = (request.variables as { after?: string }).after
398
+ * const page = after === undefined
399
+ * ? { pageInfo: { hasNextPage: true, endCursor: "c1" }, nodes: [{ number: 1 }, null] }
400
+ * : { pageInfo: { hasNextPage: false, endCursor: null }, nodes: [{ number: 3 }] }
401
+ * return Effect.succeed({ body: { data: { repository: { issues: page } } } })
402
+ * },
403
+ * subscribe: () => Stream.empty
404
+ * })
405
+ *
406
+ * const program = Effect.gen(function*() {
407
+ * const client = yield* GraphQLClient.make(GraphQLGroup.make(RepoIssues))
408
+ * const items = GraphQLClient.items(client.RepoIssues, {
409
+ * variables: { owner: "Effect-TS", name: "effect" },
410
+ * connection: (result) => result.repository?.issues
411
+ * })
412
+ * return yield* Stream.runCollect(Stream.map(items, (issue) => issue?.number ?? null))
413
+ * })
414
+ *
415
+ * await Effect.runPromise(program.pipe(Effect.provide(Scripted))) // => [1, null, 3]
416
+ * ```
417
+ *
418
+ * @stability experimental
419
+ * @category paging
420
+ * @since 4.0.0
421
+ */
422
+ export declare const items: <Op extends GraphQL.Any, Node, R2 = never>(method: OperationMethod<Op>, options: {
423
+ readonly variables: PagingVariables<GraphQL.Variables<Op>>;
424
+ readonly connection: (result: GraphQL.Result<Op>) => NodesConnection<Node> | null | undefined;
425
+ readonly options?: {
426
+ readonly headers?: Headers.Input | undefined;
427
+ readonly urlParams?: UrlParams.Input | undefined;
428
+ readonly context?: Context.Context<R2> | undefined;
429
+ } | undefined;
430
+ }) => Stream.Stream<Node, GraphQL.Error<Op>, Exclude<GraphQL.Services<Op>, R2>>;
431
+ /**
432
+ * The options a {@link makeTest} handler receives: the `headers` and
433
+ * `urlParams` the caller passed, unchanged. Headers accept `Headers.Input`;
434
+ * unlike real transport requests, test call options are not normalized.
435
+ *
436
+ * @stability experimental
437
+ * @category testing
438
+ * @since 4.0.0
439
+ */
440
+ export interface TestCallOptions {
441
+ readonly headers?: Headers.Input | undefined;
442
+ readonly urlParams?: UrlParams.Input | undefined;
443
+ }
444
+ /**
445
+ * A {@link makeTest} handler for one operation. Queries and mutations return
446
+ * an `Effect` and subscriptions a `Stream` of the decoded result type.
447
+ *
448
+ * @stability experimental
449
+ * @category testing
450
+ * @since 4.0.0
451
+ */
452
+ export type TestHandler<Op extends GraphQL.Any> = Op["kind"] extends "subscription" ? (variables: GraphQL.Variables<Op>, options: TestCallOptions) => Stream.Stream<GraphQL.Result<Op>, GraphQL.Error<Op>> : (variables: GraphQL.Variables<Op>, options: TestCallOptions) => Effect.Effect<GraphQL.Result<Op>, GraphQL.Error<Op>>;
453
+ /**
454
+ * The handlers given to {@link makeTest}, keyed by operation name. Every
455
+ * handler is optional.
456
+ *
457
+ * @stability experimental
458
+ * @category testing
459
+ * @since 4.0.0
460
+ */
461
+ export type TestHandlers<Ops extends GraphQL.Any> = {
462
+ readonly [Op in Ops as Op["name"]]?: TestHandler<Op>;
463
+ };
464
+ /**
465
+ * Builds a client for tests that answers each operation from a handler,
466
+ * without a protocol.
467
+ *
468
+ * **Details**
469
+ *
470
+ * Handlers receive the caller's `variables` and options unchanged and return
471
+ * values in their decoded form. Nothing is encoded, decoded or validated, and
472
+ * no middleware runs. Called with `{ partial: true }`, a method returns
473
+ * `{ data, errors: [] }`. Subscriptions are not retried. Every method carries
474
+ * `.operation`, so {@link pages} and {@link items} work on it.
475
+ *
476
+ * Calling an operation without a handler dies with an `UnimplementedError`
477
+ * defect, so `catchTag` in the code under test cannot swallow a missing stub.
478
+ *
479
+ * Methods keep the real client's types, including middleware service
480
+ * requirements. Tests must provide those services even though mocks do not
481
+ * use them.
482
+ *
483
+ * To test partial data together with `errors`, or the encode and decode path,
484
+ * provide a scripted `GraphQLProtocol` layer to {@link make} instead.
485
+ *
486
+ * **Example** (Replacing a client service in tests)
487
+ *
488
+ * ```ts import.meta.vitest
489
+ * import { Context, Effect, Layer, Schema } from "effect"
490
+ * import { GraphQL, GraphQLClient, GraphQLGroup } from "effect/graphql"
491
+ *
492
+ * const RepoIssues = GraphQL.query("RepoIssues", {
493
+ * document: "query RepoIssues($owner:String!,$name:String!){repository(owner:$owner,name:$name){issues{totalCount}}}",
494
+ * variables: { owner: Schema.String, name: Schema.String },
495
+ * result: Schema.Struct({
496
+ * repository: Schema.NullOr(Schema.Struct({ issues: Schema.Struct({ totalCount: Schema.Int }) }))
497
+ * })
498
+ * })
499
+ * const GitHubGraphQLGroup = GraphQLGroup.make(RepoIssues)
500
+ *
501
+ * class GitHub extends Context.Service<GitHub>()("app/GitHub", {
502
+ * make: GraphQLClient.make(GitHubGraphQLGroup)
503
+ * }) {}
504
+ *
505
+ * const GitHubTest = Layer.succeed(
506
+ * GitHub,
507
+ * GraphQLClient.makeTest(GitHubGraphQLGroup)({
508
+ * RepoIssues: ({ name }) => Effect.succeed({ repository: { issues: { totalCount: name.length } } })
509
+ * })
510
+ * )
511
+ *
512
+ * const program = GitHub.use((github) => github.RepoIssues({ owner: "Effect-TS", name: "effect" }))
513
+ *
514
+ * await Effect.runPromise(program.pipe(Effect.provide(GitHubTest))) // => { repository: { issues: { totalCount: 6 } } }
515
+ * ```
516
+ *
517
+ * @stability experimental
518
+ * @category testing
519
+ * @since 4.0.0
520
+ */
521
+ export declare const makeTest: <Ops extends GraphQL.Any>(group: GraphQLGroup.GraphQLGroup<Ops>) => (handlers: TestHandlers<Ops>) => GraphQLClient<Ops>;
522
+ /**
523
+ * Builds a mock layer for a client service using {@link makeTest}. Bind the
524
+ * service and group once to expose a `layerTest(handlers)` helper on the service.
525
+ * The group fixes the operation types before the handlers are checked.
526
+ *
527
+ * **Example** (Binding a mock layer to a client service)
528
+ *
529
+ * ```ts import.meta.vitest
530
+ * import { Context, Effect, Schema } from "effect"
531
+ * import { GraphQL, GraphQLClient, GraphQLGroup } from "effect/graphql"
532
+ *
533
+ * const RepoIssues = GraphQL.query("RepoIssues", {
534
+ * document: "query RepoIssues($owner:String!,$name:String!){repository(owner:$owner,name:$name){issues{totalCount}}}",
535
+ * variables: { owner: Schema.String, name: Schema.String },
536
+ * result: Schema.Struct({
537
+ * repository: Schema.NullOr(Schema.Struct({ issues: Schema.Struct({ totalCount: Schema.Int }) }))
538
+ * })
539
+ * })
540
+ * const GitHubGraphQLGroup = GraphQLGroup.make(RepoIssues)
541
+ *
542
+ * class GitHub extends Context.Service<GitHub>()("app/GitHub", {
543
+ * make: GraphQLClient.make(GitHubGraphQLGroup)
544
+ * }) {
545
+ * static readonly layerTest = GraphQLClient.layerTest(GitHub, GitHubGraphQLGroup)
546
+ * }
547
+ *
548
+ * const program = GitHub.use((github) => github.RepoIssues({ owner: "Effect-TS", name: "effect" }))
549
+ *
550
+ * await Effect.runPromise(program.pipe(Effect.provide(GitHub.layerTest({
551
+ * RepoIssues: ({ name }) => Effect.succeed({ repository: { issues: { totalCount: name.length } } })
552
+ * })))) // => { repository: { issues: { totalCount: 6 } } }
553
+ * ```
554
+ *
555
+ * @see {@link makeTest} for mock behavior and the middleware-services limitation.
556
+ * @stability experimental
557
+ * @category testing
558
+ * @since 4.0.0
559
+ */
560
+ export declare const layerTest: <I, Service, Ops extends GraphQL.Any>(service: Context.Key<I, Service>, group: GraphQLGroup.GraphQLGroup<Ops> & (GraphQLClient<Ops> extends NoInfer<Service> ? unknown : never)) => (handlers: TestHandlers<Ops>) => Layer.Layer<I>;
561
+ export {};
562
+ //# sourceMappingURL=GraphQLClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQLClient.d.ts","sourceRoot":"","sources":["../../src/graphql/GraphQLClient.ts"],"names":[],"mappings":"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"}