@effect/platform 0.58.9 → 0.58.10

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 (90) hide show
  1. package/HttpServerRespondable/package.json +6 -0
  2. package/dist/cjs/HttpApp.js +10 -3
  3. package/dist/cjs/HttpApp.js.map +1 -1
  4. package/dist/cjs/HttpClientResponse.js +11 -1
  5. package/dist/cjs/HttpClientResponse.js.map +1 -1
  6. package/dist/cjs/HttpRouter.js +7 -1
  7. package/dist/cjs/HttpRouter.js.map +1 -1
  8. package/dist/cjs/HttpServerError.js +32 -2
  9. package/dist/cjs/HttpServerError.js.map +1 -1
  10. package/dist/cjs/HttpServerRespondable.js +88 -0
  11. package/dist/cjs/HttpServerRespondable.js.map +1 -0
  12. package/dist/cjs/HttpServerResponse.js.map +1 -1
  13. package/dist/cjs/index.js +3 -1
  14. package/dist/cjs/internal/httpClientResponse.js +20 -1
  15. package/dist/cjs/internal/httpClientResponse.js.map +1 -1
  16. package/dist/cjs/internal/httpMiddleware.js +13 -14
  17. package/dist/cjs/internal/httpMiddleware.js.map +1 -1
  18. package/dist/cjs/internal/httpRouter.js +4 -2
  19. package/dist/cjs/internal/httpRouter.js.map +1 -1
  20. package/dist/cjs/internal/httpServerError.js +28 -3
  21. package/dist/cjs/internal/httpServerError.js.map +1 -1
  22. package/dist/cjs/internal/httpServerResponse.js +4 -0
  23. package/dist/cjs/internal/httpServerResponse.js.map +1 -1
  24. package/dist/cjs/internal/path.js +3 -3
  25. package/dist/cjs/internal/path.js.map +1 -1
  26. package/dist/dts/Cookies.d.ts.map +1 -1
  27. package/dist/dts/Error.d.ts.map +1 -1
  28. package/dist/dts/FileSystem.d.ts.map +1 -1
  29. package/dist/dts/Headers.d.ts.map +1 -1
  30. package/dist/dts/HttpApp.d.ts +1 -1
  31. package/dist/dts/HttpApp.d.ts.map +1 -1
  32. package/dist/dts/HttpBody.d.ts.map +1 -1
  33. package/dist/dts/HttpClientResponse.d.ts +44 -0
  34. package/dist/dts/HttpClientResponse.d.ts.map +1 -1
  35. package/dist/dts/HttpIncomingMessage.d.ts +1 -1
  36. package/dist/dts/HttpIncomingMessage.d.ts.map +1 -1
  37. package/dist/dts/HttpRouter.d.ts +13 -4
  38. package/dist/dts/HttpRouter.d.ts.map +1 -1
  39. package/dist/dts/HttpServerError.d.ts +22 -3
  40. package/dist/dts/HttpServerError.d.ts.map +1 -1
  41. package/dist/dts/HttpServerRespondable.d.ts +35 -0
  42. package/dist/dts/HttpServerRespondable.d.ts.map +1 -0
  43. package/dist/dts/HttpServerResponse.d.ts +2 -1
  44. package/dist/dts/HttpServerResponse.d.ts.map +1 -1
  45. package/dist/dts/HttpTraceContext.d.ts.map +1 -1
  46. package/dist/dts/PlatformConfigProvider.d.ts.map +1 -1
  47. package/dist/dts/Socket.d.ts.map +1 -1
  48. package/dist/dts/Transferable.d.ts.map +1 -1
  49. package/dist/dts/UrlParams.d.ts.map +1 -1
  50. package/dist/dts/WorkerError.d.ts.map +1 -1
  51. package/dist/dts/index.d.ts +4 -0
  52. package/dist/dts/index.d.ts.map +1 -1
  53. package/dist/dts/internal/httpRouter.d.ts +1 -1
  54. package/dist/dts/internal/httpRouter.d.ts.map +1 -1
  55. package/dist/esm/HttpApp.js +10 -3
  56. package/dist/esm/HttpApp.js.map +1 -1
  57. package/dist/esm/HttpClientResponse.js +10 -0
  58. package/dist/esm/HttpClientResponse.js.map +1 -1
  59. package/dist/esm/HttpRouter.js +5 -0
  60. package/dist/esm/HttpRouter.js.map +1 -1
  61. package/dist/esm/HttpServerError.js +31 -1
  62. package/dist/esm/HttpServerError.js.map +1 -1
  63. package/dist/esm/HttpServerRespondable.js +52 -0
  64. package/dist/esm/HttpServerRespondable.js.map +1 -0
  65. package/dist/esm/HttpServerResponse.js.map +1 -1
  66. package/dist/esm/index.js +4 -0
  67. package/dist/esm/index.js.map +1 -1
  68. package/dist/esm/internal/httpClientResponse.js +19 -0
  69. package/dist/esm/internal/httpClientResponse.js.map +1 -1
  70. package/dist/esm/internal/httpMiddleware.js +13 -14
  71. package/dist/esm/internal/httpMiddleware.js.map +1 -1
  72. package/dist/esm/internal/httpRouter.js +4 -2
  73. package/dist/esm/internal/httpRouter.js.map +1 -1
  74. package/dist/esm/internal/httpServerError.js +25 -1
  75. package/dist/esm/internal/httpServerError.js.map +1 -1
  76. package/dist/esm/internal/httpServerResponse.js +4 -0
  77. package/dist/esm/internal/httpServerResponse.js.map +1 -1
  78. package/package.json +11 -3
  79. package/src/HttpApp.ts +14 -3
  80. package/src/HttpClientResponse.ts +77 -0
  81. package/src/HttpRouter.ts +15 -4
  82. package/src/HttpServerError.ts +37 -5
  83. package/src/HttpServerRespondable.ts +66 -0
  84. package/src/HttpServerResponse.ts +2 -1
  85. package/src/index.ts +5 -0
  86. package/src/internal/httpClientResponse.ts +82 -0
  87. package/src/internal/httpMiddleware.ts +19 -19
  88. package/src/internal/httpRouter.ts +9 -7
  89. package/src/internal/httpServerError.ts +35 -6
  90. package/src/internal/httpServerResponse.ts +9 -0
@@ -1 +1 @@
1
- {"version":3,"file":"httpServerResponse.js","names":["Effect","Effectable","dual","Inspectable","Stream","Cookies","Headers","Platform","Template","UrlParams","internalBody","TypeId","Symbol","for","ServerResponseImpl","StructuralClass","status","statusText","cookies","body","headers","constructor","contentType","contentLength","newHeaders","toString","commit","succeed","NodeInspectSymbol","toJSON","format","_id","isServerResponse","u","empty","options","uint8Array","getContentType","text","html","strings","args","map","make","_","htmlStream","context","stream","provideContext","encodeText","json","unsafeJson","schemaJson","schema","encode","jsonSchema","file","path","flatMap","HttpPlatform","platform","fileResponse","fileWeb","fileWebResponse","urlParams","fromInput","raw","formData","setHeader","self","key","value","set","replaceCookies","setCookie","name","unsafeSetCookie","unsafeSet","updateCookies","f","setCookies","setAll","unsafeSetCookies","unsafeSetAll","removeCookie","remove","setHeaders","input","setStatus","setBody","_tag","toWeb","response","withoutBody","globalThis","isEmpty","toAdd","toSetCookieHeaders","header","append","Response","undefined","toReadableStream"],"sources":["../../../src/internal/httpServerResponse.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"httpServerResponse.js","names":["Effect","Effectable","dual","Inspectable","Stream","Cookies","Headers","Platform","Template","UrlParams","internalBody","TypeId","Symbol","for","respondableSymbol","ServerResponseImpl","StructuralClass","status","statusText","cookies","body","headers","constructor","contentType","contentLength","newHeaders","toString","commit","succeed","NodeInspectSymbol","toJSON","format","_id","isServerResponse","u","empty","options","uint8Array","getContentType","text","html","strings","args","map","make","_","htmlStream","context","stream","provideContext","encodeText","json","unsafeJson","schemaJson","schema","encode","jsonSchema","file","path","flatMap","HttpPlatform","platform","fileResponse","fileWeb","fileWebResponse","urlParams","fromInput","raw","formData","setHeader","self","key","value","set","replaceCookies","setCookie","name","unsafeSetCookie","unsafeSet","updateCookies","f","setCookies","setAll","unsafeSetCookies","unsafeSetAll","removeCookie","remove","setHeaders","input","setStatus","setBody","_tag","toWeb","response","withoutBody","globalThis","isEmpty","toAdd","toSetCookieHeaders","header","append","Response","undefined","toReadableStream"],"sources":["../../../src/internal/httpServerResponse.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/platform",
3
- "version": "0.58.9",
3
+ "version": "0.58.10",
4
4
  "description": "Unified interfaces for common platform-specific services",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -15,8 +15,8 @@
15
15
  "path-browserify": "^1.0.1"
16
16
  },
17
17
  "peerDependencies": {
18
- "@effect/schema": "^0.68.9",
19
- "effect": "^3.4.2"
18
+ "@effect/schema": "^0.68.10",
19
+ "effect": "^3.4.3"
20
20
  },
21
21
  "publishConfig": {
22
22
  "provenance": true
@@ -146,6 +146,11 @@
146
146
  "import": "./dist/esm/HttpServerRequest.js",
147
147
  "default": "./dist/cjs/HttpServerRequest.js"
148
148
  },
149
+ "./HttpServerRespondable": {
150
+ "types": "./dist/dts/HttpServerRespondable.d.ts",
151
+ "import": "./dist/esm/HttpServerRespondable.js",
152
+ "default": "./dist/cjs/HttpServerRespondable.js"
153
+ },
149
154
  "./HttpServerResponse": {
150
155
  "types": "./dist/dts/HttpServerResponse.d.ts",
151
156
  "import": "./dist/esm/HttpServerResponse.js",
@@ -298,6 +303,9 @@
298
303
  "HttpServerRequest": [
299
304
  "./dist/dts/HttpServerRequest.d.ts"
300
305
  ],
306
+ "HttpServerRespondable": [
307
+ "./dist/dts/HttpServerRespondable.d.ts"
308
+ ],
301
309
  "HttpServerResponse": [
302
310
  "./dist/dts/HttpServerResponse.d.ts"
303
311
  ],
package/src/HttpApp.ts CHANGED
@@ -15,6 +15,7 @@ import * as Scope from "effect/Scope"
15
15
  import type { HttpMiddleware } from "./HttpMiddleware.js"
16
16
  import * as ServerError from "./HttpServerError.js"
17
17
  import * as ServerRequest from "./HttpServerRequest.js"
18
+ import * as Respondable from "./HttpServerRespondable.js"
18
19
  import * as ServerResponse from "./HttpServerResponse.js"
19
20
  import * as internalMiddleware from "./internal/httpMiddleware.js"
20
21
 
@@ -58,9 +59,19 @@ export const toHandled = <E, R, _, RH>(
58
59
  Effect.exit(preHandled),
59
60
  (exit) => {
60
61
  if (exit._tag === "Failure") {
61
- const dieOption = Cause.dieOption(exit.cause)
62
- if (dieOption._tag === "Some" && ServerResponse.isServerResponse(dieOption.value)) {
63
- exit = Exit.succeed(dieOption.value)
62
+ const cause = exit.cause
63
+ const thing = Cause.squash(exit.cause)
64
+ if (ServerResponse.isServerResponse(thing)) {
65
+ exit = Exit.succeed(thing)
66
+ } else {
67
+ return Effect.matchCauseEffect(Respondable.toResponseError(thing), {
68
+ onFailure: (_) => Effect.zipRight(handleResponse(request, exit), exit),
69
+ onSuccess: (response) =>
70
+ Effect.zipRight(
71
+ handleResponse(request, Exit.succeed(response)),
72
+ Effect.failCause(Cause.sequential(cause, Cause.die(response)))
73
+ )
74
+ })
64
75
  }
65
76
  }
66
77
  return Effect.zipRight(handleResponse(request, exit), exit)
@@ -211,3 +211,80 @@ export const schemaNoBodyScoped: <
211
211
  effect: Effect.Effect<HttpClientResponse, E, R2>
212
212
  ) => Effect.Effect<A, E | ParseResult.ParseError, Exclude<R, Scope.Scope> | Exclude<R2, Scope.Scope>> =
213
213
  internal.schemaNoBodyScoped
214
+
215
+ /**
216
+ * @since 1.0.0
217
+ * @category pattern matching
218
+ */
219
+ export const matchStatus: {
220
+ <
221
+ const Cases extends {
222
+ readonly [status: number]: (_: HttpClientResponse) => any
223
+ readonly "2xx"?: (_: HttpClientResponse) => any
224
+ readonly "3xx"?: (_: HttpClientResponse) => any
225
+ readonly "4xx"?: (_: HttpClientResponse) => any
226
+ readonly "5xx"?: (_: HttpClientResponse) => any
227
+ readonly orElse: (_: HttpClientResponse) => any
228
+ }
229
+ >(cases: Cases): (self: HttpClientResponse) => Cases[keyof Cases] extends (_: any) => infer R ? R : never
230
+ <
231
+ const Cases extends {
232
+ readonly [status: number]: (_: HttpClientResponse) => any
233
+ readonly "2xx"?: (_: HttpClientResponse) => any
234
+ readonly "3xx"?: (_: HttpClientResponse) => any
235
+ readonly "4xx"?: (_: HttpClientResponse) => any
236
+ readonly "5xx"?: (_: HttpClientResponse) => any
237
+ readonly orElse: (_: HttpClientResponse) => any
238
+ }
239
+ >(self: HttpClientResponse, cases: Cases): Cases[keyof Cases] extends (_: any) => infer R ? R : never
240
+ } = internal.matchStatus
241
+
242
+ /**
243
+ * @since 1.0.0
244
+ * @category pattern matching
245
+ */
246
+ export const matchStatusScoped: {
247
+ <
248
+ const Cases extends {
249
+ readonly [status: number]: (_: HttpClientResponse) => Effect.Effect<any, any, any>
250
+ readonly "2xx"?: (_: HttpClientResponse) => Effect.Effect<any, any, any>
251
+ readonly "3xx"?: (_: HttpClientResponse) => Effect.Effect<any, any, any>
252
+ readonly "4xx"?: (_: HttpClientResponse) => Effect.Effect<any, any, any>
253
+ readonly "5xx"?: (_: HttpClientResponse) => Effect.Effect<any, any, any>
254
+ readonly orElse: (_: HttpClientResponse) => Effect.Effect<any, any, any>
255
+ }
256
+ >(
257
+ cases: Cases
258
+ ): <E, R>(
259
+ self: Effect.Effect<HttpClientResponse, E, R>
260
+ ) => Effect.Effect<
261
+ Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _A : never,
262
+ E | (Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _E : never),
263
+ Exclude<
264
+ R | (Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _R : never),
265
+ Scope.Scope
266
+ >
267
+ >
268
+ <
269
+ E,
270
+ R,
271
+ const Cases extends {
272
+ readonly [status: number]: (_: HttpClientResponse) => Effect.Effect<any, any, any>
273
+ readonly "2xx"?: (_: HttpClientResponse) => Effect.Effect<any, any, any>
274
+ readonly "3xx"?: (_: HttpClientResponse) => Effect.Effect<any, any, any>
275
+ readonly "4xx"?: (_: HttpClientResponse) => Effect.Effect<any, any, any>
276
+ readonly "5xx"?: (_: HttpClientResponse) => Effect.Effect<any, any, any>
277
+ readonly orElse: (_: HttpClientResponse) => Effect.Effect<any, any, any>
278
+ }
279
+ >(
280
+ self: Effect.Effect<HttpClientResponse, E, R>,
281
+ cases: Cases
282
+ ): Effect.Effect<
283
+ Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _A : never,
284
+ E | (Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _E : never),
285
+ Exclude<
286
+ R | (Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _R : never),
287
+ Scope.Scope
288
+ >
289
+ >
290
+ } = internal.matchStatusScoped
package/src/HttpRouter.ts CHANGED
@@ -16,6 +16,7 @@ import type * as App from "./HttpApp.js"
16
16
  import type * as Method from "./HttpMethod.js"
17
17
  import type * as Error from "./HttpServerError.js"
18
18
  import type * as ServerRequest from "./HttpServerRequest.js"
19
+ import type * as Respondable from "./HttpServerRespondable.js"
19
20
  import * as internal from "./internal/httpRouter.js"
20
21
 
21
22
  /**
@@ -42,7 +43,7 @@ export interface HttpRouter<E = never, R = never>
42
43
  readonly mounts: Chunk.Chunk<
43
44
  readonly [
44
45
  prefix: string,
45
- httpApp: App.Default<E, R>,
46
+ httpApp: App.HttpApp<Respondable.Respondable, E, R>,
46
47
  options?: { readonly includePrefix?: boolean | undefined } | undefined
47
48
  ]
48
49
  >
@@ -116,7 +117,7 @@ export declare namespace HttpRouter {
116
117
  * @since 1.0.0
117
118
  */
118
119
  export interface TagClass<Self, Name extends string, E, R> extends Context.Tag<Self, Service<E, R>> {
119
- new(_: never): Context.TagClassShape<`@effect/platform/HttpRouter/${Name}`, Service<E, R>>
120
+ new(_: never): Context.TagClassShape<Name, Service<E, R>>
120
121
  readonly Live: Layer.Layer<Self>
121
122
  readonly router: Effect.Effect<HttpRouter<E, R>, never, Self>
122
123
  readonly use: <XA, XE, XR>(f: (router: Service<E, R>) => Effect.Effect<XA, XE, XR>) => Layer.Layer<never, XE, XR>
@@ -165,7 +166,11 @@ export declare namespace Route {
165
166
  /**
166
167
  * @since 1.0.0
167
168
  */
168
- export type Handler<E, R> = App.Default<E, R | RouteContext | ServerRequest.ParsedSearchParams>
169
+ export type Handler<E, R> = App.HttpApp<
170
+ Respondable.Respondable,
171
+ E,
172
+ R | RouteContext | ServerRequest.ParsedSearchParams
173
+ >
169
174
  }
170
175
 
171
176
  /**
@@ -729,4 +734,10 @@ export const provideServiceEffect: {
729
734
  */
730
735
  export const Tag: <const Name extends string>(
731
736
  id: Name
732
- ) => <Self, E = never, R = never>() => HttpRouter.TagClass<Self, Name, E, R> = internal.Tag
737
+ ) => <Self, R = never, E = unknown>() => HttpRouter.TagClass<Self, Name, E, R> = internal.Tag
738
+
739
+ /**
740
+ * @since 1.0.0
741
+ * @category tags
742
+ */
743
+ export class Default extends Tag("@effect/platform/HttpRouter/Default")<Default>() {}
@@ -2,10 +2,13 @@
2
2
  * @since 1.0.0
3
3
  */
4
4
  import type * as Cause from "effect/Cause"
5
+ import type * as Exit from "effect/Exit"
5
6
  import type * as FiberId from "effect/FiberId"
7
+ import type * as Option from "effect/Option"
6
8
  import { RefailError, TypeIdError } from "./Error.js"
7
9
  import type * as ServerRequest from "./HttpServerRequest.js"
8
- import type * as ServerResponse from "./HttpServerResponse.js"
10
+ import * as Respondable from "./HttpServerRespondable.js"
11
+ import * as ServerResponse from "./HttpServerResponse.js"
9
12
  import * as internal from "./internal/httpServerError.js"
10
13
 
11
14
  /**
@@ -33,7 +36,14 @@ export type HttpServerError = RequestError | ResponseError | RouteNotFound | Ser
33
36
  export class RequestError extends RefailError(TypeId, "RequestError")<{
34
37
  readonly request: ServerRequest.HttpServerRequest
35
38
  readonly reason: "Transport" | "Decode"
36
- }> {
39
+ }> implements Respondable.Respondable {
40
+ /**
41
+ * @since 1.0.0
42
+ */
43
+ [Respondable.symbol]() {
44
+ return ServerResponse.empty({ status: 400 })
45
+ }
46
+
37
47
  get methodAndUrl() {
38
48
  return `${this.request.method} ${this.request.url}`
39
49
  }
@@ -56,6 +66,13 @@ export const isServerError: (u: unknown) => u is HttpServerError = internal.isSe
56
66
  export class RouteNotFound extends TypeIdError(TypeId, "RouteNotFound")<{
57
67
  readonly request: ServerRequest.HttpServerRequest
58
68
  }> {
69
+ /**
70
+ * @since 1.0.0
71
+ */
72
+ [Respondable.symbol]() {
73
+ return ServerResponse.empty({ status: 404 })
74
+ }
75
+
59
76
  get message() {
60
77
  return `${this.request.method} ${this.request.url} not found`
61
78
  }
@@ -70,6 +87,13 @@ export class ResponseError extends RefailError(TypeId, "ResponseError")<{
70
87
  readonly response: ServerResponse.HttpServerResponse
71
88
  readonly reason: "Decode"
72
89
  }> {
90
+ /**
91
+ * @since 1.0.0
92
+ */
93
+ [Respondable.symbol]() {
94
+ return ServerResponse.empty({ status: 500 })
95
+ }
96
+
73
97
  get methodAndUrl() {
74
98
  return `${this.request.method} ${this.request.url}`
75
99
  }
@@ -83,8 +107,7 @@ export class ResponseError extends RefailError(TypeId, "ResponseError")<{
83
107
  * @since 1.0.0
84
108
  * @category error
85
109
  */
86
- export class ServeError extends RefailError(TypeId, "ServeError")<{}> {
87
- }
110
+ export class ServeError extends RefailError(TypeId, "ServeError")<{}> {}
88
111
 
89
112
  /**
90
113
  * @since 1.0.0
@@ -99,4 +122,13 @@ export const isClientAbortCause: <E>(cause: Cause.Cause<E>) => boolean = interna
99
122
  /**
100
123
  * @since 1.0.0
101
124
  */
102
- export const causeStatusCode: <E>(cause: Cause.Cause<E>) => number = internal.causeStatusCode
125
+ export const causeStatusStripped: <E>(
126
+ cause: Cause.Cause<E>
127
+ ) => readonly [status: number, cause: Option.Option<Cause.Cause<E>>] = internal.causeStatusStripped
128
+
129
+ /**
130
+ * @since 1.0.0
131
+ */
132
+ export const exitResponse: <E>(
133
+ exit: Exit.Exit<ServerResponse.HttpServerResponse, E>
134
+ ) => ServerResponse.HttpServerResponse = internal.exitResponse
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as ParseResult from "@effect/schema/ParseResult"
5
+ import * as Effect from "effect/Effect"
6
+ import { hasProperty } from "effect/Predicate"
7
+ import type { HttpServerResponse } from "./HttpServerResponse.js"
8
+ import * as ServerResponse from "./HttpServerResponse.js"
9
+
10
+ /**
11
+ * @since 1.0.0
12
+ * @category symbols
13
+ */
14
+ export const symbol: unique symbol = Symbol.for("@effect/platform/HttpServerRespondable")
15
+
16
+ /**
17
+ * @since 1.0.0
18
+ * @category models
19
+ */
20
+ export interface Respondable {
21
+ readonly [symbol]: () => Effect.Effect<HttpServerResponse, unknown>
22
+ }
23
+
24
+ /**
25
+ * @since 1.0.0
26
+ * @category guards
27
+ */
28
+ export const isRespondable = (u: unknown): u is Respondable => hasProperty(u, symbol)
29
+
30
+ const badRequest = ServerResponse.empty({ status: 400 })
31
+ const internalServerError = () => ServerResponse.empty({ status: 500 })
32
+
33
+ /**
34
+ * @since 1.0.0
35
+ * @category accessors
36
+ */
37
+ export const toResponse = (self: Respondable): Effect.Effect<HttpServerResponse> => {
38
+ if (ServerResponse.isServerResponse(self)) {
39
+ return Effect.succeed(self)
40
+ }
41
+ return Effect.orDie(self[symbol]())
42
+ }
43
+
44
+ /**
45
+ * @since 1.0.0
46
+ * @category accessors
47
+ */
48
+ export const toResponseOrElse = (
49
+ u: unknown,
50
+ orElse: () => Effect.Effect<HttpServerResponse, unknown>
51
+ ): Effect.Effect<HttpServerResponse, unknown> => {
52
+ if (isRespondable(u)) {
53
+ return u[symbol]()
54
+ // add support for some commmon types
55
+ } else if (ParseResult.isParseError(u)) {
56
+ return Effect.succeed(badRequest)
57
+ }
58
+ return orElse()
59
+ }
60
+
61
+ /**
62
+ * @since 1.0.0
63
+ * @category accessors
64
+ */
65
+ export const toResponseError = (u: unknown): Effect.Effect<HttpServerResponse, unknown> =>
66
+ toResponseOrElse(u, internalServerError)
@@ -12,6 +12,7 @@ import type * as FileSystem from "./FileSystem.js"
12
12
  import type * as Headers from "./Headers.js"
13
13
  import type * as Body from "./HttpBody.js"
14
14
  import type * as Platform from "./HttpPlatform.js"
15
+ import type { Respondable } from "./HttpServerRespondable.js"
15
16
  import * as internal from "./internal/httpServerResponse.js"
16
17
  import type * as Template from "./Template.js"
17
18
  import type * as UrlParams from "./UrlParams.js"
@@ -32,7 +33,7 @@ export type TypeId = typeof TypeId
32
33
  * @since 1.0.0
33
34
  * @category models
34
35
  */
35
- export interface HttpServerResponse extends Effect.Effect<HttpServerResponse>, Inspectable {
36
+ export interface HttpServerResponse extends Effect.Effect<HttpServerResponse>, Inspectable, Respondable {
36
37
  readonly [TypeId]: TypeId
37
38
  readonly status: number
38
39
  readonly statusText?: string | undefined
package/src/index.ts CHANGED
@@ -114,6 +114,11 @@ export * as HttpServerError from "./HttpServerError.js"
114
114
  */
115
115
  export * as HttpServerRequest from "./HttpServerRequest.js"
116
116
 
117
+ /**
118
+ * @since 1.0.0
119
+ */
120
+ export * as HttpServerRespondable from "./HttpServerRespondable.js"
121
+
117
122
  /**
118
123
  * @since 1.0.0
119
124
  */
@@ -2,8 +2,10 @@ import type { ParseOptions } from "@effect/schema/AST"
2
2
  import type * as ParseResult from "@effect/schema/ParseResult"
3
3
  import * as Schema from "@effect/schema/Schema"
4
4
  import * as Effect from "effect/Effect"
5
+ import { dual } from "effect/Function"
5
6
  import * as Inspectable from "effect/Inspectable"
6
7
  import * as Option from "effect/Option"
8
+ import type { Scope } from "effect/Scope"
7
9
  import * as Stream from "effect/Stream"
8
10
  import * as Cookies from "../Cookies.js"
9
11
  import * as Headers from "../Headers.js"
@@ -248,3 +250,83 @@ export const schemaNoBodyScoped = <
248
250
  return <E, R2>(effect: Effect.Effect<ClientResponse.HttpClientResponse, E, R2>) =>
249
251
  Effect.scoped(Effect.flatMap(effect, decode))
250
252
  }
253
+
254
+ /** @internal */
255
+ export const matchStatus = dual<
256
+ <
257
+ const Cases extends {
258
+ readonly [status: number]: (_: ClientResponse.HttpClientResponse) => any
259
+ readonly "2xx"?: (_: ClientResponse.HttpClientResponse) => any
260
+ readonly "3xx"?: (_: ClientResponse.HttpClientResponse) => any
261
+ readonly "4xx"?: (_: ClientResponse.HttpClientResponse) => any
262
+ readonly "5xx"?: (_: ClientResponse.HttpClientResponse) => any
263
+ readonly orElse: (_: ClientResponse.HttpClientResponse) => any
264
+ }
265
+ >(
266
+ cases: Cases
267
+ ) => (self: ClientResponse.HttpClientResponse) => Cases[keyof Cases] extends (_: any) => infer R ? R : never,
268
+ <
269
+ const Cases extends {
270
+ readonly [status: number]: (_: ClientResponse.HttpClientResponse) => any
271
+ readonly "2xx"?: (_: ClientResponse.HttpClientResponse) => any
272
+ readonly "3xx"?: (_: ClientResponse.HttpClientResponse) => any
273
+ readonly "4xx"?: (_: ClientResponse.HttpClientResponse) => any
274
+ readonly "5xx"?: (_: ClientResponse.HttpClientResponse) => any
275
+ readonly orElse: (_: ClientResponse.HttpClientResponse) => any
276
+ }
277
+ >(self: ClientResponse.HttpClientResponse, cases: Cases) => Cases[keyof Cases] extends (_: any) => infer R ? R : never
278
+ >(2, (self, cases) => {
279
+ const status = self.status
280
+ if (cases[status]) {
281
+ return cases[status](self)
282
+ } else if (status >= 200 && status < 300 && cases["2xx"]) {
283
+ return cases["2xx"](self)
284
+ } else if (status >= 300 && status < 400 && cases["3xx"]) {
285
+ return cases["3xx"](self)
286
+ } else if (status >= 400 && status < 500 && cases["4xx"]) {
287
+ return cases["4xx"](self)
288
+ } else if (status >= 500 && status < 600 && cases["5xx"]) {
289
+ return cases["5xx"](self)
290
+ }
291
+ return cases.orElse(self)
292
+ })
293
+
294
+ /** @internal */
295
+ export const matchStatusScoped = dual<
296
+ <
297
+ const Cases extends {
298
+ readonly [status: number]: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
299
+ readonly "2xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
300
+ readonly "3xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
301
+ readonly "4xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
302
+ readonly "5xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
303
+ readonly orElse: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
304
+ }
305
+ >(cases: Cases) => <E, R>(self: Effect.Effect<ClientResponse.HttpClientResponse, E, R>) => Effect.Effect<
306
+ Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _A : never,
307
+ E | (Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _E : never),
308
+ Exclude<
309
+ R | (Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _R : never),
310
+ Scope
311
+ >
312
+ >,
313
+ <
314
+ E,
315
+ R,
316
+ const Cases extends {
317
+ readonly [status: number]: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
318
+ readonly "2xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
319
+ readonly "3xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
320
+ readonly "4xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
321
+ readonly "5xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
322
+ readonly orElse: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
323
+ }
324
+ >(self: Effect.Effect<ClientResponse.HttpClientResponse, E, R>, cases: Cases) => Effect.Effect<
325
+ Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _A : never,
326
+ E | (Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _E : never),
327
+ Exclude<
328
+ R | (Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _R : never),
329
+ Scope
330
+ >
331
+ >
332
+ >(2, (self, cases) => Effect.scoped(Effect.flatMap(self, matchStatus(cases) as any)))
@@ -82,19 +82,23 @@ export const logger = make((httpApp) => {
82
82
  Effect.flatMap(Effect.exit(httpApp), (exit) => {
83
83
  if (fiber.getFiberRef(loggerDisabled)) {
84
84
  return exit
85
- }
86
- return Effect.zipRight(
87
- exit._tag === "Failure" ?
88
- Effect.annotateLogs(Effect.log(exit.cause), {
89
- "http.method": request.method,
90
- "http.url": request.url,
91
- "http.status": ServerError.causeStatusCode(exit.cause)
92
- }) :
93
- Effect.annotateLogs(Effect.log("Sent HTTP response"), {
85
+ } else if (exit._tag === "Failure") {
86
+ const [status, cause] = ServerError.causeStatusStripped(exit.cause)
87
+ return Effect.zipRight(
88
+ Effect.annotateLogs(Effect.log(cause._tag === "Some" ? cause.value : "Sent HTTP Response"), {
94
89
  "http.method": request.method,
95
90
  "http.url": request.url,
96
- "http.status": exit.value.status
91
+ "http.status": status
97
92
  }),
93
+ exit
94
+ )
95
+ }
96
+ return Effect.zipRight(
97
+ Effect.annotateLogs(Effect.log("Sent HTTP response"), {
98
+ "http.method": request.method,
99
+ "http.url": request.url,
100
+ "http.status": exit.value.status
101
+ }),
98
102
  exit
99
103
  )
100
104
  }),
@@ -156,15 +160,11 @@ export const tracer = make((httpApp) =>
156
160
  return Effect.flatMap(
157
161
  Effect.exit(Effect.withParentSpan(httpApp, span)),
158
162
  (exit) => {
159
- if (exit._tag === "Failure") {
160
- span.attribute("http.response.status_code", ServerError.causeStatusCode(exit.cause))
161
- } else {
162
- const response = exit.value
163
- span.attribute("http.response.status_code", response.status)
164
- const redactedHeaders = Headers.redact(response.headers, redactedHeaderNames)
165
- for (const name in redactedHeaders) {
166
- span.attribute(`http.response.header.${name}`, String(redactedHeaders[name]))
167
- }
163
+ const response = ServerError.exitResponse(exit)
164
+ span.attribute("http.response.status_code", response.status)
165
+ const redactedHeaders = Headers.redact(response.headers, redactedHeaderNames)
166
+ for (const name in redactedHeaders) {
167
+ span.attribute(`http.response.header.${name}`, String(redactedHeaders[name]))
168
168
  }
169
169
  return exit
170
170
  }
@@ -19,6 +19,7 @@ import type * as Method from "../HttpMethod.js"
19
19
  import type * as Router from "../HttpRouter.js"
20
20
  import * as Error from "../HttpServerError.js"
21
21
  import * as ServerRequest from "../HttpServerRequest.js"
22
+ import * as Respondable from "../HttpServerRespondable.js"
22
23
  import type * as ServerResponse from "../HttpServerResponse.js"
23
24
 
24
25
  /** @internal */
@@ -149,7 +150,7 @@ class RouterImpl<E = never, R = never> extends Effectable.StructuralClass<
149
150
  readonly mounts: Chunk.Chunk<
150
151
  readonly [
151
152
  prefix: string,
152
- httpApp: App.Default<E, R>,
153
+ httpApp: App.HttpApp<Respondable.Respondable, E, R>,
153
154
  options?: { readonly includePrefix?: boolean | undefined } | undefined
154
155
  ]
155
156
  >
@@ -225,7 +226,7 @@ const toHttpApp = <E, R>(
225
226
  context.unsafeMap.set(ServerRequest.HttpServerRequest.key, sliceRequestUrl(request, path))
226
227
  }
227
228
  return Effect.locally(
228
- routeContext.route.handler as App.Default<E, R>,
229
+ Effect.flatMap(routeContext.route.handler, Respondable.toResponse) as App.Default<E, R>,
229
230
  FiberRef.currentContext,
230
231
  context
231
232
  )
@@ -252,10 +253,11 @@ const toHttpApp = <E, R>(
252
253
  span.value.attribute("http.route", route.path)
253
254
  }
254
255
 
256
+ const handlerResponse = Effect.flatMap(route.handler, Respondable.toResponse)
255
257
  return Effect.locally(
256
258
  (route.uninterruptible ?
257
- route.handler :
258
- Effect.interruptible(route.handler)) as Effect.Effect<
259
+ handlerResponse :
260
+ Effect.interruptible(handlerResponse)) as Effect.Effect<
259
261
  ServerResponse.HttpServerResponse,
260
262
  E,
261
263
  Router.HttpRouter.ExcludeProvided<R>
@@ -505,11 +507,11 @@ export const options = route("OPTIONS")
505
507
  /** @internal */
506
508
  export const use = dual<
507
509
  <E, R, R1, E1>(
508
- f: (self: Router.Route.Handler<E, R>) => App.Default<E1, R1>
510
+ f: (self: Router.Route.Handler<E, R>) => App.HttpApp<Respondable.Respondable, E1, R1>
509
511
  ) => (self: Router.HttpRouter<E, R>) => Router.HttpRouter<E1, Router.HttpRouter.ExcludeProvided<R1>>,
510
512
  <E, R, R1, E1>(
511
513
  self: Router.HttpRouter<E, R>,
512
- f: (self: Router.Route.Handler<E, R>) => App.Default<E1, R1>
514
+ f: (self: Router.Route.Handler<E, R>) => App.HttpApp<Respondable.Respondable, E1, R1>
513
515
  ) => Router.HttpRouter<E1, Router.HttpRouter.ExcludeProvided<R1>>
514
516
  >(2, (self, f) =>
515
517
  new RouterImpl<any, any>(
@@ -716,7 +718,7 @@ const makeService = <E, R>(): Router.HttpRouter.Service<E, R> => {
716
718
  /* @internal */
717
719
  export const Tag =
718
720
  <const Name extends string>(id: Name) =>
719
- <Self, E = never, R = never>(): Router.HttpRouter.TagClass<Self, Name, E, R> => {
721
+ <Self, R = never, E = unknown>(): Router.HttpRouter.TagClass<Self, Name, E, R> => {
720
722
  const Err = globalThis.Error as any
721
723
  const limit = Err.stackTraceLimit
722
724
  Err.stackTraceLimit = 2