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