elysia 1.0.21 → 1.0.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/bun/index.d.ts +1 -1
- package/dist/bun/index.js +108 -108
- package/dist/bun/index.js.map +6 -6
- package/dist/cjs/compose.js +107 -25
- package/dist/cjs/cookies.js +3 -2
- package/dist/cjs/dynamic-handle.js +113 -31
- package/dist/cjs/error.js +3 -2
- package/dist/cjs/handler.js +107 -20
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +118 -32
- package/dist/cjs/type-system.js +3 -2
- package/dist/cjs/types.d.ts +11 -4
- package/dist/cjs/utils.d.ts +14 -2
- package/dist/cjs/utils.js +24 -7
- package/dist/cjs/ws/index.js +3 -2
- package/dist/compose.mjs +107 -25
- package/dist/cookies.mjs +3 -2
- package/dist/dynamic-handle.mjs +113 -31
- package/dist/error.mjs +3 -2
- package/dist/handler.mjs +107 -20
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +117 -32
- package/dist/type-system.mjs +3 -2
- package/dist/types.d.ts +11 -4
- package/dist/utils.d.ts +14 -2
- package/dist/utils.mjs +22 -7
- package/dist/ws/index.mjs +3 -2
- package/package.json +2 -1
- package/tsconfig.test.tsbuildinfo +1 -1
package/dist/cjs/handler.js
CHANGED
|
@@ -472,7 +472,7 @@ var validateFile = (options, value) => {
|
|
|
472
472
|
}
|
|
473
473
|
return true;
|
|
474
474
|
};
|
|
475
|
-
var
|
|
475
|
+
var File2 = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type("File", validateFile);
|
|
476
476
|
var Files = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type(
|
|
477
477
|
"Files",
|
|
478
478
|
(options, value) => {
|
|
@@ -618,7 +618,7 @@ var ElysiaType = {
|
|
|
618
618
|
return JSON.stringify(value);
|
|
619
619
|
});
|
|
620
620
|
},
|
|
621
|
-
File,
|
|
621
|
+
File: File2,
|
|
622
622
|
Files: (options = {}) => t.Transform(Files(options)).Decode((value) => {
|
|
623
623
|
if (Array.isArray(value))
|
|
624
624
|
return value;
|
|
@@ -780,6 +780,24 @@ var InvertedStatusMap = Object.fromEntries(
|
|
|
780
780
|
Object.entries(StatusMap).map(([k, v]) => [v, k])
|
|
781
781
|
);
|
|
782
782
|
var encoder = new TextEncoder();
|
|
783
|
+
var ELYSIA_FORM_DATA = Symbol("ElysiaFormData");
|
|
784
|
+
var form = (items) => {
|
|
785
|
+
const formData = new FormData();
|
|
786
|
+
for (const [key, value] of Object.entries(items)) {
|
|
787
|
+
if (Array.isArray(value)) {
|
|
788
|
+
for (const v of value) {
|
|
789
|
+
if (value instanceof File)
|
|
790
|
+
formData.append(key, value, value.name);
|
|
791
|
+
formData.append(key, v);
|
|
792
|
+
}
|
|
793
|
+
continue;
|
|
794
|
+
}
|
|
795
|
+
if (value instanceof File)
|
|
796
|
+
formData.append(key, value, value.name);
|
|
797
|
+
formData.append(key, value);
|
|
798
|
+
}
|
|
799
|
+
return formData;
|
|
800
|
+
};
|
|
783
801
|
|
|
784
802
|
// src/handler.ts
|
|
785
803
|
var hasHeaderShorthand = "toJSON" in new Headers();
|
|
@@ -887,9 +905,21 @@ var mapResponse = (response, set, request) => {
|
|
|
887
905
|
return new Response(response, set);
|
|
888
906
|
case "Blob":
|
|
889
907
|
return handleFile(response, set);
|
|
890
|
-
case "Object":
|
|
891
908
|
case "Array":
|
|
892
909
|
return Response.json(response, set);
|
|
910
|
+
case "Object":
|
|
911
|
+
for (const value in Object.values(response)) {
|
|
912
|
+
switch (value?.constructor?.name) {
|
|
913
|
+
case "Blob":
|
|
914
|
+
case "File":
|
|
915
|
+
case "ArrayBuffer":
|
|
916
|
+
case "FileRef":
|
|
917
|
+
return new Response(form(response));
|
|
918
|
+
default:
|
|
919
|
+
break;
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
return Response.json(response, set);
|
|
893
923
|
case "ReadableStream":
|
|
894
924
|
if (!set.headers["content-type"]?.startsWith(
|
|
895
925
|
"text/event-stream"
|
|
@@ -963,6 +993,8 @@ var mapResponse = (response, set, request) => {
|
|
|
963
993
|
if (response instanceof Cookie)
|
|
964
994
|
return new Response(response.value, set);
|
|
965
995
|
return new Response(response?.toString(), set);
|
|
996
|
+
case "FormData":
|
|
997
|
+
return new Response(response, set);
|
|
966
998
|
default:
|
|
967
999
|
if (response instanceof Response) {
|
|
968
1000
|
let isCookieSet2 = false;
|
|
@@ -1022,13 +1054,24 @@ var mapResponse = (response, set, request) => {
|
|
|
1022
1054
|
return new Response(response);
|
|
1023
1055
|
case "Blob":
|
|
1024
1056
|
return handleFile(response, set);
|
|
1025
|
-
case "Object":
|
|
1026
1057
|
case "Array":
|
|
1027
|
-
return
|
|
1028
|
-
|
|
1029
|
-
|
|
1058
|
+
return Response.json(response);
|
|
1059
|
+
case "Object":
|
|
1060
|
+
for (const value in Object.values(response)) {
|
|
1061
|
+
switch (value?.constructor?.name) {
|
|
1062
|
+
case "Blob":
|
|
1063
|
+
case "File":
|
|
1064
|
+
case "ArrayBuffer":
|
|
1065
|
+
case "FileRef":
|
|
1066
|
+
return new Response(
|
|
1067
|
+
form(response),
|
|
1068
|
+
set
|
|
1069
|
+
);
|
|
1070
|
+
default:
|
|
1071
|
+
break;
|
|
1030
1072
|
}
|
|
1031
|
-
}
|
|
1073
|
+
}
|
|
1074
|
+
return Response.json(response, set);
|
|
1032
1075
|
case "ReadableStream":
|
|
1033
1076
|
request?.signal.addEventListener(
|
|
1034
1077
|
"abort",
|
|
@@ -1075,6 +1118,8 @@ var mapResponse = (response, set, request) => {
|
|
|
1075
1118
|
if (response instanceof Cookie)
|
|
1076
1119
|
return new Response(response.value, set);
|
|
1077
1120
|
return new Response(response?.toString(), set);
|
|
1121
|
+
case "FormData":
|
|
1122
|
+
return new Response(response, set);
|
|
1078
1123
|
default:
|
|
1079
1124
|
if (response instanceof Response)
|
|
1080
1125
|
return new Response(response.body, {
|
|
@@ -1129,9 +1174,24 @@ var mapEarlyResponse = (response, set, request) => {
|
|
|
1129
1174
|
return new Response(response, set);
|
|
1130
1175
|
case "Blob":
|
|
1131
1176
|
return handleFile(response, set);
|
|
1132
|
-
case "Object":
|
|
1133
1177
|
case "Array":
|
|
1134
1178
|
return Response.json(response, set);
|
|
1179
|
+
case "Object":
|
|
1180
|
+
for (const value in Object.values(response)) {
|
|
1181
|
+
switch (value?.constructor?.name) {
|
|
1182
|
+
case "Blob":
|
|
1183
|
+
case "File":
|
|
1184
|
+
case "ArrayBuffer":
|
|
1185
|
+
case "FileRef":
|
|
1186
|
+
return new Response(
|
|
1187
|
+
form(response),
|
|
1188
|
+
set
|
|
1189
|
+
);
|
|
1190
|
+
default:
|
|
1191
|
+
break;
|
|
1192
|
+
}
|
|
1193
|
+
}
|
|
1194
|
+
return Response.json(response, set);
|
|
1135
1195
|
case "ReadableStream":
|
|
1136
1196
|
if (!set.headers["content-type"]?.startsWith(
|
|
1137
1197
|
"text/event-stream"
|
|
@@ -1203,6 +1263,8 @@ var mapEarlyResponse = (response, set, request) => {
|
|
|
1203
1263
|
response.toString(),
|
|
1204
1264
|
set
|
|
1205
1265
|
);
|
|
1266
|
+
case "FormData":
|
|
1267
|
+
return new Response(response);
|
|
1206
1268
|
case "Cookie":
|
|
1207
1269
|
if (response instanceof Cookie)
|
|
1208
1270
|
return new Response(response.value, set);
|
|
@@ -1262,13 +1324,24 @@ var mapEarlyResponse = (response, set, request) => {
|
|
|
1262
1324
|
return new Response(response);
|
|
1263
1325
|
case "Blob":
|
|
1264
1326
|
return handleFile(response, set);
|
|
1265
|
-
case "Object":
|
|
1266
1327
|
case "Array":
|
|
1267
|
-
return
|
|
1268
|
-
|
|
1269
|
-
|
|
1328
|
+
return Response.json(response);
|
|
1329
|
+
case "Object":
|
|
1330
|
+
for (const value in Object.values(response)) {
|
|
1331
|
+
switch (value?.constructor?.name) {
|
|
1332
|
+
case "Blob":
|
|
1333
|
+
case "File":
|
|
1334
|
+
case "ArrayBuffer":
|
|
1335
|
+
case "FileRef":
|
|
1336
|
+
return new Response(
|
|
1337
|
+
form(response),
|
|
1338
|
+
set
|
|
1339
|
+
);
|
|
1340
|
+
default:
|
|
1341
|
+
break;
|
|
1270
1342
|
}
|
|
1271
|
-
}
|
|
1343
|
+
}
|
|
1344
|
+
return Response.json(response, set);
|
|
1272
1345
|
case "ReadableStream":
|
|
1273
1346
|
request?.signal.addEventListener(
|
|
1274
1347
|
"abort",
|
|
@@ -1314,6 +1387,8 @@ var mapEarlyResponse = (response, set, request) => {
|
|
|
1314
1387
|
if (response instanceof Cookie)
|
|
1315
1388
|
return new Response(response.value, set);
|
|
1316
1389
|
return new Response(response?.toString(), set);
|
|
1390
|
+
case "FormData":
|
|
1391
|
+
return new Response(response);
|
|
1317
1392
|
default:
|
|
1318
1393
|
if (response instanceof Response)
|
|
1319
1394
|
return new Response(response.body, {
|
|
@@ -1353,13 +1428,23 @@ var mapCompactResponse = (response, request) => {
|
|
|
1353
1428
|
return new Response(response);
|
|
1354
1429
|
case "Blob":
|
|
1355
1430
|
return handleFile(response);
|
|
1356
|
-
case "Object":
|
|
1357
1431
|
case "Array":
|
|
1358
|
-
return
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1432
|
+
return Response.json(response);
|
|
1433
|
+
case "Object":
|
|
1434
|
+
form:
|
|
1435
|
+
for (const value of Object.values(response))
|
|
1436
|
+
switch (value?.constructor?.name) {
|
|
1437
|
+
case "Blob":
|
|
1438
|
+
case "File":
|
|
1439
|
+
case "ArrayBuffer":
|
|
1440
|
+
case "FileRef":
|
|
1441
|
+
return new Response(form(response));
|
|
1442
|
+
case "Object":
|
|
1443
|
+
break form;
|
|
1444
|
+
default:
|
|
1445
|
+
break;
|
|
1446
|
+
}
|
|
1447
|
+
return Response.json(response);
|
|
1363
1448
|
case "ReadableStream":
|
|
1364
1449
|
request?.signal.addEventListener(
|
|
1365
1450
|
"abort",
|
|
@@ -1399,6 +1484,8 @@ var mapCompactResponse = (response, request) => {
|
|
|
1399
1484
|
case "Number":
|
|
1400
1485
|
case "Boolean":
|
|
1401
1486
|
return new Response(response.toString());
|
|
1487
|
+
case "FormData":
|
|
1488
|
+
return new Response(response);
|
|
1402
1489
|
default:
|
|
1403
1490
|
if (response instanceof Response)
|
|
1404
1491
|
return new Response(response.body, {
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1418,7 +1418,7 @@ export { Elysia };
|
|
|
1418
1418
|
export { mapResponse, mapCompactResponse, mapEarlyResponse } from './handler';
|
|
1419
1419
|
export { t } from './type-system';
|
|
1420
1420
|
export { Cookie, type CookieOptions } from './cookies';
|
|
1421
|
-
export { getSchemaValidator, mergeHook, mergeObjectArray, getResponseSchemaValidator, redirect, StatusMap, InvertedStatusMap } from './utils';
|
|
1421
|
+
export { getSchemaValidator, mergeHook, mergeObjectArray, getResponseSchemaValidator, redirect, StatusMap, InvertedStatusMap, form, type ELYSIA_FORM_DATA } from './utils';
|
|
1422
1422
|
export { error, ParseError, NotFoundError, ValidationError, InternalServerError, InvalidCookieSignature, ERROR_CODE, ELYSIA_RESPONSE } from './error';
|
|
1423
1423
|
export type { Context, PreContext } from './context';
|
|
1424
1424
|
export type { EphemeralType, CreateEden, ComposeElysiaResponse, ElysiaConfig, SingletonBase, DefinitionBase, RouteBase, Handler, ComposedHandler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, SchemaValidator, VoidHandler, PreHandler, BodyHandler, OptionalHandler, ErrorHandler, AfterHandler, LifeCycleEvent, TraceEvent, LifeCycleStore, LifeCycleType, MaybePromise, ListenCallback, UnwrapSchema, TraceHandler, TraceProcess, TraceReporter, TraceStream, Checksum, DocumentDecoration, InferContext, InferHandler } from './types';
|
package/dist/cjs/index.js
CHANGED
|
@@ -43,6 +43,7 @@ __export(src_exports, {
|
|
|
43
43
|
ValidationError: () => ValidationError,
|
|
44
44
|
default: () => Elysia,
|
|
45
45
|
error: () => error,
|
|
46
|
+
form: () => form,
|
|
46
47
|
getResponseSchemaValidator: () => getResponseSchemaValidator,
|
|
47
48
|
getSchemaValidator: () => getSchemaValidator,
|
|
48
49
|
mapCompactResponse: () => mapCompactResponse,
|
|
@@ -1192,9 +1193,21 @@ var mapResponse = (response, set, request) => {
|
|
|
1192
1193
|
return new Response(response, set);
|
|
1193
1194
|
case "Blob":
|
|
1194
1195
|
return handleFile(response, set);
|
|
1195
|
-
case "Object":
|
|
1196
1196
|
case "Array":
|
|
1197
1197
|
return Response.json(response, set);
|
|
1198
|
+
case "Object":
|
|
1199
|
+
for (const value in Object.values(response)) {
|
|
1200
|
+
switch (value?.constructor?.name) {
|
|
1201
|
+
case "Blob":
|
|
1202
|
+
case "File":
|
|
1203
|
+
case "ArrayBuffer":
|
|
1204
|
+
case "FileRef":
|
|
1205
|
+
return new Response(form(response));
|
|
1206
|
+
default:
|
|
1207
|
+
break;
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1210
|
+
return Response.json(response, set);
|
|
1198
1211
|
case "ReadableStream":
|
|
1199
1212
|
if (!set.headers["content-type"]?.startsWith(
|
|
1200
1213
|
"text/event-stream"
|
|
@@ -1268,6 +1281,8 @@ var mapResponse = (response, set, request) => {
|
|
|
1268
1281
|
if (response instanceof Cookie)
|
|
1269
1282
|
return new Response(response.value, set);
|
|
1270
1283
|
return new Response(response?.toString(), set);
|
|
1284
|
+
case "FormData":
|
|
1285
|
+
return new Response(response, set);
|
|
1271
1286
|
default:
|
|
1272
1287
|
if (response instanceof Response) {
|
|
1273
1288
|
let isCookieSet2 = false;
|
|
@@ -1327,13 +1342,24 @@ var mapResponse = (response, set, request) => {
|
|
|
1327
1342
|
return new Response(response);
|
|
1328
1343
|
case "Blob":
|
|
1329
1344
|
return handleFile(response, set);
|
|
1330
|
-
case "Object":
|
|
1331
1345
|
case "Array":
|
|
1332
|
-
return
|
|
1333
|
-
|
|
1334
|
-
|
|
1346
|
+
return Response.json(response);
|
|
1347
|
+
case "Object":
|
|
1348
|
+
for (const value in Object.values(response)) {
|
|
1349
|
+
switch (value?.constructor?.name) {
|
|
1350
|
+
case "Blob":
|
|
1351
|
+
case "File":
|
|
1352
|
+
case "ArrayBuffer":
|
|
1353
|
+
case "FileRef":
|
|
1354
|
+
return new Response(
|
|
1355
|
+
form(response),
|
|
1356
|
+
set
|
|
1357
|
+
);
|
|
1358
|
+
default:
|
|
1359
|
+
break;
|
|
1335
1360
|
}
|
|
1336
|
-
}
|
|
1361
|
+
}
|
|
1362
|
+
return Response.json(response, set);
|
|
1337
1363
|
case "ReadableStream":
|
|
1338
1364
|
request?.signal.addEventListener(
|
|
1339
1365
|
"abort",
|
|
@@ -1380,6 +1406,8 @@ var mapResponse = (response, set, request) => {
|
|
|
1380
1406
|
if (response instanceof Cookie)
|
|
1381
1407
|
return new Response(response.value, set);
|
|
1382
1408
|
return new Response(response?.toString(), set);
|
|
1409
|
+
case "FormData":
|
|
1410
|
+
return new Response(response, set);
|
|
1383
1411
|
default:
|
|
1384
1412
|
if (response instanceof Response)
|
|
1385
1413
|
return new Response(response.body, {
|
|
@@ -1434,9 +1462,24 @@ var mapEarlyResponse = (response, set, request) => {
|
|
|
1434
1462
|
return new Response(response, set);
|
|
1435
1463
|
case "Blob":
|
|
1436
1464
|
return handleFile(response, set);
|
|
1437
|
-
case "Object":
|
|
1438
1465
|
case "Array":
|
|
1439
1466
|
return Response.json(response, set);
|
|
1467
|
+
case "Object":
|
|
1468
|
+
for (const value in Object.values(response)) {
|
|
1469
|
+
switch (value?.constructor?.name) {
|
|
1470
|
+
case "Blob":
|
|
1471
|
+
case "File":
|
|
1472
|
+
case "ArrayBuffer":
|
|
1473
|
+
case "FileRef":
|
|
1474
|
+
return new Response(
|
|
1475
|
+
form(response),
|
|
1476
|
+
set
|
|
1477
|
+
);
|
|
1478
|
+
default:
|
|
1479
|
+
break;
|
|
1480
|
+
}
|
|
1481
|
+
}
|
|
1482
|
+
return Response.json(response, set);
|
|
1440
1483
|
case "ReadableStream":
|
|
1441
1484
|
if (!set.headers["content-type"]?.startsWith(
|
|
1442
1485
|
"text/event-stream"
|
|
@@ -1508,6 +1551,8 @@ var mapEarlyResponse = (response, set, request) => {
|
|
|
1508
1551
|
response.toString(),
|
|
1509
1552
|
set
|
|
1510
1553
|
);
|
|
1554
|
+
case "FormData":
|
|
1555
|
+
return new Response(response);
|
|
1511
1556
|
case "Cookie":
|
|
1512
1557
|
if (response instanceof Cookie)
|
|
1513
1558
|
return new Response(response.value, set);
|
|
@@ -1567,13 +1612,24 @@ var mapEarlyResponse = (response, set, request) => {
|
|
|
1567
1612
|
return new Response(response);
|
|
1568
1613
|
case "Blob":
|
|
1569
1614
|
return handleFile(response, set);
|
|
1570
|
-
case "Object":
|
|
1571
1615
|
case "Array":
|
|
1572
|
-
return
|
|
1573
|
-
|
|
1574
|
-
|
|
1616
|
+
return Response.json(response);
|
|
1617
|
+
case "Object":
|
|
1618
|
+
for (const value in Object.values(response)) {
|
|
1619
|
+
switch (value?.constructor?.name) {
|
|
1620
|
+
case "Blob":
|
|
1621
|
+
case "File":
|
|
1622
|
+
case "ArrayBuffer":
|
|
1623
|
+
case "FileRef":
|
|
1624
|
+
return new Response(
|
|
1625
|
+
form(response),
|
|
1626
|
+
set
|
|
1627
|
+
);
|
|
1628
|
+
default:
|
|
1629
|
+
break;
|
|
1575
1630
|
}
|
|
1576
|
-
}
|
|
1631
|
+
}
|
|
1632
|
+
return Response.json(response, set);
|
|
1577
1633
|
case "ReadableStream":
|
|
1578
1634
|
request?.signal.addEventListener(
|
|
1579
1635
|
"abort",
|
|
@@ -1619,6 +1675,8 @@ var mapEarlyResponse = (response, set, request) => {
|
|
|
1619
1675
|
if (response instanceof Cookie)
|
|
1620
1676
|
return new Response(response.value, set);
|
|
1621
1677
|
return new Response(response?.toString(), set);
|
|
1678
|
+
case "FormData":
|
|
1679
|
+
return new Response(response);
|
|
1622
1680
|
default:
|
|
1623
1681
|
if (response instanceof Response)
|
|
1624
1682
|
return new Response(response.body, {
|
|
@@ -1658,13 +1716,23 @@ var mapCompactResponse = (response, request) => {
|
|
|
1658
1716
|
return new Response(response);
|
|
1659
1717
|
case "Blob":
|
|
1660
1718
|
return handleFile(response);
|
|
1661
|
-
case "Object":
|
|
1662
1719
|
case "Array":
|
|
1663
|
-
return
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1720
|
+
return Response.json(response);
|
|
1721
|
+
case "Object":
|
|
1722
|
+
form:
|
|
1723
|
+
for (const value of Object.values(response))
|
|
1724
|
+
switch (value?.constructor?.name) {
|
|
1725
|
+
case "Blob":
|
|
1726
|
+
case "File":
|
|
1727
|
+
case "ArrayBuffer":
|
|
1728
|
+
case "FileRef":
|
|
1729
|
+
return new Response(form(response));
|
|
1730
|
+
case "Object":
|
|
1731
|
+
break form;
|
|
1732
|
+
default:
|
|
1733
|
+
break;
|
|
1734
|
+
}
|
|
1735
|
+
return Response.json(response);
|
|
1668
1736
|
case "ReadableStream":
|
|
1669
1737
|
request?.signal.addEventListener(
|
|
1670
1738
|
"abort",
|
|
@@ -1704,6 +1772,8 @@ var mapCompactResponse = (response, request) => {
|
|
|
1704
1772
|
case "Number":
|
|
1705
1773
|
case "Boolean":
|
|
1706
1774
|
return new Response(response.toString());
|
|
1775
|
+
case "FormData":
|
|
1776
|
+
return new Response(response);
|
|
1707
1777
|
default:
|
|
1708
1778
|
if (response instanceof Response)
|
|
1709
1779
|
return new Response(response.body, {
|
|
@@ -2422,12 +2492,25 @@ var cloneInference = (inference) => ({
|
|
|
2422
2492
|
set: inference.trace.set
|
|
2423
2493
|
}
|
|
2424
2494
|
});
|
|
2425
|
-
var redirect = (url, status = 301) =>
|
|
2426
|
-
|
|
2427
|
-
|
|
2428
|
-
|
|
2495
|
+
var redirect = (url, status = 301) => Response.redirect(url, status);
|
|
2496
|
+
var ELYSIA_FORM_DATA = Symbol("ElysiaFormData");
|
|
2497
|
+
var form = (items) => {
|
|
2498
|
+
const formData = new FormData();
|
|
2499
|
+
for (const [key, value] of Object.entries(items)) {
|
|
2500
|
+
if (Array.isArray(value)) {
|
|
2501
|
+
for (const v of value) {
|
|
2502
|
+
if (value instanceof File)
|
|
2503
|
+
formData.append(key, value, value.name);
|
|
2504
|
+
formData.append(key, v);
|
|
2505
|
+
}
|
|
2506
|
+
continue;
|
|
2507
|
+
}
|
|
2508
|
+
if (value instanceof File)
|
|
2509
|
+
formData.append(key, value, value.name);
|
|
2510
|
+
formData.append(key, value);
|
|
2429
2511
|
}
|
|
2430
|
-
|
|
2512
|
+
return formData;
|
|
2513
|
+
};
|
|
2431
2514
|
|
|
2432
2515
|
// src/error.ts
|
|
2433
2516
|
var env = typeof Bun !== "undefined" ? Bun.env : typeof process !== "undefined" ? process?.env : void 0;
|
|
@@ -4091,11 +4174,11 @@ var createDynamicHandler = (app) => async (request) => {
|
|
|
4091
4174
|
break;
|
|
4092
4175
|
case "multipart/form-data":
|
|
4093
4176
|
body = {};
|
|
4094
|
-
const
|
|
4095
|
-
for (const key of
|
|
4177
|
+
const form2 = await request.formData();
|
|
4178
|
+
for (const key of form2.keys()) {
|
|
4096
4179
|
if (body[key])
|
|
4097
4180
|
continue;
|
|
4098
|
-
const value =
|
|
4181
|
+
const value = form2.getAll(key);
|
|
4099
4182
|
if (value.length === 1)
|
|
4100
4183
|
body[key] = value[0];
|
|
4101
4184
|
else
|
|
@@ -4137,11 +4220,11 @@ var createDynamicHandler = (app) => async (request) => {
|
|
|
4137
4220
|
break;
|
|
4138
4221
|
case "multipart/form-data":
|
|
4139
4222
|
body = {};
|
|
4140
|
-
const
|
|
4141
|
-
for (const key of
|
|
4223
|
+
const form2 = await request.formData();
|
|
4224
|
+
for (const key of form2.keys()) {
|
|
4142
4225
|
if (body[key])
|
|
4143
4226
|
continue;
|
|
4144
|
-
const value =
|
|
4227
|
+
const value = form2.getAll(key);
|
|
4145
4228
|
if (value.length === 1)
|
|
4146
4229
|
body[key] = value[0];
|
|
4147
4230
|
else
|
|
@@ -4531,7 +4614,7 @@ var validateFile = (options, value) => {
|
|
|
4531
4614
|
}
|
|
4532
4615
|
return true;
|
|
4533
4616
|
};
|
|
4534
|
-
var
|
|
4617
|
+
var File2 = import_typebox2.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type("File", validateFile);
|
|
4535
4618
|
var Files = import_typebox2.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type(
|
|
4536
4619
|
"Files",
|
|
4537
4620
|
(options, value) => {
|
|
@@ -4677,7 +4760,7 @@ var ElysiaType = {
|
|
|
4677
4760
|
return JSON.stringify(value);
|
|
4678
4761
|
});
|
|
4679
4762
|
},
|
|
4680
|
-
File,
|
|
4763
|
+
File: File2,
|
|
4681
4764
|
Files: (options = {}) => t2.Transform(Files(options)).Decode((value) => {
|
|
4682
4765
|
if (Array.isArray(value))
|
|
4683
4766
|
return value;
|
|
@@ -4958,7 +5041,9 @@ var Elysia = class _Elysia {
|
|
|
4958
5041
|
aot: true,
|
|
4959
5042
|
strictPath: false,
|
|
4960
5043
|
global: false,
|
|
4961
|
-
cookie: {
|
|
5044
|
+
cookie: {
|
|
5045
|
+
path: "/"
|
|
5046
|
+
},
|
|
4962
5047
|
analytic: false,
|
|
4963
5048
|
...config,
|
|
4964
5049
|
experimental: config?.experimental ?? {},
|
|
@@ -6639,6 +6724,7 @@ ${staticRouter.map[loosePath].code}`;
|
|
|
6639
6724
|
StatusMap,
|
|
6640
6725
|
ValidationError,
|
|
6641
6726
|
error,
|
|
6727
|
+
form,
|
|
6642
6728
|
getResponseSchemaValidator,
|
|
6643
6729
|
getSchemaValidator,
|
|
6644
6730
|
mapCompactResponse,
|
package/dist/cjs/type-system.js
CHANGED
|
@@ -298,6 +298,7 @@ var InvertedStatusMap = Object.fromEntries(
|
|
|
298
298
|
Object.entries(StatusMap).map(([k, v]) => [v, k])
|
|
299
299
|
);
|
|
300
300
|
var encoder = new TextEncoder();
|
|
301
|
+
var ELYSIA_FORM_DATA = Symbol("ElysiaFormData");
|
|
301
302
|
|
|
302
303
|
// src/error.ts
|
|
303
304
|
var env = typeof Bun !== "undefined" ? Bun.env : typeof process !== "undefined" ? process?.env : void 0;
|
|
@@ -458,7 +459,7 @@ var validateFile = (options, value) => {
|
|
|
458
459
|
}
|
|
459
460
|
return true;
|
|
460
461
|
};
|
|
461
|
-
var
|
|
462
|
+
var File2 = import_typebox2.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type("File", validateFile);
|
|
462
463
|
var Files = import_typebox2.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type(
|
|
463
464
|
"Files",
|
|
464
465
|
(options, value) => {
|
|
@@ -604,7 +605,7 @@ var ElysiaType = {
|
|
|
604
605
|
return JSON.stringify(value);
|
|
605
606
|
});
|
|
606
607
|
},
|
|
607
|
-
File,
|
|
608
|
+
File: File2,
|
|
608
609
|
Files: (options = {}) => t.Transform(Files(options)).Decode((value) => {
|
|
609
610
|
if (Array.isArray(value))
|
|
610
611
|
return value;
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/// <reference types="bun-types" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
/// <reference types="bun-types" />
|
|
4
|
+
/// <reference types="bun-types" />
|
|
4
5
|
import type { Elysia } from '.';
|
|
5
|
-
import type { Serve, Server, WebSocketHandler } from 'bun';
|
|
6
|
+
import type { BunFile, Serve, Server, WebSocketHandler } from 'bun';
|
|
6
7
|
import type { TSchema, TObject, StaticDecode, TAnySchema } from '@sinclair/typebox';
|
|
7
8
|
import type { TypeCheck } from '@sinclair/typebox/compiler';
|
|
8
9
|
import type { OpenAPIV3 } from 'openapi-types';
|
|
@@ -176,8 +177,8 @@ export interface UnwrapRoute<in out Schema extends InputSchema<any>, in out Defi
|
|
|
176
177
|
query: UnwrapSchema<Schema['query'], Definitions>;
|
|
177
178
|
params: UnwrapSchema<Schema['params'], Definitions>;
|
|
178
179
|
cookie: UnwrapSchema<Schema['cookie'], Definitions>;
|
|
179
|
-
response: Schema['response'] extends TSchema | string ? UnwrapSchema<Schema['response'], Definitions> : Schema['response'] extends SuccessfulResponse<TAnySchema | string> ? {
|
|
180
|
-
[k in keyof Schema['response']]: UnwrapSchema<Schema['response'][k], Definitions>;
|
|
180
|
+
response: Schema['response'] extends TSchema | string ? CoExist<UnwrapSchema<Schema['response'], Definitions>, File, BunFile> : Schema['response'] extends SuccessfulResponse<TAnySchema | string> ? {
|
|
181
|
+
[k in keyof Schema['response']]: CoExist<UnwrapSchema<Schema['response'][k], Definitions>, File, BunFile>;
|
|
181
182
|
} : unknown | void;
|
|
182
183
|
}
|
|
183
184
|
export interface UnwrapGroupGuardRoute<in out Schema extends InputSchema<any>, in out Definitions extends Record<string, unknown> = {}, Path extends string = ''> {
|
|
@@ -235,6 +236,12 @@ export type Handler<in out Route extends RouteSchema = {}, in out Singleton exte
|
|
|
235
236
|
derive: {};
|
|
236
237
|
resolve: {};
|
|
237
238
|
}, Path extends string = ''> = (context: Context<Route, Singleton, Path>) => Route['response'] extends SuccessfulResponse ? Response | MaybePromise<Route['response'][keyof Route['response']]> : Response | MaybePromise<Route['response']>;
|
|
239
|
+
export type Replace<Original, Target, With> = Original extends Record<string, unknown> ? {
|
|
240
|
+
[K in keyof Original]: Original[K] extends Target ? With : Original[K];
|
|
241
|
+
} : Original extends Target ? With : Original;
|
|
242
|
+
export type CoExist<Original, Target, With> = Original extends Record<string, unknown> ? {
|
|
243
|
+
[K in keyof Original]: Original[K] extends Target ? Original[K] | With : Original[K];
|
|
244
|
+
} : Original extends Target ? Original | With : Original;
|
|
238
245
|
export type InlineHandler<Route extends RouteSchema = {}, Singleton extends SingletonBase = {
|
|
239
246
|
decorator: {};
|
|
240
247
|
store: {};
|
|
@@ -572,7 +579,7 @@ type _CreateEden<Path extends string, Property extends Record<string, unknown> =
|
|
|
572
579
|
[x in Path]: Property;
|
|
573
580
|
};
|
|
574
581
|
export type CreateEden<Path extends string, Property extends Record<string, unknown> = {}> = Path extends `/${infer Rest}` ? _CreateEden<Rest, Property> : Path extends '' ? _CreateEden<'index', Property> : _CreateEden<Path, Property>;
|
|
575
|
-
export type ComposeElysiaResponse<Response, Handle> = Handle extends (...a: any[]) => infer A ? _ComposeElysiaResponse<Response, Awaited<A>> : _ComposeElysiaResponse<Response, Awaited<Handle>>;
|
|
582
|
+
export type ComposeElysiaResponse<Response, Handle> = Handle extends (...a: any[]) => infer A ? _ComposeElysiaResponse<Response, Replace<Awaited<A>, BunFile, File>> : _ComposeElysiaResponse<Response, Replace<Awaited<Handle>, BunFile, File>>;
|
|
576
583
|
type _ComposeElysiaResponse<Response, Handle> = Prettify<unknown extends Response ? {
|
|
577
584
|
200: Exclude<Handle, {
|
|
578
585
|
[ELYSIA_RESPONSE]: any;
|
package/dist/cjs/utils.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="bun-types" />
|
|
3
|
+
/// <reference types="bun-types" />
|
|
4
|
+
/// <reference types="bun-types" />
|
|
1
5
|
import { TSchema } from '@sinclair/typebox';
|
|
2
6
|
import { TypeCheck } from '@sinclair/typebox/compiler';
|
|
3
|
-
import type { LifeCycleStore, LocalHook, MaybeArray, InputSchema, LifeCycleType, HookContainer } from './types';
|
|
7
|
+
import type { LifeCycleStore, LocalHook, MaybeArray, InputSchema, LifeCycleType, HookContainer, Replace } from './types';
|
|
4
8
|
import type { CookieOptions } from './cookies';
|
|
5
9
|
import { Sucrose } from './sucrose';
|
|
10
|
+
import { BunFile } from 'bun';
|
|
6
11
|
export declare const replaceUrlPath: (url: string, pathname: string) => string;
|
|
7
12
|
export declare const mergeDeep: <A extends Record<string, any>, B extends Record<string, any>>(target: A, source: B, { skipKeys }?: {
|
|
8
13
|
skipKeys?: string[];
|
|
@@ -210,5 +215,12 @@ export declare const cloneInference: (inference: {
|
|
|
210
215
|
* @param url URL to redirect to
|
|
211
216
|
* @param HTTP status code to send,
|
|
212
217
|
*/
|
|
213
|
-
export declare const redirect: (url: string, status?:
|
|
218
|
+
export declare const redirect: (url: string, status?: 301 | 302 | 303 | 307 | 308) => import("undici-types").Response;
|
|
214
219
|
export type redirect = typeof redirect;
|
|
220
|
+
export declare const ELYSIA_FORM_DATA: unique symbol;
|
|
221
|
+
export type ELYSIA_FORM_DATA = typeof ELYSIA_FORM_DATA;
|
|
222
|
+
type ElysiaFormData<T extends Record<string | number, unknown>> = FormData & {
|
|
223
|
+
[ELYSIA_FORM_DATA]: Replace<T, BunFile, File>;
|
|
224
|
+
};
|
|
225
|
+
export declare const form: <const T extends Record<string | number, unknown>>(items: T) => ElysiaFormData<T>;
|
|
226
|
+
export {};
|