@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.
- package/Command.d.ts +3 -2
- package/Command.d.ts.map +1 -1
- package/Command.js.map +1 -1
- package/FileSystem.d.ts +16 -9
- package/FileSystem.d.ts.map +1 -1
- package/FileSystem.js.map +1 -1
- package/Http/App.d.ts +18 -0
- package/Http/App.d.ts.map +1 -0
- package/Http/App.js +6 -0
- package/Http/App.js.map +1 -0
- package/Http/Body.d.ts +37 -14
- package/Http/Body.d.ts.map +1 -1
- package/Http/Body.js +17 -5
- package/Http/Body.js.map +1 -1
- package/Http/Client.d.ts +8 -2
- package/Http/Client.d.ts.map +1 -1
- package/Http/Client.js +10 -4
- package/Http/Client.js.map +1 -1
- package/Http/ClientRequest.d.ts +44 -1
- package/Http/ClientRequest.d.ts.map +1 -1
- package/Http/ClientRequest.js +21 -3
- package/Http/ClientRequest.js.map +1 -1
- package/Http/ClientResponse.d.ts +13 -1
- package/Http/ClientResponse.d.ts.map +1 -1
- package/Http/ClientResponse.js +14 -2
- package/Http/ClientResponse.js.map +1 -1
- package/Http/FormData.d.ts +97 -4
- package/Http/FormData.d.ts.map +1 -1
- package/Http/FormData.js +77 -2
- package/Http/FormData.js.map +1 -1
- package/Http/Headers.d.ts +29 -3
- package/Http/Headers.d.ts.map +1 -1
- package/Http/Headers.js +13 -1
- package/Http/Headers.js.map +1 -1
- package/Http/IncomingMessage.d.ts +26 -5
- package/Http/IncomingMessage.d.ts.map +1 -1
- package/Http/IncomingMessage.js +38 -3
- package/Http/IncomingMessage.js.map +1 -1
- package/Http/Middleware.d.ts +56 -0
- package/Http/Middleware.d.ts.map +1 -0
- package/Http/Middleware.js +46 -0
- package/Http/Middleware.js.map +1 -0
- package/Http/Router.d.ts +221 -0
- package/Http/Router.d.ts.map +1 -0
- package/Http/Router.js +148 -0
- package/Http/Router.js.map +1 -0
- package/Http/Server.d.ts +85 -0
- package/Http/Server.d.ts.map +1 -0
- package/Http/Server.js +34 -0
- package/Http/Server.js.map +1 -0
- package/Http/ServerError.d.ts +96 -0
- package/Http/ServerError.d.ts.map +1 -0
- package/Http/ServerError.js +40 -0
- package/Http/ServerError.js.map +1 -0
- package/Http/ServerRequest.d.ts +82 -0
- package/Http/ServerRequest.d.ts.map +1 -0
- package/Http/ServerRequest.js +66 -0
- package/Http/ServerRequest.js.map +1 -0
- package/Http/ServerResponse.d.ts +168 -0
- package/Http/ServerResponse.d.ts.map +1 -0
- package/Http/ServerResponse.js +116 -0
- package/Http/ServerResponse.js.map +1 -0
- package/Http/UrlParams.d.ts +20 -5
- package/Http/UrlParams.d.ts.map +1 -1
- package/Http/UrlParams.js.map +1 -1
- package/HttpServer.d.ts +44 -0
- package/HttpServer.d.ts.map +1 -0
- package/HttpServer.js +29 -0
- package/HttpServer.js.map +1 -0
- package/internal/command.js +9 -2
- package/internal/command.js.map +1 -1
- package/internal/fileSystem.js +15 -11
- package/internal/fileSystem.js.map +1 -1
- package/internal/http/body.js +28 -28
- package/internal/http/body.js.map +1 -1
- package/internal/http/client.d.ts.map +1 -1
- package/internal/http/client.js +41 -27
- package/internal/http/client.js.map +1 -1
- package/internal/http/clientRequest.js +22 -6
- package/internal/http/clientRequest.js.map +1 -1
- package/internal/http/clientResponse.js +15 -12
- package/internal/http/clientResponse.js.map +1 -1
- package/internal/http/formData.d.ts +8 -0
- package/internal/http/formData.d.ts.map +1 -0
- package/internal/http/formData.js +88 -0
- package/internal/http/formData.js.map +1 -0
- package/internal/http/middleware.d.ts +2 -0
- package/internal/http/middleware.d.ts.map +1 -0
- package/internal/http/middleware.js +43 -0
- package/internal/http/middleware.js.map +1 -0
- package/internal/http/router.d.ts +2 -0
- package/internal/http/router.d.ts.map +1 -0
- package/internal/http/router.js +187 -0
- package/internal/http/router.js.map +1 -0
- package/internal/http/server.d.ts +2 -0
- package/internal/http/server.d.ts.map +1 -0
- package/internal/http/server.js +30 -0
- package/internal/http/server.js.map +1 -0
- package/internal/http/serverError.d.ts +2 -0
- package/internal/http/serverError.d.ts.map +1 -0
- package/internal/http/serverError.js +30 -0
- package/internal/http/serverError.js.map +1 -0
- package/internal/http/serverRequest.d.ts +2 -0
- package/internal/http/serverRequest.d.ts.map +1 -0
- package/internal/http/serverRequest.js +57 -0
- package/internal/http/serverRequest.js.map +1 -0
- package/internal/http/serverResponse.d.ts +2 -0
- package/internal/http/serverResponse.d.ts.map +1 -0
- package/internal/http/serverResponse.js +109 -0
- package/internal/http/serverResponse.js.map +1 -0
- package/mjs/Command.mjs.map +1 -1
- package/mjs/FileSystem.mjs.map +1 -1
- package/mjs/Http/App.mjs +2 -0
- package/mjs/Http/App.mjs.map +1 -0
- package/mjs/Http/Body.mjs +12 -2
- package/mjs/Http/Body.mjs.map +1 -1
- package/mjs/Http/Client.mjs +6 -1
- package/mjs/Http/Client.mjs.map +1 -1
- package/mjs/Http/ClientRequest.mjs +16 -1
- package/mjs/Http/ClientRequest.mjs.map +1 -1
- package/mjs/Http/ClientResponse.mjs +11 -1
- package/mjs/Http/ClientResponse.mjs.map +1 -1
- package/mjs/Http/FormData.mjs +62 -1
- package/mjs/Http/FormData.mjs.map +1 -1
- package/mjs/Http/Headers.mjs +10 -0
- package/mjs/Http/Headers.mjs.map +1 -1
- package/mjs/Http/IncomingMessage.mjs +32 -1
- package/mjs/Http/IncomingMessage.mjs.map +1 -1
- package/mjs/Http/Middleware.mjs +32 -0
- package/mjs/Http/Middleware.mjs.map +1 -0
- package/mjs/Http/Router.mjs +117 -0
- package/mjs/Http/Router.mjs.map +1 -0
- package/mjs/Http/Server.mjs +22 -0
- package/mjs/Http/Server.mjs.map +1 -0
- package/mjs/Http/ServerError.mjs +27 -0
- package/mjs/Http/ServerError.mjs.map +1 -0
- package/mjs/Http/ServerRequest.mjs +48 -0
- package/mjs/Http/ServerRequest.mjs.map +1 -0
- package/mjs/Http/ServerResponse.mjs +90 -0
- package/mjs/Http/ServerResponse.mjs.map +1 -0
- package/mjs/Http/UrlParams.mjs.map +1 -1
- package/mjs/HttpServer.mjs +24 -0
- package/mjs/HttpServer.mjs.map +1 -0
- package/mjs/internal/command.mjs +9 -2
- package/mjs/internal/command.mjs.map +1 -1
- package/mjs/internal/fileSystem.mjs +15 -11
- package/mjs/internal/fileSystem.mjs.map +1 -1
- package/mjs/internal/http/body.mjs +23 -25
- package/mjs/internal/http/body.mjs.map +1 -1
- package/mjs/internal/http/client.mjs +37 -24
- package/mjs/internal/http/client.mjs.map +1 -1
- package/mjs/internal/http/clientRequest.mjs +16 -4
- package/mjs/internal/http/clientRequest.mjs.map +1 -1
- package/mjs/internal/http/clientResponse.mjs +15 -12
- package/mjs/internal/http/clientResponse.mjs.map +1 -1
- package/mjs/internal/http/formData.mjs +67 -0
- package/mjs/internal/http/formData.mjs.map +1 -0
- package/mjs/internal/http/middleware.mjs +29 -0
- package/mjs/internal/http/middleware.mjs.map +1 -0
- package/mjs/internal/http/router.mjs +155 -0
- package/mjs/internal/http/router.mjs.map +1 -0
- package/mjs/internal/http/server.mjs +17 -0
- package/mjs/internal/http/server.mjs.map +1 -0
- package/mjs/internal/http/serverError.mjs +17 -0
- package/mjs/internal/http/serverError.mjs.map +1 -0
- package/mjs/internal/http/serverRequest.mjs +41 -0
- package/mjs/internal/http/serverRequest.mjs.map +1 -0
- package/mjs/internal/http/serverResponse.mjs +82 -0
- package/mjs/internal/http/serverResponse.mjs.map +1 -0
- package/package.json +2 -1
- package/src/Command.ts +3 -2
- package/src/FileSystem.ts +20 -25
- package/src/Http/App.ts +19 -0
- package/src/Http/Body.ts +41 -14
- package/src/Http/Client.ts +13 -2
- package/src/Http/ClientRequest.ts +52 -2
- package/src/Http/ClientResponse.ts +13 -1
- package/src/Http/FormData.ts +121 -5
- package/src/Http/Headers.ts +37 -3
- package/src/Http/IncomingMessage.ts +46 -3
- package/src/Http/Middleware.ts +69 -0
- package/src/Http/Router.ts +342 -0
- package/src/Http/Server.ts +134 -0
- package/src/Http/ServerError.ts +111 -0
- package/src/Http/ServerRequest.ts +120 -0
- package/src/Http/ServerResponse.ts +202 -0
- package/src/Http/UrlParams.ts +20 -5
- package/src/HttpServer.ts +44 -0
- package/src/internal/command.ts +9 -2
- package/src/internal/fileSystem.ts +10 -7
- package/src/internal/http/body.ts +65 -39
- package/src/internal/http/client.ts +96 -76
- package/src/internal/http/clientRequest.ts +64 -4
- package/src/internal/http/clientResponse.ts +21 -13
- package/src/internal/http/formData.ts +140 -0
- package/src/internal/http/middleware.ts +72 -0
- package/src/internal/http/router.ts +298 -0
- package/src/internal/http/server.ts +80 -0
- package/src/internal/http/serverError.ts +26 -0
- package/src/internal/http/serverRequest.ts +71 -0
- 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
|