elysia 1.0.21 → 1.0.23

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.
@@ -330,6 +330,12 @@ var parseCookie = async (set, cookieString, {
330
330
  throw new InvalidCookieSignature(name);
331
331
  }
332
332
  }
333
+ if (value == null) {
334
+ jar[name] = {
335
+ value: v
336
+ };
337
+ continue;
338
+ }
333
339
  const start = value.charCodeAt(0);
334
340
  if (start === 123 || start === 91)
335
341
  try {
@@ -569,7 +575,7 @@ var validateFile = (options, value) => {
569
575
  }
570
576
  return true;
571
577
  };
572
- var File = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type("File", validateFile);
578
+ var File2 = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type("File", validateFile);
573
579
  var Files = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type(
574
580
  "Files",
575
581
  (options, value) => {
@@ -715,7 +721,7 @@ var ElysiaType = {
715
721
  return JSON.stringify(value);
716
722
  });
717
723
  },
718
- File,
724
+ File: File2,
719
725
  Files: (options = {}) => t.Transform(Files(options)).Decode((value) => {
720
726
  if (Array.isArray(value))
721
727
  return value;
@@ -922,12 +928,25 @@ var isNumericString = (message) => {
922
928
  }
923
929
  return false;
924
930
  };
925
- var redirect = (url, status = 301) => new Response(null, {
926
- status,
927
- headers: {
928
- Location: url
931
+ var redirect = (url, status = 301) => Response.redirect(url, status);
932
+ var ELYSIA_FORM_DATA = Symbol("ElysiaFormData");
933
+ var form = (items) => {
934
+ const formData = new FormData();
935
+ for (const [key, value] of Object.entries(items)) {
936
+ if (Array.isArray(value)) {
937
+ for (const v of value) {
938
+ if (value instanceof File)
939
+ formData.append(key, value, value.name);
940
+ formData.append(key, v);
941
+ }
942
+ continue;
943
+ }
944
+ if (value instanceof File)
945
+ formData.append(key, value, value.name);
946
+ formData.append(key, value);
929
947
  }
930
- });
948
+ return formData;
949
+ };
931
950
 
932
951
  // src/handler.ts
933
952
  var hasHeaderShorthand = "toJSON" in new Headers();
@@ -1035,9 +1054,21 @@ var mapResponse = (response, set, request) => {
1035
1054
  return new Response(response, set);
1036
1055
  case "Blob":
1037
1056
  return handleFile(response, set);
1038
- case "Object":
1039
1057
  case "Array":
1040
1058
  return Response.json(response, set);
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(form(response));
1067
+ default:
1068
+ break;
1069
+ }
1070
+ }
1071
+ return Response.json(response, set);
1041
1072
  case "ReadableStream":
1042
1073
  if (!set.headers["content-type"]?.startsWith(
1043
1074
  "text/event-stream"
@@ -1111,6 +1142,8 @@ var mapResponse = (response, set, request) => {
1111
1142
  if (response instanceof Cookie)
1112
1143
  return new Response(response.value, set);
1113
1144
  return new Response(response?.toString(), set);
1145
+ case "FormData":
1146
+ return new Response(response, set);
1114
1147
  default:
1115
1148
  if (response instanceof Response) {
1116
1149
  let isCookieSet2 = false;
@@ -1151,6 +1184,8 @@ var mapResponse = (response, set, request) => {
1151
1184
  return response.then((x) => mapResponse(x, set));
1152
1185
  if (response instanceof Error)
1153
1186
  return errorToResponse(response, set);
1187
+ if ("toResponse" in response)
1188
+ return mapResponse(response.toResponse(), set);
1154
1189
  if ("charCodeAt" in response) {
1155
1190
  const code = response.charCodeAt(0);
1156
1191
  if (code === 123 || code === 91) {
@@ -1170,13 +1205,24 @@ var mapResponse = (response, set, request) => {
1170
1205
  return new Response(response);
1171
1206
  case "Blob":
1172
1207
  return handleFile(response, set);
1173
- case "Object":
1174
1208
  case "Array":
1175
- return new Response(JSON.stringify(response), {
1176
- headers: {
1177
- "content-type": "application/json"
1209
+ return Response.json(response);
1210
+ case "Object":
1211
+ for (const value in Object.values(response)) {
1212
+ switch (value?.constructor?.name) {
1213
+ case "Blob":
1214
+ case "File":
1215
+ case "ArrayBuffer":
1216
+ case "FileRef":
1217
+ return new Response(
1218
+ form(response),
1219
+ set
1220
+ );
1221
+ default:
1222
+ break;
1178
1223
  }
1179
- });
1224
+ }
1225
+ return Response.json(response, set);
1180
1226
  case "ReadableStream":
1181
1227
  request?.signal.addEventListener(
1182
1228
  "abort",
@@ -1223,6 +1269,8 @@ var mapResponse = (response, set, request) => {
1223
1269
  if (response instanceof Cookie)
1224
1270
  return new Response(response.value, set);
1225
1271
  return new Response(response?.toString(), set);
1272
+ case "FormData":
1273
+ return new Response(response, set);
1226
1274
  default:
1227
1275
  if (response instanceof Response)
1228
1276
  return new Response(response.body, {
@@ -1234,6 +1282,8 @@ var mapResponse = (response, set, request) => {
1234
1282
  return response.then((x) => mapResponse(x, set));
1235
1283
  if (response instanceof Error)
1236
1284
  return errorToResponse(response, set);
1285
+ if ("toResponse" in response)
1286
+ return mapResponse(response.toResponse(), set);
1237
1287
  if ("charCodeAt" in response) {
1238
1288
  const code = response.charCodeAt(0);
1239
1289
  if (code === 123 || code === 91) {
@@ -1277,9 +1327,24 @@ var mapEarlyResponse = (response, set, request) => {
1277
1327
  return new Response(response, set);
1278
1328
  case "Blob":
1279
1329
  return handleFile(response, set);
1280
- case "Object":
1281
1330
  case "Array":
1282
1331
  return Response.json(response, set);
1332
+ case "Object":
1333
+ for (const value in Object.values(response)) {
1334
+ switch (value?.constructor?.name) {
1335
+ case "Blob":
1336
+ case "File":
1337
+ case "ArrayBuffer":
1338
+ case "FileRef":
1339
+ return new Response(
1340
+ form(response),
1341
+ set
1342
+ );
1343
+ default:
1344
+ break;
1345
+ }
1346
+ }
1347
+ return Response.json(response, set);
1283
1348
  case "ReadableStream":
1284
1349
  if (!set.headers["content-type"]?.startsWith(
1285
1350
  "text/event-stream"
@@ -1351,6 +1416,8 @@ var mapEarlyResponse = (response, set, request) => {
1351
1416
  response.toString(),
1352
1417
  set
1353
1418
  );
1419
+ case "FormData":
1420
+ return new Response(response);
1354
1421
  case "Cookie":
1355
1422
  if (response instanceof Cookie)
1356
1423
  return new Response(response.value, set);
@@ -1391,6 +1458,8 @@ var mapEarlyResponse = (response, set, request) => {
1391
1458
  return response.then((x) => mapEarlyResponse(x, set));
1392
1459
  if (response instanceof Error)
1393
1460
  return errorToResponse(response, set);
1461
+ if ("toResponse" in response)
1462
+ return mapEarlyResponse(response.toResponse(), set);
1394
1463
  if ("charCodeAt" in response) {
1395
1464
  const code = response.charCodeAt(0);
1396
1465
  if (code === 123 || code === 91) {
@@ -1410,13 +1479,24 @@ var mapEarlyResponse = (response, set, request) => {
1410
1479
  return new Response(response);
1411
1480
  case "Blob":
1412
1481
  return handleFile(response, set);
1413
- case "Object":
1414
1482
  case "Array":
1415
- return new Response(JSON.stringify(response), {
1416
- headers: {
1417
- "content-type": "application/json"
1483
+ return Response.json(response);
1484
+ case "Object":
1485
+ for (const value in Object.values(response)) {
1486
+ switch (value?.constructor?.name) {
1487
+ case "Blob":
1488
+ case "File":
1489
+ case "ArrayBuffer":
1490
+ case "FileRef":
1491
+ return new Response(
1492
+ form(response),
1493
+ set
1494
+ );
1495
+ default:
1496
+ break;
1418
1497
  }
1419
- });
1498
+ }
1499
+ return Response.json(response, set);
1420
1500
  case "ReadableStream":
1421
1501
  request?.signal.addEventListener(
1422
1502
  "abort",
@@ -1462,6 +1542,8 @@ var mapEarlyResponse = (response, set, request) => {
1462
1542
  if (response instanceof Cookie)
1463
1543
  return new Response(response.value, set);
1464
1544
  return new Response(response?.toString(), set);
1545
+ case "FormData":
1546
+ return new Response(response);
1465
1547
  default:
1466
1548
  if (response instanceof Response)
1467
1549
  return new Response(response.body, {
@@ -1473,6 +1555,8 @@ var mapEarlyResponse = (response, set, request) => {
1473
1555
  return response.then((x) => mapEarlyResponse(x, set));
1474
1556
  if (response instanceof Error)
1475
1557
  return errorToResponse(response, set);
1558
+ if ("toResponse" in response)
1559
+ return mapEarlyResponse(response.toResponse(), set);
1476
1560
  if ("charCodeAt" in response) {
1477
1561
  const code = response.charCodeAt(0);
1478
1562
  if (code === 123 || code === 91) {
@@ -1501,13 +1585,23 @@ var mapCompactResponse = (response, request) => {
1501
1585
  return new Response(response);
1502
1586
  case "Blob":
1503
1587
  return handleFile(response);
1504
- case "Object":
1505
1588
  case "Array":
1506
- return new Response(JSON.stringify(response), {
1507
- headers: {
1508
- "content-type": "application/json"
1509
- }
1510
- });
1589
+ return Response.json(response);
1590
+ case "Object":
1591
+ form:
1592
+ for (const value of Object.values(response))
1593
+ switch (value?.constructor?.name) {
1594
+ case "Blob":
1595
+ case "File":
1596
+ case "ArrayBuffer":
1597
+ case "FileRef":
1598
+ return new Response(form(response));
1599
+ case "Object":
1600
+ break form;
1601
+ default:
1602
+ break;
1603
+ }
1604
+ return Response.json(response);
1511
1605
  case "ReadableStream":
1512
1606
  request?.signal.addEventListener(
1513
1607
  "abort",
@@ -1547,6 +1641,8 @@ var mapCompactResponse = (response, request) => {
1547
1641
  case "Number":
1548
1642
  case "Boolean":
1549
1643
  return new Response(response.toString());
1644
+ case "FormData":
1645
+ return new Response(response);
1550
1646
  default:
1551
1647
  if (response instanceof Response)
1552
1648
  return new Response(response.body, {
@@ -1558,6 +1654,8 @@ var mapCompactResponse = (response, request) => {
1558
1654
  return response.then(mapCompactResponse);
1559
1655
  if (response instanceof Error)
1560
1656
  return errorToResponse(response);
1657
+ if ("toResponse" in response)
1658
+ return mapCompactResponse(response.toResponse());
1561
1659
  if ("charCodeAt" in response) {
1562
1660
  const code = response.charCodeAt(0);
1563
1661
  if (code === 123 || code === 91) {
@@ -1638,11 +1736,11 @@ var createDynamicHandler = (app) => async (request) => {
1638
1736
  break;
1639
1737
  case "multipart/form-data":
1640
1738
  body = {};
1641
- const form = await request.formData();
1642
- for (const key of form.keys()) {
1739
+ const form2 = await request.formData();
1740
+ for (const key of form2.keys()) {
1643
1741
  if (body[key])
1644
1742
  continue;
1645
- const value = form.getAll(key);
1743
+ const value = form2.getAll(key);
1646
1744
  if (value.length === 1)
1647
1745
  body[key] = value[0];
1648
1746
  else
@@ -1684,11 +1782,11 @@ var createDynamicHandler = (app) => async (request) => {
1684
1782
  break;
1685
1783
  case "multipart/form-data":
1686
1784
  body = {};
1687
- const form = await request.formData();
1688
- for (const key of form.keys()) {
1785
+ const form2 = await request.formData();
1786
+ for (const key of form2.keys()) {
1689
1787
  if (body[key])
1690
1788
  continue;
1691
- const value = form.getAll(key);
1789
+ const value = form2.getAll(key);
1692
1790
  if (value.length === 1)
1693
1791
  body[key] = value[0];
1694
1792
  else
package/dist/cjs/error.js CHANGED
@@ -274,7 +274,7 @@ var validateFile = (options, value) => {
274
274
  }
275
275
  return true;
276
276
  };
277
- var File = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type("File", validateFile);
277
+ var File2 = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type("File", validateFile);
278
278
  var Files = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type(
279
279
  "Files",
280
280
  (options, value) => {
@@ -420,7 +420,7 @@ var ElysiaType = {
420
420
  return JSON.stringify(value);
421
421
  });
422
422
  },
423
- File,
423
+ File: File2,
424
424
  Files: (options = {}) => t.Transform(Files(options)).Decode((value) => {
425
425
  if (Array.isArray(value))
426
426
  return value;
@@ -582,6 +582,7 @@ var InvertedStatusMap = Object.fromEntries(
582
582
  Object.entries(StatusMap).map(([k, v]) => [v, k])
583
583
  );
584
584
  var encoder = new TextEncoder();
585
+ var ELYSIA_FORM_DATA = Symbol("ElysiaFormData");
585
586
 
586
587
  // src/error.ts
587
588
  var env = typeof Bun !== "undefined" ? Bun.env : typeof process !== "undefined" ? process?.env : void 0;
@@ -472,7 +472,7 @@ var validateFile = (options, value) => {
472
472
  }
473
473
  return true;
474
474
  };
475
- var File = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type("File", validateFile);
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;
@@ -1003,6 +1035,8 @@ var mapResponse = (response, set, request) => {
1003
1035
  return response.then((x) => mapResponse(x, set));
1004
1036
  if (response instanceof Error)
1005
1037
  return errorToResponse(response, set);
1038
+ if ("toResponse" in response)
1039
+ return mapResponse(response.toResponse(), set);
1006
1040
  if ("charCodeAt" in response) {
1007
1041
  const code = response.charCodeAt(0);
1008
1042
  if (code === 123 || code === 91) {
@@ -1022,13 +1056,24 @@ var mapResponse = (response, set, request) => {
1022
1056
  return new Response(response);
1023
1057
  case "Blob":
1024
1058
  return handleFile(response, set);
1025
- case "Object":
1026
1059
  case "Array":
1027
- return new Response(JSON.stringify(response), {
1028
- headers: {
1029
- "content-type": "application/json"
1060
+ return Response.json(response);
1061
+ case "Object":
1062
+ for (const value in Object.values(response)) {
1063
+ switch (value?.constructor?.name) {
1064
+ case "Blob":
1065
+ case "File":
1066
+ case "ArrayBuffer":
1067
+ case "FileRef":
1068
+ return new Response(
1069
+ form(response),
1070
+ set
1071
+ );
1072
+ default:
1073
+ break;
1030
1074
  }
1031
- });
1075
+ }
1076
+ return Response.json(response, set);
1032
1077
  case "ReadableStream":
1033
1078
  request?.signal.addEventListener(
1034
1079
  "abort",
@@ -1075,6 +1120,8 @@ var mapResponse = (response, set, request) => {
1075
1120
  if (response instanceof Cookie)
1076
1121
  return new Response(response.value, set);
1077
1122
  return new Response(response?.toString(), set);
1123
+ case "FormData":
1124
+ return new Response(response, set);
1078
1125
  default:
1079
1126
  if (response instanceof Response)
1080
1127
  return new Response(response.body, {
@@ -1086,6 +1133,8 @@ var mapResponse = (response, set, request) => {
1086
1133
  return response.then((x) => mapResponse(x, set));
1087
1134
  if (response instanceof Error)
1088
1135
  return errorToResponse(response, set);
1136
+ if ("toResponse" in response)
1137
+ return mapResponse(response.toResponse(), set);
1089
1138
  if ("charCodeAt" in response) {
1090
1139
  const code = response.charCodeAt(0);
1091
1140
  if (code === 123 || code === 91) {
@@ -1129,9 +1178,24 @@ var mapEarlyResponse = (response, set, request) => {
1129
1178
  return new Response(response, set);
1130
1179
  case "Blob":
1131
1180
  return handleFile(response, set);
1132
- case "Object":
1133
1181
  case "Array":
1134
1182
  return Response.json(response, set);
1183
+ case "Object":
1184
+ for (const value in Object.values(response)) {
1185
+ switch (value?.constructor?.name) {
1186
+ case "Blob":
1187
+ case "File":
1188
+ case "ArrayBuffer":
1189
+ case "FileRef":
1190
+ return new Response(
1191
+ form(response),
1192
+ set
1193
+ );
1194
+ default:
1195
+ break;
1196
+ }
1197
+ }
1198
+ return Response.json(response, set);
1135
1199
  case "ReadableStream":
1136
1200
  if (!set.headers["content-type"]?.startsWith(
1137
1201
  "text/event-stream"
@@ -1203,6 +1267,8 @@ var mapEarlyResponse = (response, set, request) => {
1203
1267
  response.toString(),
1204
1268
  set
1205
1269
  );
1270
+ case "FormData":
1271
+ return new Response(response);
1206
1272
  case "Cookie":
1207
1273
  if (response instanceof Cookie)
1208
1274
  return new Response(response.value, set);
@@ -1243,6 +1309,8 @@ var mapEarlyResponse = (response, set, request) => {
1243
1309
  return response.then((x) => mapEarlyResponse(x, set));
1244
1310
  if (response instanceof Error)
1245
1311
  return errorToResponse(response, set);
1312
+ if ("toResponse" in response)
1313
+ return mapEarlyResponse(response.toResponse(), set);
1246
1314
  if ("charCodeAt" in response) {
1247
1315
  const code = response.charCodeAt(0);
1248
1316
  if (code === 123 || code === 91) {
@@ -1262,13 +1330,24 @@ var mapEarlyResponse = (response, set, request) => {
1262
1330
  return new Response(response);
1263
1331
  case "Blob":
1264
1332
  return handleFile(response, set);
1265
- case "Object":
1266
1333
  case "Array":
1267
- return new Response(JSON.stringify(response), {
1268
- headers: {
1269
- "content-type": "application/json"
1334
+ return Response.json(response);
1335
+ case "Object":
1336
+ for (const value in Object.values(response)) {
1337
+ switch (value?.constructor?.name) {
1338
+ case "Blob":
1339
+ case "File":
1340
+ case "ArrayBuffer":
1341
+ case "FileRef":
1342
+ return new Response(
1343
+ form(response),
1344
+ set
1345
+ );
1346
+ default:
1347
+ break;
1270
1348
  }
1271
- });
1349
+ }
1350
+ return Response.json(response, set);
1272
1351
  case "ReadableStream":
1273
1352
  request?.signal.addEventListener(
1274
1353
  "abort",
@@ -1314,6 +1393,8 @@ var mapEarlyResponse = (response, set, request) => {
1314
1393
  if (response instanceof Cookie)
1315
1394
  return new Response(response.value, set);
1316
1395
  return new Response(response?.toString(), set);
1396
+ case "FormData":
1397
+ return new Response(response);
1317
1398
  default:
1318
1399
  if (response instanceof Response)
1319
1400
  return new Response(response.body, {
@@ -1325,6 +1406,8 @@ var mapEarlyResponse = (response, set, request) => {
1325
1406
  return response.then((x) => mapEarlyResponse(x, set));
1326
1407
  if (response instanceof Error)
1327
1408
  return errorToResponse(response, set);
1409
+ if ("toResponse" in response)
1410
+ return mapEarlyResponse(response.toResponse(), set);
1328
1411
  if ("charCodeAt" in response) {
1329
1412
  const code = response.charCodeAt(0);
1330
1413
  if (code === 123 || code === 91) {
@@ -1353,13 +1436,23 @@ var mapCompactResponse = (response, request) => {
1353
1436
  return new Response(response);
1354
1437
  case "Blob":
1355
1438
  return handleFile(response);
1356
- case "Object":
1357
1439
  case "Array":
1358
- return new Response(JSON.stringify(response), {
1359
- headers: {
1360
- "content-type": "application/json"
1361
- }
1362
- });
1440
+ return Response.json(response);
1441
+ case "Object":
1442
+ form:
1443
+ for (const value of Object.values(response))
1444
+ switch (value?.constructor?.name) {
1445
+ case "Blob":
1446
+ case "File":
1447
+ case "ArrayBuffer":
1448
+ case "FileRef":
1449
+ return new Response(form(response));
1450
+ case "Object":
1451
+ break form;
1452
+ default:
1453
+ break;
1454
+ }
1455
+ return Response.json(response);
1363
1456
  case "ReadableStream":
1364
1457
  request?.signal.addEventListener(
1365
1458
  "abort",
@@ -1399,6 +1492,8 @@ var mapCompactResponse = (response, request) => {
1399
1492
  case "Number":
1400
1493
  case "Boolean":
1401
1494
  return new Response(response.toString());
1495
+ case "FormData":
1496
+ return new Response(response);
1402
1497
  default:
1403
1498
  if (response instanceof Response)
1404
1499
  return new Response(response.body, {
@@ -1410,6 +1505,8 @@ var mapCompactResponse = (response, request) => {
1410
1505
  return response.then(mapCompactResponse);
1411
1506
  if (response instanceof Error)
1412
1507
  return errorToResponse(response);
1508
+ if ("toResponse" in response)
1509
+ return mapCompactResponse(response.toResponse());
1413
1510
  if ("charCodeAt" in response) {
1414
1511
  const code = response.charCodeAt(0);
1415
1512
  if (code === 123 || code === 91) {
@@ -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';