elysia 1.4.21 → 1.4.22
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.js +1 -1
- package/dist/adapter/bun/compose.mjs +1 -1
- package/dist/adapter/bun/handler.js +87 -84
- package/dist/adapter/bun/handler.mjs +87 -84
- package/dist/adapter/bun/index.js +1 -1
- package/dist/adapter/bun/index.mjs +1 -1
- package/dist/adapter/utils.d.ts +3 -3
- package/dist/adapter/utils.js +11 -9
- package/dist/adapter/utils.mjs +11 -9
- package/dist/adapter/web-standard/handler.d.ts +4 -2
- package/dist/adapter/web-standard/handler.js +94 -86
- package/dist/adapter/web-standard/handler.mjs +94 -86
- package/dist/bun/index.js +10 -10
- package/dist/bun/index.js.map +13 -13
- package/dist/compose.js +11 -3
- package/dist/compose.mjs +11 -3
- package/dist/dynamic-handle.js +2 -1
- package/dist/dynamic-handle.mjs +2 -1
- package/dist/error.d.ts +7 -11
- package/dist/error.js +2 -5
- package/dist/error.mjs +2 -5
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/type-system/index.js +1 -1
- package/dist/type-system/index.mjs +1 -1
- package/dist/utils.js +2 -2
- package/dist/utils.mjs +2 -2
- package/package.json +1 -1
|
@@ -7,161 +7,160 @@ import {
|
|
|
7
7
|
import { isNotEmpty } from "../../utils.mjs";
|
|
8
8
|
import { Cookie } from "../../cookies.mjs";
|
|
9
9
|
import { ElysiaCustomStatusResponse } from "../../error.mjs";
|
|
10
|
-
const mapResponse = (response,
|
|
11
|
-
if (isNotEmpty(
|
|
12
|
-
switch (handleSet(
|
|
10
|
+
const mapResponse = (response, set, request) => {
|
|
11
|
+
if (isNotEmpty(set.headers) || set.status !== 200 || set.cookie)
|
|
12
|
+
switch (handleSet(set), response?.constructor?.name) {
|
|
13
13
|
case "String":
|
|
14
|
-
return new Response(response,
|
|
14
|
+
return new Response(response, set);
|
|
15
15
|
case "Array":
|
|
16
16
|
case "Object":
|
|
17
|
-
return
|
|
17
|
+
return set.headers["content-type"] = "application/json", new Response(JSON.stringify(response), set);
|
|
18
18
|
case "ElysiaFile":
|
|
19
|
-
return handleFile(
|
|
20
|
-
response.value,
|
|
21
|
-
set2
|
|
22
|
-
);
|
|
19
|
+
return handleFile(response.value, set);
|
|
23
20
|
case "File":
|
|
24
|
-
return handleFile(response,
|
|
21
|
+
return handleFile(response, set);
|
|
25
22
|
case "Blob":
|
|
26
|
-
return handleFile(response,
|
|
23
|
+
return handleFile(response, set);
|
|
27
24
|
case "ElysiaCustomStatusResponse":
|
|
28
|
-
return
|
|
25
|
+
return set.status = response.code, mapResponse(
|
|
29
26
|
response.response,
|
|
30
|
-
|
|
27
|
+
set,
|
|
31
28
|
request
|
|
32
29
|
);
|
|
33
30
|
case void 0:
|
|
34
|
-
return response ? new Response(JSON.stringify(response),
|
|
31
|
+
return response ? new Response(JSON.stringify(response), set) : new Response("", set);
|
|
35
32
|
case "Response":
|
|
36
|
-
return handleResponse(response,
|
|
33
|
+
return handleResponse(response, set, request);
|
|
37
34
|
case "Error":
|
|
38
|
-
return errorToResponse(response,
|
|
35
|
+
return errorToResponse(response, set);
|
|
39
36
|
case "Promise":
|
|
40
37
|
return response.then(
|
|
41
|
-
(x) => mapResponse(x,
|
|
38
|
+
(x) => mapResponse(x, set, request)
|
|
42
39
|
);
|
|
43
40
|
case "Function":
|
|
44
|
-
return mapResponse(response(),
|
|
41
|
+
return mapResponse(response(), set, request);
|
|
45
42
|
case "Number":
|
|
46
43
|
case "Boolean":
|
|
47
44
|
return new Response(
|
|
48
45
|
response.toString(),
|
|
49
|
-
|
|
46
|
+
set
|
|
50
47
|
);
|
|
51
48
|
case "Cookie":
|
|
52
|
-
return response instanceof Cookie ? new Response(response.value,
|
|
49
|
+
return response instanceof Cookie ? new Response(response.value, set) : new Response(response?.toString(), set);
|
|
53
50
|
case "FormData":
|
|
54
|
-
return new Response(response,
|
|
51
|
+
return new Response(response, set);
|
|
55
52
|
default:
|
|
56
53
|
if (response instanceof Response)
|
|
57
|
-
return handleResponse(response,
|
|
54
|
+
return handleResponse(response, set, request);
|
|
58
55
|
if (response instanceof Promise)
|
|
59
|
-
return response.then((x) => mapResponse(x,
|
|
56
|
+
return response.then((x) => mapResponse(x, set));
|
|
60
57
|
if (response instanceof Error)
|
|
61
|
-
return errorToResponse(response,
|
|
58
|
+
return errorToResponse(response, set);
|
|
62
59
|
if (response instanceof ElysiaCustomStatusResponse)
|
|
63
|
-
return
|
|
60
|
+
return set.status = response.code, mapResponse(
|
|
64
61
|
response.response,
|
|
65
|
-
|
|
62
|
+
set,
|
|
66
63
|
request
|
|
67
64
|
);
|
|
68
65
|
if (
|
|
69
66
|
// @ts-expect-error
|
|
70
67
|
typeof response?.next == "function" || response instanceof ReadableStream
|
|
71
68
|
)
|
|
72
|
-
return handleStream(response,
|
|
69
|
+
return handleStream(response, set, request);
|
|
73
70
|
if (typeof response?.then == "function")
|
|
74
|
-
return response.then((x) => mapResponse(x,
|
|
71
|
+
return response.then((x) => mapResponse(x, set));
|
|
75
72
|
if (typeof response?.toResponse == "function")
|
|
76
|
-
return mapResponse(response.toResponse(),
|
|
73
|
+
return mapResponse(response.toResponse(), set);
|
|
77
74
|
if ("charCodeAt" in response) {
|
|
78
75
|
const code = response.charCodeAt(0);
|
|
79
76
|
if (code === 123 || code === 91)
|
|
80
|
-
return
|
|
77
|
+
return set.headers["Content-Type"] || (set.headers["Content-Type"] = "application/json"), new Response(
|
|
81
78
|
JSON.stringify(response),
|
|
82
|
-
|
|
79
|
+
set
|
|
83
80
|
);
|
|
84
81
|
}
|
|
85
|
-
return new Response(response,
|
|
82
|
+
return new Response(response, set);
|
|
86
83
|
}
|
|
87
84
|
return (
|
|
88
85
|
// @ts-expect-error
|
|
89
|
-
typeof response?.next == "function" || response instanceof ReadableStream ? handleStream(response,
|
|
86
|
+
typeof response?.next == "function" || response instanceof ReadableStream ? handleStream(response, set, request) : mapCompactResponse(response, request)
|
|
90
87
|
);
|
|
91
|
-
}, mapEarlyResponse = (response,
|
|
88
|
+
}, mapEarlyResponse = (response, set, request) => {
|
|
92
89
|
if (response != null)
|
|
93
|
-
if (isNotEmpty(
|
|
94
|
-
switch (handleSet(
|
|
90
|
+
if (isNotEmpty(set.headers) || set.status !== 200 || set.cookie)
|
|
91
|
+
switch (handleSet(set), response?.constructor?.name) {
|
|
95
92
|
case "String":
|
|
96
|
-
return new Response(response,
|
|
93
|
+
return new Response(response, set);
|
|
97
94
|
case "Array":
|
|
98
95
|
case "Object":
|
|
99
|
-
return
|
|
96
|
+
return set.headers["content-type"] = "application/json", new Response(JSON.stringify(response), set);
|
|
100
97
|
case "ElysiaFile":
|
|
101
|
-
return handleFile(response.value,
|
|
98
|
+
return handleFile(response.value, set);
|
|
102
99
|
case "File":
|
|
103
|
-
return handleFile(response,
|
|
100
|
+
return handleFile(response, set);
|
|
104
101
|
case "Blob":
|
|
105
|
-
return handleFile(response,
|
|
102
|
+
return handleFile(response, set);
|
|
106
103
|
case "ElysiaCustomStatusResponse":
|
|
107
|
-
return
|
|
104
|
+
return set.status = response.code, mapEarlyResponse(
|
|
108
105
|
response.response,
|
|
109
|
-
|
|
106
|
+
set,
|
|
110
107
|
request
|
|
111
108
|
);
|
|
112
109
|
case void 0:
|
|
113
|
-
return response ? new Response(JSON.stringify(response),
|
|
110
|
+
return response ? new Response(JSON.stringify(response), set) : void 0;
|
|
114
111
|
case "Response":
|
|
115
|
-
return handleResponse(response,
|
|
112
|
+
return handleResponse(response, set, request);
|
|
116
113
|
case "Promise":
|
|
117
114
|
return response.then(
|
|
118
|
-
(x) => mapEarlyResponse(x,
|
|
115
|
+
(x) => mapEarlyResponse(x, set)
|
|
119
116
|
);
|
|
120
117
|
case "Error":
|
|
121
|
-
return errorToResponse(response,
|
|
118
|
+
return errorToResponse(response, set);
|
|
122
119
|
case "Function":
|
|
123
|
-
return mapEarlyResponse(response(),
|
|
120
|
+
return mapEarlyResponse(response(), set);
|
|
124
121
|
case "Number":
|
|
125
122
|
case "Boolean":
|
|
126
123
|
return new Response(
|
|
127
124
|
response.toString(),
|
|
128
|
-
|
|
125
|
+
set
|
|
129
126
|
);
|
|
130
127
|
case "FormData":
|
|
131
128
|
return new Response(response);
|
|
132
129
|
case "Cookie":
|
|
133
|
-
return response instanceof Cookie ? new Response(response.value,
|
|
130
|
+
return response instanceof Cookie ? new Response(response.value, set) : new Response(response?.toString(), set);
|
|
134
131
|
default:
|
|
135
132
|
if (response instanceof Response)
|
|
136
|
-
return handleResponse(response,
|
|
133
|
+
return handleResponse(response, set, request);
|
|
137
134
|
if (response instanceof Promise)
|
|
138
|
-
return response.then((x) => mapEarlyResponse(x,
|
|
135
|
+
return response.then((x) => mapEarlyResponse(x, set));
|
|
139
136
|
if (response instanceof Error)
|
|
140
|
-
return errorToResponse(response,
|
|
137
|
+
return errorToResponse(response, set);
|
|
141
138
|
if (response instanceof ElysiaCustomStatusResponse)
|
|
142
|
-
return
|
|
139
|
+
return set.status = response.code, mapEarlyResponse(
|
|
143
140
|
response.response,
|
|
144
|
-
|
|
141
|
+
set,
|
|
145
142
|
request
|
|
146
143
|
);
|
|
147
144
|
if (
|
|
148
145
|
// @ts-expect-error
|
|
149
146
|
typeof response?.next == "function" || response instanceof ReadableStream
|
|
150
147
|
)
|
|
151
|
-
return handleStream(response,
|
|
148
|
+
return handleStream(response, set, request);
|
|
152
149
|
if (typeof response?.then == "function")
|
|
153
|
-
return response.then(
|
|
150
|
+
return response.then(
|
|
151
|
+
(x) => mapEarlyResponse(x, set)
|
|
152
|
+
);
|
|
154
153
|
if (typeof response?.toResponse == "function")
|
|
155
|
-
return mapEarlyResponse(response.toResponse(),
|
|
154
|
+
return mapEarlyResponse(response.toResponse(), set);
|
|
156
155
|
if ("charCodeAt" in response) {
|
|
157
156
|
const code = response.charCodeAt(0);
|
|
158
157
|
if (code === 123 || code === 91)
|
|
159
|
-
return
|
|
158
|
+
return set.headers["Content-Type"] || (set.headers["Content-Type"] = "application/json"), new Response(
|
|
160
159
|
JSON.stringify(response),
|
|
161
|
-
|
|
160
|
+
set
|
|
162
161
|
);
|
|
163
162
|
}
|
|
164
|
-
return new Response(response,
|
|
163
|
+
return new Response(response, set);
|
|
165
164
|
}
|
|
166
165
|
else
|
|
167
166
|
switch (response?.constructor?.name) {
|
|
@@ -169,17 +168,17 @@ const mapResponse = (response, set2, request) => {
|
|
|
169
168
|
return new Response(response);
|
|
170
169
|
case "Array":
|
|
171
170
|
case "Object":
|
|
172
|
-
return
|
|
171
|
+
return set.headers["content-type"] = "application/json", new Response(JSON.stringify(response), set);
|
|
173
172
|
case "ElysiaFile":
|
|
174
|
-
return handleFile(response.value,
|
|
173
|
+
return handleFile(response.value, set);
|
|
175
174
|
case "File":
|
|
176
|
-
return handleFile(response,
|
|
175
|
+
return handleFile(response, set);
|
|
177
176
|
case "Blob":
|
|
178
|
-
return handleFile(response,
|
|
177
|
+
return handleFile(response, set);
|
|
179
178
|
case "ElysiaCustomStatusResponse":
|
|
180
|
-
return
|
|
179
|
+
return set.status = response.code, mapEarlyResponse(
|
|
181
180
|
response.response,
|
|
182
|
-
|
|
181
|
+
set,
|
|
183
182
|
request
|
|
184
183
|
);
|
|
185
184
|
case void 0:
|
|
@@ -192,47 +191,49 @@ const mapResponse = (response, set2, request) => {
|
|
|
192
191
|
return response;
|
|
193
192
|
case "Promise":
|
|
194
193
|
return response.then((x) => {
|
|
195
|
-
const r = mapEarlyResponse(x,
|
|
194
|
+
const r = mapEarlyResponse(x, set);
|
|
196
195
|
if (r !== void 0) return r;
|
|
197
196
|
});
|
|
198
197
|
case "Error":
|
|
199
|
-
return errorToResponse(response,
|
|
198
|
+
return errorToResponse(response, set);
|
|
200
199
|
case "Function":
|
|
201
200
|
return mapCompactResponse(response(), request);
|
|
202
201
|
case "Number":
|
|
203
202
|
case "Boolean":
|
|
204
203
|
return new Response(response.toString());
|
|
205
204
|
case "Cookie":
|
|
206
|
-
return response instanceof Cookie ? new Response(response.value,
|
|
205
|
+
return response instanceof Cookie ? new Response(response.value, set) : new Response(response?.toString(), set);
|
|
207
206
|
case "FormData":
|
|
208
207
|
return new Response(response);
|
|
209
208
|
default:
|
|
210
209
|
if (response instanceof Response) return response;
|
|
211
210
|
if (response instanceof Promise)
|
|
212
|
-
return response.then((x) => mapEarlyResponse(x,
|
|
211
|
+
return response.then((x) => mapEarlyResponse(x, set));
|
|
213
212
|
if (response instanceof Error)
|
|
214
|
-
return errorToResponse(response,
|
|
213
|
+
return errorToResponse(response, set);
|
|
215
214
|
if (response instanceof ElysiaCustomStatusResponse)
|
|
216
|
-
return
|
|
215
|
+
return set.status = response.code, mapEarlyResponse(
|
|
217
216
|
response.response,
|
|
218
|
-
|
|
217
|
+
set,
|
|
219
218
|
request
|
|
220
219
|
);
|
|
221
220
|
if (
|
|
222
221
|
// @ts-expect-error
|
|
223
222
|
typeof response?.next == "function" || response instanceof ReadableStream
|
|
224
223
|
)
|
|
225
|
-
return handleStream(response,
|
|
224
|
+
return handleStream(response, set, request);
|
|
226
225
|
if (typeof response?.then == "function")
|
|
227
|
-
return response.then(
|
|
226
|
+
return response.then(
|
|
227
|
+
(x) => mapEarlyResponse(x, set)
|
|
228
|
+
);
|
|
228
229
|
if (typeof response?.toResponse == "function")
|
|
229
|
-
return mapEarlyResponse(response.toResponse(),
|
|
230
|
+
return mapEarlyResponse(response.toResponse(), set);
|
|
230
231
|
if ("charCodeAt" in response) {
|
|
231
232
|
const code = response.charCodeAt(0);
|
|
232
233
|
if (code === 123 || code === 91)
|
|
233
|
-
return
|
|
234
|
+
return set.headers["Content-Type"] || (set.headers["Content-Type"] = "application/json"), new Response(
|
|
234
235
|
JSON.stringify(response),
|
|
235
|
-
|
|
236
|
+
set
|
|
236
237
|
);
|
|
237
238
|
}
|
|
238
239
|
return new Response(response);
|
|
@@ -306,7 +307,9 @@ const mapResponse = (response, set2, request) => {
|
|
|
306
307
|
)
|
|
307
308
|
return handleStream(response, void 0, request);
|
|
308
309
|
if (typeof response?.then == "function")
|
|
309
|
-
return response.then(
|
|
310
|
+
return response.then(
|
|
311
|
+
(x) => mapCompactResponse(x, request)
|
|
312
|
+
);
|
|
310
313
|
if (typeof response?.toResponse == "function")
|
|
311
314
|
return mapCompactResponse(response.toResponse());
|
|
312
315
|
if ("charCodeAt" in response) {
|
|
@@ -320,9 +323,9 @@ const mapResponse = (response, set2, request) => {
|
|
|
320
323
|
}
|
|
321
324
|
return new Response(response);
|
|
322
325
|
}
|
|
323
|
-
}, errorToResponse = (error,
|
|
326
|
+
}, errorToResponse = (error, set) => {
|
|
324
327
|
if (typeof error?.toResponse == "function") {
|
|
325
|
-
const raw = error.toResponse(), targetSet =
|
|
328
|
+
const raw = error.toResponse(), targetSet = set ?? { headers: {}, status: 200, redirect: "" }, apply = (resolved) => (resolved instanceof Response && (targetSet.status = resolved.status), mapResponse(resolved, targetSet));
|
|
326
329
|
return typeof raw?.then == "function" ? raw.then(apply) : apply(raw);
|
|
327
330
|
}
|
|
328
331
|
return new Response(
|
|
@@ -332,8 +335,8 @@ const mapResponse = (response, set2, request) => {
|
|
|
332
335
|
cause: error?.cause
|
|
333
336
|
}),
|
|
334
337
|
{
|
|
335
|
-
status:
|
|
336
|
-
headers:
|
|
338
|
+
status: set?.status !== 200 ? set?.status ?? 500 : 500,
|
|
339
|
+
headers: set?.headers
|
|
337
340
|
}
|
|
338
341
|
);
|
|
339
342
|
}, createStaticHandler = (handle, hooks, setHeaders = {}) => {
|
|
@@ -37,7 +37,7 @@ const optionalParam = /:.+?\?(?=\/|$)/, getPossibleParams = (path) => {
|
|
|
37
37
|
POST: !0,
|
|
38
38
|
PUT: !0
|
|
39
39
|
}, mapRoutes = (app) => {
|
|
40
|
-
if (!app.config.aot ||
|
|
40
|
+
if (!app.config.aot || app.config.systemRouter === !1) return;
|
|
41
41
|
const routes = {}, add = (route, handler) => {
|
|
42
42
|
const path = encodeURI(route.path);
|
|
43
43
|
routes[path] ? routes[path][route.method] || (routes[path][route.method] = handler) : routes[path] = {
|
|
@@ -41,7 +41,7 @@ const optionalParam = /:.+?\?(?=\/|$)/, getPossibleParams = (path) => {
|
|
|
41
41
|
POST: !0,
|
|
42
42
|
PUT: !0
|
|
43
43
|
}, mapRoutes = (app) => {
|
|
44
|
-
if (!app.config.aot ||
|
|
44
|
+
if (!app.config.aot || app.config.systemRouter === !1) return;
|
|
45
45
|
const routes = {}, add = (route, handler) => {
|
|
46
46
|
const path = encodeURI(route.path);
|
|
47
47
|
routes[path] ? routes[path][route.method] || (routes[path][route.method] = handler) : routes[path] = {
|
package/dist/adapter/utils.d.ts
CHANGED
|
@@ -8,11 +8,11 @@ export declare const responseToSetHeaders: (response: Response, set?: Context["s
|
|
|
8
8
|
redirect?: string;
|
|
9
9
|
cookie?: Record<string, import("../cookies").ElysiaCookie>;
|
|
10
10
|
};
|
|
11
|
-
|
|
11
|
+
interface CreateHandlerParameter {
|
|
12
12
|
mapResponse(response: unknown, set: Context['set'], request?: Request): Response;
|
|
13
13
|
mapCompactResponse(response: unknown, request?: Request): Response;
|
|
14
|
-
}
|
|
15
|
-
export declare const createStreamHandler: ({ mapResponse, mapCompactResponse }: CreateHandlerParameter) => (generator: Generator | AsyncGenerator | ReadableStream, set?: Context["set"], request?: Request) => Promise<Response>;
|
|
14
|
+
}
|
|
15
|
+
export declare const createStreamHandler: ({ mapResponse, mapCompactResponse }: CreateHandlerParameter) => (generator: Generator | AsyncGenerator | ReadableStream, set?: Context["set"], request?: Request, skipFormat?: boolean) => 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.js
CHANGED
|
@@ -88,18 +88,16 @@ const handleFile = (response, set) => {
|
|
|
88
88
|
for (const [key, value] of response.headers.entries())
|
|
89
89
|
key !== "content-encoding" && key in set.headers && (set.headers[key] = value);
|
|
90
90
|
return set;
|
|
91
|
-
}, allowRapidStream = import_universal.env.ELYSIA_RAPID_STREAM === "true", createStreamHandler = ({ mapResponse, mapCompactResponse }) => async (generator, set, request) => {
|
|
91
|
+
}, allowRapidStream = import_universal.env.ELYSIA_RAPID_STREAM === "true", createStreamHandler = ({ mapResponse, mapCompactResponse }) => async (generator, set, request, skipFormat) => {
|
|
92
92
|
let init = generator.next?.();
|
|
93
93
|
if (set && handleSet(set), init instanceof Promise && (init = await init), init?.value instanceof ReadableStream)
|
|
94
94
|
generator = init.value;
|
|
95
95
|
else if (init && (typeof init?.done > "u" || init?.done))
|
|
96
96
|
return set ? mapResponse(init.value, set, request) : mapCompactResponse(init.value, request);
|
|
97
|
-
const isSSE = (
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
set?.headers["content-type"]?.startsWith("text/event-stream")
|
|
102
|
-
), format = isSSE ? (data) => `data: ${data}
|
|
97
|
+
const isSSE = !skipFormat && // @ts-ignore First SSE result is wrapped with sse()
|
|
98
|
+
(init?.value?.sse ?? // @ts-ignore ReadableStream is wrapped with sse()
|
|
99
|
+
generator?.sse ?? // User explicitly set content-type to SSE
|
|
100
|
+
set?.headers["content-type"]?.startsWith("text/event-stream")), format = isSSE ? (data) => `data: ${data}
|
|
103
101
|
|
|
104
102
|
` : (data) => data, contentType = isSSE ? "text/event-stream" : init?.value && typeof init?.value == "object" ? "application/json" : "text/plain";
|
|
105
103
|
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 = {
|
|
@@ -227,13 +225,17 @@ const handleSet = (set) => {
|
|
|
227
225
|
return !newResponse.headers.has("content-length") && newResponse.headers.get("transfer-encoding") === "chunked" ? handleStream(
|
|
228
226
|
streamResponse(newResponse),
|
|
229
227
|
responseToSetHeaders(newResponse, set),
|
|
230
|
-
request
|
|
228
|
+
request,
|
|
229
|
+
!0
|
|
230
|
+
// skipFormat: don't auto-format SSE for pre-formatted Response
|
|
231
231
|
) : newResponse;
|
|
232
232
|
}
|
|
233
233
|
return !response.headers.has("content-length") && response.headers.get("transfer-encoding") === "chunked" ? handleStream(
|
|
234
234
|
streamResponse(response),
|
|
235
235
|
responseToSetHeaders(response, set),
|
|
236
|
-
request
|
|
236
|
+
request,
|
|
237
|
+
!0
|
|
238
|
+
// skipFormat: don't auto-format SSE for pre-formatted Response
|
|
237
239
|
) : response;
|
|
238
240
|
};
|
|
239
241
|
};
|
package/dist/adapter/utils.mjs
CHANGED
|
@@ -64,18 +64,16 @@ const handleFile = (response, set) => {
|
|
|
64
64
|
for (const [key, value] of response.headers.entries())
|
|
65
65
|
key !== "content-encoding" && key in set.headers && (set.headers[key] = value);
|
|
66
66
|
return set;
|
|
67
|
-
}, allowRapidStream = env.ELYSIA_RAPID_STREAM === "true", createStreamHandler = ({ mapResponse, mapCompactResponse }) => async (generator, set, request) => {
|
|
67
|
+
}, allowRapidStream = env.ELYSIA_RAPID_STREAM === "true", createStreamHandler = ({ mapResponse, mapCompactResponse }) => async (generator, set, request, skipFormat) => {
|
|
68
68
|
let init = generator.next?.();
|
|
69
69
|
if (set && handleSet(set), init instanceof Promise && (init = await init), init?.value instanceof ReadableStream)
|
|
70
70
|
generator = init.value;
|
|
71
71
|
else if (init && (typeof init?.done > "u" || init?.done))
|
|
72
72
|
return set ? mapResponse(init.value, set, request) : mapCompactResponse(init.value, request);
|
|
73
|
-
const isSSE = (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
set?.headers["content-type"]?.startsWith("text/event-stream")
|
|
78
|
-
), format = isSSE ? (data) => `data: ${data}
|
|
73
|
+
const isSSE = !skipFormat && // @ts-ignore First SSE result is wrapped with sse()
|
|
74
|
+
(init?.value?.sse ?? // @ts-ignore ReadableStream is wrapped with sse()
|
|
75
|
+
generator?.sse ?? // User explicitly set content-type to SSE
|
|
76
|
+
set?.headers["content-type"]?.startsWith("text/event-stream")), format = isSSE ? (data) => `data: ${data}
|
|
79
77
|
|
|
80
78
|
` : (data) => data, contentType = isSSE ? "text/event-stream" : init?.value && typeof init?.value == "object" ? "application/json" : "text/plain";
|
|
81
79
|
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 = {
|
|
@@ -203,13 +201,17 @@ const handleSet = (set) => {
|
|
|
203
201
|
return !newResponse.headers.has("content-length") && newResponse.headers.get("transfer-encoding") === "chunked" ? handleStream(
|
|
204
202
|
streamResponse(newResponse),
|
|
205
203
|
responseToSetHeaders(newResponse, set),
|
|
206
|
-
request
|
|
204
|
+
request,
|
|
205
|
+
!0
|
|
206
|
+
// skipFormat: don't auto-format SSE for pre-formatted Response
|
|
207
207
|
) : newResponse;
|
|
208
208
|
}
|
|
209
209
|
return !response.headers.has("content-length") && response.headers.get("transfer-encoding") === "chunked" ? handleStream(
|
|
210
210
|
streamResponse(response),
|
|
211
211
|
responseToSetHeaders(response, set),
|
|
212
|
-
request
|
|
212
|
+
request,
|
|
213
|
+
!0
|
|
214
|
+
// skipFormat: don't auto-format SSE for pre-formatted Response
|
|
213
215
|
) : response;
|
|
214
216
|
};
|
|
215
217
|
};
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { Context } from '../../context';
|
|
2
|
-
import type { AnyLocalHook } from '../../types';
|
|
2
|
+
import type { AnyLocalHook, MaybePromise } from '../../types';
|
|
3
3
|
export declare const mapResponse: (response: unknown, set: Context["set"], request?: Request) => Response;
|
|
4
4
|
export declare const mapEarlyResponse: (response: unknown, set: Context["set"], request?: Request) => Response | undefined;
|
|
5
5
|
export declare const mapCompactResponse: (response: unknown, request?: Request) => Response;
|
|
6
|
-
export declare const errorToResponse: (error: Error
|
|
6
|
+
export declare const errorToResponse: (error: Error & {
|
|
7
|
+
toResponse?(): MaybePromise<Response>;
|
|
8
|
+
}, set?: Context["set"]) => any;
|
|
7
9
|
export declare const createStaticHandler: (handle: unknown, hooks: Partial<AnyLocalHook>, setHeaders?: Context["set"]["headers"]) => (() => Response) | undefined;
|