@lovrozagar/honey 0.7.2 → 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 -744
- package/dist/index.js +12 -2363
- 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 -776
- 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 -193
- 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 -893
- 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 -554
- 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
package/src/accepts.ts
DELETED
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
type ParsedType = {
|
|
2
|
-
/** Position in the header, for stable tie-breaking. */
|
|
3
|
-
index: number
|
|
4
|
-
/** Media-type parameters other than q, names lowercased (more parameters = more specific). */
|
|
5
|
-
params: Map<string, string>
|
|
6
|
-
q: number
|
|
7
|
-
subtype: string
|
|
8
|
-
type: string
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/** RFC 9110 §12.4.2: qvalue = ( "0" [ "." 0*3DIGIT ] ) / ( "1" [ "." 0*3("0") ] ). Lenient on digit count. */
|
|
12
|
-
function parseQ(raw: string): number | null {
|
|
13
|
-
if (!/^(?:0(?:\.\d*)?|1(?:\.0*)?|\.\d+)$/.test(raw)) return null
|
|
14
|
-
const q = Number(raw)
|
|
15
|
-
return q >= 0 && q <= 1 ? q : null
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function parseAccept(header: string): ParsedType[] {
|
|
19
|
-
const types: ParsedType[] = []
|
|
20
|
-
const parts = header.split(",")
|
|
21
|
-
for (let index = 0; index < parts.length; index++) {
|
|
22
|
-
const trimmed = parts[index].trim()
|
|
23
|
-
if (trimmed.length === 0) continue
|
|
24
|
-
|
|
25
|
-
const segments = trimmed.split(";")
|
|
26
|
-
const mediaType = segments[0].trim().toLowerCase()
|
|
27
|
-
const slash = mediaType.indexOf("/")
|
|
28
|
-
if (slash <= 0 || slash === mediaType.length - 1) continue
|
|
29
|
-
const type = mediaType.slice(0, slash)
|
|
30
|
-
const subtype = mediaType.slice(slash + 1)
|
|
31
|
-
/* `*\/html` is not a valid range. */
|
|
32
|
-
if (type === "*" && subtype !== "*") continue
|
|
33
|
-
|
|
34
|
-
let q = 1
|
|
35
|
-
const params = new Map<string, string>()
|
|
36
|
-
for (let i = 1; i < segments.length; i++) {
|
|
37
|
-
const eq = segments[i].indexOf("=")
|
|
38
|
-
if (eq === -1) continue
|
|
39
|
-
const name = segments[i].slice(0, eq).trim().toLowerCase()
|
|
40
|
-
const value = segments[i].slice(eq + 1).trim()
|
|
41
|
-
if (name === "q") {
|
|
42
|
-
const parsed = parseQ(value)
|
|
43
|
-
/* An unparsable weight makes the whole range unusable rather than silently q=1. */
|
|
44
|
-
q = parsed ?? 0
|
|
45
|
-
/* Parameters after q are accept-extensions, not media-type parameters. */
|
|
46
|
-
break
|
|
47
|
-
}
|
|
48
|
-
params.set(name, unquote(value))
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
types.push({ index, params, q, subtype, type })
|
|
52
|
-
}
|
|
53
|
-
return types
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function unquote(value: string): string {
|
|
57
|
-
return value.length >= 2 && value.startsWith('"') && value.endsWith('"') ? value.slice(1, -1) : value
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/** `type/subtype;a=1;b=2` → its parameters, names lowercased. */
|
|
61
|
-
function typeParams(segments: string[]): Map<string, string> {
|
|
62
|
-
const params = new Map<string, string>()
|
|
63
|
-
for (let i = 1; i < segments.length; i++) {
|
|
64
|
-
const eq = segments[i].indexOf("=")
|
|
65
|
-
if (eq === -1) continue
|
|
66
|
-
params.set(segments[i].slice(0, eq).trim().toLowerCase(), unquote(segments[i].slice(eq + 1).trim()))
|
|
67
|
-
}
|
|
68
|
-
return params
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* 0 = no match; otherwise higher is more specific. A range with parameters matches only a
|
|
73
|
-
* supported type that carries every one of them with the same value (RFC 9110 §12.5.1), so
|
|
74
|
-
* `application/json;v=2;q=0` excludes `application/json;v=2`, never plain `application/json`.
|
|
75
|
-
*/
|
|
76
|
-
function specificity(range: ParsedType, sType: string, sSub: string, sParams: Map<string, string>): number {
|
|
77
|
-
if (range.type === "*") return 1
|
|
78
|
-
if (range.type !== sType) return 0
|
|
79
|
-
if (range.subtype === "*") return 2
|
|
80
|
-
if (range.subtype !== sSub) return 0
|
|
81
|
-
for (const [name, value] of range.params) {
|
|
82
|
-
if (sParams.get(name) !== value) return 0
|
|
83
|
-
}
|
|
84
|
-
return 3 + range.params.size
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Pick the best supported content type based on the request's Accept header.
|
|
89
|
-
*
|
|
90
|
-
* Each supported type takes the weight of the most specific range that matches
|
|
91
|
-
* it (RFC 9110 §12.5.1), so `text/html;q=0, *\/*` excludes `text/html`. Among
|
|
92
|
-
* types with equal weight, the server's order in `supported` wins.
|
|
93
|
-
*
|
|
94
|
-
* Returns null if no match found. Returns the first supported type if there is
|
|
95
|
-
* no Accept header.
|
|
96
|
-
*/
|
|
97
|
-
export function accepts(req: Request, supported: string[]): string | null {
|
|
98
|
-
const header = req.headers.get("accept")
|
|
99
|
-
if (header === null || header.trim().length === 0) {
|
|
100
|
-
return supported[0] ?? null
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const parsed = parseAccept(header)
|
|
104
|
-
if (parsed.length === 0) {
|
|
105
|
-
return supported[0] ?? null
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
let bestMatch: string | null = null
|
|
109
|
-
let bestQ = 0
|
|
110
|
-
|
|
111
|
-
for (const s of supported) {
|
|
112
|
-
const lower = s.toLowerCase()
|
|
113
|
-
const slash = lower.indexOf("/")
|
|
114
|
-
if (slash === -1) continue
|
|
115
|
-
const sType = lower.slice(0, slash)
|
|
116
|
-
const sSegments = s.slice(slash + 1).split(";")
|
|
117
|
-
const sSub = sSegments[0].trim().toLowerCase()
|
|
118
|
-
const sParams = typeParams(sSegments)
|
|
119
|
-
|
|
120
|
-
let weight = -1
|
|
121
|
-
let bestSpecificity = 0
|
|
122
|
-
for (const range of parsed) {
|
|
123
|
-
const spec = specificity(range, sType, sSub, sParams)
|
|
124
|
-
if (spec > bestSpecificity) {
|
|
125
|
-
bestSpecificity = spec
|
|
126
|
-
weight = range.q
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
if (weight > bestQ) {
|
|
130
|
-
bestQ = weight
|
|
131
|
-
bestMatch = s
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
return bestMatch
|
|
136
|
-
}
|
package/src/body-kind.ts
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { isHoneyResponse, replaceResponse } from "./honey-response.ts"
|
|
2
|
-
import { BODY_KIND } from "./producer-stream.ts"
|
|
3
|
-
|
|
4
|
-
/** Set by `ctx.res.json/text/html/...` on native responses built from in-memory bytes. */
|
|
5
|
-
const RAW_BODY = Symbol.for("honey.rawBody")
|
|
6
|
-
|
|
7
|
-
/** The in-memory body of a response Honey built from a string or bytes, if any. */
|
|
8
|
-
export function rawBodyOf(response: Response): string | Uint8Array | null {
|
|
9
|
-
if (isHoneyResponse(response)) return response.rawBody
|
|
10
|
-
return (response as Response & { [RAW_BODY]?: string | Uint8Array })[RAW_BODY] ?? null
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* What kind of body a response carries, decided without reading it.
|
|
15
|
-
*
|
|
16
|
-
* - `empty`: no body.
|
|
17
|
-
* - `buffered`: the whole body is already in memory (a response Honey built
|
|
18
|
-
* from a string or bytes) or its size is declared by `content-length`, so
|
|
19
|
-
* reading it is bounded.
|
|
20
|
-
* - `stream`: anything else (SSE, `generate()`, `new Response(stream)`, a
|
|
21
|
-
* proxied `fetch()` without a length). Middleware must not buffer it.
|
|
22
|
-
*
|
|
23
|
-
* Content type is never consulted: SSE and NDJSON streams carry one.
|
|
24
|
-
* Honey's own responses are tagged when they are created: buffered ones by their raw body,
|
|
25
|
-
* streams by `BODY_KIND`. An untagged native response is a stream unless it declares a length.
|
|
26
|
-
*/
|
|
27
|
-
export function bodyKind(response: Response): "buffered" | "empty" | "stream" {
|
|
28
|
-
if (rawBodyOf(response) !== null) return "buffered"
|
|
29
|
-
/* `sse()`, `stream()` and `generate()` tag their responses at creation */
|
|
30
|
-
if ((response as Response & { [BODY_KIND]?: string })[BODY_KIND] === "stream") return "stream"
|
|
31
|
-
if (isHoneyResponse(response)) {
|
|
32
|
-
/* `body` is the stream (or null) when no raw bytes exist; reading it does not allocate. */
|
|
33
|
-
return response.body === null ? "empty" : "stream"
|
|
34
|
-
}
|
|
35
|
-
if (response.body === null) return "empty"
|
|
36
|
-
const length = response.headers.get("content-length")
|
|
37
|
-
if (length !== null && /^\d+$/.test(length.trim())) return "buffered"
|
|
38
|
-
return "stream"
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/** A stream `sse()`, `stream()` or `generate()` created: possibly endless, never to be buffered. */
|
|
42
|
-
export function isProducedStream(response: Response): boolean {
|
|
43
|
-
return (response as Response & { [BODY_KIND]?: string })[BODY_KIND] === "stream"
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function noop(): void {}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* The response to a HEAD request: same status and headers, no body. A body Honey built in
|
|
50
|
-
* memory keeps its `content-length`, so HEAD reports the size GET would send; a stream is
|
|
51
|
-
* cancelled unread, so its producer never starts (or stops if it already did).
|
|
52
|
-
*/
|
|
53
|
-
export function headResponse(response: Response): Response {
|
|
54
|
-
if (response.status === 101) return response
|
|
55
|
-
const raw = rawBodyOf(response)
|
|
56
|
-
const headers = new Headers(response.headers as HeadersInit)
|
|
57
|
-
if (raw !== null) {
|
|
58
|
-
if (!headers.has("content-length")) {
|
|
59
|
-
const length = typeof raw === "string" ? new TextEncoder().encode(raw).byteLength : raw.byteLength
|
|
60
|
-
headers.set("content-length", String(length))
|
|
61
|
-
}
|
|
62
|
-
} else {
|
|
63
|
-
const body = response.body
|
|
64
|
-
if (body !== null && !body.locked) body.cancel().catch(noop)
|
|
65
|
-
}
|
|
66
|
-
return replaceResponse(response, { body: null, headers })
|
|
67
|
-
}
|
package/src/body-limit.ts
DELETED
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import { namedMiddleware } from "./middleware.ts"
|
|
2
|
-
import { HoneyError } from "./error.ts"
|
|
3
|
-
import { parseMediaType } from "./media-type.ts"
|
|
4
|
-
import type { MiddlewareFn } from "./middleware.ts"
|
|
5
|
-
import { EK, SK } from "./types.ts"
|
|
6
|
-
|
|
7
|
-
type BodyLimitOptions = {
|
|
8
|
-
/**
|
|
9
|
-
* Per media-type size limits. A key matches when the request's media type
|
|
10
|
-
* (lowercased, parameters dropped) starts with it, so `"multipart/"` covers
|
|
11
|
-
* every multipart type. The longest matching key wins.
|
|
12
|
-
*/
|
|
13
|
-
limits?: Record<string, number>
|
|
14
|
-
/** Default max body size in bytes — used when no content-type match or no limits map */
|
|
15
|
-
maxSize: number
|
|
16
|
-
/**
|
|
17
|
-
* Skip stream byte-counting when Content-Length header is present and within bounds.
|
|
18
|
-
* HTTP/1.1 and HTTP/2 framing guarantees body cannot exceed declared Content-Length
|
|
19
|
-
* regardless of TLS — the protocol enforces it at the transport level.
|
|
20
|
-
* When false, every request body is wrapped in a counting TransformStream even
|
|
21
|
-
* when Content-Length is present. Chunked requests (no Content-Length) are always
|
|
22
|
-
* stream-counted regardless of this setting.
|
|
23
|
-
* Default: false.
|
|
24
|
-
*/
|
|
25
|
-
trustContentLength?: boolean
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export type { BodyLimitOptions }
|
|
29
|
-
|
|
30
|
-
/* After an overflow the rest of the upload is read and discarded so the client
|
|
31
|
-
* sees the 413 instead of a reset, but only this much: past it the stream is
|
|
32
|
-
* cancelled, so a client cannot hold the connection open with an endless body. */
|
|
33
|
-
const DRAIN_LIMIT = 1_048_576
|
|
34
|
-
|
|
35
|
-
/* the shared parser lowercases and drops parameters; a malformed type matches no key */
|
|
36
|
-
function mediaType(contentType: string | null): string | null {
|
|
37
|
-
return parseMediaType(contentType)?.essence ?? null
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function tooLarge(): HoneyError {
|
|
41
|
-
return new HoneyError({ errorKey: EK.content_too_large, status: SK.content_too_large })
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function bodyLimit(opts: BodyLimitOptions): MiddlewareFn<{ req: Request }, {}> {
|
|
45
|
-
const { limits, maxSize, trustContentLength } = opts
|
|
46
|
-
const limitEntries =
|
|
47
|
-
limits !== undefined
|
|
48
|
-
? Object.entries(limits)
|
|
49
|
-
.map(([key, limit]) => [key.trim().toLowerCase(), limit] as const)
|
|
50
|
-
.sort((a, b) => b[0].length - a[0].length)
|
|
51
|
-
: null
|
|
52
|
-
|
|
53
|
-
const resolveMax = (req: Request): number => {
|
|
54
|
-
if (limitEntries === null) return maxSize
|
|
55
|
-
const type = mediaType(req.headers.get("content-type"))
|
|
56
|
-
if (type === null) return maxSize
|
|
57
|
-
for (const [key, limit] of limitEntries) {
|
|
58
|
-
if (type.startsWith(key)) return limit
|
|
59
|
-
}
|
|
60
|
-
return maxSize
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/* every method: a DELETE or PROPFIND with a body is as large as a POST */
|
|
64
|
-
const mw: MiddlewareFn<{ req: Request }, {}> = (ctx, next) => {
|
|
65
|
-
const req = ctx.req
|
|
66
|
-
const contentLength = req.headers.get("content-length")
|
|
67
|
-
const body = req.body
|
|
68
|
-
if (body === null && contentLength === null) return next()
|
|
69
|
-
|
|
70
|
-
const limit = resolveMax(req)
|
|
71
|
-
|
|
72
|
-
/* fast path: Content-Length header present */
|
|
73
|
-
if (contentLength !== null) {
|
|
74
|
-
const len = Number.parseInt(contentLength, 10)
|
|
75
|
-
if (!Number.isNaN(len) && len > limit) throw tooLarge()
|
|
76
|
-
if (trustContentLength === true) return next()
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/* slow path: stream-count when no Content-Length (chunked) or trustContentLength disabled.
|
|
80
|
-
* On overflow, error the downstream consumer then drain (do not cancel) the upstream —
|
|
81
|
-
* cancelling an undici FormData body mid-encode enqueues into a closed stream on Node 24. */
|
|
82
|
-
if (body === null) return next()
|
|
83
|
-
|
|
84
|
-
let totalBytes = 0
|
|
85
|
-
let overflowed = false
|
|
86
|
-
const reader = body.getReader()
|
|
87
|
-
|
|
88
|
-
const drainUpstream = (): void => {
|
|
89
|
-
void (async () => {
|
|
90
|
-
let drained = 0
|
|
91
|
-
try {
|
|
92
|
-
while (true) {
|
|
93
|
-
const r = await reader.read()
|
|
94
|
-
if (r.done) break
|
|
95
|
-
drained += r.value.byteLength
|
|
96
|
-
if (drained > DRAIN_LIMIT) {
|
|
97
|
-
await reader.cancel()
|
|
98
|
-
break
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
} catch {
|
|
102
|
-
/* producer may already be done */
|
|
103
|
-
}
|
|
104
|
-
})()
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const limited = new ReadableStream<Uint8Array>({
|
|
108
|
-
cancel() {
|
|
109
|
-
/* consumer aborted — still drain so undici FormData encoders can finish */
|
|
110
|
-
drainUpstream()
|
|
111
|
-
},
|
|
112
|
-
async pull(controller) {
|
|
113
|
-
if (overflowed) return
|
|
114
|
-
let result: ReadableStreamReadResult<Uint8Array>
|
|
115
|
-
try {
|
|
116
|
-
result = await reader.read()
|
|
117
|
-
} catch (err) {
|
|
118
|
-
controller.error(err)
|
|
119
|
-
return
|
|
120
|
-
}
|
|
121
|
-
if (result.done) {
|
|
122
|
-
controller.close()
|
|
123
|
-
return
|
|
124
|
-
}
|
|
125
|
-
totalBytes += result.value.byteLength
|
|
126
|
-
if (totalBytes > limit) {
|
|
127
|
-
overflowed = true
|
|
128
|
-
controller.error(tooLarge())
|
|
129
|
-
drainUpstream()
|
|
130
|
-
return
|
|
131
|
-
}
|
|
132
|
-
controller.enqueue(result.value)
|
|
133
|
-
},
|
|
134
|
-
})
|
|
135
|
-
|
|
136
|
-
const replaceBody = (req as unknown as Record<symbol, unknown>)[Symbol.for("honey.replaceBody")]
|
|
137
|
-
if (typeof replaceBody === "function") {
|
|
138
|
-
;(replaceBody as (stream: ReadableStream<Uint8Array>) => void).call(req, limited)
|
|
139
|
-
} else {
|
|
140
|
-
/* duplex: "half" required by Node/undici when body is a ReadableStream */
|
|
141
|
-
const newReq = new Request(req, {
|
|
142
|
-
body: limited,
|
|
143
|
-
duplex: "half",
|
|
144
|
-
} as RequestInit)
|
|
145
|
-
Object.defineProperty(ctx, "req", { configurable: true, value: newReq })
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
return next()
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return namedMiddleware("bodyLimit", mw)
|
|
152
|
-
}
|
package/src/build/index.ts
DELETED
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs"
|
|
2
|
-
import { builtinModules } from "node:module"
|
|
3
|
-
import { extname, resolve } from "node:path"
|
|
4
|
-
import { detectFeaturesInSource, FEATURES, featurePrelude, type HoneyFeature, scanProgram } from "../feature-detect.ts"
|
|
5
|
-
|
|
6
|
-
/* ---- Public types ---- */
|
|
7
|
-
|
|
8
|
-
export type HoneyBuildConfig = {
|
|
9
|
-
external?: string[]
|
|
10
|
-
/**
|
|
11
|
-
* Force optional features on or off. Unset features are detected by scanning the app's
|
|
12
|
-
* import graph for `.openapi()` / `.manifest()`, `.errorI18n()` and `.serve()` calls.
|
|
13
|
-
*/
|
|
14
|
-
features?: Partial<Record<HoneyFeature, boolean>>
|
|
15
|
-
minify?: boolean
|
|
16
|
-
outDir?: string
|
|
17
|
-
port?: number
|
|
18
|
-
target: "bun" | "cloudflare" | "deno" | "node"
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/* ---- Internal types ---- */
|
|
22
|
-
|
|
23
|
-
type ResolvedBuildConfig = {
|
|
24
|
-
entry: string
|
|
25
|
-
export: string
|
|
26
|
-
port: number
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
type BuildAdapterDef = {
|
|
30
|
-
entry(config: ResolvedBuildConfig): string
|
|
31
|
-
/** Bundle every dependency. Workers have no node_modules at run time. */
|
|
32
|
-
noExternal: boolean
|
|
33
|
-
/** Features the target can never use. */
|
|
34
|
-
skipFeatures: HoneyFeature[]
|
|
35
|
-
ssrTarget: "node" | "webworker"
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/* ---- Entry helpers ---- */
|
|
39
|
-
|
|
40
|
-
function importApp(entry: string, exportName: string): string {
|
|
41
|
-
if (exportName === "default") return `import app from "./${entry}"`
|
|
42
|
-
return `import { ${exportName} as app } from "./${entry}"`
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/* server targets start through the same code path as `app.serve()`: WS adapter, env, hostname */
|
|
46
|
-
function serverEntry(config: ResolvedBuildConfig, runtime: "bun" | "deno" | "node", env: string, port: string): string {
|
|
47
|
-
return [
|
|
48
|
-
'import { startHoneyServer } from "@lovrozagar/honey/serve"',
|
|
49
|
-
importApp(config.entry, config.export),
|
|
50
|
-
"",
|
|
51
|
-
`const port = Number(${port})`,
|
|
52
|
-
`await startHoneyServer(app, { env: ${env}, hostname: "0.0.0.0", port, runtime: "${runtime}" })`,
|
|
53
|
-
].join("\n")
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/* ---- Adapter definitions ---- */
|
|
57
|
-
|
|
58
|
-
const adapters: Record<HoneyBuildConfig["target"], BuildAdapterDef> = {
|
|
59
|
-
bun: {
|
|
60
|
-
entry: (config) => serverEntry(config, "bun", "process.env", `process.env.PORT ?? ${config.port}`),
|
|
61
|
-
noExternal: false,
|
|
62
|
-
skipFeatures: [],
|
|
63
|
-
ssrTarget: "node",
|
|
64
|
-
},
|
|
65
|
-
cloudflare: {
|
|
66
|
-
entry(config) {
|
|
67
|
-
return [
|
|
68
|
-
importApp(config.entry, config.export),
|
|
69
|
-
"",
|
|
70
|
-
"export default {",
|
|
71
|
-
" fetch: (req, env, ctx) => app.fetch(req, env, ctx),",
|
|
72
|
-
"}",
|
|
73
|
-
].join("\n")
|
|
74
|
-
},
|
|
75
|
-
noExternal: true,
|
|
76
|
-
/* a Worker cannot listen; serve would pull node:http into the bundle */
|
|
77
|
-
skipFeatures: ["serve"],
|
|
78
|
-
ssrTarget: "webworker",
|
|
79
|
-
},
|
|
80
|
-
deno: {
|
|
81
|
-
entry: (config) => serverEntry(config, "deno", "Deno.env.toObject()", `Deno.env.get("PORT") ?? "${config.port}"`),
|
|
82
|
-
noExternal: true,
|
|
83
|
-
skipFeatures: [],
|
|
84
|
-
ssrTarget: "webworker",
|
|
85
|
-
},
|
|
86
|
-
node: {
|
|
87
|
-
entry: (config) => serverEntry(config, "node", "process.env", `process.env.PORT ?? ${config.port}`),
|
|
88
|
-
noExternal: false,
|
|
89
|
-
skipFeatures: [],
|
|
90
|
-
ssrTarget: "node",
|
|
91
|
-
},
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/* ---- Feature detection over the import graph ---- */
|
|
95
|
-
|
|
96
|
-
const SCANNED_EXT = /\.(?:[cm]?[jt]sx?)$/
|
|
97
|
-
|
|
98
|
-
type ParseContext = {
|
|
99
|
-
parse?: (code: string, options?: { lang?: "js" | "jsx" | "ts" | "tsx" }) => unknown
|
|
100
|
-
resolve?: (source: string, importer?: string) => Promise<{ external?: unknown; id: string } | null>
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function langOf(file: string): "js" | "jsx" | "ts" | "tsx" {
|
|
104
|
-
const ext = extname(file)
|
|
105
|
-
if (ext === ".tsx") return "tsx"
|
|
106
|
-
if (ext === ".jsx") return "jsx"
|
|
107
|
-
return /^\.[cm]?ts$/.test(ext) ? "ts" : "js"
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Walks the app's own modules (never node_modules) from `entry`, following static and dynamic
|
|
112
|
-
* imports, and collects feature calls. Comments and strings do not count.
|
|
113
|
-
*/
|
|
114
|
-
async function detectGraphFeatures(ctx: ParseContext, entry: string): Promise<Set<HoneyFeature>> {
|
|
115
|
-
const features = new Set<HoneyFeature>()
|
|
116
|
-
const seen = new Set<string>()
|
|
117
|
-
const queue = [entry]
|
|
118
|
-
while (queue.length > 0) {
|
|
119
|
-
const file = queue.pop() as string
|
|
120
|
-
if (seen.has(file)) continue
|
|
121
|
-
seen.add(file)
|
|
122
|
-
if (!SCANNED_EXT.test(file) || file.includes("node_modules") || !existsSync(file)) continue
|
|
123
|
-
const code = readFileSync(file, "utf-8")
|
|
124
|
-
|
|
125
|
-
let imports: string[] = []
|
|
126
|
-
let program: unknown
|
|
127
|
-
try {
|
|
128
|
-
program = ctx.parse?.(code, { lang: langOf(file) })
|
|
129
|
-
} catch {
|
|
130
|
-
program = undefined
|
|
131
|
-
}
|
|
132
|
-
if (program) {
|
|
133
|
-
const scanned = scanProgram(program)
|
|
134
|
-
for (const f of scanned.features) features.add(f)
|
|
135
|
-
imports = scanned.imports
|
|
136
|
-
} else {
|
|
137
|
-
for (const f of detectFeaturesInSource(code)) features.add(f)
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if (!ctx.resolve) continue
|
|
141
|
-
for (const source of imports) {
|
|
142
|
-
const resolved = await ctx.resolve(source, file).catch(() => null)
|
|
143
|
-
if (!resolved || resolved.external || resolved.id.startsWith("\0")) continue
|
|
144
|
-
queue.push(resolved.id.split("?")[0] as string)
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
return features
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/* ---- Virtual module constants ---- */
|
|
151
|
-
|
|
152
|
-
const VIRTUAL_BUILD_ENTRY = "virtual:honey-build-entry"
|
|
153
|
-
const RESOLVED_BUILD_ENTRY = `\0${VIRTUAL_BUILD_ENTRY}`
|
|
154
|
-
|
|
155
|
-
/* ---- Build plugin factory ---- */
|
|
156
|
-
|
|
157
|
-
export function createBuildPlugin(buildConfig: HoneyBuildConfig, shared: { entry: string; export: string }) {
|
|
158
|
-
const adapter = adapters[buildConfig.target]
|
|
159
|
-
const resolvedConfig: ResolvedBuildConfig = {
|
|
160
|
-
entry: shared.entry,
|
|
161
|
-
export: shared.export,
|
|
162
|
-
port: buildConfig.port ?? 3000,
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
let root = ""
|
|
166
|
-
|
|
167
|
-
return {
|
|
168
|
-
apply: "build" as const,
|
|
169
|
-
|
|
170
|
-
config() {
|
|
171
|
-
return {
|
|
172
|
-
build: {
|
|
173
|
-
emptyOutDir: false,
|
|
174
|
-
minify: buildConfig.minify ?? true,
|
|
175
|
-
outDir: buildConfig.outDir ?? "./dist",
|
|
176
|
-
rolldownOptions: {
|
|
177
|
-
external: [...builtinModules, ...builtinModules.map((m) => `node:${m}`), ...(buildConfig.external ?? [])],
|
|
178
|
-
input: VIRTUAL_BUILD_ENTRY,
|
|
179
|
-
output: { entryFileNames: "index.js" },
|
|
180
|
-
},
|
|
181
|
-
ssr: true,
|
|
182
|
-
},
|
|
183
|
-
ssr: {
|
|
184
|
-
/* node and bun install dependencies next to the bundle; inlining them would also inline native addons */
|
|
185
|
-
...(adapter.noExternal ? { noExternal: true } : {}),
|
|
186
|
-
target: adapter.ssrTarget,
|
|
187
|
-
},
|
|
188
|
-
}
|
|
189
|
-
},
|
|
190
|
-
|
|
191
|
-
configResolved(cfg: { root: string }) {
|
|
192
|
-
root = cfg.root
|
|
193
|
-
},
|
|
194
|
-
|
|
195
|
-
async load(this: ParseContext | undefined, id: string): Promise<{ code: string; moduleType: string } | undefined> {
|
|
196
|
-
if (id !== RESOLVED_BUILD_ENTRY) return undefined
|
|
197
|
-
const appPath = resolve(root || ".", shared.entry)
|
|
198
|
-
const detected = await detectGraphFeatures(this ?? {}, appPath)
|
|
199
|
-
const features = FEATURES.filter((feature) => {
|
|
200
|
-
if (adapter.skipFeatures.includes(feature)) return false
|
|
201
|
-
return buildConfig.features?.[feature] ?? detected.has(feature)
|
|
202
|
-
})
|
|
203
|
-
const prelude = featurePrelude(features)
|
|
204
|
-
return {
|
|
205
|
-
code: `${prelude ? `${prelude}\n` : ""}${adapter.entry(resolvedConfig)}`,
|
|
206
|
-
moduleType: "js",
|
|
207
|
-
}
|
|
208
|
-
},
|
|
209
|
-
|
|
210
|
-
name: "honey:build",
|
|
211
|
-
|
|
212
|
-
resolveId(id: string): string | undefined {
|
|
213
|
-
if (id === VIRTUAL_BUILD_ENTRY) return RESOLVED_BUILD_ENTRY
|
|
214
|
-
return undefined
|
|
215
|
-
},
|
|
216
|
-
}
|
|
217
|
-
}
|
package/src/cli-args.ts
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
/** Argument parsing for the `honey` CLI. Not a package export. */
|
|
2
|
-
|
|
3
|
-
export const USAGE = `Usage: honey generate [options]
|
|
4
|
-
honey init [--cf] [--force]
|
|
5
|
-
|
|
6
|
-
generate options:
|
|
7
|
-
--config <path> Vite config holding honey() (default: vite.config.{ts,mts,js,mjs,…})
|
|
8
|
-
--plugin <n> Which honey() plugin in the config, 0-based (when there are several)
|
|
9
|
-
--app <path> App entry; overrides the config's app, or replaces the config
|
|
10
|
-
--watch Regenerate when files next to the app change
|
|
11
|
-
--tree --types --manifest --sdk
|
|
12
|
-
Turn on an output
|
|
13
|
-
--merge-tree <path> Route tree source for a gateway
|
|
14
|
-
--cli --cli-out <dir> --cli-binary-name <name> [--cli-config-name <name>]
|
|
15
|
-
[--cli-default-base-url <url>] [--cli-env-prefix <prefix>] [--cli-module-path <path>]
|
|
16
|
-
[--cli-sdk-module-path <path>]
|
|
17
|
-
Generate the Go CLI
|
|
18
|
-
-h, --help Show this help`
|
|
19
|
-
|
|
20
|
-
export class UsageError extends Error {}
|
|
21
|
-
|
|
22
|
-
export type CliFlags = {
|
|
23
|
-
app?: string
|
|
24
|
-
cli?: boolean
|
|
25
|
-
cliBinaryName?: string
|
|
26
|
-
cliConfigName?: string
|
|
27
|
-
cliDefaultBaseUrl?: string
|
|
28
|
-
cliEnvPrefix?: string
|
|
29
|
-
cliModulePath?: string
|
|
30
|
-
cliOut?: string
|
|
31
|
-
cliSdkModulePath?: string
|
|
32
|
-
config?: string
|
|
33
|
-
help?: boolean
|
|
34
|
-
manifest?: boolean
|
|
35
|
-
mergeTree?: string
|
|
36
|
-
plugin?: number
|
|
37
|
-
sdk?: boolean
|
|
38
|
-
tree?: boolean
|
|
39
|
-
types?: boolean
|
|
40
|
-
watch?: boolean
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const BOOLEAN_FLAGS: Record<string, keyof CliFlags> = {
|
|
44
|
-
cli: "cli",
|
|
45
|
-
help: "help",
|
|
46
|
-
manifest: "manifest",
|
|
47
|
-
sdk: "sdk",
|
|
48
|
-
tree: "tree",
|
|
49
|
-
types: "types",
|
|
50
|
-
watch: "watch",
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const VALUE_FLAGS: Record<string, keyof CliFlags> = {
|
|
54
|
-
app: "app",
|
|
55
|
-
"cli-binary-name": "cliBinaryName",
|
|
56
|
-
"cli-config-name": "cliConfigName",
|
|
57
|
-
"cli-default-base-url": "cliDefaultBaseUrl",
|
|
58
|
-
"cli-env-prefix": "cliEnvPrefix",
|
|
59
|
-
"cli-module-path": "cliModulePath",
|
|
60
|
-
"cli-out": "cliOut",
|
|
61
|
-
"cli-sdk-module-path": "cliSdkModulePath",
|
|
62
|
-
config: "config",
|
|
63
|
-
"merge-tree": "mergeTree",
|
|
64
|
-
plugin: "plugin",
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/** Strict: unknown flags, stray positionals and missing values are errors. Accepts `--k v` and `--k=v`. */
|
|
68
|
-
export function parseGenerateArgs(args: string[]): CliFlags {
|
|
69
|
-
const flags: Record<string, unknown> = {}
|
|
70
|
-
for (let i = 0; i < args.length; i++) {
|
|
71
|
-
const arg = args[i] as string
|
|
72
|
-
if (arg === "-h") {
|
|
73
|
-
flags.help = true
|
|
74
|
-
continue
|
|
75
|
-
}
|
|
76
|
-
if (!arg.startsWith("--") || arg === "--") throw new UsageError(`unexpected argument: ${arg}`)
|
|
77
|
-
const eq = arg.indexOf("=")
|
|
78
|
-
const name = eq === -1 ? arg.slice(2) : arg.slice(2, eq)
|
|
79
|
-
const inline = eq === -1 ? undefined : arg.slice(eq + 1)
|
|
80
|
-
|
|
81
|
-
const bool = BOOLEAN_FLAGS[name]
|
|
82
|
-
if (bool) {
|
|
83
|
-
if (inline === undefined || inline === "true") flags[bool] = true
|
|
84
|
-
else if (inline === "false") flags[bool] = false
|
|
85
|
-
else throw new UsageError(`--${name} takes no value (got "${inline}")`)
|
|
86
|
-
continue
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
const key = VALUE_FLAGS[name]
|
|
90
|
-
if (!key) throw new UsageError(`unknown option: --${name}`)
|
|
91
|
-
let value = inline
|
|
92
|
-
if (value === undefined) {
|
|
93
|
-
const next = args[i + 1]
|
|
94
|
-
if (next === undefined || next.startsWith("--")) throw new UsageError(`--${name} requires a value`)
|
|
95
|
-
value = next
|
|
96
|
-
i++
|
|
97
|
-
}
|
|
98
|
-
if (value === "") throw new UsageError(`--${name} requires a value`)
|
|
99
|
-
if (key === "plugin") {
|
|
100
|
-
if (!/^\d+$/.test(value)) throw new UsageError(`--plugin takes a non-negative integer (got "${value}")`)
|
|
101
|
-
flags.plugin = Number(value)
|
|
102
|
-
} else {
|
|
103
|
-
flags[key] = value
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return flags as CliFlags
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/** `honey init` flags. `--cloudflare` is an alias of `--cf`. */
|
|
110
|
-
export type InitFlags = {
|
|
111
|
-
cf: boolean
|
|
112
|
-
force: boolean
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export function parseInitFlags(args: string[]): InitFlags {
|
|
116
|
-
const flags: InitFlags = { cf: false, force: false }
|
|
117
|
-
for (const arg of args) {
|
|
118
|
-
if (arg === "--cf" || arg === "--cloudflare") flags.cf = true
|
|
119
|
-
else if (arg === "--force") flags.force = true
|
|
120
|
-
else throw new UsageError(arg.startsWith("-") ? `unknown option: ${arg}` : `unexpected argument: ${arg}`)
|
|
121
|
-
}
|
|
122
|
-
return flags
|
|
123
|
-
}
|