elysia 1.3.0 → 1.3.2-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.
- package/dist/adapter/bun/compose.mjs +736 -3
- package/dist/adapter/bun/handler-native.mjs +5 -0
- package/dist/adapter/bun/handler.mjs +5 -0
- package/dist/adapter/bun/index.mjs +127 -85
- package/dist/adapter/utils.mjs +5 -0
- package/dist/adapter/web-standard/handler.mjs +5 -0
- package/dist/adapter/web-standard/index.mjs +5 -0
- package/dist/bun/index.d.ts +13 -9
- package/dist/bun/index.js +25 -25
- package/dist/bun/index.js.map +12 -12
- package/dist/cjs/adapter/bun/compose.js +736 -3
- package/dist/cjs/adapter/bun/handler-native.js +5 -0
- package/dist/cjs/adapter/bun/handler.js +5 -0
- package/dist/cjs/adapter/bun/index.js +127 -85
- package/dist/cjs/adapter/utils.js +5 -0
- package/dist/cjs/adapter/web-standard/handler.js +5 -0
- package/dist/cjs/adapter/web-standard/index.js +5 -0
- package/dist/cjs/compose.js +21 -17
- package/dist/cjs/context.d.ts +1 -1
- package/dist/cjs/cookies.d.ts +2 -2
- package/dist/cjs/cookies.js +5 -0
- package/dist/cjs/dynamic-handle.js +5 -0
- package/dist/cjs/error.d.ts +1 -1
- package/dist/cjs/error.js +5 -0
- package/dist/cjs/index.d.ts +13 -9
- package/dist/cjs/index.js +153 -106
- package/dist/cjs/schema.d.ts +1 -1
- package/dist/cjs/schema.js +6 -1
- package/dist/cjs/sucrose.js +6 -1
- package/dist/cjs/trace.js +8 -1
- package/dist/cjs/type-system/index.js +5 -0
- package/dist/cjs/type-system/utils.js +5 -0
- package/dist/cjs/types.d.ts +18 -10
- package/dist/cjs/utils.d.ts +1 -0
- package/dist/cjs/utils.js +7 -1
- package/dist/cjs/ws/index.js +5 -0
- package/dist/compose.mjs +21 -17
- package/dist/context.d.ts +1 -1
- package/dist/cookies.d.ts +2 -2
- package/dist/cookies.mjs +5 -0
- package/dist/dynamic-handle.mjs +5 -0
- package/dist/error.d.ts +1 -1
- package/dist/error.mjs +5 -0
- package/dist/index.d.ts +13 -9
- package/dist/index.mjs +153 -106
- package/dist/schema.d.ts +1 -1
- package/dist/schema.mjs +6 -1
- package/dist/sucrose.mjs +6 -1
- package/dist/trace.mjs +8 -1
- package/dist/type-system/index.mjs +5 -0
- package/dist/type-system/utils.mjs +5 -0
- package/dist/types.d.ts +18 -10
- package/dist/utils.d.ts +1 -0
- package/dist/utils.mjs +6 -1
- package/dist/ws/index.mjs +5 -0
- package/package.json +3 -3
- package/bunfig.toml +0 -2
|
@@ -225,6 +225,11 @@ var isNotEmpty = (obj) => {
|
|
|
225
225
|
for (let x in obj) return !0;
|
|
226
226
|
return !1;
|
|
227
227
|
};
|
|
228
|
+
var supportPerMethodInlineHandler = (() => {
|
|
229
|
+
if (typeof Bun > "u") return !0;
|
|
230
|
+
let semver = Bun.version.split(".");
|
|
231
|
+
return !(+semver[0] < 1 || +semver[1] < 2 || +semver[2] < 14);
|
|
232
|
+
})();
|
|
228
233
|
|
|
229
234
|
// src/sucrose.ts
|
|
230
235
|
var separateFunction = (code) => {
|
|
@@ -383,7 +388,7 @@ var findAlias = (type, body, depth = 0) => {
|
|
|
383
388
|
parameters.query && (inference.query = !0), parameters.headers && (inference.headers = !0), parameters.body && (inference.body = !0), parameters.cookie && (inference.cookie = !0), parameters.set && (inference.set = !0), parameters.server && (inference.server = !0), parameters.url && (inference.url = !0), parameters.route && (inference.route = !0), parameters.path && (inference.path = !0);
|
|
384
389
|
continue;
|
|
385
390
|
}
|
|
386
|
-
if (!inference.query && access("query", alias)
|
|
391
|
+
if (!inference.query && (access("query", alias) || code.includes("return " + alias) || code.includes("return " + alias + ".query")) && (inference.query = !0), !inference.headers && access("headers", alias) && (inference.headers = !0), !inference.body && access("body", alias) && (inference.body = !0), !inference.cookie && access("cookie", alias) && (inference.cookie = !0), !inference.set && access("set", alias) && (inference.set = !0), !inference.server && access("server", alias) && (inference.server = !0), !inference.route && access("route", alias) && (inference.route = !0), !inference.url && access("url", alias) && (inference.url = !0), !inference.path && access("path", alias) && (inference.path = !0), inference.query && inference.headers && inference.body && inference.cookie && inference.set && inference.server && inference.route && inference.url && inference.path)
|
|
387
392
|
break;
|
|
388
393
|
}
|
|
389
394
|
return aliases;
|
|
@@ -1155,6 +1160,134 @@ t.Form = ElysiaType.Form;
|
|
|
1155
1160
|
// src/cookies.ts
|
|
1156
1161
|
import { parse, serialize } from "cookie";
|
|
1157
1162
|
import decode2 from "fast-decode-uri-component";
|
|
1163
|
+
var Cookie = class {
|
|
1164
|
+
constructor(name, jar, initial = {}) {
|
|
1165
|
+
this.name = name;
|
|
1166
|
+
this.jar = jar;
|
|
1167
|
+
this.initial = initial;
|
|
1168
|
+
}
|
|
1169
|
+
get cookie() {
|
|
1170
|
+
return this.jar[this.name] ?? this.initial;
|
|
1171
|
+
}
|
|
1172
|
+
set cookie(jar) {
|
|
1173
|
+
this.name in this.jar || (this.jar[this.name] = this.initial), this.jar[this.name] = jar;
|
|
1174
|
+
}
|
|
1175
|
+
get setCookie() {
|
|
1176
|
+
return this.name in this.jar || (this.jar[this.name] = this.initial), this.jar[this.name];
|
|
1177
|
+
}
|
|
1178
|
+
set setCookie(jar) {
|
|
1179
|
+
this.cookie = jar;
|
|
1180
|
+
}
|
|
1181
|
+
get value() {
|
|
1182
|
+
return this.cookie.value;
|
|
1183
|
+
}
|
|
1184
|
+
set value(value) {
|
|
1185
|
+
this.setCookie.value = value;
|
|
1186
|
+
}
|
|
1187
|
+
get expires() {
|
|
1188
|
+
return this.cookie.expires;
|
|
1189
|
+
}
|
|
1190
|
+
set expires(expires) {
|
|
1191
|
+
this.setCookie.expires = expires;
|
|
1192
|
+
}
|
|
1193
|
+
get maxAge() {
|
|
1194
|
+
return this.cookie.maxAge;
|
|
1195
|
+
}
|
|
1196
|
+
set maxAge(maxAge) {
|
|
1197
|
+
this.setCookie.maxAge = maxAge;
|
|
1198
|
+
}
|
|
1199
|
+
get domain() {
|
|
1200
|
+
return this.cookie.domain;
|
|
1201
|
+
}
|
|
1202
|
+
set domain(domain) {
|
|
1203
|
+
this.setCookie.domain = domain;
|
|
1204
|
+
}
|
|
1205
|
+
get path() {
|
|
1206
|
+
return this.cookie.path;
|
|
1207
|
+
}
|
|
1208
|
+
set path(path) {
|
|
1209
|
+
this.setCookie.path = path;
|
|
1210
|
+
}
|
|
1211
|
+
get secure() {
|
|
1212
|
+
return this.cookie.secure;
|
|
1213
|
+
}
|
|
1214
|
+
set secure(secure) {
|
|
1215
|
+
this.setCookie.secure = secure;
|
|
1216
|
+
}
|
|
1217
|
+
get httpOnly() {
|
|
1218
|
+
return this.cookie.httpOnly;
|
|
1219
|
+
}
|
|
1220
|
+
set httpOnly(httpOnly) {
|
|
1221
|
+
this.setCookie.httpOnly = httpOnly;
|
|
1222
|
+
}
|
|
1223
|
+
get sameSite() {
|
|
1224
|
+
return this.cookie.sameSite;
|
|
1225
|
+
}
|
|
1226
|
+
set sameSite(sameSite) {
|
|
1227
|
+
this.setCookie.sameSite = sameSite;
|
|
1228
|
+
}
|
|
1229
|
+
get priority() {
|
|
1230
|
+
return this.cookie.priority;
|
|
1231
|
+
}
|
|
1232
|
+
set priority(priority) {
|
|
1233
|
+
this.setCookie.priority = priority;
|
|
1234
|
+
}
|
|
1235
|
+
get partitioned() {
|
|
1236
|
+
return this.cookie.partitioned;
|
|
1237
|
+
}
|
|
1238
|
+
set partitioned(partitioned) {
|
|
1239
|
+
this.setCookie.partitioned = partitioned;
|
|
1240
|
+
}
|
|
1241
|
+
get secrets() {
|
|
1242
|
+
return this.cookie.secrets;
|
|
1243
|
+
}
|
|
1244
|
+
set secrets(secrets) {
|
|
1245
|
+
this.setCookie.secrets = secrets;
|
|
1246
|
+
}
|
|
1247
|
+
update(config) {
|
|
1248
|
+
return this.setCookie = Object.assign(
|
|
1249
|
+
this.cookie,
|
|
1250
|
+
typeof config == "function" ? config(this.cookie) : config
|
|
1251
|
+
), this;
|
|
1252
|
+
}
|
|
1253
|
+
set(config) {
|
|
1254
|
+
return this.setCookie = Object.assign(
|
|
1255
|
+
{
|
|
1256
|
+
...this.initial,
|
|
1257
|
+
value: this.value
|
|
1258
|
+
},
|
|
1259
|
+
typeof config == "function" ? config(this.cookie) : config
|
|
1260
|
+
), this;
|
|
1261
|
+
}
|
|
1262
|
+
remove() {
|
|
1263
|
+
if (this.value !== void 0)
|
|
1264
|
+
return this.set({
|
|
1265
|
+
expires: /* @__PURE__ */ new Date(0),
|
|
1266
|
+
maxAge: 0,
|
|
1267
|
+
value: ""
|
|
1268
|
+
}), this;
|
|
1269
|
+
}
|
|
1270
|
+
toString() {
|
|
1271
|
+
return typeof this.value == "object" ? JSON.stringify(this.value) : this.value?.toString() ?? "";
|
|
1272
|
+
}
|
|
1273
|
+
};
|
|
1274
|
+
var serializeCookie = (cookies) => {
|
|
1275
|
+
if (!cookies || !isNotEmpty(cookies)) return;
|
|
1276
|
+
let set2 = [];
|
|
1277
|
+
for (let [key, property] of Object.entries(cookies)) {
|
|
1278
|
+
if (!key || !property) continue;
|
|
1279
|
+
let value = property.value;
|
|
1280
|
+
value != null && set2.push(
|
|
1281
|
+
serialize(
|
|
1282
|
+
key,
|
|
1283
|
+
typeof value == "object" ? JSON.stringify(value) : value + "",
|
|
1284
|
+
property
|
|
1285
|
+
)
|
|
1286
|
+
);
|
|
1287
|
+
}
|
|
1288
|
+
if (set2.length !== 0)
|
|
1289
|
+
return set2.length === 1 ? set2[0] : set2;
|
|
1290
|
+
};
|
|
1158
1291
|
|
|
1159
1292
|
// src/compose.ts
|
|
1160
1293
|
var createReport = ({
|
|
@@ -1259,6 +1392,605 @@ var createOnRequestHandler = (app, addFn) => {
|
|
|
1259
1392
|
return `return function hocMap(${adapter.parameters}){return ${handler}(${adapter.parameters})}`;
|
|
1260
1393
|
};
|
|
1261
1394
|
|
|
1395
|
+
// src/adapter/utils.ts
|
|
1396
|
+
var handleFile = (response, set2) => {
|
|
1397
|
+
let size = response.size;
|
|
1398
|
+
if (!set2 && size || size && set2 && set2.status !== 206 && set2.status !== 304 && set2.status !== 412 && set2.status !== 416) {
|
|
1399
|
+
if (set2) {
|
|
1400
|
+
if (set2.headers instanceof Headers) {
|
|
1401
|
+
let setHeaders = {
|
|
1402
|
+
"accept-ranges": "bytes",
|
|
1403
|
+
"content-range": `bytes 0-${size - 1}/${size}`,
|
|
1404
|
+
"transfer-encoding": "chunked"
|
|
1405
|
+
};
|
|
1406
|
+
if (hasHeaderShorthand)
|
|
1407
|
+
setHeaders = set2.headers.toJSON();
|
|
1408
|
+
else {
|
|
1409
|
+
setHeaders = {};
|
|
1410
|
+
for (let [key, value] of set2.headers.entries())
|
|
1411
|
+
key in set2.headers && (setHeaders[key] = value);
|
|
1412
|
+
}
|
|
1413
|
+
return new Response(response, {
|
|
1414
|
+
status: set2.status,
|
|
1415
|
+
headers: setHeaders
|
|
1416
|
+
});
|
|
1417
|
+
}
|
|
1418
|
+
if (isNotEmpty(set2.headers))
|
|
1419
|
+
return new Response(response, {
|
|
1420
|
+
status: set2.status,
|
|
1421
|
+
headers: Object.assign(
|
|
1422
|
+
{
|
|
1423
|
+
"accept-ranges": "bytes",
|
|
1424
|
+
"content-range": `bytes 0-${size - 1}/${size}`,
|
|
1425
|
+
"transfer-encoding": "chunked"
|
|
1426
|
+
},
|
|
1427
|
+
set2.headers
|
|
1428
|
+
)
|
|
1429
|
+
});
|
|
1430
|
+
}
|
|
1431
|
+
return new Response(response, {
|
|
1432
|
+
headers: {
|
|
1433
|
+
"accept-ranges": "bytes",
|
|
1434
|
+
"content-range": `bytes 0-${size - 1}/${size}`,
|
|
1435
|
+
"transfer-encoding": "chunked"
|
|
1436
|
+
}
|
|
1437
|
+
});
|
|
1438
|
+
}
|
|
1439
|
+
return new Response(response);
|
|
1440
|
+
}, parseSetCookies = (headers, setCookie) => {
|
|
1441
|
+
if (!headers) return headers;
|
|
1442
|
+
headers.delete("set-cookie");
|
|
1443
|
+
for (let i = 0; i < setCookie.length; i++) {
|
|
1444
|
+
let index = setCookie[i].indexOf("=");
|
|
1445
|
+
headers.append(
|
|
1446
|
+
"set-cookie",
|
|
1447
|
+
`${setCookie[i].slice(0, index)}=${setCookie[i].slice(index + 1) || ""}`
|
|
1448
|
+
);
|
|
1449
|
+
}
|
|
1450
|
+
return headers;
|
|
1451
|
+
}, responseToSetHeaders = (response, set2) => {
|
|
1452
|
+
if (set2?.headers) {
|
|
1453
|
+
if (response)
|
|
1454
|
+
if (hasHeaderShorthand)
|
|
1455
|
+
Object.assign(set2.headers, response.headers.toJSON());
|
|
1456
|
+
else
|
|
1457
|
+
for (let [key, value] of response.headers.entries())
|
|
1458
|
+
key in set2.headers && (set2.headers[key] = value);
|
|
1459
|
+
return set2.status === 200 && (set2.status = response.status), set2.headers["content-encoding"] && delete set2.headers["content-encoding"], set2;
|
|
1460
|
+
}
|
|
1461
|
+
if (!response)
|
|
1462
|
+
return {
|
|
1463
|
+
headers: {},
|
|
1464
|
+
status: set2?.status ?? 200
|
|
1465
|
+
};
|
|
1466
|
+
if (hasHeaderShorthand)
|
|
1467
|
+
return set2 = {
|
|
1468
|
+
headers: response.headers.toJSON(),
|
|
1469
|
+
status: set2?.status ?? 200
|
|
1470
|
+
}, set2.headers["content-encoding"] && delete set2.headers["content-encoding"], set2;
|
|
1471
|
+
set2 = {
|
|
1472
|
+
headers: {},
|
|
1473
|
+
status: set2?.status ?? 200
|
|
1474
|
+
};
|
|
1475
|
+
for (let [key, value] of response.headers.entries())
|
|
1476
|
+
key !== "content-encoding" && key in set2.headers && (set2.headers[key] = value);
|
|
1477
|
+
return set2;
|
|
1478
|
+
}, createStreamHandler = ({ mapResponse: mapResponse2, mapCompactResponse: mapCompactResponse2 }) => async (generator, set2, request) => {
|
|
1479
|
+
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 = {
|
|
1481
|
+
status: 200,
|
|
1482
|
+
headers: {
|
|
1483
|
+
"content-type": "text/event-stream; charset=utf-8",
|
|
1484
|
+
"transfer-encoding": "chunked"
|
|
1485
|
+
}
|
|
1486
|
+
}, new Response(
|
|
1487
|
+
new ReadableStream({
|
|
1488
|
+
async start(controller) {
|
|
1489
|
+
let end = !1;
|
|
1490
|
+
if (request?.signal?.addEventListener("abort", () => {
|
|
1491
|
+
end = !0;
|
|
1492
|
+
try {
|
|
1493
|
+
controller.close();
|
|
1494
|
+
} catch {
|
|
1495
|
+
}
|
|
1496
|
+
}), init.value !== void 0 && init.value !== null)
|
|
1497
|
+
if (typeof init.value == "object")
|
|
1498
|
+
try {
|
|
1499
|
+
controller.enqueue(
|
|
1500
|
+
Buffer.from(JSON.stringify(init.value))
|
|
1501
|
+
);
|
|
1502
|
+
} catch {
|
|
1503
|
+
controller.enqueue(
|
|
1504
|
+
Buffer.from(init.value.toString())
|
|
1505
|
+
);
|
|
1506
|
+
}
|
|
1507
|
+
else
|
|
1508
|
+
controller.enqueue(
|
|
1509
|
+
Buffer.from(init.value.toString())
|
|
1510
|
+
);
|
|
1511
|
+
for await (let chunk of generator) {
|
|
1512
|
+
if (end) break;
|
|
1513
|
+
if (chunk != null) {
|
|
1514
|
+
if (typeof chunk == "object")
|
|
1515
|
+
try {
|
|
1516
|
+
controller.enqueue(
|
|
1517
|
+
Buffer.from(JSON.stringify(chunk))
|
|
1518
|
+
);
|
|
1519
|
+
} catch {
|
|
1520
|
+
controller.enqueue(
|
|
1521
|
+
Buffer.from(chunk.toString())
|
|
1522
|
+
);
|
|
1523
|
+
}
|
|
1524
|
+
else
|
|
1525
|
+
controller.enqueue(
|
|
1526
|
+
Buffer.from(chunk.toString())
|
|
1527
|
+
);
|
|
1528
|
+
await new Promise(
|
|
1529
|
+
(resolve) => setTimeout(() => resolve(), 0)
|
|
1530
|
+
);
|
|
1531
|
+
}
|
|
1532
|
+
}
|
|
1533
|
+
try {
|
|
1534
|
+
controller.close();
|
|
1535
|
+
} catch {
|
|
1536
|
+
}
|
|
1537
|
+
}
|
|
1538
|
+
}),
|
|
1539
|
+
set2
|
|
1540
|
+
));
|
|
1541
|
+
};
|
|
1542
|
+
async function* streamResponse(response) {
|
|
1543
|
+
let body = response.body;
|
|
1544
|
+
if (!body) return;
|
|
1545
|
+
let reader = body.getReader(), decoder = new TextDecoder();
|
|
1546
|
+
try {
|
|
1547
|
+
for (; ; ) {
|
|
1548
|
+
let { done, value } = await reader.read();
|
|
1549
|
+
if (done) break;
|
|
1550
|
+
yield decoder.decode(value);
|
|
1551
|
+
}
|
|
1552
|
+
} finally {
|
|
1553
|
+
reader.releaseLock();
|
|
1554
|
+
}
|
|
1555
|
+
}
|
|
1556
|
+
var handleSet = (set2) => {
|
|
1557
|
+
if (typeof set2.status == "string" && (set2.status = StatusMap[set2.status]), set2.cookie && isNotEmpty(set2.cookie)) {
|
|
1558
|
+
let cookie = serializeCookie(set2.cookie);
|
|
1559
|
+
cookie && (set2.headers["set-cookie"] = cookie);
|
|
1560
|
+
}
|
|
1561
|
+
set2.headers["set-cookie"] && Array.isArray(set2.headers["set-cookie"]) && (set2.headers = parseSetCookies(
|
|
1562
|
+
new Headers(set2.headers),
|
|
1563
|
+
set2.headers["set-cookie"]
|
|
1564
|
+
));
|
|
1565
|
+
}, createResponseHandler = (handler) => {
|
|
1566
|
+
let handleStream2 = createStreamHandler(handler);
|
|
1567
|
+
return (response, set2, request) => {
|
|
1568
|
+
let isCookieSet = !1;
|
|
1569
|
+
if (set2.headers instanceof Headers)
|
|
1570
|
+
for (let key of set2.headers.keys())
|
|
1571
|
+
if (key === "set-cookie") {
|
|
1572
|
+
if (isCookieSet) continue;
|
|
1573
|
+
isCookieSet = !0;
|
|
1574
|
+
for (let cookie of set2.headers.getSetCookie())
|
|
1575
|
+
response.headers.append("set-cookie", cookie);
|
|
1576
|
+
} else response.headers.append(key, set2.headers?.get(key) ?? "");
|
|
1577
|
+
else
|
|
1578
|
+
for (let key in set2.headers)
|
|
1579
|
+
response.headers.append(
|
|
1580
|
+
key,
|
|
1581
|
+
set2.headers[key]
|
|
1582
|
+
);
|
|
1583
|
+
let status2 = set2.status ?? 200;
|
|
1584
|
+
return response.status !== status2 && status2 !== 200 && (response.status <= 300 || response.status > 400) ? response.text().then((value) => {
|
|
1585
|
+
let newResponse = new Response(value, {
|
|
1586
|
+
headers: response.headers,
|
|
1587
|
+
status: set2.status
|
|
1588
|
+
});
|
|
1589
|
+
return !newResponse.headers.has("content-length") && newResponse.headers.get(
|
|
1590
|
+
"transfer-encoding"
|
|
1591
|
+
) === "chunked" ? handleStream2(
|
|
1592
|
+
streamResponse(newResponse),
|
|
1593
|
+
responseToSetHeaders(newResponse, set2),
|
|
1594
|
+
request
|
|
1595
|
+
) : newResponse;
|
|
1596
|
+
}) : !response.headers.has("content-length") && response.headers.get("transfer-encoding") === "chunked" ? handleStream2(
|
|
1597
|
+
streamResponse(response),
|
|
1598
|
+
responseToSetHeaders(response, set2),
|
|
1599
|
+
request
|
|
1600
|
+
) : response;
|
|
1601
|
+
};
|
|
1602
|
+
};
|
|
1603
|
+
|
|
1604
|
+
// src/adapter/bun/handler.ts
|
|
1605
|
+
var mapResponse = (response, set2, request) => {
|
|
1606
|
+
if (isNotEmpty(set2.headers) || set2.status !== 200 || set2.cookie)
|
|
1607
|
+
switch (handleSet(set2), response?.constructor?.name) {
|
|
1608
|
+
case "String":
|
|
1609
|
+
return new Response(response, set2);
|
|
1610
|
+
case "Array":
|
|
1611
|
+
case "Object":
|
|
1612
|
+
return set2.headers["content-type"] = "application/json", new Response(JSON.stringify(response), set2);
|
|
1613
|
+
case "ElysiaFile":
|
|
1614
|
+
return handleFile(response.value);
|
|
1615
|
+
case "File":
|
|
1616
|
+
return handleFile(response, set2);
|
|
1617
|
+
case "Blob":
|
|
1618
|
+
return handleFile(response, set2);
|
|
1619
|
+
case "ElysiaCustomStatusResponse":
|
|
1620
|
+
return set2.status = response.code, mapResponse(
|
|
1621
|
+
response.response,
|
|
1622
|
+
set2,
|
|
1623
|
+
request
|
|
1624
|
+
);
|
|
1625
|
+
case "ReadableStream":
|
|
1626
|
+
return set2.headers["content-type"]?.startsWith(
|
|
1627
|
+
"text/event-stream"
|
|
1628
|
+
) || (set2.headers["content-type"] = "text/event-stream; charset=utf-8"), request?.signal?.addEventListener(
|
|
1629
|
+
"abort",
|
|
1630
|
+
{
|
|
1631
|
+
handleEvent() {
|
|
1632
|
+
request?.signal && !request?.signal?.aborted && response.cancel();
|
|
1633
|
+
}
|
|
1634
|
+
},
|
|
1635
|
+
{
|
|
1636
|
+
once: !0
|
|
1637
|
+
}
|
|
1638
|
+
), new Response(response, set2);
|
|
1639
|
+
case void 0:
|
|
1640
|
+
return response ? new Response(JSON.stringify(response), set2) : new Response("", set2);
|
|
1641
|
+
case "Response":
|
|
1642
|
+
return handleResponse(response, set2, request);
|
|
1643
|
+
case "Error":
|
|
1644
|
+
return errorToResponse(response, set2);
|
|
1645
|
+
case "Promise":
|
|
1646
|
+
return response.then(
|
|
1647
|
+
(x) => mapResponse(x, set2, request)
|
|
1648
|
+
);
|
|
1649
|
+
case "Function":
|
|
1650
|
+
return mapResponse(response(), set2, request);
|
|
1651
|
+
case "Number":
|
|
1652
|
+
case "Boolean":
|
|
1653
|
+
return new Response(
|
|
1654
|
+
response.toString(),
|
|
1655
|
+
set2
|
|
1656
|
+
);
|
|
1657
|
+
case "Cookie":
|
|
1658
|
+
return response instanceof Cookie ? new Response(response.value, set2) : new Response(response?.toString(), set2);
|
|
1659
|
+
case "FormData":
|
|
1660
|
+
return new Response(response, set2);
|
|
1661
|
+
default:
|
|
1662
|
+
if (response instanceof Response)
|
|
1663
|
+
return handleResponse(response, set2, request);
|
|
1664
|
+
if (response instanceof Promise)
|
|
1665
|
+
return response.then((x) => mapResponse(x, set2));
|
|
1666
|
+
if (response instanceof Error)
|
|
1667
|
+
return errorToResponse(response, set2);
|
|
1668
|
+
if (response instanceof ElysiaCustomStatusResponse)
|
|
1669
|
+
return set2.status = response.code, mapResponse(
|
|
1670
|
+
response.response,
|
|
1671
|
+
set2,
|
|
1672
|
+
request
|
|
1673
|
+
);
|
|
1674
|
+
if (typeof response?.next == "function")
|
|
1675
|
+
return handleStream(response, set2, request);
|
|
1676
|
+
if (typeof response?.then == "function")
|
|
1677
|
+
return response.then((x) => mapResponse(x, set2));
|
|
1678
|
+
if (typeof response?.toResponse == "function")
|
|
1679
|
+
return mapResponse(response.toResponse(), set2);
|
|
1680
|
+
if ("charCodeAt" in response) {
|
|
1681
|
+
let code = response.charCodeAt(0);
|
|
1682
|
+
if (code === 123 || code === 91)
|
|
1683
|
+
return set2.headers["Content-Type"] || (set2.headers["Content-Type"] = "application/json"), new Response(
|
|
1684
|
+
JSON.stringify(response),
|
|
1685
|
+
set2
|
|
1686
|
+
);
|
|
1687
|
+
}
|
|
1688
|
+
return new Response(response, set2);
|
|
1689
|
+
}
|
|
1690
|
+
return response instanceof Response && !response.headers.has("content-length") && response.headers.get("transfer-encoding") === "chunked" ? handleStream(
|
|
1691
|
+
streamResponse(response),
|
|
1692
|
+
responseToSetHeaders(response, set2),
|
|
1693
|
+
request
|
|
1694
|
+
) : (
|
|
1695
|
+
// @ts-expect-error
|
|
1696
|
+
typeof response?.next == "function" || response instanceof ReadableStream ? handleStream(response, set2, request) : mapCompactResponse(response, request)
|
|
1697
|
+
);
|
|
1698
|
+
}, mapEarlyResponse = (response, set2, request) => {
|
|
1699
|
+
if (response != null)
|
|
1700
|
+
if (isNotEmpty(set2.headers) || set2.status !== 200 || set2.cookie)
|
|
1701
|
+
switch (handleSet(set2), response?.constructor?.name) {
|
|
1702
|
+
case "String":
|
|
1703
|
+
return new Response(response, set2);
|
|
1704
|
+
case "Array":
|
|
1705
|
+
case "Object":
|
|
1706
|
+
return set2.headers["content-type"] = "application/json", new Response(JSON.stringify(response), set2);
|
|
1707
|
+
case "ElysiaFile":
|
|
1708
|
+
return handleFile(response.value);
|
|
1709
|
+
case "File":
|
|
1710
|
+
return handleFile(response, set2);
|
|
1711
|
+
case "Blob":
|
|
1712
|
+
return handleFile(response, set2);
|
|
1713
|
+
case "ElysiaCustomStatusResponse":
|
|
1714
|
+
return set2.status = response.code, mapEarlyResponse(
|
|
1715
|
+
response.response,
|
|
1716
|
+
set2,
|
|
1717
|
+
request
|
|
1718
|
+
);
|
|
1719
|
+
case "ReadableStream":
|
|
1720
|
+
return set2.headers["content-type"]?.startsWith(
|
|
1721
|
+
"text/event-stream"
|
|
1722
|
+
) || (set2.headers["content-type"] = "text/event-stream; charset=utf-8"), request?.signal?.addEventListener(
|
|
1723
|
+
"abort",
|
|
1724
|
+
{
|
|
1725
|
+
handleEvent() {
|
|
1726
|
+
request?.signal && !request?.signal?.aborted && response.cancel();
|
|
1727
|
+
}
|
|
1728
|
+
},
|
|
1729
|
+
{
|
|
1730
|
+
once: !0
|
|
1731
|
+
}
|
|
1732
|
+
), new Response(response, set2);
|
|
1733
|
+
case void 0:
|
|
1734
|
+
return response ? new Response(JSON.stringify(response), set2) : void 0;
|
|
1735
|
+
case "Response":
|
|
1736
|
+
return handleResponse(response, set2, request);
|
|
1737
|
+
case "Promise":
|
|
1738
|
+
return response.then(
|
|
1739
|
+
(x) => mapEarlyResponse(x, set2)
|
|
1740
|
+
);
|
|
1741
|
+
case "Error":
|
|
1742
|
+
return errorToResponse(response, set2);
|
|
1743
|
+
case "Function":
|
|
1744
|
+
return mapEarlyResponse(response(), set2);
|
|
1745
|
+
case "Number":
|
|
1746
|
+
case "Boolean":
|
|
1747
|
+
return new Response(
|
|
1748
|
+
response.toString(),
|
|
1749
|
+
set2
|
|
1750
|
+
);
|
|
1751
|
+
case "FormData":
|
|
1752
|
+
return new Response(response);
|
|
1753
|
+
case "Cookie":
|
|
1754
|
+
return response instanceof Cookie ? new Response(response.value, set2) : new Response(response?.toString(), set2);
|
|
1755
|
+
default:
|
|
1756
|
+
if (response instanceof Response)
|
|
1757
|
+
return handleResponse(response, set2, request);
|
|
1758
|
+
if (response instanceof Promise)
|
|
1759
|
+
return response.then((x) => mapEarlyResponse(x, set2));
|
|
1760
|
+
if (response instanceof Error)
|
|
1761
|
+
return errorToResponse(response, set2);
|
|
1762
|
+
if (response instanceof ElysiaCustomStatusResponse)
|
|
1763
|
+
return set2.status = response.code, mapEarlyResponse(
|
|
1764
|
+
response.response,
|
|
1765
|
+
set2,
|
|
1766
|
+
request
|
|
1767
|
+
);
|
|
1768
|
+
if (typeof response?.next == "function")
|
|
1769
|
+
return handleStream(response, set2, request);
|
|
1770
|
+
if (typeof response?.then == "function")
|
|
1771
|
+
return response.then((x) => mapEarlyResponse(x, set2));
|
|
1772
|
+
if (typeof response?.toResponse == "function")
|
|
1773
|
+
return mapEarlyResponse(response.toResponse(), set2);
|
|
1774
|
+
if ("charCodeAt" in response) {
|
|
1775
|
+
let code = response.charCodeAt(0);
|
|
1776
|
+
if (code === 123 || code === 91)
|
|
1777
|
+
return set2.headers["Content-Type"] || (set2.headers["Content-Type"] = "application/json"), new Response(
|
|
1778
|
+
JSON.stringify(response),
|
|
1779
|
+
set2
|
|
1780
|
+
);
|
|
1781
|
+
}
|
|
1782
|
+
return new Response(response, set2);
|
|
1783
|
+
}
|
|
1784
|
+
else
|
|
1785
|
+
switch (response?.constructor?.name) {
|
|
1786
|
+
case "String":
|
|
1787
|
+
return new Response(response);
|
|
1788
|
+
case "Array":
|
|
1789
|
+
case "Object":
|
|
1790
|
+
return set2.headers["content-type"] = "application/json", new Response(JSON.stringify(response), set2);
|
|
1791
|
+
case "ElysiaFile":
|
|
1792
|
+
return handleFile(response.value);
|
|
1793
|
+
case "File":
|
|
1794
|
+
return handleFile(response, set2);
|
|
1795
|
+
case "Blob":
|
|
1796
|
+
return handleFile(response, set2);
|
|
1797
|
+
case "ElysiaCustomStatusResponse":
|
|
1798
|
+
return set2.status = response.code, mapEarlyResponse(
|
|
1799
|
+
response.response,
|
|
1800
|
+
set2,
|
|
1801
|
+
request
|
|
1802
|
+
);
|
|
1803
|
+
case "ReadableStream":
|
|
1804
|
+
return request?.signal?.addEventListener(
|
|
1805
|
+
"abort",
|
|
1806
|
+
{
|
|
1807
|
+
handleEvent() {
|
|
1808
|
+
request?.signal && !request?.signal?.aborted && response.cancel();
|
|
1809
|
+
}
|
|
1810
|
+
},
|
|
1811
|
+
{
|
|
1812
|
+
once: !0
|
|
1813
|
+
}
|
|
1814
|
+
), new Response(response, {
|
|
1815
|
+
headers: {
|
|
1816
|
+
"Content-Type": "text/event-stream; charset=utf-8"
|
|
1817
|
+
}
|
|
1818
|
+
});
|
|
1819
|
+
case void 0:
|
|
1820
|
+
return response ? new Response(JSON.stringify(response), {
|
|
1821
|
+
headers: {
|
|
1822
|
+
"content-type": "application/json"
|
|
1823
|
+
}
|
|
1824
|
+
}) : new Response("");
|
|
1825
|
+
case "Response":
|
|
1826
|
+
return !response.headers.has("content-length") && response.headers.get("transfer-encoding") === "chunked" ? handleStream(
|
|
1827
|
+
streamResponse(response),
|
|
1828
|
+
responseToSetHeaders(response),
|
|
1829
|
+
request
|
|
1830
|
+
) : response;
|
|
1831
|
+
case "Promise":
|
|
1832
|
+
return response.then((x) => {
|
|
1833
|
+
let r = mapEarlyResponse(x, set2);
|
|
1834
|
+
if (r !== void 0) return r;
|
|
1835
|
+
});
|
|
1836
|
+
case "Error":
|
|
1837
|
+
return errorToResponse(response, set2);
|
|
1838
|
+
case "Function":
|
|
1839
|
+
return mapCompactResponse(response(), request);
|
|
1840
|
+
case "Number":
|
|
1841
|
+
case "Boolean":
|
|
1842
|
+
return new Response(response.toString());
|
|
1843
|
+
case "Cookie":
|
|
1844
|
+
return response instanceof Cookie ? new Response(response.value, set2) : new Response(response?.toString(), set2);
|
|
1845
|
+
case "FormData":
|
|
1846
|
+
return new Response(response);
|
|
1847
|
+
default:
|
|
1848
|
+
if (response instanceof Response) return response;
|
|
1849
|
+
if (response instanceof Promise)
|
|
1850
|
+
return response.then((x) => mapEarlyResponse(x, set2));
|
|
1851
|
+
if (response instanceof Error)
|
|
1852
|
+
return errorToResponse(response, set2);
|
|
1853
|
+
if (response instanceof ElysiaCustomStatusResponse)
|
|
1854
|
+
return set2.status = response.code, mapEarlyResponse(
|
|
1855
|
+
response.response,
|
|
1856
|
+
set2,
|
|
1857
|
+
request
|
|
1858
|
+
);
|
|
1859
|
+
if (typeof response?.next == "function")
|
|
1860
|
+
return handleStream(response, set2, request);
|
|
1861
|
+
if (typeof response?.then == "function")
|
|
1862
|
+
return response.then((x) => mapEarlyResponse(x, set2));
|
|
1863
|
+
if (typeof response?.toResponse == "function")
|
|
1864
|
+
return mapEarlyResponse(response.toResponse(), set2);
|
|
1865
|
+
if ("charCodeAt" in response) {
|
|
1866
|
+
let code = response.charCodeAt(0);
|
|
1867
|
+
if (code === 123 || code === 91)
|
|
1868
|
+
return set2.headers["Content-Type"] || (set2.headers["Content-Type"] = "application/json"), new Response(
|
|
1869
|
+
JSON.stringify(response),
|
|
1870
|
+
set2
|
|
1871
|
+
);
|
|
1872
|
+
}
|
|
1873
|
+
return new Response(response);
|
|
1874
|
+
}
|
|
1875
|
+
}, mapCompactResponse = (response, request) => {
|
|
1876
|
+
switch (response?.constructor?.name) {
|
|
1877
|
+
case "String":
|
|
1878
|
+
return new Response(response);
|
|
1879
|
+
case "Object":
|
|
1880
|
+
case "Array":
|
|
1881
|
+
return new Response(JSON.stringify(response), {
|
|
1882
|
+
headers: {
|
|
1883
|
+
"Content-Type": "application/json"
|
|
1884
|
+
}
|
|
1885
|
+
});
|
|
1886
|
+
case "ElysiaFile":
|
|
1887
|
+
return handleFile(response.value);
|
|
1888
|
+
case "File":
|
|
1889
|
+
return handleFile(response);
|
|
1890
|
+
case "Blob":
|
|
1891
|
+
return handleFile(response);
|
|
1892
|
+
case "ElysiaCustomStatusResponse":
|
|
1893
|
+
return mapResponse(
|
|
1894
|
+
response.response,
|
|
1895
|
+
{
|
|
1896
|
+
status: response.code,
|
|
1897
|
+
headers: {}
|
|
1898
|
+
}
|
|
1899
|
+
);
|
|
1900
|
+
case "ReadableStream":
|
|
1901
|
+
return request?.signal?.addEventListener(
|
|
1902
|
+
"abort",
|
|
1903
|
+
{
|
|
1904
|
+
handleEvent() {
|
|
1905
|
+
request?.signal && !request?.signal?.aborted && response.cancel();
|
|
1906
|
+
}
|
|
1907
|
+
},
|
|
1908
|
+
{
|
|
1909
|
+
once: !0
|
|
1910
|
+
}
|
|
1911
|
+
), new Response(response, {
|
|
1912
|
+
headers: {
|
|
1913
|
+
"Content-Type": "text/event-stream; charset=utf-8"
|
|
1914
|
+
}
|
|
1915
|
+
});
|
|
1916
|
+
case void 0:
|
|
1917
|
+
return response ? new Response(JSON.stringify(response), {
|
|
1918
|
+
headers: {
|
|
1919
|
+
"content-type": "application/json"
|
|
1920
|
+
}
|
|
1921
|
+
}) : new Response("");
|
|
1922
|
+
case "Response":
|
|
1923
|
+
return response.headers.get("transfer-encoding") === "chunked" ? handleStream(
|
|
1924
|
+
streamResponse(response),
|
|
1925
|
+
responseToSetHeaders(response),
|
|
1926
|
+
request
|
|
1927
|
+
) : response;
|
|
1928
|
+
case "Error":
|
|
1929
|
+
return errorToResponse(response);
|
|
1930
|
+
case "Promise":
|
|
1931
|
+
return response.then(
|
|
1932
|
+
(x) => mapCompactResponse(x, request)
|
|
1933
|
+
);
|
|
1934
|
+
// ? Maybe response or Blob
|
|
1935
|
+
case "Function":
|
|
1936
|
+
return mapCompactResponse(response(), request);
|
|
1937
|
+
case "Number":
|
|
1938
|
+
case "Boolean":
|
|
1939
|
+
return new Response(response.toString());
|
|
1940
|
+
case "FormData":
|
|
1941
|
+
return new Response(response);
|
|
1942
|
+
default:
|
|
1943
|
+
if (response instanceof Response) return response;
|
|
1944
|
+
if (response instanceof Promise)
|
|
1945
|
+
return response.then(
|
|
1946
|
+
(x) => mapCompactResponse(x, request)
|
|
1947
|
+
);
|
|
1948
|
+
if (response instanceof Error)
|
|
1949
|
+
return errorToResponse(response);
|
|
1950
|
+
if (response instanceof ElysiaCustomStatusResponse)
|
|
1951
|
+
return mapResponse(
|
|
1952
|
+
response.response,
|
|
1953
|
+
{
|
|
1954
|
+
status: response.code,
|
|
1955
|
+
headers: {}
|
|
1956
|
+
}
|
|
1957
|
+
);
|
|
1958
|
+
if (typeof response?.next == "function")
|
|
1959
|
+
return handleStream(response, void 0, request);
|
|
1960
|
+
if (typeof response?.then == "function")
|
|
1961
|
+
return response.then((x) => mapResponse(x, set));
|
|
1962
|
+
if (typeof response?.toResponse == "function")
|
|
1963
|
+
return mapCompactResponse(response.toResponse());
|
|
1964
|
+
if ("charCodeAt" in response) {
|
|
1965
|
+
let code = response.charCodeAt(0);
|
|
1966
|
+
if (code === 123 || code === 91)
|
|
1967
|
+
return new Response(JSON.stringify(response), {
|
|
1968
|
+
headers: {
|
|
1969
|
+
"Content-Type": "application/json"
|
|
1970
|
+
}
|
|
1971
|
+
});
|
|
1972
|
+
}
|
|
1973
|
+
return new Response(response);
|
|
1974
|
+
}
|
|
1975
|
+
}, errorToResponse = (error, set2) => new Response(
|
|
1976
|
+
JSON.stringify({
|
|
1977
|
+
name: error?.name,
|
|
1978
|
+
message: error?.message,
|
|
1979
|
+
cause: error?.cause
|
|
1980
|
+
}),
|
|
1981
|
+
{
|
|
1982
|
+
status: set2?.status !== 200 ? set2?.status ?? 500 : 500,
|
|
1983
|
+
headers: set2?.headers
|
|
1984
|
+
}
|
|
1985
|
+
);
|
|
1986
|
+
var handleResponse = createResponseHandler({
|
|
1987
|
+
mapResponse,
|
|
1988
|
+
mapCompactResponse
|
|
1989
|
+
}), handleStream = createStreamHandler({
|
|
1990
|
+
mapResponse,
|
|
1991
|
+
mapCompactResponse
|
|
1992
|
+
});
|
|
1993
|
+
|
|
1262
1994
|
// src/adapter/bun/compose.ts
|
|
1263
1995
|
var allocateIf = (value, condition) => condition ? value : "", createContext = (app, route, inference, isInline = !1) => {
|
|
1264
1996
|
let fnLiteral = "", defaultHeaders = app.setHeaders, hasTrace = !!app.event.trace?.length;
|
|
@@ -1294,7 +2026,7 @@ return u.substring(s,qi)
|
|
|
1294
2026
|
},
|
|
1295
2027
|
inference
|
|
1296
2028
|
);
|
|
1297
|
-
let fnLiteral = "const handler=data.handler,app=data.app,store=data.store,decorator=data.decorator,redirect=data.redirect,route=data.route," + allocateIf("randomId=data.randomId,", hasTrace) + allocateIf("ELYSIA_REQUEST_ID=data.ELYSIA_REQUEST_ID,", hasTrace) + allocateIf("ELYSIA_TRACE=data.ELYSIA_TRACE,", hasTrace) + allocateIf("trace=data.trace,", hasTrace) + allocateIf("hoc=data.hoc,", hasHoc) + `status=data.status
|
|
2029
|
+
let fnLiteral = "const handler=data.handler,app=data.app,store=data.store,decorator=data.decorator,redirect=data.redirect,route=data.route,mapEarlyResponse=data.mapEarlyResponse," + allocateIf("randomId=data.randomId,", hasTrace) + allocateIf("ELYSIA_REQUEST_ID=data.ELYSIA_REQUEST_ID,", hasTrace) + allocateIf("ELYSIA_TRACE=data.ELYSIA_TRACE,", hasTrace) + allocateIf("trace=data.trace,", hasTrace) + allocateIf("hoc=data.hoc,", hasHoc) + `status=data.status
|
|
1298
2030
|
`;
|
|
1299
2031
|
return app.event.request?.length && (fnLiteral += `const onRequest=app.event.request.map(x=>x.fn)
|
|
1300
2032
|
`), fnLiteral += `${app.event.request?.find(isAsync) ? "async" : ""} function map(request){`, hasTrace || inference.query || app.event.request?.length ? (fnLiteral += createContext(app, route, inference), fnLiteral += createOnRequestHandler(app), fnLiteral += "return handler(c)}") : fnLiteral += `return handler(${createContext(app, route, inference, !0)})}`, fnLiteral += createHoc(app), Function(
|
|
@@ -1313,7 +2045,8 @@ return u.substring(s,qi)
|
|
|
1313
2045
|
randomId: hasTrace ? randomId : void 0,
|
|
1314
2046
|
ELYSIA_TRACE: hasTrace ? ELYSIA_TRACE : void 0,
|
|
1315
2047
|
ELYSIA_REQUEST_ID: hasTrace ? ELYSIA_REQUEST_ID : void 0,
|
|
1316
|
-
trace: hasTrace ? app.event.trace?.map((x) => x?.fn ?? x) : void 0
|
|
2048
|
+
trace: hasTrace ? app.event.trace?.map((x) => x?.fn ?? x) : void 0,
|
|
2049
|
+
mapEarlyResponse
|
|
1317
2050
|
});
|
|
1318
2051
|
};
|
|
1319
2052
|
export {
|