@lovrozagar/honey 0.7.3 → 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +36 -1969
- package/bin/honey.js +87 -27
- package/dist/adapters/bun/serve.d.ts +18 -0
- package/dist/adapters/bun/serve.js +89 -0
- package/dist/adapters/fetch-request.d.ts +20 -0
- package/dist/adapters/fetch-request.js +29 -0
- package/dist/adapters/node/headers.d.ts +27 -0
- package/dist/adapters/node/headers.js +86 -0
- package/dist/adapters/node/request.d.ts +16 -0
- package/dist/adapters/node/request.js +214 -0
- package/dist/adapters/node/response.d.ts +11 -0
- package/dist/adapters/node/response.js +126 -0
- package/dist/adapters/node/serve.d.ts +39 -0
- package/dist/adapters/node/serve.js +205 -0
- package/dist/adapters/node/url.d.ts +13 -0
- package/dist/adapters/node/url.js +87 -0
- package/dist/adapters/serve.d.ts +36 -0
- package/dist/adapters/serve.js +52 -0
- package/dist/build/artifacts.d.ts +34 -0
- package/dist/build/artifacts.js +123 -0
- package/dist/build/cli-args.d.ts +30 -0
- package/dist/build/cli-args.js +97 -0
- package/dist/build/cli.d.ts +11 -0
- package/dist/build/cli.js +150 -0
- package/dist/build/config.d.ts +102 -0
- package/dist/build/config.js +89 -0
- package/dist/build/generate.d.ts +19 -0
- package/dist/build/generate.js +80 -0
- package/dist/build/glob.d.ts +8 -0
- package/dist/build/glob.js +97 -0
- package/dist/build/index.d.ts +3 -58
- package/dist/build/index.js +3 -173
- package/dist/build/init.d.ts +3 -0
- package/dist/build/init.js +131 -0
- package/dist/build/loaders.d.ts +33 -0
- package/dist/build/loaders.js +105 -0
- package/dist/build/plugin.d.ts +52 -0
- package/dist/build/plugin.js +146 -0
- package/dist/build/source.d.ts +21 -0
- package/dist/build/source.js +100 -0
- package/dist/build/targets.d.ts +59 -0
- package/dist/build/targets.js +107 -0
- package/dist/context/context.d.ts +111 -0
- package/dist/context/context.js +213 -0
- package/dist/context/cookie-sign.d.ts +38 -0
- package/dist/context/cookie-sign.js +113 -0
- package/dist/context/cookie.d.ts +28 -0
- package/dist/context/cookie.js +142 -0
- package/dist/context/peer.d.ts +34 -0
- package/dist/context/peer.js +190 -0
- package/dist/errors/error.d.ts +60 -0
- package/dist/errors/error.js +84 -0
- package/dist/errors/errors.d.ts +45 -0
- package/dist/errors/errors.js +31 -0
- package/dist/errors/on-error.d.ts +10 -0
- package/dist/errors/on-error.js +204 -0
- package/dist/errors/problem-json.d.ts +14 -0
- package/dist/errors/problem-json.js +58 -0
- package/dist/errors/projector.d.ts +50 -0
- package/dist/errors/projector.js +107 -0
- package/dist/i18n/error-i18n.d.ts +26 -0
- package/dist/i18n/error-i18n.js +77 -0
- package/dist/i18n/i18n.d.ts +21 -0
- package/dist/i18n/i18n.js +40 -0
- package/dist/i18n/icu.d.ts +29 -0
- package/dist/i18n/icu.js +170 -0
- package/dist/i18n/index.d.ts +4 -0
- package/dist/i18n/index.js +3 -0
- package/dist/index.d.ts +30 -746
- package/dist/index.js +12 -2364
- package/dist/input/accepts.d.ts +5 -0
- package/dist/input/accepts.js +105 -0
- package/dist/input/binary.d.ts +20 -0
- package/dist/input/binary.js +40 -0
- package/dist/input/body-kind.d.ts +15 -0
- package/dist/input/body-kind.js +47 -0
- package/dist/input/body-limit.d.ts +21 -0
- package/dist/input/body-limit.js +99 -0
- package/dist/input/cookies.d.ts +7 -0
- package/dist/input/cookies.js +8 -0
- package/dist/input/form.d.ts +10 -0
- package/dist/input/form.js +24 -0
- package/dist/input/headers.d.ts +7 -0
- package/dist/input/headers.js +8 -0
- package/dist/input/input.d.ts +91 -0
- package/dist/input/input.js +88 -0
- package/dist/input/json.d.ts +10 -0
- package/dist/input/json.js +22 -0
- package/dist/input/params.d.ts +7 -0
- package/dist/input/params.js +8 -0
- package/dist/input/query.d.ts +10 -0
- package/dist/input/query.js +17 -0
- package/dist/mcp/mount.d.ts +116 -0
- package/dist/mcp/mount.js +45 -0
- package/dist/mcp/oauth.d.ts +14 -0
- package/dist/mcp/oauth.js +88 -0
- package/dist/mcp/uploads.d.ts +36 -0
- package/dist/mcp/uploads.js +171 -0
- package/dist/mcp/url-files.d.ts +32 -0
- package/dist/mcp/url-files.js +75 -0
- package/dist/meta/meta-spec-apply.d.ts +25 -0
- package/dist/meta/meta-spec-apply.js +83 -0
- package/dist/meta/meta-spec-merge.d.ts +103 -0
- package/dist/meta/meta-spec-merge.js +50 -0
- package/dist/meta/meta-spec-validate.d.ts +61 -0
- package/dist/meta/meta-spec-validate.js +166 -0
- package/dist/meta/meta-spec.d.ts +49 -0
- package/dist/meta/meta-spec.js +197 -0
- package/dist/middleware/compress.d.ts +15 -0
- package/dist/middleware/compress.js +93 -0
- package/dist/middleware/cors.d.ts +18 -0
- package/dist/middleware/cors.js +80 -0
- package/dist/middleware/csrf.d.ts +11 -0
- package/dist/middleware/csrf.js +65 -0
- package/dist/middleware/ip-restrict.d.ts +10 -0
- package/dist/middleware/ip-restrict.js +82 -0
- package/dist/middleware/middleware.d.ts +53 -0
- package/dist/middleware/middleware.js +112 -0
- package/dist/middleware/powered-by.d.ts +6 -0
- package/dist/middleware/powered-by.js +13 -0
- package/dist/middleware/rate-limit.d.ts +40 -0
- package/dist/middleware/rate-limit.js +90 -0
- package/dist/middleware/request-id.d.ts +25 -0
- package/dist/middleware/request-id.js +30 -0
- package/dist/middleware/secure-headers.d.ts +18 -0
- package/dist/middleware/secure-headers.js +36 -0
- package/dist/middleware/server-timing.d.ts +8 -0
- package/dist/middleware/server-timing.js +52 -0
- package/dist/middleware/timeout.d.ts +6 -0
- package/dist/middleware/timeout.js +29 -0
- package/dist/observability/curl-logger.d.ts +46 -0
- package/dist/observability/curl-logger.js +175 -0
- package/dist/observability/request-to-curl.d.ts +17 -0
- package/dist/observability/request-to-curl.js +47 -0
- package/dist/openapi/collect.d.ts +56 -18
- package/dist/openapi/collect.js +109 -23
- package/dist/openapi/components.d.ts +9 -0
- package/dist/openapi/components.js +90 -0
- package/dist/openapi/docs-page.d.ts +20 -18
- package/dist/openapi/docs-page.js +28 -46
- package/dist/openapi/document.d.ts +33 -26
- package/dist/openapi/document.js +21 -780
- package/dist/openapi/extract-schemas.d.ts +11 -0
- package/dist/openapi/extract-schemas.js +31 -0
- package/dist/openapi/generate.d.ts +47 -0
- package/dist/openapi/generate.js +180 -0
- package/dist/openapi/manifest.d.ts +41 -0
- package/dist/openapi/manifest.js +49 -0
- package/dist/openapi/output-keys.d.ts +6 -0
- package/dist/openapi/output-keys.js +24 -0
- package/dist/openapi/paths.d.ts +35 -0
- package/dist/openapi/paths.js +175 -0
- package/dist/openapi/register.d.ts +14 -3
- package/dist/openapi/register.js +13 -20
- package/dist/openapi/responses.d.ts +44 -0
- package/dist/openapi/responses.js +159 -0
- package/dist/openapi/scalar.d.ts +4 -14
- package/dist/openapi/scalar.js +5 -7
- package/dist/openapi/security.d.ts +4 -0
- package/dist/openapi/security.js +25 -0
- package/dist/openapi/serve.d.ts +25 -9
- package/dist/openapi/serve.js +108 -29
- package/dist/openapi/servers.d.ts +19 -0
- package/dist/openapi/servers.js +72 -0
- package/dist/openapi/swagger.d.ts +4 -14
- package/dist/openapi/swagger.js +5 -7
- package/dist/openapi/tags.d.ts +20 -0
- package/dist/openapi/tags.js +20 -0
- package/dist/openapi/webhooks.d.ts +19 -0
- package/dist/openapi/webhooks.js +70 -0
- package/dist/openapi/yaml.d.ts +8 -0
- package/dist/openapi/yaml.js +74 -0
- package/dist/proxy/headers.d.ts +30 -0
- package/dist/proxy/headers.js +86 -0
- package/dist/proxy/proxy.d.ts +39 -0
- package/dist/proxy/proxy.js +103 -0
- package/dist/proxy/upstream.d.ts +30 -0
- package/dist/proxy/upstream.js +116 -0
- package/dist/realtime/bus.d.ts +10 -13
- package/dist/realtime/bus.js +48 -93
- package/dist/realtime/invoke-user.d.ts +36 -0
- package/dist/realtime/invoke-user.js +103 -0
- package/dist/realtime/realtime.d.ts +7 -0
- package/dist/realtime/realtime.js +40 -0
- package/dist/realtime/route.d.ts +33 -27
- package/dist/realtime/route.js +27 -43
- package/dist/realtime/server.d.ts +24 -28
- package/dist/realtime/server.js +202 -225
- package/dist/response/binary.d.ts +18 -0
- package/dist/response/binary.js +10 -0
- package/dist/response/builder.d.ts +73 -0
- package/dist/response/builder.js +214 -0
- package/dist/response/cache-control.d.ts +30 -0
- package/dist/response/cache-control.js +74 -0
- package/dist/response/etag.d.ts +15 -0
- package/dist/response/etag.js +83 -0
- package/dist/response/media-type.d.ts +28 -0
- package/dist/response/media-type.js +97 -0
- package/dist/response/out-headers.d.ts +31 -0
- package/dist/response/out-headers.js +130 -0
- package/dist/response/pretty-json.d.ts +10 -0
- package/dist/response/pretty-json.js +44 -0
- package/dist/response/range.d.ts +19 -0
- package/dist/response/range.js +98 -0
- package/dist/response/response-headers.d.ts +11 -0
- package/dist/response/response-headers.js +21 -0
- package/dist/response/response.d.ts +69 -0
- package/dist/response/response.js +208 -0
- package/dist/response/sse.d.ts +41 -0
- package/dist/response/sse.js +73 -0
- package/dist/response/static.d.ts +20 -0
- package/dist/response/static.js +181 -0
- package/dist/response/status.d.ts +5 -0
- package/dist/response/status.js +68 -0
- package/dist/response/with-headers.d.ts +11 -0
- package/dist/response/with-headers.js +47 -0
- package/dist/routing/app-types.d.ts +181 -0
- package/dist/routing/app-types.js +1 -0
- package/dist/routing/app.d.ts +76 -0
- package/dist/routing/app.js +137 -0
- package/dist/routing/codegen-types.d.ts +17 -0
- package/dist/routing/codegen-types.js +1 -0
- package/dist/routing/delegate.d.ts +9 -0
- package/dist/routing/delegate.js +75 -0
- package/dist/routing/dispatch.d.ts +22 -0
- package/dist/routing/dispatch.js +255 -0
- package/dist/routing/finalize.d.ts +47 -0
- package/dist/routing/finalize.js +169 -0
- package/dist/routing/gateway-tree.d.ts +19 -0
- package/dist/routing/gateway-tree.js +74 -0
- package/dist/routing/invalidate-check.d.ts +58 -0
- package/dist/routing/invalidate-check.js +124 -0
- package/dist/routing/match.d.ts +22 -0
- package/dist/routing/match.js +108 -0
- package/dist/routing/middleware-chain.d.ts +16 -0
- package/dist/routing/middleware-chain.js +41 -0
- package/dist/routing/output-types.d.ts +91 -0
- package/dist/routing/output-types.js +1 -0
- package/dist/routing/pattern.d.ts +55 -0
- package/dist/routing/pattern.js +219 -0
- package/dist/routing/record.d.ts +18 -0
- package/dist/routing/record.js +4 -0
- package/dist/routing/register.d.ts +135 -0
- package/dist/routing/register.js +155 -0
- package/dist/routing/request-path.d.ts +30 -0
- package/dist/routing/request-path.js +173 -0
- package/dist/routing/route-builder.d.ts +160 -0
- package/dist/routing/route-builder.js +86 -0
- package/dist/routing/route-tree.d.ts +18 -0
- package/dist/routing/route-tree.js +91 -0
- package/dist/routing/settings-chain.d.ts +75 -0
- package/dist/routing/settings-chain.js +137 -0
- package/dist/routing/settings.d.ts +90 -0
- package/dist/routing/settings.js +44 -0
- package/dist/routing/tap.d.ts +31 -0
- package/dist/routing/tap.js +77 -0
- package/dist/routing/tree-merge.d.ts +7 -0
- package/dist/routing/tree-merge.js +77 -0
- package/dist/routing/tree.d.ts +85 -0
- package/dist/routing/tree.js +196 -0
- package/dist/routing/types.d.ts +20 -0
- package/dist/routing/types.js +1 -0
- package/dist/routing/ws-builder.d.ts +62 -0
- package/dist/routing/ws-builder.js +109 -0
- package/dist/runtime/detect-runtime.d.ts +16 -0
- package/dist/runtime/detect-runtime.js +11 -0
- package/dist/runtime/optional-peer.d.ts +10 -0
- package/dist/runtime/optional-peer.js +19 -0
- package/dist/schema/arktype.d.ts +7 -0
- package/dist/schema/arktype.js +13 -0
- package/dist/schema/canonicalize.d.ts +8 -0
- package/dist/schema/canonicalize.js +19 -0
- package/dist/schema/effect.d.ts +7 -0
- package/dist/schema/effect.js +4 -0
- package/dist/schema/naming.d.ts +31 -0
- package/dist/schema/naming.js +116 -0
- package/dist/schema/sanitize-spec.d.ts +15 -0
- package/dist/schema/sanitize-spec.js +43 -0
- package/dist/schema/slots.d.ts +15 -0
- package/dist/schema/slots.js +179 -0
- package/dist/schema/to-json-schema.d.ts +34 -0
- package/dist/schema/to-json-schema.js +94 -0
- package/dist/schema/valibot.d.ts +4 -0
- package/dist/schema/valibot.js +153 -0
- package/dist/schema/yup.d.ts +3 -0
- package/dist/schema/yup.js +57 -0
- package/dist/schema/zod.d.ts +6 -0
- package/dist/schema/zod.js +192 -0
- package/dist/security/crypto.d.ts +7 -0
- package/dist/security/crypto.js +30 -0
- package/dist/streaming/producer-stream.d.ts +45 -0
- package/dist/streaming/producer-stream.js +251 -0
- package/dist/telemetry/fields.d.ts +43 -0
- package/dist/telemetry/fields.js +64 -0
- package/dist/telemetry/log-format.d.ts +7 -0
- package/dist/telemetry/log-format.js +43 -0
- package/dist/telemetry/logger.d.ts +44 -0
- package/dist/telemetry/logger.js +122 -0
- package/dist/telemetry/otel-subpath.d.ts +7 -0
- package/dist/telemetry/otel-subpath.js +5 -0
- package/dist/telemetry/otel.d.ts +50 -57
- package/dist/telemetry/otel.js +54 -130
- package/dist/telemetry/request-log.d.ts +22 -0
- package/dist/telemetry/request-log.js +83 -0
- package/dist/telemetry/request-trace.d.ts +123 -0
- package/dist/telemetry/request-trace.js +199 -0
- package/dist/telemetry/span-lifecycle.d.ts +11 -0
- package/dist/telemetry/span-lifecycle.js +114 -0
- package/dist/telemetry/traceparent.d.ts +40 -0
- package/dist/telemetry/traceparent.js +73 -0
- package/dist/testing/testing.d.ts +42 -0
- package/dist/testing/testing.js +101 -0
- package/dist/validation/content-type.d.ts +21 -0
- package/dist/validation/content-type.js +42 -0
- package/dist/validation/standard-schema.d.ts +41 -0
- package/dist/validation/standard-schema.js +5 -0
- package/dist/validation/validate-input.d.ts +45 -0
- package/dist/validation/validate-input.js +174 -0
- package/dist/validation/validate-output.d.ts +34 -0
- package/dist/validation/validate-output.js +107 -0
- package/dist/ws/bun.d.ts +30 -25
- package/dist/ws/bun.js +42 -46
- package/dist/ws/cloudflare.d.ts +6 -75
- package/dist/ws/cloudflare.js +37 -104
- package/dist/ws/contract.d.ts +74 -0
- package/dist/ws/contract.js +83 -0
- package/dist/ws/node.d.ts +12 -21
- package/dist/ws/node.js +103 -151
- package/dist/ws/origin.d.ts +23 -0
- package/dist/ws/origin.js +48 -0
- package/dist/ws/route.d.ts +14 -0
- package/dist/ws/route.js +5 -0
- package/dist/ws/session.d.ts +15 -6
- package/dist/ws/session.js +22 -23
- package/dist/ws/shared.d.ts +23 -33
- package/dist/ws/shared.js +53 -39
- package/package.json +169 -251
- package/dist/accepts.d.ts +0 -12
- package/dist/accepts.d.ts.map +0 -1
- package/dist/accepts.js +0 -126
- package/dist/accepts.js.map +0 -1
- package/dist/body-kind.d.ts +0 -26
- package/dist/body-kind.d.ts.map +0 -1
- package/dist/body-kind.js +0 -70
- package/dist/body-kind.js.map +0 -1
- package/dist/body-limit.d.ts +0 -26
- package/dist/body-limit.d.ts.map +0 -1
- package/dist/body-limit.js +0 -126
- package/dist/body-limit.js.map +0 -1
- package/dist/build/index.d.ts.map +0 -1
- package/dist/build/index.js.map +0 -1
- package/dist/cli-args.d.ts +0 -33
- package/dist/cli-args.d.ts.map +0 -1
- package/dist/cli-args.js +0 -102
- package/dist/cli-args.js.map +0 -1
- package/dist/cli-go/auth.go +0 -26
- package/dist/cli-go/config.go +0 -192
- package/dist/cli-go/errors.go +0 -75
- package/dist/cli-go/multipart.go +0 -79
- package/dist/cli-go/output.go +0 -163
- package/dist/cli-go/root.go +0 -30
- package/dist/cli-go/stream.go +0 -88
- package/dist/cli-go/version.go +0 -5
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -209
- package/dist/cli.js.map +0 -1
- package/dist/client/defaults.d.ts +0 -12
- package/dist/client/defaults.d.ts.map +0 -1
- package/dist/client/defaults.js +0 -48
- package/dist/client/defaults.js.map +0 -1
- package/dist/client/error.d.ts +0 -49
- package/dist/client/error.d.ts.map +0 -1
- package/dist/client/error.js +0 -71
- package/dist/client/error.js.map +0 -1
- package/dist/client/http.d.ts +0 -155
- package/dist/client/http.d.ts.map +0 -1
- package/dist/client/http.js +0 -571
- package/dist/client/http.js.map +0 -1
- package/dist/client/index.d.ts +0 -23
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js +0 -95
- package/dist/client/index.js.map +0 -1
- package/dist/client/path.d.ts +0 -26
- package/dist/client/path.d.ts.map +0 -1
- package/dist/client/path.js +0 -163
- package/dist/client/path.js.map +0 -1
- package/dist/client/redirect-policy.d.ts +0 -12
- package/dist/client/redirect-policy.d.ts.map +0 -1
- package/dist/client/redirect-policy.js +0 -20
- package/dist/client/redirect-policy.js.map +0 -1
- package/dist/client/sdk.d.ts +0 -70
- package/dist/client/sdk.d.ts.map +0 -1
- package/dist/client/sdk.js +0 -292
- package/dist/client/sdk.js.map +0 -1
- package/dist/client/sse.d.ts +0 -23
- package/dist/client/sse.d.ts.map +0 -1
- package/dist/client/sse.js +0 -129
- package/dist/client/sse.js.map +0 -1
- package/dist/client/types.d.ts +0 -124
- package/dist/client/types.d.ts.map +0 -1
- package/dist/client/types.js +0 -2
- package/dist/client/types.js.map +0 -1
- package/dist/client/ws.d.ts +0 -22
- package/dist/client/ws.d.ts.map +0 -1
- package/dist/client/ws.js +0 -112
- package/dist/client/ws.js.map +0 -1
- package/dist/client-go/errors.go +0 -236
- package/dist/client-go/export.go +0 -44
- package/dist/client-go/invalidation.go +0 -371
- package/dist/client-go/nullable.go +0 -62
- package/dist/client-go/realtime.go +0 -354
- package/dist/client-go/result.go +0 -20
- package/dist/client-go/runtime.go +0 -975
- package/dist/client-go/sse.go +0 -159
- package/dist/client-go/transport.go +0 -495
- package/dist/client-go/ws.go +0 -128
- package/dist/client-info.d.ts +0 -36
- package/dist/client-info.d.ts.map +0 -1
- package/dist/client-info.js +0 -53
- package/dist/client-info.js.map +0 -1
- package/dist/client-mcp/README.md +0 -10
- package/dist/client-mcp/server.ts +0 -221
- package/dist/client-mcp/types.ts +0 -19
- package/dist/client-python/_errors.py +0 -115
- package/dist/client-python/_invalidation.py +0 -494
- package/dist/client-python/_realtime.py +0 -179
- package/dist/client-python/_runtime.py +0 -860
- package/dist/client-python/_sse.py +0 -155
- package/dist/client-python/_transport.py +0 -366
- package/dist/client-python/_ws.py +0 -159
- package/dist/client-python/py.typed +0 -0
- package/dist/client-rust/errors.rs +0 -220
- package/dist/client-rust/invalidation.rs +0 -412
- package/dist/client-rust/invalidation_sync.rs +0 -93
- package/dist/client-rust/nullable.rs +0 -17
- package/dist/client-rust/realtime.rs +0 -702
- package/dist/client-rust/result.rs +0 -22
- package/dist/client-rust/runtime.rs +0 -980
- package/dist/client-rust/runtime_sync.rs +0 -484
- package/dist/client-rust/sse.rs +0 -188
- package/dist/client-rust/ws.rs +0 -167
- package/dist/codegen-go-cli.d.ts +0 -22
- package/dist/codegen-go-cli.d.ts.map +0 -1
- package/dist/codegen-go-cli.js +0 -964
- package/dist/codegen-go-cli.js.map +0 -1
- package/dist/codegen-go.d.ts +0 -41
- package/dist/codegen-go.d.ts.map +0 -1
- package/dist/codegen-go.js +0 -872
- package/dist/codegen-go.js.map +0 -1
- package/dist/codegen-hash.d.ts +0 -3
- package/dist/codegen-hash.d.ts.map +0 -1
- package/dist/codegen-hash.js +0 -9
- package/dist/codegen-hash.js.map +0 -1
- package/dist/codegen-ir.d.ts +0 -190
- package/dist/codegen-ir.d.ts.map +0 -1
- package/dist/codegen-ir.js +0 -661
- package/dist/codegen-ir.js.map +0 -1
- package/dist/codegen-lang.d.ts +0 -65
- package/dist/codegen-lang.d.ts.map +0 -1
- package/dist/codegen-lang.js +0 -526
- package/dist/codegen-lang.js.map +0 -1
- package/dist/codegen-load.d.ts +0 -31
- package/dist/codegen-load.d.ts.map +0 -1
- package/dist/codegen-load.js +0 -138
- package/dist/codegen-load.js.map +0 -1
- package/dist/codegen-loaders.d.ts +0 -12
- package/dist/codegen-loaders.d.ts.map +0 -1
- package/dist/codegen-loaders.js +0 -55
- package/dist/codegen-loaders.js.map +0 -1
- package/dist/codegen-mcp.d.ts +0 -13
- package/dist/codegen-mcp.d.ts.map +0 -1
- package/dist/codegen-mcp.js +0 -368
- package/dist/codegen-mcp.js.map +0 -1
- package/dist/codegen-python.d.ts +0 -33
- package/dist/codegen-python.d.ts.map +0 -1
- package/dist/codegen-python.js +0 -828
- package/dist/codegen-python.js.map +0 -1
- package/dist/codegen-route-tree-intern.d.ts +0 -40
- package/dist/codegen-route-tree-intern.d.ts.map +0 -1
- package/dist/codegen-route-tree-intern.js +0 -221
- package/dist/codegen-route-tree-intern.js.map +0 -1
- package/dist/codegen-rust.d.ts +0 -18
- package/dist/codegen-rust.d.ts.map +0 -1
- package/dist/codegen-rust.js +0 -1293
- package/dist/codegen-rust.js.map +0 -1
- package/dist/codegen-sanitize.d.ts +0 -3
- package/dist/codegen-sanitize.d.ts.map +0 -1
- package/dist/codegen-sanitize.js +0 -56
- package/dist/codegen-sanitize.js.map +0 -1
- package/dist/codegen-schema-naming.d.ts +0 -27
- package/dist/codegen-schema-naming.d.ts.map +0 -1
- package/dist/codegen-schema-naming.js +0 -150
- package/dist/codegen-schema-naming.js.map +0 -1
- package/dist/codegen-sdk-model.d.ts +0 -71
- package/dist/codegen-sdk-model.d.ts.map +0 -1
- package/dist/codegen-sdk-model.js +0 -179
- package/dist/codegen-sdk-model.js.map +0 -1
- package/dist/codegen.d.ts +0 -187
- package/dist/codegen.d.ts.map +0 -1
- package/dist/codegen.js +0 -4619
- package/dist/codegen.js.map +0 -1
- package/dist/context.d.ts +0 -86
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js +0 -242
- package/dist/context.js.map +0 -1
- package/dist/cookie-sign.d.ts +0 -17
- package/dist/cookie-sign.d.ts.map +0 -1
- package/dist/cookie-sign.js +0 -104
- package/dist/cookie-sign.js.map +0 -1
- package/dist/cookie.d.ts +0 -24
- package/dist/cookie.d.ts.map +0 -1
- package/dist/cookie.js +0 -138
- package/dist/cookie.js.map +0 -1
- package/dist/cors.d.ts +0 -14
- package/dist/cors.d.ts.map +0 -1
- package/dist/cors.js +0 -87
- package/dist/cors.js.map +0 -1
- package/dist/crypto.d.ts +0 -7
- package/dist/crypto.d.ts.map +0 -1
- package/dist/crypto.js +0 -38
- package/dist/crypto.js.map +0 -1
- package/dist/csrf.d.ts +0 -28
- package/dist/csrf.d.ts.map +0 -1
- package/dist/csrf.js +0 -79
- package/dist/csrf.js.map +0 -1
- package/dist/curl-logger.d.ts +0 -44
- package/dist/curl-logger.d.ts.map +0 -1
- package/dist/curl-logger.js +0 -199
- package/dist/curl-logger.js.map +0 -1
- package/dist/detect-runtime.d.ts +0 -16
- package/dist/detect-runtime.d.ts.map +0 -1
- package/dist/detect-runtime.js +0 -13
- package/dist/detect-runtime.js.map +0 -1
- package/dist/dict.d.ts +0 -11
- package/dist/dict.d.ts.map +0 -1
- package/dist/dict.js +0 -13
- package/dist/dict.js.map +0 -1
- package/dist/error.d.ts +0 -21
- package/dist/error.d.ts.map +0 -1
- package/dist/error.js +0 -44
- package/dist/error.js.map +0 -1
- package/dist/errors.d.ts +0 -40
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -39
- package/dist/errors.js.map +0 -1
- package/dist/etag.d.ts +0 -11
- package/dist/etag.d.ts.map +0 -1
- package/dist/etag.js +0 -82
- package/dist/etag.js.map +0 -1
- package/dist/feature-detect.d.ts +0 -25
- package/dist/feature-detect.d.ts.map +0 -1
- package/dist/feature-detect.js +0 -144
- package/dist/feature-detect.js.map +0 -1
- package/dist/feature-load.d.ts +0 -3
- package/dist/feature-load.d.ts.map +0 -1
- package/dist/feature-load.js +0 -36
- package/dist/feature-load.js.map +0 -1
- package/dist/feature-slots.d.ts +0 -44
- package/dist/feature-slots.d.ts.map +0 -1
- package/dist/feature-slots.js +0 -48
- package/dist/feature-slots.js.map +0 -1
- package/dist/fetch-request.d.ts +0 -10
- package/dist/fetch-request.d.ts.map +0 -1
- package/dist/fetch-request.js +0 -13
- package/dist/fetch-request.js.map +0 -1
- package/dist/gen-process.d.ts +0 -15
- package/dist/gen-process.d.ts.map +0 -1
- package/dist/gen-process.js +0 -43
- package/dist/gen-process.js.map +0 -1
- package/dist/gen-write.d.ts +0 -19
- package/dist/gen-write.d.ts.map +0 -1
- package/dist/gen-write.js +0 -120
- package/dist/gen-write.js.map +0 -1
- package/dist/glob.d.ts +0 -21
- package/dist/glob.d.ts.map +0 -1
- package/dist/glob.js +0 -115
- package/dist/glob.js.map +0 -1
- package/dist/go-type-emitter.d.ts +0 -47
- package/dist/go-type-emitter.d.ts.map +0 -1
- package/dist/go-type-emitter.js +0 -594
- package/dist/go-type-emitter.js.map +0 -1
- package/dist/honey-response.d.ts +0 -82
- package/dist/honey-response.d.ts.map +0 -1
- package/dist/honey-response.js +0 -338
- package/dist/honey-response.js.map +0 -1
- package/dist/i18n-slot.d.ts +0 -15
- package/dist/i18n-slot.d.ts.map +0 -1
- package/dist/i18n-slot.js +0 -14
- package/dist/i18n-slot.js.map +0 -1
- package/dist/i18n.d.ts +0 -29
- package/dist/i18n.d.ts.map +0 -1
- package/dist/i18n.js +0 -250
- package/dist/i18n.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init.d.ts +0 -5
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -140
- package/dist/init.js.map +0 -1
- package/dist/input.d.ts +0 -6
- package/dist/input.d.ts.map +0 -1
- package/dist/input.js +0 -4
- package/dist/input.js.map +0 -1
- package/dist/invalidate-check.d.ts +0 -61
- package/dist/invalidate-check.d.ts.map +0 -1
- package/dist/invalidate-check.js +0 -163
- package/dist/invalidate-check.js.map +0 -1
- package/dist/invoke-user.d.ts +0 -35
- package/dist/invoke-user.d.ts.map +0 -1
- package/dist/invoke-user.js +0 -73
- package/dist/invoke-user.js.map +0 -1
- package/dist/ip-restrict.d.ts +0 -24
- package/dist/ip-restrict.d.ts.map +0 -1
- package/dist/ip-restrict.js +0 -60
- package/dist/ip-restrict.js.map +0 -1
- package/dist/ip.d.ts +0 -39
- package/dist/ip.d.ts.map +0 -1
- package/dist/ip.js +0 -209
- package/dist/ip.js.map +0 -1
- package/dist/logger.d.ts +0 -45
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -113
- package/dist/logger.js.map +0 -1
- package/dist/media-type.d.ts +0 -30
- package/dist/media-type.d.ts.map +0 -1
- package/dist/media-type.js +0 -97
- package/dist/media-type.js.map +0 -1
- package/dist/meta-spec-merge.d.ts +0 -32
- package/dist/meta-spec-merge.d.ts.map +0 -1
- package/dist/meta-spec-merge.js +0 -68
- package/dist/meta-spec-merge.js.map +0 -1
- package/dist/meta-spec.d.ts +0 -94
- package/dist/meta-spec.d.ts.map +0 -1
- package/dist/meta-spec.js +0 -535
- package/dist/meta-spec.js.map +0 -1
- package/dist/middleware.d.ts +0 -77
- package/dist/middleware.d.ts.map +0 -1
- package/dist/middleware.js +0 -253
- package/dist/middleware.js.map +0 -1
- package/dist/node-request.d.ts +0 -104
- package/dist/node-request.d.ts.map +0 -1
- package/dist/node-request.js +0 -407
- package/dist/node-request.js.map +0 -1
- package/dist/node.d.ts +0 -30
- package/dist/node.d.ts.map +0 -1
- package/dist/node.js +0 -396
- package/dist/node.js.map +0 -1
- package/dist/openapi/collect.d.ts.map +0 -1
- package/dist/openapi/collect.js.map +0 -1
- package/dist/openapi/docs-page.d.ts.map +0 -1
- package/dist/openapi/docs-page.js.map +0 -1
- package/dist/openapi/document.d.ts.map +0 -1
- package/dist/openapi/document.js.map +0 -1
- package/dist/openapi/json-schema-slot.d.ts +0 -12
- package/dist/openapi/json-schema-slot.d.ts.map +0 -1
- package/dist/openapi/json-schema-slot.js +0 -38
- package/dist/openapi/json-schema-slot.js.map +0 -1
- package/dist/openapi/register.d.ts.map +0 -1
- package/dist/openapi/register.js.map +0 -1
- package/dist/openapi/scalar.d.ts.map +0 -1
- package/dist/openapi/scalar.js.map +0 -1
- package/dist/openapi/serve.d.ts.map +0 -1
- package/dist/openapi/serve.js.map +0 -1
- package/dist/openapi/spec-factory.d.ts +0 -65
- package/dist/openapi/spec-factory.d.ts.map +0 -1
- package/dist/openapi/spec-factory.js +0 -52
- package/dist/openapi/spec-factory.js.map +0 -1
- package/dist/openapi/spec.d.ts +0 -29
- package/dist/openapi/spec.d.ts.map +0 -1
- package/dist/openapi/spec.js +0 -50
- package/dist/openapi/spec.js.map +0 -1
- package/dist/openapi/swagger.d.ts.map +0 -1
- package/dist/openapi/swagger.js.map +0 -1
- package/dist/pattern.d.ts +0 -71
- package/dist/pattern.d.ts.map +0 -1
- package/dist/pattern.js +0 -239
- package/dist/pattern.js.map +0 -1
- package/dist/peer.d.ts +0 -17
- package/dist/peer.d.ts.map +0 -1
- package/dist/peer.js +0 -50
- package/dist/peer.js.map +0 -1
- package/dist/plugin.d.ts +0 -228
- package/dist/plugin.d.ts.map +0 -1
- package/dist/plugin.js +0 -666
- package/dist/plugin.js.map +0 -1
- package/dist/powered-by.d.ts +0 -7
- package/dist/powered-by.d.ts.map +0 -1
- package/dist/powered-by.js +0 -11
- package/dist/powered-by.js.map +0 -1
- package/dist/pretty-json.d.ts +0 -10
- package/dist/pretty-json.d.ts.map +0 -1
- package/dist/pretty-json.js +0 -47
- package/dist/pretty-json.js.map +0 -1
- package/dist/producer-stream.d.ts +0 -47
- package/dist/producer-stream.d.ts.map +0 -1
- package/dist/producer-stream.js +0 -267
- package/dist/producer-stream.js.map +0 -1
- package/dist/proxy.d.ts +0 -90
- package/dist/proxy.d.ts.map +0 -1
- package/dist/proxy.js +0 -274
- package/dist/proxy.js.map +0 -1
- package/dist/python-type-emitter.d.ts +0 -24
- package/dist/python-type-emitter.d.ts.map +0 -1
- package/dist/python-type-emitter.js +0 -157
- package/dist/python-type-emitter.js.map +0 -1
- package/dist/realtime/bus.d.ts.map +0 -1
- package/dist/realtime/bus.js.map +0 -1
- package/dist/realtime/register.d.ts +0 -3
- package/dist/realtime/register.d.ts.map +0 -1
- package/dist/realtime/register.js +0 -10
- package/dist/realtime/register.js.map +0 -1
- package/dist/realtime/route.d.ts.map +0 -1
- package/dist/realtime/route.js.map +0 -1
- package/dist/realtime/server.d.ts.map +0 -1
- package/dist/realtime/server.js.map +0 -1
- package/dist/request-id.d.ts +0 -19
- package/dist/request-id.d.ts.map +0 -1
- package/dist/request-id.js +0 -16
- package/dist/request-id.js.map +0 -1
- package/dist/request-limits.d.ts +0 -3
- package/dist/request-limits.d.ts.map +0 -1
- package/dist/request-limits.js +0 -3
- package/dist/request-limits.js.map +0 -1
- package/dist/request-path.d.ts +0 -33
- package/dist/request-path.d.ts.map +0 -1
- package/dist/request-path.js +0 -178
- package/dist/request-path.js.map +0 -1
- package/dist/request-to-curl.d.ts +0 -15
- package/dist/request-to-curl.d.ts.map +0 -1
- package/dist/request-to-curl.js +0 -48
- package/dist/request-to-curl.js.map +0 -1
- package/dist/response.d.ts +0 -86
- package/dist/response.d.ts.map +0 -1
- package/dist/response.js +0 -313
- package/dist/response.js.map +0 -1
- package/dist/rust-type-emitter.d.ts +0 -44
- package/dist/rust-type-emitter.d.ts.map +0 -1
- package/dist/rust-type-emitter.js +0 -463
- package/dist/rust-type-emitter.js.map +0 -1
- package/dist/secure-headers.d.ts +0 -16
- package/dist/secure-headers.d.ts.map +0 -1
- package/dist/secure-headers.js +0 -53
- package/dist/secure-headers.js.map +0 -1
- package/dist/serve-register.d.ts +0 -6
- package/dist/serve-register.d.ts.map +0 -1
- package/dist/serve-register.js +0 -9
- package/dist/serve-register.js.map +0 -1
- package/dist/serve-slot.d.ts +0 -9
- package/dist/serve-slot.d.ts.map +0 -1
- package/dist/serve-slot.js +0 -52
- package/dist/serve-slot.js.map +0 -1
- package/dist/serve.d.ts +0 -38
- package/dist/serve.d.ts.map +0 -1
- package/dist/serve.js +0 -157
- package/dist/serve.js.map +0 -1
- package/dist/server-timing.d.ts +0 -9
- package/dist/server-timing.d.ts.map +0 -1
- package/dist/server-timing.js +0 -51
- package/dist/server-timing.js.map +0 -1
- package/dist/static.d.ts +0 -21
- package/dist/static.d.ts.map +0 -1
- package/dist/static.js +0 -102
- package/dist/static.js.map +0 -1
- package/dist/telemetry/otel.d.ts.map +0 -1
- package/dist/telemetry/otel.js.map +0 -1
- package/dist/testing.d.ts +0 -36
- package/dist/testing.d.ts.map +0 -1
- package/dist/testing.js +0 -124
- package/dist/testing.js.map +0 -1
- package/dist/timeout.d.ts +0 -13
- package/dist/timeout.d.ts.map +0 -1
- package/dist/timeout.js +0 -36
- package/dist/timeout.js.map +0 -1
- package/dist/tree.d.ts +0 -197
- package/dist/tree.d.ts.map +0 -1
- package/dist/tree.js +0 -437
- package/dist/tree.js.map +0 -1
- package/dist/trust.d.ts +0 -21
- package/dist/trust.d.ts.map +0 -1
- package/dist/trust.js +0 -100
- package/dist/trust.js.map +0 -1
- package/dist/ts-type-emitter.d.ts +0 -8
- package/dist/ts-type-emitter.d.ts.map +0 -1
- package/dist/ts-type-emitter.js +0 -150
- package/dist/ts-type-emitter.js.map +0 -1
- package/dist/type-emitter.d.ts +0 -36
- package/dist/type-emitter.d.ts.map +0 -1
- package/dist/type-emitter.js +0 -729
- package/dist/type-emitter.js.map +0 -1
- package/dist/type-extractor.d.ts +0 -43
- package/dist/type-extractor.d.ts.map +0 -1
- package/dist/type-extractor.js +0 -819
- package/dist/type-extractor.js.map +0 -1
- package/dist/types.d.ts +0 -467
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -96
- package/dist/types.js.map +0 -1
- package/dist/validation.d.ts +0 -31
- package/dist/validation.d.ts.map +0 -1
- package/dist/validation.js +0 -335
- package/dist/validation.js.map +0 -1
- package/dist/with-headers.d.ts +0 -15
- package/dist/with-headers.d.ts.map +0 -1
- package/dist/with-headers.js +0 -45
- package/dist/with-headers.js.map +0 -1
- package/dist/ws/bun.d.ts.map +0 -1
- package/dist/ws/bun.js.map +0 -1
- package/dist/ws/cloudflare.d.ts.map +0 -1
- package/dist/ws/cloudflare.js.map +0 -1
- package/dist/ws/deno.d.ts +0 -13
- package/dist/ws/deno.d.ts.map +0 -1
- package/dist/ws/deno.js +0 -133
- package/dist/ws/deno.js.map +0 -1
- package/dist/ws/node.d.ts.map +0 -1
- package/dist/ws/node.js.map +0 -1
- package/dist/ws/session.d.ts.map +0 -1
- package/dist/ws/session.js.map +0 -1
- package/dist/ws/shared.d.ts.map +0 -1
- package/dist/ws/shared.js.map +0 -1
- package/dist/ws-origin.d.ts +0 -20
- package/dist/ws-origin.d.ts.map +0 -1
- package/dist/ws-origin.js +0 -41
- package/dist/ws-origin.js.map +0 -1
- package/dist/yaml.d.ts +0 -18
- package/dist/yaml.d.ts.map +0 -1
- package/dist/yaml.js +0 -101
- package/dist/yaml.js.map +0 -1
- package/docs/api-ref/go.md +0 -399
- package/docs/api-ref/python.md +0 -399
- package/docs/api-ref/rust.md +0 -399
- package/docs/api-ref/typescript.md +0 -399
- package/docs/invalidate-spec.md +0 -333
- package/docs/meta-spec.md +0 -555
- package/docs/packaging.md +0 -104
- package/docs/regression-matrix/README.md +0 -32
- package/docs/regression-matrix/review.md +0 -44
- package/docs/regression-matrix/ws1-3.md +0 -97
- package/docs/regression-matrix/ws4-8.md +0 -107
- package/docs/regression-matrix/ws9-12.md +0 -266
- package/docs/sdk.md +0 -798
- package/src/accepts.ts +0 -136
- package/src/body-kind.ts +0 -67
- package/src/body-limit.ts +0 -152
- package/src/build/index.ts +0 -217
- package/src/cli-args.ts +0 -123
- package/src/cli-go/auth.go +0 -26
- package/src/cli-go/config.go +0 -192
- package/src/cli-go/errors.go +0 -75
- package/src/cli-go/multipart.go +0 -79
- package/src/cli-go/output.go +0 -163
- package/src/cli-go/root.go +0 -30
- package/src/cli-go/stream.go +0 -88
- package/src/cli-go/version.go +0 -5
- package/src/cli.ts +0 -209
- package/src/client/defaults.ts +0 -47
- package/src/client/error.ts +0 -82
- package/src/client/http.ts +0 -737
- package/src/client/index.ts +0 -157
- package/src/client/path.ts +0 -169
- package/src/client/redirect-policy.ts +0 -19
- package/src/client/sdk.ts +0 -351
- package/src/client/sse.ts +0 -128
- package/src/client/types.ts +0 -206
- package/src/client/ws.ts +0 -149
- package/src/client-go/errors.go +0 -236
- package/src/client-go/export.go +0 -44
- package/src/client-go/invalidation.go +0 -371
- package/src/client-go/nullable.go +0 -62
- package/src/client-go/realtime.go +0 -354
- package/src/client-go/result.go +0 -20
- package/src/client-go/runtime.go +0 -975
- package/src/client-go/sse.go +0 -159
- package/src/client-go/transport.go +0 -495
- package/src/client-go/ws.go +0 -128
- package/src/client-info.ts +0 -79
- package/src/client-mcp/README.md +0 -10
- package/src/client-mcp/server.ts +0 -221
- package/src/client-mcp/types.ts +0 -19
- package/src/client-python/_errors.py +0 -115
- package/src/client-python/_invalidation.py +0 -494
- package/src/client-python/_realtime.py +0 -179
- package/src/client-python/_runtime.py +0 -860
- package/src/client-python/_sse.py +0 -155
- package/src/client-python/_transport.py +0 -366
- package/src/client-python/_ws.py +0 -159
- package/src/client-python/py.typed +0 -0
- package/src/client-rust/errors.rs +0 -220
- package/src/client-rust/invalidation.rs +0 -412
- package/src/client-rust/invalidation_sync.rs +0 -93
- package/src/client-rust/nullable.rs +0 -17
- package/src/client-rust/realtime.rs +0 -702
- package/src/client-rust/result.rs +0 -22
- package/src/client-rust/runtime.rs +0 -980
- package/src/client-rust/runtime_sync.rs +0 -484
- package/src/client-rust/sse.rs +0 -188
- package/src/client-rust/ws.rs +0 -167
- package/src/codegen-go-cli.ts +0 -1066
- package/src/codegen-go.ts +0 -970
- package/src/codegen-hash.ts +0 -8
- package/src/codegen-ir.ts +0 -812
- package/src/codegen-lang.ts +0 -517
- package/src/codegen-load.ts +0 -150
- package/src/codegen-loaders.ts +0 -50
- package/src/codegen-mcp.ts +0 -445
- package/src/codegen-python.ts +0 -916
- package/src/codegen-route-tree-intern.ts +0 -198
- package/src/codegen-rust.ts +0 -1402
- package/src/codegen-sanitize.ts +0 -57
- package/src/codegen-schema-naming.ts +0 -165
- package/src/codegen-sdk-model.ts +0 -228
- package/src/codegen.ts +0 -5089
- package/src/context.ts +0 -325
- package/src/cookie-sign.ts +0 -119
- package/src/cookie.ts +0 -143
- package/src/cors.ts +0 -95
- package/src/crypto.ts +0 -38
- package/src/csrf.ts +0 -86
- package/src/curl-logger.ts +0 -258
- package/src/detect-runtime.ts +0 -17
- package/src/dict.ts +0 -12
- package/src/error.ts +0 -55
- package/src/errors.ts +0 -85
- package/src/etag.ts +0 -97
- package/src/feature-detect.ts +0 -147
- package/src/feature-load.ts +0 -23
- package/src/feature-slots.ts +0 -70
- package/src/fetch-request.ts +0 -13
- package/src/gen-process.ts +0 -42
- package/src/gen-write.ts +0 -127
- package/src/glob.ts +0 -109
- package/src/go-type-emitter.ts +0 -660
- package/src/honey-response.ts +0 -379
- package/src/i18n-slot.ts +0 -30
- package/src/i18n.ts +0 -300
- package/src/index.ts +0 -3829
- package/src/init.ts +0 -161
- package/src/input.ts +0 -8
- package/src/invalidate-check.ts +0 -205
- package/src/invoke-user.ts +0 -95
- package/src/ip-restrict.ts +0 -79
- package/src/ip.ts +0 -194
- package/src/logger.ts +0 -178
- package/src/media-type.ts +0 -104
- package/src/meta-spec-merge.ts +0 -80
- package/src/meta-spec.ts +0 -718
- package/src/middleware.ts +0 -331
- package/src/node-request.ts +0 -431
- package/src/node.ts +0 -454
- package/src/openapi/collect.ts +0 -50
- package/src/openapi/docs-page.ts +0 -89
- package/src/openapi/document.ts +0 -902
- package/src/openapi/json-schema-slot.ts +0 -53
- package/src/openapi/register.ts +0 -23
- package/src/openapi/scalar.ts +0 -34
- package/src/openapi/serve.ts +0 -39
- package/src/openapi/spec-factory.ts +0 -100
- package/src/openapi/spec.ts +0 -74
- package/src/openapi/swagger.ts +0 -35
- package/src/pattern.ts +0 -245
- package/src/peer.ts +0 -53
- package/src/plugin.ts +0 -864
- package/src/powered-by.ts +0 -18
- package/src/pretty-json.ts +0 -56
- package/src/producer-stream.ts +0 -296
- package/src/proxy.ts +0 -370
- package/src/python-type-emitter.ts +0 -181
- package/src/realtime/bus.ts +0 -140
- package/src/realtime/register.ts +0 -13
- package/src/realtime/route.ts +0 -153
- package/src/realtime/server.ts +0 -298
- package/src/request-id.ts +0 -32
- package/src/request-limits.ts +0 -2
- package/src/request-path.ts +0 -165
- package/src/request-to-curl.ts +0 -52
- package/src/response.ts +0 -411
- package/src/rust-type-emitter.ts +0 -548
- package/src/secure-headers.ts +0 -74
- package/src/serve-register.ts +0 -12
- package/src/serve-slot.ts +0 -58
- package/src/serve.ts +0 -220
- package/src/server-timing.ts +0 -71
- package/src/static.ts +0 -112
- package/src/telemetry/otel.ts +0 -156
- package/src/testing.ts +0 -167
- package/src/timeout.ts +0 -45
- package/src/tree.ts +0 -558
- package/src/trust.ts +0 -117
- package/src/ts-type-emitter.ts +0 -168
- package/src/type-emitter.ts +0 -760
- package/src/type-extractor.ts +0 -855
- package/src/types.ts +0 -756
- package/src/validation.ts +0 -413
- package/src/with-headers.ts +0 -45
- package/src/ws/bun.ts +0 -120
- package/src/ws/cloudflare.ts +0 -192
- package/src/ws/deno.ts +0 -188
- package/src/ws/node.ts +0 -240
- package/src/ws/session.ts +0 -73
- package/src/ws/shared.ts +0 -140
- package/src/ws-origin.ts +0 -53
- package/src/yaml.ts +0 -103
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `.output()` type algebra: what a route declares it answers (a media type's bodies by status
|
|
3
|
+
* key, its redirects, the headers of each status), and ctx.res narrowed to it. A declared helper
|
|
4
|
+
* takes only the declared status keys, each body typed by its status's schema and its options
|
|
5
|
+
* carrying the status's declared headers; an undeclared one is gone; noContent, raw, redirect and
|
|
6
|
+
* stream are always there; sse only for an event stream; binary for octet-stream or an open type.
|
|
7
|
+
*/
|
|
8
|
+
import type { BinaryBody } from "../response/binary.ts";
|
|
9
|
+
import type { HoneyRes, ResponseOptions, TypedResponse } from "../response/response.ts";
|
|
10
|
+
import type { StatusKey } from "../response/status.ts";
|
|
11
|
+
import type { InferInput, InferOutput, StandardSchemaLike } from "../validation/standard-schema.ts";
|
|
12
|
+
/** A media type's declared bodies by status key: a schema, or `true` for a body with none. */
|
|
13
|
+
export type StatusSchemas = {
|
|
14
|
+
readonly [K in StatusKey]?: StandardSchemaLike | true;
|
|
15
|
+
};
|
|
16
|
+
/** The headers each status carries, by status key: a schema over the headers by lowercased name. */
|
|
17
|
+
export type HeaderSchemas = {
|
|
18
|
+
readonly [K in StatusKey]?: StandardSchemaLike;
|
|
19
|
+
};
|
|
20
|
+
/** Redirect statuses a route declares, for the generators: no body, no schema. */
|
|
21
|
+
export type RedirectStatuses = {
|
|
22
|
+
readonly [K in StatusKey]?: true;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* What `.output()` takes: each media type it answers with (`type/subtype`), the redirects it may
|
|
26
|
+
* answer (`redirect`), and the headers each status carries (`headers`).
|
|
27
|
+
*/
|
|
28
|
+
export type OutputSchemas = {
|
|
29
|
+
readonly [mediaType: `${string}/${string}`]: StatusSchemas;
|
|
30
|
+
} & {
|
|
31
|
+
readonly headers?: HeaderSchemas;
|
|
32
|
+
readonly redirect?: RedirectStatuses;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* `TOutput` with every key under a media type, `headers` or `redirect` that names no status, and every outer key
|
|
36
|
+
* that is none of those, mapped to `never`: intersected with the declaration, a typo is an error where it is
|
|
37
|
+
* written. `assertOutputKeys` (openapi/output-keys.ts) refuses the same keys where an app is documented.
|
|
38
|
+
*/
|
|
39
|
+
export type KnownStatusKeys<TOutput> = {
|
|
40
|
+
readonly [CT in keyof TOutput]: CT extends `${string}/${string}` | "headers" | "redirect" ? {
|
|
41
|
+
readonly [K in keyof TOutput[CT]]: K extends StatusKey ? TOutput[CT][K] : never;
|
|
42
|
+
} : never;
|
|
43
|
+
};
|
|
44
|
+
/** The helper each media type is answered with. */
|
|
45
|
+
type HelperOf = {
|
|
46
|
+
"application/json": "json";
|
|
47
|
+
"application/xml": "xml";
|
|
48
|
+
"text/csv": "csv";
|
|
49
|
+
"text/event-stream": "sse";
|
|
50
|
+
"text/html": "html";
|
|
51
|
+
"text/plain": "text";
|
|
52
|
+
};
|
|
53
|
+
/** The media types answered through `binary`: octet-stream and any type no other helper answers. */
|
|
54
|
+
type BinaryTypes<TOutput> = Exclude<Extract<keyof TOutput, `${string}/${string}`>, keyof HelperOf>;
|
|
55
|
+
/** The helpers a declaration allows. */
|
|
56
|
+
export type AllowedResMethods<TOutput> = {
|
|
57
|
+
[CT in keyof HelperOf]: CT extends keyof TOutput ? HelperOf[CT] : never;
|
|
58
|
+
}[keyof HelperOf] | ([BinaryTypes<TOutput>] extends [never] ? never : "binary");
|
|
59
|
+
/** The helpers every route keeps, whatever it declares. */
|
|
60
|
+
type UniversalRes = Pick<HoneyRes, "noContent" | "raw" | "redirect" | "stream">;
|
|
61
|
+
/** A declared body's type: its schema's output; `unknown` for a body declared without one. */
|
|
62
|
+
type BodyOf<S> = S extends StandardSchemaLike ? InferOutput<S> : unknown;
|
|
63
|
+
/** The header schema status `K` declares, or `never`. */
|
|
64
|
+
type HeadersOf<TOutput, K> = TOutput extends {
|
|
65
|
+
readonly headers?: infer H;
|
|
66
|
+
} ? K extends keyof NonNullable<H> ? Exclude<NonNullable<H>[K], undefined> : never : never;
|
|
67
|
+
/** The headers status `K` must carry in its options: its declared ones, others beside them. */
|
|
68
|
+
type HeaderOpt<TOutput, K> = [HeadersOf<TOutput, K>] extends [never] ? {} : {
|
|
69
|
+
headers: InferInput<HeadersOf<TOutput, K>> & Record<string, string>;
|
|
70
|
+
};
|
|
71
|
+
/** The options for status `K`: required when it declares headers, optional otherwise. */
|
|
72
|
+
type OptsFor<TOutput, K, TExtra = {}> = [HeadersOf<TOutput, K>] extends [never] ? [opts?: ResponseOptions & TExtra] : [opts: ResponseOptions & TExtra & HeaderOpt<TOutput, K>];
|
|
73
|
+
/** `method` narrowed to `CT`'s declared status keys, the body typed (`json`) or text (the others). */
|
|
74
|
+
type Narrowed<TOutput, CT extends keyof HelperOf, TText extends boolean> = CT extends keyof TOutput ? {
|
|
75
|
+
[M in HelperOf[CT]]: <K extends keyof TOutput[CT] & StatusKey>(statusKey: K, body: TText extends true ? string : BodyOf<TOutput[CT][K]>, ...opts: OptsFor<TOutput, K>) => TypedResponse<CT, K>;
|
|
76
|
+
} : {};
|
|
77
|
+
/** `binary` for a declared open type, its content type named; octet-stream may leave it out. */
|
|
78
|
+
type BinaryCall<TOutput> = (<CT extends BinaryTypes<TOutput>, K extends keyof TOutput[CT] & StatusKey>(statusKey: K, body: BinaryBody, opts: ResponseOptions & HeaderOpt<TOutput, K> & {
|
|
79
|
+
contentType: CT;
|
|
80
|
+
}) => TypedResponse<CT, K>) & ("application/octet-stream" extends keyof TOutput ? <K extends keyof TOutput["application/octet-stream"] & StatusKey>(statusKey: K, body: BinaryBody, ...opts: OptsFor<TOutput, K, {
|
|
81
|
+
contentType?: "application/octet-stream";
|
|
82
|
+
}>) => TypedResponse<"application/octet-stream", K> : unknown);
|
|
83
|
+
/** ctx.res for a route declaring `TOutput`. */
|
|
84
|
+
type OutputRes<TOutput> = UniversalRes & Narrowed<TOutput, "application/json", false> & Narrowed<TOutput, "text/plain", true> & Narrowed<TOutput, "text/html", true> & Narrowed<TOutput, "application/xml", true> & Narrowed<TOutput, "text/csv", true> & ("text/event-stream" extends keyof TOutput ? Pick<HoneyRes, "sse"> : {}) & ([BinaryTypes<TOutput>] extends [never] ? {} : {
|
|
85
|
+
binary: BinaryCall<TOutput>;
|
|
86
|
+
});
|
|
87
|
+
/** `TCtx` with ctx.res narrowed to `TOutput`; a route without `.output()` keeps the whole HoneyRes. */
|
|
88
|
+
export type ApplyOutput<TCtx, TOutput> = [TOutput] extends [never] ? TCtx : Omit<TCtx, "res"> & {
|
|
89
|
+
readonly res: OutputRes<TOutput>;
|
|
90
|
+
};
|
|
91
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type StaticSegment = {
|
|
2
|
+
readonly k: "static";
|
|
3
|
+
readonly v: string;
|
|
4
|
+
};
|
|
5
|
+
export type ParamSegment = {
|
|
6
|
+
readonly k: "param";
|
|
7
|
+
readonly n: string;
|
|
8
|
+
readonly o: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type WildcardSegment = {
|
|
11
|
+
readonly k: "wildcard";
|
|
12
|
+
readonly n: string;
|
|
13
|
+
};
|
|
14
|
+
export type Segment = ParamSegment | StaticSegment | WildcardSegment;
|
|
15
|
+
/** `METHOD /canonical/pattern`: the stable identity of a route across apps, trees and codegen. */
|
|
16
|
+
export type RouteId = string;
|
|
17
|
+
/** How much of a route a scope covers: every path it serves, none, or only some. */
|
|
18
|
+
export type ScopeCoverage = "all" | "none" | "some";
|
|
19
|
+
/** Name given to a `*` wildcard without a name. */
|
|
20
|
+
export declare const UNNAMED_WILDCARD = "*";
|
|
21
|
+
export declare function parsePattern(path: string): Segment[];
|
|
22
|
+
export declare function formatSegment(seg: Segment): string;
|
|
23
|
+
/** Canonical pattern string: leading slash, no empty segments, no trailing slash. */
|
|
24
|
+
export declare function canonical(segments: readonly Segment[]): string;
|
|
25
|
+
/** Parse and re-print; throws on anything the grammar cannot express. */
|
|
26
|
+
export declare function normalizePattern(path: string): string;
|
|
27
|
+
/** Join two patterns: `joinPatterns("/api/", "users")` is `/api/users`. */
|
|
28
|
+
export declare function joinPatterns(base: string, path: string): string;
|
|
29
|
+
/** Concrete variants: an optional last param yields the pattern with and without it. */
|
|
30
|
+
export declare function expandOptional(segments: readonly Segment[]): Segment[][];
|
|
31
|
+
export declare function isStaticPattern(segments: readonly Segment[]): boolean;
|
|
32
|
+
/** Parameter and wildcard names, in order. */
|
|
33
|
+
export declare function patternParams(segments: readonly Segment[]): string[];
|
|
34
|
+
export declare function routeId(method: string, pattern: string): RouteId;
|
|
35
|
+
/** Split a RouteId back into method and canonical pattern. */
|
|
36
|
+
export declare function splitRouteId(id: RouteId): {
|
|
37
|
+
method: string;
|
|
38
|
+
pattern: string;
|
|
39
|
+
};
|
|
40
|
+
/** OpenAPI path template: `:id` and named wildcards become `{name}`. */
|
|
41
|
+
export declare function toOpenApiTemplate(segments: readonly Segment[]): string;
|
|
42
|
+
/**
|
|
43
|
+
* Decide at registration whether a scope covers a route. `"some"` means the answer depends on the
|
|
44
|
+
* request path (a route param or wildcard can land inside the scope), so the scope's middleware is
|
|
45
|
+
* guarded by {@link pathInScope} at request time.
|
|
46
|
+
*/
|
|
47
|
+
export declare function scopeCoverage(route: readonly Segment[], scope: readonly Segment[]): ScopeCoverage;
|
|
48
|
+
/** {@link scopeCoverage} for a route already expanded into its optional-param variants, so finalize expands each route once, not once per scope. */
|
|
49
|
+
export declare function variantsCoverage(variants: readonly (readonly Segment[])[], scope: readonly Segment[]): ScopeCoverage;
|
|
50
|
+
/**
|
|
51
|
+
* Is a request path inside a scope? Splits the path the way the router does (empty segments
|
|
52
|
+
* dropped) and compares each segment both as sent and percent-decoded, so a route param that
|
|
53
|
+
* decodes to a scoped literal is guarded exactly like the literal.
|
|
54
|
+
*/
|
|
55
|
+
export declare function pathInScope(path: string, scope: readonly Segment[]): boolean;
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one route-pattern grammar. Registration, the router tree, scope matching, codegen selectors
|
|
3
|
+
* and OpenAPI paths all consume the parsed form; nothing re-derives params from a pattern string
|
|
4
|
+
* with its own regex.
|
|
5
|
+
*
|
|
6
|
+
* pattern = "/" | ("/" segment)+ ["/"]
|
|
7
|
+
* segment = static | param | wildcard
|
|
8
|
+
* param = ":" name ["?"] optional only as the last segment
|
|
9
|
+
* wildcard = "*" [name] last segment only; unnamed is called "*"
|
|
10
|
+
* name = [A-Za-z_$][A-Za-z0-9_$-]*
|
|
11
|
+
*
|
|
12
|
+
* Empty segments are dropped (`//a` is `/a`), a trailing slash is not significant, and a pattern
|
|
13
|
+
* without a leading slash gets one. `.` and `..` segments are rejected.
|
|
14
|
+
*/
|
|
15
|
+
import { encodeSegment } from "./request-path.js";
|
|
16
|
+
const NAME = /^[A-Za-z_$][A-Za-z0-9_$-]*$/;
|
|
17
|
+
/* `%2e` is a dot to every URL parser, so `/%2e%2e` can never be requested either */
|
|
18
|
+
const DOT_SEGMENT = /^(?:\.|%2e){1,2}$/i;
|
|
19
|
+
/** Name given to a `*` wildcard without a name. */
|
|
20
|
+
export const UNNAMED_WILDCARD = "*";
|
|
21
|
+
function invalid(path, why) {
|
|
22
|
+
throw new Error(`Invalid route pattern "${path}": ${why}`);
|
|
23
|
+
}
|
|
24
|
+
function paramSegment(path, seg, names) {
|
|
25
|
+
const optional = seg.endsWith("?");
|
|
26
|
+
const name = optional ? seg.slice(1, -1) : seg.slice(1);
|
|
27
|
+
if (!NAME.test(name)) {
|
|
28
|
+
invalid(path, `parameter ":${name}" is not a valid name (letters, digits, "_", "$" and "-"; it takes the whole segment)`);
|
|
29
|
+
}
|
|
30
|
+
if (names.has(name))
|
|
31
|
+
invalid(path, `parameter ":${name}" appears twice`);
|
|
32
|
+
names.add(name);
|
|
33
|
+
return { k: "param", n: name, o: optional };
|
|
34
|
+
}
|
|
35
|
+
function wildcardSegment(path, seg, names) {
|
|
36
|
+
const name = seg.length > 1 ? seg.slice(1) : UNNAMED_WILDCARD;
|
|
37
|
+
if (name !== UNNAMED_WILDCARD && !NAME.test(name))
|
|
38
|
+
invalid(path, `wildcard "*${name}" is not a valid name`);
|
|
39
|
+
if (names.has(name))
|
|
40
|
+
invalid(path, `"${name}" appears twice`);
|
|
41
|
+
names.add(name);
|
|
42
|
+
return { k: "wildcard", n: name };
|
|
43
|
+
}
|
|
44
|
+
function segmentOf(path, seg, names) {
|
|
45
|
+
if (DOT_SEGMENT.test(seg))
|
|
46
|
+
invalid(path, `"${seg}" segments are not allowed`);
|
|
47
|
+
if (seg.startsWith(":"))
|
|
48
|
+
return paramSegment(path, seg, names);
|
|
49
|
+
if (seg.startsWith("*"))
|
|
50
|
+
return wildcardSegment(path, seg, names);
|
|
51
|
+
if (seg.includes("?"))
|
|
52
|
+
invalid(path, "query strings are not part of a route pattern");
|
|
53
|
+
/* the request path is percent-encoded the way URL parsing encodes it; so is a literal */
|
|
54
|
+
return { k: "static", v: encodeSegment(seg) };
|
|
55
|
+
}
|
|
56
|
+
/** A wildcard or an optional param: it matches everything at and below its depth. */
|
|
57
|
+
function isOpenEnded(seg) {
|
|
58
|
+
return seg.k === "wildcard" || (seg.k === "param" && seg.o);
|
|
59
|
+
}
|
|
60
|
+
export function parsePattern(path) {
|
|
61
|
+
if (typeof path !== "string")
|
|
62
|
+
invalid(String(path), "must be a string");
|
|
63
|
+
if (path.includes("#"))
|
|
64
|
+
invalid(path, "fragments are not part of a route pattern");
|
|
65
|
+
const names = new Set();
|
|
66
|
+
const segments = path
|
|
67
|
+
.split("/")
|
|
68
|
+
.filter((seg) => seg !== "")
|
|
69
|
+
.map((seg) => segmentOf(path, seg, names));
|
|
70
|
+
for (const seg of segments.slice(0, -1)) {
|
|
71
|
+
if (seg.k === "wildcard")
|
|
72
|
+
invalid(path, "a wildcard must be the last segment");
|
|
73
|
+
if (isOpenEnded(seg))
|
|
74
|
+
invalid(path, "an optional parameter must be the last segment");
|
|
75
|
+
}
|
|
76
|
+
return segments;
|
|
77
|
+
}
|
|
78
|
+
export function formatSegment(seg) {
|
|
79
|
+
if (seg.k === "static")
|
|
80
|
+
return seg.v;
|
|
81
|
+
if (seg.k === "param")
|
|
82
|
+
return `:${seg.n}${seg.o ? "?" : ""}`;
|
|
83
|
+
return seg.n === UNNAMED_WILDCARD ? "*" : `*${seg.n}`;
|
|
84
|
+
}
|
|
85
|
+
/** Canonical pattern string: leading slash, no empty segments, no trailing slash. */
|
|
86
|
+
export function canonical(segments) {
|
|
87
|
+
return segments.length === 0 ? "/" : segments.map((seg) => `/${formatSegment(seg)}`).join("");
|
|
88
|
+
}
|
|
89
|
+
/** Parse and re-print; throws on anything the grammar cannot express. */
|
|
90
|
+
export function normalizePattern(path) {
|
|
91
|
+
return canonical(parsePattern(path));
|
|
92
|
+
}
|
|
93
|
+
/** Join two patterns: `joinPatterns("/api/", "users")` is `/api/users`. */
|
|
94
|
+
export function joinPatterns(base, path) {
|
|
95
|
+
const head = parsePattern(base);
|
|
96
|
+
const tail = parsePattern(path);
|
|
97
|
+
const last = head.at(-1);
|
|
98
|
+
if (last !== undefined && isOpenEnded(last) && tail.length > 0) {
|
|
99
|
+
invalid(`${base}${path}`, "cannot append to a wildcard or optional parameter");
|
|
100
|
+
}
|
|
101
|
+
/* re-parse: a name used on both sides (`/:id` + `/:id`) is only caught on the whole pattern */
|
|
102
|
+
return normalizePattern(canonical([...head, ...tail]));
|
|
103
|
+
}
|
|
104
|
+
/** Concrete variants: an optional last param yields the pattern with and without it. */
|
|
105
|
+
export function expandOptional(segments) {
|
|
106
|
+
const last = segments.at(-1);
|
|
107
|
+
if (last?.k !== "param" || !last.o)
|
|
108
|
+
return [[...segments]];
|
|
109
|
+
const head = segments.slice(0, -1);
|
|
110
|
+
return [head, [...head, { k: "param", n: last.n, o: false }]];
|
|
111
|
+
}
|
|
112
|
+
export function isStaticPattern(segments) {
|
|
113
|
+
return segments.every((seg) => seg.k === "static");
|
|
114
|
+
}
|
|
115
|
+
/** Parameter and wildcard names, in order. */
|
|
116
|
+
export function patternParams(segments) {
|
|
117
|
+
return segments.flatMap((seg) => (seg.k === "static" ? [] : [seg.n]));
|
|
118
|
+
}
|
|
119
|
+
export function routeId(method, pattern) {
|
|
120
|
+
return `${method} ${pattern}`;
|
|
121
|
+
}
|
|
122
|
+
/** Split a RouteId back into method and canonical pattern. */
|
|
123
|
+
export function splitRouteId(id) {
|
|
124
|
+
const space = id.indexOf(" ");
|
|
125
|
+
return { method: id.slice(0, space), pattern: id.slice(space + 1) };
|
|
126
|
+
}
|
|
127
|
+
/** OpenAPI path template: `:id` and named wildcards become `{name}`. */
|
|
128
|
+
export function toOpenApiTemplate(segments) {
|
|
129
|
+
if (segments.length === 0)
|
|
130
|
+
return "/";
|
|
131
|
+
return segments
|
|
132
|
+
.map((seg) => {
|
|
133
|
+
if (seg.k === "static")
|
|
134
|
+
return `/${seg.v}`;
|
|
135
|
+
return seg.n === UNNAMED_WILDCARD ? "/{wildcard}" : `/{${seg.n}}`;
|
|
136
|
+
})
|
|
137
|
+
.join("");
|
|
138
|
+
}
|
|
139
|
+
/*
|
|
140
|
+
* Scopes. `app.use("/admin", mw)` guards request paths: a path is inside the scope when its leading
|
|
141
|
+
* segments match the scope pattern: static segments literally, `:param` any one segment, `*` and
|
|
142
|
+
* an optional last param everything below. The scope uses the route grammar, so `/orgs/:id` and
|
|
143
|
+
* `/admin/*` mean what they mean in a route.
|
|
144
|
+
*/
|
|
145
|
+
function safeDecode(s) {
|
|
146
|
+
if (!s.includes("%"))
|
|
147
|
+
return s;
|
|
148
|
+
try {
|
|
149
|
+
return decodeURIComponent(s);
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
/* a malformed escape in a pattern literal: kept as written, so it still matches itself */
|
|
153
|
+
return s;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/* both sides decoded: a literal is stored encoded (`%C3%A9`), and a request may spell the same
|
|
157
|
+
* bytes with lowercase escapes (`%c3%a9`) or raw */
|
|
158
|
+
function sameLiteral(a, b) {
|
|
159
|
+
return a === b || safeDecode(a) === safeDecode(b);
|
|
160
|
+
}
|
|
161
|
+
function coverVariant(route, scope) {
|
|
162
|
+
let uncertain = false;
|
|
163
|
+
for (let i = 0; i < scope.length; i++) {
|
|
164
|
+
const s = scope[i];
|
|
165
|
+
if (isOpenEnded(s))
|
|
166
|
+
return uncertain ? "some" : "all";
|
|
167
|
+
const r = route[i];
|
|
168
|
+
/* the route's paths end before the scope's do */
|
|
169
|
+
if (r === undefined)
|
|
170
|
+
return "none";
|
|
171
|
+
/* a route wildcard serves paths both inside and outside the rest of the scope */
|
|
172
|
+
if (r.k === "wildcard")
|
|
173
|
+
return "some";
|
|
174
|
+
if (r.k === "static" && s.k === "static" && !sameLiteral(r.v, s.v))
|
|
175
|
+
return "none";
|
|
176
|
+
/* a route param against a scope literal: inside the scope only when the value matches */
|
|
177
|
+
if (r.k === "param" && s.k === "static")
|
|
178
|
+
uncertain = true;
|
|
179
|
+
}
|
|
180
|
+
return uncertain ? "some" : "all";
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Decide at registration whether a scope covers a route. `"some"` means the answer depends on the
|
|
184
|
+
* request path (a route param or wildcard can land inside the scope), so the scope's middleware is
|
|
185
|
+
* guarded by {@link pathInScope} at request time.
|
|
186
|
+
*/
|
|
187
|
+
export function scopeCoverage(route, scope) {
|
|
188
|
+
return variantsCoverage(expandOptional(route), scope);
|
|
189
|
+
}
|
|
190
|
+
/** {@link scopeCoverage} for a route already expanded into its optional-param variants, so finalize expands each route once, not once per scope. */
|
|
191
|
+
export function variantsCoverage(variants, scope) {
|
|
192
|
+
const first = coverVariant(variants[0], scope);
|
|
193
|
+
for (let i = 1; i < variants.length; i++)
|
|
194
|
+
if (coverVariant(variants[i], scope) !== first)
|
|
195
|
+
return "some";
|
|
196
|
+
return first;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Is a request path inside a scope? Splits the path the way the router does (empty segments
|
|
200
|
+
* dropped) and compares each segment both as sent and percent-decoded, so a route param that
|
|
201
|
+
* decodes to a scoped literal is guarded exactly like the literal.
|
|
202
|
+
*/
|
|
203
|
+
export function pathInScope(path, scope) {
|
|
204
|
+
let pos = 0;
|
|
205
|
+
for (const s of scope) {
|
|
206
|
+
if (isOpenEnded(s))
|
|
207
|
+
return true;
|
|
208
|
+
while (path.charCodeAt(pos) === 47)
|
|
209
|
+
pos++;
|
|
210
|
+
if (pos >= path.length)
|
|
211
|
+
return false;
|
|
212
|
+
const slash = path.indexOf("/", pos);
|
|
213
|
+
const end = slash === -1 ? path.length : slash;
|
|
214
|
+
if (s.k === "static" && !sameLiteral(path.substring(pos, end), s.v))
|
|
215
|
+
return false;
|
|
216
|
+
pos = end;
|
|
217
|
+
}
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A route record: what one registered route is. Records live in a per-app table keyed by
|
|
3
|
+
* `RouteId`; the tree only holds ids, so two apps that load the same tree, or a sub-app mounted
|
|
4
|
+
* into two parents, never share a record.
|
|
5
|
+
*/
|
|
6
|
+
import type { RouteId, Segment } from "./pattern.ts";
|
|
7
|
+
export type RouteRecord = {
|
|
8
|
+
/** route identity: `METHOD /canonical/pattern` */
|
|
9
|
+
readonly id: RouteId;
|
|
10
|
+
/** route meta, frozen: what `ctx.meta` reads */
|
|
11
|
+
mt: Readonly<Record<string, unknown>> | null;
|
|
12
|
+
/** canonical route pattern, e.g. `/users/:id` */
|
|
13
|
+
readonly rp: string;
|
|
14
|
+
/** the pattern's segments, parsed once at registration so finalize never parses again */
|
|
15
|
+
readonly sg: readonly Segment[];
|
|
16
|
+
};
|
|
17
|
+
/** A fresh record for another graph; the meta object is frozen, so it is shared, not copied. */
|
|
18
|
+
export declare function copyRecord<T extends RouteRecord>(record: T): T;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route registration: the app graph every handle of one app shares, the routes and scopes
|
|
3
|
+
* registered into it, and mounting a sub-app. Records are per graph, keyed by `RouteId`; the
|
|
4
|
+
* tree holds ids only, so a sub-app mounted into two parents never shares a record.
|
|
5
|
+
*/
|
|
6
|
+
import type { InputSchemas, InputStep } from "../input/input.ts";
|
|
7
|
+
import type { OutputSchemas } from "./output-types.ts";
|
|
8
|
+
import type { MaybePromise, RuntimeMiddleware } from "../middleware/middleware.ts";
|
|
9
|
+
import type { FinalizeHooks, FinalTable } from "./finalize.ts";
|
|
10
|
+
import { type RouteId, type Segment } from "./pattern.ts";
|
|
11
|
+
import type { RouteRecord } from "./record.ts";
|
|
12
|
+
import { type AppSettings, type ErrorFactories } from "./settings.ts";
|
|
13
|
+
import { type RouteEntry, type TreeNode } from "./tree.ts";
|
|
14
|
+
/** An app's graph slot: not exported from the package; finalize readers (tests, codegen) reach the graph through it. */
|
|
15
|
+
export declare const GRAPH: unique symbol;
|
|
16
|
+
/** A handle's view slot: what a handle-level helper (serving a document) reads its basePath off. */
|
|
17
|
+
export declare const VIEW: unique symbol;
|
|
18
|
+
/**
|
|
19
|
+
* The meta marker of a route an app serves about itself (its document, docs page or manifest).
|
|
20
|
+
* Such a route belongs to the app that registered it: mounting another app copies none of its
|
|
21
|
+
* served routes, a route tree leaves them out, and an app loaded from a tree registers its own.
|
|
22
|
+
*/
|
|
23
|
+
export declare const SERVED: unique symbol;
|
|
24
|
+
/** A registered route: what it was registered with, before finalize resolves it against the graph. */
|
|
25
|
+
export type RouteHandler = RouteRecord & {
|
|
26
|
+
/** came with the loaded route tree: a registration of the same route replaces it */
|
|
27
|
+
readonly lt?: true;
|
|
28
|
+
/** the chain middleware captured at registration, plus any mounting chain */
|
|
29
|
+
readonly cm: readonly RuntimeMiddleware[];
|
|
30
|
+
/** `.context()` values of the registering handle, merged under the mounting handle's */
|
|
31
|
+
readonly cv: Readonly<Record<string, unknown>> | null;
|
|
32
|
+
/** error keys the route declared itself (`.errors()`, `.boundary()`) */
|
|
33
|
+
readonly dk: ReadonlySet<string>;
|
|
34
|
+
/** the factory `.errors(factory, ...keys)` named; its keys come from it, not the app's */
|
|
35
|
+
readonly ef: ErrorFactories | null;
|
|
36
|
+
readonly fn: (ctx: object) => MaybePromise<Response>;
|
|
37
|
+
/** the compiled `.input()` step, run after the middleware and before `fn`; `null` without `.input()` */
|
|
38
|
+
readonly in: InputStep | null;
|
|
39
|
+
/** what `.input()` declares, as written: read by documentation, never at dispatch; `null` without it */
|
|
40
|
+
readonly iv: InputSchemas | null;
|
|
41
|
+
/** what `.output()` declares, checked at finalize when the app's mode is on; `null` without it */
|
|
42
|
+
readonly out: OutputSchemas | null;
|
|
43
|
+
/** the settings of the app the route was registered on */
|
|
44
|
+
readonly own: AppSettings<unknown>;
|
|
45
|
+
/** route-level boundary key (`.boundary()`) */
|
|
46
|
+
readonly rb: string | null;
|
|
47
|
+
/** route-level middleware (`.get(...).use(mw)`) */
|
|
48
|
+
readonly rm: readonly RuntimeMiddleware[];
|
|
49
|
+
/** explicit meta: chain `.meta()` overlaid by route `.meta()` */
|
|
50
|
+
readonly xm: Readonly<Record<string, unknown>> | null;
|
|
51
|
+
};
|
|
52
|
+
/** What a builder hands over; the graph gives it its id and pattern. */
|
|
53
|
+
export type RouteSource = Omit<RouteHandler, "id" | "mt" | "rp" | "sg">;
|
|
54
|
+
/** One `app.use(mw)`: the handle it returns has to register a route, or `mw` runs nowhere. */
|
|
55
|
+
export type ChainNode = {
|
|
56
|
+
readonly mw: RuntimeMiddleware;
|
|
57
|
+
readonly parent: ChainNode | null;
|
|
58
|
+
used: boolean;
|
|
59
|
+
};
|
|
60
|
+
/** A route builder still waiting for `.handler()`, reported at finalize. */
|
|
61
|
+
export type PendingRoute = {
|
|
62
|
+
readonly id: string;
|
|
63
|
+
};
|
|
64
|
+
/** One path-scoped `use(path, mw)`. */
|
|
65
|
+
export type ScopedEntry = {
|
|
66
|
+
/** the middleware behind a request-path check, for routes the scope covers only partly */
|
|
67
|
+
readonly guard: RuntimeMiddleware;
|
|
68
|
+
readonly mw: RuntimeMiddleware;
|
|
69
|
+
/** canonical full-path pattern, rebased against the handle's basePath */
|
|
70
|
+
readonly prefix: string;
|
|
71
|
+
readonly segs: readonly Segment[];
|
|
72
|
+
};
|
|
73
|
+
export type HoneyGraph = {
|
|
74
|
+
/** root wildcards a loaded app registered outside its tree: what its unserved leaves delegate to */
|
|
75
|
+
readonly catchAll: Map<RouteId, RouteHandler>;
|
|
76
|
+
/** every `use(mw)` handle; one that never registers a route is reported at finalize */
|
|
77
|
+
readonly chains: ChainNode[];
|
|
78
|
+
/** bumped by every registration; finalize re-runs when it moves */
|
|
79
|
+
epoch: number;
|
|
80
|
+
final: FinalTable | null;
|
|
81
|
+
/** the error boundary and miss answer dispatch compiles into every chain, created once */
|
|
82
|
+
hooks: FinalizeHooks | null;
|
|
83
|
+
readonly pending: Set<PendingRoute>;
|
|
84
|
+
/** the route data of the tree `routeTree()` loaded; `null` while the app builds its own tree */
|
|
85
|
+
loaded: Readonly<Record<RouteId, RouteEntry>> | null;
|
|
86
|
+
readonly records: Map<RouteId, RouteHandler>;
|
|
87
|
+
root: TreeNode;
|
|
88
|
+
/** path-scoped middleware, in registration order */
|
|
89
|
+
readonly scoped: ScopedEntry[];
|
|
90
|
+
/** chains of the handles that served a request: what 404 and 405 run when there are no routes */
|
|
91
|
+
readonly served: Set<readonly RuntimeMiddleware[]>;
|
|
92
|
+
readonly settings: AppSettings<unknown>;
|
|
93
|
+
/** routes a loaded app registered that its tree lacks: the tree is stale, said at finalize */
|
|
94
|
+
readonly unexpected: RouteId[];
|
|
95
|
+
};
|
|
96
|
+
/** What one handle contributes to the routes registered or mounted through it. */
|
|
97
|
+
export type HandleView = {
|
|
98
|
+
readonly basePath: string;
|
|
99
|
+
readonly chain: readonly RuntimeMiddleware[];
|
|
100
|
+
readonly chainMeta: Readonly<Record<string, unknown>> | null;
|
|
101
|
+
readonly contextValues: Readonly<Record<string, unknown>> | null;
|
|
102
|
+
/** the `use(mw)` call that created this chain; `null` on the root handle */
|
|
103
|
+
readonly node: ChainNode | null;
|
|
104
|
+
};
|
|
105
|
+
export declare const ROOT_VIEW: HandleView;
|
|
106
|
+
export declare function createGraph(): HoneyGraph;
|
|
107
|
+
/** Every `use()` on the way to a handle that registers, mounts or serves is in use. */
|
|
108
|
+
export declare function markUsed(node: ChainNode | null): void;
|
|
109
|
+
/** A new `use(mw)` node under `parent`. */
|
|
110
|
+
export declare function addChain(g: HoneyGraph, parent: ChainNode | null, mw: RuntimeMiddleware): ChainNode;
|
|
111
|
+
/** Register one route at every leaf its pattern occupies (an optional last param places two). */
|
|
112
|
+
/** Throw the duplicate-route error when `g` already has a route at `method` and `segments`. */
|
|
113
|
+
export declare function assertRouteFree(g: HoneyGraph, method: string, segments: readonly Segment[]): RouteId;
|
|
114
|
+
/** Whether a route's own meta marks it served: the app's own, never copied with it. */
|
|
115
|
+
export declare function isServed(r: {
|
|
116
|
+
readonly xm: Readonly<Record<string, unknown>> | null;
|
|
117
|
+
}): boolean;
|
|
118
|
+
export declare function addRoute(g: HoneyGraph, method: string, segments: readonly Segment[], source: RouteSource): RouteId;
|
|
119
|
+
/** Guard every request path under `path` (rebased on `basePath`) with `mw`, whichever handle registered the route. */
|
|
120
|
+
export declare function addScope(g: HoneyGraph, basePath: string, path: string, mw: RuntimeMiddleware): void;
|
|
121
|
+
/** A builder registered or was abandoned on purpose: no longer pending. */
|
|
122
|
+
export declare function settle(g: HoneyGraph, pending: PendingRoute, node: ChainNode | null): void;
|
|
123
|
+
/** `use(mw)` handles that never registered, mounted or served, and builders without `.handler()`. */
|
|
124
|
+
export declare function assertNothingDiscarded(g: HoneyGraph): void;
|
|
125
|
+
/**
|
|
126
|
+
* Mount a sub-app: re-register its routes under the view's basePath, with the view's chain running
|
|
127
|
+
* before theirs and its context values and chain meta under theirs. Nothing is shared by
|
|
128
|
+
* reference, so routes the sub registers later stay its own; each record keeps the settings of the
|
|
129
|
+
* app it was registered on. The sub's scopes guard the paths it brought.
|
|
130
|
+
*/
|
|
131
|
+
export declare function mount(g: HoneyGraph, view: HandleView, sub: HoneyGraph): void;
|
|
132
|
+
/** The error keys a middleware chain declares, in run order. */
|
|
133
|
+
export declare function chainErrorKeys(chain: readonly RuntimeMiddleware[]): string[];
|
|
134
|
+
/** The factories a middleware chain's keys come from, each once, in run order. */
|
|
135
|
+
export declare function chainErrorFactories(chain: readonly RuntimeMiddleware[]): ErrorFactories[];
|