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.
- package/dist/adapter/bun/compose.mjs +45 -37
- package/dist/adapter/bun/handler-native.mjs +47 -39
- package/dist/adapter/bun/handler.mjs +46 -38
- package/dist/adapter/bun/index.mjs +47 -39
- package/dist/adapter/utils.d.ts +1 -1
- package/dist/adapter/utils.mjs +45 -37
- package/dist/adapter/web-standard/handler.mjs +46 -38
- package/dist/adapter/web-standard/index.mjs +46 -38
- package/dist/bun/index.js +9 -7
- package/dist/bun/index.js.map +8 -8
- package/dist/cjs/adapter/bun/compose.js +45 -37
- package/dist/cjs/adapter/bun/handler-native.js +47 -39
- package/dist/cjs/adapter/bun/handler.js +46 -38
- package/dist/cjs/adapter/bun/index.js +47 -39
- package/dist/cjs/adapter/utils.js +45 -37
- package/dist/cjs/adapter/web-standard/handler.js +46 -38
- package/dist/cjs/adapter/web-standard/index.js +46 -38
- package/dist/cjs/compose.js +3 -3
- package/dist/cjs/index.js +59 -48
- package/dist/cjs/types.d.ts +7 -7
- package/dist/cjs/utils.d.ts +7 -4
- package/dist/cjs/utils.js +9 -6
- package/dist/compose.mjs +3 -3
- package/dist/index.mjs +59 -48
- package/dist/types.d.ts +7 -7
- package/dist/utils.d.ts +7 -4
- package/dist/utils.mjs +9 -6
- package/package.json +1 -1
|
@@ -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
|
-
}
|
|
632
|
-
|
|
633
|
-
|
|
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
|
|
636
|
-
// @ts-ignore
|
|
637
|
-
init
|
|
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
|
|
658
|
-
if (init.value.
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
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
|
-
|
|
671
|
+
format(JSON.stringify(init.value))
|
|
683
672
|
);
|
|
684
673
|
} catch {
|
|
685
674
|
controller.enqueue(
|
|
686
|
-
|
|
675
|
+
format(init.value.toString())
|
|
687
676
|
);
|
|
688
677
|
}
|
|
689
|
-
else controller.enqueue(
|
|
690
|
-
|
|
691
|
-
|
|
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
|
-
}
|
|
646
|
-
|
|
647
|
-
|
|
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
|
|
650
|
-
// @ts-ignore
|
|
651
|
-
init
|
|
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
|
|
672
|
-
if (init.value.
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
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
|
-
|
|
685
|
+
format(JSON.stringify(init.value))
|
|
697
686
|
);
|
|
698
687
|
} catch {
|
|
699
688
|
controller.enqueue(
|
|
700
|
-
|
|
689
|
+
format(init.value.toString())
|
|
701
690
|
);
|
|
702
691
|
}
|
|
703
|
-
else controller.enqueue(
|
|
704
|
-
|
|
705
|
-
|
|
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
|
|
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
|
|
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
|
-
}
|
|
328
|
-
|
|
329
|
-
|
|
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
|
|
332
|
-
// @ts-ignore
|
|
333
|
-
init
|
|
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
|
|
354
|
-
if (init.value.
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
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
|
-
|
|
367
|
+
format(JSON.stringify(init.value))
|
|
379
368
|
);
|
|
380
369
|
} catch {
|
|
381
370
|
controller.enqueue(
|
|
382
|
-
|
|
371
|
+
format(init.value.toString())
|
|
383
372
|
);
|
|
384
373
|
}
|
|
385
|
-
else controller.enqueue(
|
|
386
|
-
|
|
387
|
-
|
|
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
|
|
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
|
-
}
|
|
646
|
-
|
|
647
|
-
|
|
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
|
|
650
|
-
// @ts-ignore
|
|
651
|
-
init
|
|
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
|
|
672
|
-
if (init.value.
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
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
|
-
|
|
685
|
+
format(JSON.stringify(init.value))
|
|
697
686
|
);
|
|
698
687
|
} catch {
|
|
699
688
|
controller.enqueue(
|
|
700
|
-
|
|
689
|
+
format(init.value.toString())
|
|
701
690
|
);
|
|
702
691
|
}
|
|
703
|
-
else controller.enqueue(
|
|
704
|
-
|
|
705
|
-
|
|
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
|
|
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
|
|
1679
|
+
return () => response.clone();
|
|
1672
1680
|
}, handleResponse2 = createResponseHandler({
|
|
1673
1681
|
mapResponse: mapResponse2,
|
|
1674
1682
|
mapCompactResponse: mapCompactResponse2
|
package/dist/adapter/utils.d.ts
CHANGED
|
@@ -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;
|
package/dist/adapter/utils.mjs
CHANGED
|
@@ -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
|
-
}
|
|
202
|
-
|
|
203
|
-
|
|
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
|
|
206
|
-
// @ts-ignore
|
|
207
|
-
init
|
|
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
|
|
228
|
-
if (init.value.
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
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
|
-
|
|
241
|
+
format(JSON.stringify(init.value))
|
|
253
242
|
);
|
|
254
243
|
} catch {
|
|
255
244
|
controller.enqueue(
|
|
256
|
-
|
|
245
|
+
format(init.value.toString())
|
|
257
246
|
);
|
|
258
247
|
}
|
|
259
|
-
else controller.enqueue(
|
|
260
|
-
|
|
261
|
-
|
|
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();
|