hono 4.13.13 → 5.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/client/fetch-result-please.js +0 -22
- package/dist/client/utils.js +0 -7
- package/dist/{types/compose.d.ts → compose.d.ts} +5 -3
- package/dist/compose.js +18 -31
- package/dist/context/constants.d.ts +3 -0
- package/dist/context/constants.js +4 -0
- package/dist/{types/context.d.ts → context.d.ts} +56 -15
- package/dist/context.js +83 -277
- package/dist/helper/accepts/accepts.js +0 -13
- package/dist/helper/css/common.js +0 -10
- package/dist/helper/css/index.js +0 -38
- package/dist/{types/helper → helper}/dev/index.d.ts +5 -2
- package/dist/helper/dev/index.js +3 -3
- package/dist/helper/factory/define-handler.d.ts +150 -0
- package/dist/helper/factory/define-handler.js +117 -0
- package/dist/{types/helper → helper}/factory/index.d.ts +30 -1
- package/dist/helper/factory/index.js +7 -7
- package/dist/helper/html/index.js +0 -4
- package/dist/helper/proxy/index.js +0 -49
- package/dist/helper/route/index.js +0 -90
- package/dist/{types/helper → helper}/ssg/middleware.d.ts +0 -6
- package/dist/helper/ssg/middleware.js +1 -34
- package/dist/helper/ssg/plugins.js +0 -24
- package/dist/{types/helper → helper}/ssg/ssg.d.ts +0 -12
- package/dist/helper/ssg/ssg.js +0 -18
- package/dist/helper/ssg/utils.js +0 -5
- package/dist/helper/testing/index.js +0 -4
- package/dist/helper/websocket/index.js +0 -6
- package/dist/{types/hono-base.d.ts → hono-base.d.ts} +47 -95
- package/dist/hono-base.js +63 -228
- package/dist/{types/hono.d.ts → hono.d.ts} +1 -1
- package/dist/hono.js +0 -13
- package/dist/http-exception.js +0 -36
- package/dist/index.js +0 -15
- package/dist/jsx/components.js +0 -5
- package/dist/jsx/context.js +0 -34
- package/dist/jsx/dom/client.js +0 -14
- package/dist/jsx/dom/css.js +0 -34
- package/dist/jsx/dom/hooks/index.js +0 -21
- package/dist/jsx/dom/index.js +0 -4
- package/dist/jsx/dom/server.js +0 -12
- package/dist/jsx/index.js +0 -4
- package/dist/jsx/streaming.js +0 -26
- package/dist/{types/middleware → middleware}/basic-auth/index.d.ts +4 -3
- package/dist/middleware/basic-auth/index.js +0 -49
- package/dist/{types/middleware → middleware}/bearer-auth/index.d.ts +4 -27
- package/dist/middleware/bearer-auth/index.js +3 -39
- package/dist/middleware/body-limit/index.js +0 -32
- package/dist/middleware/cache/index.js +0 -31
- package/dist/middleware/combine/index.js +0 -80
- package/dist/middleware/compress/index.js +0 -24
- package/dist/middleware/context-storage/index.js +0 -35
- package/dist/middleware/cors/index.js +0 -39
- package/dist/middleware/csrf/index.js +0 -62
- package/dist/middleware/etag/index.js +0 -29
- package/dist/middleware/ip-restriction/index.js +0 -41
- package/dist/middleware/jsx-renderer/index.js +0 -58
- package/dist/middleware/jwk/jwk.js +0 -31
- package/dist/middleware/jwt/jwt.js +0 -32
- package/dist/middleware/language/language.js +0 -60
- package/dist/middleware/logger/index.js +6 -24
- package/dist/middleware/method-not-allowed/index.js +1 -36
- package/dist/middleware/method-override/index.js +0 -25
- package/dist/middleware/mount/index.js +0 -32
- package/dist/middleware/powered-by/index.js +0 -15
- package/dist/middleware/pretty-json/index.js +0 -18
- package/dist/middleware/request-id/request-id.js +0 -22
- package/dist/middleware/secure-headers/secure-headers.js +0 -32
- package/dist/{types/middleware → middleware}/serve-static/index.d.ts +0 -4
- package/dist/middleware/serve-static/index.js +0 -3
- package/dist/middleware/serve-static/path.js +0 -4
- package/dist/middleware/timeout/index.js +0 -22
- package/dist/middleware/timing/timing.js +0 -95
- package/dist/middleware/trailing-slash/index.js +0 -50
- package/dist/{types/preset → preset}/quick.d.ts +1 -1
- package/dist/preset/quick.js +0 -4
- package/dist/{types/preset → preset}/tiny.d.ts +1 -1
- package/dist/preset/tiny.js +0 -4
- package/dist/{types/request.d.ts → request.d.ts} +3 -48
- package/dist/request.js +0 -205
- package/dist/router/linear-router/router.js +19 -13
- package/dist/router/pattern-router/router.js +3 -3
- package/dist/router/reg-exp-router/node.js +9 -11
- package/dist/router/reg-exp-router/trie.js +0 -5
- package/dist/router/trie-router/node.js +5 -5
- package/dist/router.js +0 -19
- package/dist/{types/types.d.ts → types.d.ts} +33 -2
- package/dist/utils/body.js +0 -30
- package/dist/utils/buffer.d.ts +11 -0
- package/dist/utils/buffer.js +1 -12
- package/dist/utils/color.d.ts +16 -0
- package/dist/utils/color.js +4 -33
- package/dist/utils/compress.js +0 -7
- package/dist/utils/concurrent.js +0 -4
- package/dist/utils/constants.js +0 -3
- package/dist/utils/cookie.js +0 -4
- package/dist/utils/encode.js +0 -4
- package/dist/utils/handler.js +0 -4
- package/dist/utils/html.js +0 -4
- package/dist/{types/utils → utils}/http-status.d.ts +1 -9
- package/dist/utils/ipaddr.js +0 -39
- package/dist/utils/jwt/index.js +0 -4
- package/dist/utils/jwt/jwa.js +0 -5
- package/dist/utils/jwt/jws.js +0 -5
- package/dist/utils/jwt/jwt.js +0 -5
- package/dist/utils/jwt/types.js +0 -4
- package/dist/utils/jwt/utf8.js +0 -4
- package/dist/utils/mime.js +0 -4
- package/dist/utils/stream.js +0 -14
- package/dist/{types/utils → utils}/url.d.ts +0 -5
- package/dist/utils/url.js +1 -30
- package/dist/{types/validator → validator}/validator.d.ts +5 -0
- package/dist/validator/validator.js +42 -49
- package/package.json +142 -488
- 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}/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/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
|
@@ -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 {};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { HTTPException } from "../../http-exception.js";
|
|
2
|
+
import { getValidationTarget } from "../../validator/validator.js";
|
|
3
|
+
//#region src/helper/factory/define-handler.ts
|
|
4
|
+
const requestTargets = [
|
|
5
|
+
"param",
|
|
6
|
+
"query",
|
|
7
|
+
"header",
|
|
8
|
+
"cookie",
|
|
9
|
+
"form",
|
|
10
|
+
"json"
|
|
11
|
+
];
|
|
12
|
+
const isStandardSchema = (v) => (typeof v === "object" || typeof v === "function") && v !== null && "~standard" in v;
|
|
13
|
+
const toValidationIssues = (issues) => issues.map(({ message, path }) => path ? {
|
|
14
|
+
message,
|
|
15
|
+
path: path.map((p) => String(typeof p === "object" ? p.key : p)).join(".")
|
|
16
|
+
} : { message });
|
|
17
|
+
const toValidator = (target, v) => isStandardSchema(v) ? {
|
|
18
|
+
target,
|
|
19
|
+
schema: v["~standard"].validate
|
|
20
|
+
} : {
|
|
21
|
+
target,
|
|
22
|
+
fn: v
|
|
23
|
+
};
|
|
24
|
+
const toResponse = (c, result) => {
|
|
25
|
+
if (result instanceof Response) return result;
|
|
26
|
+
if (result === null || result === void 0) return c.body(null, 204);
|
|
27
|
+
return typeof result === "string" || result.isEscaped ? c.html(result) : c.json(result);
|
|
28
|
+
};
|
|
29
|
+
const defineHandler = ((...args) => {
|
|
30
|
+
if (typeof args[0] === "function") return compose(args, async (c) => toResponse(c, await args[args.length - 1](c)));
|
|
31
|
+
const options = args[0];
|
|
32
|
+
const validators = requestTargets.filter((target) => options[target]).map((target) => toValidator(target, options[target]));
|
|
33
|
+
const response = options.response && toValidator("json", options.response);
|
|
34
|
+
return (...args) => {
|
|
35
|
+
const handler = args[args.length - 1];
|
|
36
|
+
const run = async (c) => {
|
|
37
|
+
const input = {};
|
|
38
|
+
const failures = [];
|
|
39
|
+
const issues = [];
|
|
40
|
+
for (const { target, schema, fn } of validators) {
|
|
41
|
+
let value = getValidationTarget(c, target);
|
|
42
|
+
if (value instanceof Promise) value = await value;
|
|
43
|
+
if (schema) {
|
|
44
|
+
let result = schema(value);
|
|
45
|
+
if (result instanceof Promise) result = await result;
|
|
46
|
+
if (result.issues) {
|
|
47
|
+
failures.push({
|
|
48
|
+
slot: target,
|
|
49
|
+
issues: toValidationIssues(result.issues)
|
|
50
|
+
});
|
|
51
|
+
issues.push({
|
|
52
|
+
slot: target,
|
|
53
|
+
issues: result.issues
|
|
54
|
+
});
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
value = result.value;
|
|
58
|
+
} else {
|
|
59
|
+
value = fn(value, c);
|
|
60
|
+
if (value instanceof Promise) value = await value;
|
|
61
|
+
if (value instanceof Response) return value;
|
|
62
|
+
}
|
|
63
|
+
c.req.addValidatedData(target, value);
|
|
64
|
+
input[target] = value;
|
|
65
|
+
}
|
|
66
|
+
if (failures.length) throw new HTTPException(400, {
|
|
67
|
+
res: c.json({
|
|
68
|
+
error: "Validation failed",
|
|
69
|
+
issues: failures
|
|
70
|
+
}, 400),
|
|
71
|
+
cause: { issues }
|
|
72
|
+
});
|
|
73
|
+
let result = handler(c, input);
|
|
74
|
+
if (result instanceof Promise) result = await result;
|
|
75
|
+
if (result instanceof Response) return result;
|
|
76
|
+
if (response) {
|
|
77
|
+
if (response.schema) {
|
|
78
|
+
let validated = response.schema(result);
|
|
79
|
+
if (validated instanceof Promise) validated = await validated;
|
|
80
|
+
if (validated.issues) throw new HTTPException(500, {
|
|
81
|
+
res: c.json({ error: "Response validation failed" }, 500),
|
|
82
|
+
cause: { issues: [{
|
|
83
|
+
slot: "response",
|
|
84
|
+
issues: validated.issues
|
|
85
|
+
}] }
|
|
86
|
+
});
|
|
87
|
+
result = validated.value;
|
|
88
|
+
} else {
|
|
89
|
+
result = response.fn(result, c);
|
|
90
|
+
if (result instanceof Promise) result = await result;
|
|
91
|
+
if (result instanceof Response) return result;
|
|
92
|
+
}
|
|
93
|
+
return c.json(result);
|
|
94
|
+
}
|
|
95
|
+
return toResponse(c, result);
|
|
96
|
+
};
|
|
97
|
+
return Object.assign(compose(args, run), { validations: options });
|
|
98
|
+
};
|
|
99
|
+
});
|
|
100
|
+
const compose = (args, run) => {
|
|
101
|
+
const middleware = args.slice(0, -1);
|
|
102
|
+
if (!middleware.length) return run;
|
|
103
|
+
return async (c) => {
|
|
104
|
+
const dispatch = async (i) => {
|
|
105
|
+
if (i === middleware.length) {
|
|
106
|
+
c.res = await run(c);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const res = await middleware[i](c, () => dispatch(i + 1));
|
|
110
|
+
if (res) c.res = res;
|
|
111
|
+
};
|
|
112
|
+
await dispatch(0);
|
|
113
|
+
return c.res;
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
//#endregion
|
|
117
|
+
export { defineHandler };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { HonoOptions } from "../../hono-base.js";
|
|
2
1
|
import { Env, H, HandlerResponse, Input, IntersectNonAnyTypes, MiddlewareHandler } from "../../types.js";
|
|
2
|
+
import { HonoOptions } from "../../hono-base.js";
|
|
3
3
|
import { Hono } from "../../hono.js";
|
|
4
|
+
import { DefineHandler, StandardSchema, ValidationFailure, ValidationIssue, defineHandler } from "./define-handler.js";
|
|
4
5
|
//#region src/helper/factory/index.d.ts
|
|
5
6
|
type InitApp<E extends Env = Env> = (app: Hono<E>) => void;
|
|
6
7
|
export interface CreateHandlersInterface<E extends Env, P extends string> {
|
|
@@ -23,13 +24,41 @@ export declare class Factory<E extends Env = Env, P extends string = string> {
|
|
|
23
24
|
defaultAppOptions?: HonoOptions<E>;
|
|
24
25
|
});
|
|
25
26
|
createApp: (options?: HonoOptions<E>) => Hono<E>;
|
|
27
|
+
defineMiddleware: <I extends Input = {}, R extends HandlerResponse<any> | void = void>(middleware: MiddlewareHandler<E, P, I, R extends void ? Response : R>) => MiddlewareHandler<E, P, I, R extends void ? Response : R>;
|
|
28
|
+
defineHandler: DefineHandler<E, P>;
|
|
29
|
+
/**
|
|
30
|
+
* @deprecated Use `defineMiddleware()` instead. It will be removed in the next major version.
|
|
31
|
+
*/
|
|
26
32
|
createMiddleware: <I extends Input = {}, R extends HandlerResponse<any> | void = void>(middleware: MiddlewareHandler<E, P, I, R extends void ? Response : R>) => MiddlewareHandler<E, P, I, R extends void ? Response : R>;
|
|
33
|
+
/**
|
|
34
|
+
* @deprecated Use `defineHandler()` instead. It will be removed in the next major version.
|
|
35
|
+
* Pass the middleware before the handler:
|
|
36
|
+
* `defineHandler(auth, (c) => ...)`.
|
|
37
|
+
*/
|
|
27
38
|
createHandlers: CreateHandlersInterface<E, P>;
|
|
28
39
|
}
|
|
29
40
|
export declare const createFactory: <E extends Env = Env, P extends string = string>(init?: {
|
|
30
41
|
initApp?: InitApp<E>;
|
|
31
42
|
defaultAppOptions?: HonoOptions<E>;
|
|
32
43
|
}) => Factory<E, P>;
|
|
44
|
+
/**
|
|
45
|
+
* `defineMiddleware()` defines a middleware with the types.
|
|
46
|
+
*
|
|
47
|
+
* @see {@link https://hono.dev/docs/helpers/factory#definemiddleware}
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* const auth = defineMiddleware<{ Variables: { user: User } }>(async (c, next) => {
|
|
52
|
+
* c.set('user', await getUser(c))
|
|
53
|
+
* await next()
|
|
54
|
+
* })
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare const defineMiddleware: <E extends Env = any, P extends string = string, I extends Input = {}, R extends HandlerResponse<any> | void = void>(middleware: MiddlewareHandler<E, P, I, R extends void ? Response : R>) => MiddlewareHandler<E, P, I, R extends void ? Response : R>;
|
|
58
|
+
/**
|
|
59
|
+
* @deprecated Use `defineMiddleware()` instead. It will be removed in the next major version.
|
|
60
|
+
*/
|
|
33
61
|
export declare const createMiddleware: <E extends Env = any, P extends string = string, I extends Input = {}, R extends HandlerResponse<any> | void = void>(middleware: MiddlewareHandler<E, P, I, R extends void ? Response : R>) => MiddlewareHandler<E, P, I, R extends void ? Response : R>;
|
|
34
62
|
//#endregion
|
|
63
|
+
export { type StandardSchema, type ValidationFailure, type ValidationIssue, defineHandler };
|
|
35
64
|
export {};
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { Hono } from "../../hono.js";
|
|
2
|
+
import { defineHandler } from "./define-handler.js";
|
|
2
3
|
//#region src/helper/factory/index.ts
|
|
3
|
-
/**
|
|
4
|
-
* @module
|
|
5
|
-
* Factory Helper for Hono.
|
|
6
|
-
*/
|
|
7
4
|
var Factory = class {
|
|
8
5
|
initApp;
|
|
9
6
|
#defaultAppOptions;
|
|
@@ -19,12 +16,15 @@ var Factory = class {
|
|
|
19
16
|
if (this.initApp) this.initApp(app);
|
|
20
17
|
return app;
|
|
21
18
|
};
|
|
22
|
-
|
|
19
|
+
defineMiddleware = (middleware) => middleware;
|
|
20
|
+
defineHandler = defineHandler;
|
|
21
|
+
createMiddleware = this.defineMiddleware;
|
|
23
22
|
createHandlers = (...handlers) => {
|
|
24
23
|
return handlers.filter((handler) => handler !== void 0);
|
|
25
24
|
};
|
|
26
25
|
};
|
|
27
26
|
const createFactory = (init) => new Factory(init);
|
|
28
|
-
const
|
|
27
|
+
const defineMiddleware = (middleware) => middleware;
|
|
28
|
+
const createMiddleware = defineMiddleware;
|
|
29
29
|
//#endregion
|
|
30
|
-
export { Factory, createFactory, createMiddleware };
|
|
30
|
+
export { Factory, createFactory, createMiddleware, defineHandler, defineMiddleware };
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { escapeToBuffer, raw, resolveCallbackSync, stringBufferToString } from "../../utils/html.js";
|
|
2
2
|
//#region src/helper/html/index.ts
|
|
3
|
-
/**
|
|
4
|
-
* @module
|
|
5
|
-
* html Helper for Hono.
|
|
6
|
-
*/
|
|
7
3
|
const html = (strings, ...values) => {
|
|
8
4
|
const buffer = [""];
|
|
9
5
|
for (let i = 0, len = strings.length - 1; i < len; i++) {
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { HTTPException } from "../../http-exception.js";
|
|
2
2
|
//#region src/helper/proxy/index.ts
|
|
3
|
-
/**
|
|
4
|
-
* @module
|
|
5
|
-
* Proxy Helper for Hono.
|
|
6
|
-
*/
|
|
7
3
|
const hopByHopHeaders = [
|
|
8
4
|
"connection",
|
|
9
5
|
"keep-alive",
|
|
@@ -48,51 +44,6 @@ const preprocessRequestInit = (requestInit) => {
|
|
|
48
44
|
requestInit.headers = headers;
|
|
49
45
|
return requestInit;
|
|
50
46
|
};
|
|
51
|
-
/**
|
|
52
|
-
* Fetch API wrapper for proxy.
|
|
53
|
-
* The parameters and return value are the same as for `fetch` (except for the proxy-specific options).
|
|
54
|
-
*
|
|
55
|
-
* The "Accept-Encoding" header is replaced with an encoding that the current runtime can handle.
|
|
56
|
-
* Unnecessary response headers are deleted and a Response object is returned that can be returned
|
|
57
|
-
* as is as a response from the handler.
|
|
58
|
-
*
|
|
59
|
-
* @example
|
|
60
|
-
* ```ts
|
|
61
|
-
* app.get('/proxy/:path', (c) => {
|
|
62
|
-
* return proxy(`http://${originServer}/${c.req.param('path')}`, {
|
|
63
|
-
* headers: {
|
|
64
|
-
* ...c.req.header(), // optional, specify only when forwarding all the request data (including credentials) is necessary.
|
|
65
|
-
* 'X-Forwarded-For': '127.0.0.1',
|
|
66
|
-
* 'X-Forwarded-Host': c.req.header('host'),
|
|
67
|
-
* Authorization: undefined, // do not propagate request headers contained in c.req.header('Authorization')
|
|
68
|
-
* },
|
|
69
|
-
* }).then((res) => {
|
|
70
|
-
* res.headers.delete('Set-Cookie')
|
|
71
|
-
* return res
|
|
72
|
-
* })
|
|
73
|
-
* })
|
|
74
|
-
*
|
|
75
|
-
* app.all('/proxy/:path', (c) => {
|
|
76
|
-
* return proxy(`http://${originServer}/${c.req.param('path')}`, {
|
|
77
|
-
* ...c.req, // optional, specify only when forwarding all the request data (including credentials) is necessary.
|
|
78
|
-
* headers: {
|
|
79
|
-
* ...c.req.header(),
|
|
80
|
-
* 'X-Forwarded-For': '127.0.0.1',
|
|
81
|
-
* 'X-Forwarded-Host': c.req.header('host'),
|
|
82
|
-
* Authorization: undefined, // do not propagate request headers contained in c.req.header('Authorization')
|
|
83
|
-
* },
|
|
84
|
-
* })
|
|
85
|
-
* })
|
|
86
|
-
*
|
|
87
|
-
* // Strict RFC compliance mode (use only in trusted environments)
|
|
88
|
-
* app.get('/internal-proxy/:path', (c) => {
|
|
89
|
-
* return proxy(`http://${internalServer}/${c.req.param('path')}`, {
|
|
90
|
-
* ...c.req,
|
|
91
|
-
* strictConnectionProcessing: true,
|
|
92
|
-
* })
|
|
93
|
-
* })
|
|
94
|
-
* ```
|
|
95
|
-
*/
|
|
96
47
|
const proxy = async (input, proxyInit) => {
|
|
97
48
|
const { raw, customFetch, strictConnectionProcessing = false, ...requestInit } = proxyInit instanceof Request ? { raw: proxyInit } : proxyInit ?? {};
|
|
98
49
|
const req = new Request(input, {
|
|
@@ -1,99 +1,9 @@
|
|
|
1
1
|
import { GET_MATCH_RESULT } from "../../request/constants.js";
|
|
2
2
|
import { getPattern, splitRoutingPath } from "../../utils/url.js";
|
|
3
3
|
//#region src/helper/route/index.ts
|
|
4
|
-
/**
|
|
5
|
-
* Get matched routes in the handler
|
|
6
|
-
*
|
|
7
|
-
* @param {Context} c - The context object
|
|
8
|
-
* @returns An array of matched routes
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```ts
|
|
12
|
-
* import { matchedRoutes } from 'hono/route'
|
|
13
|
-
*
|
|
14
|
-
* app.use('*', async function logger(c, next) {
|
|
15
|
-
* await next()
|
|
16
|
-
* matchedRoutes(c).forEach(({ handler, method, path }, i) => {
|
|
17
|
-
* const name = handler.name || (handler.length < 2 ? '[handler]' : '[middleware]')
|
|
18
|
-
* console.log(
|
|
19
|
-
* method,
|
|
20
|
-
* ' ',
|
|
21
|
-
* path,
|
|
22
|
-
* ' '.repeat(Math.max(10 - path.length, 0)),
|
|
23
|
-
* name,
|
|
24
|
-
* i === c.req.routeIndex ? '<- respond from here' : ''
|
|
25
|
-
* )
|
|
26
|
-
* })
|
|
27
|
-
* })
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
4
|
const matchedRoutes = (c) => c.req[GET_MATCH_RESULT][0].map(([[, route]]) => route);
|
|
31
|
-
/**
|
|
32
|
-
* Get the route path registered within the handler
|
|
33
|
-
*
|
|
34
|
-
* @param {Context} c - The context object
|
|
35
|
-
* @param {number} index - The index of the route from which to retrieve the path, similar to Array.prototype.at(), where a negative number is the index counted from the end of the matching route. Defaults to the current route index.
|
|
36
|
-
* @returns The route path registered within the handler
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* ```ts
|
|
40
|
-
* import { routePath } from 'hono/route'
|
|
41
|
-
*
|
|
42
|
-
* app.use('*', (c, next) => {
|
|
43
|
-
* console.log(routePath(c)) // '*'
|
|
44
|
-
* console.log(routePath(c, -1)) // '/posts/:id'
|
|
45
|
-
* return next()
|
|
46
|
-
* })
|
|
47
|
-
*
|
|
48
|
-
* app.get('/posts/:id', (c) => {
|
|
49
|
-
* return c.text(routePath(c)) // '/posts/:id'
|
|
50
|
-
* })
|
|
51
|
-
* ```
|
|
52
|
-
*/
|
|
53
5
|
const routePath = (c, index) => matchedRoutes(c).at(index ?? c.req.routeIndex)?.path ?? "";
|
|
54
|
-
/**
|
|
55
|
-
* Get the basePath of the as-is route specified by routing.
|
|
56
|
-
*
|
|
57
|
-
* @param {Context} c - The context object
|
|
58
|
-
* @param {number} index - The index of the route from which to retrieve the path, similar to Array.prototype.at(), where a negative number is the index counted from the end of the matching route. Defaults to the current route index.
|
|
59
|
-
* @returns The basePath of the as-is route specified by routing.
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* ```ts
|
|
63
|
-
* import { baseRoutePath } from 'hono/route'
|
|
64
|
-
*
|
|
65
|
-
* const app = new Hono()
|
|
66
|
-
*
|
|
67
|
-
* const subApp = new Hono()
|
|
68
|
-
* subApp.get('/posts/:id', (c) => {
|
|
69
|
-
* return c.text(baseRoutePath(c)) // '/:sub'
|
|
70
|
-
* })
|
|
71
|
-
*
|
|
72
|
-
* app.route('/:sub', subApp)
|
|
73
|
-
* ```
|
|
74
|
-
*/
|
|
75
6
|
const baseRoutePath = (c, index) => matchedRoutes(c).at(index ?? c.req.routeIndex)?.basePath ?? "";
|
|
76
|
-
/**
|
|
77
|
-
* Get the basePath with embedded parameters
|
|
78
|
-
*
|
|
79
|
-
* @param {Context} c - The context object
|
|
80
|
-
* @param {number} index - The index of the route from which to retrieve the path, similar to Array.prototype.at(), where a negative number is the index counted from the end of the matching route. Defaults to the current route index.
|
|
81
|
-
* @returns The basePath with embedded parameters.
|
|
82
|
-
*
|
|
83
|
-
* @example
|
|
84
|
-
* ```ts
|
|
85
|
-
* import { basePath } from 'hono/route'
|
|
86
|
-
*
|
|
87
|
-
* const app = new Hono()
|
|
88
|
-
*
|
|
89
|
-
* const subApp = new Hono()
|
|
90
|
-
* subApp.get('/posts/:id', (c) => {
|
|
91
|
-
* return c.text(basePath(c)) // '/requested-sub-app-path'
|
|
92
|
-
* })
|
|
93
|
-
*
|
|
94
|
-
* app.route('/:sub', subApp)
|
|
95
|
-
* ```
|
|
96
|
-
*/
|
|
97
7
|
const basePathCacheMap = /* @__PURE__ */ new WeakMap();
|
|
98
8
|
const basePath = (c, index) => {
|
|
99
9
|
index ??= c.req.routeIndex;
|
|
@@ -3,12 +3,6 @@ import { Context } from "../../context.js";
|
|
|
3
3
|
//#region src/helper/ssg/middleware.d.ts
|
|
4
4
|
export declare const SSG_CONTEXT = "HONO_SSG_CONTEXT";
|
|
5
5
|
export declare const X_HONO_DISABLE_SSG_HEADER_KEY = "x-hono-disable-ssg";
|
|
6
|
-
/**
|
|
7
|
-
* @deprecated
|
|
8
|
-
* Use `X_HONO_DISABLE_SSG_HEADER_KEY` instead.
|
|
9
|
-
* This constant will be removed in the next minor version.
|
|
10
|
-
*/
|
|
11
|
-
export declare const SSG_DISABLED_RESPONSE: Response;
|
|
12
6
|
interface SSGParam {
|
|
13
7
|
[key: string]: string;
|
|
14
8
|
}
|
|
@@ -2,24 +2,6 @@ import { isDynamicRoute } from "./utils.js";
|
|
|
2
2
|
//#region src/helper/ssg/middleware.ts
|
|
3
3
|
const SSG_CONTEXT = "HONO_SSG_CONTEXT";
|
|
4
4
|
const X_HONO_DISABLE_SSG_HEADER_KEY = "x-hono-disable-ssg";
|
|
5
|
-
/**
|
|
6
|
-
* @deprecated
|
|
7
|
-
* Use `X_HONO_DISABLE_SSG_HEADER_KEY` instead.
|
|
8
|
-
* This constant will be removed in the next minor version.
|
|
9
|
-
*/
|
|
10
|
-
const SSG_DISABLED_RESPONSE = (() => {
|
|
11
|
-
try {
|
|
12
|
-
return new Response("SSG is disabled", {
|
|
13
|
-
status: 404,
|
|
14
|
-
headers: { [X_HONO_DISABLE_SSG_HEADER_KEY]: "true" }
|
|
15
|
-
});
|
|
16
|
-
} catch {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
})();
|
|
20
|
-
/**
|
|
21
|
-
* Define SSG Route
|
|
22
|
-
*/
|
|
23
5
|
const ssgParams = (params) => async (c, next) => {
|
|
24
6
|
if (isDynamicRoute(c.req.path)) {
|
|
25
7
|
c.req.raw.ssgParams = Array.isArray(params) ? params : await params(c);
|
|
@@ -27,17 +9,7 @@ const ssgParams = (params) => async (c, next) => {
|
|
|
27
9
|
}
|
|
28
10
|
await next();
|
|
29
11
|
};
|
|
30
|
-
/**
|
|
31
|
-
* @experimental
|
|
32
|
-
* `isSSGContext` is an experimental feature.
|
|
33
|
-
* The API might be changed.
|
|
34
|
-
*/
|
|
35
12
|
const isSSGContext = (c) => !!c.env?.[SSG_CONTEXT];
|
|
36
|
-
/**
|
|
37
|
-
* @experimental
|
|
38
|
-
* `disableSSG` is an experimental feature.
|
|
39
|
-
* The API might be changed.
|
|
40
|
-
*/
|
|
41
13
|
const disableSSG = () => async function disableSSG(c, next) {
|
|
42
14
|
if (isSSGContext(c)) {
|
|
43
15
|
c.header(X_HONO_DISABLE_SSG_HEADER_KEY, "true");
|
|
@@ -45,14 +17,9 @@ const disableSSG = () => async function disableSSG(c, next) {
|
|
|
45
17
|
}
|
|
46
18
|
await next();
|
|
47
19
|
};
|
|
48
|
-
/**
|
|
49
|
-
* @experimental
|
|
50
|
-
* `onlySSG` is an experimental feature.
|
|
51
|
-
* The API might be changed.
|
|
52
|
-
*/
|
|
53
20
|
const onlySSG = () => async function onlySSG(c, next) {
|
|
54
21
|
if (!isSSGContext(c)) return c.notFound();
|
|
55
22
|
await next();
|
|
56
23
|
};
|
|
57
24
|
//#endregion
|
|
58
|
-
export { SSG_CONTEXT,
|
|
25
|
+
export { SSG_CONTEXT, X_HONO_DISABLE_SSG_HEADER_KEY, disableSSG, isSSGContext, onlySSG, ssgParams };
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import { html } from "../html/index.js";
|
|
2
2
|
//#region src/helper/ssg/plugins.ts
|
|
3
|
-
/**
|
|
4
|
-
* The default plugin that defines the recommended behavior.
|
|
5
|
-
*
|
|
6
|
-
* @experimental
|
|
7
|
-
* `defaultPlugin` is an experimental feature.
|
|
8
|
-
* The API might be changed.
|
|
9
|
-
*/
|
|
10
3
|
const defaultPlugin = () => {
|
|
11
4
|
return { afterResponseHook: (res) => {
|
|
12
5
|
if (res.status !== 200) return false;
|
|
@@ -31,23 +24,6 @@ const generateRedirectHtml = (location) => {
|
|
|
31
24
|
</body>
|
|
32
25
|
`.toString().replace(/\n/g, "");
|
|
33
26
|
};
|
|
34
|
-
/**
|
|
35
|
-
* The redirect plugin that generates HTML redirect pages for HTTP redirect responses for status codes 301, 302, 303, 307 and 308.
|
|
36
|
-
*
|
|
37
|
-
* When used with `defaultPlugin`, place `redirectPlugin` before it, because `defaultPlugin` skips non-200 responses.
|
|
38
|
-
*
|
|
39
|
-
* ```ts
|
|
40
|
-
* // ✅ Will work as expected
|
|
41
|
-
* toSSG(app, fs, { plugins: [redirectPlugin(), defaultPlugin()] })
|
|
42
|
-
*
|
|
43
|
-
* // ❌ Will not work as expected
|
|
44
|
-
* toSSG(app, fs, { plugins: [defaultPlugin(), redirectPlugin()] })
|
|
45
|
-
* ```
|
|
46
|
-
*
|
|
47
|
-
* @experimental
|
|
48
|
-
* `redirectPlugin` is an experimental feature.
|
|
49
|
-
* The API might be changed.
|
|
50
|
-
*/
|
|
51
27
|
const redirectPlugin = () => {
|
|
52
28
|
return { afterResponseHook: (res) => {
|
|
53
29
|
if (REDIRECT_STATUS_CODES.has(res.status)) {
|
|
@@ -37,18 +37,6 @@ export interface SSGPlugin {
|
|
|
37
37
|
}
|
|
38
38
|
export interface ToSSGOptions {
|
|
39
39
|
dir?: string;
|
|
40
|
-
/**
|
|
41
|
-
* @deprecated Use plugins[].beforeRequestHook instead.
|
|
42
|
-
*/
|
|
43
|
-
beforeRequestHook?: BeforeRequestHook | BeforeRequestHook[];
|
|
44
|
-
/**
|
|
45
|
-
* @deprecated Use plugins[].afterResponseHook instead.
|
|
46
|
-
*/
|
|
47
|
-
afterResponseHook?: AfterResponseHook | AfterResponseHook[];
|
|
48
|
-
/**
|
|
49
|
-
* @deprecated Use plugins[].afterGenerateHook instead.
|
|
50
|
-
*/
|
|
51
|
-
afterGenerateHook?: AfterGenerateHook | AfterGenerateHook[];
|
|
52
40
|
concurrency?: number;
|
|
53
41
|
extensionMap?: Record<string, string>;
|
|
54
42
|
plugins?: SSGPlugin[];
|