hono 4.6.2 → 4.6.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.
- package/dist/adapter/bun/serve-static.js +2 -2
- package/dist/adapter/deno/serve-static.js +1 -1
- package/dist/cjs/adapter/bun/serve-static.js +2 -2
- package/dist/cjs/adapter/deno/serve-static.js +1 -1
- package/dist/cjs/jsx/base.js +2 -0
- package/dist/cjs/jsx/jsx-runtime.js +28 -1
- package/dist/cjs/jsx/streaming.js +7 -4
- package/dist/cjs/middleware/combine/index.js +1 -0
- package/dist/cjs/middleware/secure-headers/secure-headers.js +8 -1
- package/dist/cjs/middleware/serve-static/index.js +13 -1
- package/dist/cjs/utils/filepath.js +3 -0
- package/dist/jsx/base.js +1 -0
- package/dist/jsx/jsx-runtime.js +28 -1
- package/dist/jsx/streaming.js +7 -4
- package/dist/middleware/combine/index.js +1 -0
- package/dist/middleware/secure-headers/secure-headers.js +8 -1
- package/dist/middleware/serve-static/index.js +13 -1
- package/dist/types/jsx/base.d.ts +1 -0
- package/dist/types/jsx/dom/index.d.ts +1 -1
- package/dist/types/jsx/dom/server.d.ts +1 -1
- package/dist/types/jsx/hooks/index.d.ts +1 -1
- package/dist/types/jsx/index.d.ts +1 -1
- package/dist/types/jsx/jsx-runtime.d.ts +1 -1
- package/dist/types/jsx/streaming.d.ts +2 -1
- package/dist/types/middleware/jwt/jwt.d.ts +2 -2
- package/dist/types/middleware/secure-headers/secure-headers.d.ts +2 -0
- package/dist/types/types.d.ts +23 -23
- package/dist/types/utils/types.d.ts +3 -1
- package/dist/utils/filepath.js +3 -0
- package/package.json +12 -12
- package/perf-measures/type-check/generated/.gitkeep +0 -0
|
@@ -4,12 +4,12 @@ import { serveStatic as baseServeStatic } from "../../middleware/serve-static/in
|
|
|
4
4
|
var serveStatic = (options) => {
|
|
5
5
|
return async function serveStatic2(c, next) {
|
|
6
6
|
const getContent = async (path) => {
|
|
7
|
-
path = `./${path}`;
|
|
7
|
+
path = path.startsWith("/") ? path : `./${path}`;
|
|
8
8
|
const file = Bun.file(path);
|
|
9
9
|
return await file.exists() ? file : null;
|
|
10
10
|
};
|
|
11
11
|
const pathResolve = (path) => {
|
|
12
|
-
return `./${path}`;
|
|
12
|
+
return path.startsWith("/") ? path : `./${path}`;
|
|
13
13
|
};
|
|
14
14
|
const isDir = async (path) => {
|
|
15
15
|
let isDir2;
|
|
@@ -26,12 +26,12 @@ var import_serve_static = require("../../middleware/serve-static");
|
|
|
26
26
|
const serveStatic = (options) => {
|
|
27
27
|
return async function serveStatic2(c, next) {
|
|
28
28
|
const getContent = async (path) => {
|
|
29
|
-
path = `./${path}`;
|
|
29
|
+
path = path.startsWith("/") ? path : `./${path}`;
|
|
30
30
|
const file = Bun.file(path);
|
|
31
31
|
return await file.exists() ? file : null;
|
|
32
32
|
};
|
|
33
33
|
const pathResolve = (path) => {
|
|
34
|
-
return `./${path}`;
|
|
34
|
+
return path.startsWith("/") ? path : `./${path}`;
|
|
35
35
|
};
|
|
36
36
|
const isDir = async (path) => {
|
|
37
37
|
let isDir2;
|
package/dist/cjs/jsx/base.js
CHANGED
|
@@ -27,6 +27,7 @@ __export(base_exports, {
|
|
|
27
27
|
Fragment: () => Fragment,
|
|
28
28
|
JSXFragmentNode: () => JSXFragmentNode,
|
|
29
29
|
JSXNode: () => JSXNode,
|
|
30
|
+
booleanAttributes: () => booleanAttributes,
|
|
30
31
|
cloneElement: () => cloneElement,
|
|
31
32
|
getNameSpaceContext: () => getNameSpaceContext,
|
|
32
33
|
isValidElement: () => isValidElement,
|
|
@@ -342,6 +343,7 @@ const reactAPICompatVersion = "19.0.0-hono-jsx";
|
|
|
342
343
|
Fragment,
|
|
343
344
|
JSXFragmentNode,
|
|
344
345
|
JSXNode,
|
|
346
|
+
booleanAttributes,
|
|
345
347
|
cloneElement,
|
|
346
348
|
getNameSpaceContext,
|
|
347
349
|
isValidElement,
|
|
@@ -29,7 +29,34 @@ module.exports = __toCommonJS(jsx_runtime_exports);
|
|
|
29
29
|
var import_jsx_dev_runtime = require("./jsx-dev-runtime");
|
|
30
30
|
var import_jsx_dev_runtime2 = require("./jsx-dev-runtime");
|
|
31
31
|
var import_html = require("../helper/html");
|
|
32
|
-
|
|
32
|
+
var import_html2 = require("../utils/html");
|
|
33
|
+
var import_utils = require("./utils");
|
|
34
|
+
const jsxAttr = (key, v) => {
|
|
35
|
+
const buffer = [`${key}="`];
|
|
36
|
+
if (key === "style" && typeof v === "object") {
|
|
37
|
+
let styleStr = "";
|
|
38
|
+
(0, import_utils.styleObjectForEach)(v, (property, value) => {
|
|
39
|
+
if (value != null) {
|
|
40
|
+
styleStr += `${styleStr ? ";" : ""}${property}:${value}`;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
(0, import_html2.escapeToBuffer)(styleStr, buffer);
|
|
44
|
+
buffer[0] += '"';
|
|
45
|
+
} else if (typeof v === "string") {
|
|
46
|
+
(0, import_html2.escapeToBuffer)(v, buffer);
|
|
47
|
+
buffer[0] += '"';
|
|
48
|
+
} else if (v === null || v === void 0) {
|
|
49
|
+
return (0, import_html.raw)("");
|
|
50
|
+
} else if (typeof v === "number" || v.isEscaped) {
|
|
51
|
+
buffer[0] += `${v}"`;
|
|
52
|
+
} else if (v instanceof Promise) {
|
|
53
|
+
buffer.unshift('"', v);
|
|
54
|
+
} else {
|
|
55
|
+
(0, import_html2.escapeToBuffer)(v.toString(), buffer);
|
|
56
|
+
buffer[0] += '"';
|
|
57
|
+
}
|
|
58
|
+
return buffer.length === 1 ? (0, import_html.raw)(buffer[0]) : (0, import_html2.stringBufferToString)(buffer, void 0);
|
|
59
|
+
};
|
|
33
60
|
const jsxEscape = (value) => value;
|
|
34
61
|
// Annotate the CommonJS export names for ESM import in node:
|
|
35
62
|
0 && (module.exports = {
|
|
@@ -24,6 +24,7 @@ __export(streaming_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(streaming_exports);
|
|
25
25
|
var import_html = require("../helper/html");
|
|
26
26
|
var import_html2 = require("../utils/html");
|
|
27
|
+
var import_base = require("./base");
|
|
27
28
|
var import_components = require("./components");
|
|
28
29
|
var import_constants = require("./constants");
|
|
29
30
|
var import_components2 = require("./dom/components");
|
|
@@ -110,14 +111,16 @@ d.replaceWith(c.content)
|
|
|
110
111
|
};
|
|
111
112
|
Suspense[import_constants.DOM_RENDERER] = import_components2.Suspense;
|
|
112
113
|
const textEncoder = new TextEncoder();
|
|
113
|
-
const renderToReadableStream = (
|
|
114
|
+
const renderToReadableStream = (content, onError = console.trace) => {
|
|
114
115
|
const reader = new ReadableStream({
|
|
115
116
|
async start(controller) {
|
|
116
117
|
try {
|
|
117
|
-
|
|
118
|
-
|
|
118
|
+
if (content instanceof import_base.JSXNode) {
|
|
119
|
+
content = content.toString();
|
|
120
|
+
}
|
|
121
|
+
const context = typeof content === "object" ? content : {};
|
|
119
122
|
const resolved = await (0, import_html2.resolveCallback)(
|
|
120
|
-
|
|
123
|
+
content,
|
|
121
124
|
import_html2.HtmlEscapedCallbackPhase.BeforeStream,
|
|
122
125
|
true,
|
|
123
126
|
context
|
|
@@ -56,6 +56,7 @@ const every = (...middleware) => {
|
|
|
56
56
|
if (res === false) {
|
|
57
57
|
throw new Error("Unmet condition");
|
|
58
58
|
}
|
|
59
|
+
return res;
|
|
59
60
|
});
|
|
60
61
|
const handler = async (c, next) => (0, import_compose.compose)(wrappedMiddleware.map((m) => [[m, void 0], c.req.param()]))(c, next);
|
|
61
62
|
return async function every2(c, next) {
|
|
@@ -77,6 +77,13 @@ const secureHeaders = (customOptions) => {
|
|
|
77
77
|
}
|
|
78
78
|
headersToSet.push(["Content-Security-Policy", value]);
|
|
79
79
|
}
|
|
80
|
+
if (options.contentSecurityPolicyReportOnly) {
|
|
81
|
+
const [callback, value] = getCSPDirectives(options.contentSecurityPolicyReportOnly);
|
|
82
|
+
if (callback) {
|
|
83
|
+
callbacks.push(callback);
|
|
84
|
+
}
|
|
85
|
+
headersToSet.push(["Content-Security-Policy-Report-Only", value]);
|
|
86
|
+
}
|
|
80
87
|
if (options.permissionsPolicy && Object.keys(options.permissionsPolicy).length > 0) {
|
|
81
88
|
headersToSet.push([
|
|
82
89
|
"Permissions-Policy",
|
|
@@ -129,7 +136,7 @@ function getCSPDirectives(contentSecurityPolicy) {
|
|
|
129
136
|
resultValues.pop();
|
|
130
137
|
return callbacks.length === 0 ? [void 0, resultValues.join("")] : [
|
|
131
138
|
(ctx, headersToSet) => headersToSet.map((values) => {
|
|
132
|
-
if (values[0] === "Content-Security-Policy") {
|
|
139
|
+
if (values[0] === "Content-Security-Policy" || values[0] === "Content-Security-Policy-Report-Only") {
|
|
133
140
|
const clone = values[1].slice();
|
|
134
141
|
callbacks.forEach((cb) => {
|
|
135
142
|
cb(ctx, clone);
|
|
@@ -33,6 +33,16 @@ const ENCODINGS_ORDERED_KEYS = Object.keys(ENCODINGS);
|
|
|
33
33
|
const DEFAULT_DOCUMENT = "index.html";
|
|
34
34
|
const defaultPathResolve = (path) => path;
|
|
35
35
|
const serveStatic = (options) => {
|
|
36
|
+
let isAbsoluteRoot = false;
|
|
37
|
+
let root;
|
|
38
|
+
if (options.root) {
|
|
39
|
+
if (options.root.startsWith("/")) {
|
|
40
|
+
isAbsoluteRoot = true;
|
|
41
|
+
root = new URL(`file://${options.root}`).pathname;
|
|
42
|
+
} else {
|
|
43
|
+
root = options.root;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
36
46
|
return async (c, next) => {
|
|
37
47
|
if (c.finalized) {
|
|
38
48
|
await next();
|
|
@@ -40,7 +50,6 @@ const serveStatic = (options) => {
|
|
|
40
50
|
}
|
|
41
51
|
let filename = options.path ?? decodeURI(c.req.path);
|
|
42
52
|
filename = options.rewriteRequestPath ? options.rewriteRequestPath(filename) : filename;
|
|
43
|
-
const root = options.root;
|
|
44
53
|
if (!filename.endsWith("/") && options.isDir) {
|
|
45
54
|
const path2 = (0, import_filepath.getFilePathWithoutDefaultDocument)({
|
|
46
55
|
filename,
|
|
@@ -58,6 +67,9 @@ const serveStatic = (options) => {
|
|
|
58
67
|
if (!path) {
|
|
59
68
|
return await next();
|
|
60
69
|
}
|
|
70
|
+
if (isAbsoluteRoot) {
|
|
71
|
+
path = "/" + path;
|
|
72
|
+
}
|
|
61
73
|
const getContent = options.getContent;
|
|
62
74
|
const pathResolve = options.pathResolve ?? defaultPathResolve;
|
|
63
75
|
path = pathResolve(path);
|
|
@@ -47,6 +47,9 @@ const getFilePathWithoutDefaultDocument = (options) => {
|
|
|
47
47
|
root = root.replace(/\/$/, "");
|
|
48
48
|
let path = root ? root + "/" + filename : filename;
|
|
49
49
|
path = path.replace(/^\.?\//, "");
|
|
50
|
+
if (root[0] !== "/" && path[0] === "/") {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
50
53
|
return path;
|
|
51
54
|
};
|
|
52
55
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/jsx/base.js
CHANGED
package/dist/jsx/jsx-runtime.js
CHANGED
|
@@ -2,7 +2,34 @@
|
|
|
2
2
|
import { jsxDEV, Fragment } from "./jsx-dev-runtime.js";
|
|
3
3
|
import { jsxDEV as jsxDEV2 } from "./jsx-dev-runtime.js";
|
|
4
4
|
import { html, raw } from "../helper/html/index.js";
|
|
5
|
-
|
|
5
|
+
import { escapeToBuffer, stringBufferToString } from "../utils/html.js";
|
|
6
|
+
import { styleObjectForEach } from "./utils.js";
|
|
7
|
+
var jsxAttr = (key, v) => {
|
|
8
|
+
const buffer = [`${key}="`];
|
|
9
|
+
if (key === "style" && typeof v === "object") {
|
|
10
|
+
let styleStr = "";
|
|
11
|
+
styleObjectForEach(v, (property, value) => {
|
|
12
|
+
if (value != null) {
|
|
13
|
+
styleStr += `${styleStr ? ";" : ""}${property}:${value}`;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
escapeToBuffer(styleStr, buffer);
|
|
17
|
+
buffer[0] += '"';
|
|
18
|
+
} else if (typeof v === "string") {
|
|
19
|
+
escapeToBuffer(v, buffer);
|
|
20
|
+
buffer[0] += '"';
|
|
21
|
+
} else if (v === null || v === void 0) {
|
|
22
|
+
return raw("");
|
|
23
|
+
} else if (typeof v === "number" || v.isEscaped) {
|
|
24
|
+
buffer[0] += `${v}"`;
|
|
25
|
+
} else if (v instanceof Promise) {
|
|
26
|
+
buffer.unshift('"', v);
|
|
27
|
+
} else {
|
|
28
|
+
escapeToBuffer(v.toString(), buffer);
|
|
29
|
+
buffer[0] += '"';
|
|
30
|
+
}
|
|
31
|
+
return buffer.length === 1 ? raw(buffer[0]) : stringBufferToString(buffer, void 0);
|
|
32
|
+
};
|
|
6
33
|
var jsxEscape = (value) => value;
|
|
7
34
|
export {
|
|
8
35
|
Fragment,
|
package/dist/jsx/streaming.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// src/jsx/streaming.ts
|
|
2
2
|
import { raw } from "../helper/html/index.js";
|
|
3
3
|
import { HtmlEscapedCallbackPhase, resolveCallback } from "../utils/html.js";
|
|
4
|
+
import { JSXNode } from "./base.js";
|
|
4
5
|
import { childrenToString } from "./components.js";
|
|
5
6
|
import { DOM_RENDERER, DOM_STASH } from "./constants.js";
|
|
6
7
|
import { Suspense as SuspenseDomRenderer } from "./dom/components.js";
|
|
@@ -87,14 +88,16 @@ d.replaceWith(c.content)
|
|
|
87
88
|
};
|
|
88
89
|
Suspense[DOM_RENDERER] = SuspenseDomRenderer;
|
|
89
90
|
var textEncoder = new TextEncoder();
|
|
90
|
-
var renderToReadableStream = (
|
|
91
|
+
var renderToReadableStream = (content, onError = console.trace) => {
|
|
91
92
|
const reader = new ReadableStream({
|
|
92
93
|
async start(controller) {
|
|
93
94
|
try {
|
|
94
|
-
|
|
95
|
-
|
|
95
|
+
if (content instanceof JSXNode) {
|
|
96
|
+
content = content.toString();
|
|
97
|
+
}
|
|
98
|
+
const context = typeof content === "object" ? content : {};
|
|
96
99
|
const resolved = await resolveCallback(
|
|
97
|
-
|
|
100
|
+
content,
|
|
98
101
|
HtmlEscapedCallbackPhase.BeforeStream,
|
|
99
102
|
true,
|
|
100
103
|
context
|
|
@@ -32,6 +32,7 @@ var every = (...middleware) => {
|
|
|
32
32
|
if (res === false) {
|
|
33
33
|
throw new Error("Unmet condition");
|
|
34
34
|
}
|
|
35
|
+
return res;
|
|
35
36
|
});
|
|
36
37
|
const handler = async (c, next) => compose(wrappedMiddleware.map((m) => [[m, void 0], c.req.param()]))(c, next);
|
|
37
38
|
return async function every2(c, next) {
|
|
@@ -54,6 +54,13 @@ var secureHeaders = (customOptions) => {
|
|
|
54
54
|
}
|
|
55
55
|
headersToSet.push(["Content-Security-Policy", value]);
|
|
56
56
|
}
|
|
57
|
+
if (options.contentSecurityPolicyReportOnly) {
|
|
58
|
+
const [callback, value] = getCSPDirectives(options.contentSecurityPolicyReportOnly);
|
|
59
|
+
if (callback) {
|
|
60
|
+
callbacks.push(callback);
|
|
61
|
+
}
|
|
62
|
+
headersToSet.push(["Content-Security-Policy-Report-Only", value]);
|
|
63
|
+
}
|
|
57
64
|
if (options.permissionsPolicy && Object.keys(options.permissionsPolicy).length > 0) {
|
|
58
65
|
headersToSet.push([
|
|
59
66
|
"Permissions-Policy",
|
|
@@ -106,7 +113,7 @@ function getCSPDirectives(contentSecurityPolicy) {
|
|
|
106
113
|
resultValues.pop();
|
|
107
114
|
return callbacks.length === 0 ? [void 0, resultValues.join("")] : [
|
|
108
115
|
(ctx, headersToSet) => headersToSet.map((values) => {
|
|
109
|
-
if (values[0] === "Content-Security-Policy") {
|
|
116
|
+
if (values[0] === "Content-Security-Policy" || values[0] === "Content-Security-Policy-Report-Only") {
|
|
110
117
|
const clone = values[1].slice();
|
|
111
118
|
callbacks.forEach((cb) => {
|
|
112
119
|
cb(ctx, clone);
|
|
@@ -11,6 +11,16 @@ var ENCODINGS_ORDERED_KEYS = Object.keys(ENCODINGS);
|
|
|
11
11
|
var DEFAULT_DOCUMENT = "index.html";
|
|
12
12
|
var defaultPathResolve = (path) => path;
|
|
13
13
|
var serveStatic = (options) => {
|
|
14
|
+
let isAbsoluteRoot = false;
|
|
15
|
+
let root;
|
|
16
|
+
if (options.root) {
|
|
17
|
+
if (options.root.startsWith("/")) {
|
|
18
|
+
isAbsoluteRoot = true;
|
|
19
|
+
root = new URL(`file://${options.root}`).pathname;
|
|
20
|
+
} else {
|
|
21
|
+
root = options.root;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
14
24
|
return async (c, next) => {
|
|
15
25
|
if (c.finalized) {
|
|
16
26
|
await next();
|
|
@@ -18,7 +28,6 @@ var serveStatic = (options) => {
|
|
|
18
28
|
}
|
|
19
29
|
let filename = options.path ?? decodeURI(c.req.path);
|
|
20
30
|
filename = options.rewriteRequestPath ? options.rewriteRequestPath(filename) : filename;
|
|
21
|
-
const root = options.root;
|
|
22
31
|
if (!filename.endsWith("/") && options.isDir) {
|
|
23
32
|
const path2 = getFilePathWithoutDefaultDocument({
|
|
24
33
|
filename,
|
|
@@ -36,6 +45,9 @@ var serveStatic = (options) => {
|
|
|
36
45
|
if (!path) {
|
|
37
46
|
return await next();
|
|
38
47
|
}
|
|
48
|
+
if (isAbsoluteRoot) {
|
|
49
|
+
path = "/" + path;
|
|
50
|
+
}
|
|
39
51
|
const getContent = options.getContent;
|
|
40
52
|
const pathResolve = options.pathResolve ?? defaultPathResolve;
|
|
41
53
|
path = pathResolve(path);
|
package/dist/types/jsx/base.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export declare namespace JSX {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
export declare const getNameSpaceContext: () => Context<string> | undefined;
|
|
21
|
+
export declare const booleanAttributes: string[];
|
|
21
22
|
type LocalContexts = [Context<unknown>, unknown][];
|
|
22
23
|
export type Child = string | Promise<string> | number | JSXNode | null | undefined | boolean | Child[];
|
|
23
24
|
export declare class JSXNode implements HtmlEscaped {
|
|
@@ -42,7 +42,7 @@ declare const _default: {
|
|
|
42
42
|
ref?: import("../hooks").RefObject<T_9> | undefined;
|
|
43
43
|
}) => JSX.Element;
|
|
44
44
|
useImperativeHandle: <T_10>(ref: import("../hooks").RefObject<T_10>, createHandle: () => T_10, deps: readonly unknown[]) => void;
|
|
45
|
-
useSyncExternalStore: <T_11>(subscribe: (callback: (
|
|
45
|
+
useSyncExternalStore: <T_11>(subscribe: (callback: () => void) => () => void, getSnapshot: () => T_11, getServerSnapshot?: (() => T_11) | undefined) => T_11;
|
|
46
46
|
useFormStatus: () => {
|
|
47
47
|
pending: false;
|
|
48
48
|
data: null;
|
|
@@ -62,7 +62,7 @@ declare const _default: {
|
|
|
62
62
|
ref?: import("./").RefObject<T_9> | undefined;
|
|
63
63
|
}) => import("../base").JSX.Element;
|
|
64
64
|
useImperativeHandle: <T_10>(ref: import("./").RefObject<T_10>, createHandle: () => T_10, deps: readonly unknown[]) => void;
|
|
65
|
-
useSyncExternalStore: <T_11>(subscribe: (callback: (
|
|
65
|
+
useSyncExternalStore: <T_11>(subscribe: (callback: () => void) => () => void, getSnapshot: () => T_11, getServerSnapshot?: (() => T_11) | undefined) => T_11;
|
|
66
66
|
useFormStatus: () => {
|
|
67
67
|
pending: false;
|
|
68
68
|
data: null;
|
|
@@ -41,5 +41,5 @@ export declare const forwardRef: <T, P = {}>(Component: (props: P, ref?: RefObje
|
|
|
41
41
|
ref?: RefObject<T> | undefined;
|
|
42
42
|
}) => JSX.Element;
|
|
43
43
|
export declare const useImperativeHandle: <T>(ref: RefObject<T>, createHandle: () => T, deps: readonly unknown[]) => void;
|
|
44
|
-
export declare const useSyncExternalStore: <T>(subscribe: (callback: (
|
|
44
|
+
export declare const useSyncExternalStore: <T>(subscribe: (callback: () => void) => () => void, getSnapshot: () => T, getServerSnapshot?: (() => T) | undefined) => T;
|
|
45
45
|
export {};
|
|
@@ -56,7 +56,7 @@ declare const _default: {
|
|
|
56
56
|
ref?: import("./hooks").RefObject<T_13> | undefined;
|
|
57
57
|
}) => import("./base").JSX.Element;
|
|
58
58
|
useImperativeHandle: <T_14>(ref: import("./hooks").RefObject<T_14>, createHandle: () => T_14, deps: readonly unknown[]) => void;
|
|
59
|
-
useSyncExternalStore: <T_15>(subscribe: (callback: (
|
|
59
|
+
useSyncExternalStore: <T_15>(subscribe: (callback: () => void) => () => void, getSnapshot: () => T_15, getServerSnapshot?: (() => T_15) | undefined) => T_15;
|
|
60
60
|
useActionState: <T_16>(fn: Function, initialState: T_16, permalink?: string | undefined) => [T_16, Function];
|
|
61
61
|
useOptimistic: <T_17, N>(state: T_17, updateState: (currentState: T_17, action: N) => T_17) => [T_17, (action: N) => void];
|
|
62
62
|
Suspense: import("./base").FC<import("./types").PropsWithChildren<{
|
|
@@ -8,5 +8,5 @@ export type { JSX } from './jsx-dev-runtime';
|
|
|
8
8
|
import { html } from '../helper/html';
|
|
9
9
|
import type { HtmlEscapedString } from '../utils/html';
|
|
10
10
|
export { html as jsxTemplate };
|
|
11
|
-
export declare const jsxAttr: (
|
|
11
|
+
export declare const jsxAttr: (key: string, v: string | Promise<string> | Record<string, string | number | null | undefined | boolean>) => HtmlEscapedString | Promise<HtmlEscapedString>;
|
|
12
12
|
export declare const jsxEscape: (value: string) => string;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* This module enables JSX to supports streaming Response.
|
|
4
4
|
*/
|
|
5
5
|
import type { HtmlEscapedString } from '../utils/html';
|
|
6
|
+
import { JSXNode } from './base';
|
|
6
7
|
import type { FC, PropsWithChildren } from './';
|
|
7
8
|
/**
|
|
8
9
|
* @experimental
|
|
@@ -17,4 +18,4 @@ export declare const Suspense: FC<PropsWithChildren<{
|
|
|
17
18
|
* `renderToReadableStream()` is an experimental feature.
|
|
18
19
|
* The API might be changed.
|
|
19
20
|
*/
|
|
20
|
-
export declare const renderToReadableStream: (
|
|
21
|
+
export declare const renderToReadableStream: (content: HtmlEscapedString | JSXNode | Promise<HtmlEscapedString>, onError?: (e: unknown) => string | void) => ReadableStream<Uint8Array>;
|
|
@@ -7,8 +7,8 @@ import type { CookiePrefixOptions } from '../../utils/cookie';
|
|
|
7
7
|
import '../../context';
|
|
8
8
|
import type { SignatureAlgorithm } from '../../utils/jwt/jwa';
|
|
9
9
|
import type { SignatureKey } from '../../utils/jwt/jws';
|
|
10
|
-
export type JwtVariables = {
|
|
11
|
-
jwtPayload:
|
|
10
|
+
export type JwtVariables<T = any> = {
|
|
11
|
+
jwtPayload: T;
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
14
14
|
* JWT Auth Middleware for Hono.
|
|
@@ -51,6 +51,7 @@ type PermissionsPolicyOptions = Partial<Record<PermissionsPolicyDirective, Permi
|
|
|
51
51
|
type overridableHeader = boolean | string;
|
|
52
52
|
interface SecureHeadersOptions {
|
|
53
53
|
contentSecurityPolicy?: ContentSecurityPolicyOptions;
|
|
54
|
+
contentSecurityPolicyReportOnly?: ContentSecurityPolicyOptions;
|
|
54
55
|
crossOriginEmbedderPolicy?: overridableHeader;
|
|
55
56
|
crossOriginResourcePolicy?: overridableHeader;
|
|
56
57
|
crossOriginOpenerPolicy?: overridableHeader;
|
|
@@ -76,6 +77,7 @@ export declare const NONCE: ContentSecurityPolicyOptionHandler;
|
|
|
76
77
|
*
|
|
77
78
|
* @param {Partial<SecureHeadersOptions>} [customOptions] - The options for the secure headers middleware.
|
|
78
79
|
* @param {ContentSecurityPolicyOptions} [customOptions.contentSecurityPolicy] - Settings for the Content-Security-Policy header.
|
|
80
|
+
* @param {ContentSecurityPolicyOptions} [customOptions.contentSecurityPolicyReportOnly] - Settings for the Content-Security-Policy-Report-Only header.
|
|
79
81
|
* @param {overridableHeader} [customOptions.crossOriginEmbedderPolicy=false] - Settings for the Cross-Origin-Embedder-Policy header.
|
|
80
82
|
* @param {overridableHeader} [customOptions.crossOriginResourcePolicy=true] - Settings for the Cross-Origin-Resource-Policy header.
|
|
81
83
|
* @param {overridableHeader} [customOptions.crossOriginOpenerPolicy=true] - Settings for the Cross-Origin-Opener-Policy header.
|
package/dist/types/types.d.ts
CHANGED
|
@@ -37,21 +37,21 @@ export interface HTTPResponseError extends Error {
|
|
|
37
37
|
}
|
|
38
38
|
export type ErrorHandler<E extends Env = any> = (err: Error | HTTPResponseError, c: Context<E>) => Response | Promise<Response>;
|
|
39
39
|
export interface HandlerInterface<E extends Env = Env, M extends string = string, S extends Schema = BlankSchema, BasePath extends string = '/'> {
|
|
40
|
-
<P extends string =
|
|
41
|
-
<P extends string =
|
|
40
|
+
<P extends string = ExtractStringKey<S> extends never ? BasePath : ExtractStringKey<S>, I extends Input = BlankInput, R extends HandlerResponse<any> = any, E2 extends Env = E>(handler: H<E2, P, I, R>): Hono<IntersectNonAnyTypes<[E, E2]>, S & ToSchema<M, P, I, MergeTypedResponse<R>>, BasePath>;
|
|
41
|
+
<P extends string = ExtractStringKey<S> extends never ? BasePath : ExtractStringKey<S>, I extends Input = BlankInput, I2 extends Input = I, R extends HandlerResponse<any> = any, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(...handlers: [H<E2, P, I>, H<E3, P, I2, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3]>, S & ToSchema<M, P, I2, MergeTypedResponse<R>>, BasePath>;
|
|
42
42
|
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, E2 extends Env = E>(path: P, handler: H<E2, MergedPath, I, R>): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
|
|
43
|
-
<P extends string =
|
|
43
|
+
<P extends string = ExtractStringKey<S> extends never ? BasePath : ExtractStringKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4]>, S & ToSchema<M, P, I3, MergeTypedResponse<R>>, BasePath>;
|
|
44
44
|
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2, R>]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I2, MergeTypedResponse<R>>, BasePath>;
|
|
45
|
-
<P extends string =
|
|
45
|
+
<P extends string = ExtractStringKey<S> extends never ? BasePath : ExtractStringKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3>, H<E5, P, I4, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, S & ToSchema<M, P, I4, MergeTypedResponse<R>>, BasePath>;
|
|
46
46
|
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>>(path: P, ...handlers: [H<E2, MergedPath, I>, H<E3, MergedPath, I2>, H<E4, MergedPath, I3, R>]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I3, MergeTypedResponse<R>>, BasePath>;
|
|
47
|
-
<P extends string =
|
|
47
|
+
<P extends string = ExtractStringKey<S> extends never ? BasePath : ExtractStringKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, I5 extends Input = I & I2 & I3 & I4, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>>(...handlers: [H<E2, P, I>, H<E3, P, I2>, H<E4, P, I3>, H<E5, P, I4>, H<E6, P, I5, R>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, S & ToSchema<M, P, I5, MergeTypedResponse<R>>, BasePath>;
|
|
48
48
|
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, I2 extends Input = I, I3 extends Input = I & I2, I4 extends Input = I & I2 & I3, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>>(path: P, ...handlers: [
|
|
49
49
|
H<E2, MergedPath, I>,
|
|
50
50
|
H<E3, MergedPath, I2>,
|
|
51
51
|
H<E4, MergedPath, I3>,
|
|
52
52
|
H<E5, MergedPath, I4, R>
|
|
53
53
|
]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I4, MergeTypedResponse<R>>, BasePath>;
|
|
54
|
-
<P extends string =
|
|
54
|
+
<P extends string = ExtractStringKey<S> extends never ? BasePath : ExtractStringKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, 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, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>>(...handlers: [
|
|
55
55
|
H<E2, P, I>,
|
|
56
56
|
H<E3, P, I2>,
|
|
57
57
|
H<E4, P, I3>,
|
|
@@ -66,7 +66,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
|
|
|
66
66
|
H<E5, MergedPath, I4>,
|
|
67
67
|
H<E6, MergedPath, I5, R>
|
|
68
68
|
]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I5, MergeTypedResponse<R>>, BasePath>;
|
|
69
|
-
<P extends string =
|
|
69
|
+
<P extends string = ExtractStringKey<S> extends never ? BasePath : ExtractStringKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, 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, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>>(...handlers: [
|
|
70
70
|
H<E2, P, I>,
|
|
71
71
|
H<E3, P, I2>,
|
|
72
72
|
H<E4, P, I3>,
|
|
@@ -83,7 +83,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
|
|
|
83
83
|
H<E6, MergedPath, I5>,
|
|
84
84
|
H<E7, MergedPath, I6, R>
|
|
85
85
|
]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I6, MergeTypedResponse<R>>, BasePath>;
|
|
86
|
-
<P extends string =
|
|
86
|
+
<P extends string = ExtractStringKey<S> extends never ? BasePath : ExtractStringKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, 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, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>>(...handlers: [
|
|
87
87
|
H<E2, P, I>,
|
|
88
88
|
H<E3, P, I2>,
|
|
89
89
|
H<E4, P, I3>,
|
|
@@ -102,7 +102,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
|
|
|
102
102
|
H<E7, MergedPath, I6>,
|
|
103
103
|
H<E8, MergedPath, I7, R>
|
|
104
104
|
]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I7, MergeTypedResponse<R>>, BasePath>;
|
|
105
|
-
<P extends string =
|
|
105
|
+
<P extends string = ExtractStringKey<S> extends never ? BasePath : ExtractStringKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, 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, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>>(...handlers: [
|
|
106
106
|
H<E2, P, I>,
|
|
107
107
|
H<E3, P, I2>,
|
|
108
108
|
H<E4, P, I3>,
|
|
@@ -123,7 +123,7 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
|
|
|
123
123
|
H<E8, MergedPath, I7>,
|
|
124
124
|
H<E9, MergedPath, I8, R>
|
|
125
125
|
]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I8, MergeTypedResponse<R>>, BasePath>;
|
|
126
|
-
<P extends string =
|
|
126
|
+
<P extends string = ExtractStringKey<S> extends never ? BasePath : ExtractStringKey<S>, R extends HandlerResponse<any> = any, I extends Input = BlankInput, 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, E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>>(...handlers: [
|
|
127
127
|
H<E2, P, I>,
|
|
128
128
|
H<E3, P, I2>,
|
|
129
129
|
H<E4, P, I3>,
|
|
@@ -158,25 +158,25 @@ export interface HandlerInterface<E extends Env = Env, M extends string = string
|
|
|
158
158
|
H<E10, MergedPath, I9>,
|
|
159
159
|
H<E11, MergedPath, I10, R>
|
|
160
160
|
]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I10, MergeTypedResponse<R>>, BasePath>;
|
|
161
|
-
<P extends string =
|
|
161
|
+
<P extends string = ExtractStringKey<S> extends never ? BasePath : ExtractStringKey<S>, I extends Input = BlankInput, R extends HandlerResponse<any> = any>(...handlers: H<E, P, I, R>[]): Hono<E, S & ToSchema<M, P, I, MergeTypedResponse<R>>, BasePath>;
|
|
162
162
|
<P extends string, I extends Input = BlankInput, R extends HandlerResponse<any> = any>(path: P, ...handlers: H<E, MergePath<BasePath, P>, I, R>[]): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
|
|
163
163
|
<P extends string, R extends HandlerResponse<any> = any, I extends Input = BlankInput>(path: P): Hono<E, S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
|
|
164
164
|
}
|
|
165
165
|
export interface MiddlewareHandlerInterface<E extends Env = Env, S extends Schema = BlankSchema, BasePath extends string = '/'> {
|
|
166
|
-
<E2 extends Env = E>(...handlers: MiddlewareHandler<E2, MergePath<BasePath,
|
|
167
|
-
<E2 extends Env = E>(handler: MiddlewareHandler<E2, MergePath<BasePath,
|
|
168
|
-
<E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, P extends string = MergePath<BasePath,
|
|
166
|
+
<E2 extends Env = E>(...handlers: MiddlewareHandler<E2, MergePath<BasePath, ExtractStringKey<S>>>[]): Hono<IntersectNonAnyTypes<[E, E2]>, S, BasePath>;
|
|
167
|
+
<E2 extends Env = E>(handler: MiddlewareHandler<E2, MergePath<BasePath, ExtractStringKey<S>>>): Hono<IntersectNonAnyTypes<[E, E2]>, S, BasePath>;
|
|
168
|
+
<E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>, P extends string = MergePath<BasePath, ExtractStringKey<S>>>(...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>]): Hono<IntersectNonAnyTypes<[E, E2, E3]>, S, BasePath>;
|
|
169
169
|
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E>(path: P, handler: MiddlewareHandler<E2, MergedPath>): Hono<IntersectNonAnyTypes<[E, E2]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
|
|
170
|
-
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, P extends string = MergePath<BasePath,
|
|
170
|
+
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>, P extends string = MergePath<BasePath, ExtractStringKey<S>>>(...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4]>, S, BasePath>;
|
|
171
171
|
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = IntersectNonAnyTypes<[E, E2]>>(path: P, ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>]): Hono<IntersectNonAnyTypes<[E, E2, E3]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
|
|
172
|
-
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, P extends string = MergePath<BasePath,
|
|
172
|
+
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>, P extends string = MergePath<BasePath, ExtractStringKey<S>>>(...handlers: [
|
|
173
173
|
MiddlewareHandler<E2, P>,
|
|
174
174
|
MiddlewareHandler<E3, P>,
|
|
175
175
|
MiddlewareHandler<E4, P>,
|
|
176
176
|
MiddlewareHandler<E5, P>
|
|
177
177
|
]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, S, BasePath>;
|
|
178
178
|
<P extends string, MergedPath extends MergePath<BasePath, P> = MergePath<BasePath, P>, E2 extends Env = E, E3 extends Env = E, E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>>(path: P, ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
|
|
179
|
-
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, P extends string = MergePath<BasePath,
|
|
179
|
+
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, P extends string = MergePath<BasePath, ExtractStringKey<S>>>(...handlers: [
|
|
180
180
|
MiddlewareHandler<E2, P>,
|
|
181
181
|
MiddlewareHandler<E3, P>,
|
|
182
182
|
MiddlewareHandler<E4, P>,
|
|
@@ -189,7 +189,7 @@ export interface MiddlewareHandlerInterface<E extends Env = Env, S extends Schem
|
|
|
189
189
|
MiddlewareHandler<E4, P>,
|
|
190
190
|
MiddlewareHandler<E5, P>
|
|
191
191
|
]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
|
|
192
|
-
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, P extends string = MergePath<BasePath,
|
|
192
|
+
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, P extends string = MergePath<BasePath, ExtractStringKey<S>>>(...handlers: [
|
|
193
193
|
MiddlewareHandler<E2, P>,
|
|
194
194
|
MiddlewareHandler<E3, P>,
|
|
195
195
|
MiddlewareHandler<E4, P>,
|
|
@@ -204,7 +204,7 @@ export interface MiddlewareHandlerInterface<E extends Env = Env, S extends Schem
|
|
|
204
204
|
MiddlewareHandler<E5, P>,
|
|
205
205
|
MiddlewareHandler<E6, P>
|
|
206
206
|
]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
|
|
207
|
-
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, P extends string = MergePath<BasePath,
|
|
207
|
+
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, P extends string = MergePath<BasePath, ExtractStringKey<S>>>(...handlers: [
|
|
208
208
|
MiddlewareHandler<E2, P>,
|
|
209
209
|
MiddlewareHandler<E3, P>,
|
|
210
210
|
MiddlewareHandler<E4, P>,
|
|
@@ -221,7 +221,7 @@ export interface MiddlewareHandlerInterface<E extends Env = Env, S extends Schem
|
|
|
221
221
|
MiddlewareHandler<E6, P>,
|
|
222
222
|
MiddlewareHandler<E7, P>
|
|
223
223
|
]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
|
|
224
|
-
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, P extends string = MergePath<BasePath,
|
|
224
|
+
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, P extends string = MergePath<BasePath, ExtractStringKey<S>>>(...handlers: [
|
|
225
225
|
MiddlewareHandler<E2, P>,
|
|
226
226
|
MiddlewareHandler<E3, P>,
|
|
227
227
|
MiddlewareHandler<E4, P>,
|
|
@@ -240,7 +240,7 @@ export interface MiddlewareHandlerInterface<E extends Env = Env, S extends Schem
|
|
|
240
240
|
MiddlewareHandler<E7, P>,
|
|
241
241
|
MiddlewareHandler<E8, P>
|
|
242
242
|
]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
|
|
243
|
-
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, P extends string = MergePath<BasePath,
|
|
243
|
+
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, P extends string = MergePath<BasePath, ExtractStringKey<S>>>(...handlers: [
|
|
244
244
|
MiddlewareHandler<E2, P>,
|
|
245
245
|
MiddlewareHandler<E3, P>,
|
|
246
246
|
MiddlewareHandler<E4, P>,
|
|
@@ -261,7 +261,7 @@ export interface MiddlewareHandlerInterface<E extends Env = Env, S extends Schem
|
|
|
261
261
|
MiddlewareHandler<E8, P>,
|
|
262
262
|
MiddlewareHandler<E9, P>
|
|
263
263
|
]): Hono<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, ChangePathOfSchema<S, MergedPath>, BasePath>;
|
|
264
|
-
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, P extends string = MergePath<BasePath,
|
|
264
|
+
<E2 extends Env = E, E3 extends Env = E, E4 extends Env = E, E5 extends Env = E, E6 extends Env = E, E7 extends Env = E, E8 extends Env = E, E9 extends Env = E, E10 extends Env = E, E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, P extends string = MergePath<BasePath, ExtractStringKey<S>>>(...handlers: [
|
|
265
265
|
MiddlewareHandler<E2, P>,
|
|
266
266
|
MiddlewareHandler<E3, P>,
|
|
267
267
|
MiddlewareHandler<E4, P>,
|
|
@@ -423,7 +423,7 @@ export interface OnHandlerInterface<E extends Env = Env, S extends Schema = Blan
|
|
|
423
423
|
<P extends string, R extends HandlerResponse<any> = any, I extends Input = BlankInput>(methods: string[], path: P, ...handlers: H<E, MergePath<BasePath, P>, I, R>[]): Hono<E, S & ToSchema<string, MergePath<BasePath, P>, I, MergeTypedResponse<R>>, BasePath>;
|
|
424
424
|
<I extends Input = BlankInput, R extends HandlerResponse<any> = any>(methods: string | string[], paths: string[], ...handlers: H<E, any, I, R>[]): Hono<E, S & ToSchema<string, string, I, MergeTypedResponse<R>>, BasePath>;
|
|
425
425
|
}
|
|
426
|
-
type
|
|
426
|
+
type ExtractStringKey<S> = keyof S & string;
|
|
427
427
|
export type ToSchema<M extends string, P extends string, I extends Input | Input['in'], RorO> = Simplify<{
|
|
428
428
|
[K in P]: {
|
|
429
429
|
[K2 in M as AddDollar<K2>]: Simplify<{
|
|
@@ -27,7 +27,9 @@ export type JSONParsed<T> = T extends {
|
|
|
27
27
|
toJSON(): infer J;
|
|
28
28
|
} ? (() => J) extends () => JSONPrimitive ? J : (() => J) extends () => {
|
|
29
29
|
toJSON(): unknown;
|
|
30
|
-
} ? {} : JSONParsed<J> : T extends JSONPrimitive ? T : T extends InvalidJSONValue ? never : T extends
|
|
30
|
+
} ? {} : JSONParsed<J> : T extends JSONPrimitive ? T : T extends InvalidJSONValue ? never : T extends ReadonlyArray<unknown> ? {
|
|
31
|
+
[K in keyof T]: JSONParsed<InvalidToNull<T[K]>>;
|
|
32
|
+
} : T extends Set<unknown> | Map<unknown, unknown> ? {} : T extends object ? {
|
|
31
33
|
[K in keyof OmitSymbolKeys<T> as IsInvalid<T[K]> extends true ? never : K]: boolean extends IsInvalid<T[K]> ? JSONParsed<T[K]> | undefined : JSONParsed<T[K]>;
|
|
32
34
|
} : never;
|
|
33
35
|
/**
|
package/dist/utils/filepath.js
CHANGED
|
@@ -24,6 +24,9 @@ var getFilePathWithoutDefaultDocument = (options) => {
|
|
|
24
24
|
root = root.replace(/\/$/, "");
|
|
25
25
|
let path = root ? root + "/" + filename : filename;
|
|
26
26
|
path = path.replace(/^\.?\//, "");
|
|
27
|
+
if (root[0] !== "/" && path[0] === "/") {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
27
30
|
return path;
|
|
28
31
|
};
|
|
29
32
|
export {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hono",
|
|
3
|
-
"version": "4.6.
|
|
3
|
+
"version": "4.6.3",
|
|
4
4
|
"description": "Web framework built on Web Standards",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -12,18 +12,18 @@
|
|
|
12
12
|
"scripts": {
|
|
13
13
|
"test": "tsc --noEmit && vitest --run && vitest -c .vitest.config/jsx-runtime-default.ts --run && vitest -c .vitest.config/jsx-runtime-dom.ts --run",
|
|
14
14
|
"test:watch": "vitest --watch",
|
|
15
|
-
"test:deno": "deno test --allow-read --allow-env --allow-write --allow-net -c
|
|
16
|
-
"test:bun": "bun test --jsx-import-source ../../src/jsx
|
|
17
|
-
"test:fastly": "vitest --run --config ./
|
|
18
|
-
"test:node": "vitest --run --config ./
|
|
19
|
-
"test:workerd": "vitest --run --config ./
|
|
20
|
-
"test:lambda": "vitest --run --config ./
|
|
21
|
-
"test:lambda-edge": "vitest --run --config ./
|
|
15
|
+
"test:deno": "deno test --allow-read --allow-env --allow-write --allow-net -c runtime-tests/deno/deno.json runtime-tests/deno && deno test --no-lock -c runtime-tests/deno-jsx/deno.precompile.json runtime-tests/deno-jsx && deno test --no-lock -c runtime-tests/deno-jsx/deno.react-jsx.json runtime-tests/deno-jsx",
|
|
16
|
+
"test:bun": "bun test --jsx-import-source ../../src/jsx runtime-tests/bun/index.test.tsx",
|
|
17
|
+
"test:fastly": "vitest --run --config ./runtime-tests/fastly/vitest.config.ts",
|
|
18
|
+
"test:node": "vitest --run --config ./runtime-tests/node/vitest.config.ts",
|
|
19
|
+
"test:workerd": "vitest --run --config ./runtime-tests/workerd/vitest.config.ts",
|
|
20
|
+
"test:lambda": "vitest --run --config ./runtime-tests/lambda/vitest.config.ts",
|
|
21
|
+
"test:lambda-edge": "vitest --run --config ./runtime-tests/lambda-edge/vitest.config.ts",
|
|
22
22
|
"test:all": "bun run test && bun test:deno && bun test:bun && bun test:fastly && bun test:node && bun test:workerd && bun test:lambda && bun test:lambda-edge",
|
|
23
|
-
"lint": "eslint src
|
|
24
|
-
"lint:fix": "eslint src
|
|
25
|
-
"format": "prettier --check --cache \"src/**/*.{js,ts,tsx}\" \"
|
|
26
|
-
"format:fix": "prettier --write --cache --cache-strategy metadata \"src/**/*.{js,ts,tsx}\" \"
|
|
23
|
+
"lint": "eslint src runtime-tests",
|
|
24
|
+
"lint:fix": "eslint src runtime-tests --fix",
|
|
25
|
+
"format": "prettier --check --cache \"src/**/*.{js,ts,tsx}\" \"runtime-tests/**/*.{js,ts,tsx}\"",
|
|
26
|
+
"format:fix": "prettier --write --cache --cache-strategy metadata \"src/**/*.{js,ts,tsx}\" \"runtime-tests/**/*.{js,ts,tsx}\"",
|
|
27
27
|
"copy:package.cjs.json": "cp ./package.cjs.json ./dist/cjs/package.json && cp ./package.cjs.json ./dist/types/package.json ",
|
|
28
28
|
"build": "bun run --shell bun remove-dist && bun ./build.ts && bun run copy:package.cjs.json",
|
|
29
29
|
"postbuild": "publint",
|
|
File without changes
|