elysia 1.3.15 → 1.3.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.
@@ -628,14 +628,21 @@ var handleFile = (response, set2) => {
628
628
  for (let [key, value] of response.headers.entries())
629
629
  key !== "content-encoding" && key in set2.headers && (set2.headers[key] = value);
630
630
  return set2;
631
- }, createStreamHandler = ({ mapResponse: mapResponse2, mapCompactResponse: mapCompactResponse2 }) => async (generator, set2, request) => {
632
- let init = generator.next();
633
- if (init instanceof Promise && (init = await init), typeof init?.done > "u" || init?.done)
631
+ };
632
+ var createStreamHandler = ({ mapResponse: mapResponse2, mapCompactResponse: mapCompactResponse2 }) => async (generator, set2, request) => {
633
+ let init = generator.next?.();
634
+ if (init instanceof Promise && (init = await init), init?.value instanceof ReadableStream)
635
+ generator = init.value;
636
+ else if (init && (typeof init?.done > "u" || init?.done))
634
637
  return set2 ? mapResponse2(init.value, set2, request) : mapCompactResponse2(init.value, request);
635
- let contentType = (
636
- // @ts-ignore
637
- init.value && typeof init.value?.stream ? "text/event-stream" : init.value && typeof init.value == "object" ? "application/json" : "text/plain"
638
- );
638
+ let isSSE = (
639
+ // @ts-ignore First SSE result is wrapped with sse()
640
+ init?.value?.sse ?? // @ts-ignore ReadableStream is wrapped with sse()
641
+ generator?.sse ?? // User explicitly set content-type to SSE
642
+ set2?.headers["content-type"]?.startsWith("text/event-stream")
643
+ ), format = isSSE ? (data) => `data: ${data}
644
+
645
+ ` : (data) => data, contentType = isSSE ? "text/event-stream" : init?.value && typeof init?.value == "object" ? "application/json" : "text/plain";
639
646
  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 = {
640
647
  status: 200,
641
648
  headers: {
@@ -654,43 +661,44 @@ var handleFile = (response, set2) => {
654
661
  controller.close();
655
662
  } catch {
656
663
  }
657
- }), init.value !== void 0 && init.value !== null)
658
- if (init.value.toStream)
659
- controller.enqueue(init.value.toStream());
660
- else if (typeof init.value == "object")
661
- try {
662
- controller.enqueue(
663
- Buffer.from(JSON.stringify(init.value))
664
- );
665
- } catch {
666
- controller.enqueue(
667
- Buffer.from(init.value.toString())
668
- );
669
- }
670
- else
671
- controller.enqueue(
672
- Buffer.from(init.value.toString())
673
- );
674
- for await (let chunk of generator) {
675
- if (end) break;
676
- if (chunk != null) {
677
- if (chunk.toStream)
678
- controller.enqueue(chunk.toStream());
679
- else if (typeof chunk == "object")
664
+ }), !(!init || init.value instanceof ReadableStream)) {
665
+ if (init.value !== void 0 && init.value !== null)
666
+ if (init.value.toSSE)
667
+ controller.enqueue(init.value.toSSE());
668
+ else if (typeof init.value == "object")
680
669
  try {
681
670
  controller.enqueue(
682
- Buffer.from(JSON.stringify(chunk))
671
+ format(JSON.stringify(init.value))
683
672
  );
684
673
  } catch {
685
674
  controller.enqueue(
686
- Buffer.from(chunk.toString())
675
+ format(init.value.toString())
687
676
  );
688
677
  }
689
- else controller.enqueue(Buffer.from(chunk.toString()));
690
- await new Promise(
691
- (resolve) => setTimeout(() => resolve(), 0)
692
- );
678
+ else controller.enqueue(format(init.value.toString()));
679
+ }
680
+ try {
681
+ for await (let chunk of generator) {
682
+ if (end) break;
683
+ if (chunk != null) {
684
+ if (chunk.toSSE)
685
+ controller.enqueue(chunk.toSSE());
686
+ else if (typeof chunk == "object")
687
+ try {
688
+ controller.enqueue(
689
+ format(JSON.stringify(chunk))
690
+ );
691
+ } catch {
692
+ controller.enqueue(format(chunk.toString()));
693
+ }
694
+ else controller.enqueue(format(chunk.toString()));
695
+ await new Promise(
696
+ (resolve) => setTimeout(() => resolve(), 0)
697
+ );
698
+ }
693
699
  }
700
+ } catch (error) {
701
+ console.warn(error);
694
702
  }
695
703
  try {
696
704
  controller.close();
@@ -709,7 +717,7 @@ async function* streamResponse(response) {
709
717
  for (; ; ) {
710
718
  let { done, value } = await reader.read();
711
719
  if (done) break;
712
- yield decoder.decode(value);
720
+ typeof value == "string" ? yield value : yield decoder.decode(value);
713
721
  }
714
722
  } finally {
715
723
  reader.releaseLock();
@@ -642,14 +642,21 @@ var handleFile = (response, set2) => {
642
642
  for (let [key, value] of response.headers.entries())
643
643
  key !== "content-encoding" && key in set2.headers && (set2.headers[key] = value);
644
644
  return set2;
645
- }, createStreamHandler = ({ mapResponse: mapResponse3, mapCompactResponse: mapCompactResponse3 }) => async (generator, set2, request) => {
646
- let init = generator.next();
647
- if (init instanceof Promise && (init = await init), typeof init?.done > "u" || init?.done)
645
+ };
646
+ var createStreamHandler = ({ mapResponse: mapResponse3, mapCompactResponse: mapCompactResponse3 }) => async (generator, set2, request) => {
647
+ let init = generator.next?.();
648
+ if (init instanceof Promise && (init = await init), init?.value instanceof ReadableStream)
649
+ generator = init.value;
650
+ else if (init && (typeof init?.done > "u" || init?.done))
648
651
  return set2 ? mapResponse3(init.value, set2, request) : mapCompactResponse3(init.value, request);
649
- let contentType = (
650
- // @ts-ignore
651
- init.value && typeof init.value?.stream ? "text/event-stream" : init.value && typeof init.value == "object" ? "application/json" : "text/plain"
652
- );
652
+ let isSSE = (
653
+ // @ts-ignore First SSE result is wrapped with sse()
654
+ init?.value?.sse ?? // @ts-ignore ReadableStream is wrapped with sse()
655
+ generator?.sse ?? // User explicitly set content-type to SSE
656
+ set2?.headers["content-type"]?.startsWith("text/event-stream")
657
+ ), format = isSSE ? (data) => `data: ${data}
658
+
659
+ ` : (data) => data, contentType = isSSE ? "text/event-stream" : init?.value && typeof init?.value == "object" ? "application/json" : "text/plain";
653
660
  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 = {
654
661
  status: 200,
655
662
  headers: {
@@ -668,43 +675,44 @@ var handleFile = (response, set2) => {
668
675
  controller.close();
669
676
  } catch {
670
677
  }
671
- }), init.value !== void 0 && init.value !== null)
672
- if (init.value.toStream)
673
- controller.enqueue(init.value.toStream());
674
- else if (typeof init.value == "object")
675
- try {
676
- controller.enqueue(
677
- Buffer.from(JSON.stringify(init.value))
678
- );
679
- } catch {
680
- controller.enqueue(
681
- Buffer.from(init.value.toString())
682
- );
683
- }
684
- else
685
- controller.enqueue(
686
- Buffer.from(init.value.toString())
687
- );
688
- for await (let chunk of generator) {
689
- if (end) break;
690
- if (chunk != null) {
691
- if (chunk.toStream)
692
- controller.enqueue(chunk.toStream());
693
- else if (typeof chunk == "object")
678
+ }), !(!init || init.value instanceof ReadableStream)) {
679
+ if (init.value !== void 0 && init.value !== null)
680
+ if (init.value.toSSE)
681
+ controller.enqueue(init.value.toSSE());
682
+ else if (typeof init.value == "object")
694
683
  try {
695
684
  controller.enqueue(
696
- Buffer.from(JSON.stringify(chunk))
685
+ format(JSON.stringify(init.value))
697
686
  );
698
687
  } catch {
699
688
  controller.enqueue(
700
- Buffer.from(chunk.toString())
689
+ format(init.value.toString())
701
690
  );
702
691
  }
703
- else controller.enqueue(Buffer.from(chunk.toString()));
704
- await new Promise(
705
- (resolve) => setTimeout(() => resolve(), 0)
706
- );
692
+ else controller.enqueue(format(init.value.toString()));
693
+ }
694
+ try {
695
+ for await (let chunk of generator) {
696
+ if (end) break;
697
+ if (chunk != null) {
698
+ if (chunk.toSSE)
699
+ controller.enqueue(chunk.toSSE());
700
+ else if (typeof chunk == "object")
701
+ try {
702
+ controller.enqueue(
703
+ format(JSON.stringify(chunk))
704
+ );
705
+ } catch {
706
+ controller.enqueue(format(chunk.toString()));
707
+ }
708
+ else controller.enqueue(format(chunk.toString()));
709
+ await new Promise(
710
+ (resolve) => setTimeout(() => resolve(), 0)
711
+ );
712
+ }
707
713
  }
714
+ } catch (error) {
715
+ console.warn(error);
708
716
  }
709
717
  try {
710
718
  controller.close();
@@ -723,7 +731,7 @@ async function* streamResponse(response) {
723
731
  for (; ; ) {
724
732
  let { done, value } = await reader.read();
725
733
  if (done) break;
726
- yield decoder.decode(value);
734
+ typeof value == "string" ? yield value : yield decoder.decode(value);
727
735
  }
728
736
  } finally {
729
737
  reader.releaseLock();
@@ -1176,7 +1184,7 @@ var handleElysiaFile = (file, set2 = {
1176
1184
  headers: setHeaders
1177
1185
  });
1178
1186
  if (!hooks.parse?.length && !hooks.transform?.length && !hooks.beforeHandle?.length && !hooks.afterHandle?.length)
1179
- return response.clone.bind(response);
1187
+ return () => response.clone();
1180
1188
  }, handleResponse = createResponseHandler({
1181
1189
  mapResponse,
1182
1190
  mapCompactResponse
@@ -1668,7 +1676,7 @@ var mapResponse2 = (response, set2, request) => {
1668
1676
  headers: setHeaders
1669
1677
  });
1670
1678
  if (!hooks.parse?.length && !hooks.transform?.length && !hooks.beforeHandle?.length && !hooks.afterHandle?.length)
1671
- return response.clone.bind(response);
1679
+ return () => response.clone();
1672
1680
  }, handleResponse2 = createResponseHandler({
1673
1681
  mapResponse: mapResponse2,
1674
1682
  mapCompactResponse: mapCompactResponse2
@@ -324,14 +324,21 @@ var handleFile = (response, set2) => {
324
324
  for (let [key, value] of response.headers.entries())
325
325
  key !== "content-encoding" && key in set2.headers && (set2.headers[key] = value);
326
326
  return set2;
327
- }, createStreamHandler = ({ mapResponse: mapResponse2, mapCompactResponse: mapCompactResponse2 }) => async (generator, set2, request) => {
328
- let init = generator.next();
329
- if (init instanceof Promise && (init = await init), typeof init?.done > "u" || init?.done)
327
+ };
328
+ var createStreamHandler = ({ mapResponse: mapResponse2, mapCompactResponse: mapCompactResponse2 }) => async (generator, set2, request) => {
329
+ let init = generator.next?.();
330
+ if (init instanceof Promise && (init = await init), init?.value instanceof ReadableStream)
331
+ generator = init.value;
332
+ else if (init && (typeof init?.done > "u" || init?.done))
330
333
  return set2 ? mapResponse2(init.value, set2, request) : mapCompactResponse2(init.value, request);
331
- let contentType = (
332
- // @ts-ignore
333
- init.value && typeof init.value?.stream ? "text/event-stream" : init.value && typeof init.value == "object" ? "application/json" : "text/plain"
334
- );
334
+ let isSSE = (
335
+ // @ts-ignore First SSE result is wrapped with sse()
336
+ init?.value?.sse ?? // @ts-ignore ReadableStream is wrapped with sse()
337
+ generator?.sse ?? // User explicitly set content-type to SSE
338
+ set2?.headers["content-type"]?.startsWith("text/event-stream")
339
+ ), format = isSSE ? (data) => `data: ${data}
340
+
341
+ ` : (data) => data, contentType = isSSE ? "text/event-stream" : init?.value && typeof init?.value == "object" ? "application/json" : "text/plain";
335
342
  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 = {
336
343
  status: 200,
337
344
  headers: {
@@ -350,43 +357,44 @@ var handleFile = (response, set2) => {
350
357
  controller.close();
351
358
  } catch {
352
359
  }
353
- }), init.value !== void 0 && init.value !== null)
354
- if (init.value.toStream)
355
- controller.enqueue(init.value.toStream());
356
- else if (typeof init.value == "object")
357
- try {
358
- controller.enqueue(
359
- Buffer.from(JSON.stringify(init.value))
360
- );
361
- } catch {
362
- controller.enqueue(
363
- Buffer.from(init.value.toString())
364
- );
365
- }
366
- else
367
- controller.enqueue(
368
- Buffer.from(init.value.toString())
369
- );
370
- for await (let chunk of generator) {
371
- if (end) break;
372
- if (chunk != null) {
373
- if (chunk.toStream)
374
- controller.enqueue(chunk.toStream());
375
- else if (typeof chunk == "object")
360
+ }), !(!init || init.value instanceof ReadableStream)) {
361
+ if (init.value !== void 0 && init.value !== null)
362
+ if (init.value.toSSE)
363
+ controller.enqueue(init.value.toSSE());
364
+ else if (typeof init.value == "object")
376
365
  try {
377
366
  controller.enqueue(
378
- Buffer.from(JSON.stringify(chunk))
367
+ format(JSON.stringify(init.value))
379
368
  );
380
369
  } catch {
381
370
  controller.enqueue(
382
- Buffer.from(chunk.toString())
371
+ format(init.value.toString())
383
372
  );
384
373
  }
385
- else controller.enqueue(Buffer.from(chunk.toString()));
386
- await new Promise(
387
- (resolve) => setTimeout(() => resolve(), 0)
388
- );
374
+ else controller.enqueue(format(init.value.toString()));
375
+ }
376
+ try {
377
+ for await (let chunk of generator) {
378
+ if (end) break;
379
+ if (chunk != null) {
380
+ if (chunk.toSSE)
381
+ controller.enqueue(chunk.toSSE());
382
+ else if (typeof chunk == "object")
383
+ try {
384
+ controller.enqueue(
385
+ format(JSON.stringify(chunk))
386
+ );
387
+ } catch {
388
+ controller.enqueue(format(chunk.toString()));
389
+ }
390
+ else controller.enqueue(format(chunk.toString()));
391
+ await new Promise(
392
+ (resolve) => setTimeout(() => resolve(), 0)
393
+ );
394
+ }
389
395
  }
396
+ } catch (error) {
397
+ console.warn(error);
390
398
  }
391
399
  try {
392
400
  controller.close();
@@ -405,7 +413,7 @@ async function* streamResponse(response) {
405
413
  for (; ; ) {
406
414
  let { done, value } = await reader.read();
407
415
  if (done) break;
408
- yield decoder.decode(value);
416
+ typeof value == "string" ? yield value : yield decoder.decode(value);
409
417
  }
410
418
  } finally {
411
419
  reader.releaseLock();
@@ -846,7 +854,7 @@ var mapResponse = (response, set2, request) => {
846
854
  headers: setHeaders
847
855
  });
848
856
  if (!hooks.parse?.length && !hooks.transform?.length && !hooks.beforeHandle?.length && !hooks.afterHandle?.length)
849
- return response.clone.bind(response);
857
+ return () => response.clone();
850
858
  }, handleResponse = createResponseHandler({
851
859
  mapResponse,
852
860
  mapCompactResponse
@@ -642,14 +642,21 @@ var handleFile = (response, set2) => {
642
642
  for (let [key, value] of response.headers.entries())
643
643
  key !== "content-encoding" && key in set2.headers && (set2.headers[key] = value);
644
644
  return set2;
645
- }, createStreamHandler = ({ mapResponse: mapResponse3, mapCompactResponse: mapCompactResponse3 }) => async (generator, set2, request) => {
646
- let init = generator.next();
647
- if (init instanceof Promise && (init = await init), typeof init?.done > "u" || init?.done)
645
+ };
646
+ var createStreamHandler = ({ mapResponse: mapResponse3, mapCompactResponse: mapCompactResponse3 }) => async (generator, set2, request) => {
647
+ let init = generator.next?.();
648
+ if (init instanceof Promise && (init = await init), init?.value instanceof ReadableStream)
649
+ generator = init.value;
650
+ else if (init && (typeof init?.done > "u" || init?.done))
648
651
  return set2 ? mapResponse3(init.value, set2, request) : mapCompactResponse3(init.value, request);
649
- let contentType = (
650
- // @ts-ignore
651
- init.value && typeof init.value?.stream ? "text/event-stream" : init.value && typeof init.value == "object" ? "application/json" : "text/plain"
652
- );
652
+ let isSSE = (
653
+ // @ts-ignore First SSE result is wrapped with sse()
654
+ init?.value?.sse ?? // @ts-ignore ReadableStream is wrapped with sse()
655
+ generator?.sse ?? // User explicitly set content-type to SSE
656
+ set2?.headers["content-type"]?.startsWith("text/event-stream")
657
+ ), format = isSSE ? (data) => `data: ${data}
658
+
659
+ ` : (data) => data, contentType = isSSE ? "text/event-stream" : init?.value && typeof init?.value == "object" ? "application/json" : "text/plain";
653
660
  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 = {
654
661
  status: 200,
655
662
  headers: {
@@ -668,43 +675,44 @@ var handleFile = (response, set2) => {
668
675
  controller.close();
669
676
  } catch {
670
677
  }
671
- }), init.value !== void 0 && init.value !== null)
672
- if (init.value.toStream)
673
- controller.enqueue(init.value.toStream());
674
- else if (typeof init.value == "object")
675
- try {
676
- controller.enqueue(
677
- Buffer.from(JSON.stringify(init.value))
678
- );
679
- } catch {
680
- controller.enqueue(
681
- Buffer.from(init.value.toString())
682
- );
683
- }
684
- else
685
- controller.enqueue(
686
- Buffer.from(init.value.toString())
687
- );
688
- for await (let chunk of generator) {
689
- if (end) break;
690
- if (chunk != null) {
691
- if (chunk.toStream)
692
- controller.enqueue(chunk.toStream());
693
- else if (typeof chunk == "object")
678
+ }), !(!init || init.value instanceof ReadableStream)) {
679
+ if (init.value !== void 0 && init.value !== null)
680
+ if (init.value.toSSE)
681
+ controller.enqueue(init.value.toSSE());
682
+ else if (typeof init.value == "object")
694
683
  try {
695
684
  controller.enqueue(
696
- Buffer.from(JSON.stringify(chunk))
685
+ format(JSON.stringify(init.value))
697
686
  );
698
687
  } catch {
699
688
  controller.enqueue(
700
- Buffer.from(chunk.toString())
689
+ format(init.value.toString())
701
690
  );
702
691
  }
703
- else controller.enqueue(Buffer.from(chunk.toString()));
704
- await new Promise(
705
- (resolve) => setTimeout(() => resolve(), 0)
706
- );
692
+ else controller.enqueue(format(init.value.toString()));
693
+ }
694
+ try {
695
+ for await (let chunk of generator) {
696
+ if (end) break;
697
+ if (chunk != null) {
698
+ if (chunk.toSSE)
699
+ controller.enqueue(chunk.toSSE());
700
+ else if (typeof chunk == "object")
701
+ try {
702
+ controller.enqueue(
703
+ format(JSON.stringify(chunk))
704
+ );
705
+ } catch {
706
+ controller.enqueue(format(chunk.toString()));
707
+ }
708
+ else controller.enqueue(format(chunk.toString()));
709
+ await new Promise(
710
+ (resolve) => setTimeout(() => resolve(), 0)
711
+ );
712
+ }
707
713
  }
714
+ } catch (error) {
715
+ console.warn(error);
708
716
  }
709
717
  try {
710
718
  controller.close();
@@ -723,7 +731,7 @@ async function* streamResponse(response) {
723
731
  for (; ; ) {
724
732
  let { done, value } = await reader.read();
725
733
  if (done) break;
726
- yield decoder.decode(value);
734
+ typeof value == "string" ? yield value : yield decoder.decode(value);
727
735
  }
728
736
  } finally {
729
737
  reader.releaseLock();
@@ -1176,7 +1184,7 @@ var handleElysiaFile = (file, set2 = {
1176
1184
  headers: setHeaders
1177
1185
  });
1178
1186
  if (!hooks.parse?.length && !hooks.transform?.length && !hooks.beforeHandle?.length && !hooks.afterHandle?.length)
1179
- return response.clone.bind(response);
1187
+ return () => response.clone();
1180
1188
  }, handleResponse = createResponseHandler({
1181
1189
  mapResponse,
1182
1190
  mapCompactResponse
@@ -1668,7 +1676,7 @@ var mapResponse2 = (response, set2, request) => {
1668
1676
  headers: setHeaders
1669
1677
  });
1670
1678
  if (!hooks.parse?.length && !hooks.transform?.length && !hooks.beforeHandle?.length && !hooks.afterHandle?.length)
1671
- return response.clone.bind(response);
1679
+ return () => response.clone();
1672
1680
  }, handleResponse2 = createResponseHandler({
1673
1681
  mapResponse: mapResponse2,
1674
1682
  mapCompactResponse: mapCompactResponse2
@@ -12,7 +12,7 @@ type CreateHandlerParameter = {
12
12
  mapResponse(response: unknown, set: Context['set'], request?: Request): Response;
13
13
  mapCompactResponse(response: unknown, request?: Request): Response;
14
14
  };
15
- export declare const createStreamHandler: ({ mapResponse, mapCompactResponse }: CreateHandlerParameter) => (generator: Generator | AsyncGenerator, set?: Context["set"], request?: Request) => Promise<Response>;
15
+ export declare const createStreamHandler: ({ mapResponse, mapCompactResponse }: CreateHandlerParameter) => (generator: Generator | AsyncGenerator | ReadableStream, set?: Context["set"], request?: Request) => Promise<Response>;
16
16
  export declare function streamResponse(response: Response): AsyncGenerator<string, void, unknown>;
17
17
  export declare const handleSet: (set: Context["set"]) => void;
18
18
  export declare const createResponseHandler: (handler: CreateHandlerParameter) => (response: Response, set: Context["set"], request?: Request) => any;
@@ -198,14 +198,21 @@ var handleFile = (response, set) => {
198
198
  for (let [key, value] of response.headers.entries())
199
199
  key !== "content-encoding" && key in set.headers && (set.headers[key] = value);
200
200
  return set;
201
- }, createStreamHandler = ({ mapResponse, mapCompactResponse }) => async (generator, set, request) => {
202
- let init = generator.next();
203
- if (init instanceof Promise && (init = await init), typeof init?.done > "u" || init?.done)
201
+ };
202
+ var createStreamHandler = ({ mapResponse, mapCompactResponse }) => async (generator, set, request) => {
203
+ let init = generator.next?.();
204
+ if (init instanceof Promise && (init = await init), init?.value instanceof ReadableStream)
205
+ generator = init.value;
206
+ else if (init && (typeof init?.done > "u" || init?.done))
204
207
  return set ? mapResponse(init.value, set, request) : mapCompactResponse(init.value, request);
205
- let contentType = (
206
- // @ts-ignore
207
- init.value && typeof init.value?.stream ? "text/event-stream" : init.value && typeof init.value == "object" ? "application/json" : "text/plain"
208
- );
208
+ let isSSE = (
209
+ // @ts-ignore First SSE result is wrapped with sse()
210
+ init?.value?.sse ?? // @ts-ignore ReadableStream is wrapped with sse()
211
+ generator?.sse ?? // User explicitly set content-type to SSE
212
+ set?.headers["content-type"]?.startsWith("text/event-stream")
213
+ ), format = isSSE ? (data) => `data: ${data}
214
+
215
+ ` : (data) => data, contentType = isSSE ? "text/event-stream" : init?.value && typeof init?.value == "object" ? "application/json" : "text/plain";
209
216
  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 = {
210
217
  status: 200,
211
218
  headers: {
@@ -224,43 +231,44 @@ var handleFile = (response, set) => {
224
231
  controller.close();
225
232
  } catch {
226
233
  }
227
- }), init.value !== void 0 && init.value !== null)
228
- if (init.value.toStream)
229
- controller.enqueue(init.value.toStream());
230
- else if (typeof init.value == "object")
231
- try {
232
- controller.enqueue(
233
- Buffer.from(JSON.stringify(init.value))
234
- );
235
- } catch {
236
- controller.enqueue(
237
- Buffer.from(init.value.toString())
238
- );
239
- }
240
- else
241
- controller.enqueue(
242
- Buffer.from(init.value.toString())
243
- );
244
- for await (let chunk of generator) {
245
- if (end) break;
246
- if (chunk != null) {
247
- if (chunk.toStream)
248
- controller.enqueue(chunk.toStream());
249
- else if (typeof chunk == "object")
234
+ }), !(!init || init.value instanceof ReadableStream)) {
235
+ if (init.value !== void 0 && init.value !== null)
236
+ if (init.value.toSSE)
237
+ controller.enqueue(init.value.toSSE());
238
+ else if (typeof init.value == "object")
250
239
  try {
251
240
  controller.enqueue(
252
- Buffer.from(JSON.stringify(chunk))
241
+ format(JSON.stringify(init.value))
253
242
  );
254
243
  } catch {
255
244
  controller.enqueue(
256
- Buffer.from(chunk.toString())
245
+ format(init.value.toString())
257
246
  );
258
247
  }
259
- else controller.enqueue(Buffer.from(chunk.toString()));
260
- await new Promise(
261
- (resolve) => setTimeout(() => resolve(), 0)
262
- );
248
+ else controller.enqueue(format(init.value.toString()));
249
+ }
250
+ try {
251
+ for await (let chunk of generator) {
252
+ if (end) break;
253
+ if (chunk != null) {
254
+ if (chunk.toSSE)
255
+ controller.enqueue(chunk.toSSE());
256
+ else if (typeof chunk == "object")
257
+ try {
258
+ controller.enqueue(
259
+ format(JSON.stringify(chunk))
260
+ );
261
+ } catch {
262
+ controller.enqueue(format(chunk.toString()));
263
+ }
264
+ else controller.enqueue(format(chunk.toString()));
265
+ await new Promise(
266
+ (resolve) => setTimeout(() => resolve(), 0)
267
+ );
268
+ }
263
269
  }
270
+ } catch (error) {
271
+ console.warn(error);
264
272
  }
265
273
  try {
266
274
  controller.close();
@@ -279,7 +287,7 @@ async function* streamResponse(response) {
279
287
  for (; ; ) {
280
288
  let { done, value } = await reader.read();
281
289
  if (done) break;
282
- yield decoder.decode(value);
290
+ typeof value == "string" ? yield value : yield decoder.decode(value);
283
291
  }
284
292
  } finally {
285
293
  reader.releaseLock();