@effect/platform 0.43.11 → 0.44.1
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/dist/cjs/Error.js +4 -0
- package/dist/cjs/Error.js.map +1 -1
- package/dist/cjs/Http/App.js.map +1 -1
- package/dist/cjs/Http/Body.js.map +1 -1
- package/dist/cjs/Http/Client.js.map +1 -1
- package/dist/cjs/Http/ClientError.js +4 -0
- package/dist/cjs/Http/ClientError.js.map +1 -1
- package/dist/cjs/Http/ClientResponse.js.map +1 -1
- package/dist/cjs/Http/IncomingMessage.js.map +1 -1
- package/dist/cjs/Http/Multipart.js.map +1 -1
- package/dist/cjs/Http/Server.js +26 -1
- package/dist/cjs/Http/Server.js.map +1 -1
- package/dist/cjs/Http/ServerError.js.map +1 -1
- package/dist/cjs/Http/ServerResponse.js.map +1 -1
- package/dist/cjs/HttpServer.js +7 -1
- package/dist/cjs/HttpServer.js.map +1 -1
- package/dist/cjs/KeyValueStore.js.map +1 -1
- package/dist/cjs/Path.js.map +1 -1
- package/dist/cjs/Transferable.js +51 -48
- package/dist/cjs/Transferable.js.map +1 -1
- package/dist/cjs/Worker.js +6 -1
- package/dist/cjs/Worker.js.map +1 -1
- package/dist/cjs/WorkerError.js +4 -0
- package/dist/cjs/WorkerError.js.map +1 -1
- package/dist/cjs/index.js +62 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/internal/commandExecutor.js +1 -1
- package/dist/cjs/internal/commandExecutor.js.map +1 -1
- package/dist/cjs/internal/effectify.js.map +1 -1
- package/dist/cjs/internal/fileSystem.js +1 -1
- package/dist/cjs/internal/fileSystem.js.map +1 -1
- package/dist/cjs/internal/http/body.js.map +1 -1
- package/dist/cjs/internal/http/client.js +2 -2
- package/dist/cjs/internal/http/client.js.map +1 -1
- package/dist/cjs/internal/http/etag.js +1 -1
- package/dist/cjs/internal/http/etag.js.map +1 -1
- package/dist/cjs/internal/http/multipart.js.map +1 -1
- package/dist/cjs/internal/http/platform.js +1 -1
- package/dist/cjs/internal/http/platform.js.map +1 -1
- package/dist/cjs/internal/http/router.js +1 -1
- package/dist/cjs/internal/http/router.js.map +1 -1
- package/dist/cjs/internal/http/server.js +23 -2
- package/dist/cjs/internal/http/server.js.map +1 -1
- package/dist/cjs/internal/http/serverRequest.js +1 -1
- package/dist/cjs/internal/http/serverRequest.js.map +1 -1
- package/dist/cjs/internal/http/serverResponse.js.map +1 -1
- package/dist/cjs/internal/keyValueStore.js +2 -2
- package/dist/cjs/internal/keyValueStore.js.map +1 -1
- package/dist/cjs/internal/path.js +9 -4
- package/dist/cjs/internal/path.js.map +1 -1
- package/dist/cjs/internal/terminal.js +1 -1
- package/dist/cjs/internal/terminal.js.map +1 -1
- package/dist/cjs/internal/worker.js +16 -12
- package/dist/cjs/internal/worker.js.map +1 -1
- package/dist/cjs/internal/workerError.js.map +1 -1
- package/dist/cjs/internal/workerRunner.js +15 -12
- package/dist/cjs/internal/workerRunner.js.map +1 -1
- package/dist/dts/Command.d.ts +9 -9
- package/dist/dts/Command.d.ts.map +1 -1
- package/dist/dts/CommandExecutor.d.ts +13 -13
- package/dist/dts/CommandExecutor.d.ts.map +1 -1
- package/dist/dts/Effectify.d.ts +55 -55
- package/dist/dts/Effectify.d.ts.map +1 -1
- package/dist/dts/Error.d.ts +2 -6
- package/dist/dts/Error.d.ts.map +1 -1
- package/dist/dts/FileSystem.d.ts +35 -35
- package/dist/dts/FileSystem.d.ts.map +1 -1
- package/dist/dts/Http/App.d.ts +5 -5
- package/dist/dts/Http/App.d.ts.map +1 -1
- package/dist/dts/Http/Body.d.ts +10 -11
- package/dist/dts/Http/Body.d.ts.map +1 -1
- package/dist/dts/Http/Client.d.ts +32 -32
- package/dist/dts/Http/Client.d.ts.map +1 -1
- package/dist/dts/Http/ClientError.d.ts +2 -6
- package/dist/dts/Http/ClientError.d.ts.map +1 -1
- package/dist/dts/Http/ClientRequest.d.ts +16 -16
- package/dist/dts/Http/ClientRequest.d.ts.map +1 -1
- package/dist/dts/Http/ClientResponse.d.ts +3 -3
- package/dist/dts/Http/ClientResponse.d.ts.map +1 -1
- package/dist/dts/Http/Etag.d.ts +2 -2
- package/dist/dts/Http/Etag.d.ts.map +1 -1
- package/dist/dts/Http/IncomingMessage.d.ts +10 -10
- package/dist/dts/Http/IncomingMessage.d.ts.map +1 -1
- package/dist/dts/Http/Middleware.d.ts +3 -3
- package/dist/dts/Http/Multipart.d.ts +18 -19
- package/dist/dts/Http/Multipart.d.ts.map +1 -1
- package/dist/dts/Http/Multiplex.d.ts +4 -4
- package/dist/dts/Http/Multiplex.d.ts.map +1 -1
- package/dist/dts/Http/Platform.d.ts +3 -3
- package/dist/dts/Http/Platform.d.ts.map +1 -1
- package/dist/dts/Http/Router.d.ts +10 -10
- package/dist/dts/Http/Router.d.ts.map +1 -1
- package/dist/dts/Http/Server.d.ts +39 -14
- package/dist/dts/Http/Server.d.ts.map +1 -1
- package/dist/dts/Http/ServerError.d.ts +2 -3
- package/dist/dts/Http/ServerError.d.ts.map +1 -1
- package/dist/dts/Http/ServerRequest.d.ts +9 -9
- package/dist/dts/Http/ServerRequest.d.ts.map +1 -1
- package/dist/dts/Http/ServerResponse.d.ts +7 -7
- package/dist/dts/Http/ServerResponse.d.ts.map +1 -1
- package/dist/dts/Http/UrlParams.d.ts +4 -4
- package/dist/dts/HttpServer.d.ts +24 -0
- package/dist/dts/HttpServer.d.ts.map +1 -1
- package/dist/dts/KeyValueStore.d.ts +21 -21
- package/dist/dts/KeyValueStore.d.ts.map +1 -1
- package/dist/dts/Path.d.ts +3 -3
- package/dist/dts/Path.d.ts.map +1 -1
- package/dist/dts/Runtime.d.ts +1 -1
- package/dist/dts/Runtime.d.ts.map +1 -1
- package/dist/dts/Terminal.d.ts +5 -5
- package/dist/dts/Terminal.d.ts.map +1 -1
- package/dist/dts/Transferable.d.ts +35 -13
- package/dist/dts/Transferable.d.ts.map +1 -1
- package/dist/dts/Worker.d.ts +58 -41
- package/dist/dts/Worker.d.ts.map +1 -1
- package/dist/dts/WorkerError.d.ts +3 -7
- package/dist/dts/WorkerError.d.ts.map +1 -1
- package/dist/dts/WorkerRunner.d.ts +13 -13
- package/dist/dts/WorkerRunner.d.ts.map +1 -1
- package/dist/dts/index.d.ts +61 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/esm/Error.js +3 -0
- package/dist/esm/Error.js.map +1 -1
- package/dist/esm/Http/App.js.map +1 -1
- package/dist/esm/Http/Body.js.map +1 -1
- package/dist/esm/Http/Client.js.map +1 -1
- package/dist/esm/Http/ClientError.js +3 -0
- package/dist/esm/Http/ClientError.js.map +1 -1
- package/dist/esm/Http/ClientResponse.js.map +1 -1
- package/dist/esm/Http/IncomingMessage.js.map +1 -1
- package/dist/esm/Http/Multipart.js.map +1 -1
- package/dist/esm/Http/Server.js +25 -0
- package/dist/esm/Http/Server.js.map +1 -1
- package/dist/esm/Http/ServerError.js.map +1 -1
- package/dist/esm/Http/ServerResponse.js.map +1 -1
- package/dist/esm/HttpServer.js +24 -0
- package/dist/esm/HttpServer.js.map +1 -1
- package/dist/esm/KeyValueStore.js.map +1 -1
- package/dist/esm/Path.js.map +1 -1
- package/dist/esm/Transferable.js +48 -45
- package/dist/esm/Transferable.js.map +1 -1
- package/dist/esm/Worker.js +5 -0
- package/dist/esm/Worker.js.map +1 -1
- package/dist/esm/WorkerError.js +3 -0
- package/dist/esm/WorkerError.js.map +1 -1
- package/dist/esm/index.js +61 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/commandExecutor.js +2 -2
- package/dist/esm/internal/commandExecutor.js.map +1 -1
- package/dist/esm/internal/effectify.js.map +1 -1
- package/dist/esm/internal/fileSystem.js +2 -2
- package/dist/esm/internal/fileSystem.js.map +1 -1
- package/dist/esm/internal/http/body.js.map +1 -1
- package/dist/esm/internal/http/client.js +2 -2
- package/dist/esm/internal/http/client.js.map +1 -1
- package/dist/esm/internal/http/etag.js +1 -1
- package/dist/esm/internal/http/etag.js.map +1 -1
- package/dist/esm/internal/http/multipart.js.map +1 -1
- package/dist/esm/internal/http/platform.js +1 -1
- package/dist/esm/internal/http/platform.js.map +1 -1
- package/dist/esm/internal/http/router.js +1 -1
- package/dist/esm/internal/http/router.js.map +1 -1
- package/dist/esm/internal/http/server.js +18 -1
- package/dist/esm/internal/http/server.js.map +1 -1
- package/dist/esm/internal/http/serverRequest.js +1 -1
- package/dist/esm/internal/http/serverRequest.js.map +1 -1
- package/dist/esm/internal/http/serverResponse.js.map +1 -1
- package/dist/esm/internal/keyValueStore.js +2 -2
- package/dist/esm/internal/keyValueStore.js.map +1 -1
- package/dist/esm/internal/path.js +3 -3
- package/dist/esm/internal/path.js.map +1 -1
- package/dist/esm/internal/terminal.js +2 -2
- package/dist/esm/internal/terminal.js.map +1 -1
- package/dist/esm/internal/worker.js +14 -11
- package/dist/esm/internal/worker.js.map +1 -1
- package/dist/esm/internal/workerError.js.map +1 -1
- package/dist/esm/internal/workerRunner.js +15 -12
- package/dist/esm/internal/workerRunner.js.map +1 -1
- package/package.json +11 -3
- package/src/Command.ts +9 -9
- package/src/CommandExecutor.ts +13 -13
- package/src/Effectify.ts +55 -55
- package/src/Error.ts +2 -3
- package/src/FileSystem.ts +35 -35
- package/src/Http/App.ts +5 -5
- package/src/Http/Body.ts +12 -13
- package/src/Http/Client.ts +37 -37
- package/src/Http/ClientError.ts +2 -3
- package/src/Http/ClientRequest.ts +17 -17
- package/src/Http/ClientResponse.ts +8 -5
- package/src/Http/Etag.ts +2 -2
- package/src/Http/IncomingMessage.ts +27 -23
- package/src/Http/Middleware.ts +4 -4
- package/src/Http/Multipart.ts +22 -25
- package/src/Http/Multiplex.ts +4 -4
- package/src/Http/Platform.ts +3 -3
- package/src/Http/Router.ts +16 -16
- package/src/Http/Server.ts +53 -18
- package/src/Http/ServerError.ts +2 -3
- package/src/Http/ServerRequest.ts +22 -22
- package/src/Http/ServerResponse.ts +9 -10
- package/src/Http/UrlParams.ts +6 -6
- package/src/HttpServer.ts +24 -0
- package/src/KeyValueStore.ts +23 -23
- package/src/Path.ts +3 -3
- package/src/Runtime.ts +1 -1
- package/src/Terminal.ts +4 -4
- package/src/Transferable.ts +88 -70
- package/src/Worker.ts +73 -57
- package/src/WorkerError.ts +3 -4
- package/src/WorkerRunner.ts +21 -21
- package/src/index.ts +74 -0
- package/src/internal/command.ts +7 -7
- package/src/internal/commandExecutor.ts +3 -3
- package/src/internal/effectify.ts +1 -1
- package/src/internal/fileSystem.ts +3 -3
- package/src/internal/http/body.ts +12 -12
- package/src/internal/http/client.ts +42 -46
- package/src/internal/http/clientRequest.ts +15 -15
- package/src/internal/http/clientResponse.ts +18 -18
- package/src/internal/http/etag.ts +1 -1
- package/src/internal/http/middleware.ts +4 -4
- package/src/internal/http/multipart.ts +32 -39
- package/src/internal/http/multiplex.ts +5 -5
- package/src/internal/http/platform.ts +2 -2
- package/src/internal/http/router.ts +14 -14
- package/src/internal/http/server.ts +60 -23
- package/src/internal/http/serverRequest.ts +24 -24
- package/src/internal/http/serverResponse.ts +11 -11
- package/src/internal/keyValueStore.ts +7 -7
- package/src/internal/path.ts +4 -4
- package/src/internal/terminal.ts +2 -2
- package/src/internal/worker.ts +55 -39
- package/src/internal/workerError.ts +1 -1
- package/src/internal/workerRunner.ts +55 -30
|
@@ -49,8 +49,8 @@ export const maxParts: FiberRef.FiberRef<Option.Option<number>> = globalValue(
|
|
|
49
49
|
|
|
50
50
|
/** @internal */
|
|
51
51
|
export const withMaxParts = dual<
|
|
52
|
-
(count: Option.Option<number>) => <R, E, A>(effect: Effect.Effect<
|
|
53
|
-
<R, E, A>(effect: Effect.Effect<
|
|
52
|
+
(count: Option.Option<number>) => <R, E, A>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
|
|
53
|
+
<R, E, A>(effect: Effect.Effect<A, E, R>, count: Option.Option<number>) => Effect.Effect<A, E, R>
|
|
54
54
|
>(2, (effect, count) => Effect.locally(effect, maxParts, count))
|
|
55
55
|
|
|
56
56
|
/** @internal */
|
|
@@ -61,8 +61,8 @@ export const maxFieldSize: FiberRef.FiberRef<FileSystem.Size> = globalValue(
|
|
|
61
61
|
|
|
62
62
|
/** @internal */
|
|
63
63
|
export const withMaxFieldSize = dual<
|
|
64
|
-
(size: FileSystem.SizeInput) => <R, E, A>(effect: Effect.Effect<
|
|
65
|
-
<R, E, A>(effect: Effect.Effect<
|
|
64
|
+
(size: FileSystem.SizeInput) => <R, E, A>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
|
|
65
|
+
<R, E, A>(effect: Effect.Effect<A, E, R>, size: FileSystem.SizeInput) => Effect.Effect<A, E, R>
|
|
66
66
|
>(2, (effect, size) => Effect.locally(effect, maxFieldSize, FileSystem.Size(size)))
|
|
67
67
|
|
|
68
68
|
/** @internal */
|
|
@@ -73,8 +73,8 @@ export const maxFileSize: FiberRef.FiberRef<Option.Option<FileSystem.Size>> = gl
|
|
|
73
73
|
|
|
74
74
|
/** @internal */
|
|
75
75
|
export const withMaxFileSize = dual<
|
|
76
|
-
(size: Option.Option<FileSystem.SizeInput>) => <R, E, A>(effect: Effect.Effect<
|
|
77
|
-
<R, E, A>(effect: Effect.Effect<
|
|
76
|
+
(size: Option.Option<FileSystem.SizeInput>) => <R, E, A>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
|
|
77
|
+
<R, E, A>(effect: Effect.Effect<A, E, R>, size: Option.Option<FileSystem.SizeInput>) => Effect.Effect<A, E, R>
|
|
78
78
|
>(2, (effect, size) => Effect.locally(effect, maxFileSize, Option.map(size, FileSystem.Size)))
|
|
79
79
|
|
|
80
80
|
/** @internal */
|
|
@@ -85,11 +85,11 @@ export const fieldMimeTypes: FiberRef.FiberRef<Chunk.Chunk<string>> = globalValu
|
|
|
85
85
|
|
|
86
86
|
/** @internal */
|
|
87
87
|
export const withFieldMimeTypes = dual<
|
|
88
|
-
(mimeTypes: ReadonlyArray<string>) => <R, E, A>(effect: Effect.Effect<
|
|
89
|
-
<R, E, A>(effect: Effect.Effect<
|
|
88
|
+
(mimeTypes: ReadonlyArray<string>) => <R, E, A>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
|
|
89
|
+
<R, E, A>(effect: Effect.Effect<A, E, R>, mimeTypes: ReadonlyArray<string>) => Effect.Effect<A, E, R>
|
|
90
90
|
>(2, (effect, mimeTypes) => Effect.locally(effect, fieldMimeTypes, Chunk.fromIterable(mimeTypes)))
|
|
91
91
|
|
|
92
|
-
const fileSchema: Schema.Schema<
|
|
92
|
+
const fileSchema: Schema.Schema<Multipart.PersistedFile> = Schema.struct({
|
|
93
93
|
[TypeId]: Schema.uniqueSymbol(TypeId),
|
|
94
94
|
_tag: Schema.literal("PersistedFile"),
|
|
95
95
|
key: Schema.string,
|
|
@@ -99,29 +99,25 @@ const fileSchema: Schema.Schema<never, Multipart.PersistedFile, Multipart.Persis
|
|
|
99
99
|
})
|
|
100
100
|
|
|
101
101
|
/** @internal */
|
|
102
|
-
export const filesSchema: Schema.Schema<
|
|
103
|
-
never,
|
|
104
|
-
ReadonlyArray<Multipart.PersistedFile>,
|
|
105
|
-
ReadonlyArray<Multipart.PersistedFile>
|
|
106
|
-
> = Schema.array(fileSchema)
|
|
102
|
+
export const filesSchema: Schema.Schema<ReadonlyArray<Multipart.PersistedFile>> = Schema.array(fileSchema)
|
|
107
103
|
|
|
108
104
|
/** @internal */
|
|
109
105
|
export const schemaPersisted = <R, I extends Multipart.Persisted, A>(
|
|
110
|
-
schema: Schema.Schema<
|
|
106
|
+
schema: Schema.Schema<A, I, R>
|
|
111
107
|
) => {
|
|
112
108
|
const parse = Schema.decodeUnknown(schema)
|
|
113
109
|
return (persisted: Multipart.Persisted) => parse(persisted)
|
|
114
110
|
}
|
|
115
111
|
|
|
116
112
|
/** @internal */
|
|
117
|
-
export const schemaJson = <
|
|
113
|
+
export const schemaJson = <A, I, R>(schema: Schema.Schema<A, I, R>): {
|
|
118
114
|
(
|
|
119
115
|
field: string
|
|
120
|
-
): (persisted: Multipart.Persisted) => Effect.Effect<
|
|
116
|
+
): (persisted: Multipart.Persisted) => Effect.Effect<A, ParseResult.ParseError, R>
|
|
121
117
|
(
|
|
122
118
|
persisted: Multipart.Persisted,
|
|
123
119
|
field: string
|
|
124
|
-
): Effect.Effect<
|
|
120
|
+
): Effect.Effect<A, ParseResult.ParseError, R>
|
|
125
121
|
} => {
|
|
126
122
|
const fromJson = Schema.parseJson(schema)
|
|
127
123
|
return dual<
|
|
@@ -129,11 +125,11 @@ export const schemaJson = <R, I, A>(schema: Schema.Schema<R, I, A>): {
|
|
|
129
125
|
field: string
|
|
130
126
|
) => (
|
|
131
127
|
persisted: Multipart.Persisted
|
|
132
|
-
) => Effect.Effect<
|
|
128
|
+
) => Effect.Effect<A, ParseResult.ParseError, R>,
|
|
133
129
|
(
|
|
134
130
|
persisted: Multipart.Persisted,
|
|
135
131
|
field: string
|
|
136
|
-
) => Effect.Effect<
|
|
132
|
+
) => Effect.Effect<A, ParseResult.ParseError, R>
|
|
137
133
|
>(2, (persisted, field) =>
|
|
138
134
|
Effect.map(
|
|
139
135
|
Schema.decodeUnknown(
|
|
@@ -148,7 +144,7 @@ export const schemaJson = <R, I, A>(schema: Schema.Schema<R, I, A>): {
|
|
|
148
144
|
/** @internal */
|
|
149
145
|
export const makeConfig = (
|
|
150
146
|
headers: Record<string, string>
|
|
151
|
-
): Effect.Effect<
|
|
147
|
+
): Effect.Effect<MP.BaseConfig> =>
|
|
152
148
|
Effect.map(
|
|
153
149
|
Effect.all({
|
|
154
150
|
maxParts: Effect.map(FiberRef.get(maxParts), Option.getOrUndefined),
|
|
@@ -177,12 +173,11 @@ export const makeChannel = <IE>(
|
|
|
177
173
|
headers: Record<string, string>,
|
|
178
174
|
bufferSize = 16
|
|
179
175
|
): Channel.Channel<
|
|
180
|
-
|
|
181
|
-
IE,
|
|
176
|
+
Chunk.Chunk<Multipart.Part>,
|
|
182
177
|
Chunk.Chunk<Uint8Array>,
|
|
183
|
-
unknown,
|
|
184
178
|
Multipart.MultipartError | IE,
|
|
185
|
-
|
|
179
|
+
IE,
|
|
180
|
+
unknown,
|
|
186
181
|
unknown
|
|
187
182
|
> =>
|
|
188
183
|
Channel.acquireUseRelease(
|
|
@@ -198,12 +193,11 @@ const makeFromQueue = <IE>(
|
|
|
198
193
|
config: MP.BaseConfig,
|
|
199
194
|
queue: Queue.Queue<Chunk.Chunk<Uint8Array> | null>
|
|
200
195
|
): Channel.Channel<
|
|
201
|
-
|
|
202
|
-
IE,
|
|
196
|
+
Chunk.Chunk<Multipart.Part>,
|
|
203
197
|
Chunk.Chunk<Uint8Array>,
|
|
204
|
-
unknown,
|
|
205
198
|
IE | Multipart.MultipartError,
|
|
206
|
-
|
|
199
|
+
IE,
|
|
200
|
+
unknown,
|
|
207
201
|
unknown
|
|
208
202
|
> =>
|
|
209
203
|
Channel.suspend(() => {
|
|
@@ -233,7 +227,7 @@ const makeFromQueue = <IE>(
|
|
|
233
227
|
onFile(info) {
|
|
234
228
|
let chunks: Array<Uint8Array> = []
|
|
235
229
|
let finished = false
|
|
236
|
-
const take: Channel.Channel<
|
|
230
|
+
const take: Channel.Channel<Chunk.Chunk<Uint8Array>, unknown, never, unknown, void, unknown> = Channel
|
|
237
231
|
.suspend(() => {
|
|
238
232
|
if (chunks.length === 0) {
|
|
239
233
|
return finished ? Channel.unit : Channel.zipRight(pump, take)
|
|
@@ -289,13 +283,12 @@ const makeFromQueue = <IE>(
|
|
|
289
283
|
)
|
|
290
284
|
|
|
291
285
|
const partsChannel: Channel.Channel<
|
|
292
|
-
|
|
293
|
-
unknown,
|
|
294
|
-
unknown,
|
|
286
|
+
Chunk.Chunk<Multipart.Part>,
|
|
295
287
|
unknown,
|
|
296
288
|
IE | Multipart.MultipartError,
|
|
297
|
-
|
|
298
|
-
void
|
|
289
|
+
unknown,
|
|
290
|
+
void,
|
|
291
|
+
unknown
|
|
299
292
|
> = Channel.suspend(() => {
|
|
300
293
|
if (error._tag === "Some") {
|
|
301
294
|
return Channel.failCause(error.value)
|
|
@@ -351,11 +344,11 @@ class FileImpl implements Multipart.File {
|
|
|
351
344
|
readonly key: string
|
|
352
345
|
readonly name: string
|
|
353
346
|
readonly contentType: string
|
|
354
|
-
readonly content: Stream.Stream<
|
|
347
|
+
readonly content: Stream.Stream<Uint8Array, Multipart.MultipartError>
|
|
355
348
|
|
|
356
349
|
constructor(
|
|
357
350
|
info: MP.PartInfo,
|
|
358
|
-
channel: Channel.Channel<
|
|
351
|
+
channel: Channel.Channel<Chunk.Chunk<Uint8Array>, unknown, never, unknown, void, unknown>
|
|
359
352
|
) {
|
|
360
353
|
this[TypeId] = TypeId
|
|
361
354
|
this.key = info.name
|
|
@@ -377,9 +370,9 @@ const defaultWriteFile = (path: string, file: Multipart.File) =>
|
|
|
377
370
|
|
|
378
371
|
/** @internal */
|
|
379
372
|
export const toPersisted = (
|
|
380
|
-
stream: Stream.Stream<
|
|
373
|
+
stream: Stream.Stream<Multipart.Part, Multipart.MultipartError>,
|
|
381
374
|
writeFile = defaultWriteFile
|
|
382
|
-
): Effect.Effect<FileSystem.FileSystem | Path.Path | Scope.Scope
|
|
375
|
+
): Effect.Effect<Multipart.Persisted, Multipart.MultipartError, FileSystem.FileSystem | Path.Path | Scope.Scope> =>
|
|
383
376
|
pipe(
|
|
384
377
|
Effect.Do,
|
|
385
378
|
Effect.bind("fs", () => FileSystem.FileSystem),
|
|
@@ -12,7 +12,7 @@ import type * as ServerResponse from "../../Http/ServerResponse.js"
|
|
|
12
12
|
export const TypeId: Multiplex.TypeId = Symbol.for("@effect/platform/Http/Multiplex") as Multiplex.TypeId
|
|
13
13
|
|
|
14
14
|
class MultiplexImpl<R, E>
|
|
15
|
-
extends Effectable.Class<
|
|
15
|
+
extends Effectable.Class<ServerResponse.ServerResponse, E | Error.RouteNotFound, R | ServerRequest.ServerRequest>
|
|
16
16
|
implements Multiplex.Multiplex<R, E>
|
|
17
17
|
{
|
|
18
18
|
readonly [TypeId]: Multiplex.TypeId
|
|
@@ -20,7 +20,7 @@ class MultiplexImpl<R, E>
|
|
|
20
20
|
constructor(
|
|
21
21
|
readonly apps: ReadonlyArray<
|
|
22
22
|
readonly [
|
|
23
|
-
predicate: (request: ServerRequest.ServerRequest) => Effect.Effect<
|
|
23
|
+
predicate: (request: ServerRequest.ServerRequest) => Effect.Effect<boolean, E, R>,
|
|
24
24
|
app: App.Default<R, E>
|
|
25
25
|
]
|
|
26
26
|
>
|
|
@@ -57,19 +57,19 @@ export const empty: Multiplex.Multiplex<never, never> = new MultiplexImpl([])
|
|
|
57
57
|
/** @internal */
|
|
58
58
|
export const make = <R, E>(
|
|
59
59
|
apps: Iterable<
|
|
60
|
-
readonly [predicate: (request: ServerRequest.ServerRequest) => Effect.Effect<
|
|
60
|
+
readonly [predicate: (request: ServerRequest.ServerRequest) => Effect.Effect<boolean, E, R>, app: App.Default<R, E>]
|
|
61
61
|
>
|
|
62
62
|
): Multiplex.Multiplex<R, E> => new MultiplexImpl(ReadonlyArray.fromIterable(apps))
|
|
63
63
|
|
|
64
64
|
/** @internal */
|
|
65
65
|
export const add = dual<
|
|
66
66
|
<R2, E2, R3, E3>(
|
|
67
|
-
predicate: (request: ServerRequest.ServerRequest) => Effect.Effect<
|
|
67
|
+
predicate: (request: ServerRequest.ServerRequest) => Effect.Effect<boolean, E2, R2>,
|
|
68
68
|
app: App.Default<R3, E3>
|
|
69
69
|
) => <R, E>(self: Multiplex.Multiplex<R, E>) => Multiplex.Multiplex<R | R2 | R3, E | E2 | E3>,
|
|
70
70
|
<R, E, R2, E2, R3, E3>(
|
|
71
71
|
self: Multiplex.Multiplex<R, E>,
|
|
72
|
-
predicate: (request: ServerRequest.ServerRequest) => Effect.Effect<
|
|
72
|
+
predicate: (request: ServerRequest.ServerRequest) => Effect.Effect<boolean, E2, R2>,
|
|
73
73
|
app: App.Default<R3, E3>
|
|
74
74
|
) => Multiplex.Multiplex<R | R2 | R3, E | E2 | E3>
|
|
75
75
|
>(
|
|
@@ -12,7 +12,7 @@ import type * as ServerResponse from "../../Http/ServerResponse.js"
|
|
|
12
12
|
export const TypeId: Platform.TypeId = Symbol.for("@effect/platform/Http/Platform") as Platform.TypeId
|
|
13
13
|
|
|
14
14
|
/** @internal */
|
|
15
|
-
export const tag = Context.
|
|
15
|
+
export const tag = Context.GenericTag<Platform.Platform>("@effect/platform/Http/Platform")
|
|
16
16
|
|
|
17
17
|
/** @internal */
|
|
18
18
|
export const make = (impl: {
|
|
@@ -32,7 +32,7 @@ export const make = (impl: {
|
|
|
32
32
|
headers: Headers.Headers,
|
|
33
33
|
options?: FileSystem.StreamOptions
|
|
34
34
|
) => ServerResponse.ServerResponse
|
|
35
|
-
}): Effect.Effect<FileSystem.FileSystem | Etag.Generator
|
|
35
|
+
}): Effect.Effect<Platform.Platform, never, FileSystem.FileSystem | Etag.Generator> =>
|
|
36
36
|
Effect.gen(function*(_) {
|
|
37
37
|
const fs = yield* _(FileSystem.FileSystem)
|
|
38
38
|
const etagGen = yield* _(Etag.Generator)
|
|
@@ -27,7 +27,7 @@ export const RouteContextTypeId: Router.RouteContextTypeId = Symbol.for(
|
|
|
27
27
|
) as Router.RouteContextTypeId
|
|
28
28
|
|
|
29
29
|
/** @internal */
|
|
30
|
-
export const RouteContext = Context.
|
|
30
|
+
export const RouteContext = Context.GenericTag<Router.RouteContext>("@effect/platform/Http/Router/RouteContext")
|
|
31
31
|
|
|
32
32
|
/** @internal */
|
|
33
33
|
export const params = Effect.map(RouteContext, (_) => _.params)
|
|
@@ -36,29 +36,29 @@ export const params = Effect.map(RouteContext, (_) => _.params)
|
|
|
36
36
|
export const searchParams = Effect.map(RouteContext, (_) => _.searchParams)
|
|
37
37
|
|
|
38
38
|
/** @internal */
|
|
39
|
-
export const schemaParams = <R, I extends Readonly<Record<string, string>>, A>(schema: Schema.Schema<
|
|
39
|
+
export const schemaParams = <R, I extends Readonly<Record<string, string>>, A>(schema: Schema.Schema<A, I, R>) => {
|
|
40
40
|
const parse = Schema.decodeUnknown(schema)
|
|
41
41
|
return Effect.flatMap(RouteContext, (_) => parse({ ..._.searchParams, ..._.params }))
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
/** @internal */
|
|
45
|
-
export const schemaPathParams = <R, I extends Readonly<Record<string, string>>, A>(schema: Schema.Schema<
|
|
45
|
+
export const schemaPathParams = <R, I extends Readonly<Record<string, string>>, A>(schema: Schema.Schema<A, I, R>) => {
|
|
46
46
|
const parse = Schema.decodeUnknown(schema)
|
|
47
47
|
return Effect.flatMap(RouteContext, (_) => parse(_.params))
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
/** @internal */
|
|
51
51
|
export const schemaSearchParams = <R, I extends Readonly<Record<string, string>>, A>(
|
|
52
|
-
schema: Schema.Schema<
|
|
52
|
+
schema: Schema.Schema<A, I, R>
|
|
53
53
|
) => {
|
|
54
54
|
const parse = Schema.decodeUnknown(schema)
|
|
55
55
|
return Effect.flatMap(RouteContext, (_) => parse(_.searchParams))
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
class RouterImpl<R, E> extends Effectable.StructuralClass<
|
|
59
|
-
|
|
59
|
+
ServerResponse.ServerResponse,
|
|
60
60
|
E | Error.RouteNotFound,
|
|
61
|
-
|
|
61
|
+
Exclude<R, Router.RouteContext>
|
|
62
62
|
> implements Router.Router<R, E> {
|
|
63
63
|
readonly [TypeId]: Router.TypeId
|
|
64
64
|
constructor(
|
|
@@ -70,9 +70,9 @@ class RouterImpl<R, E> extends Effectable.StructuralClass<
|
|
|
70
70
|
this.httpApp = toHttpApp(this) as any
|
|
71
71
|
}
|
|
72
72
|
private httpApp: Effect.Effect<
|
|
73
|
-
|
|
73
|
+
ServerResponse.ServerResponse,
|
|
74
74
|
E | Error.RouteNotFound,
|
|
75
|
-
|
|
75
|
+
Exclude<R, Router.RouteContext>
|
|
76
76
|
>
|
|
77
77
|
commit() {
|
|
78
78
|
return this.httpApp
|
|
@@ -134,7 +134,7 @@ const toHttpApp = <R, E>(
|
|
|
134
134
|
request = sliceRequestUrl(request, route.prefix.value)
|
|
135
135
|
}
|
|
136
136
|
return Effect.mapInputContext(
|
|
137
|
-
route.handler as Effect.Effect<Router.Router.ExcludeProvided<R
|
|
137
|
+
route.handler as Effect.Effect<ServerResponse.ServerResponse, E, Router.Router.ExcludeProvided<R>>,
|
|
138
138
|
(context) =>
|
|
139
139
|
Context.add(
|
|
140
140
|
Context.add(context, ServerRequest.ServerRequest, request),
|
|
@@ -387,7 +387,7 @@ export const catchTags: {
|
|
|
387
387
|
Router.Router.ExcludeProvided<
|
|
388
388
|
| R
|
|
389
389
|
| {
|
|
390
|
-
[K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<
|
|
390
|
+
[K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, any, infer R>) ? R : never
|
|
391
391
|
}[keyof Cases]
|
|
392
392
|
>,
|
|
393
393
|
| Exclude<E, { _tag: keyof Cases }>
|
|
@@ -409,7 +409,7 @@ export const catchTags: {
|
|
|
409
409
|
Router.Router.ExcludeProvided<
|
|
410
410
|
| R
|
|
411
411
|
| {
|
|
412
|
-
[K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<
|
|
412
|
+
[K in keyof Cases]: Cases[K] extends ((...args: Array<any>) => Effect.Effect<any, any, infer R>) ? R : never
|
|
413
413
|
}[keyof Cases]
|
|
414
414
|
>,
|
|
415
415
|
| Exclude<E, { _tag: keyof Cases }>
|
|
@@ -442,7 +442,7 @@ export const provideService = dual<
|
|
|
442
442
|
export const provideServiceEffect = dual<
|
|
443
443
|
<T extends Context.Tag<any, any>, R1, E1>(
|
|
444
444
|
tag: T,
|
|
445
|
-
effect: Effect.Effect<
|
|
445
|
+
effect: Effect.Effect<Context.Tag.Service<T>, E1, R1>
|
|
446
446
|
) => <R, E>(
|
|
447
447
|
self: Router.Router<R, E>
|
|
448
448
|
) => Router.Router<
|
|
@@ -452,7 +452,7 @@ export const provideServiceEffect = dual<
|
|
|
452
452
|
<R, E, T extends Context.Tag<any, any>, R1, E1>(
|
|
453
453
|
self: Router.Router<R, E>,
|
|
454
454
|
tag: T,
|
|
455
|
-
effect: Effect.Effect<
|
|
455
|
+
effect: Effect.Effect<Context.Tag.Service<T>, E1, R1>
|
|
456
456
|
) => Router.Router<
|
|
457
457
|
Router.Router.ExcludeProvided<R1 | Exclude<R, Context.Tag.Identifier<T>>>,
|
|
458
458
|
E | E1
|
|
@@ -460,5 +460,5 @@ export const provideServiceEffect = dual<
|
|
|
460
460
|
>(3, <R, E, T extends Context.Tag<any, any>, R1, E1>(
|
|
461
461
|
self: Router.Router<R, E>,
|
|
462
462
|
tag: T,
|
|
463
|
-
effect: Effect.Effect<
|
|
463
|
+
effect: Effect.Effect<Context.Tag.Service<T>, E1, R1>
|
|
464
464
|
) => use(self, Effect.provideServiceEffect(tag, effect)))
|
|
@@ -12,7 +12,7 @@ import type * as ServerRequest from "../../Http/ServerRequest.js"
|
|
|
12
12
|
export const TypeId: Server.TypeId = Symbol.for("@effect/platform/Http/Server") as Server.TypeId
|
|
13
13
|
|
|
14
14
|
/** @internal */
|
|
15
|
-
export const serverTag = Context.
|
|
15
|
+
export const serverTag = Context.GenericTag<Server.Server>("@effect/platform/Http/Server")
|
|
16
16
|
|
|
17
17
|
const serverProto = {
|
|
18
18
|
[TypeId]: TypeId
|
|
@@ -27,7 +27,7 @@ export const make = (
|
|
|
27
27
|
readonly serve: (
|
|
28
28
|
httpApp: App.Default<never, unknown>,
|
|
29
29
|
middleware?: Middleware.Middleware
|
|
30
|
-
) => Effect.Effect<
|
|
30
|
+
) => Effect.Effect<void, never, Scope.Scope>
|
|
31
31
|
readonly address: Server.Address
|
|
32
32
|
}
|
|
33
33
|
): Server.Server => Object.assign(Object.create(serverProto), options)
|
|
@@ -37,30 +37,26 @@ export const serve = dual<
|
|
|
37
37
|
{
|
|
38
38
|
(): <R, E>(
|
|
39
39
|
httpApp: App.Default<R, E>
|
|
40
|
-
) => Layer.Layer<
|
|
41
|
-
Server.Server | Exclude<R, ServerRequest.ServerRequest | Scope.Scope>,
|
|
42
|
-
never,
|
|
43
|
-
never
|
|
44
|
-
>
|
|
40
|
+
) => Layer.Layer<never, never, Server.Server | Exclude<R, ServerRequest.ServerRequest | Scope.Scope>>
|
|
45
41
|
<R, E, App extends App.Default<any, any>>(middleware: Middleware.Middleware.Applied<R, E, App>): (
|
|
46
42
|
httpApp: App.Default<R, E>
|
|
47
43
|
) => Layer.Layer<
|
|
48
|
-
Server.Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest | Scope.Scope>,
|
|
49
44
|
never,
|
|
50
|
-
never
|
|
45
|
+
never,
|
|
46
|
+
Server.Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest | Scope.Scope>
|
|
51
47
|
>
|
|
52
48
|
},
|
|
53
49
|
{
|
|
54
50
|
<R, E>(
|
|
55
51
|
httpApp: App.Default<R, E>
|
|
56
|
-
): Layer.Layer<Server.Server | Exclude<R, ServerRequest.ServerRequest | Scope.Scope
|
|
52
|
+
): Layer.Layer<never, never, Server.Server | Exclude<R, ServerRequest.ServerRequest | Scope.Scope>>
|
|
57
53
|
<R, E, App extends App.Default<any, any>>(
|
|
58
54
|
httpApp: App.Default<R, E>,
|
|
59
55
|
middleware: Middleware.Middleware.Applied<R, E, App>
|
|
60
56
|
): Layer.Layer<
|
|
61
|
-
Server.Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest | Scope.Scope>,
|
|
62
57
|
never,
|
|
63
|
-
never
|
|
58
|
+
never,
|
|
59
|
+
Server.Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest | Scope.Scope>
|
|
64
60
|
>
|
|
65
61
|
}
|
|
66
62
|
>(
|
|
@@ -69,9 +65,9 @@ export const serve = dual<
|
|
|
69
65
|
httpApp: App.Default<R, E>,
|
|
70
66
|
middleware?: Middleware.Middleware.Applied<R, E, App>
|
|
71
67
|
): Layer.Layer<
|
|
72
|
-
Server.Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest | Scope.Scope>,
|
|
73
68
|
never,
|
|
74
|
-
never
|
|
69
|
+
never,
|
|
70
|
+
Server.Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest | Scope.Scope>
|
|
75
71
|
> =>
|
|
76
72
|
Layer.scopedDiscard(
|
|
77
73
|
Effect.flatMap(
|
|
@@ -87,29 +83,29 @@ export const serveEffect = dual<
|
|
|
87
83
|
(): <R, E>(
|
|
88
84
|
httpApp: App.Default<R, E>
|
|
89
85
|
) => Effect.Effect<
|
|
90
|
-
|
|
86
|
+
void,
|
|
91
87
|
never,
|
|
92
|
-
|
|
88
|
+
Server.Server | Scope.Scope | Exclude<R, ServerRequest.ServerRequest>
|
|
93
89
|
>
|
|
94
90
|
<R, E, App extends App.Default<any, any>>(middleware: Middleware.Middleware.Applied<R, E, App>): (
|
|
95
91
|
httpApp: App.Default<R, E>
|
|
96
92
|
) => Effect.Effect<
|
|
97
|
-
|
|
93
|
+
void,
|
|
98
94
|
never,
|
|
99
|
-
|
|
95
|
+
Server.Server | Scope.Scope | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest>
|
|
100
96
|
>
|
|
101
97
|
},
|
|
102
98
|
{
|
|
103
99
|
<R, E>(
|
|
104
100
|
httpApp: App.Default<R, E>
|
|
105
|
-
): Effect.Effect<Server.Server | Scope.Scope | Exclude<R, ServerRequest.ServerRequest
|
|
101
|
+
): Effect.Effect<void, never, Server.Server | Scope.Scope | Exclude<R, ServerRequest.ServerRequest>>
|
|
106
102
|
<R, E, App extends App.Default<any, any>>(
|
|
107
103
|
httpApp: App.Default<R, E>,
|
|
108
104
|
middleware: Middleware.Middleware.Applied<R, E, App>
|
|
109
105
|
): Effect.Effect<
|
|
110
|
-
|
|
106
|
+
void,
|
|
111
107
|
never,
|
|
112
|
-
|
|
108
|
+
Server.Server | Exclude<Effect.Effect.Context<App>, ServerRequest.ServerRequest> | Scope.Scope
|
|
113
109
|
>
|
|
114
110
|
}
|
|
115
111
|
>(
|
|
@@ -118,12 +114,53 @@ export const serveEffect = dual<
|
|
|
118
114
|
httpApp: App.Default<R, E>,
|
|
119
115
|
middleware: Middleware.Middleware.Applied<R, E, App>
|
|
120
116
|
): Effect.Effect<
|
|
121
|
-
|
|
117
|
+
void,
|
|
122
118
|
never,
|
|
123
|
-
|
|
119
|
+
Server.Server | Exclude<R, ServerRequest.ServerRequest> | Scope.Scope
|
|
124
120
|
> =>
|
|
125
121
|
Effect.flatMap(
|
|
126
122
|
serverTag,
|
|
127
123
|
(server) => server.serve(httpApp, middleware)
|
|
128
124
|
)) as any
|
|
129
125
|
)
|
|
126
|
+
|
|
127
|
+
/** @internal */
|
|
128
|
+
export const formatAddress = (address: Server.Address): string => {
|
|
129
|
+
switch (address._tag) {
|
|
130
|
+
case "UnixAddress":
|
|
131
|
+
return `unix://${address.path}`
|
|
132
|
+
case "TcpAddress":
|
|
133
|
+
return `http://${address.hostname}:${address.port}`
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/** @internal */
|
|
138
|
+
export const addressWith = <R, E, A>(
|
|
139
|
+
effect: (address: Server.Address) => Effect.Effect<A, E, R>
|
|
140
|
+
): Effect.Effect<A, E, Server.Server | R> =>
|
|
141
|
+
Effect.flatMap(
|
|
142
|
+
serverTag,
|
|
143
|
+
(server) => effect(server.address)
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
/** @internal */
|
|
147
|
+
export const addressFormattedWith = <R, E, A>(
|
|
148
|
+
effect: (address: string) => Effect.Effect<A, E, R>
|
|
149
|
+
): Effect.Effect<A, E, Server.Server | R> =>
|
|
150
|
+
Effect.flatMap(
|
|
151
|
+
serverTag,
|
|
152
|
+
(server) => effect(formatAddress(server.address))
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
/** @internal */
|
|
156
|
+
export const logAddress: Effect.Effect<void, never, Server.Server> = addressFormattedWith((_) =>
|
|
157
|
+
Effect.log(`Listening on ${_}`)
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
/** @internal */
|
|
161
|
+
export const withLogAddress = <R, E, A>(
|
|
162
|
+
layer: Layer.Layer<A, E, R>
|
|
163
|
+
): Layer.Layer<A, E, R | Exclude<Server.Server, A>> =>
|
|
164
|
+
Layer.effectDiscard(logAddress).pipe(
|
|
165
|
+
Layer.provideMerge(layer)
|
|
166
|
+
)
|
|
@@ -19,19 +19,19 @@ import type * as Path from "../../Path.js"
|
|
|
19
19
|
export const TypeId: ServerRequest.TypeId = Symbol.for("@effect/platform/Http/ServerRequest") as ServerRequest.TypeId
|
|
20
20
|
|
|
21
21
|
/** @internal */
|
|
22
|
-
export const serverRequestTag = Context.
|
|
22
|
+
export const serverRequestTag = Context.GenericTag<ServerRequest.ServerRequest>("@effect/platform/Http/ServerRequest")
|
|
23
23
|
|
|
24
24
|
/** @internal */
|
|
25
25
|
export const multipartPersisted = Effect.flatMap(serverRequestTag, (request) => request.multipart)
|
|
26
26
|
|
|
27
27
|
/** @internal */
|
|
28
|
-
export const schemaHeaders = <R, I extends Readonly<Record<string, string>>, A>(schema: Schema.Schema<
|
|
28
|
+
export const schemaHeaders = <R, I extends Readonly<Record<string, string>>, A>(schema: Schema.Schema<A, I, R>) => {
|
|
29
29
|
const parse = IncomingMessage.schemaHeaders(schema)
|
|
30
30
|
return Effect.flatMap(serverRequestTag, parse)
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
/** @internal */
|
|
34
|
-
export const schemaBodyJson = <
|
|
34
|
+
export const schemaBodyJson = <A, I, R>(schema: Schema.Schema<A, I, R>) => {
|
|
35
35
|
const parse = IncomingMessage.schemaBodyJson(schema)
|
|
36
36
|
return Effect.flatMap(serverRequestTag, parse)
|
|
37
37
|
}
|
|
@@ -41,14 +41,14 @@ const isMultipart = (request: ServerRequest.ServerRequest) =>
|
|
|
41
41
|
|
|
42
42
|
/** @internal */
|
|
43
43
|
export const schemaBodyForm = <R, I extends Multipart.Persisted, A>(
|
|
44
|
-
schema: Schema.Schema<
|
|
44
|
+
schema: Schema.Schema<A, I, R>
|
|
45
45
|
) => {
|
|
46
46
|
const parseMultipart = Multipart.schemaPersisted(schema)
|
|
47
|
-
const parseUrlParams = IncomingMessage.schemaBodyUrlParams(schema as Schema.Schema<
|
|
47
|
+
const parseUrlParams = IncomingMessage.schemaBodyUrlParams(schema as Schema.Schema<A, any, R>)
|
|
48
48
|
return Effect.flatMap(serverRequestTag, (request): Effect.Effect<
|
|
49
|
-
|
|
49
|
+
A,
|
|
50
50
|
Multipart.MultipartError | ParseResult.ParseError | Error.RequestError,
|
|
51
|
-
|
|
51
|
+
R | ServerRequest.ServerRequest | Scope.Scope | FileSystem.FileSystem | Path.Path
|
|
52
52
|
> => {
|
|
53
53
|
if (isMultipart(request)) {
|
|
54
54
|
return Effect.flatMap(request.multipart, parseMultipart)
|
|
@@ -59,7 +59,7 @@ export const schemaBodyForm = <R, I extends Multipart.Persisted, A>(
|
|
|
59
59
|
|
|
60
60
|
/** @internal */
|
|
61
61
|
export const schemaBodyUrlParams = <R, I extends Readonly<Record<string, string>>, A>(
|
|
62
|
-
schema: Schema.Schema<
|
|
62
|
+
schema: Schema.Schema<A, I, R>
|
|
63
63
|
) => {
|
|
64
64
|
const parse = IncomingMessage.schemaBodyUrlParams(schema)
|
|
65
65
|
return Effect.flatMap(serverRequestTag, parse)
|
|
@@ -67,14 +67,14 @@ export const schemaBodyUrlParams = <R, I extends Readonly<Record<string, string>
|
|
|
67
67
|
|
|
68
68
|
/** @internal */
|
|
69
69
|
export const schemaBodyMultipart = <R, I extends Multipart.Persisted, A>(
|
|
70
|
-
schema: Schema.Schema<
|
|
70
|
+
schema: Schema.Schema<A, I, R>
|
|
71
71
|
) => {
|
|
72
72
|
const parse = Multipart.schemaPersisted(schema)
|
|
73
73
|
return Effect.flatMap(multipartPersisted, parse)
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
/** @internal */
|
|
77
|
-
export const schemaBodyFormJson = <
|
|
77
|
+
export const schemaBodyFormJson = <A, I, R>(schema: Schema.Schema<A, I, R>) => {
|
|
78
78
|
const parseMultipart = Multipart.schemaJson(schema)
|
|
79
79
|
const parseUrlParams = UrlParams.schemaJson(schema)
|
|
80
80
|
return (field: string) =>
|
|
@@ -83,9 +83,9 @@ export const schemaBodyFormJson = <R, I, A>(schema: Schema.Schema<R, I, A>) => {
|
|
|
83
83
|
(
|
|
84
84
|
request
|
|
85
85
|
): Effect.Effect<
|
|
86
|
-
|
|
86
|
+
A,
|
|
87
87
|
ParseResult.ParseError | Error.RequestError,
|
|
88
|
-
|
|
88
|
+
R | FileSystem.FileSystem | Path.Path | Scope.Scope | ServerRequest.ServerRequest
|
|
89
89
|
> => {
|
|
90
90
|
if (isMultipart(request)) {
|
|
91
91
|
return Effect.flatMap(
|
|
@@ -147,7 +147,7 @@ class ServerRequestImpl implements ServerRequest.ServerRequest {
|
|
|
147
147
|
return this.headersOverride
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
get stream(): Stream.Stream<
|
|
150
|
+
get stream(): Stream.Stream<Uint8Array, Error.RequestError> {
|
|
151
151
|
return this.source.body
|
|
152
152
|
? Stream.fromReadableStream(() => this.source.body as any, (_) =>
|
|
153
153
|
Error.RequestError({
|
|
@@ -162,8 +162,8 @@ class ServerRequestImpl implements ServerRequest.ServerRequest {
|
|
|
162
162
|
}))
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
-
private textEffect: Effect.Effect<
|
|
166
|
-
get text(): Effect.Effect<
|
|
165
|
+
private textEffect: Effect.Effect<string, Error.RequestError> | undefined
|
|
166
|
+
get text(): Effect.Effect<string, Error.RequestError> {
|
|
167
167
|
if (this.textEffect) {
|
|
168
168
|
return this.textEffect
|
|
169
169
|
}
|
|
@@ -181,7 +181,7 @@ class ServerRequestImpl implements ServerRequest.ServerRequest {
|
|
|
181
181
|
return this.textEffect
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
-
get json(): Effect.Effect<
|
|
184
|
+
get json(): Effect.Effect<unknown, Error.RequestError> {
|
|
185
185
|
return Effect.tryMap(this.text, {
|
|
186
186
|
try: (_) => JSON.parse(_) as unknown,
|
|
187
187
|
catch: (error) =>
|
|
@@ -193,7 +193,7 @@ class ServerRequestImpl implements ServerRequest.ServerRequest {
|
|
|
193
193
|
})
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
-
get urlParamsBody(): Effect.Effect<
|
|
196
|
+
get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, Error.RequestError> {
|
|
197
197
|
return Effect.flatMap(this.text, (_) =>
|
|
198
198
|
Effect.try({
|
|
199
199
|
try: () => UrlParams.fromInput(new URLSearchParams(_)),
|
|
@@ -208,15 +208,15 @@ class ServerRequestImpl implements ServerRequest.ServerRequest {
|
|
|
208
208
|
|
|
209
209
|
private multipartEffect:
|
|
210
210
|
| Effect.Effect<
|
|
211
|
-
|
|
211
|
+
Multipart.Persisted,
|
|
212
212
|
Multipart.MultipartError,
|
|
213
|
-
|
|
213
|
+
Scope.Scope | FileSystem.FileSystem | Path.Path
|
|
214
214
|
>
|
|
215
215
|
| undefined
|
|
216
216
|
get multipart(): Effect.Effect<
|
|
217
|
-
|
|
217
|
+
Multipart.Persisted,
|
|
218
218
|
Multipart.MultipartError,
|
|
219
|
-
|
|
219
|
+
Scope.Scope | FileSystem.FileSystem | Path.Path
|
|
220
220
|
> {
|
|
221
221
|
if (this.multipartEffect) {
|
|
222
222
|
return this.multipartEffect
|
|
@@ -227,15 +227,15 @@ class ServerRequestImpl implements ServerRequest.ServerRequest {
|
|
|
227
227
|
return this.multipartEffect
|
|
228
228
|
}
|
|
229
229
|
|
|
230
|
-
get multipartStream(): Stream.Stream<
|
|
230
|
+
get multipartStream(): Stream.Stream<Multipart.Part, Multipart.MultipartError> {
|
|
231
231
|
return Stream.pipeThroughChannel(
|
|
232
232
|
Stream.mapError(this.stream, (error) => Multipart.MultipartError("InternalError", error)),
|
|
233
233
|
Multipart.makeChannel(this.headers)
|
|
234
234
|
)
|
|
235
235
|
}
|
|
236
236
|
|
|
237
|
-
private arrayBufferEffect: Effect.Effect<
|
|
238
|
-
get arrayBuffer(): Effect.Effect<
|
|
237
|
+
private arrayBufferEffect: Effect.Effect<ArrayBuffer, Error.RequestError> | undefined
|
|
238
|
+
get arrayBuffer(): Effect.Effect<ArrayBuffer, Error.RequestError> {
|
|
239
239
|
if (this.arrayBuffer) {
|
|
240
240
|
return this.arrayBuffer
|
|
241
241
|
}
|