@effect/platform 0.48.15 → 0.48.17

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 (134) hide show
  1. package/Http/Cookies/package.json +6 -0
  2. package/README.md +235 -46
  3. package/dist/cjs/Http/Client.js +6 -1
  4. package/dist/cjs/Http/Client.js.map +1 -1
  5. package/dist/cjs/Http/ClientRequest.js.map +1 -1
  6. package/dist/cjs/Http/ClientResponse.js.map +1 -1
  7. package/dist/cjs/Http/Cookies.js +566 -0
  8. package/dist/cjs/Http/Cookies.js.map +1 -0
  9. package/dist/cjs/Http/Headers.js +2 -2
  10. package/dist/cjs/Http/Headers.js.map +1 -1
  11. package/dist/cjs/Http/IncomingMessage.js +12 -16
  12. package/dist/cjs/Http/IncomingMessage.js.map +1 -1
  13. package/dist/cjs/Http/Multipart.js.map +1 -1
  14. package/dist/cjs/Http/Router.js +11 -1
  15. package/dist/cjs/Http/Router.js.map +1 -1
  16. package/dist/cjs/Http/ServerRequest.js +6 -1
  17. package/dist/cjs/Http/ServerRequest.js.map +1 -1
  18. package/dist/cjs/Http/ServerResponse.js +36 -1
  19. package/dist/cjs/Http/ServerResponse.js.map +1 -1
  20. package/dist/cjs/Http/UrlParams.js +2 -2
  21. package/dist/cjs/Http/UrlParams.js.map +1 -1
  22. package/dist/cjs/HttpClient.js +3 -1
  23. package/dist/cjs/HttpClient.js.map +1 -1
  24. package/dist/cjs/HttpServer.js +3 -1
  25. package/dist/cjs/HttpServer.js.map +1 -1
  26. package/dist/cjs/internal/http/body.js +2 -2
  27. package/dist/cjs/internal/http/body.js.map +1 -1
  28. package/dist/cjs/internal/http/client.js +9 -3
  29. package/dist/cjs/internal/http/client.js.map +1 -1
  30. package/dist/cjs/internal/http/clientRequest.js +2 -2
  31. package/dist/cjs/internal/http/clientRequest.js.map +1 -1
  32. package/dist/cjs/internal/http/clientResponse.js +16 -8
  33. package/dist/cjs/internal/http/clientResponse.js.map +1 -1
  34. package/dist/cjs/internal/http/multipart.js +4 -4
  35. package/dist/cjs/internal/http/multipart.js.map +1 -1
  36. package/dist/cjs/internal/http/router.js +34 -7
  37. package/dist/cjs/internal/http/router.js.map +1 -1
  38. package/dist/cjs/internal/http/serverRequest.js +30 -15
  39. package/dist/cjs/internal/http/serverRequest.js.map +1 -1
  40. package/dist/cjs/internal/http/serverResponse.js +48 -23
  41. package/dist/cjs/internal/http/serverResponse.js.map +1 -1
  42. package/dist/dts/Error.d.ts.map +1 -1
  43. package/dist/dts/Http/App.d.ts +1 -1
  44. package/dist/dts/Http/App.d.ts.map +1 -1
  45. package/dist/dts/Http/Client.d.ts +13 -2
  46. package/dist/dts/Http/Client.d.ts.map +1 -1
  47. package/dist/dts/Http/ClientRequest.d.ts +2 -1
  48. package/dist/dts/Http/ClientRequest.d.ts.map +1 -1
  49. package/dist/dts/Http/ClientResponse.d.ts +7 -4
  50. package/dist/dts/Http/ClientResponse.d.ts.map +1 -1
  51. package/dist/dts/Http/Cookies.d.ts +253 -0
  52. package/dist/dts/Http/Cookies.d.ts.map +1 -0
  53. package/dist/dts/Http/Headers.d.ts +2 -2
  54. package/dist/dts/Http/Headers.d.ts.map +1 -1
  55. package/dist/dts/Http/IncomingMessage.d.ts +7 -6
  56. package/dist/dts/Http/IncomingMessage.d.ts.map +1 -1
  57. package/dist/dts/Http/Multipart.d.ts +3 -2
  58. package/dist/dts/Http/Multipart.d.ts.map +1 -1
  59. package/dist/dts/Http/Router.d.ts +29 -3
  60. package/dist/dts/Http/Router.d.ts.map +1 -1
  61. package/dist/dts/Http/ServerRequest.d.ts +14 -6
  62. package/dist/dts/Http/ServerRequest.d.ts.map +1 -1
  63. package/dist/dts/Http/ServerResponse.d.ts +89 -13
  64. package/dist/dts/Http/ServerResponse.d.ts.map +1 -1
  65. package/dist/dts/Http/UrlParams.d.ts +3 -2
  66. package/dist/dts/Http/UrlParams.d.ts.map +1 -1
  67. package/dist/dts/HttpClient.d.ts +8 -0
  68. package/dist/dts/HttpClient.d.ts.map +1 -1
  69. package/dist/dts/HttpServer.d.ts +8 -0
  70. package/dist/dts/HttpServer.d.ts.map +1 -1
  71. package/dist/dts/Socket.d.ts +3 -3
  72. package/dist/dts/Socket.d.ts.map +1 -1
  73. package/dist/dts/internal/http/router.d.ts.map +1 -1
  74. package/dist/esm/Http/Client.js +5 -0
  75. package/dist/esm/Http/Client.js.map +1 -1
  76. package/dist/esm/Http/ClientRequest.js.map +1 -1
  77. package/dist/esm/Http/ClientResponse.js.map +1 -1
  78. package/dist/esm/Http/Cookies.js +518 -0
  79. package/dist/esm/Http/Cookies.js.map +1 -0
  80. package/dist/esm/Http/Headers.js +2 -2
  81. package/dist/esm/Http/Headers.js.map +1 -1
  82. package/dist/esm/Http/IncomingMessage.js +12 -15
  83. package/dist/esm/Http/IncomingMessage.js.map +1 -1
  84. package/dist/esm/Http/Multipart.js.map +1 -1
  85. package/dist/esm/Http/Router.js +10 -0
  86. package/dist/esm/Http/Router.js.map +1 -1
  87. package/dist/esm/Http/ServerRequest.js +5 -0
  88. package/dist/esm/Http/ServerRequest.js.map +1 -1
  89. package/dist/esm/Http/ServerResponse.js +35 -0
  90. package/dist/esm/Http/ServerResponse.js.map +1 -1
  91. package/dist/esm/Http/UrlParams.js +2 -2
  92. package/dist/esm/Http/UrlParams.js.map +1 -1
  93. package/dist/esm/HttpClient.js +8 -0
  94. package/dist/esm/HttpClient.js.map +1 -1
  95. package/dist/esm/HttpServer.js +8 -0
  96. package/dist/esm/HttpServer.js.map +1 -1
  97. package/dist/esm/internal/http/body.js +2 -2
  98. package/dist/esm/internal/http/body.js.map +1 -1
  99. package/dist/esm/internal/http/client.js +8 -2
  100. package/dist/esm/internal/http/client.js.map +1 -1
  101. package/dist/esm/internal/http/clientRequest.js +2 -2
  102. package/dist/esm/internal/http/clientRequest.js.map +1 -1
  103. package/dist/esm/internal/http/clientResponse.js +16 -8
  104. package/dist/esm/internal/http/clientResponse.js.map +1 -1
  105. package/dist/esm/internal/http/multipart.js +4 -4
  106. package/dist/esm/internal/http/multipart.js.map +1 -1
  107. package/dist/esm/internal/http/router.js +31 -6
  108. package/dist/esm/internal/http/router.js.map +1 -1
  109. package/dist/esm/internal/http/serverRequest.js +28 -14
  110. package/dist/esm/internal/http/serverRequest.js.map +1 -1
  111. package/dist/esm/internal/http/serverResponse.js +47 -22
  112. package/dist/esm/internal/http/serverResponse.js.map +1 -1
  113. package/package.json +12 -4
  114. package/src/Http/Client.ts +16 -2
  115. package/src/Http/ClientRequest.ts +3 -1
  116. package/src/Http/ClientResponse.ts +18 -7
  117. package/src/Http/Cookies.ts +718 -0
  118. package/src/Http/Headers.ts +16 -8
  119. package/src/Http/IncomingMessage.ts +17 -12
  120. package/src/Http/Multipart.ts +5 -2
  121. package/src/Http/Router.ts +50 -3
  122. package/src/Http/ServerRequest.ts +25 -7
  123. package/src/Http/ServerResponse.ts +145 -13
  124. package/src/Http/UrlParams.ts +3 -2
  125. package/src/HttpClient.ts +8 -0
  126. package/src/HttpServer.ts +8 -0
  127. package/src/internal/http/body.ts +3 -2
  128. package/src/internal/http/client.ts +45 -5
  129. package/src/internal/http/clientRequest.ts +3 -2
  130. package/src/internal/http/clientResponse.ts +18 -8
  131. package/src/internal/http/multipart.ts +7 -4
  132. package/src/internal/http/router.ts +80 -6
  133. package/src/internal/http/serverRequest.ts +41 -15
  134. package/src/internal/http/serverResponse.ts +190 -18
@@ -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"
@@ -7,6 +8,7 @@ import * as Stream from "effect/Stream"
7
8
  import type * as PlatformError from "../../Error.js"
8
9
  import type * as FileSystem from "../../FileSystem.js"
9
10
  import type * as Body from "../../Http/Body.js"
11
+ import * as Cookies from "../../Http/Cookies.js"
10
12
  import * as Headers from "../../Http/Headers.js"
11
13
  import * as Platform from "../../Http/Platform.js"
12
14
  import type * as ServerResponse from "../../Http/ServerResponse.js"
@@ -26,6 +28,7 @@ class ServerResponseImpl extends Effectable.StructuralClass<ServerResponse.Serve
26
28
  readonly status: number,
27
29
  readonly statusText: string | undefined,
28
30
  headers: Headers.Headers,
31
+ readonly cookies: Cookies.Cookies,
29
32
  readonly body: Body.Body
30
33
  ) {
31
34
  super()
@@ -62,6 +65,7 @@ class ServerResponseImpl extends Effectable.StructuralClass<ServerResponse.Serve
62
65
  status: this.status,
63
66
  statusText: this.statusText,
64
67
  headers: this.headers,
68
+ cookies: this.cookies.toJSON(),
65
69
  body: this.body.toJSON()
66
70
  }
67
71
  }
@@ -72,11 +76,12 @@ export const isServerResponse = (u: unknown): u is ServerResponse.ServerResponse
72
76
  typeof u === "object" && u !== null && TypeId in u
73
77
 
74
78
  /** @internal */
75
- export const empty = (options?: ServerResponse.Options.WithContent): ServerResponse.ServerResponse =>
79
+ export const empty = (options?: ServerResponse.Options.WithContent | undefined): ServerResponse.ServerResponse =>
76
80
  new ServerResponseImpl(
77
81
  options?.status ?? 204,
78
82
  options?.statusText,
79
83
  options?.headers ?? Headers.empty,
84
+ options?.cookies ?? Cookies.empty,
80
85
  internalBody.empty
81
86
  )
82
87
 
@@ -89,6 +94,7 @@ export const uint8Array = (
89
94
  options?.status ?? 200,
90
95
  options?.statusText,
91
96
  options?.headers ?? Headers.empty,
97
+ options?.cookies ?? Cookies.empty,
92
98
  internalBody.uint8Array(body, getContentType(options))
93
99
  )
94
100
 
@@ -98,6 +104,7 @@ export const text = (body: string, options?: ServerResponse.Options.WithContentT
98
104
  options?.status ?? 200,
99
105
  options?.statusText,
100
106
  options?.headers ?? Headers.empty,
107
+ options?.cookies ?? Cookies.empty,
101
108
  internalBody.text(body, getContentType(options))
102
109
  )
103
110
 
@@ -150,42 +157,46 @@ export const htmlStream = <A extends ReadonlyArray<Template.InterpolatedWithStre
150
157
  /** @internal */
151
158
  export const json = (
152
159
  body: unknown,
153
- options?: ServerResponse.Options.WithContent
160
+ options?: ServerResponse.Options.WithContent | undefined
154
161
  ): Effect.Effect<ServerResponse.ServerResponse, Body.BodyError> =>
155
162
  Effect.map(internalBody.json(body), (body) =>
156
163
  new ServerResponseImpl(
157
164
  options?.status ?? 200,
158
165
  options?.statusText,
159
166
  options?.headers ?? Headers.empty,
167
+ options?.cookies ?? Cookies.empty,
160
168
  body
161
169
  ))
162
170
 
163
171
  /** @internal */
164
172
  export const unsafeJson = (
165
173
  body: unknown,
166
- options?: ServerResponse.Options.WithContent
174
+ options?: ServerResponse.Options.WithContent | undefined
167
175
  ): ServerResponse.ServerResponse =>
168
176
  new ServerResponseImpl(
169
177
  options?.status ?? 200,
170
178
  options?.statusText,
171
179
  options?.headers ?? Headers.empty,
180
+ options?.cookies ?? Cookies.empty,
172
181
  internalBody.unsafeJson(body)
173
182
  )
174
183
 
175
184
  /** @internal */
176
185
  export const schemaJson = <A, I, R>(
177
- schema: Schema.Schema<A, I, R>
186
+ schema: Schema.Schema<A, I, R>,
187
+ options?: ParseOptions | undefined
178
188
  ) => {
179
- const encode = internalBody.jsonSchema(schema)
189
+ const encode = internalBody.jsonSchema(schema, options)
180
190
  return (
181
191
  body: A,
182
- options?: ServerResponse.Options.WithContent
192
+ options?: ServerResponse.Options.WithContent | undefined
183
193
  ): Effect.Effect<ServerResponse.ServerResponse, Body.BodyError, R> =>
184
194
  Effect.map(encode(body), (body) =>
185
195
  new ServerResponseImpl(
186
196
  options?.status ?? 200,
187
197
  options?.statusText,
188
198
  options?.headers ?? Headers.empty,
199
+ options?.cookies ?? Cookies.empty,
189
200
  body
190
201
  ))
191
202
  }
@@ -193,7 +204,7 @@ export const schemaJson = <A, I, R>(
193
204
  /** @internal */
194
205
  export const file = (
195
206
  path: string,
196
- options?: ServerResponse.Options & FileSystem.StreamOptions
207
+ options?: (ServerResponse.Options & FileSystem.StreamOptions) | undefined
197
208
  ): Effect.Effect<ServerResponse.ServerResponse, PlatformError.PlatformError, Platform.Platform> =>
198
209
  Effect.flatMap(
199
210
  Platform.Platform,
@@ -203,7 +214,7 @@ export const file = (
203
214
  /** @internal */
204
215
  export const fileWeb = (
205
216
  file: Body.Body.FileLike,
206
- options?: ServerResponse.Options.WithContent & FileSystem.StreamOptions
217
+ options?: (ServerResponse.Options.WithContent & FileSystem.StreamOptions) | undefined
207
218
  ): Effect.Effect<ServerResponse.ServerResponse, never, Platform.Platform> =>
208
219
  Effect.flatMap(
209
220
  Platform.Platform,
@@ -213,50 +224,54 @@ export const fileWeb = (
213
224
  /** @internal */
214
225
  export const urlParams = (
215
226
  body: UrlParams.Input,
216
- options?: ServerResponse.Options.WithContent
227
+ options?: ServerResponse.Options.WithContent | undefined
217
228
  ): ServerResponse.ServerResponse =>
218
229
  new ServerResponseImpl(
219
230
  options?.status ?? 200,
220
231
  options?.statusText,
221
232
  options?.headers ?? Headers.empty,
233
+ options?.cookies ?? Cookies.empty,
222
234
  internalBody.text(UrlParams.toString(UrlParams.fromInput(body)), "application/x-www-form-urlencoded")
223
235
  )
224
236
 
225
237
  /** @internal */
226
- export const raw = (body: unknown, options?: ServerResponse.Options): ServerResponse.ServerResponse =>
238
+ export const raw = (body: unknown, options?: ServerResponse.Options | undefined): ServerResponse.ServerResponse =>
227
239
  new ServerResponseImpl(
228
240
  options?.status ?? 200,
229
241
  options?.statusText,
230
242
  options?.headers ?? Headers.empty,
243
+ options?.cookies ?? Cookies.empty,
231
244
  internalBody.raw(body)
232
245
  )
233
246
 
234
247
  /** @internal */
235
248
  export const formData = (
236
249
  body: FormData,
237
- options?: ServerResponse.Options.WithContent
250
+ options?: ServerResponse.Options.WithContent | undefined
238
251
  ): ServerResponse.ServerResponse =>
239
252
  new ServerResponseImpl(
240
253
  options?.status ?? 200,
241
254
  options?.statusText,
242
255
  options?.headers ?? Headers.empty,
256
+ options?.cookies ?? Cookies.empty,
243
257
  internalBody.formData(body)
244
258
  )
245
259
 
246
260
  /** @internal */
247
261
  export const stream = (
248
262
  body: Stream.Stream<Uint8Array, unknown>,
249
- options?: ServerResponse.Options
263
+ options?: ServerResponse.Options | undefined
250
264
  ): ServerResponse.ServerResponse =>
251
265
  new ServerResponseImpl(
252
266
  options?.status ?? 200,
253
267
  options?.statusText,
254
268
  options?.headers ?? Headers.empty,
269
+ options?.cookies ?? Cookies.empty,
255
270
  internalBody.stream(body, getContentType(options), options?.contentLength)
256
271
  )
257
272
 
258
273
  /** @internal */
259
- export const getContentType = (options?: ServerResponse.Options): string | undefined => {
274
+ export const getContentType = (options?: ServerResponse.Options | undefined): string | undefined => {
260
275
  if (options?.contentType) {
261
276
  return options.contentType
262
277
  } else if (options?.headers) {
@@ -275,9 +290,156 @@ export const setHeader = dual<
275
290
  self.status,
276
291
  self.statusText,
277
292
  Headers.set(self.headers, key, value),
293
+ self.cookies,
278
294
  self.body
279
295
  ))
280
296
 
297
+ /** @internal */
298
+ export const replaceCookies = dual<
299
+ (cookies: Cookies.Cookies) => (self: ServerResponse.ServerResponse) => ServerResponse.ServerResponse,
300
+ (self: ServerResponse.ServerResponse, cookies: Cookies.Cookies) => ServerResponse.ServerResponse
301
+ >(2, (self, cookies) =>
302
+ new ServerResponseImpl(
303
+ self.status,
304
+ self.statusText,
305
+ self.headers,
306
+ cookies,
307
+ self.body
308
+ ))
309
+
310
+ /** @internal */
311
+ export const setCookie = dual<
312
+ (
313
+ name: string,
314
+ value: string,
315
+ options?: Cookies.Cookie["options"]
316
+ ) => (self: ServerResponse.ServerResponse) => Effect.Effect<ServerResponse.ServerResponse, Cookies.CookiesError>,
317
+ (
318
+ self: ServerResponse.ServerResponse,
319
+ name: string,
320
+ value: string,
321
+ options?: Cookies.Cookie["options"]
322
+ ) => Effect.Effect<ServerResponse.ServerResponse, Cookies.CookiesError>
323
+ >(
324
+ (args) => Cookies.isCookies(args[0]),
325
+ (self, name, value, options) =>
326
+ Effect.map(Cookies.set(self.cookies, name, value, options), (cookies) =>
327
+ new ServerResponseImpl(
328
+ self.status,
329
+ self.statusText,
330
+ self.headers,
331
+ cookies,
332
+ self.body
333
+ ))
334
+ )
335
+
336
+ /** @internal */
337
+ export const unsafeSetCookie = dual<
338
+ (
339
+ name: string,
340
+ value: string,
341
+ options?: Cookies.Cookie["options"]
342
+ ) => (self: ServerResponse.ServerResponse) => ServerResponse.ServerResponse,
343
+ (
344
+ self: ServerResponse.ServerResponse,
345
+ name: string,
346
+ value: string,
347
+ options?: Cookies.Cookie["options"]
348
+ ) => ServerResponse.ServerResponse
349
+ >(
350
+ (args) => Cookies.isCookies(args[0]),
351
+ (self, name, value, options) =>
352
+ new ServerResponseImpl(
353
+ self.status,
354
+ self.statusText,
355
+ self.headers,
356
+ Cookies.unsafeSet(self.cookies, name, value, options),
357
+ self.body
358
+ )
359
+ )
360
+
361
+ /** @internal */
362
+ export const updateCookies = dual<
363
+ (
364
+ f: (cookies: Cookies.Cookies) => Cookies.Cookies
365
+ ) => (self: ServerResponse.ServerResponse) => ServerResponse.ServerResponse,
366
+ (
367
+ self: ServerResponse.ServerResponse,
368
+ f: (cookies: Cookies.Cookies) => Cookies.Cookies
369
+ ) => ServerResponse.ServerResponse
370
+ >(2, (self, f) =>
371
+ new ServerResponseImpl(
372
+ self.status,
373
+ self.statusText,
374
+ self.headers,
375
+ f(self.cookies),
376
+ self.body
377
+ ))
378
+
379
+ /** @internal */
380
+ export const setCookies = dual<
381
+ (
382
+ cookies: Iterable<readonly [name: string, value: string, options?: Cookies.Cookie["options"]]>
383
+ ) => (self: ServerResponse.ServerResponse) => Effect.Effect<ServerResponse.ServerResponse, Cookies.CookiesError>,
384
+ (
385
+ self: ServerResponse.ServerResponse,
386
+ cookies: Iterable<readonly [name: string, value: string, options?: Cookies.Cookie["options"]]>
387
+ ) => Effect.Effect<ServerResponse.ServerResponse, Cookies.CookiesError>
388
+ >(
389
+ 2,
390
+ (self, cookies) =>
391
+ Effect.map(Cookies.setAll(self.cookies, cookies), (cookies) =>
392
+ new ServerResponseImpl(
393
+ self.status,
394
+ self.statusText,
395
+ self.headers,
396
+ cookies,
397
+ self.body
398
+ ))
399
+ )
400
+
401
+ /** @internal */
402
+ export const unsafeSetCookies = dual<
403
+ (
404
+ cookies: Iterable<readonly [name: string, value: string, options?: Cookies.Cookie["options"]]>
405
+ ) => (self: ServerResponse.ServerResponse) => ServerResponse.ServerResponse,
406
+ (
407
+ self: ServerResponse.ServerResponse,
408
+ cookies: Iterable<readonly [name: string, value: string, options?: Cookies.Cookie["options"]]>
409
+ ) => ServerResponse.ServerResponse
410
+ >(
411
+ 2,
412
+ (self, cookies) =>
413
+ new ServerResponseImpl(
414
+ self.status,
415
+ self.statusText,
416
+ self.headers,
417
+ Cookies.unsafeSetAll(self.cookies, cookies),
418
+ self.body
419
+ )
420
+ )
421
+
422
+ /** @internal */
423
+ export const removeCookie = dual<
424
+ (
425
+ name: string
426
+ ) => (self: ServerResponse.ServerResponse) => ServerResponse.ServerResponse,
427
+ (
428
+ self: ServerResponse.ServerResponse,
429
+ name: string
430
+ ) => ServerResponse.ServerResponse
431
+ >(
432
+ 2,
433
+ (self, name) =>
434
+ new ServerResponseImpl(
435
+ self.status,
436
+ self.statusText,
437
+ self.headers,
438
+ Cookies.remove(self.cookies, name),
439
+ self.body
440
+ )
441
+ )
442
+
281
443
  /** @internal */
282
444
  export const setHeaders = dual<
283
445
  (input: Headers.Input) => (self: ServerResponse.ServerResponse) => ServerResponse.ServerResponse,
@@ -287,6 +449,7 @@ export const setHeaders = dual<
287
449
  self.status,
288
450
  self.statusText,
289
451
  Headers.setAll(self.headers, input),
452
+ self.cookies,
290
453
  self.body
291
454
  ))
292
455
 
@@ -299,6 +462,7 @@ export const setStatus = dual<
299
462
  status,
300
463
  statusText,
301
464
  self.headers,
465
+ self.cookies,
302
466
  self.body
303
467
  ))
304
468
 
@@ -315,17 +479,25 @@ export const setBody = dual<
315
479
  self.status,
316
480
  self.statusText,
317
481
  headers,
482
+ self.cookies,
318
483
  body
319
484
  )
320
485
  })
321
486
 
322
487
  /** @internal */
323
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
+ }
324
496
  if (withoutBody) {
325
497
  return new Response(undefined, {
326
498
  status: response.status,
327
499
  statusText: response.statusText as string,
328
- headers: response.headers
500
+ headers
329
501
  })
330
502
  }
331
503
  const body = response.body
@@ -334,7 +506,7 @@ export const toWeb = (response: ServerResponse.ServerResponse, withoutBody = fal
334
506
  return new Response(undefined, {
335
507
  status: response.status,
336
508
  statusText: response.statusText as string,
337
- headers: response.headers
509
+ headers
338
510
  })
339
511
  }
340
512
  case "Uint8Array":
@@ -342,21 +514,21 @@ export const toWeb = (response: ServerResponse.ServerResponse, withoutBody = fal
342
514
  return new Response(body.body as any, {
343
515
  status: response.status,
344
516
  statusText: response.statusText,
345
- headers: response.headers
517
+ headers
346
518
  })
347
519
  }
348
520
  case "FormData": {
349
521
  return new Response(body.formData as any, {
350
522
  status: response.status,
351
523
  statusText: response.statusText,
352
- headers: response.headers
524
+ headers
353
525
  })
354
526
  }
355
527
  case "Stream": {
356
528
  return new Response(Stream.toReadableStream(body.stream), {
357
529
  status: response.status,
358
530
  statusText: response.statusText,
359
- headers: response.headers
531
+ headers
360
532
  })
361
533
  }
362
534
  }