@lovrozagar/honey 0.6.5 → 0.7.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 +514 -192
- package/bin/honey.js +25 -0
- package/dist/accepts.d.ts +7 -1
- package/dist/accepts.d.ts.map +1 -1
- package/dist/accepts.js +126 -0
- package/dist/accepts.js.map +1 -0
- package/dist/body-kind.d.ts +26 -0
- package/dist/body-kind.d.ts.map +1 -0
- package/dist/body-kind.js +70 -0
- package/dist/body-kind.js.map +1 -0
- package/dist/body-limit.d.ts +5 -1
- package/dist/body-limit.d.ts.map +1 -1
- package/dist/body-limit.js +126 -0
- package/dist/body-limit.js.map +1 -0
- package/dist/build/index.d.ts +19 -3
- package/dist/build/index.d.ts.map +1 -1
- package/dist/build/index.js +173 -0
- package/dist/build/index.js.map +1 -0
- package/dist/cli-args.d.ts +33 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +102 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-go/auth.go +26 -0
- package/dist/cli-go/config.go +192 -0
- package/dist/cli-go/errors.go +75 -0
- package/dist/cli-go/multipart.go +79 -0
- package/dist/cli-go/output.go +163 -0
- package/dist/cli-go/root.go +30 -0
- package/dist/cli-go/stream.go +88 -0
- package/dist/cli-go/version.go +5 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +209 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/defaults.js +48 -0
- package/dist/client/defaults.js.map +1 -0
- package/dist/client/error.d.ts +35 -0
- package/dist/client/error.d.ts.map +1 -1
- package/dist/client/error.js +71 -0
- package/dist/client/error.js.map +1 -0
- package/dist/client/http.d.ts +67 -8
- package/dist/client/http.d.ts.map +1 -1
- package/dist/client/http.js +571 -0
- package/dist/client/http.js.map +1 -0
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +95 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/path.d.ts +26 -0
- package/dist/client/path.d.ts.map +1 -0
- package/dist/client/path.js +163 -0
- package/dist/client/path.js.map +1 -0
- package/dist/client/redirect-policy.d.ts +12 -0
- package/dist/client/redirect-policy.d.ts.map +1 -0
- package/dist/client/redirect-policy.js +20 -0
- package/dist/client/redirect-policy.js.map +1 -0
- package/dist/client/sdk.d.ts +36 -0
- package/dist/client/sdk.d.ts.map +1 -1
- package/dist/client/sdk.js +292 -0
- package/dist/client/sdk.js.map +1 -0
- package/dist/client/sse.d.ts +13 -0
- package/dist/client/sse.d.ts.map +1 -1
- package/dist/client/sse.js +129 -0
- package/dist/client/sse.js.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/ws.d.ts +9 -2
- package/dist/client/ws.d.ts.map +1 -1
- package/dist/client/ws.js +112 -0
- package/dist/client/ws.js.map +1 -0
- package/dist/client-go/errors.go +236 -0
- package/dist/client-go/export.go +44 -0
- package/dist/client-go/invalidation.go +371 -0
- package/dist/client-go/nullable.go +62 -0
- package/dist/client-go/realtime.go +354 -0
- package/dist/client-go/result.go +20 -0
- package/dist/client-go/runtime.go +975 -0
- package/dist/client-go/sse.go +159 -0
- package/dist/client-go/transport.go +495 -0
- package/dist/client-go/ws.go +128 -0
- package/dist/client-info.d.ts +36 -0
- package/dist/client-info.d.ts.map +1 -0
- package/dist/client-info.js +53 -0
- package/dist/client-info.js.map +1 -0
- package/dist/client-mcp/README.md +10 -0
- package/dist/client-mcp/server.ts +221 -0
- package/dist/client-mcp/types.ts +19 -0
- package/dist/client-python/_errors.py +115 -0
- package/dist/client-python/_invalidation.py +494 -0
- package/dist/client-python/_realtime.py +179 -0
- package/dist/client-python/_runtime.py +860 -0
- package/dist/client-python/_sse.py +155 -0
- package/dist/client-python/_transport.py +366 -0
- package/dist/client-python/_ws.py +159 -0
- package/dist/client-python/py.typed +0 -0
- package/dist/client-rust/errors.rs +220 -0
- package/dist/client-rust/invalidation.rs +412 -0
- package/dist/client-rust/invalidation_sync.rs +93 -0
- package/dist/client-rust/nullable.rs +17 -0
- package/dist/client-rust/realtime.rs +702 -0
- package/dist/client-rust/result.rs +22 -0
- package/dist/client-rust/runtime.rs +980 -0
- package/dist/client-rust/runtime_sync.rs +484 -0
- package/dist/client-rust/sse.rs +188 -0
- package/dist/client-rust/ws.rs +167 -0
- package/dist/codegen-go-cli.d.ts.map +1 -1
- package/dist/codegen-go-cli.js +964 -0
- package/dist/codegen-go-cli.js.map +1 -0
- package/dist/codegen-go.d.ts +15 -3
- package/dist/codegen-go.d.ts.map +1 -1
- package/dist/codegen-go.js +872 -0
- package/dist/codegen-go.js.map +1 -0
- package/dist/codegen-hash.js +9 -0
- package/dist/codegen-hash.js.map +1 -0
- package/dist/codegen-ir.d.ts +69 -2
- package/dist/codegen-ir.d.ts.map +1 -1
- package/dist/codegen-ir.js +661 -0
- package/dist/codegen-ir.js.map +1 -0
- package/dist/codegen-lang.d.ts +65 -0
- package/dist/codegen-lang.d.ts.map +1 -0
- package/dist/codegen-lang.js +526 -0
- package/dist/codegen-lang.js.map +1 -0
- package/dist/codegen-load.d.ts +31 -0
- package/dist/codegen-load.d.ts.map +1 -0
- package/dist/codegen-load.js +138 -0
- package/dist/codegen-load.js.map +1 -0
- package/dist/codegen-loaders.js +55 -0
- package/dist/codegen-loaders.js.map +1 -0
- package/dist/codegen-mcp.d.ts.map +1 -1
- package/dist/codegen-mcp.js +368 -0
- package/dist/codegen-mcp.js.map +1 -0
- package/dist/codegen-python.d.ts +13 -1
- package/dist/codegen-python.d.ts.map +1 -1
- package/dist/codegen-python.js +828 -0
- package/dist/codegen-python.js.map +1 -0
- package/dist/codegen-route-tree-intern.d.ts +15 -5
- package/dist/codegen-route-tree-intern.d.ts.map +1 -1
- package/dist/codegen-route-tree-intern.js +221 -0
- package/dist/codegen-route-tree-intern.js.map +1 -0
- package/dist/codegen-rust.d.ts.map +1 -1
- package/dist/codegen-rust.js +1293 -0
- package/dist/codegen-rust.js.map +1 -0
- package/dist/codegen-sanitize.d.ts.map +1 -1
- package/dist/codegen-sanitize.js +56 -0
- package/dist/codegen-sanitize.js.map +1 -0
- package/dist/codegen-schema-naming.d.ts +5 -0
- package/dist/codegen-schema-naming.d.ts.map +1 -1
- package/dist/codegen-schema-naming.js +150 -0
- package/dist/codegen-schema-naming.js.map +1 -0
- package/dist/codegen-sdk-model.d.ts +71 -0
- package/dist/codegen-sdk-model.d.ts.map +1 -0
- package/dist/codegen-sdk-model.js +179 -0
- package/dist/codegen-sdk-model.js.map +1 -0
- package/dist/codegen.d.ts +41 -23
- package/dist/codegen.d.ts.map +1 -1
- package/dist/codegen.js +4610 -0
- package/dist/codegen.js.map +1 -0
- package/dist/context.d.ts +36 -6
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +242 -0
- package/dist/context.js.map +1 -0
- package/dist/cookie-sign.d.ts +16 -2
- package/dist/cookie-sign.d.ts.map +1 -1
- package/dist/cookie-sign.js +104 -0
- package/dist/cookie-sign.js.map +1 -0
- package/dist/cookie.d.ts +12 -0
- package/dist/cookie.d.ts.map +1 -1
- package/dist/cookie.js +138 -0
- package/dist/cookie.js.map +1 -0
- package/dist/cors.d.ts +1 -0
- package/dist/cors.d.ts.map +1 -1
- package/dist/cors.js +87 -0
- package/dist/cors.js.map +1 -0
- package/dist/crypto.d.ts +6 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +38 -0
- package/dist/crypto.js.map +1 -0
- package/dist/csrf.d.ts +19 -0
- package/dist/csrf.d.ts.map +1 -1
- package/dist/csrf.js +79 -0
- package/dist/csrf.js.map +1 -0
- package/dist/curl-logger.d.ts +14 -3
- package/dist/curl-logger.d.ts.map +1 -1
- package/dist/curl-logger.js +199 -0
- package/dist/curl-logger.js.map +1 -0
- package/dist/detect-runtime.js +13 -0
- package/dist/detect-runtime.js.map +1 -0
- package/dist/dict.d.ts +11 -0
- package/dist/dict.d.ts.map +1 -0
- package/dist/dict.js +13 -0
- package/dist/dict.js.map +1 -0
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +44 -0
- package/dist/error.js.map +1 -0
- package/dist/errors.js +39 -0
- package/dist/errors.js.map +1 -0
- package/dist/etag.d.ts +2 -0
- package/dist/etag.d.ts.map +1 -1
- package/dist/etag.js +82 -0
- package/dist/etag.js.map +1 -0
- package/dist/feature-detect.d.ts +25 -0
- package/dist/feature-detect.d.ts.map +1 -0
- package/dist/feature-detect.js +144 -0
- package/dist/feature-detect.js.map +1 -0
- package/dist/feature-load.js +36 -0
- package/dist/feature-load.js.map +1 -0
- package/dist/feature-slots.d.ts +44 -0
- package/dist/feature-slots.d.ts.map +1 -0
- package/dist/feature-slots.js +48 -0
- package/dist/feature-slots.js.map +1 -0
- package/dist/fetch-request.d.ts +10 -0
- package/dist/fetch-request.d.ts.map +1 -0
- package/dist/fetch-request.js +13 -0
- package/dist/fetch-request.js.map +1 -0
- package/dist/gen-process.d.ts +15 -0
- package/dist/gen-process.d.ts.map +1 -0
- package/dist/gen-process.js +43 -0
- package/dist/gen-process.js.map +1 -0
- package/dist/gen-write.d.ts +19 -0
- package/dist/gen-write.d.ts.map +1 -0
- package/dist/gen-write.js +120 -0
- package/dist/gen-write.js.map +1 -0
- package/dist/glob.d.ts +21 -0
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +115 -0
- package/dist/glob.js.map +1 -0
- package/dist/go-type-emitter.d.ts +18 -4
- package/dist/go-type-emitter.d.ts.map +1 -1
- package/dist/go-type-emitter.js +594 -0
- package/dist/go-type-emitter.js.map +1 -0
- package/dist/honey-response.d.ts.map +1 -1
- package/dist/honey-response.js +338 -0
- package/dist/honey-response.js.map +1 -0
- package/dist/i18n-slot.d.ts +8 -0
- package/dist/i18n-slot.d.ts.map +1 -1
- package/dist/i18n-slot.js +14 -0
- package/dist/i18n-slot.js.map +1 -0
- package/dist/i18n.d.ts +3 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +250 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +410 -149
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2324 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +3 -5
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +140 -0
- package/dist/init.js.map +1 -0
- package/dist/input.js +4 -0
- package/dist/input.js.map +1 -0
- package/dist/invalidate-check.d.ts +11 -0
- package/dist/invalidate-check.d.ts.map +1 -1
- package/dist/invalidate-check.js +163 -0
- package/dist/invalidate-check.js.map +1 -0
- package/dist/invoke-user.d.ts +35 -0
- package/dist/invoke-user.d.ts.map +1 -0
- package/dist/invoke-user.js +73 -0
- package/dist/invoke-user.js.map +1 -0
- package/dist/ip-restrict.d.ts +13 -1
- package/dist/ip-restrict.d.ts.map +1 -1
- package/dist/ip-restrict.js +60 -0
- package/dist/ip-restrict.js.map +1 -0
- package/dist/ip.d.ts +39 -0
- package/dist/ip.d.ts.map +1 -0
- package/dist/ip.js +209 -0
- package/dist/ip.js.map +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +113 -0
- package/dist/logger.js.map +1 -0
- package/dist/media-type.d.ts +30 -0
- package/dist/media-type.d.ts.map +1 -0
- package/dist/media-type.js +97 -0
- package/dist/media-type.js.map +1 -0
- package/dist/meta-spec-merge.d.ts +32 -0
- package/dist/meta-spec-merge.d.ts.map +1 -0
- package/dist/meta-spec-merge.js +68 -0
- package/dist/meta-spec-merge.js.map +1 -0
- package/dist/meta-spec.d.ts +16 -3
- package/dist/meta-spec.d.ts.map +1 -1
- package/dist/meta-spec.js +535 -0
- package/dist/meta-spec.js.map +1 -0
- package/dist/middleware.d.ts +23 -6
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +253 -0
- package/dist/middleware.js.map +1 -0
- package/dist/node-request.d.ts +57 -12
- package/dist/node-request.d.ts.map +1 -1
- package/dist/node-request.js +407 -0
- package/dist/node-request.js.map +1 -0
- package/dist/node.d.ts +20 -3
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +396 -0
- package/dist/node.js.map +1 -0
- package/dist/openapi/collect.d.ts +6 -3
- package/dist/openapi/collect.d.ts.map +1 -1
- package/dist/openapi/collect.js +30 -0
- package/dist/openapi/collect.js.map +1 -0
- package/dist/openapi/docs-page.d.ts +42 -0
- package/dist/openapi/docs-page.d.ts.map +1 -0
- package/dist/openapi/docs-page.js +80 -0
- package/dist/openapi/docs-page.js.map +1 -0
- package/dist/openapi/document.d.ts +4 -0
- package/dist/openapi/document.d.ts.map +1 -1
- package/dist/openapi/document.js +785 -0
- package/dist/openapi/document.js.map +1 -0
- package/dist/openapi/json-schema-slot.d.ts +7 -0
- package/dist/openapi/json-schema-slot.d.ts.map +1 -1
- package/dist/openapi/json-schema-slot.js +38 -0
- package/dist/openapi/json-schema-slot.js.map +1 -0
- package/dist/openapi/register.d.ts.map +1 -1
- package/dist/openapi/register.js +20 -0
- package/dist/openapi/register.js.map +1 -0
- package/dist/openapi/scalar.d.ts +3 -1
- package/dist/openapi/scalar.d.ts.map +1 -1
- package/dist/openapi/scalar.js +21 -0
- package/dist/openapi/scalar.js.map +1 -0
- package/dist/openapi/serve.d.ts +9 -0
- package/dist/openapi/serve.d.ts.map +1 -0
- package/dist/openapi/serve.js +36 -0
- package/dist/openapi/serve.js.map +1 -0
- package/dist/openapi/spec-factory.d.ts +30 -1
- package/dist/openapi/spec-factory.d.ts.map +1 -1
- package/dist/openapi/spec-factory.js +52 -0
- package/dist/openapi/spec-factory.js.map +1 -0
- package/dist/openapi/spec.d.ts +14 -5
- package/dist/openapi/spec.d.ts.map +1 -1
- package/dist/openapi/spec.js +50 -0
- package/dist/openapi/spec.js.map +1 -0
- package/dist/openapi/swagger.d.ts +3 -1
- package/dist/openapi/swagger.d.ts.map +1 -1
- package/dist/openapi/swagger.js +22 -0
- package/dist/openapi/swagger.js.map +1 -0
- package/dist/pattern.d.ts +71 -0
- package/dist/pattern.d.ts.map +1 -0
- package/dist/pattern.js +239 -0
- package/dist/pattern.js.map +1 -0
- package/dist/peer.d.ts +17 -0
- package/dist/peer.d.ts.map +1 -0
- package/dist/peer.js +50 -0
- package/dist/peer.js.map +1 -0
- package/dist/plugin.d.ts +67 -16
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +649 -0
- package/dist/plugin.js.map +1 -0
- package/dist/powered-by.d.ts.map +1 -1
- package/dist/powered-by.js +11 -0
- package/dist/powered-by.js.map +1 -0
- package/dist/pretty-json.d.ts.map +1 -1
- package/dist/pretty-json.js +47 -0
- package/dist/pretty-json.js.map +1 -0
- package/dist/producer-stream.d.ts +47 -0
- package/dist/producer-stream.d.ts.map +1 -0
- package/dist/producer-stream.js +267 -0
- package/dist/producer-stream.js.map +1 -0
- package/dist/proxy.d.ts +47 -8
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +274 -0
- package/dist/proxy.js.map +1 -0
- package/dist/python-type-emitter.d.ts +14 -1
- package/dist/python-type-emitter.d.ts.map +1 -1
- package/dist/python-type-emitter.js +157 -0
- package/dist/python-type-emitter.js.map +1 -0
- package/dist/realtime/bus.d.ts +17 -1
- package/dist/realtime/bus.d.ts.map +1 -1
- package/dist/realtime/bus.js +112 -0
- package/dist/realtime/bus.js.map +1 -0
- package/dist/realtime/register.d.ts +3 -0
- package/dist/realtime/register.d.ts.map +1 -0
- package/dist/realtime/register.js +10 -0
- package/dist/realtime/register.js.map +1 -0
- package/dist/realtime/route.d.ts +65 -26
- package/dist/realtime/route.d.ts.map +1 -1
- package/dist/realtime/route.js +72 -0
- package/dist/realtime/route.js.map +1 -0
- package/dist/realtime/server.d.ts +43 -0
- package/dist/realtime/server.d.ts.map +1 -0
- package/dist/realtime/server.js +255 -0
- package/dist/realtime/server.js.map +1 -0
- package/dist/request-id.d.ts +7 -0
- package/dist/request-id.d.ts.map +1 -1
- package/dist/request-id.js +16 -0
- package/dist/request-id.js.map +1 -0
- package/dist/request-limits.d.ts +3 -0
- package/dist/request-limits.d.ts.map +1 -0
- package/dist/request-limits.js +3 -0
- package/dist/request-limits.js.map +1 -0
- package/dist/request-path.d.ts +33 -0
- package/dist/request-path.d.ts.map +1 -0
- package/dist/request-path.js +178 -0
- package/dist/request-path.js.map +1 -0
- package/dist/request-to-curl.d.ts +7 -1
- package/dist/request-to-curl.d.ts.map +1 -1
- package/dist/request-to-curl.js +48 -0
- package/dist/request-to-curl.js.map +1 -0
- package/dist/response.d.ts +25 -2
- package/dist/response.d.ts.map +1 -1
- package/dist/response.js +313 -0
- package/dist/response.js.map +1 -0
- package/dist/rust-type-emitter.d.ts +14 -2
- package/dist/rust-type-emitter.d.ts.map +1 -1
- package/dist/rust-type-emitter.js +463 -0
- package/dist/rust-type-emitter.js.map +1 -0
- package/dist/secure-headers.d.ts.map +1 -1
- package/dist/secure-headers.js +53 -0
- package/dist/secure-headers.js.map +1 -0
- package/dist/serve-register.d.ts +4 -0
- package/dist/serve-register.d.ts.map +1 -1
- package/dist/serve-register.js +9 -0
- package/dist/serve-register.js.map +1 -0
- package/dist/serve-slot.d.ts +3 -0
- package/dist/serve-slot.d.ts.map +1 -1
- package/dist/serve-slot.js +52 -0
- package/dist/serve-slot.js.map +1 -0
- package/dist/serve.d.ts +18 -1
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +157 -0
- package/dist/serve.js.map +1 -0
- package/dist/server-timing.d.ts.map +1 -1
- package/dist/server-timing.js +51 -0
- package/dist/server-timing.js.map +1 -0
- package/dist/static.d.ts +9 -0
- package/dist/static.d.ts.map +1 -1
- package/dist/static.js +102 -0
- package/dist/static.js.map +1 -0
- package/dist/telemetry/otel.d.ts +2 -0
- package/dist/telemetry/otel.d.ts.map +1 -1
- package/dist/telemetry/otel.js +135 -0
- package/dist/telemetry/otel.js.map +1 -0
- package/dist/testing.d.ts +12 -0
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +124 -0
- package/dist/testing.js.map +1 -0
- package/dist/timeout.d.ts +6 -0
- package/dist/timeout.d.ts.map +1 -1
- package/dist/timeout.js +36 -0
- package/dist/timeout.js.map +1 -0
- package/dist/tree.d.ts +133 -36
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +437 -0
- package/dist/tree.js.map +1 -0
- package/dist/trust.d.ts +21 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +100 -0
- package/dist/trust.js.map +1 -0
- package/dist/ts-type-emitter.d.ts.map +1 -1
- package/dist/ts-type-emitter.js +150 -0
- package/dist/ts-type-emitter.js.map +1 -0
- package/dist/type-emitter.d.ts +16 -2
- package/dist/type-emitter.d.ts.map +1 -1
- package/dist/type-emitter.js +729 -0
- package/dist/type-emitter.js.map +1 -0
- package/dist/type-extractor.d.ts +8 -4
- package/dist/type-extractor.d.ts.map +1 -1
- package/dist/type-extractor.js +776 -0
- package/dist/type-extractor.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +96 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +14 -2
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +335 -0
- package/dist/validation.js.map +1 -0
- package/dist/with-headers.d.ts +15 -0
- package/dist/with-headers.d.ts.map +1 -0
- package/dist/with-headers.js +45 -0
- package/dist/with-headers.js.map +1 -0
- package/dist/ws/bun.d.ts +11 -5
- package/dist/ws/bun.d.ts.map +1 -1
- package/dist/ws/bun.js +82 -0
- package/dist/ws/bun.js.map +1 -0
- package/dist/ws/cloudflare.d.ts +25 -3
- package/dist/ws/cloudflare.d.ts.map +1 -1
- package/dist/ws/cloudflare.js +117 -0
- package/dist/ws/cloudflare.js.map +1 -0
- package/dist/ws/deno.d.ts +4 -4
- package/dist/ws/deno.d.ts.map +1 -1
- package/dist/ws/deno.js +133 -0
- package/dist/ws/deno.js.map +1 -0
- package/dist/ws/node.d.ts +20 -3
- package/dist/ws/node.d.ts.map +1 -1
- package/dist/ws/node.js +173 -0
- package/dist/ws/node.js.map +1 -0
- package/dist/ws/session.d.ts +11 -0
- package/dist/ws/session.d.ts.map +1 -0
- package/dist/ws/session.js +60 -0
- package/dist/ws/session.js.map +1 -0
- package/dist/ws/shared.d.ts +65 -0
- package/dist/ws/shared.d.ts.map +1 -0
- package/dist/ws/shared.js +103 -0
- package/dist/ws/shared.js.map +1 -0
- package/dist/ws-origin.d.ts +20 -0
- package/dist/ws-origin.d.ts.map +1 -0
- package/dist/ws-origin.js +41 -0
- package/dist/ws-origin.js.map +1 -0
- package/dist/yaml.d.ts +15 -1
- package/dist/yaml.d.ts.map +1 -1
- package/dist/yaml.js +101 -0
- package/dist/yaml.js.map +1 -0
- package/docs/invalidate-spec.md +13 -1
- package/docs/meta-spec.md +36 -12
- package/docs/packaging.md +43 -24
- package/docs/regression-matrix/README.md +32 -0
- package/docs/regression-matrix/review.md +44 -0
- package/docs/regression-matrix/ws1-3.md +97 -0
- package/docs/regression-matrix/ws4-8.md +107 -0
- package/docs/regression-matrix/ws9-12.md +266 -0
- package/docs/sdk.md +102 -52
- package/package.json +183 -52
- package/src/accepts.ts +91 -33
- package/src/body-kind.ts +67 -0
- package/src/body-limit.ts +102 -87
- package/src/build/index.ts +104 -54
- package/src/cli-args.ts +123 -0
- package/src/cli-go/auth.go +12 -1
- package/src/cli-go/config.go +29 -2
- package/src/cli-go/errors.go +28 -10
- package/src/cli-go/multipart.go +51 -27
- package/src/cli-go/output.go +58 -4
- package/src/cli-go/root.go +1 -1
- package/src/cli-go/version.go +2 -2
- package/src/cli.ts +154 -148
- package/src/client/error.ts +56 -1
- package/src/client/http.ts +479 -256
- package/src/client/index.ts +55 -17
- package/src/client/path.ts +169 -0
- package/src/client/redirect-policy.ts +19 -0
- package/src/client/sdk.ts +180 -101
- package/src/client/sse.ts +92 -66
- package/src/client/ws.ts +67 -31
- package/src/client-go/errors.go +41 -12
- package/src/client-go/export.go +44 -0
- package/src/client-go/invalidation.go +52 -54
- package/src/client-go/nullable.go +62 -0
- package/src/client-go/realtime.go +147 -110
- package/src/client-go/runtime.go +646 -88
- package/src/client-go/sse.go +104 -94
- package/src/client-go/transport.go +67 -27
- package/src/client-go/ws.go +49 -25
- package/src/client-info.ts +79 -0
- package/src/client-mcp/server.ts +133 -3
- package/src/client-python/_invalidation.py +207 -291
- package/src/client-python/_realtime.py +63 -40
- package/src/client-python/_runtime.py +501 -119
- package/src/client-python/_sse.py +130 -74
- package/src/client-python/_transport.py +37 -9
- package/src/client-python/_ws.py +50 -22
- package/src/client-rust/errors.rs +21 -1
- package/src/client-rust/invalidation.rs +202 -231
- package/src/client-rust/invalidation_sync.rs +16 -229
- package/src/client-rust/nullable.rs +17 -0
- package/src/client-rust/realtime.rs +217 -217
- package/src/client-rust/runtime.rs +602 -177
- package/src/client-rust/runtime_sync.rs +169 -145
- package/src/client-rust/sse.rs +142 -121
- package/src/client-rust/ws.rs +61 -37
- package/src/codegen-go-cli.ts +607 -728
- package/src/codegen-go.ts +710 -770
- package/src/codegen-ir.ts +381 -75
- package/src/codegen-lang.ts +517 -0
- package/src/codegen-load.ts +150 -0
- package/src/codegen-mcp.ts +207 -108
- package/src/codegen-python.ts +684 -816
- package/src/codegen-route-tree-intern.ts +51 -25
- package/src/codegen-rust.ts +946 -1240
- package/src/codegen-sanitize.ts +0 -4
- package/src/codegen-schema-naming.ts +19 -6
- package/src/codegen-sdk-model.ts +228 -0
- package/src/codegen.ts +1488 -1140
- package/src/context.ts +130 -11
- package/src/cookie-sign.ts +85 -16
- package/src/cookie.ts +66 -11
- package/src/cors.ts +55 -54
- package/src/crypto.ts +27 -5
- package/src/csrf.ts +57 -25
- package/src/curl-logger.ts +155 -114
- package/src/dict.ts +12 -0
- package/src/error.ts +4 -2
- package/src/etag.ts +58 -34
- package/src/feature-detect.ts +147 -0
- package/src/feature-slots.ts +70 -0
- package/src/fetch-request.ts +13 -0
- package/src/gen-process.ts +42 -0
- package/src/gen-write.ts +127 -0
- package/src/glob.ts +109 -0
- package/src/go-type-emitter.ts +406 -155
- package/src/honey-response.ts +36 -9
- package/src/i18n-slot.ts +10 -0
- package/src/i18n.ts +98 -23
- package/src/index.ts +1893 -1761
- package/src/init.ts +40 -28
- package/src/invalidate-check.ts +42 -4
- package/src/invoke-user.ts +95 -0
- package/src/ip-restrict.ts +47 -161
- package/src/ip.ts +194 -0
- package/src/logger.ts +65 -36
- package/src/media-type.ts +104 -0
- package/src/meta-spec-merge.ts +80 -0
- package/src/meta-spec.ts +0 -0
- package/src/middleware.ts +112 -12
- package/src/node-request.ts +242 -52
- package/src/node.ts +318 -75
- package/src/openapi/collect.ts +19 -44
- package/src/openapi/docs-page.ts +89 -0
- package/src/openapi/document.ts +503 -224
- package/src/openapi/json-schema-slot.ts +40 -0
- package/src/openapi/register.ts +7 -2
- package/src/openapi/scalar.ts +11 -10
- package/src/openapi/serve.ts +39 -0
- package/src/openapi/spec-factory.ts +50 -1
- package/src/openapi/spec.ts +53 -30
- package/src/openapi/swagger.ts +12 -11
- package/src/pattern.ts +245 -0
- package/src/peer.ts +53 -0
- package/src/plugin.ts +270 -185
- package/src/powered-by.ts +2 -2
- package/src/pretty-json.ts +25 -9
- package/src/producer-stream.ts +296 -0
- package/src/proxy.ts +271 -55
- package/src/python-type-emitter.ts +68 -56
- package/src/realtime/bus.ts +56 -9
- package/src/realtime/register.ts +13 -0
- package/src/realtime/route.ts +129 -80
- package/src/realtime/server.ts +298 -0
- package/src/request-id.ts +13 -3
- package/src/request-limits.ts +2 -0
- package/src/request-path.ts +165 -0
- package/src/request-to-curl.ts +28 -7
- package/src/response.ts +143 -103
- package/src/rust-type-emitter.ts +265 -170
- package/src/secure-headers.ts +8 -4
- package/src/serve-register.ts +4 -0
- package/src/serve-slot.ts +38 -0
- package/src/serve.ts +113 -25
- package/src/server-timing.ts +11 -7
- package/src/static.ts +85 -32
- package/src/telemetry/otel.ts +29 -7
- package/src/testing.ts +76 -14
- package/src/timeout.ts +15 -7
- package/src/tree.ts +405 -333
- package/src/trust.ts +117 -0
- package/src/ts-type-emitter.ts +18 -12
- package/src/type-emitter.ts +227 -89
- package/src/type-extractor.ts +562 -424
- package/src/types.ts +8 -0
- package/src/validation.ts +221 -96
- package/src/with-headers.ts +45 -0
- package/src/ws/bun.ts +53 -15
- package/src/ws/cloudflare.ts +81 -19
- package/src/ws/deno.ts +124 -36
- package/src/ws/node.ts +173 -79
- package/src/ws/session.ts +73 -0
- package/src/ws/shared.ts +140 -0
- package/src/ws-origin.ts +53 -0
- package/src/yaml.ts +45 -22
- package/dist/client-mcp/server.d.ts +0 -10
- package/dist/client-mcp/server.d.ts.map +0 -1
- package/dist/client-mcp/types.d.ts +0 -16
- package/dist/client-mcp/types.d.ts.map +0 -1
- package/dist/cloudflare/realtime.d.ts +0 -30
- package/dist/cloudflare/realtime.d.ts.map +0 -1
- package/dist/realtime/buffer.d.ts +0 -18
- package/dist/realtime/buffer.d.ts.map +0 -1
- package/dist/realtime/longpoll.d.ts +0 -23
- package/dist/realtime/longpoll.d.ts.map +0 -1
- package/dist/realtime/protocol.d.ts +0 -50
- package/dist/realtime/protocol.d.ts.map +0 -1
- package/dist/realtime/runtime.d.ts +0 -74
- package/dist/realtime/runtime.d.ts.map +0 -1
- package/src/cloudflare/realtime.ts +0 -234
- package/src/realtime/buffer.ts +0 -101
- package/src/realtime/longpoll.ts +0 -148
- package/src/realtime/protocol.ts +0 -128
- package/src/realtime/runtime.ts +0 -427
package/bin/honey.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { existsSync } from "node:fs"
|
|
3
|
+
|
|
4
|
+
/* Bun runs the TypeScript source; an installed package on any other runtime runs the compiled
|
|
5
|
+
* JavaScript. A repository checkout (marked by tsconfig.json, which is not published) runs the
|
|
6
|
+
* source on Node too, through jiti, so `honey generate` never runs a stale dist/. */
|
|
7
|
+
const isBun = typeof globalThis.Bun !== "undefined"
|
|
8
|
+
const checkout = existsSync(new URL("../tsconfig.json", import.meta.url))
|
|
9
|
+
|
|
10
|
+
if (isBun) {
|
|
11
|
+
await import("../src/cli.ts")
|
|
12
|
+
} else if (checkout) {
|
|
13
|
+
const { createJiti } = await import("jiti")
|
|
14
|
+
await createJiti(import.meta.url).import("../src/cli.ts")
|
|
15
|
+
} else {
|
|
16
|
+
try {
|
|
17
|
+
await import("../dist/cli.js")
|
|
18
|
+
} catch (err) {
|
|
19
|
+
if (err?.code === "ERR_MODULE_NOT_FOUND" && String(err.url).endsWith("/dist/cli.js")) {
|
|
20
|
+
console.error("honey: dist/ is missing from this install. Reinstall @lovrozagar/honey, or run honey with Bun.")
|
|
21
|
+
process.exit(1)
|
|
22
|
+
}
|
|
23
|
+
throw err
|
|
24
|
+
}
|
|
25
|
+
}
|
package/dist/accepts.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pick the best supported content type based on the request's Accept header.
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
|
+
* Each supported type takes the weight of the most specific range that matches
|
|
5
|
+
* it (RFC 9110 §12.5.1), so `text/html;q=0, *\/*` excludes `text/html`. Among
|
|
6
|
+
* types with equal weight, the server's order in `supported` wins.
|
|
7
|
+
*
|
|
8
|
+
* Returns null if no match found. Returns the first supported type if there is
|
|
9
|
+
* no Accept header.
|
|
4
10
|
*/
|
|
5
11
|
export declare function accepts(req: Request, supported: string[]): string | null;
|
|
6
12
|
//# sourceMappingURL=accepts.d.ts.map
|
package/dist/accepts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accepts.d.ts","sourceRoot":"","sources":["../src/accepts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"accepts.d.ts","sourceRoot":"","sources":["../src/accepts.ts"],"names":[],"mappings":"AAsFA;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAuCxE"}
|
package/dist/accepts.js
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/** RFC 9110 §12.4.2: qvalue = ( "0" [ "." 0*3DIGIT ] ) / ( "1" [ "." 0*3("0") ] ). Lenient on digit count. */
|
|
2
|
+
function parseQ(raw) {
|
|
3
|
+
if (!/^(?:0(?:\.\d*)?|1(?:\.0*)?|\.\d+)$/.test(raw))
|
|
4
|
+
return null;
|
|
5
|
+
const q = Number(raw);
|
|
6
|
+
return q >= 0 && q <= 1 ? q : null;
|
|
7
|
+
}
|
|
8
|
+
function parseAccept(header) {
|
|
9
|
+
const types = [];
|
|
10
|
+
const parts = header.split(",");
|
|
11
|
+
for (let index = 0; index < parts.length; index++) {
|
|
12
|
+
const trimmed = parts[index].trim();
|
|
13
|
+
if (trimmed.length === 0)
|
|
14
|
+
continue;
|
|
15
|
+
const segments = trimmed.split(";");
|
|
16
|
+
const mediaType = segments[0].trim().toLowerCase();
|
|
17
|
+
const slash = mediaType.indexOf("/");
|
|
18
|
+
if (slash <= 0 || slash === mediaType.length - 1)
|
|
19
|
+
continue;
|
|
20
|
+
const type = mediaType.slice(0, slash);
|
|
21
|
+
const subtype = mediaType.slice(slash + 1);
|
|
22
|
+
/* `*\/html` is not a valid range. */
|
|
23
|
+
if (type === "*" && subtype !== "*")
|
|
24
|
+
continue;
|
|
25
|
+
let q = 1;
|
|
26
|
+
const params = new Map();
|
|
27
|
+
for (let i = 1; i < segments.length; i++) {
|
|
28
|
+
const eq = segments[i].indexOf("=");
|
|
29
|
+
if (eq === -1)
|
|
30
|
+
continue;
|
|
31
|
+
const name = segments[i].slice(0, eq).trim().toLowerCase();
|
|
32
|
+
const value = segments[i].slice(eq + 1).trim();
|
|
33
|
+
if (name === "q") {
|
|
34
|
+
const parsed = parseQ(value);
|
|
35
|
+
/* An unparsable weight makes the whole range unusable rather than silently q=1. */
|
|
36
|
+
q = parsed ?? 0;
|
|
37
|
+
/* Parameters after q are accept-extensions, not media-type parameters. */
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
params.set(name, unquote(value));
|
|
41
|
+
}
|
|
42
|
+
types.push({ index, params, q, subtype, type });
|
|
43
|
+
}
|
|
44
|
+
return types;
|
|
45
|
+
}
|
|
46
|
+
function unquote(value) {
|
|
47
|
+
return value.length >= 2 && value.startsWith('"') && value.endsWith('"') ? value.slice(1, -1) : value;
|
|
48
|
+
}
|
|
49
|
+
/** `type/subtype;a=1;b=2` → its parameters, names lowercased. */
|
|
50
|
+
function typeParams(segments) {
|
|
51
|
+
const params = new Map();
|
|
52
|
+
for (let i = 1; i < segments.length; i++) {
|
|
53
|
+
const eq = segments[i].indexOf("=");
|
|
54
|
+
if (eq === -1)
|
|
55
|
+
continue;
|
|
56
|
+
params.set(segments[i].slice(0, eq).trim().toLowerCase(), unquote(segments[i].slice(eq + 1).trim()));
|
|
57
|
+
}
|
|
58
|
+
return params;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 0 = no match; otherwise higher is more specific. A range with parameters matches only a
|
|
62
|
+
* supported type that carries every one of them with the same value (RFC 9110 §12.5.1), so
|
|
63
|
+
* `application/json;v=2;q=0` excludes `application/json;v=2`, never plain `application/json`.
|
|
64
|
+
*/
|
|
65
|
+
function specificity(range, sType, sSub, sParams) {
|
|
66
|
+
if (range.type === "*")
|
|
67
|
+
return 1;
|
|
68
|
+
if (range.type !== sType)
|
|
69
|
+
return 0;
|
|
70
|
+
if (range.subtype === "*")
|
|
71
|
+
return 2;
|
|
72
|
+
if (range.subtype !== sSub)
|
|
73
|
+
return 0;
|
|
74
|
+
for (const [name, value] of range.params) {
|
|
75
|
+
if (sParams.get(name) !== value)
|
|
76
|
+
return 0;
|
|
77
|
+
}
|
|
78
|
+
return 3 + range.params.size;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Pick the best supported content type based on the request's Accept header.
|
|
82
|
+
*
|
|
83
|
+
* Each supported type takes the weight of the most specific range that matches
|
|
84
|
+
* it (RFC 9110 §12.5.1), so `text/html;q=0, *\/*` excludes `text/html`. Among
|
|
85
|
+
* types with equal weight, the server's order in `supported` wins.
|
|
86
|
+
*
|
|
87
|
+
* Returns null if no match found. Returns the first supported type if there is
|
|
88
|
+
* no Accept header.
|
|
89
|
+
*/
|
|
90
|
+
export function accepts(req, supported) {
|
|
91
|
+
const header = req.headers.get("accept");
|
|
92
|
+
if (header === null || header.trim().length === 0) {
|
|
93
|
+
return supported[0] ?? null;
|
|
94
|
+
}
|
|
95
|
+
const parsed = parseAccept(header);
|
|
96
|
+
if (parsed.length === 0) {
|
|
97
|
+
return supported[0] ?? null;
|
|
98
|
+
}
|
|
99
|
+
let bestMatch = null;
|
|
100
|
+
let bestQ = 0;
|
|
101
|
+
for (const s of supported) {
|
|
102
|
+
const lower = s.toLowerCase();
|
|
103
|
+
const slash = lower.indexOf("/");
|
|
104
|
+
if (slash === -1)
|
|
105
|
+
continue;
|
|
106
|
+
const sType = lower.slice(0, slash);
|
|
107
|
+
const sSegments = s.slice(slash + 1).split(";");
|
|
108
|
+
const sSub = sSegments[0].trim().toLowerCase();
|
|
109
|
+
const sParams = typeParams(sSegments);
|
|
110
|
+
let weight = -1;
|
|
111
|
+
let bestSpecificity = 0;
|
|
112
|
+
for (const range of parsed) {
|
|
113
|
+
const spec = specificity(range, sType, sSub, sParams);
|
|
114
|
+
if (spec > bestSpecificity) {
|
|
115
|
+
bestSpecificity = spec;
|
|
116
|
+
weight = range.q;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (weight > bestQ) {
|
|
120
|
+
bestQ = weight;
|
|
121
|
+
bestMatch = s;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return bestMatch;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=accepts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accepts.js","sourceRoot":"","sources":["../src/accepts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** The in-memory body of a response Honey built from a string or bytes, if any. */
|
|
2
|
+
export declare function rawBodyOf(response: Response): string | Uint8Array | null;
|
|
3
|
+
/**
|
|
4
|
+
* What kind of body a response carries, decided without reading it.
|
|
5
|
+
*
|
|
6
|
+
* - `empty`: no body.
|
|
7
|
+
* - `buffered`: the whole body is already in memory (a response Honey built
|
|
8
|
+
* from a string or bytes) or its size is declared by `content-length`, so
|
|
9
|
+
* reading it is bounded.
|
|
10
|
+
* - `stream`: anything else (SSE, `generate()`, `new Response(stream)`, a
|
|
11
|
+
* proxied `fetch()` without a length). Middleware must not buffer it.
|
|
12
|
+
*
|
|
13
|
+
* Content type is never consulted: SSE and NDJSON streams carry one.
|
|
14
|
+
* Honey's own responses are tagged when they are created: buffered ones by their raw body,
|
|
15
|
+
* streams by `BODY_KIND`. An untagged native response is a stream unless it declares a length.
|
|
16
|
+
*/
|
|
17
|
+
export declare function bodyKind(response: Response): "buffered" | "empty" | "stream";
|
|
18
|
+
/** A stream `sse()`, `stream()` or `generate()` created: possibly endless, never to be buffered. */
|
|
19
|
+
export declare function isProducedStream(response: Response): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* The response to a HEAD request: same status and headers, no body. A body Honey built in
|
|
22
|
+
* memory keeps its `content-length`, so HEAD reports the size GET would send; a stream is
|
|
23
|
+
* cancelled unread, so its producer never starts (or stops if it already did).
|
|
24
|
+
*/
|
|
25
|
+
export declare function headResponse(response: Response): Response;
|
|
26
|
+
//# sourceMappingURL=body-kind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"body-kind.d.ts","sourceRoot":"","sources":["../src/body-kind.ts"],"names":[],"mappings":"AAMA,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAGxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAY5E;AAED,oGAAoG;AACpG,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAE5D;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAczD"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { isHoneyResponse, replaceResponse } from "./honey-response.js";
|
|
2
|
+
import { BODY_KIND } from "./producer-stream.js";
|
|
3
|
+
/** Set by `ctx.res.json/text/html/...` on native responses built from in-memory bytes. */
|
|
4
|
+
const RAW_BODY = Symbol.for("honey.rawBody");
|
|
5
|
+
/** The in-memory body of a response Honey built from a string or bytes, if any. */
|
|
6
|
+
export function rawBodyOf(response) {
|
|
7
|
+
if (isHoneyResponse(response))
|
|
8
|
+
return response.rawBody;
|
|
9
|
+
return response[RAW_BODY] ?? null;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* What kind of body a response carries, decided without reading it.
|
|
13
|
+
*
|
|
14
|
+
* - `empty`: no body.
|
|
15
|
+
* - `buffered`: the whole body is already in memory (a response Honey built
|
|
16
|
+
* from a string or bytes) or its size is declared by `content-length`, so
|
|
17
|
+
* reading it is bounded.
|
|
18
|
+
* - `stream`: anything else (SSE, `generate()`, `new Response(stream)`, a
|
|
19
|
+
* proxied `fetch()` without a length). Middleware must not buffer it.
|
|
20
|
+
*
|
|
21
|
+
* Content type is never consulted: SSE and NDJSON streams carry one.
|
|
22
|
+
* Honey's own responses are tagged when they are created: buffered ones by their raw body,
|
|
23
|
+
* streams by `BODY_KIND`. An untagged native response is a stream unless it declares a length.
|
|
24
|
+
*/
|
|
25
|
+
export function bodyKind(response) {
|
|
26
|
+
if (rawBodyOf(response) !== null)
|
|
27
|
+
return "buffered";
|
|
28
|
+
/* `sse()`, `stream()` and `generate()` tag their responses at creation */
|
|
29
|
+
if (response[BODY_KIND] === "stream")
|
|
30
|
+
return "stream";
|
|
31
|
+
if (isHoneyResponse(response)) {
|
|
32
|
+
/* `body` is the stream (or null) when no raw bytes exist; reading it does not allocate. */
|
|
33
|
+
return response.body === null ? "empty" : "stream";
|
|
34
|
+
}
|
|
35
|
+
if (response.body === null)
|
|
36
|
+
return "empty";
|
|
37
|
+
const length = response.headers.get("content-length");
|
|
38
|
+
if (length !== null && /^\d+$/.test(length.trim()))
|
|
39
|
+
return "buffered";
|
|
40
|
+
return "stream";
|
|
41
|
+
}
|
|
42
|
+
/** A stream `sse()`, `stream()` or `generate()` created: possibly endless, never to be buffered. */
|
|
43
|
+
export function isProducedStream(response) {
|
|
44
|
+
return response[BODY_KIND] === "stream";
|
|
45
|
+
}
|
|
46
|
+
function noop() { }
|
|
47
|
+
/**
|
|
48
|
+
* The response to a HEAD request: same status and headers, no body. A body Honey built in
|
|
49
|
+
* memory keeps its `content-length`, so HEAD reports the size GET would send; a stream is
|
|
50
|
+
* cancelled unread, so its producer never starts (or stops if it already did).
|
|
51
|
+
*/
|
|
52
|
+
export function headResponse(response) {
|
|
53
|
+
if (response.status === 101)
|
|
54
|
+
return response;
|
|
55
|
+
const raw = rawBodyOf(response);
|
|
56
|
+
const headers = new Headers(response.headers);
|
|
57
|
+
if (raw !== null) {
|
|
58
|
+
if (!headers.has("content-length")) {
|
|
59
|
+
const length = typeof raw === "string" ? new TextEncoder().encode(raw).byteLength : raw.byteLength;
|
|
60
|
+
headers.set("content-length", String(length));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
const body = response.body;
|
|
65
|
+
if (body !== null && !body.locked)
|
|
66
|
+
body.cancel().catch(noop);
|
|
67
|
+
}
|
|
68
|
+
return replaceResponse(response, { body: null, headers });
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=body-kind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"body-kind.js","sourceRoot":"","sources":["../src/body-kind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAEhD,0FAA0F;AAC1F,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;AAE5C,mFAAmF;AACnF,MAAM,UAAU,SAAS,CAAC,QAAkB;IAC3C,IAAI,eAAe,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC,OAAO,CAAA;IACtD,OAAQ,QAA4D,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAA;AACvF,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAkB;IAC1C,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI;QAAE,OAAO,UAAU,CAAA;IACnD,0EAA0E;IAC1E,IAAK,QAAgD,CAAC,SAAS,CAAC,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC9F,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,2FAA2F;QAC3F,OAAO,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAA;IACnD,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,OAAO,CAAA;IAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IACrD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,UAAU,CAAA;IACrE,OAAO,QAAQ,CAAA;AAChB,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,gBAAgB,CAAC,QAAkB;IAClD,OAAQ,QAAgD,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAA;AACjF,CAAC;AAED,SAAS,IAAI,KAAU,CAAC;AAExB;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,QAAkB;IAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,QAAQ,CAAA;IAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC/B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAsB,CAAC,CAAA;IAC5D,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAA;YAClG,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;QAC9C,CAAC;IACF,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;QAC1B,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7D,CAAC;IACD,OAAO,eAAe,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AAC1D,CAAC"}
|
package/dist/body-limit.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { MiddlewareFn } from "./middleware.ts";
|
|
2
2
|
type BodyLimitOptions = {
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Per media-type size limits. A key matches when the request's media type
|
|
5
|
+
* (lowercased, parameters dropped) starts with it, so `"multipart/"` covers
|
|
6
|
+
* every multipart type. The longest matching key wins.
|
|
7
|
+
*/
|
|
4
8
|
limits?: Record<string, number>;
|
|
5
9
|
/** Default max body size in bytes — used when no content-type match or no limits map */
|
|
6
10
|
maxSize: number;
|
package/dist/body-limit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body-limit.d.ts","sourceRoot":"","sources":["../src/body-limit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"body-limit.d.ts","sourceRoot":"","sources":["../src/body-limit.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGnD,KAAK,gBAAgB,GAAG;IACvB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC5B,CAAA;AAED,YAAY,EAAE,gBAAgB,EAAE,CAAA;AAgBhC,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,EAAE,EAAE,CAAC,CA4GpF"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { namedMiddleware } from "./middleware.js";
|
|
2
|
+
import { HoneyError } from "./error.js";
|
|
3
|
+
import { parseMediaType } from "./media-type.js";
|
|
4
|
+
import { EK, SK } from "./types.js";
|
|
5
|
+
/* After an overflow the rest of the upload is read and discarded so the client
|
|
6
|
+
* sees the 413 instead of a reset, but only this much: past it the stream is
|
|
7
|
+
* cancelled, so a client cannot hold the connection open with an endless body. */
|
|
8
|
+
const DRAIN_LIMIT = 1_048_576;
|
|
9
|
+
/* the shared parser lowercases and drops parameters; a malformed type matches no key */
|
|
10
|
+
function mediaType(contentType) {
|
|
11
|
+
return parseMediaType(contentType)?.essence ?? null;
|
|
12
|
+
}
|
|
13
|
+
function tooLarge() {
|
|
14
|
+
return new HoneyError({ errorKey: EK.content_too_large, status: SK.content_too_large });
|
|
15
|
+
}
|
|
16
|
+
export function bodyLimit(opts) {
|
|
17
|
+
const { limits, maxSize, trustContentLength } = opts;
|
|
18
|
+
const limitEntries = limits !== undefined
|
|
19
|
+
? Object.entries(limits)
|
|
20
|
+
.map(([key, limit]) => [key.trim().toLowerCase(), limit])
|
|
21
|
+
.sort((a, b) => b[0].length - a[0].length)
|
|
22
|
+
: null;
|
|
23
|
+
const resolveMax = (req) => {
|
|
24
|
+
if (limitEntries === null)
|
|
25
|
+
return maxSize;
|
|
26
|
+
const type = mediaType(req.headers.get("content-type"));
|
|
27
|
+
if (type === null)
|
|
28
|
+
return maxSize;
|
|
29
|
+
for (const [key, limit] of limitEntries) {
|
|
30
|
+
if (type.startsWith(key))
|
|
31
|
+
return limit;
|
|
32
|
+
}
|
|
33
|
+
return maxSize;
|
|
34
|
+
};
|
|
35
|
+
/* every method: a DELETE or PROPFIND with a body is as large as a POST */
|
|
36
|
+
const mw = (ctx, next) => {
|
|
37
|
+
const req = ctx.req;
|
|
38
|
+
const contentLength = req.headers.get("content-length");
|
|
39
|
+
const body = req.body;
|
|
40
|
+
if (body === null && contentLength === null)
|
|
41
|
+
return next();
|
|
42
|
+
const limit = resolveMax(req);
|
|
43
|
+
/* fast path: Content-Length header present */
|
|
44
|
+
if (contentLength !== null) {
|
|
45
|
+
const len = Number.parseInt(contentLength, 10);
|
|
46
|
+
if (!Number.isNaN(len) && len > limit)
|
|
47
|
+
throw tooLarge();
|
|
48
|
+
if (trustContentLength === true)
|
|
49
|
+
return next();
|
|
50
|
+
}
|
|
51
|
+
/* slow path: stream-count when no Content-Length (chunked) or trustContentLength disabled.
|
|
52
|
+
* On overflow, error the downstream consumer then drain (do not cancel) the upstream —
|
|
53
|
+
* cancelling an undici FormData body mid-encode enqueues into a closed stream on Node 24. */
|
|
54
|
+
if (body === null)
|
|
55
|
+
return next();
|
|
56
|
+
let totalBytes = 0;
|
|
57
|
+
let overflowed = false;
|
|
58
|
+
const reader = body.getReader();
|
|
59
|
+
const drainUpstream = () => {
|
|
60
|
+
void (async () => {
|
|
61
|
+
let drained = 0;
|
|
62
|
+
try {
|
|
63
|
+
while (true) {
|
|
64
|
+
const r = await reader.read();
|
|
65
|
+
if (r.done)
|
|
66
|
+
break;
|
|
67
|
+
drained += r.value.byteLength;
|
|
68
|
+
if (drained > DRAIN_LIMIT) {
|
|
69
|
+
await reader.cancel();
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
/* producer may already be done */
|
|
76
|
+
}
|
|
77
|
+
})();
|
|
78
|
+
};
|
|
79
|
+
const limited = new ReadableStream({
|
|
80
|
+
cancel() {
|
|
81
|
+
/* consumer aborted — still drain so undici FormData encoders can finish */
|
|
82
|
+
drainUpstream();
|
|
83
|
+
},
|
|
84
|
+
async pull(controller) {
|
|
85
|
+
if (overflowed)
|
|
86
|
+
return;
|
|
87
|
+
let result;
|
|
88
|
+
try {
|
|
89
|
+
result = await reader.read();
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
controller.error(err);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (result.done) {
|
|
96
|
+
controller.close();
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
totalBytes += result.value.byteLength;
|
|
100
|
+
if (totalBytes > limit) {
|
|
101
|
+
overflowed = true;
|
|
102
|
+
controller.error(tooLarge());
|
|
103
|
+
drainUpstream();
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
controller.enqueue(result.value);
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
const replaceBody = req[Symbol.for("honey.replaceBody")];
|
|
110
|
+
if (typeof replaceBody === "function") {
|
|
111
|
+
;
|
|
112
|
+
replaceBody.call(req, limited);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
/* duplex: "half" required by Node/undici when body is a ReadableStream */
|
|
116
|
+
const newReq = new Request(req, {
|
|
117
|
+
body: limited,
|
|
118
|
+
duplex: "half",
|
|
119
|
+
});
|
|
120
|
+
Object.defineProperty(ctx, "req", { configurable: true, value: newReq });
|
|
121
|
+
}
|
|
122
|
+
return next();
|
|
123
|
+
};
|
|
124
|
+
return namedMiddleware("bodyLimit", mw);
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=body-limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"body-limit.js","sourceRoot":"","sources":["../src/body-limit.ts"],"names":[],"mappings":"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"}
|
package/dist/build/index.d.ts
CHANGED
|
@@ -1,10 +1,25 @@
|
|
|
1
|
+
import { type HoneyFeature } from "../feature-detect.ts";
|
|
1
2
|
export type HoneyBuildConfig = {
|
|
2
3
|
external?: string[];
|
|
4
|
+
/**
|
|
5
|
+
* Force optional features on or off. Unset features are detected by scanning the app's
|
|
6
|
+
* import graph for `.openapi()` / `.manifest()`, `.errorI18n()` and `.serve()` calls.
|
|
7
|
+
*/
|
|
8
|
+
features?: Partial<Record<HoneyFeature, boolean>>;
|
|
3
9
|
minify?: boolean;
|
|
4
10
|
outDir?: string;
|
|
5
11
|
port?: number;
|
|
6
12
|
target: "bun" | "cloudflare" | "deno" | "node";
|
|
7
13
|
};
|
|
14
|
+
type ParseContext = {
|
|
15
|
+
parse?: (code: string, options?: {
|
|
16
|
+
lang?: "js" | "jsx" | "ts" | "tsx";
|
|
17
|
+
}) => unknown;
|
|
18
|
+
resolve?: (source: string, importer?: string) => Promise<{
|
|
19
|
+
external?: unknown;
|
|
20
|
+
id: string;
|
|
21
|
+
} | null>;
|
|
22
|
+
};
|
|
8
23
|
export declare function createBuildPlugin(buildConfig: HoneyBuildConfig, shared: {
|
|
9
24
|
entry: string;
|
|
10
25
|
export: string;
|
|
@@ -25,18 +40,19 @@ export declare function createBuildPlugin(buildConfig: HoneyBuildConfig, shared:
|
|
|
25
40
|
ssr: boolean;
|
|
26
41
|
};
|
|
27
42
|
ssr: {
|
|
28
|
-
noExternal
|
|
43
|
+
noExternal?: boolean | undefined;
|
|
29
44
|
target: "node" | "webworker";
|
|
30
45
|
};
|
|
31
46
|
};
|
|
32
47
|
configResolved(cfg: {
|
|
33
48
|
root: string;
|
|
34
49
|
}): void;
|
|
35
|
-
load(id: string): {
|
|
50
|
+
load(this: ParseContext | undefined, id: string): Promise<{
|
|
36
51
|
code: string;
|
|
37
52
|
moduleType: string;
|
|
38
|
-
} | undefined
|
|
53
|
+
} | undefined>;
|
|
39
54
|
name: string;
|
|
40
55
|
resolveId(id: string): string | undefined;
|
|
41
56
|
};
|
|
57
|
+
export {};
|
|
42
58
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/build/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/build/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoD,KAAK,YAAY,EAAe,MAAM,sBAAsB,CAAA;AAIvH,MAAM,MAAM,gBAAgB,GAAG;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAA;IACjD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,KAAK,GAAG,YAAY,GAAG,MAAM,GAAG,MAAM,CAAA;CAC9C,CAAA;AA+ED,KAAK,YAAY,GAAG;IACnB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAA;KAAE,KAAK,OAAO,CAAA;IACnF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;CACnG,CAAA;AAwDD,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;WAWjG,OAAO;;;;;;;;;;oBAWA,cAAc;;;;;;;;;;wBAYR;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;eAInB,YAAY,GAAG,SAAS,MAAM,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;;kBAiBnG,MAAM,GAAG,MAAM,GAAG,SAAS;EAK1C"}
|