hono 4.7.10 → 4.8.0

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 (69) hide show
  1. package/README.md +1 -0
  2. package/dist/adapter/cloudflare-pages/handler.js +2 -1
  3. package/dist/adapter/service-worker/index.js +6 -0
  4. package/dist/cjs/adapter/cloudflare-pages/handler.js +2 -1
  5. package/dist/cjs/adapter/service-worker/index.js +7 -0
  6. package/dist/cjs/context.js +48 -116
  7. package/dist/cjs/helper/route/index.js +69 -0
  8. package/dist/cjs/helper/ssg/ssg.js +47 -8
  9. package/dist/cjs/helper/testing/index.js +2 -2
  10. package/dist/cjs/hono-base.js +3 -2
  11. package/dist/cjs/jsx/components.js +4 -1
  12. package/dist/cjs/jsx/streaming.js +6 -1
  13. package/dist/cjs/middleware/cache/index.js +5 -1
  14. package/dist/cjs/middleware/cors/index.js +12 -2
  15. package/dist/cjs/middleware/etag/index.js +2 -1
  16. package/dist/cjs/middleware/jwk/jwk.js +6 -1
  17. package/dist/cjs/middleware/jwt/jwt.js +2 -1
  18. package/dist/cjs/middleware/logger/index.js +6 -6
  19. package/dist/cjs/request/constants.js +28 -0
  20. package/dist/cjs/request.js +4 -0
  21. package/dist/cjs/router/trie-router/node.js +11 -13
  22. package/dist/cjs/utils/body.js +5 -1
  23. package/dist/cjs/utils/color.js +15 -2
  24. package/dist/cjs/utils/jwt/jwt.js +5 -6
  25. package/dist/cjs/utils/mime.js +1 -0
  26. package/dist/cjs/utils/url.js +5 -2
  27. package/dist/context.js +48 -116
  28. package/dist/helper/route/index.js +43 -0
  29. package/dist/helper/ssg/ssg.js +46 -8
  30. package/dist/helper/testing/index.js +2 -2
  31. package/dist/hono-base.js +3 -2
  32. package/dist/jsx/components.js +4 -1
  33. package/dist/jsx/streaming.js +5 -1
  34. package/dist/middleware/cache/index.js +5 -1
  35. package/dist/middleware/cors/index.js +12 -2
  36. package/dist/middleware/etag/index.js +2 -1
  37. package/dist/middleware/jwk/jwk.js +6 -1
  38. package/dist/middleware/jwt/jwt.js +2 -1
  39. package/dist/middleware/logger/index.js +7 -7
  40. package/dist/request/constants.js +5 -0
  41. package/dist/request.js +4 -0
  42. package/dist/router/trie-router/node.js +11 -13
  43. package/dist/types/adapter/cloudflare-pages/handler.d.ts +1 -0
  44. package/dist/types/adapter/service-worker/handler.d.ts +4 -3
  45. package/dist/types/adapter/service-worker/index.d.ts +23 -1
  46. package/dist/types/context.d.ts +5 -1
  47. package/dist/types/helper/adapter/index.d.ts +1 -1
  48. package/dist/types/helper/route/index.d.ts +67 -0
  49. package/dist/types/helper/ssg/ssg.d.ts +9 -2
  50. package/dist/types/helper/testing/index.d.ts +2 -2
  51. package/dist/types/hono-base.d.ts +10 -0
  52. package/dist/types/jsx/streaming.d.ts +16 -1
  53. package/dist/types/middleware/cache/index.d.ts +3 -0
  54. package/dist/types/middleware/cors/index.d.ts +2 -2
  55. package/dist/types/middleware/jwk/jwk.d.ts +10 -7
  56. package/dist/types/middleware/jwt/jwt.d.ts +3 -0
  57. package/dist/types/request/constants.d.ts +1 -0
  58. package/dist/types/request.d.ts +8 -0
  59. package/dist/types/types.d.ts +1 -0
  60. package/dist/types/utils/color.d.ts +9 -0
  61. package/dist/types/utils/jwt/index.d.ts +1 -1
  62. package/dist/types/utils/jwt/jwt.d.ts +1 -1
  63. package/dist/types/utils/mime.d.ts +1 -0
  64. package/dist/utils/body.js +5 -1
  65. package/dist/utils/color.js +7 -1
  66. package/dist/utils/jwt/jwt.js +5 -6
  67. package/dist/utils/mime.js +1 -0
  68. package/dist/utils/url.js +5 -2
  69. package/package.json +10 -1
@@ -10,7 +10,7 @@ export declare const Jwt: {
10
10
  payload: import("./types").JWTPayload;
11
11
  };
12
12
  verifyFromJwks: (token: string, options: {
13
- keys?: import("./jws").HonoJsonWebKey[] | (() => Promise<import("./jws").HonoJsonWebKey[]>);
13
+ keys?: import("./jws").HonoJsonWebKey[];
14
14
  jwks_uri?: string;
15
15
  }, init?: RequestInit) => Promise<import("./types").JWTPayload>;
16
16
  };
@@ -15,7 +15,7 @@ export declare function isTokenHeader(obj: unknown): obj is TokenHeader;
15
15
  export declare const sign: (payload: JWTPayload, privateKey: SignatureKey, alg?: SignatureAlgorithm) => Promise<string>;
16
16
  export declare const verify: (token: string, publicKey: SignatureKey, alg?: SignatureAlgorithm) => Promise<JWTPayload>;
17
17
  export declare const verifyFromJwks: (token: string, options: {
18
- keys?: HonoJsonWebKey[] | (() => Promise<HonoJsonWebKey[]>);
18
+ keys?: HonoJsonWebKey[];
19
19
  jwks_uri?: string;
20
20
  }, init?: RequestInit) => Promise<JWTPayload>;
21
21
  export declare const decode: (token: string) => {
@@ -55,6 +55,7 @@ declare const _baseMimes: {
55
55
  readonly wasm: "application/wasm";
56
56
  readonly webm: "video/webm";
57
57
  readonly weba: "audio/webm";
58
+ readonly webmanifest: "application/manifest+json";
58
59
  readonly webp: "image/webp";
59
60
  readonly woff: "font/woff";
60
61
  readonly woff2: "font/woff2";
@@ -46,7 +46,11 @@ var handleParsingAllValues = (form, key, value) => {
46
46
  form[key] = [form[key], value];
47
47
  }
48
48
  } else {
49
- form[key] = value;
49
+ if (!key.endsWith("[]")) {
50
+ form[key] = value;
51
+ } else {
52
+ form[key] = [value];
53
+ }
50
54
  }
51
55
  };
52
56
  var handleParsingNestedValues = (form, key, value) => {
@@ -4,6 +4,12 @@ function getColorEnabled() {
4
4
  const isNoColor = typeof Deno?.noColor === "boolean" ? Deno.noColor : process !== void 0 ? "NO_COLOR" in process?.env : false;
5
5
  return !isNoColor;
6
6
  }
7
+ async function getColorEnabledAsync() {
8
+ const { navigator } = globalThis;
9
+ const isNoColor = navigator !== void 0 && navigator.userAgent === "Cloudflare-Workers" ? "NO_COLOR" in ((await import("cloudflare:workers")).env ?? {}) : !getColorEnabled();
10
+ return !isNoColor;
11
+ }
7
12
  export {
8
- getColorEnabled
13
+ getColorEnabled,
14
+ getColorEnabledAsync
9
15
  };
@@ -75,7 +75,6 @@ var verifyFromJwks = async (token, options, init) => {
75
75
  if (!header.kid) {
76
76
  throw new JwtHeaderRequiresKid(header);
77
77
  }
78
- let keys = typeof options.keys === "function" ? await options.keys() : options.keys;
79
78
  if (options.jwks_uri) {
80
79
  const response = await fetch(options.jwks_uri, init);
81
80
  if (!response.ok) {
@@ -88,15 +87,15 @@ var verifyFromJwks = async (token, options, init) => {
88
87
  if (!Array.isArray(data.keys)) {
89
88
  throw new Error('invalid JWKS response. "keys" field is not an array');
90
89
  }
91
- if (keys) {
92
- keys.push(...data.keys);
90
+ if (options.keys) {
91
+ options.keys.push(...data.keys);
93
92
  } else {
94
- keys = data.keys;
93
+ options.keys = data.keys;
95
94
  }
96
- } else if (!keys) {
95
+ } else if (!options.keys) {
97
96
  throw new Error('verifyFromJwks requires options for either "keys" or "jwks_uri" or both');
98
97
  }
99
- const matchingKey = keys.find((key) => key.kid === header.kid);
98
+ const matchingKey = options.keys.find((key) => key.kid === header.kid);
100
99
  if (!matchingKey) {
101
100
  throw new JwtTokenInvalid(token);
102
101
  }
@@ -64,6 +64,7 @@ var _baseMimes = {
64
64
  wasm: "application/wasm",
65
65
  webm: "video/webm",
66
66
  weba: "audio/webm",
67
+ webmanifest: "application/manifest+json",
67
68
  webp: "image/webp",
68
69
  woff: "font/woff",
69
70
  woff2: "font/woff2",
package/dist/utils/url.js CHANGED
@@ -67,7 +67,10 @@ var tryDecode = (str, decoder) => {
67
67
  var tryDecodeURI = (str) => tryDecode(str, decodeURI);
68
68
  var getPath = (request) => {
69
69
  const url = request.url;
70
- const start = url.indexOf("/", 8);
70
+ const start = url.indexOf(
71
+ "/",
72
+ url.charCodeAt(9) === 58 ? 13 : 8
73
+ );
71
74
  let i = start;
72
75
  for (; i < url.length; i++) {
73
76
  const charCode = url.charCodeAt(i);
@@ -129,7 +132,7 @@ var _decodeURI = (value) => {
129
132
  if (value.indexOf("+") !== -1) {
130
133
  value = value.replace(/\+/g, " ");
131
134
  }
132
- return value.indexOf("%") !== -1 ? decodeURIComponent_(value) : value;
135
+ return value.indexOf("%") !== -1 ? tryDecode(value, decodeURIComponent_) : value;
133
136
  };
134
137
  var _getQueryParam = (url, key, multiple) => {
135
138
  let encoded;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hono",
3
- "version": "4.7.10",
3
+ "version": "4.8.0",
4
4
  "description": "Web framework built on Web Standards",
5
5
  "main": "dist/cjs/index.js",
6
6
  "type": "module",
@@ -94,6 +94,11 @@
94
94
  "import": "./dist/middleware/cache/index.js",
95
95
  "require": "./dist/cjs/middleware/cache/index.js"
96
96
  },
97
+ "./route": {
98
+ "types": "./dist/types/helper/route/index.d.ts",
99
+ "import": "./dist/helper/route/index.js",
100
+ "require": "./dist/cjs/helper/route/index.js"
101
+ },
97
102
  "./cookie": {
98
103
  "types": "./dist/types/helper/cookie/index.d.ts",
99
104
  "import": "./dist/helper/cookie/index.js",
@@ -440,6 +445,9 @@
440
445
  "cache": [
441
446
  "./dist/types/middleware/cache"
442
447
  ],
448
+ "route": [
449
+ "./dist/types/helper/route"
450
+ ],
443
451
  "cookie": [
444
452
  "./dist/types/helper/cookie"
445
453
  ],
@@ -653,6 +661,7 @@
653
661
  "@types/jsdom": "^21.1.7",
654
662
  "@types/node": "20.11.4",
655
663
  "@types/supertest": "^2.0.16",
664
+ "@typescript/native-preview": "7.0.0-dev.20250523.1",
656
665
  "@vitest/coverage-v8": "^3.0.5",
657
666
  "arg": "^5.0.2",
658
667
  "bun-types": "^1.1.39",