hono 4.3.2 → 4.3.3

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.
@@ -76,7 +76,8 @@ var EventProcessor = class {
76
76
  if (event.multiValueHeaders) {
77
77
  for (const [k, values] of Object.entries(event.multiValueHeaders)) {
78
78
  if (values) {
79
- values.forEach((v) => headers.append(k, v));
79
+ const foundK = headers.get(k);
80
+ values.forEach((v) => (!foundK || !foundK.includes(v)) && headers.append(k, v));
80
81
  }
81
82
  }
82
83
  }
@@ -179,6 +180,7 @@ var isContentEncodingBinary = (contentEncoding) => {
179
180
  return /^(gzip|deflate|compress|br)/.test(contentEncoding);
180
181
  };
181
182
  export {
183
+ getProcessor,
182
184
  handle,
183
185
  isContentEncodingBinary,
184
186
  isContentTypeBinary,
@@ -24,6 +24,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
25
  var handler_exports = {};
26
26
  __export(handler_exports, {
27
+ getProcessor: () => getProcessor,
27
28
  handle: () => handle,
28
29
  isContentEncodingBinary: () => isContentEncodingBinary,
29
30
  isContentTypeBinary: () => isContentTypeBinary,
@@ -107,7 +108,8 @@ class EventProcessor {
107
108
  if (event.multiValueHeaders) {
108
109
  for (const [k, values] of Object.entries(event.multiValueHeaders)) {
109
110
  if (values) {
110
- values.forEach((v) => headers.append(k, v));
111
+ const foundK = headers.get(k);
112
+ values.forEach((v) => (!foundK || !foundK.includes(v)) && headers.append(k, v));
111
113
  }
112
114
  }
113
115
  }
@@ -211,6 +213,7 @@ const isContentEncodingBinary = (contentEncoding) => {
211
213
  };
212
214
  // Annotate the CommonJS export names for ESM import in node:
213
215
  0 && (module.exports = {
216
+ getProcessor,
214
217
  handle,
215
218
  isContentEncodingBinary,
216
219
  isContentTypeBinary,
@@ -37,9 +37,9 @@ class Factory {
37
37
  return app;
38
38
  };
39
39
  createMiddleware = (middleware) => middleware;
40
- createHandlers(...handlers) {
40
+ createHandlers = (...handlers) => {
41
41
  return handlers.filter((handler) => handler !== void 0);
42
- }
42
+ };
43
43
  }
44
44
  const createFactory = (init) => new Factory(init);
45
45
  const createMiddleware = (middleware) => createFactory().createMiddleware(middleware);
@@ -25,17 +25,11 @@ var import_request = require("../request");
25
25
  const parseBody = async (request, options = { all: false }) => {
26
26
  const headers = request instanceof import_request.HonoRequest ? request.raw.headers : request.headers;
27
27
  const contentType = headers.get("Content-Type");
28
- if (isFormDataContent(contentType)) {
28
+ if (contentType !== null && contentType.startsWith("multipart/form-data") || contentType !== null && contentType.startsWith("application/x-www-form-urlencoded")) {
29
29
  return parseFormData(request, options);
30
30
  }
31
31
  return {};
32
32
  };
33
- function isFormDataContent(contentType) {
34
- if (contentType === null) {
35
- return false;
36
- }
37
- return contentType.startsWith("multipart/form-data") || contentType.startsWith("application/x-www-form-urlencoded");
38
- }
39
33
  async function parseFormData(request, options) {
40
34
  const formData = await request.formData();
41
35
  if (formData) {
@@ -56,23 +50,16 @@ function convertFormDataToBodyData(formData, options) {
56
50
  return form;
57
51
  }
58
52
  const handleParsingAllValues = (form, key, value) => {
59
- if (form[key] && isArrayField(form[key])) {
60
- appendToExistingArray(form[key], value);
53
+ const formKey = form[key];
54
+ if (form[key] && Array.isArray(form[key])) {
55
+ formKey.push(value);
61
56
  } else if (form[key]) {
62
- convertToNewArray(form, key, value);
57
+ const parsedKey = [...formKey].join("").replace(",", "");
58
+ form[key] = [parsedKey, value];
63
59
  } else {
64
60
  form[key] = value;
65
61
  }
66
62
  };
67
- function isArrayField(field) {
68
- return Array.isArray(field);
69
- }
70
- const appendToExistingArray = (arr, value) => {
71
- arr.push(value);
72
- };
73
- const convertToNewArray = (form, key, value) => {
74
- form[key] = [form[key], value];
75
- };
76
63
  // Annotate the CommonJS export names for ESM import in node:
77
64
  0 && (module.exports = {
78
65
  parseBody
@@ -54,7 +54,16 @@ const validator = (target, validationFunc) => {
54
54
  const formData = await (0, import_buffer.bufferToFormData)(arrayBuffer, contentType);
55
55
  const form = {};
56
56
  formData.forEach((value2, key) => {
57
- form[key] = value2;
57
+ if (key.endsWith("[]")) {
58
+ if (form[key] === void 0) {
59
+ form[key] = [value2];
60
+ } else if (Array.isArray(form[key])) {
61
+ ;
62
+ form[key].push(value2);
63
+ }
64
+ } else {
65
+ form[key] = value2;
66
+ }
58
67
  });
59
68
  value = form;
60
69
  c.req.bodyCache.formData = formData;
@@ -13,9 +13,9 @@ var Factory = class {
13
13
  return app;
14
14
  };
15
15
  createMiddleware = (middleware) => middleware;
16
- createHandlers(...handlers) {
16
+ createHandlers = (...handlers) => {
17
17
  return handlers.filter((handler) => handler !== void 0);
18
- }
18
+ };
19
19
  };
20
20
  var createFactory = (init) => new Factory(init);
21
21
  var createMiddleware = (middleware) => createFactory().createMiddleware(middleware);
@@ -69,5 +69,17 @@ export declare const streamHandle: <E extends Env = Env, S extends Schema = {},
69
69
  * Accepts events from API Gateway/ELB(`APIGatewayProxyEvent`) and directly through Function Url(`APIGatewayProxyEventV2`)
70
70
  */
71
71
  export declare const handle: <E extends Env = Env, S extends Schema = {}, BasePath extends string = "/">(app: Hono<E, S, BasePath>) => (event: LambdaEvent, lambdaContext?: LambdaContext) => Promise<APIGatewayProxyResult>;
72
+ declare abstract class EventProcessor<E extends LambdaEvent> {
73
+ protected abstract getPath(event: E): string;
74
+ protected abstract getMethod(event: E): string;
75
+ protected abstract getQueryString(event: E): string;
76
+ protected abstract getCookies(event: E, headers: Headers): void;
77
+ protected abstract setCookiesToResult(result: APIGatewayProxyResult, cookies: string[]): void;
78
+ createRequest(event: E): Request;
79
+ createResult(event: E, res: Response): Promise<APIGatewayProxyResult>;
80
+ setCookies: (event: LambdaEvent, res: Response, result: APIGatewayProxyResult) => void;
81
+ }
82
+ export declare const getProcessor: (event: LambdaEvent) => EventProcessor<LambdaEvent>;
72
83
  export declare const isContentTypeBinary: (contentType: string) => boolean;
73
84
  export declare const isContentEncodingBinary: (contentEncoding: string | null) => boolean;
85
+ export {};
@@ -1,24 +1,16 @@
1
1
  import { Hono } from '../../hono';
2
2
  import type { Env, H, HandlerResponse, Input, MiddlewareHandler } from '../../types';
3
3
  type InitApp<E extends Env = Env> = (app: Hono<E>) => void;
4
- export declare class Factory<E extends Env = any, P extends string = any> {
5
- private initApp?;
6
- constructor(init?: {
7
- initApp?: InitApp<E>;
8
- });
9
- /**
10
- * @experimental
11
- * `createApp` is an experimental feature.
12
- */
13
- createApp: () => Hono<E, import("../../types").BlankSchema, "/">;
14
- createMiddleware: <I extends Input = {}>(middleware: MiddlewareHandler<E, P, I>) => MiddlewareHandler<E, P, I>;
15
- createHandlers<I extends Input = {}, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>): [H<E, P, I, R>];
16
- createHandlers<I extends Input = {}, I2 extends Input = I, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>): [H<E, P, I, R>, H<E, P, I2, R>];
17
- createHandlers<I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>];
18
- createHandlers<I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>, H<E, P, I4, R>];
19
- createHandlers<I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>, H<E, P, I4, R>, H<E, P, I5, R>];
20
- createHandlers<I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>, H<E, P, I4, R>, H<E, P, I5, R>, H<E, P, I6, R>];
21
- createHandlers<I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>): [
4
+ interface CreateHandlersInterface<E extends Env, P extends string> {
5
+ <I extends Input = {}, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>): [
6
+ H<E, P, I, R>
7
+ ];
8
+ <I extends Input = {}, I2 extends Input = I, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>): [H<E, P, I, R>, H<E, P, I2, R>];
9
+ <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>];
10
+ <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>, H<E, P, I4, R>];
11
+ <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>, H<E, P, I4, R>, H<E, P, I5, R>];
12
+ <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>, H<E, P, I4, R>, H<E, P, I5, R>, H<E, P, I6, R>];
13
+ <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>): [
22
14
  H<E, P, I, R>,
23
15
  H<E, P, I2, R>,
24
16
  H<E, P, I3, R>,
@@ -27,7 +19,7 @@ export declare class Factory<E extends Env = any, P extends string = any> {
27
19
  H<E, P, I6, R>,
28
20
  H<E, P, I7, R>
29
21
  ];
30
- createHandlers<I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>, handler8: H<E, P, I8, R>): [
22
+ <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>, handler8: H<E, P, I8, R>): [
31
23
  H<E, P, I, R>,
32
24
  H<E, P, I2, R>,
33
25
  H<E, P, I3, R>,
@@ -37,7 +29,7 @@ export declare class Factory<E extends Env = any, P extends string = any> {
37
29
  H<E, P, I7, R>,
38
30
  H<E, P, I8, R>
39
31
  ];
40
- createHandlers<I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>, handler8: H<E, P, I8, R>, handler9: H<E, P, I9, R>): [
32
+ <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>, handler8: H<E, P, I8, R>, handler9: H<E, P, I9, R>): [
41
33
  H<E, P, I, R>,
42
34
  H<E, P, I2, R>,
43
35
  H<E, P, I3, R>,
@@ -48,7 +40,7 @@ export declare class Factory<E extends Env = any, P extends string = any> {
48
40
  H<E, P, I8, R>,
49
41
  H<E, P, I9, R>
50
42
  ];
51
- createHandlers<I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>, handler8: H<E, P, I8, R>, handler9: H<E, P, I9, R>, handler10: H<E, P, I10, R>): [
43
+ <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, I6 extends Input = I & I2 & I3 & I4 & I5, I7 extends Input = I & I2 & I3 & I4 & I5 & I6, I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7, I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8, I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9, R extends HandlerResponse<any> = any>(handler1: H<E, P, I, R>, handler2: H<E, P, I2, R>, handler3: H<E, P, I3, R>, handler4: H<E, P, I4, R>, handler5: H<E, P, I5, R>, handler6: H<E, P, I6, R>, handler7: H<E, P, I7, R>, handler8: H<E, P, I8, R>, handler9: H<E, P, I9, R>, handler10: H<E, P, I10, R>): [
52
44
  H<E, P, I, R>,
53
45
  H<E, P, I2, R>,
54
46
  H<E, P, I3, R>,
@@ -61,6 +53,19 @@ export declare class Factory<E extends Env = any, P extends string = any> {
61
53
  H<E, P, I10, R>
62
54
  ];
63
55
  }
56
+ export declare class Factory<E extends Env = any, P extends string = any> {
57
+ private initApp?;
58
+ constructor(init?: {
59
+ initApp?: InitApp<E>;
60
+ });
61
+ /**
62
+ * @experimental
63
+ * `createApp` is an experimental feature.
64
+ */
65
+ createApp: () => Hono<E, import("../../types").BlankSchema, "/">;
66
+ createMiddleware: <I extends Input = {}>(middleware: MiddlewareHandler<E, P, I>) => MiddlewareHandler<E, P, I>;
67
+ createHandlers: CreateHandlersInterface<E, P>;
68
+ }
64
69
  export declare const createFactory: <E extends Env = any, P extends string = any>(init?: {
65
70
  initApp?: InitApp<E> | undefined;
66
71
  } | undefined) => Factory<E, P>;
@@ -53,6 +53,7 @@ export declare class HonoRequest<P extends string = '/', I extends Input['out']
53
53
  */
54
54
  param<P2 extends ParamKeys<P> = ParamKeys<P>>(key: P2 extends `${infer _}?` ? never : P2): string;
55
55
  param<P2 extends RemoveQuestion<ParamKeys<P>> = RemoveQuestion<ParamKeys<P>>>(key: P2): string | undefined;
56
+ param(key: string): string | undefined;
56
57
  param<P2 extends string = P>(): UnionToIntersection<ParamKeyToRecord<ParamKeys<P2>>>;
57
58
  private getDecodedParam;
58
59
  private getAllDecodedParams;
@@ -2,21 +2,19 @@ import { HonoRequest } from '../request';
2
2
  export type BodyData = Record<string, string | File | (string | File)[]>;
3
3
  export type ParseBodyOptions = {
4
4
  /**
5
- * Parse all fields with multiple values should be parsed as an array.
5
+ * Determines whether all fields with multiple values should be parsed as arrays.
6
6
  * @default false
7
7
  * @example
8
- * ```ts
9
8
  * const data = new FormData()
10
9
  * data.append('file', 'aaa')
11
10
  * data.append('file', 'bbb')
12
11
  * data.append('message', 'hello')
13
- * ```
14
12
  *
15
- * If `all` is `false`:
16
- * parseBody should return `{ file: 'bbb', message: 'hello' }`
13
+ * If all is false:
14
+ * parseBody should return { file: 'bbb', message: 'hello' }
17
15
  *
18
- * If `all` is `true`:
19
- * parseBody should return `{ file: ['aaa', 'bbb'], message: 'hello' }`
16
+ * If all is true:
17
+ * parseBody should return { file: ['aaa', 'bbb'], message: 'hello' }
20
18
  */
21
19
  all?: boolean;
22
20
  };
@@ -3,17 +3,11 @@ import { HonoRequest } from "../request.js";
3
3
  var parseBody = async (request, options = { all: false }) => {
4
4
  const headers = request instanceof HonoRequest ? request.raw.headers : request.headers;
5
5
  const contentType = headers.get("Content-Type");
6
- if (isFormDataContent(contentType)) {
6
+ if (contentType !== null && contentType.startsWith("multipart/form-data") || contentType !== null && contentType.startsWith("application/x-www-form-urlencoded")) {
7
7
  return parseFormData(request, options);
8
8
  }
9
9
  return {};
10
10
  };
11
- function isFormDataContent(contentType) {
12
- if (contentType === null) {
13
- return false;
14
- }
15
- return contentType.startsWith("multipart/form-data") || contentType.startsWith("application/x-www-form-urlencoded");
16
- }
17
11
  async function parseFormData(request, options) {
18
12
  const formData = await request.formData();
19
13
  if (formData) {
@@ -34,23 +28,16 @@ function convertFormDataToBodyData(formData, options) {
34
28
  return form;
35
29
  }
36
30
  var handleParsingAllValues = (form, key, value) => {
37
- if (form[key] && isArrayField(form[key])) {
38
- appendToExistingArray(form[key], value);
31
+ const formKey = form[key];
32
+ if (form[key] && Array.isArray(form[key])) {
33
+ formKey.push(value);
39
34
  } else if (form[key]) {
40
- convertToNewArray(form, key, value);
35
+ const parsedKey = [...formKey].join("").replace(",", "");
36
+ form[key] = [parsedKey, value];
41
37
  } else {
42
38
  form[key] = value;
43
39
  }
44
40
  };
45
- function isArrayField(field) {
46
- return Array.isArray(field);
47
- }
48
- var appendToExistingArray = (arr, value) => {
49
- arr.push(value);
50
- };
51
- var convertToNewArray = (form, key, value) => {
52
- form[key] = [form[key], value];
53
- };
54
41
  export {
55
42
  parseBody
56
43
  };
@@ -32,7 +32,16 @@ var validator = (target, validationFunc) => {
32
32
  const formData = await bufferToFormData(arrayBuffer, contentType);
33
33
  const form = {};
34
34
  formData.forEach((value2, key) => {
35
- form[key] = value2;
35
+ if (key.endsWith("[]")) {
36
+ if (form[key] === void 0) {
37
+ form[key] = [value2];
38
+ } else if (Array.isArray(form[key])) {
39
+ ;
40
+ form[key].push(value2);
41
+ }
42
+ } else {
43
+ form[key] = value2;
44
+ }
36
45
  });
37
46
  value = form;
38
47
  c.req.bodyCache.formData = formData;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hono",
3
- "version": "4.3.2",
3
+ "version": "4.3.3",
4
4
  "description": "Ultrafast web framework for the Edges",
5
5
  "main": "dist/cjs/index.js",
6
6
  "type": "module",