hono 4.6.20 → 4.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/adapter/aws-lambda/handler.js +0 -2
  2. package/dist/cjs/adapter/aws-lambda/handler.js +0 -8
  3. package/dist/cjs/helper/accepts/accepts.js +4 -26
  4. package/dist/cjs/helper/factory/index.js +6 -2
  5. package/dist/cjs/helper/proxy/index.js +75 -0
  6. package/dist/cjs/middleware/combine/index.js +10 -3
  7. package/dist/cjs/middleware/etag/digest.js +3 -8
  8. package/dist/cjs/middleware/etag/index.js +18 -2
  9. package/dist/cjs/middleware/jwk/index.js +28 -0
  10. package/dist/cjs/middleware/jwk/jwk.js +124 -0
  11. package/dist/cjs/middleware/language/index.js +36 -0
  12. package/dist/cjs/middleware/language/language.js +210 -0
  13. package/dist/cjs/middleware/logger/index.js +2 -3
  14. package/dist/cjs/request.js +1 -1
  15. package/dist/cjs/router/linear-router/router.js +3 -1
  16. package/dist/cjs/router/trie-router/node.js +24 -11
  17. package/dist/cjs/utils/accept.js +86 -0
  18. package/dist/cjs/utils/jwt/index.js +1 -1
  19. package/dist/cjs/utils/jwt/jwt.js +56 -3
  20. package/dist/cjs/utils/jwt/types.js +8 -0
  21. package/dist/cjs/utils/url.js +10 -25
  22. package/dist/helper/accepts/accepts.js +2 -23
  23. package/dist/helper/factory/index.js +6 -2
  24. package/dist/helper/proxy/index.js +52 -0
  25. package/dist/middleware/combine/index.js +10 -3
  26. package/dist/middleware/etag/digest.js +3 -8
  27. package/dist/middleware/etag/index.js +18 -2
  28. package/dist/middleware/jwk/index.js +5 -0
  29. package/dist/middleware/jwk/jwk.js +101 -0
  30. package/dist/middleware/language/index.js +15 -0
  31. package/dist/middleware/language/language.js +178 -0
  32. package/dist/middleware/logger/index.js +2 -3
  33. package/dist/request.js +1 -1
  34. package/dist/router/linear-router/router.js +3 -1
  35. package/dist/router/trie-router/node.js +24 -11
  36. package/dist/types/adapter/cloudflare-pages/handler.d.ts +1 -1
  37. package/dist/types/adapter/cloudflare-workers/websocket.d.ts +1 -1
  38. package/dist/types/adapter/lambda-edge/handler.d.ts +2 -2
  39. package/dist/types/client/types.d.ts +7 -8
  40. package/dist/types/compose.d.ts +11 -1
  41. package/dist/types/context.d.ts +31 -21
  42. package/dist/types/helper/accepts/accepts.d.ts +0 -1
  43. package/dist/types/helper/adapter/index.d.ts +2 -2
  44. package/dist/types/helper/conninfo/types.d.ts +2 -2
  45. package/dist/types/helper/css/common.d.ts +6 -1
  46. package/dist/types/helper/factory/index.d.ts +289 -12
  47. package/dist/types/helper/proxy/index.d.ts +54 -0
  48. package/dist/types/helper/ssg/ssg.d.ts +1 -1
  49. package/dist/types/helper/websocket/index.d.ts +1 -2
  50. package/dist/types/hono-base.d.ts +18 -15
  51. package/dist/types/hono.d.ts +1 -1
  52. package/dist/types/jsx/base.d.ts +4 -1
  53. package/dist/types/jsx/dom/hooks/index.d.ts +9 -3
  54. package/dist/types/jsx/dom/index.d.ts +28 -7
  55. package/dist/types/jsx/dom/intrinsic-element/components.d.ts +6 -6
  56. package/dist/types/jsx/dom/render.d.ts +28 -4
  57. package/dist/types/jsx/dom/server.d.ts +28 -7
  58. package/dist/types/jsx/hooks/index.d.ts +20 -5
  59. package/dist/types/jsx/index.d.ts +28 -7
  60. package/dist/types/jsx/intrinsic-element/components.d.ts +4 -4
  61. package/dist/types/jsx/intrinsic-elements.d.ts +46 -46
  62. package/dist/types/middleware/compress/index.d.ts +4 -1
  63. package/dist/types/middleware/etag/digest.d.ts +1 -1
  64. package/dist/types/middleware/etag/index.d.ts +4 -0
  65. package/dist/types/middleware/jwk/index.d.ts +1 -0
  66. package/dist/types/middleware/jwk/jwk.d.ts +40 -0
  67. package/dist/types/middleware/language/index.d.ts +7 -0
  68. package/dist/types/middleware/language/language.d.ts +102 -0
  69. package/dist/types/middleware/secure-headers/permissions-policy.d.ts +3 -3
  70. package/dist/types/middleware/secure-headers/secure-headers.d.ts +1 -1
  71. package/dist/types/preset/quick.d.ts +1 -1
  72. package/dist/types/preset/tiny.d.ts +1 -1
  73. package/dist/types/request.d.ts +5 -3
  74. package/dist/types/router/linear-router/router.d.ts +0 -1
  75. package/dist/types/router/pattern-router/router.d.ts +0 -1
  76. package/dist/types/router/reg-exp-router/node.d.ts +4 -2
  77. package/dist/types/router/reg-exp-router/router.d.ts +0 -1
  78. package/dist/types/router/reg-exp-router/trie.d.ts +5 -2
  79. package/dist/types/router/smart-router/router.d.ts +0 -1
  80. package/dist/types/router/trie-router/node.d.ts +6 -2
  81. package/dist/types/router/trie-router/router.d.ts +0 -1
  82. package/dist/types/router.d.ts +20 -2
  83. package/dist/types/types.d.ts +2002 -111
  84. package/dist/types/utils/accept.d.ts +11 -0
  85. package/dist/types/utils/cookie.d.ts +4 -4
  86. package/dist/types/utils/headers.d.ts +3 -3
  87. package/dist/types/utils/html.d.ts +6 -2
  88. package/dist/types/utils/jwt/index.d.ts +4 -0
  89. package/dist/types/utils/jwt/jws.d.ts +4 -1
  90. package/dist/types/utils/jwt/jwt.d.ts +8 -2
  91. package/dist/types/utils/jwt/types.d.ts +4 -0
  92. package/dist/types/utils/mime.d.ts +2 -2
  93. package/dist/types/utils/stream.d.ts +0 -4
  94. package/dist/types/utils/url.d.ts +16 -2
  95. package/dist/types/validator/validator.d.ts +18 -6
  96. package/dist/utils/accept.js +63 -0
  97. package/dist/utils/jwt/index.js +2 -2
  98. package/dist/utils/jwt/jwt.js +54 -2
  99. package/dist/utils/jwt/types.js +7 -0
  100. package/dist/utils/url.js +10 -25
  101. package/package.json +24 -3
@@ -3,10 +3,10 @@
3
3
  * Adapter Helper for Hono.
4
4
  */
5
5
  import type { Context } from '../../context';
6
- export type Runtime = 'node' | 'deno' | 'bun' | 'workerd' | 'fastly' | 'edge-light' | 'other';
6
+ export type Runtime = "node" | "deno" | "bun" | "workerd" | "fastly" | "edge-light" | "other";
7
7
  export declare const env: <T extends Record<string, unknown>, C extends Context = Context<{
8
8
  Bindings: T;
9
- }, any, {}>>(c: C, runtime?: Runtime) => T & C["env"];
9
+ }, any, {}>>(c: T extends Record<string, unknown> ? Context : C, runtime?: Runtime) => T & C["env"];
10
10
  export declare const knownUserAgents: Partial<Record<Runtime, string>>;
11
11
  export declare const getRuntimeKey: () => Runtime;
12
12
  export declare const checkUserAgentEquals: (platform: string) => boolean;
@@ -1,10 +1,10 @@
1
1
  import type { Context } from '../../context';
2
- export type AddressType = 'IPv6' | 'IPv4' | undefined;
2
+ export type AddressType = "IPv6" | "IPv4" | undefined;
3
3
  export type NetAddrInfo = {
4
4
  /**
5
5
  * Transport protocol type
6
6
  */
7
- transport?: 'tcp' | 'udp';
7
+ transport?: "tcp" | "udp";
8
8
  /**
9
9
  * Transport port number
10
10
  */
@@ -29,7 +29,12 @@ type CssVariableBasicType = CssClassName | CssEscapedString | string | number |
29
29
  type CssVariableAsyncType = Promise<CssVariableBasicType>;
30
30
  type CssVariableArrayType = (CssVariableBasicType | CssVariableAsyncType)[];
31
31
  export type CssVariableType = CssVariableBasicType | CssVariableAsyncType | CssVariableArrayType;
32
- export declare const buildStyleString: (strings: TemplateStringsArray, values: CssVariableType[]) => [string, string, CssClassName[], string[]];
32
+ export declare const buildStyleString: (strings: TemplateStringsArray, values: CssVariableType[]) => [
33
+ string,
34
+ string,
35
+ CssClassName[],
36
+ string[]
37
+ ];
33
38
  export declare const cssCommon: (strings: TemplateStringsArray, values: CssVariableType[]) => CssClassName;
34
39
  export declare const cxCommon: (args: (string | boolean | null | undefined | CssClassName)[]) => (string | boolean | null | undefined | CssClassName)[];
35
40
  export declare const keyframesCommon: (strings: TemplateStringsArray, ...values: CssVariableType[]) => CssClassName;
@@ -3,15 +3,101 @@
3
3
  * Factory Helper for Hono.
4
4
  */
5
5
  import { Hono } from '../../hono';
6
+ import type { HonoOptions } from '../../hono-base';
6
7
  import type { Env, H, HandlerResponse, Input, IntersectNonAnyTypes, MiddlewareHandler } from '../../types';
7
8
  type InitApp<E extends Env = Env> = (app: Hono<E>) => void;
8
9
  export interface CreateHandlersInterface<E extends Env, P extends string> {
9
- <I extends Input = {}, R extends HandlerResponse<any> = any, E2 extends Env = E>(handler1: H<E2, P, I, R>): [H<E2, P, I, R>];
10
- <I extends Input = {}, I2 extends Input = I, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>): [H<E2, P, I, R>, H<E3, P, I2, R>];
11
- <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>): [H<E2, P, I, R>, H<E3, P, I2, R>, H<E4, P, I3, R>];
12
- <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>): [H<E2, P, I, R>, H<E3, P, I2, R>, H<E4, P, I3, R>, H<E5, P, I4, 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, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>): [H<E2, P, I, R>, H<E3, P, I2, R>, H<E4, P, I3, R>, H<E5, P, I4, R>, H<E6, P, I5, R>];
14
- <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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>): [
10
+ <I extends Input = {}, R extends HandlerResponse<any> = any, E2 extends Env = E>(handler1: H<E2, P, I, R>): [
11
+ H<E2, P, I, R>
12
+ ];
13
+ <I extends Input = {}, I2 extends Input = I, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
14
+ E,
15
+ E2
16
+ ]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>): [
17
+ H<E2, P, I, R>,
18
+ H<E3, P, I2, R>
19
+ ];
20
+ <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
21
+ E,
22
+ E2
23
+ ]>, E4 extends Env = IntersectNonAnyTypes<[
24
+ E,
25
+ E2,
26
+ E3
27
+ ]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>): [
28
+ H<E2, P, I, R>,
29
+ H<E3, P, I2, R>,
30
+ H<E4, P, I3, R>
31
+ ];
32
+ <I extends Input = {}, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
33
+ E,
34
+ E2
35
+ ]>, E4 extends Env = IntersectNonAnyTypes<[
36
+ E,
37
+ E2,
38
+ E3
39
+ ]>, E5 extends Env = IntersectNonAnyTypes<[
40
+ E,
41
+ E2,
42
+ E3,
43
+ E4
44
+ ]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>): [
45
+ H<E2, P, I, R>,
46
+ H<E3, P, I2, R>,
47
+ H<E4, P, I3, R>,
48
+ H<E5, P, I4, R>
49
+ ];
50
+ <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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
51
+ E,
52
+ E2
53
+ ]>, E4 extends Env = IntersectNonAnyTypes<[
54
+ E,
55
+ E2,
56
+ E3
57
+ ]>, E5 extends Env = IntersectNonAnyTypes<[
58
+ E,
59
+ E2,
60
+ E3,
61
+ E4
62
+ ]>, E6 extends Env = IntersectNonAnyTypes<[
63
+ E,
64
+ E2,
65
+ E3,
66
+ E4,
67
+ E5
68
+ ]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>): [
69
+ H<E2, P, I, R>,
70
+ H<E3, P, I2, R>,
71
+ H<E4, P, I3, R>,
72
+ H<E5, P, I4, R>,
73
+ H<E6, P, I5, R>
74
+ ];
75
+ <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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
76
+ E,
77
+ E2
78
+ ]>, E4 extends Env = IntersectNonAnyTypes<[
79
+ E,
80
+ E2,
81
+ E3
82
+ ]>, E5 extends Env = IntersectNonAnyTypes<[
83
+ E,
84
+ E2,
85
+ E3,
86
+ E4
87
+ ]>, E6 extends Env = IntersectNonAnyTypes<[
88
+ E,
89
+ E2,
90
+ E3,
91
+ E4,
92
+ E5
93
+ ]>, E7 extends Env = IntersectNonAnyTypes<[
94
+ E,
95
+ E2,
96
+ E3,
97
+ E4,
98
+ E5,
99
+ E6
100
+ ]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>): [
15
101
  H<E2, P, I, R>,
16
102
  H<E3, P, I2, R>,
17
103
  H<E4, P, I3, R>,
@@ -19,7 +105,40 @@ export interface CreateHandlersInterface<E extends Env, P extends string> {
19
105
  H<E6, P, I5, R>,
20
106
  H<E7, P, I6, R>
21
107
  ];
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, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>, handler7: H<E8, P, I7, R>): [
108
+ <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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
109
+ E,
110
+ E2
111
+ ]>, E4 extends Env = IntersectNonAnyTypes<[
112
+ E,
113
+ E2,
114
+ E3
115
+ ]>, E5 extends Env = IntersectNonAnyTypes<[
116
+ E,
117
+ E2,
118
+ E3,
119
+ E4
120
+ ]>, E6 extends Env = IntersectNonAnyTypes<[
121
+ E,
122
+ E2,
123
+ E3,
124
+ E4,
125
+ E5
126
+ ]>, E7 extends Env = IntersectNonAnyTypes<[
127
+ E,
128
+ E2,
129
+ E3,
130
+ E4,
131
+ E5,
132
+ E6
133
+ ]>, E8 extends Env = IntersectNonAnyTypes<[
134
+ E,
135
+ E2,
136
+ E3,
137
+ E4,
138
+ E5,
139
+ E6,
140
+ E7
141
+ ]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>, handler7: H<E8, P, I7, R>): [
23
142
  H<E2, P, I, R>,
24
143
  H<E3, P, I2, R>,
25
144
  H<E4, P, I3, R>,
@@ -28,7 +147,49 @@ export interface CreateHandlersInterface<E extends Env, P extends string> {
28
147
  H<E7, P, I6, R>,
29
148
  H<E8, P, I7, R>
30
149
  ];
31
- <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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>, handler7: H<E8, P, I7, R>, handler8: H<E9, P, I8, R>): [
150
+ <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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
151
+ E,
152
+ E2
153
+ ]>, E4 extends Env = IntersectNonAnyTypes<[
154
+ E,
155
+ E2,
156
+ E3
157
+ ]>, E5 extends Env = IntersectNonAnyTypes<[
158
+ E,
159
+ E2,
160
+ E3,
161
+ E4
162
+ ]>, E6 extends Env = IntersectNonAnyTypes<[
163
+ E,
164
+ E2,
165
+ E3,
166
+ E4,
167
+ E5
168
+ ]>, E7 extends Env = IntersectNonAnyTypes<[
169
+ E,
170
+ E2,
171
+ E3,
172
+ E4,
173
+ E5,
174
+ E6
175
+ ]>, E8 extends Env = IntersectNonAnyTypes<[
176
+ E,
177
+ E2,
178
+ E3,
179
+ E4,
180
+ E5,
181
+ E6,
182
+ E7
183
+ ]>, E9 extends Env = IntersectNonAnyTypes<[
184
+ E,
185
+ E2,
186
+ E3,
187
+ E4,
188
+ E5,
189
+ E6,
190
+ E7,
191
+ E8
192
+ ]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>, handler7: H<E8, P, I7, R>, handler8: H<E9, P, I8, R>): [
32
193
  H<E2, P, I, R>,
33
194
  H<E3, P, I2, R>,
34
195
  H<E4, P, I3, R>,
@@ -38,7 +199,59 @@ export interface CreateHandlersInterface<E extends Env, P extends string> {
38
199
  H<E8, P, I7, R>,
39
200
  H<E9, P, I8, R>
40
201
  ];
41
- <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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>, handler7: H<E8, P, I7, R>, handler8: H<E9, P, I8, R>, handler9: H<E10, P, I9, R>): [
202
+ <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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
203
+ E,
204
+ E2
205
+ ]>, E4 extends Env = IntersectNonAnyTypes<[
206
+ E,
207
+ E2,
208
+ E3
209
+ ]>, E5 extends Env = IntersectNonAnyTypes<[
210
+ E,
211
+ E2,
212
+ E3,
213
+ E4
214
+ ]>, E6 extends Env = IntersectNonAnyTypes<[
215
+ E,
216
+ E2,
217
+ E3,
218
+ E4,
219
+ E5
220
+ ]>, E7 extends Env = IntersectNonAnyTypes<[
221
+ E,
222
+ E2,
223
+ E3,
224
+ E4,
225
+ E5,
226
+ E6
227
+ ]>, E8 extends Env = IntersectNonAnyTypes<[
228
+ E,
229
+ E2,
230
+ E3,
231
+ E4,
232
+ E5,
233
+ E6,
234
+ E7
235
+ ]>, E9 extends Env = IntersectNonAnyTypes<[
236
+ E,
237
+ E2,
238
+ E3,
239
+ E4,
240
+ E5,
241
+ E6,
242
+ E7,
243
+ E8
244
+ ]>, E10 extends Env = IntersectNonAnyTypes<[
245
+ E,
246
+ E2,
247
+ E3,
248
+ E4,
249
+ E5,
250
+ E6,
251
+ E7,
252
+ E8,
253
+ E9
254
+ ]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>, handler7: H<E8, P, I7, R>, handler8: H<E9, P, I8, R>, handler9: H<E10, P, I9, R>): [
42
255
  H<E2, P, I, R>,
43
256
  H<E3, P, I2, R>,
44
257
  H<E4, P, I3, R>,
@@ -49,7 +262,70 @@ export interface CreateHandlersInterface<E extends Env, P extends string> {
49
262
  H<E9, P, I8, R>,
50
263
  H<E10, P, I9, R>
51
264
  ];
52
- <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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>, handler7: H<E8, P, I7, R>, handler8: H<E9, P, I8, R>, handler9: H<E10, P, I9, R>, handler10: H<E11, P, I10, R>): [
265
+ <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, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[
266
+ E,
267
+ E2
268
+ ]>, E4 extends Env = IntersectNonAnyTypes<[
269
+ E,
270
+ E2,
271
+ E3
272
+ ]>, E5 extends Env = IntersectNonAnyTypes<[
273
+ E,
274
+ E2,
275
+ E3,
276
+ E4
277
+ ]>, E6 extends Env = IntersectNonAnyTypes<[
278
+ E,
279
+ E2,
280
+ E3,
281
+ E4,
282
+ E5
283
+ ]>, E7 extends Env = IntersectNonAnyTypes<[
284
+ E,
285
+ E2,
286
+ E3,
287
+ E4,
288
+ E5,
289
+ E6
290
+ ]>, E8 extends Env = IntersectNonAnyTypes<[
291
+ E,
292
+ E2,
293
+ E3,
294
+ E4,
295
+ E5,
296
+ E6,
297
+ E7
298
+ ]>, E9 extends Env = IntersectNonAnyTypes<[
299
+ E,
300
+ E2,
301
+ E3,
302
+ E4,
303
+ E5,
304
+ E6,
305
+ E7,
306
+ E8
307
+ ]>, E10 extends Env = IntersectNonAnyTypes<[
308
+ E,
309
+ E2,
310
+ E3,
311
+ E4,
312
+ E5,
313
+ E6,
314
+ E7,
315
+ E8,
316
+ E9
317
+ ]>, E11 extends Env = IntersectNonAnyTypes<[
318
+ E,
319
+ E2,
320
+ E3,
321
+ E4,
322
+ E5,
323
+ E6,
324
+ E7,
325
+ E8,
326
+ E9,
327
+ E10
328
+ ]>>(handler1: H<E2, P, I, R>, handler2: H<E3, P, I2, R>, handler3: H<E4, P, I3, R>, handler4: H<E5, P, I4, R>, handler5: H<E6, P, I5, R>, handler6: H<E7, P, I6, R>, handler7: H<E8, P, I7, R>, handler8: H<E9, P, I8, R>, handler9: H<E10, P, I9, R>, handler10: H<E11, P, I10, R>): [
53
329
  H<E2, P, I, R>,
54
330
  H<E3, P, I2, R>,
55
331
  H<E4, P, I3, R>,
@@ -63,16 +339,17 @@ export interface CreateHandlersInterface<E extends Env, P extends string> {
63
339
  ];
64
340
  }
65
341
  export declare class Factory<E extends Env = Env, P extends string = string> {
66
- private initApp?;
67
342
  constructor(init?: {
68
343
  initApp?: InitApp<E>;
344
+ defaultAppOptions?: HonoOptions<E>;
69
345
  });
70
- createApp: () => Hono<E>;
346
+ createApp: (options?: HonoOptions<E>) => Hono<E>;
71
347
  createMiddleware: <I extends Input = {}>(middleware: MiddlewareHandler<E, P, I>) => MiddlewareHandler<E, P, I>;
72
348
  createHandlers: CreateHandlersInterface<E, P>;
73
349
  }
74
350
  export declare const createFactory: <E extends Env = Env, P extends string = string>(init?: {
75
351
  initApp?: InitApp<E>;
352
+ defaultAppOptions?: HonoOptions<E>;
76
353
  }) => Factory<E, P>;
77
354
  export declare const createMiddleware: <E extends Env = any, P extends string = string, I extends Input = {}>(middleware: MiddlewareHandler<E, P, I>) => MiddlewareHandler<E, P, I>;
78
355
  export {};
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @module
3
+ * Proxy Helper for Hono.
4
+ */
5
+ import type { RequestHeader } from '../../utils/headers';
6
+ interface ProxyRequestInit extends Omit<RequestInit, "headers"> {
7
+ raw?: Request;
8
+ headers?: HeadersInit | [
9
+ string,
10
+ string
11
+ ][] | Record<RequestHeader, string | undefined> | Record<string, string | undefined>;
12
+ }
13
+ interface ProxyFetch {
14
+ (input: string | URL | Request, init?: ProxyRequestInit): Promise<Response>;
15
+ }
16
+ /**
17
+ * Fetch API wrapper for proxy.
18
+ * The parameters and return value are the same as for `fetch` (except for the proxy-specific options).
19
+ *
20
+ * The “Accept-Encoding” header is replaced with an encoding that the current runtime can handle.
21
+ * Unnecessary response headers are deleted and a Response object is returned that can be returned
22
+ * as is as a response from the handler.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * app.get('/proxy/:path', (c) => {
27
+ * return proxy(`http://${originServer}/${c.req.param('path')}`, {
28
+ * headers: {
29
+ * ...c.req.header(), // optional, specify only when forwarding all the request data (including credentials) is necessary.
30
+ * 'X-Forwarded-For': '127.0.0.1',
31
+ * 'X-Forwarded-Host': c.req.header('host'),
32
+ * Authorization: undefined, // do not propagate request headers contained in c.req.header('Authorization')
33
+ * },
34
+ * }).then((res) => {
35
+ * res.headers.delete('Set-Cookie')
36
+ * return res
37
+ * })
38
+ * })
39
+ *
40
+ * app.all('/proxy/:path', (c) => {
41
+ * return proxy(`http://${originServer}/${c.req.param('path')}`, {
42
+ * ...c.req, // optional, specify only when forwarding all the request data (including credentials) is necessary.
43
+ * headers: {
44
+ * ...c.req.header(),
45
+ * 'X-Forwarded-For': '127.0.0.1',
46
+ * 'X-Forwarded-Host': c.req.header('host'),
47
+ * Authorization: undefined, // do not propagate request headers contained in c.req.header('Authorization')
48
+ * },
49
+ * })
50
+ * })
51
+ * ```
52
+ */
53
+ export declare const proxy: ProxyFetch;
54
+ export {};
@@ -64,7 +64,7 @@ export interface ToSSGInterface {
64
64
  * `ToSSGAdaptorInterface` is an experimental feature.
65
65
  * The API might be changed.
66
66
  */
67
- export interface ToSSGAdaptorInterface<E extends Env = Env, S extends Schema = {}, BasePath extends string = '/'> {
67
+ export interface ToSSGAdaptorInterface<E extends Env = Env, S extends Schema = {}, BasePath extends string = "/"> {
68
68
  (app: Hono<E, S, BasePath>, options?: ToSSGOptions): Promise<ToSSGResult>;
69
69
  }
70
70
  /**
@@ -17,7 +17,7 @@ export interface WSEvents<T = unknown> {
17
17
  * Upgrade WebSocket Type
18
18
  */
19
19
  export type UpgradeWebSocket<T = unknown, U = any, _WSEvents = WSEvents<T>> = (createEvents: (c: Context) => _WSEvents | Promise<_WSEvents>, options?: U) => MiddlewareHandler<any, string, {
20
- outputFormat: 'ws';
20
+ outputFormat: "ws";
21
21
  }>;
22
22
  /**
23
23
  * ReadyState for WebSocket
@@ -44,7 +44,6 @@ export interface SendOptions {
44
44
  * A context for controlling WebSockets
45
45
  */
46
46
  export declare class WSContext<T = unknown> {
47
- #private;
48
47
  constructor(init: WSContextInit<T>);
49
48
  send(source: string | ArrayBuffer | Uint8Array, options?: SendOptions): void;
50
49
  raw?: T;
@@ -7,7 +7,7 @@ import type { ExecutionContext } from './context';
7
7
  import type { Router } from './router';
8
8
  import type { Env, ErrorHandler, H, HandlerInterface, MergePath, MergeSchemaPath, MiddlewareHandlerInterface, NotFoundHandler, OnHandlerInterface, RouterRoute, Schema } from './types';
9
9
  type GetPath<E extends Env> = (request: Request, options?: {
10
- env?: E['Bindings'];
10
+ env?: E["Bindings"];
11
11
  }) => string;
12
12
  export type HonoOptions<E extends Env> = {
13
13
  /**
@@ -28,7 +28,10 @@ export type HonoOptions<E extends Env> = {
28
28
  * const app = new Hono({ router: new RegExpRouter() })
29
29
  * ```
30
30
  */
31
- router?: Router<[H, RouterRoute]>;
31
+ router?: Router<[
32
+ H,
33
+ RouterRoute
34
+ ]>;
32
35
  /**
33
36
  * `getPath` can handle the host header value.
34
37
  *
@@ -57,23 +60,23 @@ type MountOptions = MountOptionHandler | {
57
60
  optionHandler?: MountOptionHandler;
58
61
  replaceRequest?: MountReplaceRequest;
59
62
  };
60
- declare class Hono<E extends Env = Env, S extends Schema = {}, BasePath extends string = '/'> {
61
- #private;
62
- get: HandlerInterface<E, 'get', S, BasePath>;
63
- post: HandlerInterface<E, 'post', S, BasePath>;
64
- put: HandlerInterface<E, 'put', S, BasePath>;
65
- delete: HandlerInterface<E, 'delete', S, BasePath>;
66
- options: HandlerInterface<E, 'options', S, BasePath>;
67
- patch: HandlerInterface<E, 'patch', S, BasePath>;
68
- all: HandlerInterface<E, 'all', S, BasePath>;
63
+ declare class Hono<E extends Env = Env, S extends Schema = {}, BasePath extends string = "/"> {
64
+ get: HandlerInterface<E, "get", S, BasePath>;
65
+ post: HandlerInterface<E, "post", S, BasePath>;
66
+ put: HandlerInterface<E, "put", S, BasePath>;
67
+ delete: HandlerInterface<E, "delete", S, BasePath>;
68
+ options: HandlerInterface<E, "options", S, BasePath>;
69
+ patch: HandlerInterface<E, "patch", S, BasePath>;
70
+ all: HandlerInterface<E, "all", S, BasePath>;
69
71
  on: OnHandlerInterface<E, S, BasePath>;
70
72
  use: MiddlewareHandlerInterface<E, S, BasePath>;
71
- router: Router<[H, RouterRoute]>;
73
+ router: Router<[
74
+ H,
75
+ RouterRoute
76
+ ]>;
72
77
  readonly getPath: GetPath<E>;
73
- private _basePath;
74
78
  routes: RouterRoute[];
75
79
  constructor(options?: HonoOptions<E>);
76
- private errorHandler;
77
80
  /**
78
81
  * `.route()` allows grouping other Hono instance in routes.
79
82
  *
@@ -184,7 +187,7 @@ declare class Hono<E extends Env = Env, S extends Schema = {}, BasePath extends
184
187
  * @returns {Response | Promise<Response>} response of request
185
188
  *
186
189
  */
187
- fetch: (request: Request, Env?: E['Bindings'] | {}, executionCtx?: ExecutionContext) => Response | Promise<Response>;
190
+ fetch: (request: Request, Env?: E["Bindings"] | {}, executionCtx?: ExecutionContext) => Response | Promise<Response>;
188
191
  /**
189
192
  * `.request()` is a useful method for testing.
190
193
  * You can pass a URL or pathname to send a GET request.
@@ -9,7 +9,7 @@ import type { BlankEnv, BlankSchema, Env, Schema } from './types';
9
9
  * @template S - The schema type.
10
10
  * @template BasePath - The base path type.
11
11
  */
12
- export declare class Hono<E extends Env = BlankEnv, S extends Schema = BlankSchema, BasePath extends string = '/'> extends HonoBase<E, S, BasePath> {
12
+ export declare class Hono<E extends Env = BlankEnv, S extends Schema = BlankSchema, BasePath extends string = "/"> extends HonoBase<E, S, BasePath> {
13
13
  /**
14
14
  * Creates an instance of the Hono class.
15
15
  *
@@ -23,7 +23,10 @@ export declare namespace JSX {
23
23
  }
24
24
  export declare const getNameSpaceContext: () => Context<string> | undefined;
25
25
  export declare const booleanAttributes: string[];
26
- type LocalContexts = [Context<unknown>, unknown][];
26
+ type LocalContexts = [
27
+ Context<unknown>,
28
+ unknown
29
+ ][];
27
30
  export type Child = string | Promise<string> | number | JSXNode | null | undefined | boolean | Child[];
28
31
  export declare class JSXNode implements HtmlEscaped {
29
32
  tag: string | Function;
@@ -10,7 +10,7 @@ type FormStatus = {
10
10
  } | {
11
11
  pending: true;
12
12
  data: FormData;
13
- method: 'get' | 'post';
13
+ method: "get" | "post";
14
14
  action: string | ((formData: FormData) => void | Promise<void>);
15
15
  };
16
16
  export declare const FormContext: Context<FormStatus>;
@@ -27,7 +27,10 @@ export declare const useFormStatus: () => FormStatus;
27
27
  * @param updateState
28
28
  * @returns [T, (action: N) => void]
29
29
  */
30
- export declare const useOptimistic: <T, N>(state: T, updateState: (currentState: T, action: N) => T) => [T, (action: N) => void];
30
+ export declare const useOptimistic: <T, N>(state: T, updateState: (currentState: T, action: N) => T) => [
31
+ T,
32
+ (action: N) => void
33
+ ];
31
34
  /**
32
35
  * This hook returns the current state and a function to update the state by form action
33
36
  * @param fn
@@ -35,5 +38,8 @@ export declare const useOptimistic: <T, N>(state: T, updateState: (currentState:
35
38
  * @param permalink
36
39
  * @returns [T, (data: FormData) => void]
37
40
  */
38
- export declare const useActionState: <T>(fn: Function, initialState: T, permalink?: string) => [T, Function];
41
+ export declare const useActionState: <T>(fn: Function, initialState: T, permalink?: string) => [
42
+ T,
43
+ Function
44
+ ];
39
45
  export {};
@@ -20,22 +20,37 @@ export { reactAPICompatVersion as version, createElement as jsx, useState, useEf
20
20
  declare const _default: {
21
21
  version: string;
22
22
  useState: {
23
- <T>(initialState: T | (() => T)): [T, (newState: T | ((currentState: T) => T)) => void];
24
- <T = undefined>(): [T | undefined, (newState: T | ((currentState: T | undefined) => T | undefined) | undefined) => void];
23
+ <T>(initialState: T | (() => T)): [
24
+ T,
25
+ (newState: T | ((currentState: T) => T)) => void
26
+ ];
27
+ <T = undefined>(): [
28
+ T | undefined,
29
+ (newState: T | ((currentState: T | undefined) => T | undefined) | undefined) => void
30
+ ];
25
31
  };
26
32
  useEffect: (effect: () => void | (() => void), deps?: readonly unknown[]) => void;
27
33
  useRef: <T>(initialValue: T | null) => import("..").RefObject<T>;
28
34
  useCallback: <T extends Function>(callback: T, deps: readonly unknown[]) => T;
29
35
  use: <T>(promise: Promise<T>) => T;
30
36
  startTransition: (callback: () => void) => void;
31
- useTransition: () => [boolean, (callback: () => void | Promise<void>) => void];
37
+ useTransition: () => [
38
+ boolean,
39
+ (callback: () => void | Promise<void>) => void
40
+ ];
32
41
  useDeferredValue: <T>(value: T, initialValue?: T) => T;
33
42
  startViewTransition: (callback: () => void) => void;
34
- useViewTransition: () => [boolean, (callback: () => void) => void];
43
+ useViewTransition: () => [
44
+ boolean,
45
+ (callback: () => void) => void
46
+ ];
35
47
  useMemo: <T>(factory: () => T, deps: readonly unknown[]) => T;
36
48
  useLayoutEffect: (effect: () => void | (() => void), deps?: readonly unknown[]) => void;
37
49
  useInsertionEffect: (effect: () => void | (() => void), deps?: readonly unknown[]) => void;
38
- useReducer: <T, A>(reducer: (state: T, action: A) => T, initialArg: T, init?: (initialState: T) => T) => [T, (action: A) => void];
50
+ useReducer: <T, A>(reducer: (state: T, action: A) => T, initialArg: T, init?: (initialState: T) => T) => [
51
+ T,
52
+ (action: A) => void
53
+ ];
39
54
  useId: () => string;
40
55
  useDebugValue: (_value: unknown, _formatter?: (value: unknown) => string) => void;
41
56
  createRef: <T>() => import("..").RefObject<T>;
@@ -55,8 +70,14 @@ declare const _default: {
55
70
  method: "get" | "post";
56
71
  action: string | ((formData: FormData) => void | Promise<void>);
57
72
  };
58
- useActionState: <T>(fn: Function, initialState: T, permalink?: string) => [T, Function];
59
- useOptimistic: <T, N>(state: T, updateState: (currentState: T, action: N) => T) => [T, (action: N) => void];
73
+ useActionState: <T>(fn: Function, initialState: T, permalink?: string) => [
74
+ T,
75
+ Function
76
+ ];
77
+ useOptimistic: <T, N>(state: T, updateState: (currentState: T, action: N) => T) => [
78
+ T,
79
+ (action: N) => void
80
+ ];
60
81
  Suspense: FC<import("..").PropsWithChildren<{
61
82
  fallback: any;
62
83
  }>>;