@effect/platform 0.31.2 → 0.32.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.
@@ -22,7 +22,9 @@ import * as internalRequest from "./clientRequest.js"
22
22
  import * as internalResponse from "./clientResponse.js"
23
23
 
24
24
  /** @internal */
25
- export const TypeId: Client.TypeId = Symbol.for("@effect/platform/Http/Client") as Client.TypeId
25
+ export const TypeId: Client.TypeId = Symbol.for(
26
+ "@effect/platform/Http/Client"
27
+ ) as Client.TypeId
26
28
 
27
29
  /** @internal */
28
30
  export const tag = Context.Tag<Client.Client.Default>(TypeId)
@@ -36,7 +38,9 @@ const clientProto = {
36
38
 
37
39
  /** @internal */
38
40
  export const make = <R, E, A, R2, E2>(
39
- execute: (request: Effect.Effect<R2, E2, ClientRequest.ClientRequest>) => Effect.Effect<R, E, A>,
41
+ execute: (
42
+ request: Effect.Effect<R2, E2, ClientRequest.ClientRequest>
43
+ ) => Effect.Effect<R, E, A>,
40
44
  preprocess: Client.Client.Preprocess<R2, E2>
41
45
  ): Client.Client<R, E, A> => {
42
46
  function client(request: ClientRequest.ClientRequest) {
@@ -68,13 +72,20 @@ const addB3Headers = (req: ClientRequest.ClientRequest) =>
68
72
  export const makeDefault = (
69
73
  f: (
70
74
  request: ClientRequest.ClientRequest
71
- ) => Effect.Effect<never, Error.HttpClientError, ClientResponse.ClientResponse>
75
+ ) => Effect.Effect<
76
+ never,
77
+ Error.HttpClientError,
78
+ ClientResponse.ClientResponse
79
+ >
72
80
  ): Client.Client.Default => make(Effect.flatMap(f), addB3Headers)
73
81
 
74
82
  /** @internal */
75
- export const fetch = (
76
- options: RequestInit = {}
77
- ): Client.Client.Default =>
83
+ export const Fetch = Context.Tag<Client.Fetch, typeof globalThis.fetch>(
84
+ Symbol.for("@effect/platform/Http/Client/Fetch")
85
+ )
86
+
87
+ /** @internal */
88
+ export const fetch = (options: RequestInit = {}): Client.Client.Default =>
78
89
  makeDefault((request) =>
79
90
  Effect.flatMap(
80
91
  UrlParams.makeUrl(request.url, request.urlParams, (_) =>
@@ -84,13 +95,14 @@ export const fetch = (
84
95
  error: _
85
96
  })),
86
97
  (url) =>
87
- Effect.suspend(() => {
98
+ Effect.flatMap(Effect.serviceOption(Fetch), (fetch_) => {
99
+ const fetch = fetch_._tag === "Some" ? fetch_.value : globalThis.fetch
88
100
  const headers = new Headers(request.headers)
89
101
  const send = (body: BodyInit | undefined) =>
90
102
  Effect.map(
91
103
  Effect.tryPromise({
92
104
  try: (signal) =>
93
- globalThis.fetch(url, {
105
+ fetch(url, {
94
106
  ...options,
95
107
  method: request.method,
96
108
  headers,
@@ -130,9 +142,7 @@ const convertBody = (body: Body.Body): BodyInit | undefined => {
130
142
  }
131
143
 
132
144
  /** @internal */
133
- export const fetchOk = (
134
- options: RequestInit = {}
135
- ): Client.Client.Default => filterStatusOk(fetch(options))
145
+ export const fetchOk = (options: RequestInit = {}): Client.Client.Default => filterStatusOk(fetch(options))
136
146
 
137
147
  /** @internal */
138
148
  export const layer = Layer.succeed(tag, fetch())
@@ -140,20 +150,23 @@ export const layer = Layer.succeed(tag, fetch())
140
150
  /** @internal */
141
151
  export const transform = dual<
142
152
  <R, E, A, R1, E1, A1>(
143
- f: (effect: Effect.Effect<R, E, A>, request: ClientRequest.ClientRequest) => Effect.Effect<R1, E1, A1>
153
+ f: (
154
+ effect: Effect.Effect<R, E, A>,
155
+ request: ClientRequest.ClientRequest
156
+ ) => Effect.Effect<R1, E1, A1>
144
157
  ) => (self: Client.Client<R, E, A>) => Client.Client<R | R1, E | E1, A1>,
145
158
  <R, E, A, R1, E1, A1>(
146
159
  self: Client.Client<R, E, A>,
147
- f: (effect: Effect.Effect<R, E, A>, request: ClientRequest.ClientRequest) => Effect.Effect<R1, E1, A1>
160
+ f: (
161
+ effect: Effect.Effect<R, E, A>,
162
+ request: ClientRequest.ClientRequest
163
+ ) => Effect.Effect<R1, E1, A1>
148
164
  ) => Client.Client<R | R1, E | E1, A1>
149
- >(
150
- 2,
151
- (self, f) =>
152
- make(
153
- Effect.flatMap((request) => f(self.execute(Effect.succeed(request)), request)),
154
- self.preprocess
155
- )
156
- )
165
+ >(2, (self, f) =>
166
+ make(
167
+ Effect.flatMap((request) => f(self.execute(Effect.succeed(request)), request)),
168
+ self.preprocess
169
+ ))
157
170
 
158
171
  /** @internal */
159
172
  export const transformResponse = dual<
@@ -168,20 +181,36 @@ export const transformResponse = dual<
168
181
 
169
182
  /** @internal */
170
183
  export const catchTag: {
171
- <K extends (E extends { _tag: string } ? E["_tag"] : never), E, R1, E1, A1>(
184
+ <K extends E extends { _tag: string } ? E["_tag"] : never, E, R1, E1, A1>(
172
185
  tag: K,
173
186
  f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
174
187
  ): <R, A>(
175
188
  self: Client.Client<R, E, A>
176
189
  ) => Client.Client<R1 | R, E1 | Exclude<E, { _tag: K }>, A1 | A>
177
- <R, E, A, K extends (E extends { _tag: string } ? E["_tag"] : never), R1, E1, A1>(
190
+ <
191
+ R,
192
+ E,
193
+ A,
194
+ K extends E extends { _tag: string } ? E["_tag"] : never,
195
+ R1,
196
+ E1,
197
+ A1
198
+ >(
178
199
  self: Client.Client<R, E, A>,
179
200
  tag: K,
180
201
  f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
181
202
  ): Client.Client<R1 | R, E1 | Exclude<E, { _tag: K }>, A1 | A>
182
203
  } = dual(
183
204
  3,
184
- <R, E, A, K extends (E extends { _tag: string } ? E["_tag"] : never), R1, E1, A1>(
205
+ <
206
+ R,
207
+ E,
208
+ A,
209
+ K extends E extends { _tag: string } ? E["_tag"] : never,
210
+ R1,
211
+ E1,
212
+ A1
213
+ >(
185
214
  self: Client.Client<R, E, A>,
186
215
  tag: K,
187
216
  f: (e: Extract<E, { _tag: K }>) => Effect.Effect<R1, E1, A1>
@@ -192,10 +221,21 @@ export const catchTag: {
192
221
  export const catchTags: {
193
222
  <
194
223
  E,
195
- Cases
196
- extends (E extends { _tag: string }
197
- ? { [K in E["_tag"]]+?: ((error: Extract<E, { _tag: K }>) => Effect.Effect<any, any, any>) }
198
- : {})
224
+ Cases extends
225
+ & {
226
+ [K in Extract<E, { _tag: string }>["_tag"]]+?: (
227
+ error: Extract<E, { _tag: K }>
228
+ ) => Effect.Effect<any, any, any>
229
+ }
230
+ & (unknown extends E ? {}
231
+ : {
232
+ [
233
+ K in Exclude<
234
+ keyof Cases,
235
+ Extract<E, { _tag: string }>["_tag"]
236
+ >
237
+ ]: never
238
+ })
199
239
  >(
200
240
  cases: Cases
201
241
  ): <R, A>(
@@ -227,10 +267,21 @@ export const catchTags: {
227
267
  R,
228
268
  E extends { _tag: string },
229
269
  A,
230
- Cases
231
- extends (E extends { _tag: string }
232
- ? { [K in E["_tag"]]+?: ((error: Extract<E, { _tag: K }>) => Effect.Effect<any, any, any>) }
233
- : {})
270
+ Cases extends
271
+ & {
272
+ [K in Extract<E, { _tag: string }>["_tag"]]+?: (
273
+ error: Extract<E, { _tag: K }>
274
+ ) => Effect.Effect<any, any, any>
275
+ }
276
+ & (unknown extends E ? {}
277
+ : {
278
+ [
279
+ K in Exclude<
280
+ keyof Cases,
281
+ Extract<E, { _tag: string }>["_tag"]
282
+ >
283
+ ]: never
284
+ })
234
285
  >(
235
286
  self: Client.Client<R, E, A>,
236
287
  cases: Cases
@@ -263,10 +314,21 @@ export const catchTags: {
263
314
  R,
264
315
  E extends { _tag: string },
265
316
  A,
266
- Cases
267
- extends (E extends { _tag: string }
268
- ? { [K in E["_tag"]]+?: ((error: Extract<E, { _tag: K }>) => Effect.Effect<any, any, any>) }
269
- : {})
317
+ Cases extends
318
+ & {
319
+ [K in Extract<E, { _tag: string }>["_tag"]]+?: (
320
+ error: Extract<E, { _tag: K }>
321
+ ) => Effect.Effect<any, any, any>
322
+ }
323
+ & (unknown extends E ? {}
324
+ : {
325
+ [
326
+ K in Exclude<
327
+ keyof Cases,
328
+ Extract<E, { _tag: string }>["_tag"]
329
+ >
330
+ ]: never
331
+ })
270
332
  >(
271
333
  self: Client.Client<R, E, A>,
272
334
  cases: Cases
@@ -297,9 +359,9 @@ export const catchTags: {
297
359
 
298
360
  /** @internal */
299
361
  export const catchAll: {
300
- <E, R2, E2, A2>(f: (e: E) => Effect.Effect<R2, E2, A2>): <R, A>(
301
- self: Client.Client<R, E, A>
302
- ) => Client.Client<R | R2, E2, A2 | A>
362
+ <E, R2, E2, A2>(
363
+ f: (e: E) => Effect.Effect<R2, E2, A2>
364
+ ): <R, A>(self: Client.Client<R, E, A>) => Client.Client<R | R2, E2, A2 | A>
303
365
  <R, E, A, R2, E2, A2>(
304
366
  self: Client.Client<R, E, A>,
305
367
  f: (e: E) => Effect.Effect<R2, E2, A2>
@@ -314,7 +376,10 @@ export const catchAll: {
314
376
 
315
377
  /** @internal */
316
378
  export const filterOrElse = dual<
317
- <A, R2, E2, B>(f: Predicate.Predicate<A>, orElse: (a: A) => Effect.Effect<R2, E2, B>) => <R, E>(
379
+ <A, R2, E2, B>(
380
+ f: Predicate.Predicate<A>,
381
+ orElse: (a: A) => Effect.Effect<R2, E2, B>
382
+ ) => <R, E>(
318
383
  self: Client.Client<R, E, A>
319
384
  ) => Client.Client<R2 | R, E2 | E, A | B>,
320
385
  <R, E, A, R2, E2, B>(
@@ -326,9 +391,10 @@ export const filterOrElse = dual<
326
391
 
327
392
  /** @internal */
328
393
  export const filterOrFail = dual<
329
- <A, E2>(f: Predicate.Predicate<A>, orFailWith: (a: A) => E2) => <R, E>(
330
- self: Client.Client<R, E, A>
331
- ) => Client.Client<R, E2 | E, A>,
394
+ <A, E2>(
395
+ f: Predicate.Predicate<A>,
396
+ orFailWith: (a: A) => E2
397
+ ) => <R, E>(self: Client.Client<R, E, A>) => Client.Client<R, E2 | E, A>,
332
398
  <R, E, A, E2>(
333
399
  self: Client.Client<R, E, A>,
334
400
  f: Predicate.Predicate<A>,
@@ -338,40 +404,41 @@ export const filterOrFail = dual<
338
404
 
339
405
  /** @internal */
340
406
  export const filterStatus = dual<
341
- (f: (status: number) => boolean) => <R, E>(
407
+ (
408
+ f: (status: number) => boolean
409
+ ) => <R, E>(
342
410
  self: Client.Client.WithResponse<R, E>
343
411
  ) => Client.Client.WithResponse<R, E | Error.ResponseError>,
344
412
  <R, E>(
345
413
  self: Client.Client.WithResponse<R, E>,
346
414
  f: (status: number) => boolean
347
415
  ) => Client.Client.WithResponse<R, E | Error.ResponseError>
348
- >(
349
- 2,
350
- (self, f) =>
351
- transform(self, (effect, request) =>
352
- Effect.filterOrFail(
353
- effect,
354
- (response) => f(response.status),
355
- (response) =>
356
- internalError.responseError({
357
- request,
358
- response,
359
- reason: "StatusCode",
360
- error: "non 2xx status code"
361
- })
362
- ))
363
- )
416
+ >(2, (self, f) =>
417
+ transform(self, (effect, request) =>
418
+ Effect.filterOrFail(
419
+ effect,
420
+ (response) => f(response.status),
421
+ (response) =>
422
+ internalError.responseError({
423
+ request,
424
+ response,
425
+ reason: "StatusCode",
426
+ error: "non 2xx status code"
427
+ })
428
+ )))
364
429
 
365
430
  /** @internal */
366
431
  export const filterStatusOk: <R, E>(
367
432
  self: Client.Client.WithResponse<R, E>
368
- ) => Client.Client.WithResponse<R, E | Error.ResponseError> = filterStatus((status) => status >= 200 && status < 300)
433
+ ) => Client.Client.WithResponse<R, E | Error.ResponseError> = filterStatus(
434
+ (status) => status >= 200 && status < 300
435
+ )
369
436
 
370
437
  /** @internal */
371
438
  export const map = dual<
372
- <A, B>(f: (a: A) => B) => <R, E>(
373
- self: Client.Client<R, E, A>
374
- ) => Client.Client<R, E, B>,
439
+ <A, B>(
440
+ f: (a: A) => B
441
+ ) => <R, E>(self: Client.Client<R, E, A>) => Client.Client<R, E, B>,
375
442
  <R, E, A, B>(
376
443
  self: Client.Client<R, E, A>,
377
444
  f: (a: A) => B
@@ -380,9 +447,9 @@ export const map = dual<
380
447
 
381
448
  /** @internal */
382
449
  export const mapEffect = dual<
383
- <A, R2, E2, B>(f: (a: A) => Effect.Effect<R2, E2, B>) => <R, E>(
384
- self: Client.Client<R, E, A>
385
- ) => Client.Client<R | R2, E | E2, B>,
450
+ <A, R2, E2, B>(
451
+ f: (a: A) => Effect.Effect<R2, E2, B>
452
+ ) => <R, E>(self: Client.Client<R, E, A>) => Client.Client<R | R2, E | E2, B>,
386
453
  <R, E, A, R2, E2, B>(
387
454
  self: Client.Client<R, E, A>,
388
455
  f: (a: A) => Effect.Effect<R2, E2, B>
@@ -391,9 +458,9 @@ export const mapEffect = dual<
391
458
 
392
459
  /** @internal */
393
460
  export const mapRequest = dual<
394
- (f: (a: ClientRequest.ClientRequest) => ClientRequest.ClientRequest) => <R, E, A>(
395
- self: Client.Client<R, E, A>
396
- ) => Client.Client<R, E, A>,
461
+ (
462
+ f: (a: ClientRequest.ClientRequest) => ClientRequest.ClientRequest
463
+ ) => <R, E, A>(self: Client.Client<R, E, A>) => Client.Client<R, E, A>,
397
464
  <R, E, A>(
398
465
  self: Client.Client<R, E, A>,
399
466
  f: (a: ClientRequest.ClientRequest) => ClientRequest.ClientRequest
@@ -402,20 +469,54 @@ export const mapRequest = dual<
402
469
 
403
470
  /** @internal */
404
471
  export const mapRequestEffect = dual<
405
- <R2, E2>(f: (a: ClientRequest.ClientRequest) => Effect.Effect<R2, E2, ClientRequest.ClientRequest>) => <R, E, A>(
472
+ <R2, E2>(
473
+ f: (
474
+ a: ClientRequest.ClientRequest
475
+ ) => Effect.Effect<R2, E2, ClientRequest.ClientRequest>
476
+ ) => <R, E, A>(
406
477
  self: Client.Client<R, E, A>
407
478
  ) => Client.Client<R | R2, E | E2, A>,
408
479
  <R, E, A, R2, E2>(
409
480
  self: Client.Client<R, E, A>,
410
- f: (a: ClientRequest.ClientRequest) => Effect.Effect<R2, E2, ClientRequest.ClientRequest>
481
+ f: (
482
+ a: ClientRequest.ClientRequest
483
+ ) => Effect.Effect<R2, E2, ClientRequest.ClientRequest>
411
484
  ) => Client.Client<R | R2, E | E2, A>
412
485
  >(2, (self, f) => make(self.execute as any, (request) => Effect.flatMap(self.preprocess(request), f)))
413
486
 
414
487
  /** @internal */
415
- export const retry: {
416
- <R1, E extends E0, E0, B>(policy: Schedule.Schedule<R1, E0, B>): <R, A>(
488
+ export const mapInputRequest = dual<
489
+ (
490
+ f: (a: ClientRequest.ClientRequest) => ClientRequest.ClientRequest
491
+ ) => <R, E, A>(self: Client.Client<R, E, A>) => Client.Client<R, E, A>,
492
+ <R, E, A>(
493
+ self: Client.Client<R, E, A>,
494
+ f: (a: ClientRequest.ClientRequest) => ClientRequest.ClientRequest
495
+ ) => Client.Client<R, E, A>
496
+ >(2, (self, f) => make(self.execute, (request) => self.preprocess(f(request))))
497
+
498
+ /** @internal */
499
+ export const mapInputRequestEffect = dual<
500
+ <R2, E2>(
501
+ f: (
502
+ a: ClientRequest.ClientRequest
503
+ ) => Effect.Effect<R2, E2, ClientRequest.ClientRequest>
504
+ ) => <R, E, A>(
417
505
  self: Client.Client<R, E, A>
418
- ) => Client.Client<R1 | R, E, A>
506
+ ) => Client.Client<R | R2, E | E2, A>,
507
+ <R, E, A, R2, E2>(
508
+ self: Client.Client<R, E, A>,
509
+ f: (
510
+ a: ClientRequest.ClientRequest
511
+ ) => Effect.Effect<R2, E2, ClientRequest.ClientRequest>
512
+ ) => Client.Client<R | R2, E | E2, A>
513
+ >(2, (self, f) => make(self.execute as any, (request) => Effect.flatMap(f(request), self.preprocess)))
514
+
515
+ /** @internal */
516
+ export const retry: {
517
+ <R1, E extends E0, E0, B>(
518
+ policy: Schedule.Schedule<R1, E0, B>
519
+ ): <R, A>(self: Client.Client<R, E, A>) => Client.Client<R1 | R, E, A>
419
520
  <R, E extends E0, E0, A, R1, B>(
420
521
  self: Client.Client<R, E, A>,
421
522
  policy: Schedule.Schedule<R1, E0, B>
@@ -436,13 +537,17 @@ export const schemaFunction = dual<
436
537
  self: Client.Client<R, E, A>
437
538
  ) => (
438
539
  request: ClientRequest.ClientRequest
439
- ) => (a: SA) => Effect.Effect<R, E | ParseResult.ParseError | Error.RequestError, A>,
540
+ ) => (
541
+ a: SA
542
+ ) => Effect.Effect<R, E | ParseResult.ParseError | Error.RequestError, A>,
440
543
  <R, E, A, SI, SA>(
441
544
  self: Client.Client<R, E, A>,
442
545
  schema: Schema.Schema<SI, SA>
443
546
  ) => (
444
547
  request: ClientRequest.ClientRequest
445
- ) => (a: SA) => Effect.Effect<R, E | ParseResult.ParseError | Error.RequestError, A>
548
+ ) => (
549
+ a: SA
550
+ ) => Effect.Effect<R, E | ParseResult.ParseError | Error.RequestError, A>
446
551
  >(2, (self, schema) => {
447
552
  const encode = Schema.encode(schema)
448
553
  return (request) => (a) =>
@@ -457,18 +562,20 @@ export const schemaFunction = dual<
457
562
  })
458
563
  }),
459
564
  (body) =>
460
- self(internalRequest.setBody(
461
- request,
462
- internalBody.uint8Array(body, "application/json")
463
- ))
565
+ self(
566
+ internalRequest.setBody(
567
+ request,
568
+ internalBody.uint8Array(body, "application/json")
569
+ )
570
+ )
464
571
  )
465
572
  })
466
573
 
467
574
  /** @internal */
468
575
  export const tap = dual<
469
- <A, R2, E2, _>(f: (a: A) => Effect.Effect<R2, E2, _>) => <R, E>(
470
- self: Client.Client<R, E, A>
471
- ) => Client.Client<R | R2, E | E2, A>,
576
+ <A, R2, E2, _>(
577
+ f: (a: A) => Effect.Effect<R2, E2, _>
578
+ ) => <R, E>(self: Client.Client<R, E, A>) => Client.Client<R | R2, E | E2, A>,
472
579
  <R, E, A, R2, E2, _>(
473
580
  self: Client.Client<R, E, A>,
474
581
  f: (a: A) => Effect.Effect<R2, E2, _>
@@ -477,7 +584,9 @@ export const tap = dual<
477
584
 
478
585
  /** @internal */
479
586
  export const tapRequest = dual<
480
- <R2, E2, _>(f: (a: ClientRequest.ClientRequest) => Effect.Effect<R2, E2, _>) => <R, E, A>(
587
+ <R2, E2, _>(
588
+ f: (a: ClientRequest.ClientRequest) => Effect.Effect<R2, E2, _>
589
+ ) => <R, E, A>(
481
590
  self: Client.Client<R, E, A>
482
591
  ) => Client.Client<R | R2, E | E2, A>,
483
592
  <R, E, A, R2, E2, _>(
@@ -79,7 +79,8 @@ class RouterImpl<R, E> extends Effectable.StructuralClass<
79
79
  }
80
80
  }
81
81
  toString() {
82
- return Inspectable.toString(this)
82
+ // TODO: remove any when fix lands
83
+ return (Inspectable as any).format(this)
83
84
  }
84
85
  [Inspectable.NodeInspectSymbol]() {
85
86
  return this.toJSON()
@@ -283,11 +283,4 @@ export const makePoolLayer = <W>(managerLayer: Layer.Layer<never, never, Worker.
283
283
  <Tag, I, E, O>(
284
284
  tag: Context.Tag<Tag, Worker.WorkerPool<I, E, O>>,
285
285
  options: Worker.WorkerPool.Options<I, W>
286
- ) =>
287
- Layer.provide(
288
- managerLayer,
289
- Layer.scoped(
290
- tag,
291
- makePool<W>()(options)
292
- )
293
- )
286
+ ) => Layer.scoped(tag, makePool<W>()(options)).pipe(Layer.provide(managerLayer))