elysia 1.3.2 → 1.3.4-exp.0

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.
@@ -222,7 +222,7 @@ var redirect = (url, status2 = 302) => Response.redirect(url, status2), ELYSIA_F
222
222
  };
223
223
  var isNotEmpty = (obj) => {
224
224
  if (!obj) return !1;
225
- for (let x in obj) return !0;
225
+ for (let _ in obj) return !0;
226
226
  return !1;
227
227
  };
228
228
  var supportPerMethodInlineHandler = (() => {
@@ -1394,6 +1394,8 @@ var createOnRequestHandler = (app, addFn) => {
1394
1394
 
1395
1395
  // src/adapter/utils.ts
1396
1396
  var handleFile = (response, set2) => {
1397
+ if (!isBun && response instanceof Promise)
1398
+ return response.then((res) => handleFile(res, set2));
1397
1399
  let size = response.size;
1398
1400
  if (!set2 && size || size && set2 && set2.status !== 206 && set2.status !== 304 && set2.status !== 412 && set2.status !== 416) {
1399
1401
  if (set2) {
@@ -1477,11 +1479,19 @@ var handleFile = (response, set2) => {
1477
1479
  return set2;
1478
1480
  }, createStreamHandler = ({ mapResponse: mapResponse2, mapCompactResponse: mapCompactResponse2 }) => async (generator, set2, request) => {
1479
1481
  let init = generator.next();
1480
- return init instanceof Promise && (init = await init), init.done ? set2 ? mapResponse2(init.value, set2, request) : mapCompactResponse2(init.value, request) : (set2?.headers ? (set2.headers["transfer-encoding"] || (set2.headers["transfer-encoding"] = "chunked"), set2.headers["content-type"] || (set2.headers["content-type"] = "text/event-stream; charset=utf-8")) : set2 = {
1482
+ if (init instanceof Promise && (init = await init), typeof init?.done > "u" || init?.done)
1483
+ return set2 ? mapResponse2(init.value, set2, request) : mapCompactResponse2(init.value, request);
1484
+ let contentType = (
1485
+ // @ts-ignore
1486
+ init.value && typeof init.value?.stream ? "text/event-stream" : init.value && typeof init.value == "object" ? "application/json" : "text/plain"
1487
+ );
1488
+ return set2?.headers ? (set2.headers["transfer-encoding"] || (set2.headers["transfer-encoding"] = "chunked"), set2.headers["content-type"] || (set2.headers["content-type"] = contentType), set2.headers["cache-control"] || (set2.headers["cache-control"] = "no-cache")) : set2 = {
1481
1489
  status: 200,
1482
1490
  headers: {
1483
- "content-type": "text/event-stream; charset=utf-8",
1484
- "transfer-encoding": "chunked"
1491
+ "content-type": contentType,
1492
+ "transfer-encoding": "chunked",
1493
+ "cache-control": "no-cache",
1494
+ connection: "keep-alive"
1485
1495
  }
1486
1496
  }, new Response(
1487
1497
  new ReadableStream({
@@ -1494,7 +1504,9 @@ var handleFile = (response, set2) => {
1494
1504
  } catch {
1495
1505
  }
1496
1506
  }), init.value !== void 0 && init.value !== null)
1497
- if (typeof init.value == "object")
1507
+ if (init.value.toStream)
1508
+ controller.enqueue(init.value.toStream());
1509
+ else if (typeof init.value == "object")
1498
1510
  try {
1499
1511
  controller.enqueue(
1500
1512
  Buffer.from(JSON.stringify(init.value))
@@ -1511,7 +1523,9 @@ var handleFile = (response, set2) => {
1511
1523
  for await (let chunk of generator) {
1512
1524
  if (end) break;
1513
1525
  if (chunk != null) {
1514
- if (typeof chunk == "object")
1526
+ if (chunk.toStream)
1527
+ controller.enqueue(chunk.toStream());
1528
+ else if (typeof chunk == "object")
1515
1529
  try {
1516
1530
  controller.enqueue(
1517
1531
  Buffer.from(JSON.stringify(chunk))
@@ -1521,10 +1535,7 @@ var handleFile = (response, set2) => {
1521
1535
  Buffer.from(chunk.toString())
1522
1536
  );
1523
1537
  }
1524
- else
1525
- controller.enqueue(
1526
- Buffer.from(chunk.toString())
1527
- );
1538
+ else controller.enqueue(Buffer.from(chunk.toString()));
1528
1539
  await new Promise(
1529
1540
  (resolve) => setTimeout(() => resolve(), 0)
1530
1541
  );
@@ -1537,7 +1548,7 @@ var handleFile = (response, set2) => {
1537
1548
  }
1538
1549
  }),
1539
1550
  set2
1540
- ));
1551
+ );
1541
1552
  };
1542
1553
  async function* streamResponse(response) {
1543
1554
  let body = response.body;
@@ -2,6 +2,9 @@
2
2
  import { parse, serialize } from "cookie";
3
3
  import decode from "fast-decode-uri-component";
4
4
 
5
+ // src/universal/utils.ts
6
+ var isBun = typeof Bun < "u";
7
+
5
8
  // src/utils.ts
6
9
  var hasHeaderShorthand = "toJSON" in new Headers();
7
10
  var primitiveHooks = [
@@ -97,7 +100,7 @@ var encoder = new TextEncoder();
97
100
  var ELYSIA_FORM_DATA = Symbol("ElysiaFormData"), ELYSIA_REQUEST_ID = Symbol("ElysiaRequestId");
98
101
  var isNotEmpty = (obj) => {
99
102
  if (!obj) return !1;
100
- for (let x in obj) return !0;
103
+ for (let _ in obj) return !0;
101
104
  return !1;
102
105
  };
103
106
  var supportPerMethodInlineHandler = (() => {
@@ -250,6 +253,8 @@ var serializeCookie = (cookies) => {
250
253
 
251
254
  // src/adapter/utils.ts
252
255
  var handleFile = (response, set2) => {
256
+ if (!isBun && response instanceof Promise)
257
+ return response.then((res) => handleFile(res, set2));
253
258
  let size = response.size;
254
259
  if (!set2 && size || size && set2 && set2.status !== 206 && set2.status !== 304 && set2.status !== 412 && set2.status !== 416) {
255
260
  if (set2) {
@@ -333,11 +338,19 @@ var handleFile = (response, set2) => {
333
338
  return set2;
334
339
  }, createStreamHandler = ({ mapResponse: mapResponse2, mapCompactResponse: mapCompactResponse2 }) => async (generator, set2, request) => {
335
340
  let init = generator.next();
336
- return init instanceof Promise && (init = await init), init.done ? set2 ? mapResponse2(init.value, set2, request) : mapCompactResponse2(init.value, request) : (set2?.headers ? (set2.headers["transfer-encoding"] || (set2.headers["transfer-encoding"] = "chunked"), set2.headers["content-type"] || (set2.headers["content-type"] = "text/event-stream; charset=utf-8")) : set2 = {
341
+ if (init instanceof Promise && (init = await init), typeof init?.done > "u" || init?.done)
342
+ return set2 ? mapResponse2(init.value, set2, request) : mapCompactResponse2(init.value, request);
343
+ let contentType = (
344
+ // @ts-ignore
345
+ init.value && typeof init.value?.stream ? "text/event-stream" : init.value && typeof init.value == "object" ? "application/json" : "text/plain"
346
+ );
347
+ return set2?.headers ? (set2.headers["transfer-encoding"] || (set2.headers["transfer-encoding"] = "chunked"), set2.headers["content-type"] || (set2.headers["content-type"] = contentType), set2.headers["cache-control"] || (set2.headers["cache-control"] = "no-cache")) : set2 = {
337
348
  status: 200,
338
349
  headers: {
339
- "content-type": "text/event-stream; charset=utf-8",
340
- "transfer-encoding": "chunked"
350
+ "content-type": contentType,
351
+ "transfer-encoding": "chunked",
352
+ "cache-control": "no-cache",
353
+ connection: "keep-alive"
341
354
  }
342
355
  }, new Response(
343
356
  new ReadableStream({
@@ -350,7 +363,9 @@ var handleFile = (response, set2) => {
350
363
  } catch {
351
364
  }
352
365
  }), init.value !== void 0 && init.value !== null)
353
- if (typeof init.value == "object")
366
+ if (init.value.toStream)
367
+ controller.enqueue(init.value.toStream());
368
+ else if (typeof init.value == "object")
354
369
  try {
355
370
  controller.enqueue(
356
371
  Buffer.from(JSON.stringify(init.value))
@@ -367,7 +382,9 @@ var handleFile = (response, set2) => {
367
382
  for await (let chunk of generator) {
368
383
  if (end) break;
369
384
  if (chunk != null) {
370
- if (typeof chunk == "object")
385
+ if (chunk.toStream)
386
+ controller.enqueue(chunk.toStream());
387
+ else if (typeof chunk == "object")
371
388
  try {
372
389
  controller.enqueue(
373
390
  Buffer.from(JSON.stringify(chunk))
@@ -377,10 +394,7 @@ var handleFile = (response, set2) => {
377
394
  Buffer.from(chunk.toString())
378
395
  );
379
396
  }
380
- else
381
- controller.enqueue(
382
- Buffer.from(chunk.toString())
383
- );
397
+ else controller.enqueue(Buffer.from(chunk.toString()));
384
398
  await new Promise(
385
399
  (resolve) => setTimeout(() => resolve(), 0)
386
400
  );
@@ -393,7 +407,7 @@ var handleFile = (response, set2) => {
393
407
  }
394
408
  }),
395
409
  set2
396
- ));
410
+ );
397
411
  };
398
412
  async function* streamResponse(response) {
399
413
  let body = response.body;
@@ -2,6 +2,9 @@
2
2
  import { parse, serialize } from "cookie";
3
3
  import decode from "fast-decode-uri-component";
4
4
 
5
+ // src/universal/utils.ts
6
+ var isBun = typeof Bun < "u";
7
+
5
8
  // src/utils.ts
6
9
  var hasHeaderShorthand = "toJSON" in new Headers();
7
10
  var primitiveHooks = [
@@ -97,7 +100,7 @@ var encoder = new TextEncoder();
97
100
  var ELYSIA_FORM_DATA = Symbol("ElysiaFormData"), ELYSIA_REQUEST_ID = Symbol("ElysiaRequestId");
98
101
  var isNotEmpty = (obj) => {
99
102
  if (!obj) return !1;
100
- for (let x in obj) return !0;
103
+ for (let _ in obj) return !0;
101
104
  return !1;
102
105
  };
103
106
  var supportPerMethodInlineHandler = (() => {
@@ -250,6 +253,8 @@ var serializeCookie = (cookies) => {
250
253
 
251
254
  // src/adapter/utils.ts
252
255
  var handleFile = (response, set2) => {
256
+ if (!isBun && response instanceof Promise)
257
+ return response.then((res) => handleFile(res, set2));
253
258
  let size = response.size;
254
259
  if (!set2 && size || size && set2 && set2.status !== 206 && set2.status !== 304 && set2.status !== 412 && set2.status !== 416) {
255
260
  if (set2) {
@@ -333,11 +338,19 @@ var handleFile = (response, set2) => {
333
338
  return set2;
334
339
  }, createStreamHandler = ({ mapResponse: mapResponse2, mapCompactResponse: mapCompactResponse2 }) => async (generator, set2, request) => {
335
340
  let init = generator.next();
336
- return init instanceof Promise && (init = await init), init.done ? set2 ? mapResponse2(init.value, set2, request) : mapCompactResponse2(init.value, request) : (set2?.headers ? (set2.headers["transfer-encoding"] || (set2.headers["transfer-encoding"] = "chunked"), set2.headers["content-type"] || (set2.headers["content-type"] = "text/event-stream; charset=utf-8")) : set2 = {
341
+ if (init instanceof Promise && (init = await init), typeof init?.done > "u" || init?.done)
342
+ return set2 ? mapResponse2(init.value, set2, request) : mapCompactResponse2(init.value, request);
343
+ let contentType = (
344
+ // @ts-ignore
345
+ init.value && typeof init.value?.stream ? "text/event-stream" : init.value && typeof init.value == "object" ? "application/json" : "text/plain"
346
+ );
347
+ return set2?.headers ? (set2.headers["transfer-encoding"] || (set2.headers["transfer-encoding"] = "chunked"), set2.headers["content-type"] || (set2.headers["content-type"] = contentType), set2.headers["cache-control"] || (set2.headers["cache-control"] = "no-cache")) : set2 = {
337
348
  status: 200,
338
349
  headers: {
339
- "content-type": "text/event-stream; charset=utf-8",
340
- "transfer-encoding": "chunked"
350
+ "content-type": contentType,
351
+ "transfer-encoding": "chunked",
352
+ "cache-control": "no-cache",
353
+ connection: "keep-alive"
341
354
  }
342
355
  }, new Response(
343
356
  new ReadableStream({
@@ -350,7 +363,9 @@ var handleFile = (response, set2) => {
350
363
  } catch {
351
364
  }
352
365
  }), init.value !== void 0 && init.value !== null)
353
- if (typeof init.value == "object")
366
+ if (init.value.toStream)
367
+ controller.enqueue(init.value.toStream());
368
+ else if (typeof init.value == "object")
354
369
  try {
355
370
  controller.enqueue(
356
371
  Buffer.from(JSON.stringify(init.value))
@@ -367,7 +382,9 @@ var handleFile = (response, set2) => {
367
382
  for await (let chunk of generator) {
368
383
  if (end) break;
369
384
  if (chunk != null) {
370
- if (typeof chunk == "object")
385
+ if (chunk.toStream)
386
+ controller.enqueue(chunk.toStream());
387
+ else if (typeof chunk == "object")
371
388
  try {
372
389
  controller.enqueue(
373
390
  Buffer.from(JSON.stringify(chunk))
@@ -377,10 +394,7 @@ var handleFile = (response, set2) => {
377
394
  Buffer.from(chunk.toString())
378
395
  );
379
396
  }
380
- else
381
- controller.enqueue(
382
- Buffer.from(chunk.toString())
383
- );
397
+ else controller.enqueue(Buffer.from(chunk.toString()));
384
398
  await new Promise(
385
399
  (resolve) => setTimeout(() => resolve(), 0)
386
400
  );
@@ -393,7 +407,7 @@ var handleFile = (response, set2) => {
393
407
  }
394
408
  }),
395
409
  set2
396
- ));
410
+ );
397
411
  };
398
412
  async function* streamResponse(response) {
399
413
  let body = response.body;
@@ -240,7 +240,7 @@ var redirect = (url, status2 = 302) => Response.redirect(url, status2), ELYSIA_F
240
240
  };
241
241
  var isNotEmpty = (obj) => {
242
242
  if (!obj) return !1;
243
- for (let x in obj) return !0;
243
+ for (let _ in obj) return !0;
244
244
  return !1;
245
245
  };
246
246
  var supportPerMethodInlineHandler = (() => {
@@ -519,6 +519,8 @@ var serializeCookie = (cookies) => {
519
519
 
520
520
  // src/adapter/utils.ts
521
521
  var handleFile = (response, set2) => {
522
+ if (!isBun && response instanceof Promise)
523
+ return response.then((res) => handleFile(res, set2));
522
524
  let size = response.size;
523
525
  if (!set2 && size || size && set2 && set2.status !== 206 && set2.status !== 304 && set2.status !== 412 && set2.status !== 416) {
524
526
  if (set2) {
@@ -602,11 +604,19 @@ var handleFile = (response, set2) => {
602
604
  return set2;
603
605
  }, createStreamHandler = ({ mapResponse: mapResponse3, mapCompactResponse: mapCompactResponse3 }) => async (generator, set2, request) => {
604
606
  let init = generator.next();
605
- return init instanceof Promise && (init = await init), init.done ? set2 ? mapResponse3(init.value, set2, request) : mapCompactResponse3(init.value, request) : (set2?.headers ? (set2.headers["transfer-encoding"] || (set2.headers["transfer-encoding"] = "chunked"), set2.headers["content-type"] || (set2.headers["content-type"] = "text/event-stream; charset=utf-8")) : set2 = {
607
+ if (init instanceof Promise && (init = await init), typeof init?.done > "u" || init?.done)
608
+ return set2 ? mapResponse3(init.value, set2, request) : mapCompactResponse3(init.value, request);
609
+ let contentType = (
610
+ // @ts-ignore
611
+ init.value && typeof init.value?.stream ? "text/event-stream" : init.value && typeof init.value == "object" ? "application/json" : "text/plain"
612
+ );
613
+ return set2?.headers ? (set2.headers["transfer-encoding"] || (set2.headers["transfer-encoding"] = "chunked"), set2.headers["content-type"] || (set2.headers["content-type"] = contentType), set2.headers["cache-control"] || (set2.headers["cache-control"] = "no-cache")) : set2 = {
606
614
  status: 200,
607
615
  headers: {
608
- "content-type": "text/event-stream; charset=utf-8",
609
- "transfer-encoding": "chunked"
616
+ "content-type": contentType,
617
+ "transfer-encoding": "chunked",
618
+ "cache-control": "no-cache",
619
+ connection: "keep-alive"
610
620
  }
611
621
  }, new Response(
612
622
  new ReadableStream({
@@ -619,7 +629,9 @@ var handleFile = (response, set2) => {
619
629
  } catch {
620
630
  }
621
631
  }), init.value !== void 0 && init.value !== null)
622
- if (typeof init.value == "object")
632
+ if (init.value.toStream)
633
+ controller.enqueue(init.value.toStream());
634
+ else if (typeof init.value == "object")
623
635
  try {
624
636
  controller.enqueue(
625
637
  Buffer.from(JSON.stringify(init.value))
@@ -636,7 +648,9 @@ var handleFile = (response, set2) => {
636
648
  for await (let chunk of generator) {
637
649
  if (end) break;
638
650
  if (chunk != null) {
639
- if (typeof chunk == "object")
651
+ if (chunk.toStream)
652
+ controller.enqueue(chunk.toStream());
653
+ else if (typeof chunk == "object")
640
654
  try {
641
655
  controller.enqueue(
642
656
  Buffer.from(JSON.stringify(chunk))
@@ -646,10 +660,7 @@ var handleFile = (response, set2) => {
646
660
  Buffer.from(chunk.toString())
647
661
  );
648
662
  }
649
- else
650
- controller.enqueue(
651
- Buffer.from(chunk.toString())
652
- );
663
+ else controller.enqueue(Buffer.from(chunk.toString()));
653
664
  await new Promise(
654
665
  (resolve) => setTimeout(() => resolve(), 0)
655
666
  );
@@ -662,7 +673,7 @@ var handleFile = (response, set2) => {
662
673
  }
663
674
  }),
664
675
  set2
665
- ));
676
+ );
666
677
  };
667
678
  async function* streamResponse(response) {
668
679
  let body = response.body;
@@ -3,7 +3,7 @@ import type { Context } from '../context';
3
3
  export declare const handleFile: (response: File | Blob, set?: Context["set"]) => Response;
4
4
  export declare const parseSetCookies: (headers: Headers, setCookie: string[]) => Headers;
5
5
  export declare const responseToSetHeaders: (response: Response, set?: Context["set"]) => {
6
- headers: import("../types").HTTPHeaders;
6
+ headers: import("..").HTTPHeaders;
7
7
  status?: number | keyof StatusMap;
8
8
  redirect?: string;
9
9
  cookie?: Record<string, import("../cookies").ElysiaCookie>;
@@ -2,6 +2,9 @@
2
2
  import { parse, serialize } from "cookie";
3
3
  import decode from "fast-decode-uri-component";
4
4
 
5
+ // src/universal/utils.ts
6
+ var isBun = typeof Bun < "u";
7
+
5
8
  // src/utils.ts
6
9
  var hasHeaderShorthand = "toJSON" in new Headers();
7
10
  var primitiveHooks = [
@@ -97,7 +100,7 @@ var encoder = new TextEncoder();
97
100
  var ELYSIA_FORM_DATA = Symbol("ElysiaFormData"), ELYSIA_REQUEST_ID = Symbol("ElysiaRequestId");
98
101
  var isNotEmpty = (obj) => {
99
102
  if (!obj) return !1;
100
- for (let x in obj) return !0;
103
+ for (let _ in obj) return !0;
101
104
  return !1;
102
105
  };
103
106
  var supportPerMethodInlineHandler = (() => {
@@ -131,6 +134,8 @@ var serializeCookie = (cookies) => {
131
134
 
132
135
  // src/adapter/utils.ts
133
136
  var handleFile = (response, set) => {
137
+ if (!isBun && response instanceof Promise)
138
+ return response.then((res) => handleFile(res, set));
134
139
  let size = response.size;
135
140
  if (!set && size || size && set && set.status !== 206 && set.status !== 304 && set.status !== 412 && set.status !== 416) {
136
141
  if (set) {
@@ -214,11 +219,19 @@ var handleFile = (response, set) => {
214
219
  return set;
215
220
  }, createStreamHandler = ({ mapResponse, mapCompactResponse }) => async (generator, set, request) => {
216
221
  let init = generator.next();
217
- return init instanceof Promise && (init = await init), init.done ? set ? mapResponse(init.value, set, request) : mapCompactResponse(init.value, request) : (set?.headers ? (set.headers["transfer-encoding"] || (set.headers["transfer-encoding"] = "chunked"), set.headers["content-type"] || (set.headers["content-type"] = "text/event-stream; charset=utf-8")) : set = {
222
+ if (init instanceof Promise && (init = await init), typeof init?.done > "u" || init?.done)
223
+ return set ? mapResponse(init.value, set, request) : mapCompactResponse(init.value, request);
224
+ let contentType = (
225
+ // @ts-ignore
226
+ init.value && typeof init.value?.stream ? "text/event-stream" : init.value && typeof init.value == "object" ? "application/json" : "text/plain"
227
+ );
228
+ return set?.headers ? (set.headers["transfer-encoding"] || (set.headers["transfer-encoding"] = "chunked"), set.headers["content-type"] || (set.headers["content-type"] = contentType), set.headers["cache-control"] || (set.headers["cache-control"] = "no-cache")) : set = {
218
229
  status: 200,
219
230
  headers: {
220
- "content-type": "text/event-stream; charset=utf-8",
221
- "transfer-encoding": "chunked"
231
+ "content-type": contentType,
232
+ "transfer-encoding": "chunked",
233
+ "cache-control": "no-cache",
234
+ connection: "keep-alive"
222
235
  }
223
236
  }, new Response(
224
237
  new ReadableStream({
@@ -231,7 +244,9 @@ var handleFile = (response, set) => {
231
244
  } catch {
232
245
  }
233
246
  }), init.value !== void 0 && init.value !== null)
234
- if (typeof init.value == "object")
247
+ if (init.value.toStream)
248
+ controller.enqueue(init.value.toStream());
249
+ else if (typeof init.value == "object")
235
250
  try {
236
251
  controller.enqueue(
237
252
  Buffer.from(JSON.stringify(init.value))
@@ -248,7 +263,9 @@ var handleFile = (response, set) => {
248
263
  for await (let chunk of generator) {
249
264
  if (end) break;
250
265
  if (chunk != null) {
251
- if (typeof chunk == "object")
266
+ if (chunk.toStream)
267
+ controller.enqueue(chunk.toStream());
268
+ else if (typeof chunk == "object")
252
269
  try {
253
270
  controller.enqueue(
254
271
  Buffer.from(JSON.stringify(chunk))
@@ -258,10 +275,7 @@ var handleFile = (response, set) => {
258
275
  Buffer.from(chunk.toString())
259
276
  );
260
277
  }
261
- else
262
- controller.enqueue(
263
- Buffer.from(chunk.toString())
264
- );
278
+ else controller.enqueue(Buffer.from(chunk.toString()));
265
279
  await new Promise(
266
280
  (resolve) => setTimeout(() => resolve(), 0)
267
281
  );
@@ -274,7 +288,7 @@ var handleFile = (response, set) => {
274
288
  }
275
289
  }),
276
290
  set
277
- ));
291
+ );
278
292
  };
279
293
  async function* streamResponse(response) {
280
294
  let body = response.body;
@@ -2,6 +2,9 @@
2
2
  import { parse, serialize } from "cookie";
3
3
  import decode from "fast-decode-uri-component";
4
4
 
5
+ // src/universal/utils.ts
6
+ var isBun = typeof Bun < "u";
7
+
5
8
  // src/utils.ts
6
9
  var hasHeaderShorthand = "toJSON" in new Headers();
7
10
  var primitiveHooks = [
@@ -97,7 +100,7 @@ var encoder = new TextEncoder();
97
100
  var ELYSIA_FORM_DATA = Symbol("ElysiaFormData"), ELYSIA_REQUEST_ID = Symbol("ElysiaRequestId");
98
101
  var isNotEmpty = (obj) => {
99
102
  if (!obj) return !1;
100
- for (let x in obj) return !0;
103
+ for (let _ in obj) return !0;
101
104
  return !1;
102
105
  };
103
106
  var supportPerMethodInlineHandler = (() => {
@@ -250,6 +253,8 @@ var serializeCookie = (cookies) => {
250
253
 
251
254
  // src/adapter/utils.ts
252
255
  var handleFile = (response, set2) => {
256
+ if (!isBun && response instanceof Promise)
257
+ return response.then((res) => handleFile(res, set2));
253
258
  let size = response.size;
254
259
  if (!set2 && size || size && set2 && set2.status !== 206 && set2.status !== 304 && set2.status !== 412 && set2.status !== 416) {
255
260
  if (set2) {
@@ -333,11 +338,19 @@ var handleFile = (response, set2) => {
333
338
  return set2;
334
339
  }, createStreamHandler = ({ mapResponse: mapResponse2, mapCompactResponse: mapCompactResponse2 }) => async (generator, set2, request) => {
335
340
  let init = generator.next();
336
- return init instanceof Promise && (init = await init), init.done ? set2 ? mapResponse2(init.value, set2, request) : mapCompactResponse2(init.value, request) : (set2?.headers ? (set2.headers["transfer-encoding"] || (set2.headers["transfer-encoding"] = "chunked"), set2.headers["content-type"] || (set2.headers["content-type"] = "text/event-stream; charset=utf-8")) : set2 = {
341
+ if (init instanceof Promise && (init = await init), typeof init?.done > "u" || init?.done)
342
+ return set2 ? mapResponse2(init.value, set2, request) : mapCompactResponse2(init.value, request);
343
+ let contentType = (
344
+ // @ts-ignore
345
+ init.value && typeof init.value?.stream ? "text/event-stream" : init.value && typeof init.value == "object" ? "application/json" : "text/plain"
346
+ );
347
+ return set2?.headers ? (set2.headers["transfer-encoding"] || (set2.headers["transfer-encoding"] = "chunked"), set2.headers["content-type"] || (set2.headers["content-type"] = contentType), set2.headers["cache-control"] || (set2.headers["cache-control"] = "no-cache")) : set2 = {
337
348
  status: 200,
338
349
  headers: {
339
- "content-type": "text/event-stream; charset=utf-8",
340
- "transfer-encoding": "chunked"
350
+ "content-type": contentType,
351
+ "transfer-encoding": "chunked",
352
+ "cache-control": "no-cache",
353
+ connection: "keep-alive"
341
354
  }
342
355
  }, new Response(
343
356
  new ReadableStream({
@@ -350,7 +363,9 @@ var handleFile = (response, set2) => {
350
363
  } catch {
351
364
  }
352
365
  }), init.value !== void 0 && init.value !== null)
353
- if (typeof init.value == "object")
366
+ if (init.value.toStream)
367
+ controller.enqueue(init.value.toStream());
368
+ else if (typeof init.value == "object")
354
369
  try {
355
370
  controller.enqueue(
356
371
  Buffer.from(JSON.stringify(init.value))
@@ -367,7 +382,9 @@ var handleFile = (response, set2) => {
367
382
  for await (let chunk of generator) {
368
383
  if (end) break;
369
384
  if (chunk != null) {
370
- if (typeof chunk == "object")
385
+ if (chunk.toStream)
386
+ controller.enqueue(chunk.toStream());
387
+ else if (typeof chunk == "object")
371
388
  try {
372
389
  controller.enqueue(
373
390
  Buffer.from(JSON.stringify(chunk))
@@ -377,10 +394,7 @@ var handleFile = (response, set2) => {
377
394
  Buffer.from(chunk.toString())
378
395
  );
379
396
  }
380
- else
381
- controller.enqueue(
382
- Buffer.from(chunk.toString())
383
- );
397
+ else controller.enqueue(Buffer.from(chunk.toString()));
384
398
  await new Promise(
385
399
  (resolve) => setTimeout(() => resolve(), 0)
386
400
  );
@@ -393,7 +407,7 @@ var handleFile = (response, set2) => {
393
407
  }
394
408
  }),
395
409
  set2
396
- ));
410
+ );
397
411
  };
398
412
  async function* streamResponse(response) {
399
413
  let body = response.body;
@@ -2,6 +2,9 @@
2
2
  import { parse, serialize } from "cookie";
3
3
  import decode from "fast-decode-uri-component";
4
4
 
5
+ // src/universal/utils.ts
6
+ var isBun = typeof Bun < "u";
7
+
5
8
  // src/utils.ts
6
9
  var hasHeaderShorthand = "toJSON" in new Headers();
7
10
  var primitiveHooks = [
@@ -97,7 +100,7 @@ var encoder = new TextEncoder();
97
100
  var ELYSIA_FORM_DATA = Symbol("ElysiaFormData"), ELYSIA_REQUEST_ID = Symbol("ElysiaRequestId");
98
101
  var isNotEmpty = (obj) => {
99
102
  if (!obj) return !1;
100
- for (let x in obj) return !0;
103
+ for (let _ in obj) return !0;
101
104
  return !1;
102
105
  };
103
106
  var supportPerMethodInlineHandler = (() => {
@@ -250,6 +253,8 @@ var serializeCookie = (cookies) => {
250
253
 
251
254
  // src/adapter/utils.ts
252
255
  var handleFile = (response, set2) => {
256
+ if (!isBun && response instanceof Promise)
257
+ return response.then((res) => handleFile(res, set2));
253
258
  let size = response.size;
254
259
  if (!set2 && size || size && set2 && set2.status !== 206 && set2.status !== 304 && set2.status !== 412 && set2.status !== 416) {
255
260
  if (set2) {
@@ -333,11 +338,19 @@ var handleFile = (response, set2) => {
333
338
  return set2;
334
339
  }, createStreamHandler = ({ mapResponse: mapResponse2, mapCompactResponse: mapCompactResponse2 }) => async (generator, set2, request) => {
335
340
  let init = generator.next();
336
- return init instanceof Promise && (init = await init), init.done ? set2 ? mapResponse2(init.value, set2, request) : mapCompactResponse2(init.value, request) : (set2?.headers ? (set2.headers["transfer-encoding"] || (set2.headers["transfer-encoding"] = "chunked"), set2.headers["content-type"] || (set2.headers["content-type"] = "text/event-stream; charset=utf-8")) : set2 = {
341
+ if (init instanceof Promise && (init = await init), typeof init?.done > "u" || init?.done)
342
+ return set2 ? mapResponse2(init.value, set2, request) : mapCompactResponse2(init.value, request);
343
+ let contentType = (
344
+ // @ts-ignore
345
+ init.value && typeof init.value?.stream ? "text/event-stream" : init.value && typeof init.value == "object" ? "application/json" : "text/plain"
346
+ );
347
+ return set2?.headers ? (set2.headers["transfer-encoding"] || (set2.headers["transfer-encoding"] = "chunked"), set2.headers["content-type"] || (set2.headers["content-type"] = contentType), set2.headers["cache-control"] || (set2.headers["cache-control"] = "no-cache")) : set2 = {
337
348
  status: 200,
338
349
  headers: {
339
- "content-type": "text/event-stream; charset=utf-8",
340
- "transfer-encoding": "chunked"
350
+ "content-type": contentType,
351
+ "transfer-encoding": "chunked",
352
+ "cache-control": "no-cache",
353
+ connection: "keep-alive"
341
354
  }
342
355
  }, new Response(
343
356
  new ReadableStream({
@@ -350,7 +363,9 @@ var handleFile = (response, set2) => {
350
363
  } catch {
351
364
  }
352
365
  }), init.value !== void 0 && init.value !== null)
353
- if (typeof init.value == "object")
366
+ if (init.value.toStream)
367
+ controller.enqueue(init.value.toStream());
368
+ else if (typeof init.value == "object")
354
369
  try {
355
370
  controller.enqueue(
356
371
  Buffer.from(JSON.stringify(init.value))
@@ -367,7 +382,9 @@ var handleFile = (response, set2) => {
367
382
  for await (let chunk of generator) {
368
383
  if (end) break;
369
384
  if (chunk != null) {
370
- if (typeof chunk == "object")
385
+ if (chunk.toStream)
386
+ controller.enqueue(chunk.toStream());
387
+ else if (typeof chunk == "object")
371
388
  try {
372
389
  controller.enqueue(
373
390
  Buffer.from(JSON.stringify(chunk))
@@ -377,10 +394,7 @@ var handleFile = (response, set2) => {
377
394
  Buffer.from(chunk.toString())
378
395
  );
379
396
  }
380
- else
381
- controller.enqueue(
382
- Buffer.from(chunk.toString())
383
- );
397
+ else controller.enqueue(Buffer.from(chunk.toString()));
384
398
  await new Promise(
385
399
  (resolve) => setTimeout(() => resolve(), 0)
386
400
  );
@@ -393,7 +407,7 @@ var handleFile = (response, set2) => {
393
407
  }
394
408
  }),
395
409
  set2
396
- ));
410
+ );
397
411
  };
398
412
  async function* streamResponse(response) {
399
413
  let body = response.body;
@@ -1814,9 +1814,9 @@ export { serializeCookie, Cookie, type CookieOptions } from './cookies';
1814
1814
  export type { Context, PreContext, ErrorContext } from './context';
1815
1815
  export { ELYSIA_TRACE, type TraceEvent, type TraceListener, type TraceHandler, type TraceProcess, type TraceStream } from './trace';
1816
1816
  export { getSchemaValidator, getResponseSchemaValidator, replaceSchemaType } from './schema';
1817
- export { mergeHook, mergeObjectArray, redirect, StatusMap, InvertedStatusMap, form, replaceUrlPath, checksum, cloneInference, deduplicateChecksum, ELYSIA_FORM_DATA, ELYSIA_REQUEST_ID } from './utils';
1817
+ export { mergeHook, mergeObjectArray, redirect, StatusMap, InvertedStatusMap, form, replaceUrlPath, checksum, cloneInference, deduplicateChecksum, ELYSIA_FORM_DATA, ELYSIA_REQUEST_ID, sse } from './utils';
1818
1818
  export { status, error, mapValueError, ParseError, NotFoundError, ValidationError, InternalServerError, InvalidCookieSignature, ERROR_CODE } from './error';
1819
- export type { EphemeralType, CreateEden, ComposeElysiaResponse, ElysiaConfig, SingletonBase, DefinitionBase, RouteBase, Handler, ComposedHandler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, SchemaValidator, VoidHandler, PreHandler, BodyHandler, OptionalHandler, AfterResponseHandler, ErrorHandler, LifeCycleEvent, LifeCycleStore, LifeCycleType, MaybePromise, UnwrapSchema, Checksum, DocumentDecoration, InferContext, InferHandler, ResolvePath, MapResponse, MacroQueue, BaseMacro, MacroManager, BaseMacroFn, MacroToProperty, ResolveMacroContext, MergeElysiaInstances, MaybeArray, ModelValidator, MetadataBase, UnwrapBodySchema, UnwrapGroupGuardRoute, ModelValidatorError, ExcludeElysiaResponse, CoExist } from './types';
1819
+ export type { EphemeralType, CreateEden, ComposeElysiaResponse, ElysiaConfig, SingletonBase, DefinitionBase, RouteBase, Handler, ComposedHandler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, SchemaValidator, VoidHandler, PreHandler, BodyHandler, OptionalHandler, AfterResponseHandler, ErrorHandler, LifeCycleEvent, LifeCycleStore, LifeCycleType, MaybePromise, UnwrapSchema, Checksum, DocumentDecoration, InferContext, InferHandler, ResolvePath, MapResponse, MacroQueue, BaseMacro, MacroManager, BaseMacroFn, MacroToProperty, ResolveMacroContext, MergeElysiaInstances, MaybeArray, ModelValidator, MetadataBase, UnwrapBodySchema, UnwrapGroupGuardRoute, ModelValidatorError, ExcludeElysiaResponse, SSEPayload, StandaloneInputSchema, MergeStandaloneSchema, MergeTypeModule, GracefulHandler, AfterHandler, InlineHandler, ResolveHandler, TransformHandler, HTTPHeaders } from './types';
1820
1820
  export { env } from './universal/env';
1821
1821
  export { file, ElysiaFile } from './universal/file';
1822
1822
  export type { ElysiaAdapter } from './adapter';