@effect/platform 0.37.7 → 0.38.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 (51) hide show
  1. package/dist/cjs/Http/App.js +20 -4
  2. package/dist/cjs/Http/App.js.map +1 -1
  3. package/dist/cjs/Http/ClientResponse.js.map +1 -1
  4. package/dist/cjs/Http/Router.js.map +1 -1
  5. package/dist/cjs/Http/Server.js.map +1 -1
  6. package/dist/cjs/Http/ServerError.js +14 -1
  7. package/dist/cjs/Http/ServerError.js.map +1 -1
  8. package/dist/cjs/Http/ServerRequest.js.map +1 -1
  9. package/dist/cjs/internal/http/middleware.js +5 -4
  10. package/dist/cjs/internal/http/middleware.js.map +1 -1
  11. package/dist/cjs/internal/http/router.js.map +1 -1
  12. package/dist/cjs/internal/http/serverError.js +14 -1
  13. package/dist/cjs/internal/http/serverError.js.map +1 -1
  14. package/dist/dts/Http/App.d.ts +5 -7
  15. package/dist/dts/Http/App.d.ts.map +1 -1
  16. package/dist/dts/Http/ClientResponse.d.ts +2 -3
  17. package/dist/dts/Http/ClientResponse.d.ts.map +1 -1
  18. package/dist/dts/Http/Router.d.ts +45 -40
  19. package/dist/dts/Http/Router.d.ts.map +1 -1
  20. package/dist/dts/Http/Server.d.ts +4 -4
  21. package/dist/dts/Http/Server.d.ts.map +1 -1
  22. package/dist/dts/Http/ServerError.d.ts +15 -0
  23. package/dist/dts/Http/ServerError.d.ts.map +1 -1
  24. package/dist/dts/Http/ServerRequest.d.ts +1 -0
  25. package/dist/dts/Http/ServerRequest.d.ts.map +1 -1
  26. package/dist/dts/internal/http/router.d.ts +1 -1
  27. package/dist/dts/internal/http/router.d.ts.map +1 -1
  28. package/dist/esm/Http/App.js +20 -4
  29. package/dist/esm/Http/App.js.map +1 -1
  30. package/dist/esm/Http/ClientResponse.js.map +1 -1
  31. package/dist/esm/Http/Router.js.map +1 -1
  32. package/dist/esm/Http/Server.js.map +1 -1
  33. package/dist/esm/Http/ServerError.js +13 -0
  34. package/dist/esm/Http/ServerError.js.map +1 -1
  35. package/dist/esm/Http/ServerRequest.js.map +1 -1
  36. package/dist/esm/internal/http/middleware.js +5 -4
  37. package/dist/esm/internal/http/middleware.js.map +1 -1
  38. package/dist/esm/internal/http/router.js.map +1 -1
  39. package/dist/esm/internal/http/serverError.js +11 -0
  40. package/dist/esm/internal/http/serverError.js.map +1 -1
  41. package/package.json +4 -4
  42. package/src/Http/App.ts +26 -12
  43. package/src/Http/ClientResponse.ts +1 -2
  44. package/src/Http/Router.ts +79 -43
  45. package/src/Http/Server.ts +12 -4
  46. package/src/Http/ServerError.ts +18 -0
  47. package/src/Http/ServerRequest.ts +1 -0
  48. package/src/internal/http/middleware.ts +9 -4
  49. package/src/internal/http/router.ts +1 -1
  50. package/src/internal/http/server.ts +5 -5
  51. package/src/internal/http/serverError.ts +22 -0
@@ -8,6 +8,7 @@ import type * as Chunk from "effect/Chunk"
8
8
  import type * as Context from "effect/Context"
9
9
  import type * as Effect from "effect/Effect"
10
10
  import type * as Option from "effect/Option"
11
+ import type * as Scope from "effect/Scope"
11
12
  import * as internal from "../internal/http/router.js"
12
13
  import type * as App from "./App.js"
13
14
  import type * as Method from "./Method.js"
@@ -44,7 +45,7 @@ export declare namespace Router {
44
45
  /**
45
46
  * @since 1.0.0
46
47
  */
47
- export type ExcludeProvided<A> = Exclude<A, RouteContext | ServerRequest.ServerRequest>
48
+ export type ExcludeProvided<A> = Exclude<A, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
48
49
  }
49
50
 
50
51
  /**
@@ -186,7 +187,7 @@ export const makeRoute: <R, E>(
186
187
  path: PathInput,
187
188
  handler: Route.Handler<R, E>,
188
189
  prefix?: Option.Option<string>
189
- ) => Route<R, E> = internal.makeRoute
190
+ ) => Route<Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E> = internal.makeRoute
190
191
 
191
192
  /**
192
193
  * @since 1.0.0
@@ -231,7 +232,8 @@ export const mountApp: {
231
232
  ): <R, E>(
232
233
  self: Router<R, E>
233
234
  ) => Router<
234
- Exclude<R1, RouteContext | ServerRequest.ServerRequest> | Exclude<R, RouteContext | ServerRequest.ServerRequest>,
235
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
236
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
235
237
  E1 | E
236
238
  >
237
239
  <R, E, R1, E1>(
@@ -239,7 +241,8 @@ export const mountApp: {
239
241
  path: `/${string}`,
240
242
  that: App.Default<R1, E1>
241
243
  ): Router<
242
- Exclude<R, RouteContext | ServerRequest.ServerRequest> | Exclude<R1, RouteContext | ServerRequest.ServerRequest>,
244
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
245
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
243
246
  E | E1
244
247
  >
245
248
  } = internal.mountApp
@@ -257,7 +260,8 @@ export const route: (
257
260
  ): <R, E>(
258
261
  self: Router<R, E>
259
262
  ) => Router<
260
- Exclude<R1, RouteContext | ServerRequest.ServerRequest> | Exclude<R, RouteContext | ServerRequest.ServerRequest>,
263
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
264
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
261
265
  E1 | E
262
266
  >
263
267
  <R, E, R1, E1>(
@@ -265,7 +269,8 @@ export const route: (
265
269
  path: PathInput,
266
270
  handler: Route.Handler<R1, E1>
267
271
  ): Router<
268
- Exclude<R, RouteContext | ServerRequest.ServerRequest> | Exclude<R1, RouteContext | ServerRequest.ServerRequest>,
272
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
273
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
269
274
  E | E1
270
275
  >
271
276
  } = internal.route
@@ -281,7 +286,8 @@ export const all: {
281
286
  ): <R, E>(
282
287
  self: Router<R, E>
283
288
  ) => Router<
284
- Exclude<R1, RouteContext | ServerRequest.ServerRequest> | Exclude<R, RouteContext | ServerRequest.ServerRequest>,
289
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
290
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
285
291
  E1 | E
286
292
  >
287
293
  <R, E, R1, E1>(
@@ -289,7 +295,8 @@ export const all: {
289
295
  path: PathInput,
290
296
  handler: Route.Handler<R1, E1>
291
297
  ): Router<
292
- Exclude<R, RouteContext | ServerRequest.ServerRequest> | Exclude<R1, RouteContext | ServerRequest.ServerRequest>,
298
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
299
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
293
300
  E | E1
294
301
  >
295
302
  } = internal.all
@@ -305,7 +312,8 @@ export const get: {
305
312
  ): <R, E>(
306
313
  self: Router<R, E>
307
314
  ) => Router<
308
- Exclude<R1, RouteContext | ServerRequest.ServerRequest> | Exclude<R, RouteContext | ServerRequest.ServerRequest>,
315
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
316
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
309
317
  E1 | E
310
318
  >
311
319
  <R, E, R1, E1>(
@@ -313,7 +321,8 @@ export const get: {
313
321
  path: PathInput,
314
322
  handler: Route.Handler<R1, E1>
315
323
  ): Router<
316
- Exclude<R, RouteContext | ServerRequest.ServerRequest> | Exclude<R1, RouteContext | ServerRequest.ServerRequest>,
324
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
325
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
317
326
  E | E1
318
327
  >
319
328
  } = internal.get
@@ -329,7 +338,8 @@ export const post: {
329
338
  ): <R, E>(
330
339
  self: Router<R, E>
331
340
  ) => Router<
332
- Exclude<R1, RouteContext | ServerRequest.ServerRequest> | Exclude<R, RouteContext | ServerRequest.ServerRequest>,
341
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
342
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
333
343
  E1 | E
334
344
  >
335
345
  <R, E, R1, E1>(
@@ -337,7 +347,8 @@ export const post: {
337
347
  path: PathInput,
338
348
  handler: Route.Handler<R1, E1>
339
349
  ): Router<
340
- Exclude<R, RouteContext | ServerRequest.ServerRequest> | Exclude<R1, RouteContext | ServerRequest.ServerRequest>,
350
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
351
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
341
352
  E | E1
342
353
  >
343
354
  } = internal.post
@@ -353,7 +364,8 @@ export const patch: {
353
364
  ): <R, E>(
354
365
  self: Router<R, E>
355
366
  ) => Router<
356
- Exclude<R1, RouteContext | ServerRequest.ServerRequest> | Exclude<R, RouteContext | ServerRequest.ServerRequest>,
367
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
368
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
357
369
  E1 | E
358
370
  >
359
371
  <R, E, R1, E1>(
@@ -361,7 +373,8 @@ export const patch: {
361
373
  path: PathInput,
362
374
  handler: Route.Handler<R1, E1>
363
375
  ): Router<
364
- Exclude<R, RouteContext | ServerRequest.ServerRequest> | Exclude<R1, RouteContext | ServerRequest.ServerRequest>,
376
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
377
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
365
378
  E | E1
366
379
  >
367
380
  } = internal.patch
@@ -377,7 +390,8 @@ export const put: {
377
390
  ): <R, E>(
378
391
  self: Router<R, E>
379
392
  ) => Router<
380
- Exclude<R1, RouteContext | ServerRequest.ServerRequest> | Exclude<R, RouteContext | ServerRequest.ServerRequest>,
393
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
394
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
381
395
  E1 | E
382
396
  >
383
397
  <R, E, R1, E1>(
@@ -385,7 +399,8 @@ export const put: {
385
399
  path: PathInput,
386
400
  handler: Route.Handler<R1, E1>
387
401
  ): Router<
388
- Exclude<R, RouteContext | ServerRequest.ServerRequest> | Exclude<R1, RouteContext | ServerRequest.ServerRequest>,
402
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
403
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
389
404
  E | E1
390
405
  >
391
406
  } = internal.put
@@ -401,7 +416,8 @@ export const del: {
401
416
  ): <R, E>(
402
417
  self: Router<R, E>
403
418
  ) => Router<
404
- Exclude<R1, RouteContext | ServerRequest.ServerRequest> | Exclude<R, RouteContext | ServerRequest.ServerRequest>,
419
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
420
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
405
421
  E1 | E
406
422
  >
407
423
  <R, E, R1, E1>(
@@ -409,7 +425,8 @@ export const del: {
409
425
  path: PathInput,
410
426
  handler: Route.Handler<R1, E1>
411
427
  ): Router<
412
- Exclude<R, RouteContext | ServerRequest.ServerRequest> | Exclude<R1, RouteContext | ServerRequest.ServerRequest>,
428
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
429
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
413
430
  E | E1
414
431
  >
415
432
  } = internal.del
@@ -425,7 +442,8 @@ export const head: {
425
442
  ): <R, E>(
426
443
  self: Router<R, E>
427
444
  ) => Router<
428
- Exclude<R1, RouteContext | ServerRequest.ServerRequest> | Exclude<R, RouteContext | ServerRequest.ServerRequest>,
445
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
446
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
429
447
  E1 | E
430
448
  >
431
449
  <R, E, R1, E1>(
@@ -433,7 +451,8 @@ export const head: {
433
451
  path: PathInput,
434
452
  handler: Route.Handler<R1, E1>
435
453
  ): Router<
436
- Exclude<R, RouteContext | ServerRequest.ServerRequest> | Exclude<R1, RouteContext | ServerRequest.ServerRequest>,
454
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
455
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
437
456
  E | E1
438
457
  >
439
458
  } = internal.head
@@ -449,7 +468,8 @@ export const options: {
449
468
  ): <R, E>(
450
469
  self: Router<R, E>
451
470
  ) => Router<
452
- Exclude<R1, RouteContext | ServerRequest.ServerRequest> | Exclude<R, RouteContext | ServerRequest.ServerRequest>,
471
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
472
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
453
473
  E1 | E
454
474
  >
455
475
  <R, E, R1, E1>(
@@ -457,7 +477,8 @@ export const options: {
457
477
  path: PathInput,
458
478
  handler: Route.Handler<R1, E1>
459
479
  ): Router<
460
- Exclude<R, RouteContext | ServerRequest.ServerRequest> | Exclude<R1, RouteContext | ServerRequest.ServerRequest>,
480
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
481
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
461
482
  E | E1
462
483
  >
463
484
  } = internal.options
@@ -469,11 +490,11 @@ export const options: {
469
490
  export const use: {
470
491
  <R, E, R1, E1>(
471
492
  f: (self: Route.Handler<R, E>) => App.Default<R1, E1>
472
- ): (self: Router<R, E>) => Router<Exclude<R1, RouteContext | ServerRequest.ServerRequest>, E1>
493
+ ): (self: Router<R, E>) => Router<Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E1>
473
494
  <R, E, R1, E1>(
474
495
  self: Router<R, E>,
475
496
  f: (self: Route.Handler<R, E>) => App.Default<R1, E1>
476
- ): Router<Exclude<R1, RouteContext | ServerRequest.ServerRequest>, E1>
497
+ ): Router<Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E1>
477
498
  } = internal.use
478
499
 
479
500
  /**
@@ -486,14 +507,16 @@ export const catchAll: {
486
507
  ): <R>(
487
508
  self: Router<R, E>
488
509
  ) => Router<
489
- Exclude<R2, RouteContext | ServerRequest.ServerRequest> | Exclude<R, RouteContext | ServerRequest.ServerRequest>,
510
+ | Exclude<R2, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
511
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
490
512
  E2
491
513
  >
492
514
  <R, E, R2, E2>(
493
515
  self: Router<R, E>,
494
516
  f: (e: E) => Route.Handler<R2, E2>
495
517
  ): Router<
496
- Exclude<R, RouteContext | ServerRequest.ServerRequest> | Exclude<R2, RouteContext | ServerRequest.ServerRequest>,
518
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
519
+ | Exclude<R2, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
497
520
  E2
498
521
  >
499
522
  } = internal.catchAll
@@ -508,14 +531,16 @@ export const catchAllCause: {
508
531
  ): <R>(
509
532
  self: Router<R, E>
510
533
  ) => Router<
511
- Exclude<R2, RouteContext | ServerRequest.ServerRequest> | Exclude<R, RouteContext | ServerRequest.ServerRequest>,
534
+ | Exclude<R2, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
535
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
512
536
  E2
513
537
  >
514
538
  <R, E, R2, E2>(
515
539
  self: Router<R, E>,
516
540
  f: (e: Cause.Cause<E>) => Route.Handler<R2, E2>
517
541
  ): Router<
518
- Exclude<R, RouteContext | ServerRequest.ServerRequest> | Exclude<R2, RouteContext | ServerRequest.ServerRequest>,
542
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
543
+ | Exclude<R2, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
519
544
  E2
520
545
  >
521
546
  } = internal.catchAllCause
@@ -531,7 +556,8 @@ export const catchTag: {
531
556
  ): <R>(
532
557
  self: Router<R, E>
533
558
  ) => Router<
534
- Exclude<R1, RouteContext | ServerRequest.ServerRequest> | Exclude<R, RouteContext | ServerRequest.ServerRequest>,
559
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
560
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
535
561
  E1 | Exclude<E, { _tag: K }>
536
562
  >
537
563
  <R, E, K extends E extends { _tag: string } ? E["_tag"] : never, R1, E1>(
@@ -539,7 +565,8 @@ export const catchTag: {
539
565
  k: K,
540
566
  f: (e: Extract<E, { _tag: K }>) => Route.Handler<R1, E1>
541
567
  ): Router<
542
- Exclude<R, RouteContext | ServerRequest.ServerRequest> | Exclude<R1, RouteContext | ServerRequest.ServerRequest>,
568
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
569
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
543
570
  E1 | Exclude<E, { _tag: K }>
544
571
  >
545
572
  } = internal.catchTag
@@ -552,21 +579,27 @@ export const catchTags: {
552
579
  <
553
580
  E,
554
581
  Cases extends E extends { _tag: string }
555
- ? { [K in E["_tag"]]+?: ((error: Extract<E, { _tag: K }>) => Route.Handler<any, any>) }
582
+ ? { [K in E["_tag"]]+?: ((error: Extract<E, { _tag: K }>) => Route.Handler<any, any>) | undefined }
556
583
  : {}
557
584
  >(
558
585
  cases: Cases
559
586
  ): <R>(
560
587
  self: Router<R, E>
561
588
  ) => Router<
562
- | Exclude<R, RouteContext | ServerRequest.ServerRequest>
589
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
563
590
  | Exclude<
564
591
  {
565
592
  [K in keyof Cases]: Cases[K] extends (...args: Array<any>) => Effect.Effect<infer R, any, any> ? R : never
566
593
  }[keyof Cases],
567
- RouteContext | ServerRequest.ServerRequest
594
+ RouteContext | ServerRequest.ServerRequest | Scope.Scope
568
595
  >,
569
- | Exclude<E, { _tag: keyof Cases }>
596
+ | Exclude<E, {
597
+ /**
598
+ * @since 1.0.0
599
+ * @category combinators
600
+ */
601
+ _tag: keyof Cases
602
+ }>
570
603
  | {
571
604
  [K in keyof Cases]: Cases[K] extends (...args: Array<any>) => Effect.Effect<any, infer E, any> ? E : never
572
605
  }[keyof Cases]
@@ -575,18 +608,18 @@ export const catchTags: {
575
608
  R,
576
609
  E,
577
610
  Cases extends E extends { _tag: string }
578
- ? { [K in E["_tag"]]+?: ((error: Extract<E, { _tag: K }>) => Route.Handler<any, any>) } :
611
+ ? { [K in E["_tag"]]+?: ((error: Extract<E, { _tag: K }>) => Route.Handler<any, any>) | undefined } :
579
612
  {}
580
613
  >(
581
614
  self: Router<R, E>,
582
615
  cases: Cases
583
616
  ): Router<
584
- | Exclude<R, RouteContext | ServerRequest.ServerRequest>
617
+ | Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
585
618
  | Exclude<
586
619
  {
587
620
  [K in keyof Cases]: Cases[K] extends (...args: Array<any>) => Effect.Effect<infer R, any, any> ? R : never
588
621
  }[keyof Cases],
589
- RouteContext | ServerRequest.ServerRequest
622
+ RouteContext | ServerRequest.ServerRequest | Scope.Scope
590
623
  >,
591
624
  | Exclude<E, { _tag: keyof Cases }>
592
625
  | {
@@ -605,12 +638,15 @@ export const provideService: {
605
638
  service: Context.Tag.Service<T>
606
639
  ): <R, E>(
607
640
  self: Router<R, E>
608
- ) => Router<Exclude<Exclude<R, Context.Tag.Identifier<T>>, RouteContext | ServerRequest.ServerRequest>, E>
641
+ ) => Router<
642
+ Exclude<Exclude<R, Context.Tag.Identifier<T>>, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
643
+ E
644
+ >
609
645
  <R, E, T extends Context.Tag<any, any>>(
610
646
  self: Router<R, E>,
611
647
  tag: T,
612
648
  service: Context.Tag.Service<T>
613
- ): Router<Exclude<Exclude<R, Context.Tag.Identifier<T>>, RouteContext | ServerRequest.ServerRequest>, E>
649
+ ): Router<Exclude<Exclude<R, Context.Tag.Identifier<T>>, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E>
614
650
  } = internal.provideService
615
651
 
616
652
  /**
@@ -624,8 +660,8 @@ export const provideServiceEffect: {
624
660
  ): <R, E>(
625
661
  self: Router<R, E>
626
662
  ) => Router<
627
- | Exclude<R1, RouteContext | ServerRequest.ServerRequest>
628
- | Exclude<Exclude<R, Context.Tag.Identifier<T>>, RouteContext | ServerRequest.ServerRequest>,
663
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
664
+ | Exclude<Exclude<R, Context.Tag.Identifier<T>>, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
629
665
  E1 | E
630
666
  >
631
667
  <R, E, T extends Context.Tag<any, any>, R1, E1>(
@@ -633,8 +669,8 @@ export const provideServiceEffect: {
633
669
  tag: T,
634
670
  effect: Effect.Effect<R1, E1, Context.Tag.Service<T>>
635
671
  ): Router<
636
- | Exclude<R1, RouteContext | ServerRequest.ServerRequest>
637
- | Exclude<Exclude<R, Context.Tag.Identifier<T>>, RouteContext | ServerRequest.ServerRequest>,
672
+ | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
673
+ | Exclude<Exclude<R, Context.Tag.Identifier<T>>, RouteContext | ServerRequest.ServerRequest | Scope.Scope>,
638
674
  E | E1
639
675
  >
640
676
  } = internal.provideServiceEffect
@@ -104,17 +104,25 @@ export const make: (
104
104
  * @category accessors
105
105
  */
106
106
  export const serve: {
107
- (): <R, E>(httpApp: App.Default<R, E>) => Layer.Layer<Server | Exclude<R, ServerRequest.ServerRequest>, never, never>
107
+ (): <R, E>(
108
+ httpApp: App.Default<R, E>
109
+ ) => Layer.Layer<Server | Exclude<R, ServerRequest.ServerRequest | Scope.Scope>, never, never>
108
110
  <R, E, App extends App.Default<any, any>>(
109
111
  middleware: Middleware.Middleware.Applied<R, E, App>
110
112
  ): (
111
113
  httpApp: App.Default<R, E>
112
- ) => Layer.Layer<Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest>, never, never>
113
- <R, E>(httpApp: App.Default<R, E>): Layer.Layer<Server | Exclude<R, ServerRequest.ServerRequest>, never, never>
114
+ ) => Layer.Layer<
115
+ Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest | Scope.Scope>,
116
+ never,
117
+ never
118
+ >
119
+ <R, E>(
120
+ httpApp: App.Default<R, E>
121
+ ): Layer.Layer<Server | Exclude<R, ServerRequest.ServerRequest | Scope.Scope>, never, never>
114
122
  <R, E, App extends App.Default<any, any>>(
115
123
  httpApp: App.Default<R, E>,
116
124
  middleware: Middleware.Middleware.Applied<R, E, App>
117
- ): Layer.Layer<Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest>, never, never>
125
+ ): Layer.Layer<Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest | Scope.Scope>, never, never>
118
126
  } = internal.serve
119
127
 
120
128
  /**
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
+ import type * as Cause from "effect/Cause"
4
5
  import type * as Data from "effect/Data"
6
+ import type * as FiberId from "effect/FiberId"
5
7
  import * as internal from "../internal/http/serverError.js"
6
8
  import type * as ServerRequest from "./ServerRequest.js"
7
9
  import type * as ServerResponse from "./ServerResponse.js"
@@ -54,6 +56,12 @@ export interface RequestError extends HttpError.Proto {
54
56
  readonly error: unknown
55
57
  }
56
58
 
59
+ /**
60
+ * @since 1.0.0
61
+ * @category predicates
62
+ */
63
+ export const isServerError: (u: unknown) => u is HttpServerError = internal.isServerError
64
+
57
65
  /**
58
66
  * @since 1.0.0
59
67
  * @category error
@@ -109,3 +117,13 @@ export interface ServeError extends HttpError.Proto {
109
117
  * @category error
110
118
  */
111
119
  export const ServeError: (props: Omit<ServeError, HttpError.ProvidedFields>) => ServeError = internal.serveError
120
+
121
+ /**
122
+ * @since 1.0.0
123
+ */
124
+ export const clientAbortFiberId: FiberId.FiberId = internal.clientAbortFiberId
125
+
126
+ /**
127
+ * @since 1.0.0
128
+ */
129
+ export const isClientAbortCause: <E>(cause: Cause.Cause<E>) => boolean = internal.isClientAbortCause
@@ -42,6 +42,7 @@ export type TypeId = typeof TypeId
42
42
  */
43
43
  export interface ServerRequest extends IncomingMessage.IncomingMessage<Error.RequestError> {
44
44
  readonly [TypeId]: TypeId
45
+ readonly source: unknown
45
46
  readonly url: string
46
47
  readonly originalUrl: string
47
48
  readonly method: Method
@@ -1,12 +1,13 @@
1
1
  import * as Cause from "effect/Cause"
2
2
  import * as Effect from "effect/Effect"
3
3
  import * as FiberRef from "effect/FiberRef"
4
- import * as Function from "effect/Function"
4
+ import { constFalse, dual } from "effect/Function"
5
5
  import { globalValue } from "effect/GlobalValue"
6
6
  import type * as Predicate from "effect/Predicate"
7
7
  import * as Headers from "../../Http/Headers.js"
8
8
  import * as IncomingMessage from "../../Http/IncomingMessage.js"
9
9
  import type * as Middleware from "../../Http/Middleware.js"
10
+ import * as ServerError from "../../Http/ServerError.js"
10
11
  import * as ServerRequest from "../../Http/ServerRequest.js"
11
12
 
12
13
  /** @internal */
@@ -28,11 +29,11 @@ export const withLoggerDisabled = <R, E, A>(self: Effect.Effect<R, E, A>): Effec
28
29
  /** @internal */
29
30
  export const currentTracerDisabledWhen = globalValue(
30
31
  Symbol.for("@effect/platform/Http/Middleware/tracerDisabledWhen"),
31
- () => FiberRef.unsafeMake<Predicate.Predicate<ServerRequest.ServerRequest>>(Function.constFalse)
32
+ () => FiberRef.unsafeMake<Predicate.Predicate<ServerRequest.ServerRequest>>(constFalse)
32
33
  )
33
34
 
34
35
  /** @internal */
35
- export const withTracerDisabledWhen = Function.dual<
36
+ export const withTracerDisabledWhen = dual<
36
37
  (
37
38
  predicate: Predicate.Predicate<ServerRequest.ServerRequest>
38
39
  ) => <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A>,
@@ -60,7 +61,11 @@ export const logger = make((httpApp) => {
60
61
  Effect.annotateLogs(Effect.log(exit.cause), {
61
62
  "http.method": request.method,
62
63
  "http.url": request.url,
63
- "http.status": Cause.isInterruptedOnly(exit.cause) ? 499 : 500
64
+ "http.status": Cause.isInterruptedOnly(exit.cause)
65
+ ? ServerError.isClientAbortCause(exit.cause)
66
+ ? 499
67
+ : 503
68
+ : 500
64
69
  }) :
65
70
  Effect.annotateLogs(Effect.log(""), {
66
71
  "http.method": request.method,
@@ -185,7 +185,7 @@ export const makeRoute = <R, E>(
185
185
  path: Router.PathInput,
186
186
  handler: Router.Route.Handler<R, E>,
187
187
  prefix: Option.Option<string> = Option.none()
188
- ): Router.Route<R, E> => new RouteImpl(method, path, handler, prefix)
188
+ ): Router.Route<Router.Router.ExcludeProvided<R>, E> => new RouteImpl(method, path, handler, prefix) as any
189
189
 
190
190
  /** @internal */
191
191
  export const concat = dual<
@@ -38,14 +38,14 @@ export const serve = dual<
38
38
  (): <R, E>(
39
39
  httpApp: App.Default<R, E>
40
40
  ) => Layer.Layer<
41
- Server.Server | Exclude<R, ServerRequest.ServerRequest>,
41
+ Server.Server | Exclude<R, ServerRequest.ServerRequest | Scope.Scope>,
42
42
  never,
43
43
  never
44
44
  >
45
45
  <R, E, App extends App.Default<any, any>>(middleware: Middleware.Middleware.Applied<R, E, App>): (
46
46
  httpApp: App.Default<R, E>
47
47
  ) => Layer.Layer<
48
- Server.Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest>,
48
+ Server.Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest | Scope.Scope>,
49
49
  never,
50
50
  never
51
51
  >
@@ -53,12 +53,12 @@ export const serve = dual<
53
53
  {
54
54
  <R, E>(
55
55
  httpApp: App.Default<R, E>
56
- ): Layer.Layer<Server.Server | Exclude<R, ServerRequest.ServerRequest>, never, never>
56
+ ): Layer.Layer<Server.Server | Exclude<R, ServerRequest.ServerRequest | Scope.Scope>, never, never>
57
57
  <R, E, App extends App.Default<any, any>>(
58
58
  httpApp: App.Default<R, E>,
59
59
  middleware: Middleware.Middleware.Applied<R, E, App>
60
60
  ): Layer.Layer<
61
- Server.Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest>,
61
+ Server.Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest | Scope.Scope>,
62
62
  never,
63
63
  never
64
64
  >
@@ -69,7 +69,7 @@ export const serve = dual<
69
69
  httpApp: App.Default<R, E>,
70
70
  middleware?: Middleware.Middleware.Applied<R, E, App>
71
71
  ): Layer.Layer<
72
- Server.Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest>,
72
+ Server.Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest | Scope.Scope>,
73
73
  never,
74
74
  never
75
75
  > =>
@@ -1,4 +1,9 @@
1
+ import * as Cause from "effect/Cause"
1
2
  import * as Data from "effect/Data"
3
+ import * as FiberId from "effect/FiberId"
4
+ import { globalValue } from "effect/GlobalValue"
5
+ import * as Option from "effect/Option"
6
+ import * as Predicate from "effect/Predicate"
2
7
  import type * as Error from "../../Http/ServerError.js"
3
8
 
4
9
  /** @internal */
@@ -13,6 +18,9 @@ const make = <A extends Error.HttpServerError>(tag: A["_tag"]) => (props: Omit<A
13
18
  ...props
14
19
  } as A)
15
20
 
21
+ /** @internal */
22
+ export const isServerError = (u: unknown): u is Error.HttpServerError => Predicate.hasProperty(u, TypeId)
23
+
16
24
  /** @internal */
17
25
  export const requestError = make<Error.RequestError>("RequestError")
18
26
 
@@ -24,3 +32,17 @@ export const routeNotFound = make<Error.RouteNotFound>("RouteNotFound")
24
32
 
25
33
  /** @internal */
26
34
  export const serveError = make<Error.ServeError>("ServeError")
35
+
36
+ /** @internal */
37
+ export const clientAbortFiberId = globalValue(
38
+ "@effect/platform/Http/ServerError/clientAbortFiberId",
39
+ () => FiberId.runtime(-499, 0)
40
+ )
41
+
42
+ /** @internal */
43
+ export const isClientAbortCause = <E>(cause: Cause.Cause<E>): boolean =>
44
+ Cause.reduce(
45
+ cause,
46
+ false,
47
+ (_, cause) => cause._tag === "Interrupt" && cause.fiberId === clientAbortFiberId ? Option.some(true) : Option.none()
48
+ )