@effect/platform 0.13.3 → 0.13.5

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 (68) hide show
  1. package/Http/Body.d.ts +8 -1
  2. package/Http/Body.d.ts.map +1 -1
  3. package/Http/Body.js +7 -1
  4. package/Http/Body.js.map +1 -1
  5. package/Http/Client.d.ts +11 -0
  6. package/Http/Client.d.ts.map +1 -1
  7. package/Http/Client.js +7 -1
  8. package/Http/Client.js.map +1 -1
  9. package/Http/Etag.d.ts +56 -0
  10. package/Http/Etag.d.ts.map +1 -0
  11. package/Http/Etag.js +28 -0
  12. package/Http/Etag.js.map +1 -0
  13. package/Http/Router.d.ts +1 -1
  14. package/Http/Router.d.ts.map +1 -1
  15. package/Http/Router.js +3 -3
  16. package/Http/Router.js.map +1 -1
  17. package/Http/ServerResponse.d.ts +2 -1
  18. package/Http/ServerResponse.d.ts.map +1 -1
  19. package/Http/ServerResponse.js.map +1 -1
  20. package/internal/http/body.js +6 -2
  21. package/internal/http/body.js.map +1 -1
  22. package/internal/http/client.d.ts.map +1 -1
  23. package/internal/http/client.js +6 -2
  24. package/internal/http/client.js.map +1 -1
  25. package/internal/http/etag.d.ts +2 -0
  26. package/internal/http/etag.d.ts.map +1 -0
  27. package/internal/http/etag.js +26 -0
  28. package/internal/http/etag.js.map +1 -0
  29. package/internal/http/router.d.ts.map +1 -1
  30. package/internal/http/router.js +9 -9
  31. package/internal/http/router.js.map +1 -1
  32. package/internal/http/server.js +1 -1
  33. package/internal/http/server.js.map +1 -1
  34. package/internal/http/serverResponse.js +20 -1
  35. package/internal/http/serverResponse.js.map +1 -1
  36. package/mjs/Http/Body.mjs +5 -0
  37. package/mjs/Http/Body.mjs.map +1 -1
  38. package/mjs/Http/Client.mjs +5 -0
  39. package/mjs/Http/Client.mjs.map +1 -1
  40. package/mjs/Http/Etag.mjs +17 -0
  41. package/mjs/Http/Etag.mjs.map +1 -0
  42. package/mjs/Http/Router.mjs +1 -1
  43. package/mjs/Http/Router.mjs.map +1 -1
  44. package/mjs/Http/ServerResponse.mjs.map +1 -1
  45. package/mjs/internal/http/body.mjs +4 -1
  46. package/mjs/internal/http/body.mjs.map +1 -1
  47. package/mjs/internal/http/client.mjs +4 -1
  48. package/mjs/internal/http/client.mjs.map +1 -1
  49. package/mjs/internal/http/etag.mjs +15 -0
  50. package/mjs/internal/http/etag.mjs.map +1 -0
  51. package/mjs/internal/http/router.mjs +7 -7
  52. package/mjs/internal/http/router.mjs.map +1 -1
  53. package/mjs/internal/http/server.mjs +1 -1
  54. package/mjs/internal/http/server.mjs.map +1 -1
  55. package/mjs/internal/http/serverResponse.mjs +20 -1
  56. package/mjs/internal/http/serverResponse.mjs.map +1 -1
  57. package/package.json +2 -1
  58. package/src/Http/Body.ts +16 -1
  59. package/src/Http/Client.ts +13 -0
  60. package/src/Http/Etag.ts +64 -0
  61. package/src/Http/Router.ts +52 -22
  62. package/src/Http/ServerResponse.ts +2 -1
  63. package/src/internal/http/body.ts +22 -3
  64. package/src/internal/http/client.ts +5 -1
  65. package/src/internal/http/etag.ts +20 -0
  66. package/src/internal/http/router.ts +7 -7
  67. package/src/internal/http/server.ts +1 -1
  68. 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 type * as FileSystem from "@effect/platform/FileSystem"
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<FileSystem.FileSystem, PlatformError.PlatformError, ServerResponse.ServerResponse> =>
145
- Effect.map(internalBody.file(path, options), (body) =>
146
- new ServerResponseImpl(
147
- options?.status ?? 200,
148
- options?.statusText,
149
- options?.headers ?? Headers.empty,
150
- body
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 = (