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.
@@ -87,8 +87,10 @@ var separateFunction = (code) => {
87
87
  }
88
88
  const start = code.indexOf("(");
89
89
  if (start !== -1) {
90
- const [parameter, body] = code.split("\n", 2);
90
+ const sep = code.indexOf("\n", 2);
91
+ const parameter = code.slice(0, sep);
91
92
  const end = parameter.lastIndexOf(")") + 1;
93
+ const body = code.slice(sep + 1);
92
94
  return [
93
95
  parameter.slice(start, end),
94
96
  "{" + body,
@@ -344,6 +346,8 @@ var validateInferencedQueries = (queries) => {
344
346
  return false;
345
347
  if (query.indexOf(" ") !== -1)
346
348
  return false;
349
+ if (query.indexOf("(") !== -1)
350
+ return false;
347
351
  }
348
352
  return true;
349
353
  };
@@ -735,6 +739,12 @@ var parseCookie = async (set, cookieString, {
735
739
  throw new InvalidCookieSignature(name);
736
740
  }
737
741
  }
742
+ if (value == null) {
743
+ jar[name] = {
744
+ value: v
745
+ };
746
+ continue;
747
+ }
738
748
  const start = value.charCodeAt(0);
739
749
  if (start === 123 || start === 91)
740
750
  try {
@@ -875,9 +885,21 @@ var mapResponse = (response, set, request) => {
875
885
  return new Response(response, set);
876
886
  case "Blob":
877
887
  return handleFile(response, set);
878
- case "Object":
879
888
  case "Array":
880
889
  return Response.json(response, set);
890
+ case "Object":
891
+ for (const value in Object.values(response)) {
892
+ switch (value?.constructor?.name) {
893
+ case "Blob":
894
+ case "File":
895
+ case "ArrayBuffer":
896
+ case "FileRef":
897
+ return new Response(form(response));
898
+ default:
899
+ break;
900
+ }
901
+ }
902
+ return Response.json(response, set);
881
903
  case "ReadableStream":
882
904
  if (!set.headers["content-type"]?.startsWith(
883
905
  "text/event-stream"
@@ -951,6 +973,8 @@ var mapResponse = (response, set, request) => {
951
973
  if (response instanceof Cookie)
952
974
  return new Response(response.value, set);
953
975
  return new Response(response?.toString(), set);
976
+ case "FormData":
977
+ return new Response(response, set);
954
978
  default:
955
979
  if (response instanceof Response) {
956
980
  let isCookieSet2 = false;
@@ -991,6 +1015,8 @@ var mapResponse = (response, set, request) => {
991
1015
  return response.then((x) => mapResponse(x, set));
992
1016
  if (response instanceof Error)
993
1017
  return errorToResponse(response, set);
1018
+ if ("toResponse" in response)
1019
+ return mapResponse(response.toResponse(), set);
994
1020
  if ("charCodeAt" in response) {
995
1021
  const code = response.charCodeAt(0);
996
1022
  if (code === 123 || code === 91) {
@@ -1010,13 +1036,24 @@ var mapResponse = (response, set, request) => {
1010
1036
  return new Response(response);
1011
1037
  case "Blob":
1012
1038
  return handleFile(response, set);
1013
- case "Object":
1014
1039
  case "Array":
1015
- return new Response(JSON.stringify(response), {
1016
- headers: {
1017
- "content-type": "application/json"
1040
+ return Response.json(response);
1041
+ case "Object":
1042
+ for (const value in Object.values(response)) {
1043
+ switch (value?.constructor?.name) {
1044
+ case "Blob":
1045
+ case "File":
1046
+ case "ArrayBuffer":
1047
+ case "FileRef":
1048
+ return new Response(
1049
+ form(response),
1050
+ set
1051
+ );
1052
+ default:
1053
+ break;
1018
1054
  }
1019
- });
1055
+ }
1056
+ return Response.json(response, set);
1020
1057
  case "ReadableStream":
1021
1058
  request?.signal.addEventListener(
1022
1059
  "abort",
@@ -1063,6 +1100,8 @@ var mapResponse = (response, set, request) => {
1063
1100
  if (response instanceof Cookie)
1064
1101
  return new Response(response.value, set);
1065
1102
  return new Response(response?.toString(), set);
1103
+ case "FormData":
1104
+ return new Response(response, set);
1066
1105
  default:
1067
1106
  if (response instanceof Response)
1068
1107
  return new Response(response.body, {
@@ -1074,6 +1113,8 @@ var mapResponse = (response, set, request) => {
1074
1113
  return response.then((x) => mapResponse(x, set));
1075
1114
  if (response instanceof Error)
1076
1115
  return errorToResponse(response, set);
1116
+ if ("toResponse" in response)
1117
+ return mapResponse(response.toResponse(), set);
1077
1118
  if ("charCodeAt" in response) {
1078
1119
  const code = response.charCodeAt(0);
1079
1120
  if (code === 123 || code === 91) {
@@ -1117,9 +1158,24 @@ var mapEarlyResponse = (response, set, request) => {
1117
1158
  return new Response(response, set);
1118
1159
  case "Blob":
1119
1160
  return handleFile(response, set);
1120
- case "Object":
1121
1161
  case "Array":
1122
1162
  return Response.json(response, set);
1163
+ case "Object":
1164
+ for (const value in Object.values(response)) {
1165
+ switch (value?.constructor?.name) {
1166
+ case "Blob":
1167
+ case "File":
1168
+ case "ArrayBuffer":
1169
+ case "FileRef":
1170
+ return new Response(
1171
+ form(response),
1172
+ set
1173
+ );
1174
+ default:
1175
+ break;
1176
+ }
1177
+ }
1178
+ return Response.json(response, set);
1123
1179
  case "ReadableStream":
1124
1180
  if (!set.headers["content-type"]?.startsWith(
1125
1181
  "text/event-stream"
@@ -1191,6 +1247,8 @@ var mapEarlyResponse = (response, set, request) => {
1191
1247
  response.toString(),
1192
1248
  set
1193
1249
  );
1250
+ case "FormData":
1251
+ return new Response(response);
1194
1252
  case "Cookie":
1195
1253
  if (response instanceof Cookie)
1196
1254
  return new Response(response.value, set);
@@ -1231,6 +1289,8 @@ var mapEarlyResponse = (response, set, request) => {
1231
1289
  return response.then((x) => mapEarlyResponse(x, set));
1232
1290
  if (response instanceof Error)
1233
1291
  return errorToResponse(response, set);
1292
+ if ("toResponse" in response)
1293
+ return mapEarlyResponse(response.toResponse(), set);
1234
1294
  if ("charCodeAt" in response) {
1235
1295
  const code = response.charCodeAt(0);
1236
1296
  if (code === 123 || code === 91) {
@@ -1250,13 +1310,24 @@ var mapEarlyResponse = (response, set, request) => {
1250
1310
  return new Response(response);
1251
1311
  case "Blob":
1252
1312
  return handleFile(response, set);
1253
- case "Object":
1254
1313
  case "Array":
1255
- return new Response(JSON.stringify(response), {
1256
- headers: {
1257
- "content-type": "application/json"
1314
+ return Response.json(response);
1315
+ case "Object":
1316
+ for (const value in Object.values(response)) {
1317
+ switch (value?.constructor?.name) {
1318
+ case "Blob":
1319
+ case "File":
1320
+ case "ArrayBuffer":
1321
+ case "FileRef":
1322
+ return new Response(
1323
+ form(response),
1324
+ set
1325
+ );
1326
+ default:
1327
+ break;
1258
1328
  }
1259
- });
1329
+ }
1330
+ return Response.json(response, set);
1260
1331
  case "ReadableStream":
1261
1332
  request?.signal.addEventListener(
1262
1333
  "abort",
@@ -1302,6 +1373,8 @@ var mapEarlyResponse = (response, set, request) => {
1302
1373
  if (response instanceof Cookie)
1303
1374
  return new Response(response.value, set);
1304
1375
  return new Response(response?.toString(), set);
1376
+ case "FormData":
1377
+ return new Response(response);
1305
1378
  default:
1306
1379
  if (response instanceof Response)
1307
1380
  return new Response(response.body, {
@@ -1313,6 +1386,8 @@ var mapEarlyResponse = (response, set, request) => {
1313
1386
  return response.then((x) => mapEarlyResponse(x, set));
1314
1387
  if (response instanceof Error)
1315
1388
  return errorToResponse(response, set);
1389
+ if ("toResponse" in response)
1390
+ return mapEarlyResponse(response.toResponse(), set);
1316
1391
  if ("charCodeAt" in response) {
1317
1392
  const code = response.charCodeAt(0);
1318
1393
  if (code === 123 || code === 91) {
@@ -1341,13 +1416,23 @@ var mapCompactResponse = (response, request) => {
1341
1416
  return new Response(response);
1342
1417
  case "Blob":
1343
1418
  return handleFile(response);
1344
- case "Object":
1345
1419
  case "Array":
1346
- return new Response(JSON.stringify(response), {
1347
- headers: {
1348
- "content-type": "application/json"
1349
- }
1350
- });
1420
+ return Response.json(response);
1421
+ case "Object":
1422
+ form:
1423
+ for (const value of Object.values(response))
1424
+ switch (value?.constructor?.name) {
1425
+ case "Blob":
1426
+ case "File":
1427
+ case "ArrayBuffer":
1428
+ case "FileRef":
1429
+ return new Response(form(response));
1430
+ case "Object":
1431
+ break form;
1432
+ default:
1433
+ break;
1434
+ }
1435
+ return Response.json(response);
1351
1436
  case "ReadableStream":
1352
1437
  request?.signal.addEventListener(
1353
1438
  "abort",
@@ -1387,6 +1472,8 @@ var mapCompactResponse = (response, request) => {
1387
1472
  case "Number":
1388
1473
  case "Boolean":
1389
1474
  return new Response(response.toString());
1475
+ case "FormData":
1476
+ return new Response(response);
1390
1477
  default:
1391
1478
  if (response instanceof Response)
1392
1479
  return new Response(response.body, {
@@ -1398,6 +1485,8 @@ var mapCompactResponse = (response, request) => {
1398
1485
  return response.then(mapCompactResponse);
1399
1486
  if (response instanceof Error)
1400
1487
  return errorToResponse(response);
1488
+ if ("toResponse" in response)
1489
+ return mapCompactResponse(response.toResponse());
1401
1490
  if ("charCodeAt" in response) {
1402
1491
  const code = response.charCodeAt(0);
1403
1492
  if (code === 123 || code === 91) {
@@ -1626,7 +1715,7 @@ var validateFile = (options, value) => {
1626
1715
  }
1627
1716
  return true;
1628
1717
  };
1629
- var File = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type("File", validateFile);
1718
+ var File2 = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type("File", validateFile);
1630
1719
  var Files = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type(
1631
1720
  "Files",
1632
1721
  (options, value) => {
@@ -1772,7 +1861,7 @@ var ElysiaType = {
1772
1861
  return JSON.stringify(value);
1773
1862
  });
1774
1863
  },
1775
- File,
1864
+ File: File2,
1776
1865
  Files: (options = {}) => t.Transform(Files(options)).Decode((value) => {
1777
1866
  if (Array.isArray(value))
1778
1867
  return value;
@@ -1899,7 +1988,7 @@ var getSchemaValidator = (s, {
1899
1988
  models = {},
1900
1989
  dynamic = false,
1901
1990
  normalize = false,
1902
- additionalProperties = normalize
1991
+ additionalProperties = false
1903
1992
  } = {}) => {
1904
1993
  if (!s)
1905
1994
  return void 0;
@@ -1920,7 +2009,7 @@ var getSchemaValidator = (s, {
1920
2009
  Errors: (value) => import_value3.Value.Errors(schema, value),
1921
2010
  Code: () => ""
1922
2011
  };
1923
- if (normalize && schema.additionalProperties === true)
2012
+ if (normalize && schema.additionalProperties === false)
1924
2013
  validator.Clean = cleaner;
1925
2014
  if (schema.config) {
1926
2015
  validator.config = schema.config;
@@ -2097,12 +2186,25 @@ var lifeCycleToFn = (a) => {
2097
2186
  stop: a.stop?.map((x) => x.fn)
2098
2187
  };
2099
2188
  };
2100
- var redirect = (url, status = 301) => new Response(null, {
2101
- status,
2102
- headers: {
2103
- Location: url
2189
+ var redirect = (url, status = 301) => Response.redirect(url, status);
2190
+ var ELYSIA_FORM_DATA = Symbol("ElysiaFormData");
2191
+ var form = (items) => {
2192
+ const formData = new FormData();
2193
+ for (const [key, value] of Object.entries(items)) {
2194
+ if (Array.isArray(value)) {
2195
+ for (const v of value) {
2196
+ if (value instanceof File)
2197
+ formData.append(key, value, value.name);
2198
+ formData.append(key, v);
2199
+ }
2200
+ continue;
2201
+ }
2202
+ if (value instanceof File)
2203
+ formData.append(key, value, value.name);
2204
+ formData.append(key, value);
2104
2205
  }
2105
- });
2206
+ return formData;
2207
+ };
2106
2208
 
2107
2209
  // src/compose.ts
2108
2210
  var headersHasToJSON = new Headers().toJSON;
@@ -2692,7 +2794,7 @@ const traceDone = Promise.all([`;
2692
2794
  if (validator) {
2693
2795
  fnLiteral += "\n";
2694
2796
  if (validator.headers) {
2695
- if (hasProperty("default", validator.headers.params))
2797
+ if (hasProperty("default", validator.headers.schema))
2696
2798
  for (const [key, value] of Object.entries(
2697
2799
  import_value4.Value.Default(
2698
2800
  // @ts-ignore
@@ -2700,7 +2802,7 @@ const traceDone = Promise.all([`;
2700
2802
  {}
2701
2803
  )
2702
2804
  )) {
2703
- const parsed = typeof value === "object" ? JSON.stringify(value) : `'${value}'`;
2805
+ const parsed = typeof value === "object" ? JSON.stringify(value) : typeof value === "string" ? `'${value}'` : value;
2704
2806
  if (parsed)
2705
2807
  fnLiteral += `c.headers['${key}'] ??= ${parsed}
2706
2808
  `;
@@ -2722,7 +2824,7 @@ c.headers = headers.Decode(c.headers)
2722
2824
  {}
2723
2825
  )
2724
2826
  )) {
2725
- const parsed = typeof value === "object" ? JSON.stringify(value) : `'${value}'`;
2827
+ const parsed = typeof value === "object" ? JSON.stringify(value) : typeof value === "string" ? `'${value}'` : value;
2726
2828
  if (parsed)
2727
2829
  fnLiteral += `c.params['${key}'] ??= ${parsed}
2728
2830
  `;
@@ -2746,11 +2848,26 @@ c.params = params.Decode(c.params)
2746
2848
  {}
2747
2849
  )
2748
2850
  )) {
2749
- const parsed = typeof value === "object" ? JSON.stringify(value) : `'${value}'`;
2851
+ const parsed = typeof value === "object" ? JSON.stringify(value) : typeof value === "string" ? `'${value}'` : value;
2750
2852
  if (parsed)
2751
2853
  fnLiteral += `c.query['${key}'] ??= ${parsed}
2752
2854
  `;
2753
2855
  }
2856
+ for (const [key, value] of Object.entries(
2857
+ // @ts-ignore
2858
+ validator.query.schema?.properties
2859
+ )) {
2860
+ const { type, anyOf } = value;
2861
+ if (type === "object" || type === "array") {
2862
+ fnLiteral += `c.query['${key}'] = JSON.parse(c.query['${key}'])
2863
+ `;
2864
+ continue;
2865
+ }
2866
+ if (anyOf) {
2867
+ fnLiteral += `if(typeof c.query['${key}'] === "object") c.query['${key}'] = JSON.parse(c.query['${key}'])
2868
+ `;
2869
+ }
2870
+ }
2754
2871
  fnLiteral += `if(query.Check(c.query) === false) {
2755
2872
  ${composeValidation("query")}
2756
2873
  }`;
@@ -2762,21 +2879,32 @@ c.query = query.Decode(Object.assign({}, c.query))
2762
2879
  if (validator.body) {
2763
2880
  if (normalize)
2764
2881
  fnLiteral += "c.body = body.Clean(c.body);\n";
2765
- if (hasProperty("default", validator.body.schema))
2882
+ if (hasProperty("default", validator.body.schema)) {
2766
2883
  fnLiteral += `if(body.Check(c.body) === false) {
2767
- c.body = Object.assign(${JSON.stringify(
2884
+ if (typeof c.body === 'object') {
2885
+ c.body = Object.assign(${JSON.stringify(
2768
2886
  import_value4.Value.Default(
2769
2887
  // @ts-ignore
2770
2888
  validator.body.schema,
2771
- null
2889
+ {}
2772
2890
  ) ?? {}
2773
2891
  )}, c.body)
2774
-
2775
- if(body.Check(c.query) === false) {
2892
+ } else {`;
2893
+ const defaultValue = import_value4.Value.Default(
2894
+ // @ts-ignore
2895
+ validator.body.schema,
2896
+ void 0
2897
+ );
2898
+ if (typeof defaultValue === "string")
2899
+ fnLiteral += `c.body = '${defaultValue}'`;
2900
+ else
2901
+ fnLiteral += `c.body = ${defaultValue}`;
2902
+ fnLiteral += `}
2903
+ if(body.Check(c.body) === false) {
2776
2904
  ${composeValidation("body")}
2777
2905
  }
2778
2906
  }`;
2779
- else
2907
+ } else
2780
2908
  fnLiteral += `if(body.Check(c.body) === false) {
2781
2909
  ${composeValidation("body")}
2782
2910
  }`;
@@ -2785,7 +2913,11 @@ c.query = query.Decode(Object.assign({}, c.query))
2785
2913
  c.body = body.Decode(c.body)
2786
2914
  `;
2787
2915
  }
2788
- if (isNotEmpty(cookieValidator?.schema?.properties ?? cookieValidator?.schema?.schema ?? {})) {
2916
+ if (isNotEmpty(
2917
+ // @ts-ignore
2918
+ cookieValidator?.schema?.properties ?? // @ts-ignore
2919
+ cookieValidator?.schema?.schema ?? {}
2920
+ )) {
2789
2921
  fnLiteral += `const cookieValue = {}
2790
2922
  for(const [key, value] of Object.entries(c.cookie))
2791
2923
  cookieValue[key] = value.value
@@ -362,7 +362,7 @@ var validateFile = (options, value) => {
362
362
  }
363
363
  return true;
364
364
  };
365
- var File = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type("File", validateFile);
365
+ var File2 = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type("File", validateFile);
366
366
  var Files = import_typebox.TypeRegistry.Get("Files") ?? import_system.TypeSystem.Type(
367
367
  "Files",
368
368
  (options, value) => {
@@ -508,7 +508,7 @@ var ElysiaType = {
508
508
  return JSON.stringify(value);
509
509
  });
510
510
  },
511
- File,
511
+ File: File2,
512
512
  Files: (options = {}) => t.Transform(Files(options)).Decode((value) => {
513
513
  if (Array.isArray(value))
514
514
  return value;
@@ -715,6 +715,7 @@ var isNumericString = (message) => {
715
715
  }
716
716
  return false;
717
717
  };
718
+ var ELYSIA_FORM_DATA = Symbol("ElysiaFormData");
718
719
 
719
720
  // src/cookies.ts
720
721
  var Cookie = class {
@@ -887,6 +888,12 @@ var parseCookie = async (set, cookieString, {
887
888
  throw new InvalidCookieSignature(name);
888
889
  }
889
890
  }
891
+ if (value == null) {
892
+ jar[name] = {
893
+ value: v
894
+ };
895
+ continue;
896
+ }
890
897
  const start = value.charCodeAt(0);
891
898
  if (start === 123 || start === 91)
892
899
  try {