@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
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The request URL without its query string or fragment: queries carry tokens and session ids,
|
|
3
|
+
* and attribute values are exported to whatever backend the tracer feeds.
|
|
4
|
+
*/
|
|
5
|
+
function urlWithoutQuery(url) {
|
|
6
|
+
const q = url.indexOf("?");
|
|
7
|
+
const h = url.indexOf("#");
|
|
8
|
+
const end = q === -1 ? h : h === -1 ? q : Math.min(q, h);
|
|
9
|
+
return end === -1 ? url : url.slice(0, end);
|
|
10
|
+
}
|
|
11
|
+
/** Path part of an absolute URL, without the query. */
|
|
12
|
+
function pathOf(url) {
|
|
13
|
+
const bare = urlWithoutQuery(url);
|
|
14
|
+
const scheme = bare.indexOf("//");
|
|
15
|
+
const start = scheme === -1 ? 0 : bare.indexOf("/", scheme + 2);
|
|
16
|
+
return start === -1 ? "/" : bare.slice(start);
|
|
17
|
+
}
|
|
18
|
+
export function otelAdapter(options) {
|
|
19
|
+
const spans = new WeakMap();
|
|
20
|
+
return {
|
|
21
|
+
onError(ctx) {
|
|
22
|
+
try {
|
|
23
|
+
/*
|
|
24
|
+
* onError doesn't receive req — error details are best captured
|
|
25
|
+
* via a standalone span. Per-request root span is in onResponse.
|
|
26
|
+
*/
|
|
27
|
+
const span = options.tracer.startSpan("http.error");
|
|
28
|
+
span.setAttribute("error.key", ctx.error.errorKey);
|
|
29
|
+
span.setAttribute("error.status", ctx.error.status);
|
|
30
|
+
span.setAttribute("http.duration_ms", ctx.duration);
|
|
31
|
+
span.end();
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
/* swallow */
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
onHandler(ctx) {
|
|
38
|
+
try {
|
|
39
|
+
const span = options.tracer.startSpan("http.handler");
|
|
40
|
+
span.setAttribute("http.method", ctx.method);
|
|
41
|
+
/* the pattern, never the request path: one series per route, not per id */
|
|
42
|
+
if (ctx.route !== undefined && ctx.route !== "")
|
|
43
|
+
span.setAttribute("http.route", ctx.route);
|
|
44
|
+
span.setAttribute("http.status_code", ctx.status);
|
|
45
|
+
span.setAttribute("http.duration_ms", ctx.duration);
|
|
46
|
+
span.end();
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
/* swallow */
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
onMethodNotAllowed(ctx) {
|
|
53
|
+
try {
|
|
54
|
+
const span = spans.get(ctx.req);
|
|
55
|
+
if (span) {
|
|
56
|
+
span.addEvent("method_not_allowed", {
|
|
57
|
+
"http.allowed_methods": ctx.allowed.join(", "),
|
|
58
|
+
"http.method": ctx.method,
|
|
59
|
+
"url.path": ctx.path,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
/* swallow */
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
onMiddleware(ctx) {
|
|
68
|
+
try {
|
|
69
|
+
const span = options.tracer.startSpan(`middleware.${ctx.name}`);
|
|
70
|
+
span.setAttribute("middleware.name", ctx.name);
|
|
71
|
+
span.setAttribute("middleware.duration_ms", ctx.duration);
|
|
72
|
+
if (ctx.error)
|
|
73
|
+
span.addEvent("error");
|
|
74
|
+
span.end();
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
/* swallow */
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
onNotFound(ctx) {
|
|
81
|
+
try {
|
|
82
|
+
const span = spans.get(ctx.req);
|
|
83
|
+
if (span) {
|
|
84
|
+
span.addEvent("not_found", {
|
|
85
|
+
"http.method": ctx.method,
|
|
86
|
+
"url.path": ctx.path,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
/* swallow */
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
onRequest(ctx) {
|
|
95
|
+
try {
|
|
96
|
+
const span = options.tracer.startSpan("http.request");
|
|
97
|
+
span.setAttribute("http.method", ctx.req.method);
|
|
98
|
+
span.setAttribute("http.url", urlWithoutQuery(ctx.req.url));
|
|
99
|
+
span.setAttribute("url.path", pathOf(ctx.req.url));
|
|
100
|
+
spans.set(ctx.req, span);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
/* swallow */
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
onResponse(ctx) {
|
|
107
|
+
try {
|
|
108
|
+
const span = spans.get(ctx.req);
|
|
109
|
+
if (span) {
|
|
110
|
+
span.setAttribute("http.status_code", ctx.status);
|
|
111
|
+
span.setAttribute("http.duration_ms", ctx.duration);
|
|
112
|
+
span.end();
|
|
113
|
+
spans.delete(ctx.req);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
/* swallow */
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
onRoute(ctx) {
|
|
121
|
+
try {
|
|
122
|
+
const span = spans.get(ctx.req);
|
|
123
|
+
if (span) {
|
|
124
|
+
span.setAttribute("http.method", ctx.method);
|
|
125
|
+
if (ctx.route !== undefined && ctx.route !== "")
|
|
126
|
+
span.setAttribute("http.route", ctx.route);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
/* swallow */
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=otel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.js","sourceRoot":"","sources":["../../src/telemetry/otel.ts"],"names":[],"mappings":"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"}
|
package/dist/testing.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import type { Honey } from "./index.ts";
|
|
|
2
2
|
type TestRequestOptions = {
|
|
3
3
|
form?: Record<string, string>;
|
|
4
4
|
headers?: Record<string, string>;
|
|
5
|
+
/** Peer address the request comes from, as a server adapter would report it (`ctx.ip`). */
|
|
6
|
+
ip?: string;
|
|
5
7
|
json?: unknown;
|
|
6
8
|
search?: Record<string, string>;
|
|
7
9
|
};
|
|
@@ -14,10 +16,20 @@ type TestClient = {
|
|
|
14
16
|
post(path: string, opts?: TestRequestOptions): Promise<Response>;
|
|
15
17
|
put(path: string, opts?: TestRequestOptions): Promise<Response>;
|
|
16
18
|
request(method: string, path: string, opts?: TestRequestOptions): Promise<Response>;
|
|
19
|
+
/** Stop the server a `transport: "node"` client started (a no-op otherwise). */
|
|
20
|
+
close(): Promise<void>;
|
|
17
21
|
};
|
|
18
22
|
type TestClientOptions<TEnv> = {
|
|
19
23
|
cookies?: boolean;
|
|
20
24
|
env: TEnv;
|
|
25
|
+
/** Default peer address for every request; a per-request `ip` wins. Ignored by `transport: "node"`. */
|
|
26
|
+
ip?: string;
|
|
27
|
+
/**
|
|
28
|
+
* `"fetch"` (default) calls `app.fetch()` directly. `"node"` serves the app with honey's Node
|
|
29
|
+
* adapter on a random local port and sends real HTTP, so requests go through the Node
|
|
30
|
+
* `Request` view and response writer. Call `close()` when done.
|
|
31
|
+
*/
|
|
32
|
+
transport?: "fetch" | "node";
|
|
21
33
|
};
|
|
22
34
|
export declare function testClient<TEnv>(app: Honey<TEnv, unknown, unknown, unknown, unknown, string, string>, options: TestClientOptions<TEnv>): TestClient;
|
|
23
35
|
export {};
|
package/dist/testing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGvC,KAAK,kBAAkB,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,2FAA2F;IAC3F,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B,CAAA;AAED,KAAK,UAAU,GAAG;IACjB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC/D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAChE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAChE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC/D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnF,gFAAgF;IAChF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB,CAAA;AA4BD,KAAK,iBAAiB,CAAC,IAAI,IAAI;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,EAAE,IAAI,CAAA;IACT,uGAAuG;IACvG,EAAE,CAAC,EAAE,MAAM,CAAA;IACX;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC5B,CAAA;AA8BD,wBAAgB,UAAU,CAAC,IAAI,EAC9B,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EACpE,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAC9B,UAAU,CAuEZ"}
|
package/dist/testing.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { setPeerAddress } from "./peer.js";
|
|
2
|
+
function buildRequest(method, path, baseUrl, opts) {
|
|
3
|
+
const url = new URL(path, baseUrl);
|
|
4
|
+
if (opts?.search) {
|
|
5
|
+
for (const [k, v] of Object.entries(opts.search)) {
|
|
6
|
+
url.searchParams.set(k, v);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
const headers = new Headers(opts?.headers);
|
|
10
|
+
let body = null;
|
|
11
|
+
if (opts?.json !== undefined) {
|
|
12
|
+
headers.set("content-type", "application/json");
|
|
13
|
+
body = JSON.stringify(opts.json);
|
|
14
|
+
}
|
|
15
|
+
else if (opts?.form) {
|
|
16
|
+
const formData = new FormData();
|
|
17
|
+
for (const [k, v] of Object.entries(opts.form)) {
|
|
18
|
+
formData.append(k, v);
|
|
19
|
+
}
|
|
20
|
+
body = formData;
|
|
21
|
+
}
|
|
22
|
+
return new Request(url.toString(), { body, headers, method });
|
|
23
|
+
}
|
|
24
|
+
/** Name, value, and whether the cookie is already expired (`Max-Age<=0`, or `Expires` in the past). */
|
|
25
|
+
function parseSetCookie(setCookie, now) {
|
|
26
|
+
const parts = setCookie.split(";");
|
|
27
|
+
const pair = parts[0] ?? "";
|
|
28
|
+
const eq = pair.indexOf("=");
|
|
29
|
+
if (eq === -1)
|
|
30
|
+
return null;
|
|
31
|
+
const name = pair.slice(0, eq).trim();
|
|
32
|
+
if (name === "")
|
|
33
|
+
return null;
|
|
34
|
+
const value = pair.slice(eq + 1).trim();
|
|
35
|
+
let maxAge = null;
|
|
36
|
+
let expires = null;
|
|
37
|
+
for (const attr of parts.slice(1)) {
|
|
38
|
+
const i = attr.indexOf("=");
|
|
39
|
+
const key = (i === -1 ? attr : attr.slice(0, i)).trim().toLowerCase();
|
|
40
|
+
const v = i === -1 ? "" : attr.slice(i + 1).trim();
|
|
41
|
+
if (key === "max-age" && /^-?\d+$/.test(v))
|
|
42
|
+
maxAge = Number(v);
|
|
43
|
+
else if (key === "expires") {
|
|
44
|
+
const t = Date.parse(v);
|
|
45
|
+
if (!Number.isNaN(t))
|
|
46
|
+
expires = t;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/* Max-Age wins over Expires (RFC 6265 §5.3) */
|
|
50
|
+
const expired = maxAge !== null ? maxAge <= 0 : expires !== null && expires <= now;
|
|
51
|
+
return { expired, name, value };
|
|
52
|
+
}
|
|
53
|
+
export function testClient(app, options) {
|
|
54
|
+
const baseUrl = "http://localhost";
|
|
55
|
+
const jar = new Map();
|
|
56
|
+
let node = null;
|
|
57
|
+
/* a real Node server for `transport: "node"`, started on first use */
|
|
58
|
+
const nodeServer = () => {
|
|
59
|
+
if (node === null) {
|
|
60
|
+
node = (async () => {
|
|
61
|
+
const { serve } = await import("./node.js");
|
|
62
|
+
const server = serve(app, { env: options.env, hostname: "127.0.0.1", port: 0 });
|
|
63
|
+
await new Promise((resolve, reject) => {
|
|
64
|
+
server.once("listening", () => resolve());
|
|
65
|
+
server.once("error", reject);
|
|
66
|
+
});
|
|
67
|
+
const addr = server.address();
|
|
68
|
+
return { close: () => server.shutdown(1_000), url: `http://127.0.0.1:${addr.port}` };
|
|
69
|
+
})();
|
|
70
|
+
}
|
|
71
|
+
return node;
|
|
72
|
+
};
|
|
73
|
+
async function doRequest(method, path, opts) {
|
|
74
|
+
const mergedHeaders = { ...opts?.headers };
|
|
75
|
+
if (options.cookies && jar.size > 0) {
|
|
76
|
+
const existing = mergedHeaders.cookie ?? "";
|
|
77
|
+
const jarStr = Array.from(jar.entries())
|
|
78
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
79
|
+
.join("; ");
|
|
80
|
+
mergedHeaders.cookie = existing ? `${existing}; ${jarStr}` : jarStr;
|
|
81
|
+
}
|
|
82
|
+
let res;
|
|
83
|
+
if (options.transport === "node") {
|
|
84
|
+
const { url } = await nodeServer();
|
|
85
|
+
res = await fetch(buildRequest(method, path, url, { ...opts, headers: mergedHeaders }), { redirect: "manual" });
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
const req = buildRequest(method, path, baseUrl, { ...opts, headers: mergedHeaders });
|
|
89
|
+
const ip = opts?.ip ?? options.ip;
|
|
90
|
+
if (ip !== undefined)
|
|
91
|
+
setPeerAddress(req, ip);
|
|
92
|
+
res = await app.fetch(req, options.env);
|
|
93
|
+
}
|
|
94
|
+
if (options.cookies) {
|
|
95
|
+
const now = Date.now();
|
|
96
|
+
for (const sc of res.headers.getSetCookie()) {
|
|
97
|
+
const parsed = parseSetCookie(sc, now);
|
|
98
|
+
if (parsed === null)
|
|
99
|
+
continue;
|
|
100
|
+
if (parsed.expired)
|
|
101
|
+
jar.delete(parsed.name);
|
|
102
|
+
else
|
|
103
|
+
jar.set(parsed.name, parsed.value);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return res;
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
async close() {
|
|
110
|
+
if (node !== null)
|
|
111
|
+
await (await node).close();
|
|
112
|
+
node = null;
|
|
113
|
+
},
|
|
114
|
+
delete: (path, opts) => doRequest("DELETE", path, opts),
|
|
115
|
+
get: (path, opts) => doRequest("GET", path, opts),
|
|
116
|
+
head: (path, opts) => doRequest("HEAD", path, opts),
|
|
117
|
+
options: (path, opts) => doRequest("OPTIONS", path, opts),
|
|
118
|
+
patch: (path, opts) => doRequest("PATCH", path, opts),
|
|
119
|
+
post: (path, opts) => doRequest("POST", path, opts),
|
|
120
|
+
put: (path, opts) => doRequest("PUT", path, opts),
|
|
121
|
+
request: (method, path, opts) => doRequest(method, path, opts),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=testing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAwB1C,SAAS,YAAY,CAAC,MAAc,EAAE,IAAY,EAAE,OAAe,EAAE,IAAyB;IAC7F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAElC,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3B,CAAC;IACF,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC1C,IAAI,IAAI,GAAoB,IAAI,CAAA;IAEhC,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;QAC/C,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;SAAM,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAA;QAC/B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACtB,CAAC;QACD,IAAI,GAAG,QAAQ,CAAA;IAChB,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;AAC9D,CAAC;AAiBD,uGAAuG;AACvG,SAAS,cAAc,CAAC,SAAiB,EAAE,GAAW;IACrD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,EAAE,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACrC,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAA;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACvC,IAAI,MAAM,GAAkB,IAAI,CAAA;IAChC,IAAI,OAAO,GAAkB,IAAI,CAAA;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QACrE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAClD,IAAI,GAAG,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;aACzD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,OAAO,GAAG,CAAC,CAAA;QAClC,CAAC;IACF,CAAC;IACD,+CAA+C;IAC/C,MAAM,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,IAAI,GAAG,CAAA;IAClF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,UAAU,CACzB,GAAoE,EACpE,OAAgC;IAEhC,MAAM,OAAO,GAAG,kBAAkB,CAAA;IAClC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAA;IACrC,IAAI,IAAI,GAA4D,IAAI,CAAA;IAExE,sEAAsE;IACtE,MAAM,UAAU,GAAG,GAAqD,EAAE;QACzE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE;gBAClB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;gBAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;gBAC/E,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC3C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;oBACzC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;gBAC7B,CAAC,CAAC,CAAA;gBACF,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAsB,CAAA;gBACjD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,oBAAoB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAA;YACrF,CAAC,CAAC,EAAE,CAAA;QACL,CAAC;QACD,OAAO,IAAI,CAAA;IACZ,CAAC,CAAA;IAED,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,IAAY,EAAE,IAAyB;QAC/E,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAA;QAE1C,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,IAAI,EAAE,CAAA;YAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;iBACtC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;iBAC5B,IAAI,CAAC,IAAI,CAAC,CAAA;YACZ,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QACpE,CAAC;QAED,IAAI,GAAa,CAAA;QACjB,IAAI,OAAO,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAClC,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,UAAU,EAAE,CAAA;YAClC,GAAG,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QAChH,CAAC;aAAM,CAAC;YACP,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAA;YACpF,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,OAAO,CAAC,EAAE,CAAA;YACjC,IAAI,EAAE,KAAK,SAAS;gBAAE,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;YAC7C,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;QACxC,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACtB,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;gBAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;gBACtC,IAAI,MAAM,KAAK,IAAI;oBAAE,SAAQ;gBAC7B,IAAI,MAAM,CAAC,OAAO;oBAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;;oBACtC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YACxC,CAAC;QACF,CAAC;QAED,OAAO,GAAG,CAAA;IACX,CAAC;IAED,OAAO;QACN,KAAK,CAAC,KAAK;YACV,IAAI,IAAI,KAAK,IAAI;gBAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,CAAA;YAC7C,IAAI,GAAG,IAAI,CAAA;QACZ,CAAC;QACD,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC;QACvD,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;QACjD,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;QACnD,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;QACzD,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;QACrD,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;QACnD,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;QACjD,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;KAC9D,CAAA;AACF,CAAC"}
|
package/dist/timeout.d.ts
CHANGED
|
@@ -2,6 +2,12 @@ import type { MiddlewareFn } from "./middleware.ts";
|
|
|
2
2
|
type TimeoutOptions = {
|
|
3
3
|
duration: number;
|
|
4
4
|
};
|
|
5
|
+
/**
|
|
6
|
+
* Answer 504 when the rest of the chain has not produced a response within `duration` ms, and
|
|
7
|
+
* abort `ctx.signal` so the handler's work stops: a `fetch()`, query or stream that takes the
|
|
8
|
+
* signal ends instead of running on after the 504. Work that ignores the signal still runs to
|
|
9
|
+
* completion; its response is discarded.
|
|
10
|
+
*/
|
|
5
11
|
export declare function timeout(opts: TimeoutOptions): MiddlewareFn<{}, {}>;
|
|
6
12
|
export {};
|
|
7
13
|
//# sourceMappingURL=timeout.d.ts.map
|
package/dist/timeout.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../src/timeout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../src/timeout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGnD,KAAK,cAAc,GAAG;IACrB,QAAQ,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CA2BlE"}
|
package/dist/timeout.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { abortRequest } from "./context.js";
|
|
2
|
+
import { namedMiddleware } from "./middleware.js";
|
|
3
|
+
import { HoneyError } from "./error.js";
|
|
4
|
+
import { EK, SK } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Answer 504 when the rest of the chain has not produced a response within `duration` ms, and
|
|
7
|
+
* abort `ctx.signal` so the handler's work stops: a `fetch()`, query or stream that takes the
|
|
8
|
+
* signal ends instead of running on after the 504. Work that ignores the signal still runs to
|
|
9
|
+
* completion; its response is discarded.
|
|
10
|
+
*/
|
|
11
|
+
export function timeout(opts) {
|
|
12
|
+
const { duration } = opts;
|
|
13
|
+
const mw = (ctx, next) => {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
const timer = setTimeout(() => {
|
|
16
|
+
const error = new HoneyError({
|
|
17
|
+
errorKey: EK.request_timeout,
|
|
18
|
+
status: SK.gateway_timeout,
|
|
19
|
+
});
|
|
20
|
+
reject(error);
|
|
21
|
+
abortRequest(ctx, new DOMException("request timed out", "TimeoutError"));
|
|
22
|
+
}, duration);
|
|
23
|
+
Promise.resolve(next())
|
|
24
|
+
.then((res) => {
|
|
25
|
+
clearTimeout(timer);
|
|
26
|
+
resolve(res);
|
|
27
|
+
})
|
|
28
|
+
.catch((err) => {
|
|
29
|
+
clearTimeout(timer);
|
|
30
|
+
reject(err);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
return namedMiddleware("timeout", mw);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=timeout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout.js","sourceRoot":"","sources":["../src/timeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,YAAY,CAAA;AAMnC;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,IAAoB;IAC3C,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;IAEzB,MAAM,EAAE,GAAyB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QAC9C,OAAO,IAAI,OAAO,CAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC7B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC;oBAC5B,QAAQ,EAAE,EAAE,CAAC,eAAe;oBAC5B,MAAM,EAAE,EAAE,CAAC,eAAe;iBAC1B,CAAC,CAAA;gBACF,MAAM,CAAC,KAAK,CAAC,CAAA;gBACb,YAAY,CAAC,GAA8B,EAAE,IAAI,YAAY,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC,CAAA;YACpG,CAAC,EAAE,QAAQ,CAAC,CAAA;YAEZ,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;iBACrB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACb,YAAY,CAAC,KAAK,CAAC,CAAA;gBACnB,OAAO,CAAC,GAAG,CAAC,CAAA;YACb,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACd,YAAY,CAAC,KAAK,CAAC,CAAA;gBACnB,MAAM,CAAC,GAAG,CAAC,CAAA;YACZ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACH,CAAC,CAAA;IAED,OAAO,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;AACtC,CAAC"}
|
package/dist/tree.d.ts
CHANGED
|
@@ -1,96 +1,193 @@
|
|
|
1
|
+
import type { RouteId, Segment } from "./pattern.ts";
|
|
1
2
|
import type { HttpMethod, InputSchemasDef, OutputSchemaDef } from "./types.ts";
|
|
2
3
|
import type { WSHandler } from "./ws/cloudflare.ts";
|
|
3
|
-
|
|
4
|
+
import type { WSOriginPolicy } from "./ws-origin.ts";
|
|
5
|
+
export type { HttpMethod, RouteId };
|
|
4
6
|
export type OutputValidator = (statusKey: string, data: unknown) => Promise<void>;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
type ChainMiddleware = (ctx: Record<string, unknown>, next: (additions?: Record<string, unknown>) => Promise<Response>) => Promise<Response>;
|
|
8
|
+
/**
|
|
9
|
+
* What a route was registered with, before the app resolves it. Finalize derives the
|
|
10
|
+
* resolved fields (`ek`, `mt`, `mw`, `bek`, `ef`) from these, so they never depend on the
|
|
11
|
+
* order of registration and are recomputed whenever the route graph changes.
|
|
12
|
+
*/
|
|
13
|
+
type RecordSource = {
|
|
14
|
+
/** chain middleware captured at registration (plus any mounting chain) */
|
|
15
|
+
cm?: ChainMiddleware[];
|
|
16
|
+
/** `.context()` values of the registering handle (merged with the mounting handle's) */
|
|
17
|
+
cv?: Record<string, unknown> | null;
|
|
18
|
+
/** error keys the route declared itself (`.errors()`, `.boundary()`) */
|
|
19
|
+
dk?: Set<string>;
|
|
20
|
+
/** the settings of the app the route was registered on — opaque here */
|
|
21
|
+
own?: unknown;
|
|
22
|
+
/** route-level boundary key (`.boundary()`) */
|
|
23
|
+
rb?: string | null;
|
|
24
|
+
/** route-level middleware (`.get(...).use(mw)`) */
|
|
25
|
+
rm?: ChainMiddleware[];
|
|
26
|
+
/** explicit meta: chain `.meta()` overlaid by route `.meta()` */
|
|
27
|
+
xm?: Record<string, unknown> | null;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* A route record — everything one registered route runs. Records live in a per-app table
|
|
31
|
+
* keyed by `RouteId`; the tree only holds ids, so two apps that load the same tree never
|
|
32
|
+
* share a record.
|
|
33
|
+
*/
|
|
34
|
+
export type RouteHandler = RecordSource & {
|
|
35
|
+
/** internal route (spec, docs, manifest) — excluded from codegen output, never mounted into a parent */
|
|
9
36
|
_skip?: boolean;
|
|
10
37
|
/** boundary error key — wraps undeclared/unexpected errors (null = use default or internal_server_error) */
|
|
11
38
|
bek: string | null;
|
|
12
|
-
/**
|
|
39
|
+
/** gateway catch-all: dispatches delegated routes, never matched for a path of its own */
|
|
40
|
+
ca?: boolean;
|
|
41
|
+
/** delegated route: a tree leaf with no local handler, served by the gateway catch-all */
|
|
42
|
+
dl?: boolean;
|
|
43
|
+
/** resolved error factory subset exposed as `ctx.errors` (omit/`null` = none) */
|
|
13
44
|
ef?: Record<string, (...args: never[]) => unknown> | null;
|
|
14
|
-
/** declared error keys
|
|
45
|
+
/** declared error keys — resolved at finalize from the route, its middleware and the app defaults */
|
|
15
46
|
ek: Set<string>;
|
|
47
|
+
/** resolved error factory — the route's own app's, or the serving app's */
|
|
48
|
+
fac?: Record<string, (...args: never[]) => unknown> | null;
|
|
16
49
|
/** handler function */
|
|
17
50
|
fn: (ctx: unknown) => Response | Promise<Response>;
|
|
18
|
-
/**
|
|
51
|
+
/** route identity: `METHOD /canonical/pattern` */
|
|
52
|
+
id?: RouteId;
|
|
53
|
+
/** input validation schemas — missing/`null` = no validation */
|
|
19
54
|
iv?: InputSchemasDef | null;
|
|
20
55
|
/** route metadata — frozen object, accessible via ctx.meta */
|
|
21
56
|
mt: Record<string, unknown> | null;
|
|
22
|
-
/** middleware chain
|
|
23
|
-
mw:
|
|
24
|
-
/** output schemas by content-type —
|
|
57
|
+
/** resolved middleware chain, in run order: chain, scoped, route */
|
|
58
|
+
mw: ChainMiddleware[];
|
|
59
|
+
/** output schemas by content-type — missing/`null` = no validation */
|
|
25
60
|
os?: OutputSchemaDef | null;
|
|
26
61
|
/** output validator function — validates response body against schema */
|
|
27
62
|
ov?: OutputValidator | null;
|
|
28
|
-
/**
|
|
63
|
+
/** canonical route pattern (e.g. "/users/:id") */
|
|
29
64
|
rp?: string;
|
|
30
65
|
};
|
|
31
66
|
export type { OutputSchemaDef };
|
|
32
|
-
export type WSRouteHandler = {
|
|
67
|
+
export type WSRouteHandler = RecordSource & {
|
|
33
68
|
bek: string | null;
|
|
34
69
|
ek: Set<string>;
|
|
70
|
+
ef?: Record<string, (...args: never[]) => unknown> | null;
|
|
71
|
+
fac?: Record<string, (...args: never[]) => unknown> | null;
|
|
35
72
|
fn: WSHandler<unknown>;
|
|
73
|
+
id?: RouteId;
|
|
36
74
|
iv: InputSchemasDef | null;
|
|
37
75
|
mt: Record<string, unknown> | null;
|
|
38
|
-
mw:
|
|
39
|
-
/**
|
|
76
|
+
mw: ChainMiddleware[];
|
|
77
|
+
/** browser origins allowed to open the socket (`.origins()`); `null` = same-origin when credentialed */
|
|
78
|
+
og?: WSOriginPolicy | null;
|
|
79
|
+
/** canonical ws path pattern */
|
|
40
80
|
rp: string;
|
|
41
81
|
};
|
|
82
|
+
/**
|
|
83
|
+
* Router topology. Leaves are `RouteId`s, never handler objects: what a leaf runs is looked
|
|
84
|
+
* up in the serving app's own route table.
|
|
85
|
+
*/
|
|
42
86
|
export type TreeNode = {
|
|
43
87
|
/** dynamic param child — { n: param name, c: child subtree } */
|
|
44
88
|
d: {
|
|
45
89
|
c: TreeNode;
|
|
46
90
|
n: string;
|
|
47
91
|
} | null;
|
|
48
|
-
/**
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
m: Record<HttpMethod | "ALL", RouteHandler> | null;
|
|
52
|
-
/** static children — maps literal path segment to child subtree */
|
|
92
|
+
/** method → route id at this exact path */
|
|
93
|
+
m: Record<string, RouteId> | null;
|
|
94
|
+
/** static children — maps literal path segment to child subtree (null-prototype) */
|
|
53
95
|
s: Record<string, TreeNode>;
|
|
54
|
-
/** wildcard
|
|
96
|
+
/** wildcard — { n: wildcard name, m: method → route id } */
|
|
55
97
|
w: {
|
|
56
|
-
m: Record<
|
|
98
|
+
m: Record<string, RouteId>;
|
|
57
99
|
n: string;
|
|
58
100
|
} | null;
|
|
59
|
-
/** websocket
|
|
60
|
-
ws:
|
|
101
|
+
/** websocket route id for this path */
|
|
102
|
+
ws: RouteId | null;
|
|
103
|
+
};
|
|
104
|
+
/** Descriptive data for one route in a tree. Generated files carry only this. */
|
|
105
|
+
export type RouteEntry = {
|
|
106
|
+
/** boundary error key */
|
|
107
|
+
bek?: string | null;
|
|
108
|
+
/** declared error keys */
|
|
109
|
+
ek?: readonly string[];
|
|
110
|
+
/** live record — only in `app.toRouteTree()` snapshots, never in generated files */
|
|
111
|
+
h?: RouteHandler | WSRouteHandler;
|
|
112
|
+
/** internal route (spec, docs, manifest) */
|
|
113
|
+
i?: 1 | true;
|
|
114
|
+
/** input schemas — only in live snapshots */
|
|
115
|
+
iv?: InputSchemasDef | null;
|
|
116
|
+
/** route meta */
|
|
117
|
+
mt?: Record<string, unknown> | null;
|
|
118
|
+
/** output schemas — only in live snapshots */
|
|
119
|
+
os?: OutputSchemaDef | null;
|
|
61
120
|
};
|
|
62
|
-
export declare function bumpGeneration(root: TreeNode): number;
|
|
63
121
|
export type MatchResult = {
|
|
64
122
|
allowed: HttpMethod[];
|
|
65
123
|
matched: false;
|
|
66
124
|
} | {
|
|
67
|
-
|
|
125
|
+
id: RouteId;
|
|
68
126
|
matched: true;
|
|
69
127
|
params: Record<string, string>;
|
|
70
128
|
} | null;
|
|
71
129
|
export interface RouteMeta {
|
|
72
130
|
}
|
|
131
|
+
/** Format of route trees: topology + per-route data. */
|
|
132
|
+
export declare const ROUTE_TREE_VERSION = 2;
|
|
73
133
|
export type RouteTree = {
|
|
74
|
-
handlers?: Record<string, RouteHandler>;
|
|
75
134
|
meta: Record<string, RouteMeta>;
|
|
76
135
|
root: TreeNode;
|
|
136
|
+
routes: Record<RouteId, RouteEntry>;
|
|
137
|
+
v?: number;
|
|
77
138
|
};
|
|
78
139
|
export declare function createNode(): TreeNode;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
140
|
+
/**
|
|
141
|
+
* Put `id` at the leaf for `segments` × `method` (`"WS"` for the websocket slot). The same id
|
|
142
|
+
* already there is a no-op; any other id is a duplicate. Optional params must be expanded by
|
|
143
|
+
* the caller — every call places exactly one leaf.
|
|
144
|
+
*/
|
|
145
|
+
export declare function insertLeaf(root: TreeNode, segments: readonly Segment[], method: string, id: RouteId): void;
|
|
146
|
+
/**
|
|
147
|
+
* Place a route's leaves by pattern (an optional last param places two). The leaf holds
|
|
148
|
+
* `id`, by default the route's `RouteId`, which is returned.
|
|
149
|
+
*/
|
|
150
|
+
export declare function insertRoute(root: TreeNode, method: HttpMethod | "ALL", path: string, id?: RouteId): RouteId;
|
|
151
|
+
/** Place a websocket route's leaf by pattern; returns its `RouteId`. */
|
|
152
|
+
export declare function insertWsRoute(root: TreeNode, path: string, id?: RouteId): RouteId;
|
|
153
|
+
/** Exact lookup: the id at the leaf for `segments` × `method`, without matching params against values. */
|
|
154
|
+
export declare function findLeaf(root: TreeNode, segments: readonly Segment[], method: string): RouteId | undefined;
|
|
155
|
+
export declare function matchRoute(root: TreeNode, method: HttpMethod | string, path: string): MatchResult;
|
|
82
156
|
export declare function matchWsRoute(root: TreeNode, path: string): {
|
|
83
|
-
|
|
157
|
+
id: RouteId;
|
|
84
158
|
params: Record<string, string>;
|
|
85
159
|
} | null;
|
|
160
|
+
/** True when the tree holds at least one websocket leaf. */
|
|
161
|
+
export declare function hasWsLeaf(node: TreeNode): boolean;
|
|
162
|
+
/** Every leaf, with its concrete path pattern (optional params already expanded by insertion). */
|
|
163
|
+
export declare function forEachLeaf(node: TreeNode, cb: (method: string, path: string, id: RouteId) => void, prefix?: string): void;
|
|
164
|
+
/** Deep copy into fresh null-prototype nodes. */
|
|
165
|
+
export declare function cloneTree(node: TreeNode): TreeNode;
|
|
166
|
+
/** Deep-freeze a loaded tree so no app can mutate a module other apps also import. */
|
|
167
|
+
export declare function freezeTree(node: TreeNode): TreeNode;
|
|
86
168
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* (`mergeTree` over downstream `app.toRouteTree()`) still carries them for OpenAPI.
|
|
169
|
+
* Reject a tree whose leaves are not route ids — a `routes.gen.ts` written by an older honey
|
|
170
|
+
* holds handler objects there.
|
|
90
171
|
*/
|
|
91
|
-
export declare function
|
|
92
|
-
|
|
172
|
+
export declare function assertTreeFormat(tree: {
|
|
173
|
+
root?: unknown;
|
|
174
|
+
routes?: unknown;
|
|
175
|
+
v?: unknown;
|
|
176
|
+
}): void;
|
|
177
|
+
/** Merge `source` topology into `target` (mutates target; never shares source nodes). */
|
|
93
178
|
export declare function mergeInto(target: TreeNode, source: TreeNode): void;
|
|
94
179
|
type TreeInput = RouteTree | [RouteTree, Record<string, unknown>];
|
|
180
|
+
/**
|
|
181
|
+
* Merge several trees into a new one. Inputs are never mutated; extra meta given per tree is
|
|
182
|
+
* applied to copies of its route entries.
|
|
183
|
+
*/
|
|
95
184
|
export declare function mergeTree(...trees: TreeInput[]): RouteTree;
|
|
185
|
+
/**
|
|
186
|
+
* Copy input/output schemas from `source` onto `target`'s routes that lack them.
|
|
187
|
+
* Generate-time only: a gateway app serves its generated tree (no schemas) while its merge
|
|
188
|
+
* source (`mergeTree` over downstream `app.toRouteTree()`) still carries them for OpenAPI.
|
|
189
|
+
*/
|
|
190
|
+
export declare function overlaySchemas(target: {
|
|
191
|
+
_overlaySchemas(source: RouteTree): void;
|
|
192
|
+
}, source: RouteTree): void;
|
|
96
193
|
//# sourceMappingURL=tree.d.ts.map
|