@effect/platform 0.48.16 → 0.48.18

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 (106) hide show
  1. package/README.md +312 -10
  2. package/dist/cjs/Http/Client.js.map +1 -1
  3. package/dist/cjs/Http/ClientRequest.js.map +1 -1
  4. package/dist/cjs/Http/ClientResponse.js.map +1 -1
  5. package/dist/cjs/Http/Cookies.js +50 -27
  6. package/dist/cjs/Http/Cookies.js.map +1 -1
  7. package/dist/cjs/Http/IncomingMessage.js +12 -16
  8. package/dist/cjs/Http/IncomingMessage.js.map +1 -1
  9. package/dist/cjs/Http/Multipart.js.map +1 -1
  10. package/dist/cjs/Http/Router.js +11 -1
  11. package/dist/cjs/Http/Router.js.map +1 -1
  12. package/dist/cjs/Http/ServerRequest.js +6 -1
  13. package/dist/cjs/Http/ServerRequest.js.map +1 -1
  14. package/dist/cjs/Http/ServerResponse.js.map +1 -1
  15. package/dist/cjs/Http/UrlParams.js +2 -2
  16. package/dist/cjs/Http/UrlParams.js.map +1 -1
  17. package/dist/cjs/internal/http/body.js +2 -2
  18. package/dist/cjs/internal/http/body.js.map +1 -1
  19. package/dist/cjs/internal/http/client.js +4 -2
  20. package/dist/cjs/internal/http/client.js.map +1 -1
  21. package/dist/cjs/internal/http/clientRequest.js +2 -2
  22. package/dist/cjs/internal/http/clientRequest.js.map +1 -1
  23. package/dist/cjs/internal/http/clientResponse.js +8 -8
  24. package/dist/cjs/internal/http/clientResponse.js.map +1 -1
  25. package/dist/cjs/internal/http/multipart.js +4 -4
  26. package/dist/cjs/internal/http/multipart.js.map +1 -1
  27. package/dist/cjs/internal/http/router.js +34 -7
  28. package/dist/cjs/internal/http/router.js.map +1 -1
  29. package/dist/cjs/internal/http/serverRequest.js +22 -15
  30. package/dist/cjs/internal/http/serverRequest.js.map +1 -1
  31. package/dist/cjs/internal/http/serverResponse.js +19 -11
  32. package/dist/cjs/internal/http/serverResponse.js.map +1 -1
  33. package/dist/dts/Http/Client.d.ts +3 -2
  34. package/dist/dts/Http/Client.d.ts.map +1 -1
  35. package/dist/dts/Http/ClientRequest.d.ts +2 -1
  36. package/dist/dts/Http/ClientRequest.d.ts.map +1 -1
  37. package/dist/dts/Http/ClientResponse.d.ts +5 -4
  38. package/dist/dts/Http/ClientResponse.d.ts.map +1 -1
  39. package/dist/dts/Http/Cookies.d.ts +15 -7
  40. package/dist/dts/Http/Cookies.d.ts.map +1 -1
  41. package/dist/dts/Http/Headers.d.ts +1 -1
  42. package/dist/dts/Http/Headers.d.ts.map +1 -1
  43. package/dist/dts/Http/IncomingMessage.d.ts +7 -6
  44. package/dist/dts/Http/IncomingMessage.d.ts.map +1 -1
  45. package/dist/dts/Http/Multipart.d.ts +3 -2
  46. package/dist/dts/Http/Multipart.d.ts.map +1 -1
  47. package/dist/dts/Http/Router.d.ts +29 -3
  48. package/dist/dts/Http/Router.d.ts.map +1 -1
  49. package/dist/dts/Http/ServerRequest.d.ts +12 -6
  50. package/dist/dts/Http/ServerRequest.d.ts.map +1 -1
  51. package/dist/dts/Http/ServerResponse.d.ts +14 -13
  52. package/dist/dts/Http/ServerResponse.d.ts.map +1 -1
  53. package/dist/dts/Http/UrlParams.d.ts +2 -1
  54. package/dist/dts/Http/UrlParams.d.ts.map +1 -1
  55. package/dist/dts/internal/http/router.d.ts.map +1 -1
  56. package/dist/esm/Http/Client.js.map +1 -1
  57. package/dist/esm/Http/ClientRequest.js.map +1 -1
  58. package/dist/esm/Http/ClientResponse.js.map +1 -1
  59. package/dist/esm/Http/Cookies.js +47 -25
  60. package/dist/esm/Http/Cookies.js.map +1 -1
  61. package/dist/esm/Http/IncomingMessage.js +12 -15
  62. package/dist/esm/Http/IncomingMessage.js.map +1 -1
  63. package/dist/esm/Http/Multipart.js.map +1 -1
  64. package/dist/esm/Http/Router.js +10 -0
  65. package/dist/esm/Http/Router.js.map +1 -1
  66. package/dist/esm/Http/ServerRequest.js +5 -0
  67. package/dist/esm/Http/ServerRequest.js.map +1 -1
  68. package/dist/esm/Http/ServerResponse.js.map +1 -1
  69. package/dist/esm/Http/UrlParams.js +2 -2
  70. package/dist/esm/Http/UrlParams.js.map +1 -1
  71. package/dist/esm/internal/http/body.js +2 -2
  72. package/dist/esm/internal/http/body.js.map +1 -1
  73. package/dist/esm/internal/http/client.js +4 -2
  74. package/dist/esm/internal/http/client.js.map +1 -1
  75. package/dist/esm/internal/http/clientRequest.js +2 -2
  76. package/dist/esm/internal/http/clientRequest.js.map +1 -1
  77. package/dist/esm/internal/http/clientResponse.js +8 -8
  78. package/dist/esm/internal/http/clientResponse.js.map +1 -1
  79. package/dist/esm/internal/http/multipart.js +4 -4
  80. package/dist/esm/internal/http/multipart.js.map +1 -1
  81. package/dist/esm/internal/http/router.js +31 -6
  82. package/dist/esm/internal/http/router.js.map +1 -1
  83. package/dist/esm/internal/http/serverRequest.js +20 -14
  84. package/dist/esm/internal/http/serverRequest.js.map +1 -1
  85. package/dist/esm/internal/http/serverResponse.js +19 -11
  86. package/dist/esm/internal/http/serverResponse.js.map +1 -1
  87. package/package.json +3 -3
  88. package/src/Http/Client.ts +5 -2
  89. package/src/Http/ClientRequest.ts +3 -1
  90. package/src/Http/ClientResponse.ts +16 -7
  91. package/src/Http/Cookies.ts +60 -37
  92. package/src/Http/Headers.ts +1 -1
  93. package/src/Http/IncomingMessage.ts +17 -12
  94. package/src/Http/Multipart.ts +5 -2
  95. package/src/Http/Router.ts +50 -3
  96. package/src/Http/ServerRequest.ts +23 -7
  97. package/src/Http/ServerResponse.ts +19 -13
  98. package/src/Http/UrlParams.ts +3 -2
  99. package/src/internal/http/body.ts +3 -2
  100. package/src/internal/http/client.ts +10 -5
  101. package/src/internal/http/clientRequest.ts +3 -2
  102. package/src/internal/http/clientResponse.ts +9 -8
  103. package/src/internal/http/multipart.ts +7 -4
  104. package/src/internal/http/router.ts +80 -6
  105. package/src/internal/http/serverRequest.ts +31 -15
  106. package/src/internal/http/serverResponse.ts +32 -22
@@ -1,3 +1,4 @@
1
+ import type { ParseOptions } from "@effect/schema/AST"
1
2
  import type * as Schema from "@effect/schema/Schema"
2
3
  import * as Effect from "effect/Effect"
3
4
  import * as Effectable from "effect/Effectable"
@@ -64,6 +65,7 @@ class ServerResponseImpl extends Effectable.StructuralClass<ServerResponse.Serve
64
65
  status: this.status,
65
66
  statusText: this.statusText,
66
67
  headers: this.headers,
68
+ cookies: this.cookies.toJSON(),
67
69
  body: this.body.toJSON()
68
70
  }
69
71
  }
@@ -74,7 +76,7 @@ export const isServerResponse = (u: unknown): u is ServerResponse.ServerResponse
74
76
  typeof u === "object" && u !== null && TypeId in u
75
77
 
76
78
  /** @internal */
77
- export const empty = (options?: ServerResponse.Options.WithContent): ServerResponse.ServerResponse =>
79
+ export const empty = (options?: ServerResponse.Options.WithContent | undefined): ServerResponse.ServerResponse =>
78
80
  new ServerResponseImpl(
79
81
  options?.status ?? 204,
80
82
  options?.statusText,
@@ -155,7 +157,7 @@ export const htmlStream = <A extends ReadonlyArray<Template.InterpolatedWithStre
155
157
  /** @internal */
156
158
  export const json = (
157
159
  body: unknown,
158
- options?: ServerResponse.Options.WithContent
160
+ options?: ServerResponse.Options.WithContent | undefined
159
161
  ): Effect.Effect<ServerResponse.ServerResponse, Body.BodyError> =>
160
162
  Effect.map(internalBody.json(body), (body) =>
161
163
  new ServerResponseImpl(
@@ -169,7 +171,7 @@ export const json = (
169
171
  /** @internal */
170
172
  export const unsafeJson = (
171
173
  body: unknown,
172
- options?: ServerResponse.Options.WithContent
174
+ options?: ServerResponse.Options.WithContent | undefined
173
175
  ): ServerResponse.ServerResponse =>
174
176
  new ServerResponseImpl(
175
177
  options?.status ?? 200,
@@ -181,12 +183,13 @@ export const unsafeJson = (
181
183
 
182
184
  /** @internal */
183
185
  export const schemaJson = <A, I, R>(
184
- schema: Schema.Schema<A, I, R>
186
+ schema: Schema.Schema<A, I, R>,
187
+ options?: ParseOptions | undefined
185
188
  ) => {
186
- const encode = internalBody.jsonSchema(schema)
189
+ const encode = internalBody.jsonSchema(schema, options)
187
190
  return (
188
191
  body: A,
189
- options?: ServerResponse.Options.WithContent
192
+ options?: ServerResponse.Options.WithContent | undefined
190
193
  ): Effect.Effect<ServerResponse.ServerResponse, Body.BodyError, R> =>
191
194
  Effect.map(encode(body), (body) =>
192
195
  new ServerResponseImpl(
@@ -201,7 +204,7 @@ export const schemaJson = <A, I, R>(
201
204
  /** @internal */
202
205
  export const file = (
203
206
  path: string,
204
- options?: ServerResponse.Options & FileSystem.StreamOptions
207
+ options?: (ServerResponse.Options & FileSystem.StreamOptions) | undefined
205
208
  ): Effect.Effect<ServerResponse.ServerResponse, PlatformError.PlatformError, Platform.Platform> =>
206
209
  Effect.flatMap(
207
210
  Platform.Platform,
@@ -211,7 +214,7 @@ export const file = (
211
214
  /** @internal */
212
215
  export const fileWeb = (
213
216
  file: Body.Body.FileLike,
214
- options?: ServerResponse.Options.WithContent & FileSystem.StreamOptions
217
+ options?: (ServerResponse.Options.WithContent & FileSystem.StreamOptions) | undefined
215
218
  ): Effect.Effect<ServerResponse.ServerResponse, never, Platform.Platform> =>
216
219
  Effect.flatMap(
217
220
  Platform.Platform,
@@ -221,7 +224,7 @@ export const fileWeb = (
221
224
  /** @internal */
222
225
  export const urlParams = (
223
226
  body: UrlParams.Input,
224
- options?: ServerResponse.Options.WithContent
227
+ options?: ServerResponse.Options.WithContent | undefined
225
228
  ): ServerResponse.ServerResponse =>
226
229
  new ServerResponseImpl(
227
230
  options?.status ?? 200,
@@ -232,7 +235,7 @@ export const urlParams = (
232
235
  )
233
236
 
234
237
  /** @internal */
235
- export const raw = (body: unknown, options?: ServerResponse.Options): ServerResponse.ServerResponse =>
238
+ export const raw = (body: unknown, options?: ServerResponse.Options | undefined): ServerResponse.ServerResponse =>
236
239
  new ServerResponseImpl(
237
240
  options?.status ?? 200,
238
241
  options?.statusText,
@@ -244,7 +247,7 @@ export const raw = (body: unknown, options?: ServerResponse.Options): ServerResp
244
247
  /** @internal */
245
248
  export const formData = (
246
249
  body: FormData,
247
- options?: ServerResponse.Options.WithContent
250
+ options?: ServerResponse.Options.WithContent | undefined
248
251
  ): ServerResponse.ServerResponse =>
249
252
  new ServerResponseImpl(
250
253
  options?.status ?? 200,
@@ -257,7 +260,7 @@ export const formData = (
257
260
  /** @internal */
258
261
  export const stream = (
259
262
  body: Stream.Stream<Uint8Array, unknown>,
260
- options?: ServerResponse.Options
263
+ options?: ServerResponse.Options | undefined
261
264
  ): ServerResponse.ServerResponse =>
262
265
  new ServerResponseImpl(
263
266
  options?.status ?? 200,
@@ -268,7 +271,7 @@ export const stream = (
268
271
  )
269
272
 
270
273
  /** @internal */
271
- export const getContentType = (options?: ServerResponse.Options): string | undefined => {
274
+ export const getContentType = (options?: ServerResponse.Options | undefined): string | undefined => {
272
275
  if (options?.contentType) {
273
276
  return options.contentType
274
277
  } else if (options?.headers) {
@@ -320,7 +323,7 @@ export const setCookie = dual<
320
323
  >(
321
324
  (args) => Cookies.isCookies(args[0]),
322
325
  (self, name, value, options) =>
323
- Effect.map(Cookies.add(self.cookies, name, value, options), (cookies) =>
326
+ Effect.map(Cookies.set(self.cookies, name, value, options), (cookies) =>
324
327
  new ServerResponseImpl(
325
328
  self.status,
326
329
  self.statusText,
@@ -350,7 +353,7 @@ export const unsafeSetCookie = dual<
350
353
  self.status,
351
354
  self.statusText,
352
355
  self.headers,
353
- Cookies.unsafeAdd(self.cookies, name, value, options),
356
+ Cookies.unsafeSet(self.cookies, name, value, options),
354
357
  self.body
355
358
  )
356
359
  )
@@ -385,7 +388,7 @@ export const setCookies = dual<
385
388
  >(
386
389
  2,
387
390
  (self, cookies) =>
388
- Effect.map(Cookies.addAll(self.cookies, cookies), (cookies) =>
391
+ Effect.map(Cookies.setAll(self.cookies, cookies), (cookies) =>
389
392
  new ServerResponseImpl(
390
393
  self.status,
391
394
  self.statusText,
@@ -411,7 +414,7 @@ export const unsafeSetCookies = dual<
411
414
  self.status,
412
415
  self.statusText,
413
416
  self.headers,
414
- Cookies.unsafeAddAll(self.cookies, cookies),
417
+ Cookies.unsafeSetAll(self.cookies, cookies),
415
418
  self.body
416
419
  )
417
420
  )
@@ -483,11 +486,18 @@ export const setBody = dual<
483
486
 
484
487
  /** @internal */
485
488
  export const toWeb = (response: ServerResponse.ServerResponse, withoutBody = false): Response => {
489
+ const headers = new globalThis.Headers(response.headers)
490
+ if (!Cookies.isEmpty(response.cookies)) {
491
+ const toAdd = Cookies.toSetCookieHeaders(response.cookies)
492
+ for (const header of toAdd) {
493
+ headers.append("set-cookie", header)
494
+ }
495
+ }
486
496
  if (withoutBody) {
487
497
  return new Response(undefined, {
488
498
  status: response.status,
489
499
  statusText: response.statusText as string,
490
- headers: response.headers
500
+ headers
491
501
  })
492
502
  }
493
503
  const body = response.body
@@ -496,7 +506,7 @@ export const toWeb = (response: ServerResponse.ServerResponse, withoutBody = fal
496
506
  return new Response(undefined, {
497
507
  status: response.status,
498
508
  statusText: response.statusText as string,
499
- headers: response.headers
509
+ headers
500
510
  })
501
511
  }
502
512
  case "Uint8Array":
@@ -504,21 +514,21 @@ export const toWeb = (response: ServerResponse.ServerResponse, withoutBody = fal
504
514
  return new Response(body.body as any, {
505
515
  status: response.status,
506
516
  statusText: response.statusText,
507
- headers: response.headers
517
+ headers
508
518
  })
509
519
  }
510
520
  case "FormData": {
511
521
  return new Response(body.formData as any, {
512
522
  status: response.status,
513
523
  statusText: response.statusText,
514
- headers: response.headers
524
+ headers
515
525
  })
516
526
  }
517
527
  case "Stream": {
518
528
  return new Response(Stream.toReadableStream(body.stream), {
519
529
  status: response.status,
520
530
  statusText: response.statusText,
521
- headers: response.headers
531
+ headers
522
532
  })
523
533
  }
524
534
  }