hono 4.7.6 → 4.7.7

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.
@@ -84,30 +84,19 @@ class Context {
84
84
  set res(_res) {
85
85
  this.#isFresh = false;
86
86
  if (this.#res && _res) {
87
- try {
88
- for (const [k, v] of this.#res.headers.entries()) {
89
- if (k === "content-type") {
90
- continue;
91
- }
92
- if (k === "set-cookie") {
93
- const cookies = this.#res.headers.getSetCookie();
94
- _res.headers.delete("set-cookie");
95
- for (const cookie of cookies) {
96
- _res.headers.append("set-cookie", cookie);
97
- }
98
- } else {
99
- _res.headers.set(k, v);
100
- }
87
+ _res = new Response(_res.body, _res);
88
+ for (const [k, v] of this.#res.headers.entries()) {
89
+ if (k === "content-type") {
90
+ continue;
101
91
  }
102
- } catch (e) {
103
- if (e instanceof TypeError && e.message.includes("immutable")) {
104
- this.res = new Response(_res.body, {
105
- headers: _res.headers,
106
- status: _res.status
107
- });
108
- return;
92
+ if (k === "set-cookie") {
93
+ const cookies = this.#res.headers.getSetCookie();
94
+ _res.headers.delete("set-cookie");
95
+ for (const cookie of cookies) {
96
+ _res.headers.append("set-cookie", cookie);
97
+ }
109
98
  } else {
110
- throw e;
99
+ _res.headers.set(k, v);
111
100
  }
112
101
  }
113
102
  }
@@ -124,6 +113,9 @@ class Context {
124
113
  this.#renderer = renderer;
125
114
  };
126
115
  header = (name, value, options) => {
116
+ if (this.finalized) {
117
+ this.#res = new Response(this.#res.body, this.#res);
118
+ }
127
119
  if (value === void 0) {
128
120
  if (this.#headers) {
129
121
  this.#headers.delete(name);
@@ -62,7 +62,7 @@ const preprocessRequestInit = (requestInit) => {
62
62
  return requestInit;
63
63
  };
64
64
  const proxy = async (input, proxyInit) => {
65
- const { raw, ...requestInit } = proxyInit ?? {};
65
+ const { raw, ...requestInit } = proxyInit instanceof Request ? { raw: proxyInit } : proxyInit ?? {};
66
66
  const req = new Request(input, {
67
67
  ...buildRequestInitFromRequest(raw),
68
68
  ...preprocessRequestInit(requestInit)
@@ -25,7 +25,7 @@ module.exports = __toCommonJS(trailing_slash_exports);
25
25
  const trimTrailingSlash = () => {
26
26
  return async function trimTrailingSlash2(c, next) {
27
27
  await next();
28
- if (c.res.status === 404 && c.req.method === "GET" && c.req.path !== "/" && c.req.path.at(-1) === "/") {
28
+ if (c.res.status === 404 && (c.req.method === "GET" || c.req.method === "HEAD") && c.req.path !== "/" && c.req.path.at(-1) === "/") {
29
29
  const url = new URL(c.req.url);
30
30
  url.pathname = url.pathname.substring(0, url.pathname.length - 1);
31
31
  c.res = c.redirect(url.toString(), 301);
@@ -35,7 +35,7 @@ const trimTrailingSlash = () => {
35
35
  const appendTrailingSlash = () => {
36
36
  return async function appendTrailingSlash2(c, next) {
37
37
  await next();
38
- if (c.res.status === 404 && c.req.method === "GET" && c.req.path.at(-1) !== "/") {
38
+ if (c.res.status === 404 && (c.req.method === "GET" || c.req.method === "HEAD") && c.req.path.at(-1) !== "/") {
39
39
  const url = new URL(c.req.url);
40
40
  url.pathname += "/";
41
41
  c.res = c.redirect(url.toString(), 301);
package/dist/context.js CHANGED
@@ -61,30 +61,19 @@ var Context = class {
61
61
  set res(_res) {
62
62
  this.#isFresh = false;
63
63
  if (this.#res && _res) {
64
- try {
65
- for (const [k, v] of this.#res.headers.entries()) {
66
- if (k === "content-type") {
67
- continue;
68
- }
69
- if (k === "set-cookie") {
70
- const cookies = this.#res.headers.getSetCookie();
71
- _res.headers.delete("set-cookie");
72
- for (const cookie of cookies) {
73
- _res.headers.append("set-cookie", cookie);
74
- }
75
- } else {
76
- _res.headers.set(k, v);
77
- }
64
+ _res = new Response(_res.body, _res);
65
+ for (const [k, v] of this.#res.headers.entries()) {
66
+ if (k === "content-type") {
67
+ continue;
78
68
  }
79
- } catch (e) {
80
- if (e instanceof TypeError && e.message.includes("immutable")) {
81
- this.res = new Response(_res.body, {
82
- headers: _res.headers,
83
- status: _res.status
84
- });
85
- return;
69
+ if (k === "set-cookie") {
70
+ const cookies = this.#res.headers.getSetCookie();
71
+ _res.headers.delete("set-cookie");
72
+ for (const cookie of cookies) {
73
+ _res.headers.append("set-cookie", cookie);
74
+ }
86
75
  } else {
87
- throw e;
76
+ _res.headers.set(k, v);
88
77
  }
89
78
  }
90
79
  }
@@ -101,6 +90,9 @@ var Context = class {
101
90
  this.#renderer = renderer;
102
91
  };
103
92
  header = (name, value, options) => {
93
+ if (this.finalized) {
94
+ this.#res = new Response(this.#res.body, this.#res);
95
+ }
104
96
  if (value === void 0) {
105
97
  if (this.#headers) {
106
98
  this.#headers.delete(name);
@@ -40,7 +40,7 @@ var preprocessRequestInit = (requestInit) => {
40
40
  return requestInit;
41
41
  };
42
42
  var proxy = async (input, proxyInit) => {
43
- const { raw, ...requestInit } = proxyInit ?? {};
43
+ const { raw, ...requestInit } = proxyInit instanceof Request ? { raw: proxyInit } : proxyInit ?? {};
44
44
  const req = new Request(input, {
45
45
  ...buildRequestInitFromRequest(raw),
46
46
  ...preprocessRequestInit(requestInit)
@@ -2,7 +2,7 @@
2
2
  var trimTrailingSlash = () => {
3
3
  return async function trimTrailingSlash2(c, next) {
4
4
  await next();
5
- if (c.res.status === 404 && c.req.method === "GET" && c.req.path !== "/" && c.req.path.at(-1) === "/") {
5
+ if (c.res.status === 404 && (c.req.method === "GET" || c.req.method === "HEAD") && c.req.path !== "/" && c.req.path.at(-1) === "/") {
6
6
  const url = new URL(c.req.url);
7
7
  url.pathname = url.pathname.substring(0, url.pathname.length - 1);
8
8
  c.res = c.redirect(url.toString(), 301);
@@ -12,7 +12,7 @@ var trimTrailingSlash = () => {
12
12
  var appendTrailingSlash = () => {
13
13
  return async function appendTrailingSlash2(c, next) {
14
14
  await next();
15
- if (c.res.status === 404 && c.req.method === "GET" && c.req.path.at(-1) !== "/") {
15
+ if (c.res.status === 404 && (c.req.method === "GET" || c.req.method === "HEAD") && c.req.path.at(-1) !== "/") {
16
16
  const url = new URL(c.req.url);
17
17
  url.pathname += "/";
18
18
  c.res = c.redirect(url.toString(), 301);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hono",
3
- "version": "4.7.6",
3
+ "version": "4.7.7",
4
4
  "description": "Web framework built on Web Standards",
5
5
  "main": "dist/cjs/index.js",
6
6
  "type": "module",