@effect/platform 0.48.29 → 0.49.0

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 (157) hide show
  1. package/README.md +12 -12
  2. package/dist/cjs/Http/App.js +9 -7
  3. package/dist/cjs/Http/App.js.map +1 -1
  4. package/dist/cjs/Http/Client.js +13 -3
  5. package/dist/cjs/Http/Client.js.map +1 -1
  6. package/dist/cjs/Http/ClientResponse.js +9 -9
  7. package/dist/cjs/Http/ClientResponse.js.map +1 -1
  8. package/dist/cjs/Http/Cookies.js +7 -7
  9. package/dist/cjs/Http/Cookies.js.map +1 -1
  10. package/dist/cjs/Http/Headers.js +7 -7
  11. package/dist/cjs/Http/Headers.js.map +1 -1
  12. package/dist/cjs/Http/IncomingMessage.js +7 -7
  13. package/dist/cjs/Http/IncomingMessage.js.map +1 -1
  14. package/dist/cjs/Http/Middleware.js +11 -1
  15. package/dist/cjs/Http/Middleware.js.map +1 -1
  16. package/dist/cjs/Http/Multiplex.js.map +1 -1
  17. package/dist/cjs/Http/Router.js.map +1 -1
  18. package/dist/cjs/Http/UrlParams.js +13 -13
  19. package/dist/cjs/Http/UrlParams.js.map +1 -1
  20. package/dist/cjs/PlatformConfigProvider.js +2 -2
  21. package/dist/cjs/PlatformConfigProvider.js.map +1 -1
  22. package/dist/cjs/Socket.js +6 -6
  23. package/dist/cjs/Socket.js.map +1 -1
  24. package/dist/cjs/Transferable.js +1 -1
  25. package/dist/cjs/Transferable.js.map +1 -1
  26. package/dist/cjs/WorkerRunner.js.map +1 -1
  27. package/dist/cjs/internal/command.js +1 -1
  28. package/dist/cjs/internal/command.js.map +1 -1
  29. package/dist/cjs/internal/fileSystem.js +2 -2
  30. package/dist/cjs/internal/fileSystem.js.map +1 -1
  31. package/dist/cjs/internal/http/client.js +19 -16
  32. package/dist/cjs/internal/http/client.js.map +1 -1
  33. package/dist/cjs/internal/http/clientResponse.js +5 -5
  34. package/dist/cjs/internal/http/clientResponse.js.map +1 -1
  35. package/dist/cjs/internal/http/middleware.js +8 -3
  36. package/dist/cjs/internal/http/middleware.js.map +1 -1
  37. package/dist/cjs/internal/http/multipart.js +4 -4
  38. package/dist/cjs/internal/http/multipart.js.map +1 -1
  39. package/dist/cjs/internal/http/multiplex.js +2 -2
  40. package/dist/cjs/internal/http/multiplex.js.map +1 -1
  41. package/dist/cjs/internal/http/router.js +2 -1
  42. package/dist/cjs/internal/http/router.js.map +1 -1
  43. package/dist/cjs/internal/worker.js +7 -7
  44. package/dist/cjs/internal/worker.js.map +1 -1
  45. package/dist/cjs/internal/workerRunner.js +14 -13
  46. package/dist/cjs/internal/workerRunner.js.map +1 -1
  47. package/dist/dts/Command.d.ts +3 -3
  48. package/dist/dts/Command.d.ts.map +1 -1
  49. package/dist/dts/Http/App.d.ts +7 -7
  50. package/dist/dts/Http/App.d.ts.map +1 -1
  51. package/dist/dts/Http/Client.d.ts +78 -65
  52. package/dist/dts/Http/Client.d.ts.map +1 -1
  53. package/dist/dts/Http/ClientResponse.d.ts +5 -5
  54. package/dist/dts/Http/Cookies.d.ts +3 -3
  55. package/dist/dts/Http/Cookies.d.ts.map +1 -1
  56. package/dist/dts/Http/Headers.d.ts +4 -4
  57. package/dist/dts/Http/Headers.d.ts.map +1 -1
  58. package/dist/dts/Http/IncomingMessage.d.ts +4 -3
  59. package/dist/dts/Http/IncomingMessage.d.ts.map +1 -1
  60. package/dist/dts/Http/Middleware.d.ts +22 -5
  61. package/dist/dts/Http/Middleware.d.ts.map +1 -1
  62. package/dist/dts/Http/Multiplex.d.ts +22 -22
  63. package/dist/dts/Http/Multiplex.d.ts.map +1 -1
  64. package/dist/dts/Http/Router.d.ts +80 -80
  65. package/dist/dts/Http/Router.d.ts.map +1 -1
  66. package/dist/dts/Http/Server.d.ts +11 -11
  67. package/dist/dts/Http/Server.d.ts.map +1 -1
  68. package/dist/dts/Http/ServerRequest.d.ts +1 -1
  69. package/dist/dts/Http/ServerRequest.d.ts.map +1 -1
  70. package/dist/dts/Http/TraceContext.d.ts.map +1 -1
  71. package/dist/dts/Http/UrlParams.d.ts.map +1 -1
  72. package/dist/dts/PlatformConfigProvider.d.ts.map +1 -1
  73. package/dist/dts/Socket.d.ts +10 -10
  74. package/dist/dts/Socket.d.ts.map +1 -1
  75. package/dist/dts/Transferable.d.ts.map +1 -1
  76. package/dist/dts/Worker.d.ts +6 -6
  77. package/dist/dts/Worker.d.ts.map +1 -1
  78. package/dist/dts/WorkerRunner.d.ts +5 -5
  79. package/dist/dts/WorkerRunner.d.ts.map +1 -1
  80. package/dist/dts/internal/http/router.d.ts +1 -1
  81. package/dist/dts/internal/http/router.d.ts.map +1 -1
  82. package/dist/esm/Http/App.js +9 -7
  83. package/dist/esm/Http/App.js.map +1 -1
  84. package/dist/esm/Http/Client.js +12 -2
  85. package/dist/esm/Http/Client.js.map +1 -1
  86. package/dist/esm/Http/ClientResponse.js +5 -5
  87. package/dist/esm/Http/ClientResponse.js.map +1 -1
  88. package/dist/esm/Http/Cookies.js +7 -7
  89. package/dist/esm/Http/Cookies.js.map +1 -1
  90. package/dist/esm/Http/Headers.js +7 -7
  91. package/dist/esm/Http/Headers.js.map +1 -1
  92. package/dist/esm/Http/IncomingMessage.js +3 -3
  93. package/dist/esm/Http/IncomingMessage.js.map +1 -1
  94. package/dist/esm/Http/Middleware.js +10 -0
  95. package/dist/esm/Http/Middleware.js.map +1 -1
  96. package/dist/esm/Http/Multiplex.js.map +1 -1
  97. package/dist/esm/Http/Router.js.map +1 -1
  98. package/dist/esm/Http/UrlParams.js +13 -13
  99. package/dist/esm/Http/UrlParams.js.map +1 -1
  100. package/dist/esm/PlatformConfigProvider.js +2 -2
  101. package/dist/esm/PlatformConfigProvider.js.map +1 -1
  102. package/dist/esm/Socket.js +6 -6
  103. package/dist/esm/Socket.js.map +1 -1
  104. package/dist/esm/Transferable.js +1 -1
  105. package/dist/esm/Transferable.js.map +1 -1
  106. package/dist/esm/WorkerRunner.js.map +1 -1
  107. package/dist/esm/internal/command.js +1 -1
  108. package/dist/esm/internal/command.js.map +1 -1
  109. package/dist/esm/internal/fileSystem.js +2 -2
  110. package/dist/esm/internal/fileSystem.js.map +1 -1
  111. package/dist/esm/internal/http/client.js +18 -13
  112. package/dist/esm/internal/http/client.js.map +1 -1
  113. package/dist/esm/internal/http/clientResponse.js +2 -2
  114. package/dist/esm/internal/http/clientResponse.js.map +1 -1
  115. package/dist/esm/internal/http/middleware.js +7 -2
  116. package/dist/esm/internal/http/middleware.js.map +1 -1
  117. package/dist/esm/internal/http/multipart.js +4 -4
  118. package/dist/esm/internal/http/multipart.js.map +1 -1
  119. package/dist/esm/internal/http/multiplex.js +2 -2
  120. package/dist/esm/internal/http/multiplex.js.map +1 -1
  121. package/dist/esm/internal/http/router.js +2 -1
  122. package/dist/esm/internal/http/router.js.map +1 -1
  123. package/dist/esm/internal/worker.js +7 -7
  124. package/dist/esm/internal/worker.js.map +1 -1
  125. package/dist/esm/internal/workerRunner.js +14 -13
  126. package/dist/esm/internal/workerRunner.js.map +1 -1
  127. package/package.json +3 -3
  128. package/src/Command.ts +3 -3
  129. package/src/Http/App.ts +21 -17
  130. package/src/Http/Client.ts +105 -90
  131. package/src/Http/ClientResponse.ts +7 -7
  132. package/src/Http/Cookies.ts +9 -9
  133. package/src/Http/Headers.ts +12 -12
  134. package/src/Http/IncomingMessage.ts +16 -6
  135. package/src/Http/Middleware.ts +30 -6
  136. package/src/Http/Multiplex.ts +38 -38
  137. package/src/Http/Router.ts +136 -134
  138. package/src/Http/Server.ts +16 -16
  139. package/src/Http/ServerRequest.ts +1 -1
  140. package/src/Http/UrlParams.ts +15 -15
  141. package/src/PlatformConfigProvider.ts +2 -2
  142. package/src/Socket.ts +6 -6
  143. package/src/Transferable.ts +1 -1
  144. package/src/Worker.ts +9 -9
  145. package/src/WorkerRunner.ts +5 -4
  146. package/src/internal/command.ts +12 -6
  147. package/src/internal/fileSystem.ts +2 -2
  148. package/src/internal/http/client.ts +221 -204
  149. package/src/internal/http/clientResponse.ts +2 -2
  150. package/src/internal/http/middleware.ts +24 -1
  151. package/src/internal/http/multipart.ts +4 -4
  152. package/src/internal/http/multiplex.ts +54 -54
  153. package/src/internal/http/router.ts +121 -104
  154. package/src/internal/http/server.ts +17 -17
  155. package/src/internal/http/serverRequest.ts +1 -1
  156. package/src/internal/worker.ts +14 -14
  157. package/src/internal/workerRunner.ts +20 -16
@@ -52,6 +52,23 @@ export const withTracerDisabledWhen = dual<
52
52
  ) => Effect.Effect<A, E, R>
53
53
  >(2, (self, pred) => Effect.locally(self, currentTracerDisabledWhen, pred))
54
54
 
55
+ /** @internal */
56
+ export const currentFetchOptions = globalValue(
57
+ Symbol.for("@effect/platform/Http/Client/currentFetchOptions"),
58
+ () => FiberRef.unsafeMake<RequestInit>({})
59
+ )
60
+
61
+ /** @internal */
62
+ export const withFetchOptions = dual<
63
+ (
64
+ options: RequestInit
65
+ ) => <R, E, A>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
66
+ <R, E, A>(
67
+ effect: Effect.Effect<A, E, R>,
68
+ options: RequestInit
69
+ ) => Effect.Effect<A, E, R>
70
+ >(2, (self, options) => Effect.locally(self, currentFetchOptions, options))
71
+
55
72
  const clientProto = {
56
73
  [TypeId]: TypeId,
57
74
  pipe() {
@@ -62,12 +79,12 @@ const clientProto = {
62
79
  const isClient = (u: unknown): u is Client.Client<unknown, unknown, unknown> => Predicate.hasProperty(u, TypeId)
63
80
 
64
81
  /** @internal */
65
- export const make = <R, E, A, R2, E2>(
82
+ export const make = <A, E, R, R2, E2>(
66
83
  execute: (
67
84
  request: Effect.Effect<ClientRequest.ClientRequest, E2, R2>
68
85
  ) => Effect.Effect<A, E, R>,
69
- preprocess: Client.Client.Preprocess<R2, E2>
70
- ): Client.Client<R, E, A> => {
86
+ preprocess: Client.Client.Preprocess<E2, R2>
87
+ ): Client.Client<A, E, R> => {
71
88
  function client(request: ClientRequest.ClientRequest) {
72
89
  return execute(preprocess(request))
73
90
  }
@@ -116,53 +133,53 @@ export const Fetch = Context.GenericTag<Client.Fetch, typeof globalThis.fetch>(
116
133
  )
117
134
 
118
135
  /** @internal */
119
- export const fetch = (options?: RequestInit): Client.Client.Default =>
120
- makeDefault((request, fiber) => {
121
- const context = fiber.getFiberRef(FiberRef.currentContext)
122
- const fetch: typeof globalThis.fetch = context.unsafeMap.get(Fetch.key) ?? globalThis.fetch
123
- return Effect.flatMap(
124
- UrlParams.makeUrl(request.url, request.urlParams, (_) =>
125
- new Error.RequestError({
126
- request,
127
- reason: "InvalidUrl",
128
- error: _
129
- })),
130
- (url) => {
131
- const headers = new Headers(request.headers)
132
- const send = (body: BodyInit | undefined) =>
133
- pipe(
134
- Effect.acquireRelease(
135
- Effect.sync(() => new AbortController()),
136
- (controller) => Effect.sync(() => controller.abort())
137
- ),
138
- Effect.flatMap((controller) =>
139
- Effect.tryPromise({
140
- try: () =>
141
- fetch(url, {
142
- ...options,
143
- method: request.method,
144
- headers,
145
- body,
146
- duplex: request.body._tag === "Stream" ? "half" : undefined,
147
- signal: controller.signal
148
- } as any),
149
- catch: (_) =>
150
- new Error.RequestError({
151
- request,
152
- reason: "Transport",
153
- error: _
154
- })
155
- })
156
- ),
157
- Effect.map((_) => internalResponse.fromWeb(request, _))
158
- )
159
- if (Method.hasBody(request.method)) {
160
- return send(convertBody(request.body))
161
- }
162
- return send(undefined)
136
+ export const fetch: Client.Client.Default = makeDefault((request, fiber) => {
137
+ const context = fiber.getFiberRef(FiberRef.currentContext)
138
+ const fetch: typeof globalThis.fetch = context.unsafeMap.get(Fetch.key) ?? globalThis.fetch
139
+ const options = fiber.getFiberRef(currentFetchOptions)
140
+ return Effect.flatMap(
141
+ UrlParams.makeUrl(request.url, request.urlParams, (_) =>
142
+ new Error.RequestError({
143
+ request,
144
+ reason: "InvalidUrl",
145
+ error: _
146
+ })),
147
+ (url) => {
148
+ const headers = new Headers(request.headers)
149
+ const send = (body: BodyInit | undefined) =>
150
+ pipe(
151
+ Effect.acquireRelease(
152
+ Effect.sync(() => new AbortController()),
153
+ (controller) => Effect.sync(() => controller.abort())
154
+ ),
155
+ Effect.flatMap((controller) =>
156
+ Effect.tryPromise({
157
+ try: () =>
158
+ fetch(url, {
159
+ ...options,
160
+ method: request.method,
161
+ headers,
162
+ body,
163
+ duplex: request.body._tag === "Stream" ? "half" : undefined,
164
+ signal: controller.signal
165
+ } as any),
166
+ catch: (_) =>
167
+ new Error.RequestError({
168
+ request,
169
+ reason: "Transport",
170
+ error: _
171
+ })
172
+ })
173
+ ),
174
+ Effect.map((_) => internalResponse.fromWeb(request, _))
175
+ )
176
+ if (Method.hasBody(request.method)) {
177
+ return send(convertBody(request.body))
163
178
  }
164
- )
165
- })
179
+ return send(undefined)
180
+ }
181
+ )
182
+ })
166
183
 
167
184
  const convertBody = (body: Body.Body): BodyInit | undefined => {
168
185
  switch (body._tag) {
@@ -179,42 +196,74 @@ const convertBody = (body: Body.Body): BodyInit | undefined => {
179
196
  }
180
197
  }
181
198
 
182
- /** @internal */
183
- export const fetchOk = (options?: RequestInit): Client.Client.Default => filterStatusOk(fetch(options))
184
-
185
- /** @internal */
186
- export const layer = Layer.succeed(tag, fetch())
187
-
188
199
  /** @internal */
189
200
  export const transform = dual<
190
- <R, E, A, R1, E1, A1>(
201
+ <A, E, R, R1, E1, A1>(
191
202
  f: (
192
203
  effect: Effect.Effect<A, E, R>,
193
204
  request: ClientRequest.ClientRequest
194
205
  ) => Effect.Effect<A1, E1, R1>
195
- ) => (self: Client.Client<R, E, A>) => Client.Client<R | R1, E | E1, A1>,
196
- <R, E, A, R1, E1, A1>(
197
- self: Client.Client<R, E, A>,
206
+ ) => (self: Client.Client<A, E, R>) => Client.Client<A1, E | E1, R | R1>,
207
+ <A, E, R, R1, E1, A1>(
208
+ self: Client.Client<A, E, R>,
198
209
  f: (
199
210
  effect: Effect.Effect<A, E, R>,
200
211
  request: ClientRequest.ClientRequest
201
212
  ) => Effect.Effect<A1, E1, R1>
202
- ) => Client.Client<R | R1, E | E1, A1>
213
+ ) => Client.Client<A1, E | E1, R | R1>
203
214
  >(2, (self, f) =>
204
215
  make(
205
216
  Effect.flatMap((request) => f(self.execute(Effect.succeed(request)), request)),
206
217
  self.preprocess
207
218
  ))
208
219
 
220
+ /** @internal */
221
+ export const filterStatus = dual<
222
+ (
223
+ f: (status: number) => boolean
224
+ ) => <E, R>(
225
+ self: Client.Client.WithResponse<E, R>
226
+ ) => Client.Client.WithResponse<E | Error.ResponseError, R>,
227
+ <E, R>(
228
+ self: Client.Client.WithResponse<E, R>,
229
+ f: (status: number) => boolean
230
+ ) => Client.Client.WithResponse<E | Error.ResponseError, R>
231
+ >(2, (self, f) =>
232
+ transform(self, (effect, request) =>
233
+ Effect.filterOrFail(
234
+ effect,
235
+ (response) => f(response.status),
236
+ (response) =>
237
+ new Error.ResponseError({
238
+ request,
239
+ response,
240
+ reason: "StatusCode",
241
+ error: "non 2xx status code"
242
+ })
243
+ )))
244
+
245
+ /** @internal */
246
+ export const filterStatusOk: <E, R>(
247
+ self: Client.Client.WithResponse<E, R>
248
+ ) => Client.Client.WithResponse<E | Error.ResponseError, R> = filterStatus(
249
+ (status) => status >= 200 && status < 300
250
+ )
251
+
252
+ /** @internal */
253
+ export const fetchOk: Client.Client.Default = filterStatusOk(fetch)
254
+
255
+ /** @internal */
256
+ export const layer = Layer.succeed(tag, fetch)
257
+
209
258
  /** @internal */
210
259
  export const transformResponse = dual<
211
- <R, E, A, R1, E1, A1>(
260
+ <A, E, R, R1, E1, A1>(
212
261
  f: (effect: Effect.Effect<A, E, R>) => Effect.Effect<A1, E1, R1>
213
- ) => (self: Client.Client<R, E, A>) => Client.Client<R1, E1, A1>,
214
- <R, E, A, R1, E1, A1>(
215
- self: Client.Client<R, E, A>,
262
+ ) => (self: Client.Client<A, E, R>) => Client.Client<A1, E1, R1>,
263
+ <A, E, R, R1, E1, A1>(
264
+ self: Client.Client<A, E, R>,
216
265
  f: (effect: Effect.Effect<A, E, R>) => Effect.Effect<A1, E1, R1>
217
- ) => Client.Client<R1, E1, A1>
266
+ ) => Client.Client<A1, E1, R1>
218
267
  >(2, (self, f) => make((request) => f(self.execute(request)), self.preprocess))
219
268
 
220
269
  /** @internal */
@@ -222,9 +271,9 @@ export const catchTag: {
222
271
  <K extends E extends { _tag: string } ? E["_tag"] : never, E, R1, E1, A1>(
223
272
  tag: K,
224
273
  f: (e: Extract<E, { _tag: K }>) => Effect.Effect<A1, E1, R1>
225
- ): <R, A>(
226
- self: Client.Client<R, E, A>
227
- ) => Client.Client<R1 | R, E1 | Exclude<E, { _tag: K }>, A1 | A>
274
+ ): <A, R>(
275
+ self: Client.Client<A, E, R>
276
+ ) => Client.Client<A1 | A, E1 | Exclude<E, { _tag: K }>, R1 | R>
228
277
  <
229
278
  R,
230
279
  E,
@@ -234,10 +283,10 @@ export const catchTag: {
234
283
  E1,
235
284
  A1
236
285
  >(
237
- self: Client.Client<R, E, A>,
286
+ self: Client.Client<A, E, R>,
238
287
  tag: K,
239
288
  f: (e: Extract<E, { _tag: K }>) => Effect.Effect<A1, E1, R1>
240
- ): Client.Client<R1 | R, E1 | Exclude<E, { _tag: K }>, A1 | A>
289
+ ): Client.Client<A1 | A, E1 | Exclude<E, { _tag: K }>, R1 | R>
241
290
  } = dual(
242
291
  3,
243
292
  <
@@ -249,10 +298,10 @@ export const catchTag: {
249
298
  E1,
250
299
  A1
251
300
  >(
252
- self: Client.Client<R, E, A>,
301
+ self: Client.Client<A, E, R>,
253
302
  tag: K,
254
303
  f: (e: Extract<E, { _tag: K }>) => Effect.Effect<A1, E1, R1>
255
- ): Client.Client<R1 | R, E1 | Exclude<E, { _tag: K }>, A1 | A> => transformResponse(self, Effect.catchTag(tag, f))
304
+ ): Client.Client<A1 | A, E1 | Exclude<E, { _tag: K }>, R1 | R> => transformResponse(self, Effect.catchTag(tag, f))
256
305
  )
257
306
 
258
307
  /** @internal */
@@ -276,14 +325,14 @@ export const catchTags: {
276
325
  })
277
326
  >(
278
327
  cases: Cases
279
- ): <R, A>(
280
- self: Client.Client<R, E, A>
328
+ ): <A, R>(
329
+ self: Client.Client<A, E, R>
281
330
  ) => Client.Client<
282
- | R
331
+ | A
283
332
  | {
284
333
  [K in keyof Cases]: Cases[K] extends (
285
334
  ...args: Array<any>
286
- ) => Effect.Effect<any, any, infer R> ? R
335
+ ) => Effect.Effect<infer A, any, any> ? A
287
336
  : never
288
337
  }[keyof Cases],
289
338
  | Exclude<E, { _tag: keyof Cases }>
@@ -293,18 +342,18 @@ export const catchTags: {
293
342
  ) => Effect.Effect<any, infer E, any> ? E
294
343
  : never
295
344
  }[keyof Cases],
296
- | A
345
+ | R
297
346
  | {
298
347
  [K in keyof Cases]: Cases[K] extends (
299
348
  ...args: Array<any>
300
- ) => Effect.Effect<infer A, any, any> ? A
349
+ ) => Effect.Effect<any, any, infer R> ? R
301
350
  : never
302
351
  }[keyof Cases]
303
352
  >
304
353
  <
305
- R,
306
- E extends { _tag: string },
307
354
  A,
355
+ E extends { _tag: string },
356
+ R,
308
357
  Cases extends
309
358
  & {
310
359
  [K in Extract<E, { _tag: string }>["_tag"]]+?: (
@@ -321,14 +370,14 @@ export const catchTags: {
321
370
  ]: never
322
371
  })
323
372
  >(
324
- self: Client.Client<R, E, A>,
373
+ self: Client.Client<A, E, R>,
325
374
  cases: Cases
326
375
  ): Client.Client<
327
- | R
376
+ | A
328
377
  | {
329
378
  [K in keyof Cases]: Cases[K] extends (
330
379
  ...args: Array<any>
331
- ) => Effect.Effect<any, any, infer R> ? R
380
+ ) => Effect.Effect<infer A, any, any> ? A
332
381
  : never
333
382
  }[keyof Cases],
334
383
  | Exclude<E, { _tag: keyof Cases }>
@@ -338,20 +387,20 @@ export const catchTags: {
338
387
  ) => Effect.Effect<any, infer E, any> ? E
339
388
  : never
340
389
  }[keyof Cases],
341
- | A
390
+ | R
342
391
  | {
343
392
  [K in keyof Cases]: Cases[K] extends (
344
393
  ...args: Array<any>
345
- ) => Effect.Effect<infer A, any, any> ? A
394
+ ) => Effect.Effect<any, any, infer R> ? R
346
395
  : never
347
396
  }[keyof Cases]
348
397
  >
349
398
  } = dual(
350
399
  2,
351
400
  <
352
- R,
353
- E extends { _tag: string },
354
401
  A,
402
+ E extends { _tag: string },
403
+ R,
355
404
  Cases extends
356
405
  & {
357
406
  [K in Extract<E, { _tag: string }>["_tag"]]+?: (
@@ -368,14 +417,14 @@ export const catchTags: {
368
417
  ]: never
369
418
  })
370
419
  >(
371
- self: Client.Client<R, E, A>,
420
+ self: Client.Client<A, E, R>,
372
421
  cases: Cases
373
422
  ): Client.Client<
374
- | R
423
+ | A
375
424
  | {
376
425
  [K in keyof Cases]: Cases[K] extends (
377
426
  ...args: Array<any>
378
- ) => Effect.Effect<any, any, infer R> ? R
427
+ ) => Effect.Effect<infer A, any, any> ? A
379
428
  : never
380
429
  }[keyof Cases],
381
430
  | Exclude<E, { _tag: keyof Cases }>
@@ -385,11 +434,11 @@ export const catchTags: {
385
434
  ) => Effect.Effect<any, infer E, any> ? E
386
435
  : never
387
436
  }[keyof Cases],
388
- | A
437
+ | R
389
438
  | {
390
439
  [K in keyof Cases]: Cases[K] extends (
391
440
  ...args: Array<any>
392
- ) => Effect.Effect<infer A, any, any> ? A
441
+ ) => Effect.Effect<any, any, infer R> ? R
393
442
  : never
394
443
  }[keyof Cases]
395
444
  > => transformResponse(self, Effect.catchTags(cases))
@@ -399,17 +448,17 @@ export const catchTags: {
399
448
  export const catchAll: {
400
449
  <E, R2, E2, A2>(
401
450
  f: (e: E) => Effect.Effect<A2, E2, R2>
402
- ): <R, A>(self: Client.Client<R, E, A>) => Client.Client<R | R2, E2, A2 | A>
403
- <R, E, A, R2, E2, A2>(
404
- self: Client.Client<R, E, A>,
451
+ ): <A, R>(self: Client.Client<A, E, R>) => Client.Client<A2 | A, E2, R | R2>
452
+ <A, E, R, R2, E2, A2>(
453
+ self: Client.Client<A, E, R>,
405
454
  f: (e: E) => Effect.Effect<A2, E2, R2>
406
- ): Client.Client<R | R2, E2, A2 | A>
455
+ ): Client.Client<A2 | A, E2, R | R2>
407
456
  } = dual(
408
457
  2,
409
- <R, E, A, R2, E2, A2>(
410
- self: Client.Client<R, E, A>,
458
+ <A, E, R, R2, E2, A2>(
459
+ self: Client.Client<A, E, R>,
411
460
  f: (e: E) => Effect.Effect<A2, E2, R2>
412
- ): Client.Client<R | R2, E2, A2 | A> => transformResponse(self, Effect.catchAll(f))
461
+ ): Client.Client<A2 | A, E2, R | R2> => transformResponse(self, Effect.catchAll(f))
413
462
  )
414
463
 
415
464
  /** @internal */
@@ -417,14 +466,14 @@ export const filterOrElse = dual<
417
466
  <A, R2, E2, B>(
418
467
  f: Predicate.Predicate<A>,
419
468
  orElse: (a: A) => Effect.Effect<B, E2, R2>
420
- ) => <R, E>(
421
- self: Client.Client<R, E, A>
422
- ) => Client.Client<R2 | R, E2 | E, A | B>,
423
- <R, E, A, R2, E2, B>(
424
- self: Client.Client<R, E, A>,
469
+ ) => <E, R>(
470
+ self: Client.Client<A, E, R>
471
+ ) => Client.Client<A | B, E2 | E, R2 | R>,
472
+ <A, E, R, R2, E2, B>(
473
+ self: Client.Client<A, E, R>,
425
474
  f: Predicate.Predicate<A>,
426
475
  orElse: (a: A) => Effect.Effect<B, E2, R2>
427
- ) => Client.Client<R2 | R, E2 | E, A | B>
476
+ ) => Client.Client<A | B, E2 | E, R2 | R>
428
477
  >(3, (self, f, orElse) => transformResponse(self, Effect.filterOrElse(f, orElse)))
429
478
 
430
479
  /** @internal */
@@ -432,93 +481,61 @@ export const filterOrFail = dual<
432
481
  <A, E2>(
433
482
  f: Predicate.Predicate<A>,
434
483
  orFailWith: (a: A) => E2
435
- ) => <R, E>(self: Client.Client<R, E, A>) => Client.Client<R, E2 | E, A>,
436
- <R, E, A, E2>(
437
- self: Client.Client<R, E, A>,
484
+ ) => <E, R>(self: Client.Client<A, E, R>) => Client.Client<A, E2 | E, R>,
485
+ <A, E, R, E2>(
486
+ self: Client.Client<A, E, R>,
438
487
  f: Predicate.Predicate<A>,
439
488
  orFailWith: (a: A) => E2
440
- ) => Client.Client<R, E2 | E, A>
489
+ ) => Client.Client<A, E2 | E, R>
441
490
  >(3, (self, f, orFailWith) => transformResponse(self, Effect.filterOrFail(f, orFailWith)))
442
491
 
443
- /** @internal */
444
- export const filterStatus = dual<
445
- (
446
- f: (status: number) => boolean
447
- ) => <R, E>(
448
- self: Client.Client.WithResponse<R, E>
449
- ) => Client.Client.WithResponse<R, E | Error.ResponseError>,
450
- <R, E>(
451
- self: Client.Client.WithResponse<R, E>,
452
- f: (status: number) => boolean
453
- ) => Client.Client.WithResponse<R, E | Error.ResponseError>
454
- >(2, (self, f) =>
455
- transform(self, (effect, request) =>
456
- Effect.filterOrFail(
457
- effect,
458
- (response) => f(response.status),
459
- (response) =>
460
- new Error.ResponseError({
461
- request,
462
- response,
463
- reason: "StatusCode",
464
- error: "non 2xx status code"
465
- })
466
- )))
467
-
468
- /** @internal */
469
- export const filterStatusOk: <R, E>(
470
- self: Client.Client.WithResponse<R, E>
471
- ) => Client.Client.WithResponse<R, E | Error.ResponseError> = filterStatus(
472
- (status) => status >= 200 && status < 300
473
- )
474
-
475
492
  /** @internal */
476
493
  export const map = dual<
477
494
  <A, B>(
478
495
  f: (a: A) => B
479
- ) => <R, E>(self: Client.Client<R, E, A>) => Client.Client<R, E, B>,
480
- <R, E, A, B>(
481
- self: Client.Client<R, E, A>,
496
+ ) => <E, R>(self: Client.Client<A, E, R>) => Client.Client<B, E, R>,
497
+ <A, E, R, B>(
498
+ self: Client.Client<A, E, R>,
482
499
  f: (a: A) => B
483
- ) => Client.Client<R, E, B>
500
+ ) => Client.Client<B, E, R>
484
501
  >(2, (self, f) => transformResponse(self, Effect.map(f)))
485
502
 
486
503
  /** @internal */
487
504
  export const mapEffect = dual<
488
505
  <A, R2, E2, B>(
489
506
  f: (a: A) => Effect.Effect<B, E2, R2>
490
- ) => <R, E>(self: Client.Client<R, E, A>) => Client.Client<R | R2, E | E2, B>,
491
- <R, E, A, R2, E2, B>(
492
- self: Client.Client<R, E, A>,
507
+ ) => <E, R>(self: Client.Client<A, E, R>) => Client.Client<B, E | E2, R | R2>,
508
+ <A, E, R, R2, E2, B>(
509
+ self: Client.Client<A, E, R>,
493
510
  f: (a: A) => Effect.Effect<B, E2, R2>
494
- ) => Client.Client<R | R2, E | E2, B>
511
+ ) => Client.Client<B, E | E2, R | R2>
495
512
  >(2, (self, f) => transformResponse(self, Effect.flatMap(f)))
496
513
 
497
514
  /** @internal */
498
- export const scoped = <R, E, A>(
499
- self: Client.Client<R, E, A>
500
- ): Client.Client<Exclude<R, Scope.Scope>, E, A> => transformResponse(self, Effect.scoped)
515
+ export const scoped = <A, E, R>(
516
+ self: Client.Client<A, E, R>
517
+ ): Client.Client<A, E, Exclude<R, Scope.Scope>> => transformResponse(self, Effect.scoped)
501
518
 
502
519
  /** @internal */
503
520
  export const mapEffectScoped = dual<
504
521
  <A, R2, E2, B>(
505
522
  f: (a: A) => Effect.Effect<B, E2, R2>
506
- ) => <R, E>(self: Client.Client<R, E, A>) => Client.Client<Exclude<R | R2, Scope.Scope>, E | E2, B>,
507
- <R, E, A, R2, E2, B>(
508
- self: Client.Client<R, E, A>,
523
+ ) => <E, R>(self: Client.Client<A, E, R>) => Client.Client<B, E | E2, Exclude<R | R2, Scope.Scope>>,
524
+ <A, E, R, R2, E2, B>(
525
+ self: Client.Client<A, E, R>,
509
526
  f: (a: A) => Effect.Effect<B, E2, R2>
510
- ) => Client.Client<Exclude<R | R2, Scope.Scope>, E | E2, B>
527
+ ) => Client.Client<B, E | E2, Exclude<R | R2, Scope.Scope>>
511
528
  >(2, (self, f) => scoped(mapEffect(self, f)))
512
529
 
513
530
  /** @internal */
514
531
  export const mapRequest = dual<
515
532
  (
516
533
  f: (a: ClientRequest.ClientRequest) => ClientRequest.ClientRequest
517
- ) => <R, E, A>(self: Client.Client<R, E, A>) => Client.Client<R, E, A>,
518
- <R, E, A>(
519
- self: Client.Client<R, E, A>,
534
+ ) => <A, E, R>(self: Client.Client<A, E, R>) => Client.Client<A, E, R>,
535
+ <A, E, R>(
536
+ self: Client.Client<A, E, R>,
520
537
  f: (a: ClientRequest.ClientRequest) => ClientRequest.ClientRequest
521
- ) => Client.Client<R, E, A>
538
+ ) => Client.Client<A, E, R>
522
539
  >(2, (self, f) => make(self.execute, (request) => Effect.map(self.preprocess(request), f)))
523
540
 
524
541
  /** @internal */
@@ -527,26 +544,26 @@ export const mapRequestEffect = dual<
527
544
  f: (
528
545
  a: ClientRequest.ClientRequest
529
546
  ) => Effect.Effect<ClientRequest.ClientRequest, E2, R2>
530
- ) => <R, E, A>(
531
- self: Client.Client<R, E, A>
532
- ) => Client.Client<R | R2, E | E2, A>,
533
- <R, E, A, R2, E2>(
534
- self: Client.Client<R, E, A>,
547
+ ) => <A, E, R>(
548
+ self: Client.Client<A, E, R>
549
+ ) => Client.Client<A, E | E2, R | R2>,
550
+ <A, E, R, R2, E2>(
551
+ self: Client.Client<A, E, R>,
535
552
  f: (
536
553
  a: ClientRequest.ClientRequest
537
554
  ) => Effect.Effect<ClientRequest.ClientRequest, E2, R2>
538
- ) => Client.Client<R | R2, E | E2, A>
555
+ ) => Client.Client<A, E | E2, R | R2>
539
556
  >(2, (self, f) => make(self.execute as any, (request) => Effect.flatMap(self.preprocess(request), f)))
540
557
 
541
558
  /** @internal */
542
559
  export const mapInputRequest = dual<
543
560
  (
544
561
  f: (a: ClientRequest.ClientRequest) => ClientRequest.ClientRequest
545
- ) => <R, E, A>(self: Client.Client<R, E, A>) => Client.Client<R, E, A>,
546
- <R, E, A>(
547
- self: Client.Client<R, E, A>,
562
+ ) => <A, E, R>(self: Client.Client<A, E, R>) => Client.Client<A, E, R>,
563
+ <A, E, R>(
564
+ self: Client.Client<A, E, R>,
548
565
  f: (a: ClientRequest.ClientRequest) => ClientRequest.ClientRequest
549
- ) => Client.Client<R, E, A>
566
+ ) => Client.Client<A, E, R>
550
567
  >(2, (self, f) => make(self.execute, (request) => self.preprocess(f(request))))
551
568
 
552
569
  /** @internal */
@@ -555,32 +572,32 @@ export const mapInputRequestEffect = dual<
555
572
  f: (
556
573
  a: ClientRequest.ClientRequest
557
574
  ) => Effect.Effect<ClientRequest.ClientRequest, E2, R2>
558
- ) => <R, E, A>(
559
- self: Client.Client<R, E, A>
560
- ) => Client.Client<R | R2, E | E2, A>,
561
- <R, E, A, R2, E2>(
562
- self: Client.Client<R, E, A>,
575
+ ) => <A, E, R>(
576
+ self: Client.Client<A, E, R>
577
+ ) => Client.Client<A, E | E2, R | R2>,
578
+ <A, E, R, R2, E2>(
579
+ self: Client.Client<A, E, R>,
563
580
  f: (
564
581
  a: ClientRequest.ClientRequest
565
582
  ) => Effect.Effect<ClientRequest.ClientRequest, E2, R2>
566
- ) => Client.Client<R | R2, E | E2, A>
583
+ ) => Client.Client<A, E | E2, R | R2>
567
584
  >(2, (self, f) => make(self.execute as any, (request) => Effect.flatMap(f(request), self.preprocess)))
568
585
 
569
586
  /** @internal */
570
587
  export const retry: {
571
588
  <R1, E extends E0, E0, B>(
572
589
  policy: Schedule.Schedule<B, E0, R1>
573
- ): <R, A>(self: Client.Client<R, E, A>) => Client.Client<R1 | R, E, A>
574
- <R, E extends E0, E0, A, R1, B>(
575
- self: Client.Client<R, E, A>,
590
+ ): <A, R>(self: Client.Client<A, E, R>) => Client.Client<A, E, R1 | R>
591
+ <A, E extends E0, E0, R, R1, B>(
592
+ self: Client.Client<A, E, R>,
576
593
  policy: Schedule.Schedule<B, E0, R1>
577
- ): Client.Client<R | R1, E, A>
594
+ ): Client.Client<A, E, R | R1>
578
595
  } = dual(
579
596
  2,
580
- <R, E extends E0, E0, A, R1, B>(
581
- self: Client.Client<R, E, A>,
597
+ <A, E extends E0, E0, R, R1, B>(
598
+ self: Client.Client<A, E, R>,
582
599
  policy: Schedule.Schedule<B, E0, R1>
583
- ): Client.Client<R | R1, E, A> => transformResponse(self, Effect.retry(policy))
600
+ ): Client.Client<A, E, R | R1> => transformResponse(self, Effect.retry(policy))
584
601
  )
585
602
 
586
603
  /** @internal */
@@ -588,15 +605,15 @@ export const schemaFunction = dual<
588
605
  <SA, SI, SR>(
589
606
  schema: Schema.Schema<SA, SI, SR>,
590
607
  options?: ParseOptions | undefined
591
- ) => <R, E, A>(
592
- self: Client.Client<R, E, A>
608
+ ) => <A, E, R>(
609
+ self: Client.Client<A, E, R>
593
610
  ) => (
594
611
  request: ClientRequest.ClientRequest
595
612
  ) => (
596
613
  a: SA
597
614
  ) => Effect.Effect<A, E | ParseResult.ParseError | Error.RequestError, SR | R>,
598
- <R, E, A, SA, SI, SR>(
599
- self: Client.Client<R, E, A>,
615
+ <A, E, R, SA, SI, SR>(
616
+ self: Client.Client<A, E, R>,
600
617
  schema: Schema.Schema<SA, SI, SR>,
601
618
  options?: ParseOptions | undefined
602
619
  ) => (
@@ -631,41 +648,41 @@ export const schemaFunction = dual<
631
648
  export const tap = dual<
632
649
  <A, R2, E2, _>(
633
650
  f: (a: A) => Effect.Effect<_, E2, R2>
634
- ) => <R, E>(self: Client.Client<R, E, A>) => Client.Client<R | R2, E | E2, A>,
635
- <R, E, A, R2, E2, _>(
636
- self: Client.Client<R, E, A>,
651
+ ) => <E, R>(self: Client.Client<A, E, R>) => Client.Client<A, E | E2, R | R2>,
652
+ <A, E, R, R2, E2, _>(
653
+ self: Client.Client<A, E, R>,
637
654
  f: (a: A) => Effect.Effect<_, E2, R2>
638
- ) => Client.Client<R | R2, E | E2, A>
655
+ ) => Client.Client<A, E | E2, R | R2>
639
656
  >(2, (self, f) => transformResponse(self, Effect.tap(f)))
640
657
 
641
658
  /** @internal */
642
659
  export const tapRequest = dual<
643
660
  <R2, E2, _>(
644
661
  f: (a: ClientRequest.ClientRequest) => Effect.Effect<_, E2, R2>
645
- ) => <R, E, A>(
646
- self: Client.Client<R, E, A>
647
- ) => Client.Client<R | R2, E | E2, A>,
648
- <R, E, A, R2, E2, _>(
649
- self: Client.Client<R, E, A>,
662
+ ) => <A, E, R>(
663
+ self: Client.Client<A, E, R>
664
+ ) => Client.Client<A, E | E2, R | R2>,
665
+ <A, E, R, R2, E2, _>(
666
+ self: Client.Client<A, E, R>,
650
667
  f: (a: ClientRequest.ClientRequest) => Effect.Effect<_, E2, R2>
651
- ) => Client.Client<R | R2, E | E2, A>
668
+ ) => Client.Client<A, E | E2, R | R2>
652
669
  >(2, (self, f) => make(self.execute as any, (request) => Effect.tap(self.preprocess(request), f)))
653
670
 
654
671
  /** @internal */
655
672
  export const withCookiesRef = dual<
656
673
  (
657
674
  ref: Ref.Ref<Cookies.Cookies>
658
- ) => <R, E>(self: Client.Client.WithResponse<R, E>) => Client.Client.WithResponse<R, E>,
659
- <R, E>(
660
- self: Client.Client.WithResponse<R, E>,
675
+ ) => <E, R>(self: Client.Client.WithResponse<E, R>) => Client.Client.WithResponse<E, R>,
676
+ <E, R>(
677
+ self: Client.Client.WithResponse<E, R>,
661
678
  ref: Ref.Ref<Cookies.Cookies>
662
- ) => Client.Client.WithResponse<R, E>
679
+ ) => Client.Client.WithResponse<E, R>
663
680
  >(
664
681
  2,
665
- <R, E>(
666
- self: Client.Client.WithResponse<R, E>,
682
+ <E, R>(
683
+ self: Client.Client.WithResponse<E, R>,
667
684
  ref: Ref.Ref<Cookies.Cookies>
668
- ): Client.Client.WithResponse<R, E> =>
685
+ ): Client.Client.WithResponse<E, R> =>
669
686
  make(
670
687
  (request: Effect.Effect<ClientRequest.ClientRequest, E, R>) =>
671
688
  Effect.tap(