@effect/platform 0.13.3 → 0.13.4
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/Http/Body.d.ts +8 -1
- package/Http/Body.d.ts.map +1 -1
- package/Http/Body.js +7 -1
- package/Http/Body.js.map +1 -1
- package/Http/Client.d.ts +11 -0
- package/Http/Client.d.ts.map +1 -1
- package/Http/Client.js +7 -1
- package/Http/Client.js.map +1 -1
- package/Http/Etag.d.ts +56 -0
- package/Http/Etag.d.ts.map +1 -0
- package/Http/Etag.js +28 -0
- package/Http/Etag.js.map +1 -0
- package/Http/Router.d.ts +1 -1
- package/Http/Router.d.ts.map +1 -1
- package/Http/Router.js +3 -3
- package/Http/Router.js.map +1 -1
- package/Http/ServerResponse.d.ts +2 -1
- package/Http/ServerResponse.d.ts.map +1 -1
- package/Http/ServerResponse.js.map +1 -1
- package/internal/http/body.js +6 -2
- package/internal/http/body.js.map +1 -1
- package/internal/http/client.d.ts.map +1 -1
- package/internal/http/client.js +6 -2
- package/internal/http/client.js.map +1 -1
- package/internal/http/etag.d.ts +2 -0
- package/internal/http/etag.d.ts.map +1 -0
- package/internal/http/etag.js +26 -0
- package/internal/http/etag.js.map +1 -0
- package/internal/http/router.d.ts.map +1 -1
- package/internal/http/router.js +9 -9
- package/internal/http/router.js.map +1 -1
- package/internal/http/server.js +1 -1
- package/internal/http/server.js.map +1 -1
- package/internal/http/serverResponse.js +20 -1
- package/internal/http/serverResponse.js.map +1 -1
- package/mjs/Http/Body.mjs +5 -0
- package/mjs/Http/Body.mjs.map +1 -1
- package/mjs/Http/Client.mjs +5 -0
- package/mjs/Http/Client.mjs.map +1 -1
- package/mjs/Http/Etag.mjs +17 -0
- package/mjs/Http/Etag.mjs.map +1 -0
- package/mjs/Http/Router.mjs +1 -1
- package/mjs/Http/Router.mjs.map +1 -1
- package/mjs/Http/ServerResponse.mjs.map +1 -1
- package/mjs/internal/http/body.mjs +4 -1
- package/mjs/internal/http/body.mjs.map +1 -1
- package/mjs/internal/http/client.mjs +4 -1
- package/mjs/internal/http/client.mjs.map +1 -1
- package/mjs/internal/http/etag.mjs +15 -0
- package/mjs/internal/http/etag.mjs.map +1 -0
- package/mjs/internal/http/router.mjs +7 -7
- package/mjs/internal/http/router.mjs.map +1 -1
- package/mjs/internal/http/server.mjs +1 -1
- package/mjs/internal/http/server.mjs.map +1 -1
- package/mjs/internal/http/serverResponse.mjs +20 -1
- package/mjs/internal/http/serverResponse.mjs.map +1 -1
- package/package.json +2 -1
- package/src/Http/Body.ts +16 -1
- package/src/Http/Client.ts +13 -0
- package/src/Http/Etag.ts +64 -0
- package/src/Http/Router.ts +52 -22
- package/src/Http/ServerResponse.ts +2 -1
- package/src/internal/http/body.ts +22 -3
- package/src/internal/http/client.ts +5 -1
- package/src/internal/http/etag.ts +20 -0
- package/src/internal/http/router.ts +7 -7
- package/src/internal/http/server.ts +1 -1
- package/src/internal/http/serverResponse.ts +32 -10
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { dual } from "@effect/data/Function"
|
|
1
|
+
import { dual, pipe } from "@effect/data/Function"
|
|
2
2
|
import { pipeArguments } from "@effect/data/Pipeable"
|
|
3
3
|
import * as Effect from "@effect/io/Effect"
|
|
4
4
|
import type * as PlatformError from "@effect/platform/Error"
|
|
5
|
-
import
|
|
5
|
+
import * as FileSystem from "@effect/platform/FileSystem"
|
|
6
6
|
import type * as Body from "@effect/platform/Http/Body"
|
|
7
|
+
import * as Etag from "@effect/platform/Http/Etag"
|
|
7
8
|
import * as Headers from "@effect/platform/Http/Headers"
|
|
8
9
|
import type * as Error from "@effect/platform/Http/ServerError"
|
|
9
10
|
import * as ServerRequest from "@effect/platform/Http/ServerRequest"
|
|
@@ -141,14 +142,35 @@ export const schemaJson = <I, A>(
|
|
|
141
142
|
export const file = (
|
|
142
143
|
path: string,
|
|
143
144
|
options?: ServerResponse.Options & FileSystem.StreamOptions
|
|
144
|
-
): Effect.Effect<
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
)
|
|
145
|
+
): Effect.Effect<
|
|
146
|
+
FileSystem.FileSystem | Etag.Generator,
|
|
147
|
+
PlatformError.PlatformError,
|
|
148
|
+
ServerResponse.ServerResponse
|
|
149
|
+
> =>
|
|
150
|
+
pipe(
|
|
151
|
+
Effect.bindTo(Effect.flatMap(FileSystem.FileSystem, (fs) => fs.stat(path)), "info"),
|
|
152
|
+
Effect.bind("etag", ({ info }) =>
|
|
153
|
+
Effect.flatMap(
|
|
154
|
+
Etag.Generator,
|
|
155
|
+
(generator) => generator.fromFileInfo(info)
|
|
156
|
+
)),
|
|
157
|
+
Effect.bind("body", ({ info }) => internalBody.fileInfo(path, info, options)),
|
|
158
|
+
Effect.map(({ body, etag, info }) => {
|
|
159
|
+
const headers: Record<string, string> = {
|
|
160
|
+
...(options?.headers ?? {}),
|
|
161
|
+
etag: Etag.toString(etag)
|
|
162
|
+
}
|
|
163
|
+
if (info.mtime._tag === "Some") {
|
|
164
|
+
headers["last-modified"] = info.mtime.value.toUTCString()
|
|
165
|
+
}
|
|
166
|
+
return new ServerResponseImpl(
|
|
167
|
+
options?.status ?? 200,
|
|
168
|
+
options?.statusText,
|
|
169
|
+
headers,
|
|
170
|
+
body
|
|
171
|
+
)
|
|
172
|
+
})
|
|
173
|
+
)
|
|
152
174
|
|
|
153
175
|
/** @internal */
|
|
154
176
|
export const urlParams = (
|