hono 4.13.13 → 5.0.0-rc.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.
- package/README.md +2 -2
- package/dist/{types/compose.d.ts → compose.d.ts} +1 -0
- package/dist/compose.js +10 -5
- package/dist/{types/context.d.ts → context.d.ts} +15 -15
- package/dist/context.js +79 -47
- package/dist/helper/factory/define-handler.d.ts +150 -0
- package/dist/helper/factory/define-handler.js +165 -0
- package/dist/{types/helper → helper}/factory/index.d.ts +30 -1
- package/dist/helper/factory/index.js +31 -3
- package/dist/{types/helper → helper}/ssg/middleware.d.ts +0 -6
- package/dist/helper/ssg/middleware.js +1 -16
- package/dist/{types/helper → helper}/ssg/ssg.d.ts +0 -12
- package/dist/helper/ssg/ssg.js +0 -3
- package/dist/{types/hono-base.d.ts → hono-base.d.ts} +3 -60
- package/dist/hono-base.js +6 -97
- package/dist/{types/hono.d.ts → hono.d.ts} +1 -1
- package/dist/{types/middleware → middleware}/basic-auth/index.d.ts +4 -3
- package/dist/middleware/basic-auth/index.js +1 -1
- package/dist/{types/middleware → middleware}/bearer-auth/index.d.ts +4 -27
- package/dist/middleware/bearer-auth/index.js +4 -4
- package/dist/middleware/language/language.js +1 -1
- package/dist/middleware/logger/index.js +6 -8
- package/dist/{types/middleware → middleware}/serve-static/index.d.ts +0 -4
- package/dist/{types/preset → preset}/quick.d.ts +1 -1
- package/dist/{types/preset → preset}/tiny.d.ts +1 -1
- package/dist/{types/request.d.ts → request.d.ts} +3 -48
- package/dist/request.js +0 -49
- package/dist/router/linear-router/router.js +4 -6
- package/dist/router/pattern-router/router.js +2 -2
- package/dist/router/reg-exp-router/node.js +1 -1
- package/dist/router/trie-router/node.js +3 -3
- package/dist/utils/buffer.d.ts +11 -0
- package/dist/utils/buffer.js +1 -8
- package/dist/utils/color.d.ts +16 -0
- package/dist/utils/color.js +7 -23
- package/dist/{types/utils → utils}/http-status.d.ts +1 -9
- package/dist/{types/utils → utils}/url.d.ts +0 -5
- package/dist/utils/url.js +1 -11
- package/dist/{types/validator → validator}/validator.d.ts +5 -0
- package/dist/validator/validator.js +46 -49
- package/package.json +209 -350
- package/dist/adapter/aws-lambda/conninfo.js +0 -43
- package/dist/adapter/aws-lambda/handler.js +0 -342
- package/dist/adapter/aws-lambda/index.js +0 -3
- package/dist/adapter/aws-lambda/types.js +0 -1
- package/dist/adapter/bun/conninfo.js +0 -22
- package/dist/adapter/bun/index.js +0 -6
- package/dist/adapter/bun/serve-static.js +0 -30
- package/dist/adapter/bun/server.js +0 -11
- package/dist/adapter/bun/ssg.js +0 -27
- package/dist/adapter/bun/websocket.js +0 -66
- package/dist/adapter/cloudflare-pages/conninfo.js +0 -24
- package/dist/adapter/cloudflare-pages/handler.js +0 -64
- package/dist/adapter/cloudflare-pages/index.js +0 -3
- package/dist/adapter/cloudflare-workers/conninfo.js +0 -7
- package/dist/adapter/cloudflare-workers/index.js +0 -4
- package/dist/adapter/cloudflare-workers/serve-static-module.js +0 -7
- package/dist/adapter/cloudflare-workers/serve-static.js +0 -28
- package/dist/adapter/cloudflare-workers/utils.js +0 -22
- package/dist/adapter/cloudflare-workers/websocket.js +0 -33
- package/dist/adapter/deno/conninfo.js +0 -17
- package/dist/adapter/deno/deno.d.js +0 -1
- package/dist/adapter/deno/index.js +0 -5
- package/dist/adapter/deno/serve-static.js +0 -35
- package/dist/adapter/deno/ssg.js +0 -29
- package/dist/adapter/deno/websocket.js +0 -32
- package/dist/adapter/lambda-edge/conninfo.js +0 -7
- package/dist/adapter/lambda-edge/handler.js +0 -111
- package/dist/adapter/lambda-edge/index.js +0 -3
- package/dist/adapter/netlify/conninfo.js +0 -24
- package/dist/adapter/netlify/handler.js +0 -11
- package/dist/adapter/netlify/index.js +0 -3
- package/dist/adapter/netlify/mod.js +0 -3
- package/dist/adapter/service-worker/handler.js +0 -16
- package/dist/adapter/service-worker/index.js +0 -25
- package/dist/adapter/service-worker/types.js +0 -1
- package/dist/adapter/vercel/conninfo.js +0 -7
- package/dist/adapter/vercel/handler.js +0 -9
- package/dist/adapter/vercel/index.js +0 -3
- package/dist/cjs/_virtual/_rolldown/runtime.js +0 -33
- package/dist/cjs/adapter/aws-lambda/conninfo.js +0 -44
- package/dist/cjs/adapter/aws-lambda/handler.js +0 -352
- package/dist/cjs/adapter/aws-lambda/index.js +0 -7
- package/dist/cjs/adapter/aws-lambda/types.js +0 -0
- package/dist/cjs/adapter/bun/conninfo.js +0 -23
- package/dist/cjs/adapter/bun/index.js +0 -14
- package/dist/cjs/adapter/bun/serve-static.js +0 -31
- package/dist/cjs/adapter/bun/server.js +0 -12
- package/dist/cjs/adapter/bun/ssg.js +0 -29
- package/dist/cjs/adapter/bun/websocket.js +0 -70
- package/dist/cjs/adapter/cloudflare-pages/conninfo.js +0 -25
- package/dist/cjs/adapter/cloudflare-pages/handler.js +0 -67
- package/dist/cjs/adapter/cloudflare-pages/index.js +0 -7
- package/dist/cjs/adapter/cloudflare-workers/conninfo.js +0 -8
- package/dist/cjs/adapter/cloudflare-workers/index.js +0 -7
- package/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +0 -8
- package/dist/cjs/adapter/cloudflare-workers/serve-static.js +0 -29
- package/dist/cjs/adapter/cloudflare-workers/utils.js +0 -23
- package/dist/cjs/adapter/cloudflare-workers/websocket.js +0 -34
- package/dist/cjs/adapter/deno/conninfo.js +0 -18
- package/dist/cjs/adapter/deno/deno.d.js +0 -0
- package/dist/cjs/adapter/deno/index.js +0 -10
- package/dist/cjs/adapter/deno/serve-static.js +0 -36
- package/dist/cjs/adapter/deno/ssg.js +0 -31
- package/dist/cjs/adapter/deno/websocket.js +0 -33
- package/dist/cjs/adapter/lambda-edge/conninfo.js +0 -8
- package/dist/cjs/adapter/lambda-edge/handler.js +0 -116
- package/dist/cjs/adapter/lambda-edge/index.js +0 -5
- package/dist/cjs/adapter/netlify/conninfo.js +0 -25
- package/dist/cjs/adapter/netlify/handler.js +0 -12
- package/dist/cjs/adapter/netlify/index.js +0 -5
- package/dist/cjs/adapter/netlify/mod.js +0 -5
- package/dist/cjs/adapter/service-worker/handler.js +0 -17
- package/dist/cjs/adapter/service-worker/index.js +0 -27
- package/dist/cjs/adapter/service-worker/types.js +0 -0
- package/dist/cjs/adapter/vercel/conninfo.js +0 -8
- package/dist/cjs/adapter/vercel/handler.js +0 -10
- package/dist/cjs/adapter/vercel/index.js +0 -5
- package/dist/cjs/client/client.js +0 -145
- package/dist/cjs/client/fetch-result-please.js +0 -67
- package/dist/cjs/client/index.js +0 -7
- package/dist/cjs/client/types.js +0 -0
- package/dist/cjs/client/utils.js +0 -70
- package/dist/cjs/compose.js +0 -51
- package/dist/cjs/context.js +0 -383
- package/dist/cjs/helper/accepts/accepts.js +0 -54
- package/dist/cjs/helper/accepts/index.js +0 -3
- package/dist/cjs/helper/adapter/index.js +0 -41
- package/dist/cjs/helper/conninfo/index.js +0 -0
- package/dist/cjs/helper/conninfo/types.js +0 -0
- package/dist/cjs/helper/cookie/index.js +0 -89
- package/dist/cjs/helper/css/common.js +0 -194
- package/dist/cjs/helper/css/index.js +0 -142
- package/dist/cjs/helper/dev/index.js +0 -53
- package/dist/cjs/helper/factory/index.js +0 -33
- package/dist/cjs/helper/html/index.js +0 -34
- package/dist/cjs/helper/proxy/index.js +0 -122
- package/dist/cjs/helper/route/index.js +0 -128
- package/dist/cjs/helper/ssg/index.js +0 -19
- package/dist/cjs/helper/ssg/middleware.js +0 -65
- package/dist/cjs/helper/ssg/plugins.js +0 -68
- package/dist/cjs/helper/ssg/ssg.js +0 -220
- package/dist/cjs/helper/ssg/utils.js +0 -70
- package/dist/cjs/helper/streaming/index.js +0 -8
- package/dist/cjs/helper/streaming/sse.js +0 -59
- package/dist/cjs/helper/streaming/stream.js +0 -26
- package/dist/cjs/helper/streaming/text.js +0 -12
- package/dist/cjs/helper/streaming/utils.js +0 -16
- package/dist/cjs/helper/testing/index.js +0 -18
- package/dist/cjs/helper/websocket/index.js +0 -56
- package/dist/cjs/hono-base.js +0 -351
- package/dist/cjs/hono.js +0 -29
- package/dist/cjs/http-exception.js +0 -56
- package/dist/cjs/index.js +0 -22
- package/dist/cjs/jsx/base.js +0 -266
- package/dist/cjs/jsx/children.js +0 -19
- package/dist/cjs/jsx/components.js +0 -147
- package/dist/cjs/jsx/constants.js +0 -15
- package/dist/cjs/jsx/context.js +0 -170
- package/dist/cjs/jsx/dom/client.js +0 -56
- package/dist/cjs/jsx/dom/components.js +0 -26
- package/dist/cjs/jsx/dom/context.js +0 -43
- package/dist/cjs/jsx/dom/css.js +0 -153
- package/dist/cjs/jsx/dom/hooks/index.js +0 -65
- package/dist/cjs/jsx/dom/index.js +0 -122
- package/dist/cjs/jsx/dom/intrinsic-element/components.js +0 -306
- package/dist/cjs/jsx/dom/jsx-dev-runtime.js +0 -17
- package/dist/cjs/jsx/dom/jsx-runtime.js +0 -5
- package/dist/cjs/jsx/dom/render.js +0 -525
- package/dist/cjs/jsx/dom/server.js +0 -44
- package/dist/cjs/jsx/dom/utils.js +0 -9
- package/dist/cjs/jsx/hooks/index.js +0 -280
- package/dist/cjs/jsx/index.js +0 -89
- package/dist/cjs/jsx/intrinsic-element/common.js +0 -27
- package/dist/cjs/jsx/intrinsic-element/components.js +0 -138
- package/dist/cjs/jsx/intrinsic-elements.js +0 -0
- package/dist/cjs/jsx/jsx-dev-runtime.js +0 -16
- package/dist/cjs/jsx/jsx-runtime.js +0 -37
- package/dist/cjs/jsx/streaming.js +0 -135
- package/dist/cjs/jsx/types.js +0 -0
- package/dist/cjs/jsx/utils.js +0 -116
- package/dist/cjs/middleware/basic-auth/index.js +0 -100
- package/dist/cjs/middleware/bearer-auth/index.js +0 -97
- package/dist/cjs/middleware/body-limit/index.js +0 -69
- package/dist/cjs/middleware/cache/index.js +0 -173
- package/dist/cjs/middleware/combine/index.js +0 -141
- package/dist/cjs/middleware/compress/index.js +0 -82
- package/dist/cjs/middleware/context-storage/index.js +0 -55
- package/dist/cjs/middleware/cors/index.js +0 -109
- package/dist/cjs/middleware/csrf/index.js +0 -106
- package/dist/cjs/middleware/etag/digest.js +0 -62
- package/dist/cjs/middleware/etag/index.js +0 -79
- package/dist/cjs/middleware/ip-restriction/index.js +0 -168
- package/dist/cjs/middleware/jsx-renderer/index.js +0 -104
- package/dist/cjs/middleware/jwk/index.js +0 -3
- package/dist/cjs/middleware/jwk/jwk.js +0 -122
- package/dist/cjs/middleware/jwt/index.js +0 -9
- package/dist/cjs/middleware/jwt/jwt.js +0 -124
- package/dist/cjs/middleware/language/index.js +0 -7
- package/dist/cjs/middleware/language/language.js +0 -208
- package/dist/cjs/middleware/logger/index.js +0 -51
- package/dist/cjs/middleware/method-not-allowed/index.js +0 -84
- package/dist/cjs/middleware/method-override/index.js +0 -105
- package/dist/cjs/middleware/mount/index.js +0 -71
- package/dist/cjs/middleware/powered-by/index.js +0 -25
- package/dist/cjs/middleware/pretty-json/index.js +0 -41
- package/dist/cjs/middleware/request-id/index.js +0 -3
- package/dist/cjs/middleware/request-id/request-id.js +0 -35
- package/dist/cjs/middleware/secure-headers/index.js +0 -4
- package/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -0
- package/dist/cjs/middleware/secure-headers/secure-headers.js +0 -166
- package/dist/cjs/middleware/serve-static/index.js +0 -62
- package/dist/cjs/middleware/serve-static/path.js +0 -17
- package/dist/cjs/middleware/timeout/index.js +0 -42
- package/dist/cjs/middleware/timing/index.js +0 -7
- package/dist/cjs/middleware/timing/timing.js +0 -189
- package/dist/cjs/middleware/trailing-slash/index.js +0 -89
- package/dist/cjs/package.json +0 -3
- package/dist/cjs/preset/quick.js +0 -19
- package/dist/cjs/preset/tiny.js +0 -16
- package/dist/cjs/request/constants.js +0 -5
- package/dist/cjs/request.js +0 -337
- package/dist/cjs/router/linear-router/index.js +0 -3
- package/dist/cjs/router/linear-router/router.js +0 -97
- package/dist/cjs/router/pattern-router/index.js +0 -3
- package/dist/cjs/router/pattern-router/router.js +0 -42
- package/dist/cjs/router/reg-exp-router/index.js +0 -7
- package/dist/cjs/router/reg-exp-router/matcher.js +0 -21
- package/dist/cjs/router/reg-exp-router/node.js +0 -96
- package/dist/cjs/router/reg-exp-router/prepared-router.js +0 -97
- package/dist/cjs/router/reg-exp-router/router.js +0 -102
- package/dist/cjs/router/reg-exp-router/trie.js +0 -74
- package/dist/cjs/router/smart-router/index.js +0 -3
- package/dist/cjs/router/smart-router/router.js +0 -50
- package/dist/cjs/router/trie-router/index.js +0 -3
- package/dist/cjs/router/trie-router/node.js +0 -135
- package/dist/cjs/router/trie-router/router.js +0 -16
- package/dist/cjs/router/utils.js +0 -5
- package/dist/cjs/router.js +0 -40
- package/dist/cjs/types.js +0 -5
- package/dist/cjs/utils/accept.js +0 -194
- package/dist/cjs/utils/basic-auth.js +0 -21
- package/dist/cjs/utils/body.js +0 -97
- package/dist/cjs/utils/buffer.js +0 -55
- package/dist/cjs/utils/color.js +0 -39
- package/dist/cjs/utils/compress.js +0 -12
- package/dist/cjs/utils/concurrent.js +0 -31
- package/dist/cjs/utils/constants.js +0 -8
- package/dist/cjs/utils/cookie.js +0 -129
- package/dist/cjs/utils/crypto.js +0 -38
- package/dist/cjs/utils/encode.js +0 -37
- package/dist/cjs/utils/filepath.js +0 -27
- package/dist/cjs/utils/handler.js +0 -14
- package/dist/cjs/utils/headers.js +0 -0
- package/dist/cjs/utils/html.js +0 -109
- package/dist/cjs/utils/http-status.js +0 -0
- package/dist/cjs/utils/ipaddr.js +0 -247
- package/dist/cjs/utils/jwt/index.js +0 -15
- package/dist/cjs/utils/jwt/jwa.js +0 -25
- package/dist/cjs/utils/jwt/jws.js +0 -135
- package/dist/cjs/utils/jwt/jwt.js +0 -136
- package/dist/cjs/utils/jwt/types.js +0 -124
- package/dist/cjs/utils/jwt/utf8.js +0 -11
- package/dist/cjs/utils/mime.js +0 -80
- package/dist/cjs/utils/stream.js +0 -89
- package/dist/cjs/utils/types.js +0 -0
- package/dist/cjs/utils/url.js +0 -215
- package/dist/cjs/validator/index.js +0 -3
- package/dist/cjs/validator/utils.js +0 -0
- package/dist/cjs/validator/validator.js +0 -65
- package/dist/types/adapter/aws-lambda/conninfo.d.ts +0 -30
- package/dist/types/adapter/aws-lambda/handler.d.ts +0 -230
- package/dist/types/adapter/aws-lambda/index.d.ts +0 -4
- package/dist/types/adapter/aws-lambda/types.d.ts +0 -183
- package/dist/types/adapter/bun/conninfo.d.ts +0 -10
- package/dist/types/adapter/bun/index.d.ts +0 -6
- package/dist/types/adapter/bun/serve-static.d.ts +0 -8
- package/dist/types/adapter/bun/server.d.ts +0 -11
- package/dist/types/adapter/bun/ssg.d.ts +0 -17
- package/dist/types/adapter/bun/websocket.d.ts +0 -54
- package/dist/types/adapter/cloudflare-pages/conninfo.d.ts +0 -24
- package/dist/types/adapter/cloudflare-pages/handler.d.ts +0 -45
- package/dist/types/adapter/cloudflare-pages/index.d.ts +0 -3
- package/dist/types/adapter/cloudflare-workers/conninfo.d.ts +0 -7
- package/dist/types/adapter/cloudflare-workers/index.d.ts +0 -4
- package/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +0 -7
- package/dist/types/adapter/cloudflare-workers/serve-static.d.ts +0 -21
- package/dist/types/adapter/cloudflare-workers/utils.d.ts +0 -13
- package/dist/types/adapter/cloudflare-workers/websocket.d.ts +0 -7
- package/dist/types/adapter/deno/conninfo.d.ts +0 -10
- package/dist/types/adapter/deno/deno.d.ts +0 -1
- package/dist/types/adapter/deno/index.d.ts +0 -5
- package/dist/types/adapter/deno/serve-static.d.ts +0 -8
- package/dist/types/adapter/deno/ssg.d.ts +0 -17
- package/dist/types/adapter/deno/websocket.d.ts +0 -7
- package/dist/types/adapter/lambda-edge/conninfo.d.ts +0 -7
- package/dist/types/adapter/lambda-edge/handler.d.ts +0 -113
- package/dist/types/adapter/lambda-edge/index.d.ts +0 -3
- package/dist/types/adapter/netlify/conninfo.d.ts +0 -24
- package/dist/types/adapter/netlify/handler.d.ts +0 -7
- package/dist/types/adapter/netlify/index.d.ts +0 -3
- package/dist/types/adapter/netlify/mod.d.ts +0 -3
- package/dist/types/adapter/service-worker/handler.d.ts +0 -18
- package/dist/types/adapter/service-worker/index.d.ts +0 -26
- package/dist/types/adapter/service-worker/types.d.ts +0 -17
- package/dist/types/adapter/vercel/conninfo.d.ts +0 -7
- package/dist/types/adapter/vercel/handler.d.ts +0 -7
- package/dist/types/adapter/vercel/index.d.ts +0 -3
- package/dist/types/package.json +0 -3
- package/dist/types/utils/buffer.d.ts +0 -19
- package/dist/types/utils/color.d.ts +0 -23
- package/dist/{types/client → client}/client.d.ts +0 -0
- package/dist/{types/client → client}/fetch-result-please.d.ts +0 -0
- package/dist/{types/client → client}/index.d.ts +0 -0
- package/dist/{types/client → client}/types.d.ts +1 -1
- package/dist/{types/client → client}/utils.d.ts +0 -0
- package/dist/{types/helper → helper}/accepts/accepts.d.ts +0 -0
- package/dist/{types/helper → helper}/accepts/index.d.ts +0 -0
- package/dist/{types/helper → helper}/adapter/index.d.ts +0 -0
- package/dist/{types/helper → helper}/conninfo/index.d.ts +0 -0
- package/dist/{types/helper → helper}/conninfo/types.d.ts +0 -0
- package/dist/{types/helper → helper}/cookie/index.d.ts +0 -0
- package/dist/{types/helper → helper}/css/common.d.ts +0 -0
- package/dist/{types/helper → helper}/css/index.d.ts +0 -0
- package/dist/{types/helper → helper}/dev/index.d.ts +0 -0
- package/dist/{types/helper → helper}/html/index.d.ts +0 -0
- package/dist/{types/helper → helper}/proxy/index.d.ts +0 -0
- package/dist/{types/helper → helper}/route/index.d.ts +0 -0
- package/dist/{types/helper → helper}/ssg/index.d.ts +0 -0
- package/dist/{types/helper → helper}/ssg/plugins.d.ts +0 -0
- package/dist/{types/helper → helper}/ssg/utils.d.ts +0 -0
- package/dist/{types/helper → helper}/streaming/index.d.ts +0 -0
- package/dist/{types/helper → helper}/streaming/sse.d.ts +0 -0
- package/dist/{types/helper → helper}/streaming/stream.d.ts +0 -0
- package/dist/{types/helper → helper}/streaming/text.d.ts +0 -0
- package/dist/{types/helper → helper}/streaming/utils.d.ts +0 -0
- package/dist/{types/helper → helper}/testing/index.d.ts +0 -0
- package/dist/{types/helper → helper}/websocket/index.d.ts +0 -0
- package/dist/{types/http-exception.d.ts → http-exception.d.ts} +0 -0
- package/dist/{types/index.d.ts → index.d.ts} +0 -0
- package/dist/{types/jsx → jsx}/base.d.ts +0 -0
- package/dist/{types/jsx → jsx}/children.d.ts +0 -0
- package/dist/{types/jsx → jsx}/components.d.ts +0 -0
- package/dist/{types/jsx → jsx}/constants.d.ts +0 -0
- package/dist/{types/jsx → jsx}/context.d.ts +0 -0
- package/dist/{types/jsx → jsx}/dom/client.d.ts +0 -0
- package/dist/{types/jsx → jsx}/dom/components.d.ts +0 -0
- package/dist/{types/jsx → jsx}/dom/context.d.ts +0 -0
- package/dist/{types/jsx → jsx}/dom/css.d.ts +0 -0
- package/dist/{types/jsx → jsx}/dom/hooks/index.d.ts +0 -0
- package/dist/{types/jsx → jsx}/dom/index.d.ts +0 -0
- package/dist/{types/jsx → jsx}/dom/intrinsic-element/components.d.ts +0 -0
- package/dist/{types/jsx → jsx}/dom/jsx-dev-runtime.d.ts +0 -0
- package/dist/{types/jsx → jsx}/dom/jsx-runtime.d.ts +0 -0
- package/dist/{types/jsx → jsx}/dom/render.d.ts +0 -0
- package/dist/{types/jsx → jsx}/dom/server.d.ts +0 -0
- package/dist/{types/jsx → jsx}/dom/utils.d.ts +0 -0
- package/dist/{types/jsx → jsx}/hooks/index.d.ts +0 -0
- package/dist/{types/jsx → jsx}/index.d.ts +0 -0
- package/dist/{types/jsx → jsx}/intrinsic-element/common.d.ts +0 -0
- package/dist/{types/jsx → jsx}/intrinsic-element/components.d.ts +0 -0
- package/dist/{types/jsx → jsx}/intrinsic-elements.d.ts +0 -0
- package/dist/{types/jsx → jsx}/jsx-dev-runtime.d.ts +0 -0
- package/dist/{types/jsx → jsx}/jsx-runtime.d.ts +0 -0
- package/dist/{types/jsx → jsx}/streaming.d.ts +0 -0
- package/dist/{types/jsx → jsx}/types.d.ts +0 -0
- package/dist/{types/jsx → jsx}/utils.d.ts +0 -0
- package/dist/{types/middleware → middleware}/body-limit/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/cache/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/combine/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/compress/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/context-storage/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/cors/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/csrf/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/etag/digest.d.ts +0 -0
- package/dist/{types/middleware → middleware}/etag/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/ip-restriction/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/jsx-renderer/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/jwk/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/jwk/jwk.d.ts +0 -0
- package/dist/{types/middleware → middleware}/jwt/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/jwt/jwt.d.ts +0 -0
- package/dist/{types/middleware → middleware}/language/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/language/language.d.ts +0 -0
- package/dist/{types/middleware → middleware}/logger/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/method-not-allowed/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/method-override/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/mount/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/powered-by/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/pretty-json/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/request-id/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/request-id/request-id.d.ts +0 -0
- package/dist/{types/middleware → middleware}/secure-headers/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/secure-headers/permissions-policy.d.ts +0 -0
- package/dist/{types/middleware → middleware}/secure-headers/secure-headers.d.ts +0 -0
- package/dist/{types/middleware → middleware}/serve-static/path.d.ts +0 -0
- package/dist/{types/middleware → middleware}/timeout/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/timing/index.d.ts +0 -0
- package/dist/{types/middleware → middleware}/timing/timing.d.ts +0 -0
- package/dist/{types/middleware → middleware}/trailing-slash/index.d.ts +0 -0
- package/dist/{types/request → request}/constants.d.ts +0 -0
- package/dist/{types/router → router}/linear-router/index.d.ts +0 -0
- package/dist/{types/router → router}/linear-router/router.d.ts +0 -0
- package/dist/{types/router → router}/pattern-router/index.d.ts +0 -0
- package/dist/{types/router → router}/pattern-router/router.d.ts +0 -0
- package/dist/{types/router → router}/reg-exp-router/index.d.ts +0 -0
- package/dist/{types/router → router}/reg-exp-router/matcher.d.ts +0 -0
- package/dist/{types/router → router}/reg-exp-router/node.d.ts +0 -0
- package/dist/{types/router → router}/reg-exp-router/prepared-router.d.ts +0 -0
- package/dist/{types/router → router}/reg-exp-router/router.d.ts +0 -0
- package/dist/{types/router → router}/reg-exp-router/trie.d.ts +0 -0
- package/dist/{types/router → router}/smart-router/index.d.ts +0 -0
- package/dist/{types/router → router}/smart-router/router.d.ts +0 -0
- package/dist/{types/router → router}/trie-router/index.d.ts +0 -0
- package/dist/{types/router → router}/trie-router/node.d.ts +0 -0
- package/dist/{types/router → router}/trie-router/router.d.ts +0 -0
- package/dist/{types/router → router}/utils.d.ts +0 -0
- package/dist/{types/router.d.ts → router.d.ts} +0 -0
- package/dist/{types/types.d.ts → types.d.ts} +1 -1
- /package/dist/{types/utils → utils}/accept.d.ts +0 -0
- /package/dist/{types/utils → utils}/basic-auth.d.ts +0 -0
- /package/dist/{types/utils → utils}/body.d.ts +0 -0
- /package/dist/{types/utils → utils}/compress.d.ts +0 -0
- /package/dist/{types/utils → utils}/concurrent.d.ts +0 -0
- /package/dist/{types/utils → utils}/constants.d.ts +0 -0
- /package/dist/{types/utils → utils}/cookie.d.ts +0 -0
- /package/dist/{types/utils → utils}/crypto.d.ts +0 -0
- /package/dist/{types/utils → utils}/encode.d.ts +0 -0
- /package/dist/{types/utils → utils}/filepath.d.ts +0 -0
- /package/dist/{types/utils → utils}/handler.d.ts +0 -0
- /package/dist/{types/utils → utils}/headers.d.ts +0 -0
- /package/dist/{types/utils → utils}/html.d.ts +0 -0
- /package/dist/{types/utils → utils}/ipaddr.d.ts +0 -0
- /package/dist/{types/utils → utils}/jwt/index.d.ts +0 -0
- /package/dist/{types/utils → utils}/jwt/jwa.d.ts +0 -0
- /package/dist/{types/utils → utils}/jwt/jws.d.ts +0 -0
- /package/dist/{types/utils → utils}/jwt/jwt.d.ts +0 -0
- /package/dist/{types/utils → utils}/jwt/types.d.ts +0 -0
- /package/dist/{types/utils → utils}/jwt/utf8.d.ts +0 -0
- /package/dist/{types/utils → utils}/mime.d.ts +0 -0
- /package/dist/{types/utils → utils}/stream.d.ts +0 -0
- /package/dist/{types/utils → utils}/types.d.ts +0 -0
- /package/dist/{types/validator → validator}/index.d.ts +0 -0
- /package/dist/{types/validator → validator}/utils.d.ts +0 -0
package/README.md
CHANGED
|
@@ -63,9 +63,9 @@ The migration guide is available on [docs/MIGRATION.md](docs/MIGRATION.md).
|
|
|
63
63
|
Contributions Welcome! You can contribute in the following ways.
|
|
64
64
|
|
|
65
65
|
- Create an Issue - Propose a new feature. Report a bug.
|
|
66
|
-
-
|
|
67
|
-
- Create third-party middleware - See [Third-party middleware](docs/CONTRIBUTING.md#third-party-middleware).
|
|
66
|
+
- Build middleware and libraries - Grow the Hono ecosystem.
|
|
68
67
|
- Share - Share your thoughts on the Blog, X, and others.
|
|
68
|
+
- Sponsor - Support the maintainers through GitHub Sponsors: [@yusukebe](https://github.com/sponsors/yusukebe) and [@usualoma](https://github.com/sponsors/usualoma).
|
|
69
69
|
- Make your application - Please try to use Hono.
|
|
70
70
|
|
|
71
71
|
For more details, see [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md).
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Env, ErrorHandler, Next, NotFoundHandler } from "./types.js";
|
|
2
2
|
import { Context } from "./context.js";
|
|
3
3
|
//#region src/compose.d.ts
|
|
4
|
+
export declare const toError: (err: unknown) => Error;
|
|
4
5
|
/**
|
|
5
6
|
* Compose middleware functions into a single function based on `koa-compose` package.
|
|
6
7
|
*
|
package/dist/compose.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
//#region src/compose.ts
|
|
2
|
+
const toError = (err) => err instanceof Error ? err : new Error(typeof err === "string" ? err : void 0, { cause: err });
|
|
2
3
|
/**
|
|
3
4
|
* Compose middleware functions into a single function based on `koa-compose` package.
|
|
4
5
|
*
|
|
@@ -32,11 +33,15 @@ const compose = (middleware, onError, onNotFound) => {
|
|
|
32
33
|
context.req.routeIndex = i;
|
|
33
34
|
} else handler = i === middleware.length && next || void 0;
|
|
34
35
|
if (handler) try {
|
|
35
|
-
res = await handler(context, () =>
|
|
36
|
+
res = await handler(context, () => {
|
|
37
|
+
const routeIndex = context.req.routeIndex;
|
|
38
|
+
return dispatch(i + 1).finally(() => context.req.routeIndex = routeIndex);
|
|
39
|
+
});
|
|
36
40
|
} catch (err) {
|
|
37
|
-
if (
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
if (onError) {
|
|
42
|
+
const error = toError(err);
|
|
43
|
+
context.error = error;
|
|
44
|
+
res = await onError(error, context);
|
|
40
45
|
isError = true;
|
|
41
46
|
} else throw err;
|
|
42
47
|
}
|
|
@@ -47,4 +52,4 @@ const compose = (middleware, onError, onNotFound) => {
|
|
|
47
52
|
};
|
|
48
53
|
};
|
|
49
54
|
//#endregion
|
|
50
|
-
export { compose };
|
|
55
|
+
export { compose, toError };
|
|
@@ -268,14 +268,14 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
268
268
|
* })
|
|
269
269
|
* ```
|
|
270
270
|
*/
|
|
271
|
-
render: Renderer;
|
|
271
|
+
get render(): Renderer;
|
|
272
272
|
/**
|
|
273
273
|
* Sets the layout for the response.
|
|
274
274
|
*
|
|
275
275
|
* @param layout - The layout to set.
|
|
276
276
|
* @returns The layout function.
|
|
277
277
|
*/
|
|
278
|
-
setLayout: (layout: Layout<PropsForRenderer & {
|
|
278
|
+
get setLayout(): (layout: Layout<PropsForRenderer & {
|
|
279
279
|
Layout: Layout;
|
|
280
280
|
}>) => Layout<PropsForRenderer & {
|
|
281
281
|
Layout: Layout;
|
|
@@ -285,7 +285,7 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
285
285
|
*
|
|
286
286
|
* @returns The current layout function.
|
|
287
287
|
*/
|
|
288
|
-
getLayout: () => Layout<PropsForRenderer & {
|
|
288
|
+
get getLayout(): () => Layout<PropsForRenderer & {
|
|
289
289
|
Layout: Layout;
|
|
290
290
|
}> | undefined;
|
|
291
291
|
/**
|
|
@@ -309,7 +309,7 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
309
309
|
* })
|
|
310
310
|
* ```
|
|
311
311
|
*/
|
|
312
|
-
setRenderer: (renderer: Renderer) => void;
|
|
312
|
+
get setRenderer(): (renderer: Renderer) => void;
|
|
313
313
|
/**
|
|
314
314
|
* `.header()` can set headers.
|
|
315
315
|
*
|
|
@@ -330,8 +330,8 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
330
330
|
* })
|
|
331
331
|
* ```
|
|
332
332
|
*/
|
|
333
|
-
header: SetHeaders;
|
|
334
|
-
status: (status: StatusCode) => void;
|
|
333
|
+
get header(): SetHeaders;
|
|
334
|
+
get status(): (status: StatusCode) => void;
|
|
335
335
|
/**
|
|
336
336
|
* `.set()` can set the value specified by the key.
|
|
337
337
|
*
|
|
@@ -345,7 +345,7 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
345
345
|
* })
|
|
346
346
|
* ```
|
|
347
347
|
*/
|
|
348
|
-
set: Set<IsAny<E> extends true ? {
|
|
348
|
+
get set(): Set<IsAny<E> extends true ? {
|
|
349
349
|
Variables: ContextVariableMap & Record<PropertyKey, any>;
|
|
350
350
|
} : E>;
|
|
351
351
|
/**
|
|
@@ -361,7 +361,7 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
361
361
|
* })
|
|
362
362
|
* ```
|
|
363
363
|
*/
|
|
364
|
-
get: Get<IsAny<E> extends true ? {
|
|
364
|
+
get get(): Get<IsAny<E> extends true ? {
|
|
365
365
|
Variables: ContextVariableMap & Record<PropertyKey, any>;
|
|
366
366
|
} : E>;
|
|
367
367
|
/**
|
|
@@ -375,7 +375,7 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
375
375
|
* ```
|
|
376
376
|
*/
|
|
377
377
|
get var(): Readonly<ContextVariableMap & (IsAny<E['Variables']> extends true ? Record<string, any> : E['Variables'])>;
|
|
378
|
-
newResponse: NewResponse;
|
|
378
|
+
get newResponse(): NewResponse;
|
|
379
379
|
/**
|
|
380
380
|
* `.body()` can return the HTTP response.
|
|
381
381
|
* You can set headers with `.header()` and set HTTP status code with `.status`.
|
|
@@ -397,7 +397,7 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
397
397
|
* })
|
|
398
398
|
* ```
|
|
399
399
|
*/
|
|
400
|
-
body: BodyRespond;
|
|
400
|
+
get body(): BodyRespond;
|
|
401
401
|
/**
|
|
402
402
|
* `.text()` can render text as `Content-Type:text/plain`.
|
|
403
403
|
*
|
|
@@ -410,7 +410,7 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
410
410
|
* })
|
|
411
411
|
* ```
|
|
412
412
|
*/
|
|
413
|
-
text: TextRespond;
|
|
413
|
+
get text(): TextRespond;
|
|
414
414
|
/**
|
|
415
415
|
* `.json()` can render JSON as `Content-Type:application/json`.
|
|
416
416
|
*
|
|
@@ -423,8 +423,8 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
423
423
|
* })
|
|
424
424
|
* ```
|
|
425
425
|
*/
|
|
426
|
-
json: JSONRespond;
|
|
427
|
-
html: HTMLRespond;
|
|
426
|
+
get json(): JSONRespond;
|
|
427
|
+
get html(): HTMLRespond;
|
|
428
428
|
/**
|
|
429
429
|
* `.redirect()` can Redirect, default status code is 302.
|
|
430
430
|
*
|
|
@@ -440,7 +440,7 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
440
440
|
* })
|
|
441
441
|
* ```
|
|
442
442
|
*/
|
|
443
|
-
redirect: <T extends RedirectStatusCode = 302>(location: string | URL, status?: T) => Response & TypedResponse<undefined, T,
|
|
443
|
+
get redirect(): <T extends RedirectStatusCode = 302>(location: string | URL, status?: T) => Response & TypedResponse<undefined, T, 'redirect'>;
|
|
444
444
|
/**
|
|
445
445
|
* `.notFound()` can return the Not Found Response.
|
|
446
446
|
*
|
|
@@ -453,7 +453,7 @@ export declare class Context<E extends Env = any, P extends string = any, I exte
|
|
|
453
453
|
* })
|
|
454
454
|
* ```
|
|
455
455
|
*/
|
|
456
|
-
notFound: () => ReturnType<NotFoundHandler>;
|
|
456
|
+
get notFound(): () => ReturnType<NotFoundHandler>;
|
|
457
457
|
}
|
|
458
458
|
//#endregion
|
|
459
459
|
export {};
|
package/dist/context.js
CHANGED
|
@@ -135,23 +135,29 @@ var Context = class {
|
|
|
135
135
|
* })
|
|
136
136
|
* ```
|
|
137
137
|
*/
|
|
138
|
-
render
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
138
|
+
get render() {
|
|
139
|
+
return (...args) => {
|
|
140
|
+
this.#renderer ??= (content) => this.html(content);
|
|
141
|
+
return this.#renderer(...args);
|
|
142
|
+
};
|
|
143
|
+
}
|
|
142
144
|
/**
|
|
143
145
|
* Sets the layout for the response.
|
|
144
146
|
*
|
|
145
147
|
* @param layout - The layout to set.
|
|
146
148
|
* @returns The layout function.
|
|
147
149
|
*/
|
|
148
|
-
setLayout
|
|
150
|
+
get setLayout() {
|
|
151
|
+
return (layout) => this.#layout = layout;
|
|
152
|
+
}
|
|
149
153
|
/**
|
|
150
154
|
* Gets the current layout for the response.
|
|
151
155
|
*
|
|
152
156
|
* @returns The current layout function.
|
|
153
157
|
*/
|
|
154
|
-
getLayout
|
|
158
|
+
get getLayout() {
|
|
159
|
+
return () => this.#layout;
|
|
160
|
+
}
|
|
155
161
|
/**
|
|
156
162
|
* `.setRenderer()` can set the layout in the custom middleware.
|
|
157
163
|
*
|
|
@@ -173,9 +179,11 @@ var Context = class {
|
|
|
173
179
|
* })
|
|
174
180
|
* ```
|
|
175
181
|
*/
|
|
176
|
-
setRenderer
|
|
177
|
-
|
|
178
|
-
|
|
182
|
+
get setRenderer() {
|
|
183
|
+
return (renderer) => {
|
|
184
|
+
this.#renderer = renderer;
|
|
185
|
+
};
|
|
186
|
+
}
|
|
179
187
|
/**
|
|
180
188
|
* `.header()` can set headers.
|
|
181
189
|
*
|
|
@@ -196,16 +204,20 @@ var Context = class {
|
|
|
196
204
|
* })
|
|
197
205
|
* ```
|
|
198
206
|
*/
|
|
199
|
-
header
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
207
|
+
get header() {
|
|
208
|
+
return (name, value, options) => {
|
|
209
|
+
if (this.finalized) this.#res = createResponseInstance(this.#res.body, this.#res);
|
|
210
|
+
const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();
|
|
211
|
+
if (value === void 0) headers.delete(name);
|
|
212
|
+
else if (options?.append) headers.append(name, value);
|
|
213
|
+
else headers.set(name, value);
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
get status() {
|
|
217
|
+
return (status) => {
|
|
218
|
+
this.#status = status;
|
|
219
|
+
};
|
|
220
|
+
}
|
|
209
221
|
/**
|
|
210
222
|
* `.set()` can set the value specified by the key.
|
|
211
223
|
*
|
|
@@ -219,10 +231,12 @@ var Context = class {
|
|
|
219
231
|
* })
|
|
220
232
|
* ```
|
|
221
233
|
*/
|
|
222
|
-
set
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
234
|
+
get set() {
|
|
235
|
+
return (key, value) => {
|
|
236
|
+
this.#var ??= /* @__PURE__ */ new Map();
|
|
237
|
+
this.#var.set(key, value);
|
|
238
|
+
};
|
|
239
|
+
}
|
|
226
240
|
/**
|
|
227
241
|
* `.get()` can use the value specified by the key.
|
|
228
242
|
*
|
|
@@ -236,9 +250,11 @@ var Context = class {
|
|
|
236
250
|
* })
|
|
237
251
|
* ```
|
|
238
252
|
*/
|
|
239
|
-
get
|
|
240
|
-
return
|
|
241
|
-
|
|
253
|
+
get get() {
|
|
254
|
+
return (key) => {
|
|
255
|
+
return this.#var ? this.#var.get(key) : void 0;
|
|
256
|
+
};
|
|
257
|
+
}
|
|
242
258
|
/**
|
|
243
259
|
* `.var` can access the value of a variable.
|
|
244
260
|
*
|
|
@@ -283,7 +299,9 @@ var Context = class {
|
|
|
283
299
|
headers: responseHeaders ?? headers
|
|
284
300
|
});
|
|
285
301
|
}
|
|
286
|
-
newResponse
|
|
302
|
+
get newResponse() {
|
|
303
|
+
return (...args) => this.#newResponse(...args);
|
|
304
|
+
}
|
|
287
305
|
/**
|
|
288
306
|
* `.body()` can return the HTTP response.
|
|
289
307
|
* You can set headers with `.header()` and set HTTP status code with `.status`.
|
|
@@ -305,7 +323,9 @@ var Context = class {
|
|
|
305
323
|
* })
|
|
306
324
|
* ```
|
|
307
325
|
*/
|
|
308
|
-
body
|
|
326
|
+
get body() {
|
|
327
|
+
return (data, arg, headers) => this.#newResponse(data, arg, headers);
|
|
328
|
+
}
|
|
309
329
|
/**
|
|
310
330
|
* `.text()` can render text as `Content-Type:text/plain`.
|
|
311
331
|
*
|
|
@@ -318,9 +338,11 @@ var Context = class {
|
|
|
318
338
|
* })
|
|
319
339
|
* ```
|
|
320
340
|
*/
|
|
321
|
-
text
|
|
322
|
-
return
|
|
323
|
-
|
|
341
|
+
get text() {
|
|
342
|
+
return (text, arg, headers) => {
|
|
343
|
+
return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(text, arg, setDefaultContentType(TEXT_PLAIN, headers));
|
|
344
|
+
};
|
|
345
|
+
}
|
|
324
346
|
/**
|
|
325
347
|
* `.json()` can render JSON as `Content-Type:application/json`.
|
|
326
348
|
*
|
|
@@ -333,13 +355,19 @@ var Context = class {
|
|
|
333
355
|
* })
|
|
334
356
|
* ```
|
|
335
357
|
*/
|
|
336
|
-
json
|
|
337
|
-
return
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
}
|
|
358
|
+
get json() {
|
|
359
|
+
return (object, arg, headers) => {
|
|
360
|
+
const body = JSON.stringify(object);
|
|
361
|
+
if (body === void 0) throw new TypeError("Value is not JSON serializable");
|
|
362
|
+
return this.#newResponse(body, arg, setDefaultContentType("application/json", headers));
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
get html() {
|
|
366
|
+
return (html, arg, headers) => {
|
|
367
|
+
const res = (html) => this.#newResponse(html, arg, setDefaultContentType("text/html; charset=UTF-8", headers));
|
|
368
|
+
return typeof html === "object" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);
|
|
369
|
+
};
|
|
370
|
+
}
|
|
343
371
|
/**
|
|
344
372
|
* `.redirect()` can Redirect, default status code is 302.
|
|
345
373
|
*
|
|
@@ -355,11 +383,13 @@ var Context = class {
|
|
|
355
383
|
* })
|
|
356
384
|
* ```
|
|
357
385
|
*/
|
|
358
|
-
redirect
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
386
|
+
get redirect() {
|
|
387
|
+
return (location, status) => {
|
|
388
|
+
const locationString = String(location);
|
|
389
|
+
this.header("Location", !/[^\x00-\xFF]/.test(locationString) ? locationString : encodeURI(locationString));
|
|
390
|
+
return this.newResponse(null, status ?? 302);
|
|
391
|
+
};
|
|
392
|
+
}
|
|
363
393
|
/**
|
|
364
394
|
* `.notFound()` can return the Not Found Response.
|
|
365
395
|
*
|
|
@@ -372,10 +402,12 @@ var Context = class {
|
|
|
372
402
|
* })
|
|
373
403
|
* ```
|
|
374
404
|
*/
|
|
375
|
-
notFound
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
405
|
+
get notFound() {
|
|
406
|
+
return () => {
|
|
407
|
+
this.#notFoundHandler ??= () => createResponseInstance();
|
|
408
|
+
return this.#notFoundHandler(this);
|
|
409
|
+
};
|
|
410
|
+
}
|
|
379
411
|
};
|
|
380
412
|
//#endregion
|
|
381
413
|
export { Context, TEXT_PLAIN };
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { ContentfulStatusCode } from "../../utils/http-status.js";
|
|
2
|
+
import { JSONParsed } from "../../utils/types.js";
|
|
3
|
+
import { Env, FormValue, Handler, IntersectNonAnyTypes, MiddlewareHandler, TypedResponse, ValidationTargets } from "../../types.js";
|
|
4
|
+
import { Context } from "../../context.js";
|
|
5
|
+
import { HtmlEscaped } from "../../utils/html.js";
|
|
6
|
+
import { InferInput } from "../../validator/utils.js";
|
|
7
|
+
//#region src/helper/factory/define-handler.d.ts
|
|
8
|
+
type StandardSchemaIssue = {
|
|
9
|
+
readonly message: string;
|
|
10
|
+
readonly path?: ReadonlyArray<PropertyKey | {
|
|
11
|
+
readonly key: PropertyKey;
|
|
12
|
+
}> | undefined;
|
|
13
|
+
};
|
|
14
|
+
type StandardSchemaResult<Output> = {
|
|
15
|
+
readonly value: Output;
|
|
16
|
+
readonly issues?: undefined;
|
|
17
|
+
} | {
|
|
18
|
+
readonly issues: ReadonlyArray<StandardSchemaIssue>;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* The part of the Standard Schema interface used by `defineHandler()`.
|
|
22
|
+
* @see {@link https://standardschema.dev/}
|
|
23
|
+
*/
|
|
24
|
+
export type StandardSchema<Input = unknown, Output = Input> = {
|
|
25
|
+
readonly '~standard': {
|
|
26
|
+
readonly validate: (value: unknown) => StandardSchemaResult<Output> | Promise<StandardSchemaResult<Output>>;
|
|
27
|
+
readonly types?: {
|
|
28
|
+
readonly input: Input;
|
|
29
|
+
readonly output: Output;
|
|
30
|
+
} | undefined;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
type AnyStandardSchema = StandardSchema<any, any>;
|
|
34
|
+
type AnyResponse = Response | TypedResponse<any, any, any>;
|
|
35
|
+
/**
|
|
36
|
+
* A Standard Schema or a validation function for `Value`.
|
|
37
|
+
* `T` is the schema itself, or the output of the function. It is `never` when not specified.
|
|
38
|
+
*/
|
|
39
|
+
type Validation<Value, T> = (T & AnyStandardSchema) | ((value: Value, c: Context<any, any, any>) => T | Promise<T>);
|
|
40
|
+
type ResponseValidation<In, Out> = (Out & StandardSchema<In, any>) | ((value: In, c: Context<any, any, any>) => Out | Promise<Out>);
|
|
41
|
+
/**
|
|
42
|
+
* A Response the handler can return. A JSON Response by `c.json()` is not accepted,
|
|
43
|
+
* because it bypasses the response validation. Return the value instead.
|
|
44
|
+
*/
|
|
45
|
+
type NonJSONResponse = Response & {
|
|
46
|
+
readonly _format?: 'text' | 'redirect' | 'body';
|
|
47
|
+
};
|
|
48
|
+
type InputOf<T> = T extends StandardSchema<infer I, any> ? I : Exclude<T, AnyResponse>;
|
|
49
|
+
type OutputOf<T> = T extends StandardSchema<any, infer O> ? O : Exclude<T, AnyResponse>;
|
|
50
|
+
type RequestTarget = keyof ValidationTargets;
|
|
51
|
+
type Targets = { [K in RequestTarget]: unknown; };
|
|
52
|
+
type ValidatedTarget<T extends Targets> = { [K in RequestTarget]: [T[K]] extends [never] ? never : K; }[RequestTarget];
|
|
53
|
+
type ValidatedInput<T extends Targets> = {
|
|
54
|
+
in: { [K in ValidatedTarget<T>]: K extends 'json' ? InputOf<T[K]> : InferInput<InputOf<T[K]>, K, FormValue>; };
|
|
55
|
+
out: { [K in ValidatedTarget<T>]: OutputOf<T[K]>; };
|
|
56
|
+
};
|
|
57
|
+
/** The validated values, passed to the handler as the second argument */
|
|
58
|
+
type HandlerInput<T extends Targets> = { [K in ValidatedTarget<T>]: OutputOf<T[K]>; };
|
|
59
|
+
type JSONResponseOf<T> = Response & TypedResponse<JSONParsed<T>, ContentfulStatusCode, 'json'>;
|
|
60
|
+
/** The Response that `toResponse()` converts a returned value to */
|
|
61
|
+
type ConvertedResponse<R> = [unknown] extends [R] ? Response : R extends AnyResponse ? R : R extends null | undefined | void ? Response & TypedResponse<null, 204, 'body'> : R extends string | HtmlEscaped ? Response : JSONResponseOf<R>;
|
|
62
|
+
type AnyMiddleware = MiddlewareHandler<any, any, any>;
|
|
63
|
+
type MiddlewareEnvs<M extends AnyMiddleware[]> = { [K in keyof M]: M[K] extends MiddlewareHandler<infer ME, any, any> ? ME : never; };
|
|
64
|
+
/**
|
|
65
|
+
* An issue in the failure response. `path` is dot-joined, e.g. `user.email`.
|
|
66
|
+
* The input value is not included.
|
|
67
|
+
*/
|
|
68
|
+
export type ValidationIssue = {
|
|
69
|
+
message: string;
|
|
70
|
+
path?: string;
|
|
71
|
+
};
|
|
72
|
+
/** The issues of one validation target in the failure response */
|
|
73
|
+
export type ValidationFailure = {
|
|
74
|
+
slot: RequestTarget | 'response';
|
|
75
|
+
issues: ValidationIssue[];
|
|
76
|
+
};
|
|
77
|
+
type ValidatedHandlerOptions<Param, Query, Header, Cookie, Form, Json, ResponseIn, ResponseOut> = {
|
|
78
|
+
param?: Validation<ValidationTargets['param'], Param>;
|
|
79
|
+
query?: Validation<ValidationTargets['query'], Query>;
|
|
80
|
+
header?: Validation<ValidationTargets['header'], Header>;
|
|
81
|
+
cookie?: Validation<ValidationTargets['cookie'], Cookie>;
|
|
82
|
+
form?: Validation<ValidationTargets['form'], Form>;
|
|
83
|
+
json?: Validation<ValidationTargets['json'], Json>;
|
|
84
|
+
response?: ResponseValidation<ResponseIn, ResponseOut>;
|
|
85
|
+
};
|
|
86
|
+
type ValidatedHandler<E extends Env, P extends string, T extends Targets, ResponseOut, R> = Handler<E, P, ValidatedInput<T>, Promise<[ResponseOut] extends [never] ? ConvertedResponse<Awaited<R>> : JSONResponseOf<OutputOf<ResponseOut>>>>;
|
|
87
|
+
export interface DefineHandler<E extends Env, P extends string> {
|
|
88
|
+
/**
|
|
89
|
+
* Defines a handler, with middleware before it. The returned value is converted to a Response.
|
|
90
|
+
*/
|
|
91
|
+
<E2 extends Env = E, P2 extends string = P, M extends AnyMiddleware[] = [], R = unknown>(...args: [...middleware: M, handler: (c: Context<IntersectNonAnyTypes<[E2, ...MiddlewareEnvs<M>]>, P2>) => R]): Handler<E2, P2, {}, Promise<ConvertedResponse<Awaited<R>>>>;
|
|
92
|
+
/**
|
|
93
|
+
* Defines a handler with request and response validation, with middleware before it.
|
|
94
|
+
*/
|
|
95
|
+
<Param = never, Query = never, Header = never, Cookie = never, Form = never, Json = never, ResponseIn = unknown, ResponseOut = never, T extends Targets = {
|
|
96
|
+
param: Param;
|
|
97
|
+
query: Query;
|
|
98
|
+
header: Header;
|
|
99
|
+
cookie: Cookie;
|
|
100
|
+
form: Form;
|
|
101
|
+
json: Json;
|
|
102
|
+
}>(options: ValidatedHandlerOptions<Param, Query, Header, Cookie, Form, Json, ResponseIn, ResponseOut>): <E2 extends Env = E, P2 extends string = P, M extends AnyMiddleware[] = [], R extends ResponseIn | NonJSONResponse | Promise<ResponseIn | NonJSONResponse> = ResponseIn>(...args: [...middleware: M, handler: (c: Context<IntersectNonAnyTypes<[E2, ...MiddlewareEnvs<M>]>, P2, ValidatedInput<T>>, input: HandlerInput<T>) => R]) => ValidatedHandler<E2, P2, T, ResponseOut, R>;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* `defineHandler()` defines a handler. A value returned from the handler is converted to a
|
|
106
|
+
* Response: an object is returned as JSON, a string or JSX as HTML, and `null` or `undefined`
|
|
107
|
+
* as `204 No Content`. A `Response` is returned as is. The status is set with `c.status()`, and
|
|
108
|
+
* it is not in the types. Return `c.json()` to have the status in the types.
|
|
109
|
+
*
|
|
110
|
+
* With options, each request target (`param`, `query`, `json`, `form`, `header`, `cookie`)
|
|
111
|
+
* is validated before the handler runs. The validated values are passed to the handler as
|
|
112
|
+
* the second argument, and are also available through `c.req.valid()`.
|
|
113
|
+
* A value returned from the handler is validated with `response` and returned as JSON.
|
|
114
|
+
*
|
|
115
|
+
* Each validation accepts a Standard Schema or a validation function.
|
|
116
|
+
* When a Standard Schema fails, an `HTTPException` is thrown with status 400 for the request
|
|
117
|
+
* and 500 for the response, so `onError` can handle it. Its `res` is a JSON response of
|
|
118
|
+
* `{ error, issues }`, and its `cause` is `{ issues }` with the raw Standard Schema issues.
|
|
119
|
+
*
|
|
120
|
+
* Middleware passed before the handler runs first, around the validation. Its Env flows into
|
|
121
|
+
* the handler, so `c.get()` is typed. Otherwise, use `createFactory<Env>().defineHandler`, or
|
|
122
|
+
* pass the Env and the path as type arguments.
|
|
123
|
+
*
|
|
124
|
+
* @see {@link https://hono.dev/docs/helpers/factory#definehandler}
|
|
125
|
+
*
|
|
126
|
+
* @experimental
|
|
127
|
+
* `defineHandler()` is an experimental feature.
|
|
128
|
+
* The API might be changed.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```ts
|
|
132
|
+
* app.get('/ping', defineHandler(() => ({ pong: true })))
|
|
133
|
+
* app.get('/me', defineHandler(auth, (c) => c.get('user')))
|
|
134
|
+
*
|
|
135
|
+
* app.post(
|
|
136
|
+
* '/users/:id',
|
|
137
|
+
* defineHandler({
|
|
138
|
+
* param: ParamSchema,
|
|
139
|
+
* json: BodySchema,
|
|
140
|
+
* response: UserSchema,
|
|
141
|
+
* })(async (c, { param, json }) => {
|
|
142
|
+
* c.status(201)
|
|
143
|
+
* return { id: param.id, ...json }
|
|
144
|
+
* })
|
|
145
|
+
* )
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
export declare const defineHandler: DefineHandler<any, any>;
|
|
149
|
+
//#endregion
|
|
150
|
+
export {};
|