@effect/platform 0.11.4 → 0.12.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 (201) hide show
  1. package/Command.d.ts +3 -2
  2. package/Command.d.ts.map +1 -1
  3. package/Command.js.map +1 -1
  4. package/FileSystem.d.ts +16 -9
  5. package/FileSystem.d.ts.map +1 -1
  6. package/FileSystem.js.map +1 -1
  7. package/Http/App.d.ts +18 -0
  8. package/Http/App.d.ts.map +1 -0
  9. package/Http/App.js +6 -0
  10. package/Http/App.js.map +1 -0
  11. package/Http/Body.d.ts +37 -14
  12. package/Http/Body.d.ts.map +1 -1
  13. package/Http/Body.js +17 -5
  14. package/Http/Body.js.map +1 -1
  15. package/Http/Client.d.ts +8 -2
  16. package/Http/Client.d.ts.map +1 -1
  17. package/Http/Client.js +10 -4
  18. package/Http/Client.js.map +1 -1
  19. package/Http/ClientRequest.d.ts +44 -1
  20. package/Http/ClientRequest.d.ts.map +1 -1
  21. package/Http/ClientRequest.js +21 -3
  22. package/Http/ClientRequest.js.map +1 -1
  23. package/Http/ClientResponse.d.ts +13 -1
  24. package/Http/ClientResponse.d.ts.map +1 -1
  25. package/Http/ClientResponse.js +14 -2
  26. package/Http/ClientResponse.js.map +1 -1
  27. package/Http/FormData.d.ts +97 -4
  28. package/Http/FormData.d.ts.map +1 -1
  29. package/Http/FormData.js +77 -2
  30. package/Http/FormData.js.map +1 -1
  31. package/Http/Headers.d.ts +29 -3
  32. package/Http/Headers.d.ts.map +1 -1
  33. package/Http/Headers.js +13 -1
  34. package/Http/Headers.js.map +1 -1
  35. package/Http/IncomingMessage.d.ts +26 -5
  36. package/Http/IncomingMessage.d.ts.map +1 -1
  37. package/Http/IncomingMessage.js +38 -3
  38. package/Http/IncomingMessage.js.map +1 -1
  39. package/Http/Middleware.d.ts +56 -0
  40. package/Http/Middleware.d.ts.map +1 -0
  41. package/Http/Middleware.js +46 -0
  42. package/Http/Middleware.js.map +1 -0
  43. package/Http/Router.d.ts +221 -0
  44. package/Http/Router.d.ts.map +1 -0
  45. package/Http/Router.js +148 -0
  46. package/Http/Router.js.map +1 -0
  47. package/Http/Server.d.ts +85 -0
  48. package/Http/Server.d.ts.map +1 -0
  49. package/Http/Server.js +34 -0
  50. package/Http/Server.js.map +1 -0
  51. package/Http/ServerError.d.ts +96 -0
  52. package/Http/ServerError.d.ts.map +1 -0
  53. package/Http/ServerError.js +40 -0
  54. package/Http/ServerError.js.map +1 -0
  55. package/Http/ServerRequest.d.ts +82 -0
  56. package/Http/ServerRequest.d.ts.map +1 -0
  57. package/Http/ServerRequest.js +66 -0
  58. package/Http/ServerRequest.js.map +1 -0
  59. package/Http/ServerResponse.d.ts +168 -0
  60. package/Http/ServerResponse.d.ts.map +1 -0
  61. package/Http/ServerResponse.js +116 -0
  62. package/Http/ServerResponse.js.map +1 -0
  63. package/Http/UrlParams.d.ts +20 -5
  64. package/Http/UrlParams.d.ts.map +1 -1
  65. package/Http/UrlParams.js.map +1 -1
  66. package/HttpServer.d.ts +44 -0
  67. package/HttpServer.d.ts.map +1 -0
  68. package/HttpServer.js +29 -0
  69. package/HttpServer.js.map +1 -0
  70. package/internal/command.js +9 -2
  71. package/internal/command.js.map +1 -1
  72. package/internal/fileSystem.js +15 -11
  73. package/internal/fileSystem.js.map +1 -1
  74. package/internal/http/body.js +28 -28
  75. package/internal/http/body.js.map +1 -1
  76. package/internal/http/client.d.ts.map +1 -1
  77. package/internal/http/client.js +41 -27
  78. package/internal/http/client.js.map +1 -1
  79. package/internal/http/clientRequest.js +22 -6
  80. package/internal/http/clientRequest.js.map +1 -1
  81. package/internal/http/clientResponse.js +15 -12
  82. package/internal/http/clientResponse.js.map +1 -1
  83. package/internal/http/formData.d.ts +8 -0
  84. package/internal/http/formData.d.ts.map +1 -0
  85. package/internal/http/formData.js +88 -0
  86. package/internal/http/formData.js.map +1 -0
  87. package/internal/http/middleware.d.ts +2 -0
  88. package/internal/http/middleware.d.ts.map +1 -0
  89. package/internal/http/middleware.js +43 -0
  90. package/internal/http/middleware.js.map +1 -0
  91. package/internal/http/router.d.ts +2 -0
  92. package/internal/http/router.d.ts.map +1 -0
  93. package/internal/http/router.js +187 -0
  94. package/internal/http/router.js.map +1 -0
  95. package/internal/http/server.d.ts +2 -0
  96. package/internal/http/server.d.ts.map +1 -0
  97. package/internal/http/server.js +30 -0
  98. package/internal/http/server.js.map +1 -0
  99. package/internal/http/serverError.d.ts +2 -0
  100. package/internal/http/serverError.d.ts.map +1 -0
  101. package/internal/http/serverError.js +30 -0
  102. package/internal/http/serverError.js.map +1 -0
  103. package/internal/http/serverRequest.d.ts +2 -0
  104. package/internal/http/serverRequest.d.ts.map +1 -0
  105. package/internal/http/serverRequest.js +57 -0
  106. package/internal/http/serverRequest.js.map +1 -0
  107. package/internal/http/serverResponse.d.ts +2 -0
  108. package/internal/http/serverResponse.d.ts.map +1 -0
  109. package/internal/http/serverResponse.js +109 -0
  110. package/internal/http/serverResponse.js.map +1 -0
  111. package/mjs/Command.mjs.map +1 -1
  112. package/mjs/FileSystem.mjs.map +1 -1
  113. package/mjs/Http/App.mjs +2 -0
  114. package/mjs/Http/App.mjs.map +1 -0
  115. package/mjs/Http/Body.mjs +12 -2
  116. package/mjs/Http/Body.mjs.map +1 -1
  117. package/mjs/Http/Client.mjs +6 -1
  118. package/mjs/Http/Client.mjs.map +1 -1
  119. package/mjs/Http/ClientRequest.mjs +16 -1
  120. package/mjs/Http/ClientRequest.mjs.map +1 -1
  121. package/mjs/Http/ClientResponse.mjs +11 -1
  122. package/mjs/Http/ClientResponse.mjs.map +1 -1
  123. package/mjs/Http/FormData.mjs +62 -1
  124. package/mjs/Http/FormData.mjs.map +1 -1
  125. package/mjs/Http/Headers.mjs +10 -0
  126. package/mjs/Http/Headers.mjs.map +1 -1
  127. package/mjs/Http/IncomingMessage.mjs +32 -1
  128. package/mjs/Http/IncomingMessage.mjs.map +1 -1
  129. package/mjs/Http/Middleware.mjs +32 -0
  130. package/mjs/Http/Middleware.mjs.map +1 -0
  131. package/mjs/Http/Router.mjs +117 -0
  132. package/mjs/Http/Router.mjs.map +1 -0
  133. package/mjs/Http/Server.mjs +22 -0
  134. package/mjs/Http/Server.mjs.map +1 -0
  135. package/mjs/Http/ServerError.mjs +27 -0
  136. package/mjs/Http/ServerError.mjs.map +1 -0
  137. package/mjs/Http/ServerRequest.mjs +48 -0
  138. package/mjs/Http/ServerRequest.mjs.map +1 -0
  139. package/mjs/Http/ServerResponse.mjs +90 -0
  140. package/mjs/Http/ServerResponse.mjs.map +1 -0
  141. package/mjs/Http/UrlParams.mjs.map +1 -1
  142. package/mjs/HttpServer.mjs +24 -0
  143. package/mjs/HttpServer.mjs.map +1 -0
  144. package/mjs/internal/command.mjs +9 -2
  145. package/mjs/internal/command.mjs.map +1 -1
  146. package/mjs/internal/fileSystem.mjs +15 -11
  147. package/mjs/internal/fileSystem.mjs.map +1 -1
  148. package/mjs/internal/http/body.mjs +23 -25
  149. package/mjs/internal/http/body.mjs.map +1 -1
  150. package/mjs/internal/http/client.mjs +37 -24
  151. package/mjs/internal/http/client.mjs.map +1 -1
  152. package/mjs/internal/http/clientRequest.mjs +16 -4
  153. package/mjs/internal/http/clientRequest.mjs.map +1 -1
  154. package/mjs/internal/http/clientResponse.mjs +15 -12
  155. package/mjs/internal/http/clientResponse.mjs.map +1 -1
  156. package/mjs/internal/http/formData.mjs +67 -0
  157. package/mjs/internal/http/formData.mjs.map +1 -0
  158. package/mjs/internal/http/middleware.mjs +29 -0
  159. package/mjs/internal/http/middleware.mjs.map +1 -0
  160. package/mjs/internal/http/router.mjs +155 -0
  161. package/mjs/internal/http/router.mjs.map +1 -0
  162. package/mjs/internal/http/server.mjs +17 -0
  163. package/mjs/internal/http/server.mjs.map +1 -0
  164. package/mjs/internal/http/serverError.mjs +17 -0
  165. package/mjs/internal/http/serverError.mjs.map +1 -0
  166. package/mjs/internal/http/serverRequest.mjs +41 -0
  167. package/mjs/internal/http/serverRequest.mjs.map +1 -0
  168. package/mjs/internal/http/serverResponse.mjs +82 -0
  169. package/mjs/internal/http/serverResponse.mjs.map +1 -0
  170. package/package.json +2 -1
  171. package/src/Command.ts +3 -2
  172. package/src/FileSystem.ts +20 -25
  173. package/src/Http/App.ts +19 -0
  174. package/src/Http/Body.ts +41 -14
  175. package/src/Http/Client.ts +13 -2
  176. package/src/Http/ClientRequest.ts +52 -2
  177. package/src/Http/ClientResponse.ts +13 -1
  178. package/src/Http/FormData.ts +121 -5
  179. package/src/Http/Headers.ts +37 -3
  180. package/src/Http/IncomingMessage.ts +46 -3
  181. package/src/Http/Middleware.ts +69 -0
  182. package/src/Http/Router.ts +342 -0
  183. package/src/Http/Server.ts +134 -0
  184. package/src/Http/ServerError.ts +111 -0
  185. package/src/Http/ServerRequest.ts +120 -0
  186. package/src/Http/ServerResponse.ts +202 -0
  187. package/src/Http/UrlParams.ts +20 -5
  188. package/src/HttpServer.ts +44 -0
  189. package/src/internal/command.ts +9 -2
  190. package/src/internal/fileSystem.ts +10 -7
  191. package/src/internal/http/body.ts +65 -39
  192. package/src/internal/http/client.ts +96 -76
  193. package/src/internal/http/clientRequest.ts +64 -4
  194. package/src/internal/http/clientResponse.ts +21 -13
  195. package/src/internal/http/formData.ts +140 -0
  196. package/src/internal/http/middleware.ts +72 -0
  197. package/src/internal/http/router.ts +298 -0
  198. package/src/internal/http/server.ts +80 -0
  199. package/src/internal/http/serverError.ts +26 -0
  200. package/src/internal/http/serverRequest.ts +71 -0
  201. package/src/internal/http/serverResponse.ts +255 -0
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as App from "@effect/platform/Http/App"
5
+ import * as internal from "@effect/platform/internal/http/middleware"
6
+
7
+ /**
8
+ * @since 1.0.0
9
+ * @category models
10
+ */
11
+ export interface Middleware {
12
+ <R, E>(self: App.Default<R, E>): App.Default<any, any>
13
+ }
14
+
15
+ /**
16
+ * @since 1.0.0
17
+ */
18
+ export namespace Middleware {
19
+ /**
20
+ * @since 1.0.0
21
+ */
22
+ export interface Applied<R, E, A extends App.Default<any, any>> {
23
+ (self: App.Default<R, E>): A
24
+ }
25
+ }
26
+
27
+ /**
28
+ * @since 1.0.0
29
+ * @category constructors
30
+ */
31
+ export const make: <M extends Middleware>(middleware: M) => M = internal.make
32
+
33
+ /**
34
+ * @since 1.0.0
35
+ * @category combinators
36
+ */
37
+ export const compose: {
38
+ <B extends App.Default<any, any>, C extends App.Default<any, any>>(
39
+ that: (b: B) => C
40
+ ): <A extends App.Default<any, any>>(self: (a: A) => B) => (a: A) => C
41
+ <A extends App.Default<any, any>, B extends App.Default<any, any>, C extends App.Default<any, any>>(
42
+ self: (a: A) => B,
43
+ that: (b: B) => C
44
+ ): (a: A) => C
45
+ } = internal.compose
46
+
47
+ /**
48
+ * @since 1.0.0
49
+ * @category constructors
50
+ */
51
+ export const logger: <R, E>(httpApp: App.Default<R, E>) => App.Default<R, E> = internal.logger
52
+
53
+ /**
54
+ * @since 1.0.0
55
+ * @category constructors
56
+ */
57
+ export const tracer: <R, E>(httpApp: App.Default<R, E>) => App.Default<R, E> = internal.tracer
58
+
59
+ /**
60
+ * @since 1.0.0
61
+ * @category constructors
62
+ */
63
+ export const loggerTracer: <R, E>(httpApp: App.Default<R, E>) => App.Default<R, E> = internal.loggerTracer
64
+
65
+ /**
66
+ * @since 1.0.0
67
+ * @category constructors
68
+ */
69
+ export const xForwardedHeaders: <R, E>(httpApp: App.Default<R, E>) => App.Default<R, E> = internal.xForwardedHeaders
@@ -0,0 +1,342 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as Chunk from "@effect/data/Chunk"
5
+ import type * as Context from "@effect/data/Context"
6
+ import type * as Option from "@effect/data/Option"
7
+ import type * as Effect from "@effect/io/Effect"
8
+ import type * as App from "@effect/platform/Http/App"
9
+ import type * as Method from "@effect/platform/Http/Method"
10
+ import type * as Error from "@effect/platform/Http/ServerError"
11
+ import type * as ServerResponse from "@effect/platform/Http/ServerResponse"
12
+ import * as internal from "@effect/platform/internal/http/router"
13
+ import type * as ParseResult from "@effect/schema/ParseResult"
14
+ import type * as Schema from "@effect/schema/Schema"
15
+
16
+ /**
17
+ * @since 1.0.0
18
+ * @category type ids
19
+ */
20
+ export const TypeId: unique symbol = internal.TypeId
21
+
22
+ /**
23
+ * @since 1.0.0
24
+ * @category type ids
25
+ */
26
+ export type TypeId = typeof TypeId
27
+
28
+ /**
29
+ * @since 1.0.0
30
+ * @category models
31
+ */
32
+ export interface Router<R, E> extends App.Default<Exclude<R, RouteContext>, E | Error.RouteNotFound> {
33
+ readonly [TypeId]: TypeId
34
+ readonly routes: Chunk.Chunk<Route<R, E>>
35
+ readonly mounts: Chunk.Chunk<readonly [string, App.Default<R, E>]>
36
+ }
37
+
38
+ /**
39
+ * @since 1.0.0
40
+ * @category type ids
41
+ */
42
+ export const RouteTypeId: unique symbol = internal.RouteTypeId
43
+
44
+ /**
45
+ * @since 1.0.0
46
+ * @category type ids
47
+ */
48
+ export type RouteTypeId = typeof RouteTypeId
49
+
50
+ /**
51
+ * @since 1.0.0
52
+ * @category models
53
+ */
54
+ export interface Route<R, E> {
55
+ readonly [RouteTypeId]: RouteTypeId
56
+ readonly method: Method.Method | "*"
57
+ readonly path: string
58
+ readonly handler: Route.Handler<R, E>
59
+ readonly prefix: Option.Option<string>
60
+ }
61
+
62
+ /**
63
+ * @since 1.0.0
64
+ */
65
+ export namespace Route {
66
+ /**
67
+ * @since 1.0.0
68
+ */
69
+ export type Handler<R, E> = Effect.Effect<
70
+ R,
71
+ E,
72
+ ServerResponse.ServerResponse
73
+ >
74
+ }
75
+
76
+ /**
77
+ * @since 1.0.0
78
+ * @category type ids
79
+ */
80
+ export const RouteContextTypeId: unique symbol = internal.RouteContextTypeId
81
+
82
+ /**
83
+ * @since 1.0.0
84
+ * @category type ids
85
+ */
86
+ export type RouteContextTypeId = typeof RouteContextTypeId
87
+
88
+ /**
89
+ * @since 1.0.0
90
+ * @category models
91
+ */
92
+ export interface RouteContext {
93
+ readonly [RouteContextTypeId]: RouteContextTypeId
94
+ readonly params: Readonly<Record<string, string | undefined>>
95
+ readonly searchParams: Readonly<Record<string, string>>
96
+ }
97
+
98
+ /**
99
+ * @since 1.0.0
100
+ * @category route context
101
+ */
102
+ export const RouteContext: Context.Tag<RouteContext, RouteContext> = internal.RouteContext
103
+
104
+ /**
105
+ * @since 1.0.0
106
+ * @category route context
107
+ */
108
+ export const params: Effect.Effect<
109
+ RouteContext,
110
+ never,
111
+ Readonly<Record<string, string | undefined>>
112
+ > = internal.params
113
+
114
+ /**
115
+ * @since 1.0.0
116
+ * @category route context
117
+ */
118
+ export const searchParams: Effect.Effect<
119
+ RouteContext,
120
+ never,
121
+ Readonly<Record<string, string>>
122
+ > = internal.searchParams
123
+
124
+ /**
125
+ * @since 1.0.0
126
+ * @category route context
127
+ */
128
+ export const schemaParams: <I extends Readonly<Record<string, string>>, A>(
129
+ schema: Schema.Schema<I, A>
130
+ ) => Effect.Effect<RouteContext, ParseResult.ParseError, A> = internal.schemaParams
131
+
132
+ /**
133
+ * @since 1.0.0
134
+ * @category constructors
135
+ */
136
+ export const empty: Router<never, never> = internal.empty
137
+
138
+ /**
139
+ * @since 1.0.0
140
+ * @category constructors
141
+ */
142
+ export const fromIterable: <R, E>(
143
+ routes: Iterable<Route<R, E>>
144
+ ) => Router<R, E> = internal.fromIterable
145
+
146
+ /**
147
+ * @since 1.0.0
148
+ * @category constructors
149
+ */
150
+ export const makeRoute: <R, E>(
151
+ method: Method.Method,
152
+ path: string,
153
+ handler: Route.Handler<R, E>
154
+ ) => Route<R, E> = internal.makeRoute
155
+
156
+ /**
157
+ * @since 1.0.0
158
+ * @category combinators
159
+ */
160
+ export const prefixAll: {
161
+ (prefix: string): <R, E>(self: Router<R, E>) => Router<R, E>
162
+ <R, E>(self: Router<R, E>, prefix: string): Router<R, E>
163
+ } = internal.prefixAll
164
+
165
+ /**
166
+ * @since 1.0.0
167
+ * @category combinators
168
+ */
169
+ export const concat: {
170
+ <R1, E1>(that: Router<R1, E1>): <R, E>(
171
+ self: Router<R, E>
172
+ ) => Router<R1 | R, E1 | E>
173
+ <R, E, R1, E1>(self: Router<R, E>, that: Router<R1, E1>): Router<
174
+ R | R1,
175
+ E | E1
176
+ >
177
+ } = internal.concat
178
+
179
+ /**
180
+ * @since 1.0.0
181
+ * @category routing
182
+ */
183
+ export const mount: {
184
+ <R1, E1>(path: string, that: Router<R1, E1>): <R, E>(
185
+ self: Router<R, E>
186
+ ) => Router<R1 | R, E1 | E>
187
+ <R, E, R1, E1>(
188
+ self: Router<R, E>,
189
+ path: string,
190
+ that: Router<R1, E1>
191
+ ): Router<R | R1, E | E1>
192
+ } = internal.mount
193
+
194
+ /**
195
+ * @since 1.0.0
196
+ * @category routing
197
+ */
198
+ export const mountApp: {
199
+ <R1, E1>(path: string, that: App.Default<R1, E1>): <R, E>(
200
+ self: Router<R, E>
201
+ ) => Router<R1 | R, E1 | E>
202
+ <R, E, R1, E1>(
203
+ self: Router<R, E>,
204
+ path: string,
205
+ that: App.Default<R1, E1>
206
+ ): Router<R | R1, E | E1>
207
+ } = internal.mountApp
208
+
209
+ /**
210
+ * @since 1.0.0
211
+ * @category routing
212
+ */
213
+ export const route: (method: Method.Method) => {
214
+ <R1, E1>(path: string, handler: Route.Handler<R1, E1>): <R, E>(
215
+ self: Router<R, E>
216
+ ) => Router<R | Exclude<R1, RouteContext>, E1 | E>
217
+ <R, E, R1, E1>(
218
+ self: Router<R, E>,
219
+ path: string,
220
+ handler: Route.Handler<R1, E1>
221
+ ): Router<R | Exclude<R1, RouteContext>, E | E1>
222
+ } = internal.route
223
+
224
+ /**
225
+ * @since 1.0.0
226
+ * @category routing
227
+ */
228
+ export const all: {
229
+ <R1, E1>(path: string, handler: Route.Handler<R1, E1>): <R, E>(
230
+ self: Router<R, E>
231
+ ) => Router<R | Exclude<R1, RouteContext>, E1 | E>
232
+ <R, E, R1, E1>(
233
+ self: Router<R, E>,
234
+ path: string,
235
+ handler: Route.Handler<R1, E1>
236
+ ): Router<R | Exclude<R1, RouteContext>, E | E1>
237
+ } = internal.all
238
+
239
+ /**
240
+ * @since 1.0.0
241
+ * @category routing
242
+ */
243
+ export const get: {
244
+ <R1, E1>(path: string, handler: Route.Handler<R1, E1>): <R, E>(
245
+ self: Router<R, E>
246
+ ) => Router<R | Exclude<R1, RouteContext>, E1 | E>
247
+ <R, E, R1, E1>(
248
+ self: Router<R, E>,
249
+ path: string,
250
+ handler: Route.Handler<R1, E1>
251
+ ): Router<R | Exclude<R1, RouteContext>, E | E1>
252
+ } = internal.get
253
+
254
+ /**
255
+ * @since 1.0.0
256
+ * @category routing
257
+ */
258
+ export const post: {
259
+ <R1, E1>(path: string, handler: Route.Handler<R1, E1>): <R, E>(
260
+ self: Router<R, E>
261
+ ) => Router<R | Exclude<R1, RouteContext>, E1 | E>
262
+ <R, E, R1, E1>(
263
+ self: Router<R, E>,
264
+ path: string,
265
+ handler: Route.Handler<R1, E1>
266
+ ): Router<R | Exclude<R1, RouteContext>, E | E1>
267
+ } = internal.post
268
+
269
+ /**
270
+ * @since 1.0.0
271
+ * @category routing
272
+ */
273
+ export const patch: {
274
+ <R1, E1>(path: string, handler: Route.Handler<R1, E1>): <R, E>(
275
+ self: Router<R, E>
276
+ ) => Router<R | Exclude<R1, RouteContext>, E1 | E>
277
+ <R, E, R1, E1>(
278
+ self: Router<R, E>,
279
+ path: string,
280
+ handler: Route.Handler<R1, E1>
281
+ ): Router<R | Exclude<R1, RouteContext>, E | E1>
282
+ } = internal.patch
283
+
284
+ /**
285
+ * @since 1.0.0
286
+ * @category routing
287
+ */
288
+ export const put: {
289
+ <R1, E1>(path: string, handler: Route.Handler<R1, E1>): <R, E>(
290
+ self: Router<R, E>
291
+ ) => Router<R | Exclude<R1, RouteContext>, E1 | E>
292
+ <R, E, R1, E1>(
293
+ self: Router<R, E>,
294
+ path: string,
295
+ handler: Route.Handler<R1, E1>
296
+ ): Router<R | Exclude<R1, RouteContext>, E | E1>
297
+ } = internal.put
298
+
299
+ /**
300
+ * @since 1.0.0
301
+ * @category routing
302
+ */
303
+ export const del: {
304
+ <R1, E1>(path: string, handler: Route.Handler<R1, E1>): <R, E>(
305
+ self: Router<R, E>
306
+ ) => Router<R | Exclude<R1, RouteContext>, E1 | E>
307
+ <R, E, R1, E1>(
308
+ self: Router<R, E>,
309
+ path: string,
310
+ handler: Route.Handler<R1, E1>
311
+ ): Router<R | Exclude<R1, RouteContext>, E | E1>
312
+ } = internal.del
313
+
314
+ /**
315
+ * @since 1.0.0
316
+ * @category routing
317
+ */
318
+ export const head: {
319
+ <R1, E1>(path: string, handler: Route.Handler<R1, E1>): <R, E>(
320
+ self: Router<R, E>
321
+ ) => Router<R | Exclude<R1, RouteContext>, E1 | E>
322
+ <R, E, R1, E1>(
323
+ self: Router<R, E>,
324
+ path: string,
325
+ handler: Route.Handler<R1, E1>
326
+ ): Router<R | Exclude<R1, RouteContext>, E | E1>
327
+ } = internal.head
328
+
329
+ /**
330
+ * @since 1.0.0
331
+ * @category routing
332
+ */
333
+ export const options: {
334
+ <R1, E1>(path: string, handler: Route.Handler<R1, E1>): <R, E>(
335
+ self: Router<R, E>
336
+ ) => Router<R | Exclude<R1, RouteContext>, E1 | E>
337
+ <R, E, R1, E1>(
338
+ self: Router<R, E>,
339
+ path: string,
340
+ handler: Route.Handler<R1, E1>
341
+ ): Router<R | Exclude<R1, RouteContext>, E | E1>
342
+ } = internal.options
@@ -0,0 +1,134 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as Context from "@effect/data/Context"
5
+ import type * as Effect from "@effect/io/Effect"
6
+ import type * as Scope from "@effect/io/Scope"
7
+ import type * as App from "@effect/platform/Http/App"
8
+ import type * as Middleware from "@effect/platform/Http/Middleware"
9
+ import type * as Error from "@effect/platform/Http/ServerError"
10
+ import type * as ServerRequest from "@effect/platform/Http/ServerRequest"
11
+ import * as internal from "@effect/platform/internal/http/server"
12
+
13
+ /**
14
+ * @since 1.0.0
15
+ * @category type ids
16
+ */
17
+ export const TypeId: unique symbol = internal.TypeId
18
+
19
+ /**
20
+ * @since 1.0.0
21
+ * @category type ids
22
+ */
23
+ export type TypeId = typeof TypeId
24
+
25
+ /**
26
+ * @since 1.0.0
27
+ * @category models
28
+ */
29
+ export interface Server {
30
+ readonly [TypeId]: TypeId
31
+ readonly serve: {
32
+ <R, E>(httpApp: App.Default<R, E>): Effect.Effect<
33
+ Exclude<R, ServerRequest.ServerRequest> | Scope.Scope,
34
+ Error.ServeError,
35
+ never
36
+ >
37
+ <R, E, App extends App.Default<any, any>>(
38
+ httpApp: App.Default<R, E>,
39
+ middleware: Middleware.Middleware.Applied<R, E, App>
40
+ ): Effect.Effect<
41
+ Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest> | Scope.Scope,
42
+ Error.ServeError,
43
+ never
44
+ >
45
+ }
46
+ readonly address: Address
47
+ }
48
+
49
+ /**
50
+ * @since 1.0.0
51
+ * @category models
52
+ */
53
+ export interface ServeOptions {
54
+ readonly respond: boolean
55
+ }
56
+
57
+ /**
58
+ * @since 1.0.0
59
+ * @category models
60
+ */
61
+ export type Address = UnixAddress | TcpAddress
62
+
63
+ /**
64
+ * @since 1.0.0
65
+ * @category models
66
+ */
67
+ export interface TcpAddress {
68
+ readonly _tag: "TcpAddress"
69
+ readonly hostname: string
70
+ readonly port: number
71
+ }
72
+
73
+ /**
74
+ * @since 1.0.0
75
+ * @category models
76
+ */
77
+ export interface UnixAddress {
78
+ readonly _tag: "UnixAddress"
79
+ readonly path: string
80
+ }
81
+
82
+ /**
83
+ * @since 1.0.0
84
+ * @category constructors
85
+ */
86
+ export const Server: Context.Tag<Server, Server> = internal.serverTag
87
+
88
+ /**
89
+ * @since 1.0.0
90
+ * @category constructors
91
+ */
92
+ export const make: (
93
+ options: {
94
+ readonly serve: (
95
+ httpApp: App.Default<never, unknown>,
96
+ middleware?: Middleware.Middleware
97
+ ) => Effect.Effect<Scope.Scope, Error.ServeError, never>
98
+ readonly address: Address
99
+ }
100
+ ) => Server = internal.make
101
+
102
+ /**
103
+ * @since 1.0.0
104
+ * @category accessors
105
+ */
106
+ export const serve: {
107
+ (): <R, E>(
108
+ httpApp: App.Default<R, E>
109
+ ) => Effect.Effect<
110
+ Server | Scope.Scope | Exclude<R, ServerRequest.ServerRequest>,
111
+ Error.ServeError,
112
+ never
113
+ >
114
+ <R, E, App extends App.Default<any, any>>(
115
+ middleware: Middleware.Middleware.Applied<R, E, App>
116
+ ): (
117
+ httpApp: App.Default<R, E>
118
+ ) => Effect.Effect<
119
+ Server | Scope.Scope | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest>,
120
+ Error.ServeError,
121
+ never
122
+ >
123
+ <R, E>(
124
+ httpApp: App.Default<R, E>
125
+ ): Effect.Effect<Server | Scope.Scope | Exclude<R, ServerRequest.ServerRequest>, Error.ServeError, never>
126
+ <R, E, App extends App.Default<any, any>>(
127
+ httpApp: App.Default<R, E>,
128
+ middleware: Middleware.Middleware.Applied<R, E, App>
129
+ ): Effect.Effect<
130
+ Server | Scope.Scope | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest>,
131
+ Error.ServeError,
132
+ never
133
+ >
134
+ } = internal.serve
@@ -0,0 +1,111 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as Data from "@effect/data/Data"
5
+ import type * as ServerRequest from "@effect/platform/Http/ServerRequest"
6
+ import type * as ServerResponse from "@effect/platform/Http/ServerResponse"
7
+ import * as internal from "@effect/platform/internal/http/serverError"
8
+
9
+ /**
10
+ * @since 1.0.0
11
+ * @category type id
12
+ */
13
+ export const TypeId: unique symbol = internal.TypeId
14
+
15
+ /**
16
+ * @since 1.0.0
17
+ * @category type id
18
+ */
19
+ export type TypeId = typeof TypeId
20
+
21
+ /**
22
+ * @since 1.0.0
23
+ * @category error
24
+ */
25
+ export type HttpServerError = RequestError | ResponseError | RouteNotFound | ServeError
26
+
27
+ /**
28
+ * @since 1.0.0
29
+ */
30
+ export namespace HttpError {
31
+ /**
32
+ * @since 1.0.0
33
+ * @category models
34
+ */
35
+ export interface Proto extends Data.Case {
36
+ readonly [TypeId]: TypeId
37
+ readonly _tag: string
38
+ }
39
+
40
+ /**
41
+ * @since 1.0.0
42
+ */
43
+ export type ProvidedFields = TypeId | "_tag" | keyof Data.Case
44
+ }
45
+
46
+ /**
47
+ * @since 1.0.0
48
+ * @category error
49
+ */
50
+ export interface RequestError extends HttpError.Proto {
51
+ readonly _tag: "RequestError"
52
+ readonly request: ServerRequest.ServerRequest
53
+ readonly reason: "Transport" | "Decode"
54
+ readonly error: unknown
55
+ }
56
+
57
+ /**
58
+ * @since 1.0.0
59
+ * @category error
60
+ */
61
+ export const RequestError: (props: Omit<RequestError, HttpError.ProvidedFields>) => RequestError = internal.requestError
62
+
63
+ /**
64
+ * @since 1.0.0
65
+ * @category error
66
+ */
67
+ export interface RouteNotFound extends HttpError.Proto {
68
+ readonly _tag: "RouteNotFound"
69
+ readonly request: ServerRequest.ServerRequest
70
+ }
71
+
72
+ /**
73
+ * @since 1.0.0
74
+ * @category error
75
+ */
76
+ export const RouteNotFound: (props: Omit<RouteNotFound, HttpError.ProvidedFields>) => RouteNotFound =
77
+ internal.routeNotFound
78
+
79
+ /**
80
+ * @since 1.0.0
81
+ * @category error
82
+ */
83
+ export interface ResponseError extends HttpError.Proto {
84
+ readonly _tag: "ResponseError"
85
+ readonly request: ServerRequest.ServerRequest
86
+ readonly response: ServerResponse.ServerResponse
87
+ readonly reason: "Decode"
88
+ readonly error: unknown
89
+ }
90
+
91
+ /**
92
+ * @since 1.0.0
93
+ * @category error
94
+ */
95
+ export const ResponseError: (props: Omit<ResponseError, HttpError.ProvidedFields>) => ResponseError =
96
+ internal.responseError
97
+
98
+ /**
99
+ * @since 1.0.0
100
+ * @category error
101
+ */
102
+ export interface ServeError extends HttpError.Proto {
103
+ readonly _tag: "ServeError"
104
+ readonly error: unknown
105
+ }
106
+
107
+ /**
108
+ * @since 1.0.0
109
+ * @category error
110
+ */
111
+ export const ServeError: (props: Omit<ServeError, HttpError.ProvidedFields>) => ServeError = internal.serveError