@lovrozagar/honey 0.6.8 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +514 -192
- package/bin/honey.js +25 -0
- package/dist/accepts.d.ts +7 -1
- package/dist/accepts.d.ts.map +1 -1
- package/dist/accepts.js +126 -0
- package/dist/accepts.js.map +1 -0
- package/dist/body-kind.d.ts +26 -0
- package/dist/body-kind.d.ts.map +1 -0
- package/dist/body-kind.js +70 -0
- package/dist/body-kind.js.map +1 -0
- package/dist/body-limit.d.ts +5 -1
- package/dist/body-limit.d.ts.map +1 -1
- package/dist/body-limit.js +126 -0
- package/dist/body-limit.js.map +1 -0
- package/dist/build/index.d.ts +19 -3
- package/dist/build/index.d.ts.map +1 -1
- package/dist/build/index.js +173 -0
- package/dist/build/index.js.map +1 -0
- package/dist/cli-args.d.ts +33 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +102 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-go/auth.go +26 -0
- package/dist/cli-go/config.go +192 -0
- package/dist/cli-go/errors.go +75 -0
- package/dist/cli-go/multipart.go +79 -0
- package/dist/cli-go/output.go +163 -0
- package/dist/cli-go/root.go +30 -0
- package/dist/cli-go/stream.go +88 -0
- package/dist/cli-go/version.go +5 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +209 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/defaults.js +48 -0
- package/dist/client/defaults.js.map +1 -0
- package/dist/client/error.d.ts +35 -0
- package/dist/client/error.d.ts.map +1 -1
- package/dist/client/error.js +71 -0
- package/dist/client/error.js.map +1 -0
- package/dist/client/http.d.ts +67 -8
- package/dist/client/http.d.ts.map +1 -1
- package/dist/client/http.js +571 -0
- package/dist/client/http.js.map +1 -0
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +95 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/path.d.ts +26 -0
- package/dist/client/path.d.ts.map +1 -0
- package/dist/client/path.js +163 -0
- package/dist/client/path.js.map +1 -0
- package/dist/client/redirect-policy.d.ts +12 -0
- package/dist/client/redirect-policy.d.ts.map +1 -0
- package/dist/client/redirect-policy.js +20 -0
- package/dist/client/redirect-policy.js.map +1 -0
- package/dist/client/sdk.d.ts +36 -0
- package/dist/client/sdk.d.ts.map +1 -1
- package/dist/client/sdk.js +292 -0
- package/dist/client/sdk.js.map +1 -0
- package/dist/client/sse.d.ts +13 -0
- package/dist/client/sse.d.ts.map +1 -1
- package/dist/client/sse.js +129 -0
- package/dist/client/sse.js.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/ws.d.ts +9 -2
- package/dist/client/ws.d.ts.map +1 -1
- package/dist/client/ws.js +112 -0
- package/dist/client/ws.js.map +1 -0
- package/dist/client-go/errors.go +236 -0
- package/dist/client-go/export.go +44 -0
- package/dist/client-go/invalidation.go +371 -0
- package/dist/client-go/nullable.go +62 -0
- package/dist/client-go/realtime.go +354 -0
- package/dist/client-go/result.go +20 -0
- package/dist/client-go/runtime.go +975 -0
- package/dist/client-go/sse.go +159 -0
- package/dist/client-go/transport.go +495 -0
- package/dist/client-go/ws.go +128 -0
- package/dist/client-info.d.ts +36 -0
- package/dist/client-info.d.ts.map +1 -0
- package/dist/client-info.js +53 -0
- package/dist/client-info.js.map +1 -0
- package/dist/client-mcp/README.md +10 -0
- package/dist/client-mcp/server.ts +221 -0
- package/dist/client-mcp/types.ts +19 -0
- package/dist/client-python/_errors.py +115 -0
- package/dist/client-python/_invalidation.py +494 -0
- package/dist/client-python/_realtime.py +179 -0
- package/dist/client-python/_runtime.py +860 -0
- package/dist/client-python/_sse.py +155 -0
- package/dist/client-python/_transport.py +366 -0
- package/dist/client-python/_ws.py +159 -0
- package/dist/client-python/py.typed +0 -0
- package/dist/client-rust/errors.rs +220 -0
- package/dist/client-rust/invalidation.rs +412 -0
- package/dist/client-rust/invalidation_sync.rs +93 -0
- package/dist/client-rust/nullable.rs +17 -0
- package/dist/client-rust/realtime.rs +702 -0
- package/dist/client-rust/result.rs +22 -0
- package/dist/client-rust/runtime.rs +980 -0
- package/dist/client-rust/runtime_sync.rs +484 -0
- package/dist/client-rust/sse.rs +188 -0
- package/dist/client-rust/ws.rs +167 -0
- package/dist/codegen-go-cli.d.ts.map +1 -1
- package/dist/codegen-go-cli.js +964 -0
- package/dist/codegen-go-cli.js.map +1 -0
- package/dist/codegen-go.d.ts +15 -3
- package/dist/codegen-go.d.ts.map +1 -1
- package/dist/codegen-go.js +872 -0
- package/dist/codegen-go.js.map +1 -0
- package/dist/codegen-hash.js +9 -0
- package/dist/codegen-hash.js.map +1 -0
- package/dist/codegen-ir.d.ts +69 -2
- package/dist/codegen-ir.d.ts.map +1 -1
- package/dist/codegen-ir.js +661 -0
- package/dist/codegen-ir.js.map +1 -0
- package/dist/codegen-lang.d.ts +65 -0
- package/dist/codegen-lang.d.ts.map +1 -0
- package/dist/codegen-lang.js +526 -0
- package/dist/codegen-lang.js.map +1 -0
- package/dist/codegen-load.d.ts +31 -0
- package/dist/codegen-load.d.ts.map +1 -0
- package/dist/codegen-load.js +138 -0
- package/dist/codegen-load.js.map +1 -0
- package/dist/codegen-loaders.js +55 -0
- package/dist/codegen-loaders.js.map +1 -0
- package/dist/codegen-mcp.d.ts.map +1 -1
- package/dist/codegen-mcp.js +368 -0
- package/dist/codegen-mcp.js.map +1 -0
- package/dist/codegen-python.d.ts +13 -1
- package/dist/codegen-python.d.ts.map +1 -1
- package/dist/codegen-python.js +828 -0
- package/dist/codegen-python.js.map +1 -0
- package/dist/codegen-route-tree-intern.d.ts +15 -5
- package/dist/codegen-route-tree-intern.d.ts.map +1 -1
- package/dist/codegen-route-tree-intern.js +221 -0
- package/dist/codegen-route-tree-intern.js.map +1 -0
- package/dist/codegen-rust.d.ts.map +1 -1
- package/dist/codegen-rust.js +1293 -0
- package/dist/codegen-rust.js.map +1 -0
- package/dist/codegen-sanitize.d.ts.map +1 -1
- package/dist/codegen-sanitize.js +56 -0
- package/dist/codegen-sanitize.js.map +1 -0
- package/dist/codegen-schema-naming.d.ts +5 -0
- package/dist/codegen-schema-naming.d.ts.map +1 -1
- package/dist/codegen-schema-naming.js +150 -0
- package/dist/codegen-schema-naming.js.map +1 -0
- package/dist/codegen-sdk-model.d.ts +71 -0
- package/dist/codegen-sdk-model.d.ts.map +1 -0
- package/dist/codegen-sdk-model.js +179 -0
- package/dist/codegen-sdk-model.js.map +1 -0
- package/dist/codegen.d.ts +41 -23
- package/dist/codegen.d.ts.map +1 -1
- package/dist/codegen.js +4610 -0
- package/dist/codegen.js.map +1 -0
- package/dist/context.d.ts +36 -6
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +242 -0
- package/dist/context.js.map +1 -0
- package/dist/cookie-sign.d.ts +16 -2
- package/dist/cookie-sign.d.ts.map +1 -1
- package/dist/cookie-sign.js +104 -0
- package/dist/cookie-sign.js.map +1 -0
- package/dist/cookie.d.ts +12 -0
- package/dist/cookie.d.ts.map +1 -1
- package/dist/cookie.js +138 -0
- package/dist/cookie.js.map +1 -0
- package/dist/cors.d.ts +1 -0
- package/dist/cors.d.ts.map +1 -1
- package/dist/cors.js +87 -0
- package/dist/cors.js.map +1 -0
- package/dist/crypto.d.ts +6 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +38 -0
- package/dist/crypto.js.map +1 -0
- package/dist/csrf.d.ts +19 -0
- package/dist/csrf.d.ts.map +1 -1
- package/dist/csrf.js +79 -0
- package/dist/csrf.js.map +1 -0
- package/dist/curl-logger.d.ts +14 -3
- package/dist/curl-logger.d.ts.map +1 -1
- package/dist/curl-logger.js +199 -0
- package/dist/curl-logger.js.map +1 -0
- package/dist/detect-runtime.js +13 -0
- package/dist/detect-runtime.js.map +1 -0
- package/dist/dict.d.ts +11 -0
- package/dist/dict.d.ts.map +1 -0
- package/dist/dict.js +13 -0
- package/dist/dict.js.map +1 -0
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +44 -0
- package/dist/error.js.map +1 -0
- package/dist/errors.js +39 -0
- package/dist/errors.js.map +1 -0
- package/dist/etag.d.ts +2 -0
- package/dist/etag.d.ts.map +1 -1
- package/dist/etag.js +82 -0
- package/dist/etag.js.map +1 -0
- package/dist/feature-detect.d.ts +25 -0
- package/dist/feature-detect.d.ts.map +1 -0
- package/dist/feature-detect.js +144 -0
- package/dist/feature-detect.js.map +1 -0
- package/dist/feature-load.js +36 -0
- package/dist/feature-load.js.map +1 -0
- package/dist/feature-slots.d.ts +44 -0
- package/dist/feature-slots.d.ts.map +1 -0
- package/dist/feature-slots.js +48 -0
- package/dist/feature-slots.js.map +1 -0
- package/dist/fetch-request.d.ts +10 -0
- package/dist/fetch-request.d.ts.map +1 -0
- package/dist/fetch-request.js +13 -0
- package/dist/fetch-request.js.map +1 -0
- package/dist/gen-process.d.ts +15 -0
- package/dist/gen-process.d.ts.map +1 -0
- package/dist/gen-process.js +43 -0
- package/dist/gen-process.js.map +1 -0
- package/dist/gen-write.d.ts +19 -0
- package/dist/gen-write.d.ts.map +1 -0
- package/dist/gen-write.js +120 -0
- package/dist/gen-write.js.map +1 -0
- package/dist/glob.d.ts +21 -0
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +115 -0
- package/dist/glob.js.map +1 -0
- package/dist/go-type-emitter.d.ts +18 -4
- package/dist/go-type-emitter.d.ts.map +1 -1
- package/dist/go-type-emitter.js +594 -0
- package/dist/go-type-emitter.js.map +1 -0
- package/dist/honey-response.d.ts.map +1 -1
- package/dist/honey-response.js +338 -0
- package/dist/honey-response.js.map +1 -0
- package/dist/i18n-slot.d.ts +8 -0
- package/dist/i18n-slot.d.ts.map +1 -1
- package/dist/i18n-slot.js +14 -0
- package/dist/i18n-slot.js.map +1 -0
- package/dist/i18n.d.ts +3 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +250 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +408 -148
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2324 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +3 -5
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +140 -0
- package/dist/init.js.map +1 -0
- package/dist/input.js +4 -0
- package/dist/input.js.map +1 -0
- package/dist/invalidate-check.d.ts +11 -0
- package/dist/invalidate-check.d.ts.map +1 -1
- package/dist/invalidate-check.js +163 -0
- package/dist/invalidate-check.js.map +1 -0
- package/dist/invoke-user.d.ts +35 -0
- package/dist/invoke-user.d.ts.map +1 -0
- package/dist/invoke-user.js +73 -0
- package/dist/invoke-user.js.map +1 -0
- package/dist/ip-restrict.d.ts +13 -1
- package/dist/ip-restrict.d.ts.map +1 -1
- package/dist/ip-restrict.js +60 -0
- package/dist/ip-restrict.js.map +1 -0
- package/dist/ip.d.ts +39 -0
- package/dist/ip.d.ts.map +1 -0
- package/dist/ip.js +209 -0
- package/dist/ip.js.map +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +113 -0
- package/dist/logger.js.map +1 -0
- package/dist/media-type.d.ts +30 -0
- package/dist/media-type.d.ts.map +1 -0
- package/dist/media-type.js +97 -0
- package/dist/media-type.js.map +1 -0
- package/dist/meta-spec-merge.d.ts +32 -0
- package/dist/meta-spec-merge.d.ts.map +1 -0
- package/dist/meta-spec-merge.js +68 -0
- package/dist/meta-spec-merge.js.map +1 -0
- package/dist/meta-spec.d.ts +16 -3
- package/dist/meta-spec.d.ts.map +1 -1
- package/dist/meta-spec.js +535 -0
- package/dist/meta-spec.js.map +1 -0
- package/dist/middleware.d.ts +23 -6
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +253 -0
- package/dist/middleware.js.map +1 -0
- package/dist/node-request.d.ts +57 -12
- package/dist/node-request.d.ts.map +1 -1
- package/dist/node-request.js +407 -0
- package/dist/node-request.js.map +1 -0
- package/dist/node.d.ts +20 -3
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +396 -0
- package/dist/node.js.map +1 -0
- package/dist/openapi/collect.d.ts +6 -3
- package/dist/openapi/collect.d.ts.map +1 -1
- package/dist/openapi/collect.js +30 -0
- package/dist/openapi/collect.js.map +1 -0
- package/dist/openapi/docs-page.d.ts +42 -0
- package/dist/openapi/docs-page.d.ts.map +1 -0
- package/dist/openapi/docs-page.js +80 -0
- package/dist/openapi/docs-page.js.map +1 -0
- package/dist/openapi/document.d.ts +4 -0
- package/dist/openapi/document.d.ts.map +1 -1
- package/dist/openapi/document.js +785 -0
- package/dist/openapi/document.js.map +1 -0
- package/dist/openapi/json-schema-slot.d.ts +7 -0
- package/dist/openapi/json-schema-slot.d.ts.map +1 -1
- package/dist/openapi/json-schema-slot.js +38 -0
- package/dist/openapi/json-schema-slot.js.map +1 -0
- package/dist/openapi/register.d.ts.map +1 -1
- package/dist/openapi/register.js +20 -0
- package/dist/openapi/register.js.map +1 -0
- package/dist/openapi/scalar.d.ts +3 -1
- package/dist/openapi/scalar.d.ts.map +1 -1
- package/dist/openapi/scalar.js +21 -0
- package/dist/openapi/scalar.js.map +1 -0
- package/dist/openapi/serve.d.ts +9 -0
- package/dist/openapi/serve.d.ts.map +1 -0
- package/dist/openapi/serve.js +36 -0
- package/dist/openapi/serve.js.map +1 -0
- package/dist/openapi/spec-factory.d.ts +30 -1
- package/dist/openapi/spec-factory.d.ts.map +1 -1
- package/dist/openapi/spec-factory.js +52 -0
- package/dist/openapi/spec-factory.js.map +1 -0
- package/dist/openapi/spec.d.ts +14 -5
- package/dist/openapi/spec.d.ts.map +1 -1
- package/dist/openapi/spec.js +50 -0
- package/dist/openapi/spec.js.map +1 -0
- package/dist/openapi/swagger.d.ts +3 -1
- package/dist/openapi/swagger.d.ts.map +1 -1
- package/dist/openapi/swagger.js +22 -0
- package/dist/openapi/swagger.js.map +1 -0
- package/dist/pattern.d.ts +71 -0
- package/dist/pattern.d.ts.map +1 -0
- package/dist/pattern.js +239 -0
- package/dist/pattern.js.map +1 -0
- package/dist/peer.d.ts +17 -0
- package/dist/peer.d.ts.map +1 -0
- package/dist/peer.js +50 -0
- package/dist/peer.js.map +1 -0
- package/dist/plugin.d.ts +67 -16
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +649 -0
- package/dist/plugin.js.map +1 -0
- package/dist/powered-by.d.ts.map +1 -1
- package/dist/powered-by.js +11 -0
- package/dist/powered-by.js.map +1 -0
- package/dist/pretty-json.d.ts.map +1 -1
- package/dist/pretty-json.js +47 -0
- package/dist/pretty-json.js.map +1 -0
- package/dist/producer-stream.d.ts +47 -0
- package/dist/producer-stream.d.ts.map +1 -0
- package/dist/producer-stream.js +267 -0
- package/dist/producer-stream.js.map +1 -0
- package/dist/proxy.d.ts +47 -8
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +274 -0
- package/dist/proxy.js.map +1 -0
- package/dist/python-type-emitter.d.ts +14 -1
- package/dist/python-type-emitter.d.ts.map +1 -1
- package/dist/python-type-emitter.js +157 -0
- package/dist/python-type-emitter.js.map +1 -0
- package/dist/realtime/bus.d.ts +17 -1
- package/dist/realtime/bus.d.ts.map +1 -1
- package/dist/realtime/bus.js +112 -0
- package/dist/realtime/bus.js.map +1 -0
- package/dist/realtime/register.d.ts +3 -0
- package/dist/realtime/register.d.ts.map +1 -0
- package/dist/realtime/register.js +10 -0
- package/dist/realtime/register.js.map +1 -0
- package/dist/realtime/route.d.ts +65 -26
- package/dist/realtime/route.d.ts.map +1 -1
- package/dist/realtime/route.js +72 -0
- package/dist/realtime/route.js.map +1 -0
- package/dist/realtime/server.d.ts +43 -0
- package/dist/realtime/server.d.ts.map +1 -0
- package/dist/realtime/server.js +255 -0
- package/dist/realtime/server.js.map +1 -0
- package/dist/request-id.d.ts +7 -0
- package/dist/request-id.d.ts.map +1 -1
- package/dist/request-id.js +16 -0
- package/dist/request-id.js.map +1 -0
- package/dist/request-limits.d.ts +3 -0
- package/dist/request-limits.d.ts.map +1 -0
- package/dist/request-limits.js +3 -0
- package/dist/request-limits.js.map +1 -0
- package/dist/request-path.d.ts +33 -0
- package/dist/request-path.d.ts.map +1 -0
- package/dist/request-path.js +178 -0
- package/dist/request-path.js.map +1 -0
- package/dist/request-to-curl.d.ts +7 -1
- package/dist/request-to-curl.d.ts.map +1 -1
- package/dist/request-to-curl.js +48 -0
- package/dist/request-to-curl.js.map +1 -0
- package/dist/response.d.ts +25 -2
- package/dist/response.d.ts.map +1 -1
- package/dist/response.js +313 -0
- package/dist/response.js.map +1 -0
- package/dist/rust-type-emitter.d.ts +14 -2
- package/dist/rust-type-emitter.d.ts.map +1 -1
- package/dist/rust-type-emitter.js +463 -0
- package/dist/rust-type-emitter.js.map +1 -0
- package/dist/secure-headers.d.ts.map +1 -1
- package/dist/secure-headers.js +53 -0
- package/dist/secure-headers.js.map +1 -0
- package/dist/serve-register.d.ts +4 -0
- package/dist/serve-register.d.ts.map +1 -1
- package/dist/serve-register.js +9 -0
- package/dist/serve-register.js.map +1 -0
- package/dist/serve-slot.d.ts +3 -0
- package/dist/serve-slot.d.ts.map +1 -1
- package/dist/serve-slot.js +52 -0
- package/dist/serve-slot.js.map +1 -0
- package/dist/serve.d.ts +18 -1
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +157 -0
- package/dist/serve.js.map +1 -0
- package/dist/server-timing.d.ts.map +1 -1
- package/dist/server-timing.js +51 -0
- package/dist/server-timing.js.map +1 -0
- package/dist/static.d.ts +9 -0
- package/dist/static.d.ts.map +1 -1
- package/dist/static.js +102 -0
- package/dist/static.js.map +1 -0
- package/dist/telemetry/otel.d.ts +2 -0
- package/dist/telemetry/otel.d.ts.map +1 -1
- package/dist/telemetry/otel.js +135 -0
- package/dist/telemetry/otel.js.map +1 -0
- package/dist/testing.d.ts +12 -0
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +124 -0
- package/dist/testing.js.map +1 -0
- package/dist/timeout.d.ts +6 -0
- package/dist/timeout.d.ts.map +1 -1
- package/dist/timeout.js +36 -0
- package/dist/timeout.js.map +1 -0
- package/dist/tree.d.ts +133 -36
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +437 -0
- package/dist/tree.js.map +1 -0
- package/dist/trust.d.ts +21 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +100 -0
- package/dist/trust.js.map +1 -0
- package/dist/ts-type-emitter.d.ts.map +1 -1
- package/dist/ts-type-emitter.js +150 -0
- package/dist/ts-type-emitter.js.map +1 -0
- package/dist/type-emitter.d.ts +16 -2
- package/dist/type-emitter.d.ts.map +1 -1
- package/dist/type-emitter.js +729 -0
- package/dist/type-emitter.js.map +1 -0
- package/dist/type-extractor.d.ts +8 -4
- package/dist/type-extractor.d.ts.map +1 -1
- package/dist/type-extractor.js +819 -0
- package/dist/type-extractor.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +96 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +14 -2
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +335 -0
- package/dist/validation.js.map +1 -0
- package/dist/with-headers.d.ts +15 -0
- package/dist/with-headers.d.ts.map +1 -0
- package/dist/with-headers.js +45 -0
- package/dist/with-headers.js.map +1 -0
- package/dist/ws/bun.d.ts +11 -5
- package/dist/ws/bun.d.ts.map +1 -1
- package/dist/ws/bun.js +82 -0
- package/dist/ws/bun.js.map +1 -0
- package/dist/ws/cloudflare.d.ts +25 -3
- package/dist/ws/cloudflare.d.ts.map +1 -1
- package/dist/ws/cloudflare.js +117 -0
- package/dist/ws/cloudflare.js.map +1 -0
- package/dist/ws/deno.d.ts +4 -4
- package/dist/ws/deno.d.ts.map +1 -1
- package/dist/ws/deno.js +133 -0
- package/dist/ws/deno.js.map +1 -0
- package/dist/ws/node.d.ts +20 -3
- package/dist/ws/node.d.ts.map +1 -1
- package/dist/ws/node.js +173 -0
- package/dist/ws/node.js.map +1 -0
- package/dist/ws/session.d.ts +11 -0
- package/dist/ws/session.d.ts.map +1 -0
- package/dist/ws/session.js +60 -0
- package/dist/ws/session.js.map +1 -0
- package/dist/ws/shared.d.ts +65 -0
- package/dist/ws/shared.d.ts.map +1 -0
- package/dist/ws/shared.js +103 -0
- package/dist/ws/shared.js.map +1 -0
- package/dist/ws-origin.d.ts +20 -0
- package/dist/ws-origin.d.ts.map +1 -0
- package/dist/ws-origin.js +41 -0
- package/dist/ws-origin.js.map +1 -0
- package/dist/yaml.d.ts +15 -1
- package/dist/yaml.d.ts.map +1 -1
- package/dist/yaml.js +101 -0
- package/dist/yaml.js.map +1 -0
- package/docs/invalidate-spec.md +13 -1
- package/docs/meta-spec.md +36 -12
- package/docs/packaging.md +43 -24
- package/docs/regression-matrix/README.md +32 -0
- package/docs/regression-matrix/review.md +44 -0
- package/docs/regression-matrix/ws1-3.md +97 -0
- package/docs/regression-matrix/ws4-8.md +107 -0
- package/docs/regression-matrix/ws9-12.md +266 -0
- package/docs/sdk.md +102 -52
- package/package.json +183 -52
- package/src/accepts.ts +91 -33
- package/src/body-kind.ts +67 -0
- package/src/body-limit.ts +102 -87
- package/src/build/index.ts +104 -54
- package/src/cli-args.ts +123 -0
- package/src/cli-go/auth.go +12 -1
- package/src/cli-go/config.go +29 -2
- package/src/cli-go/errors.go +28 -10
- package/src/cli-go/multipart.go +51 -27
- package/src/cli-go/output.go +58 -4
- package/src/cli-go/root.go +1 -1
- package/src/cli-go/version.go +2 -2
- package/src/cli.ts +154 -148
- package/src/client/error.ts +56 -1
- package/src/client/http.ts +479 -256
- package/src/client/index.ts +55 -17
- package/src/client/path.ts +169 -0
- package/src/client/redirect-policy.ts +19 -0
- package/src/client/sdk.ts +180 -101
- package/src/client/sse.ts +92 -66
- package/src/client/ws.ts +67 -31
- package/src/client-go/errors.go +41 -12
- package/src/client-go/export.go +44 -0
- package/src/client-go/invalidation.go +52 -54
- package/src/client-go/nullable.go +62 -0
- package/src/client-go/realtime.go +147 -110
- package/src/client-go/runtime.go +646 -88
- package/src/client-go/sse.go +104 -94
- package/src/client-go/transport.go +67 -27
- package/src/client-go/ws.go +49 -25
- package/src/client-info.ts +79 -0
- package/src/client-mcp/server.ts +133 -3
- package/src/client-python/_invalidation.py +207 -291
- package/src/client-python/_realtime.py +63 -40
- package/src/client-python/_runtime.py +501 -119
- package/src/client-python/_sse.py +130 -74
- package/src/client-python/_transport.py +37 -9
- package/src/client-python/_ws.py +50 -22
- package/src/client-rust/errors.rs +21 -1
- package/src/client-rust/invalidation.rs +202 -231
- package/src/client-rust/invalidation_sync.rs +16 -229
- package/src/client-rust/nullable.rs +17 -0
- package/src/client-rust/realtime.rs +217 -217
- package/src/client-rust/runtime.rs +602 -177
- package/src/client-rust/runtime_sync.rs +169 -145
- package/src/client-rust/sse.rs +142 -121
- package/src/client-rust/ws.rs +61 -37
- package/src/codegen-go-cli.ts +607 -728
- package/src/codegen-go.ts +710 -770
- package/src/codegen-ir.ts +381 -75
- package/src/codegen-lang.ts +517 -0
- package/src/codegen-load.ts +150 -0
- package/src/codegen-mcp.ts +207 -108
- package/src/codegen-python.ts +684 -816
- package/src/codegen-route-tree-intern.ts +51 -25
- package/src/codegen-rust.ts +946 -1240
- package/src/codegen-sanitize.ts +0 -4
- package/src/codegen-schema-naming.ts +19 -6
- package/src/codegen-sdk-model.ts +228 -0
- package/src/codegen.ts +1488 -1140
- package/src/context.ts +130 -11
- package/src/cookie-sign.ts +85 -16
- package/src/cookie.ts +66 -11
- package/src/cors.ts +55 -54
- package/src/crypto.ts +27 -5
- package/src/csrf.ts +57 -25
- package/src/curl-logger.ts +155 -114
- package/src/dict.ts +12 -0
- package/src/error.ts +4 -2
- package/src/etag.ts +58 -34
- package/src/feature-detect.ts +147 -0
- package/src/feature-slots.ts +70 -0
- package/src/fetch-request.ts +13 -0
- package/src/gen-process.ts +42 -0
- package/src/gen-write.ts +127 -0
- package/src/glob.ts +109 -0
- package/src/go-type-emitter.ts +406 -155
- package/src/honey-response.ts +36 -9
- package/src/i18n-slot.ts +10 -0
- package/src/i18n.ts +98 -23
- package/src/index.ts +1887 -1756
- package/src/init.ts +40 -28
- package/src/invalidate-check.ts +42 -4
- package/src/invoke-user.ts +95 -0
- package/src/ip-restrict.ts +47 -161
- package/src/ip.ts +194 -0
- package/src/logger.ts +65 -36
- package/src/media-type.ts +104 -0
- package/src/meta-spec-merge.ts +80 -0
- package/src/meta-spec.ts +0 -0
- package/src/middleware.ts +112 -12
- package/src/node-request.ts +242 -52
- package/src/node.ts +318 -75
- package/src/openapi/collect.ts +19 -44
- package/src/openapi/docs-page.ts +89 -0
- package/src/openapi/document.ts +503 -224
- package/src/openapi/json-schema-slot.ts +40 -0
- package/src/openapi/register.ts +7 -2
- package/src/openapi/scalar.ts +11 -10
- package/src/openapi/serve.ts +39 -0
- package/src/openapi/spec-factory.ts +50 -1
- package/src/openapi/spec.ts +53 -30
- package/src/openapi/swagger.ts +12 -11
- package/src/pattern.ts +245 -0
- package/src/peer.ts +53 -0
- package/src/plugin.ts +270 -185
- package/src/powered-by.ts +2 -2
- package/src/pretty-json.ts +25 -9
- package/src/producer-stream.ts +296 -0
- package/src/proxy.ts +253 -55
- package/src/python-type-emitter.ts +68 -56
- package/src/realtime/bus.ts +56 -9
- package/src/realtime/register.ts +13 -0
- package/src/realtime/route.ts +129 -80
- package/src/realtime/server.ts +298 -0
- package/src/request-id.ts +13 -3
- package/src/request-limits.ts +2 -0
- package/src/request-path.ts +165 -0
- package/src/request-to-curl.ts +28 -7
- package/src/response.ts +143 -103
- package/src/rust-type-emitter.ts +265 -170
- package/src/secure-headers.ts +8 -4
- package/src/serve-register.ts +4 -0
- package/src/serve-slot.ts +38 -0
- package/src/serve.ts +113 -25
- package/src/server-timing.ts +11 -7
- package/src/static.ts +85 -32
- package/src/telemetry/otel.ts +29 -7
- package/src/testing.ts +76 -14
- package/src/timeout.ts +15 -7
- package/src/tree.ts +405 -333
- package/src/trust.ts +117 -0
- package/src/ts-type-emitter.ts +18 -12
- package/src/type-emitter.ts +227 -89
- package/src/type-extractor.ts +603 -423
- package/src/types.ts +8 -0
- package/src/validation.ts +221 -96
- package/src/with-headers.ts +45 -0
- package/src/ws/bun.ts +53 -15
- package/src/ws/cloudflare.ts +81 -19
- package/src/ws/deno.ts +124 -36
- package/src/ws/node.ts +173 -79
- package/src/ws/session.ts +73 -0
- package/src/ws/shared.ts +140 -0
- package/src/ws-origin.ts +53 -0
- package/src/yaml.ts +45 -22
- package/dist/client-mcp/server.d.ts +0 -10
- package/dist/client-mcp/server.d.ts.map +0 -1
- package/dist/client-mcp/types.d.ts +0 -16
- package/dist/client-mcp/types.d.ts.map +0 -1
- package/dist/cloudflare/realtime.d.ts +0 -30
- package/dist/cloudflare/realtime.d.ts.map +0 -1
- package/dist/realtime/buffer.d.ts +0 -18
- package/dist/realtime/buffer.d.ts.map +0 -1
- package/dist/realtime/longpoll.d.ts +0 -23
- package/dist/realtime/longpoll.d.ts.map +0 -1
- package/dist/realtime/protocol.d.ts +0 -50
- package/dist/realtime/protocol.d.ts.map +0 -1
- package/dist/realtime/runtime.d.ts +0 -74
- package/dist/realtime/runtime.d.ts.map +0 -1
- package/src/cloudflare/realtime.ts +0 -234
- package/src/realtime/buffer.ts +0 -101
- package/src/realtime/longpoll.ts +0 -148
- package/src/realtime/protocol.ts +0 -128
- package/src/realtime/runtime.ts +0 -427
|
@@ -0,0 +1,173 @@
|
|
|
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, scanProgram } from "../feature-detect.js";
|
|
5
|
+
/* ---- Entry helpers ---- */
|
|
6
|
+
function importApp(entry, exportName) {
|
|
7
|
+
if (exportName === "default")
|
|
8
|
+
return `import app from "./${entry}"`;
|
|
9
|
+
return `import { ${exportName} as app } from "./${entry}"`;
|
|
10
|
+
}
|
|
11
|
+
/* server targets start through the same code path as `app.serve()`: WS adapter, env, hostname */
|
|
12
|
+
function serverEntry(config, runtime, env, port) {
|
|
13
|
+
return [
|
|
14
|
+
'import { startHoneyServer } from "@lovrozagar/honey/serve"',
|
|
15
|
+
importApp(config.entry, config.export),
|
|
16
|
+
"",
|
|
17
|
+
`const port = Number(${port})`,
|
|
18
|
+
`await startHoneyServer(app, { env: ${env}, hostname: "0.0.0.0", port, runtime: "${runtime}" })`,
|
|
19
|
+
].join("\n");
|
|
20
|
+
}
|
|
21
|
+
/* ---- Adapter definitions ---- */
|
|
22
|
+
const adapters = {
|
|
23
|
+
bun: {
|
|
24
|
+
entry: (config) => serverEntry(config, "bun", "process.env", `process.env.PORT ?? ${config.port}`),
|
|
25
|
+
noExternal: false,
|
|
26
|
+
skipFeatures: [],
|
|
27
|
+
ssrTarget: "node",
|
|
28
|
+
},
|
|
29
|
+
cloudflare: {
|
|
30
|
+
entry(config) {
|
|
31
|
+
return [
|
|
32
|
+
importApp(config.entry, config.export),
|
|
33
|
+
"",
|
|
34
|
+
"export default {",
|
|
35
|
+
" fetch: (req, env, ctx) => app.fetch(req, env, ctx),",
|
|
36
|
+
"}",
|
|
37
|
+
].join("\n");
|
|
38
|
+
},
|
|
39
|
+
noExternal: true,
|
|
40
|
+
/* a Worker cannot listen; serve would pull node:http into the bundle */
|
|
41
|
+
skipFeatures: ["serve"],
|
|
42
|
+
ssrTarget: "webworker",
|
|
43
|
+
},
|
|
44
|
+
deno: {
|
|
45
|
+
entry: (config) => serverEntry(config, "deno", "Deno.env.toObject()", `Deno.env.get("PORT") ?? "${config.port}"`),
|
|
46
|
+
noExternal: true,
|
|
47
|
+
skipFeatures: [],
|
|
48
|
+
ssrTarget: "webworker",
|
|
49
|
+
},
|
|
50
|
+
node: {
|
|
51
|
+
entry: (config) => serverEntry(config, "node", "process.env", `process.env.PORT ?? ${config.port}`),
|
|
52
|
+
noExternal: false,
|
|
53
|
+
skipFeatures: [],
|
|
54
|
+
ssrTarget: "node",
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
/* ---- Feature detection over the import graph ---- */
|
|
58
|
+
const SCANNED_EXT = /\.(?:[cm]?[jt]sx?)$/;
|
|
59
|
+
function langOf(file) {
|
|
60
|
+
const ext = extname(file);
|
|
61
|
+
if (ext === ".tsx")
|
|
62
|
+
return "tsx";
|
|
63
|
+
if (ext === ".jsx")
|
|
64
|
+
return "jsx";
|
|
65
|
+
return /^\.[cm]?ts$/.test(ext) ? "ts" : "js";
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Walks the app's own modules (never node_modules) from `entry`, following static and dynamic
|
|
69
|
+
* imports, and collects feature calls. Comments and strings do not count.
|
|
70
|
+
*/
|
|
71
|
+
async function detectGraphFeatures(ctx, entry) {
|
|
72
|
+
const features = new Set();
|
|
73
|
+
const seen = new Set();
|
|
74
|
+
const queue = [entry];
|
|
75
|
+
while (queue.length > 0) {
|
|
76
|
+
const file = queue.pop();
|
|
77
|
+
if (seen.has(file))
|
|
78
|
+
continue;
|
|
79
|
+
seen.add(file);
|
|
80
|
+
if (!SCANNED_EXT.test(file) || file.includes("node_modules") || !existsSync(file))
|
|
81
|
+
continue;
|
|
82
|
+
const code = readFileSync(file, "utf-8");
|
|
83
|
+
let imports = [];
|
|
84
|
+
let program;
|
|
85
|
+
try {
|
|
86
|
+
program = ctx.parse?.(code, { lang: langOf(file) });
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
program = undefined;
|
|
90
|
+
}
|
|
91
|
+
if (program) {
|
|
92
|
+
const scanned = scanProgram(program);
|
|
93
|
+
for (const f of scanned.features)
|
|
94
|
+
features.add(f);
|
|
95
|
+
imports = scanned.imports;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
for (const f of detectFeaturesInSource(code))
|
|
99
|
+
features.add(f);
|
|
100
|
+
}
|
|
101
|
+
if (!ctx.resolve)
|
|
102
|
+
continue;
|
|
103
|
+
for (const source of imports) {
|
|
104
|
+
const resolved = await ctx.resolve(source, file).catch(() => null);
|
|
105
|
+
if (!resolved || resolved.external || resolved.id.startsWith("\0"))
|
|
106
|
+
continue;
|
|
107
|
+
queue.push(resolved.id.split("?")[0]);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return features;
|
|
111
|
+
}
|
|
112
|
+
/* ---- Virtual module constants ---- */
|
|
113
|
+
const VIRTUAL_BUILD_ENTRY = "virtual:honey-build-entry";
|
|
114
|
+
const RESOLVED_BUILD_ENTRY = `\0${VIRTUAL_BUILD_ENTRY}`;
|
|
115
|
+
/* ---- Build plugin factory ---- */
|
|
116
|
+
export function createBuildPlugin(buildConfig, shared) {
|
|
117
|
+
const adapter = adapters[buildConfig.target];
|
|
118
|
+
const resolvedConfig = {
|
|
119
|
+
entry: shared.entry,
|
|
120
|
+
export: shared.export,
|
|
121
|
+
port: buildConfig.port ?? 3000,
|
|
122
|
+
};
|
|
123
|
+
let root = "";
|
|
124
|
+
return {
|
|
125
|
+
apply: "build",
|
|
126
|
+
config() {
|
|
127
|
+
return {
|
|
128
|
+
build: {
|
|
129
|
+
emptyOutDir: false,
|
|
130
|
+
minify: buildConfig.minify ?? true,
|
|
131
|
+
outDir: buildConfig.outDir ?? "./dist",
|
|
132
|
+
rolldownOptions: {
|
|
133
|
+
external: [...builtinModules, ...builtinModules.map((m) => `node:${m}`), ...(buildConfig.external ?? [])],
|
|
134
|
+
input: VIRTUAL_BUILD_ENTRY,
|
|
135
|
+
output: { entryFileNames: "index.js" },
|
|
136
|
+
},
|
|
137
|
+
ssr: true,
|
|
138
|
+
},
|
|
139
|
+
ssr: {
|
|
140
|
+
/* node and bun install dependencies next to the bundle; inlining them would also inline native addons */
|
|
141
|
+
...(adapter.noExternal ? { noExternal: true } : {}),
|
|
142
|
+
target: adapter.ssrTarget,
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
},
|
|
146
|
+
configResolved(cfg) {
|
|
147
|
+
root = cfg.root;
|
|
148
|
+
},
|
|
149
|
+
async load(id) {
|
|
150
|
+
if (id !== RESOLVED_BUILD_ENTRY)
|
|
151
|
+
return undefined;
|
|
152
|
+
const appPath = resolve(root || ".", shared.entry);
|
|
153
|
+
const detected = await detectGraphFeatures(this ?? {}, appPath);
|
|
154
|
+
const features = FEATURES.filter((feature) => {
|
|
155
|
+
if (adapter.skipFeatures.includes(feature))
|
|
156
|
+
return false;
|
|
157
|
+
return buildConfig.features?.[feature] ?? detected.has(feature);
|
|
158
|
+
});
|
|
159
|
+
const prelude = featurePrelude(features);
|
|
160
|
+
return {
|
|
161
|
+
code: `${prelude ? `${prelude}\n` : ""}${adapter.entry(resolvedConfig)}`,
|
|
162
|
+
moduleType: "js",
|
|
163
|
+
};
|
|
164
|
+
},
|
|
165
|
+
name: "honey:build",
|
|
166
|
+
resolveId(id) {
|
|
167
|
+
if (id === VIRTUAL_BUILD_ENTRY)
|
|
168
|
+
return RESOLVED_BUILD_ENTRY;
|
|
169
|
+
return undefined;
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/build/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** Argument parsing for the `honey` CLI. Not a package export. */
|
|
2
|
+
export declare const USAGE = "Usage: honey generate [options]\n honey init [--cf] [--force]\n\ngenerate options:\n --config <path> Vite config holding honey() (default: vite.config.{ts,mts,js,mjs,\u2026})\n --plugin <n> Which honey() plugin in the config, 0-based (when there are several)\n --app <path> App entry; overrides the config's app, or replaces the config\n --watch Regenerate when files next to the app change\n --tree --types --manifest --sdk\n Turn on an output\n --merge-tree <path> Route tree source for a gateway\n --cli --cli-out <dir> --cli-binary-name <name> [--cli-config-name <name>]\n [--cli-default-base-url <url>] [--cli-env-prefix <prefix>] [--cli-module-path <path>]\n [--cli-sdk-module-path <path>]\n Generate the Go CLI\n -h, --help Show this help";
|
|
3
|
+
export declare class UsageError extends Error {
|
|
4
|
+
}
|
|
5
|
+
export type CliFlags = {
|
|
6
|
+
app?: string;
|
|
7
|
+
cli?: boolean;
|
|
8
|
+
cliBinaryName?: string;
|
|
9
|
+
cliConfigName?: string;
|
|
10
|
+
cliDefaultBaseUrl?: string;
|
|
11
|
+
cliEnvPrefix?: string;
|
|
12
|
+
cliModulePath?: string;
|
|
13
|
+
cliOut?: string;
|
|
14
|
+
cliSdkModulePath?: string;
|
|
15
|
+
config?: string;
|
|
16
|
+
help?: boolean;
|
|
17
|
+
manifest?: boolean;
|
|
18
|
+
mergeTree?: string;
|
|
19
|
+
plugin?: number;
|
|
20
|
+
sdk?: boolean;
|
|
21
|
+
tree?: boolean;
|
|
22
|
+
types?: boolean;
|
|
23
|
+
watch?: boolean;
|
|
24
|
+
};
|
|
25
|
+
/** Strict: unknown flags, stray positionals and missing values are errors. Accepts `--k v` and `--k=v`. */
|
|
26
|
+
export declare function parseGenerateArgs(args: string[]): CliFlags;
|
|
27
|
+
/** `honey init` flags. `--cloudflare` is an alias of `--cf`. */
|
|
28
|
+
export type InitFlags = {
|
|
29
|
+
cf: boolean;
|
|
30
|
+
force: boolean;
|
|
31
|
+
};
|
|
32
|
+
export declare function parseInitFlags(args: string[]): InitFlags;
|
|
33
|
+
//# sourceMappingURL=cli-args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,eAAO,MAAM,KAAK,+3BAewB,CAAA;AAE1C,qBAAa,UAAW,SAAQ,KAAK;CAAG;AAExC,MAAM,MAAM,QAAQ,GAAG;IACtB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CACf,CAAA;AA0BD,2GAA2G;AAC3G,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAuC1D;AAED,gEAAgE;AAChE,MAAM,MAAM,SAAS,GAAG;IACvB,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,EAAE,OAAO,CAAA;CACd,CAAA;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAQxD"}
|
package/dist/cli-args.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/** Argument parsing for the `honey` CLI. Not a package export. */
|
|
2
|
+
export const USAGE = `Usage: honey generate [options]
|
|
3
|
+
honey init [--cf] [--force]
|
|
4
|
+
|
|
5
|
+
generate options:
|
|
6
|
+
--config <path> Vite config holding honey() (default: vite.config.{ts,mts,js,mjs,…})
|
|
7
|
+
--plugin <n> Which honey() plugin in the config, 0-based (when there are several)
|
|
8
|
+
--app <path> App entry; overrides the config's app, or replaces the config
|
|
9
|
+
--watch Regenerate when files next to the app change
|
|
10
|
+
--tree --types --manifest --sdk
|
|
11
|
+
Turn on an output
|
|
12
|
+
--merge-tree <path> Route tree source for a gateway
|
|
13
|
+
--cli --cli-out <dir> --cli-binary-name <name> [--cli-config-name <name>]
|
|
14
|
+
[--cli-default-base-url <url>] [--cli-env-prefix <prefix>] [--cli-module-path <path>]
|
|
15
|
+
[--cli-sdk-module-path <path>]
|
|
16
|
+
Generate the Go CLI
|
|
17
|
+
-h, --help Show this help`;
|
|
18
|
+
export class UsageError extends Error {
|
|
19
|
+
}
|
|
20
|
+
const BOOLEAN_FLAGS = {
|
|
21
|
+
cli: "cli",
|
|
22
|
+
help: "help",
|
|
23
|
+
manifest: "manifest",
|
|
24
|
+
sdk: "sdk",
|
|
25
|
+
tree: "tree",
|
|
26
|
+
types: "types",
|
|
27
|
+
watch: "watch",
|
|
28
|
+
};
|
|
29
|
+
const VALUE_FLAGS = {
|
|
30
|
+
app: "app",
|
|
31
|
+
"cli-binary-name": "cliBinaryName",
|
|
32
|
+
"cli-config-name": "cliConfigName",
|
|
33
|
+
"cli-default-base-url": "cliDefaultBaseUrl",
|
|
34
|
+
"cli-env-prefix": "cliEnvPrefix",
|
|
35
|
+
"cli-module-path": "cliModulePath",
|
|
36
|
+
"cli-out": "cliOut",
|
|
37
|
+
"cli-sdk-module-path": "cliSdkModulePath",
|
|
38
|
+
config: "config",
|
|
39
|
+
"merge-tree": "mergeTree",
|
|
40
|
+
plugin: "plugin",
|
|
41
|
+
};
|
|
42
|
+
/** Strict: unknown flags, stray positionals and missing values are errors. Accepts `--k v` and `--k=v`. */
|
|
43
|
+
export function parseGenerateArgs(args) {
|
|
44
|
+
const flags = {};
|
|
45
|
+
for (let i = 0; i < args.length; i++) {
|
|
46
|
+
const arg = args[i];
|
|
47
|
+
if (arg === "-h") {
|
|
48
|
+
flags.help = true;
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (!arg.startsWith("--") || arg === "--")
|
|
52
|
+
throw new UsageError(`unexpected argument: ${arg}`);
|
|
53
|
+
const eq = arg.indexOf("=");
|
|
54
|
+
const name = eq === -1 ? arg.slice(2) : arg.slice(2, eq);
|
|
55
|
+
const inline = eq === -1 ? undefined : arg.slice(eq + 1);
|
|
56
|
+
const bool = BOOLEAN_FLAGS[name];
|
|
57
|
+
if (bool) {
|
|
58
|
+
if (inline === undefined || inline === "true")
|
|
59
|
+
flags[bool] = true;
|
|
60
|
+
else if (inline === "false")
|
|
61
|
+
flags[bool] = false;
|
|
62
|
+
else
|
|
63
|
+
throw new UsageError(`--${name} takes no value (got "${inline}")`);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const key = VALUE_FLAGS[name];
|
|
67
|
+
if (!key)
|
|
68
|
+
throw new UsageError(`unknown option: --${name}`);
|
|
69
|
+
let value = inline;
|
|
70
|
+
if (value === undefined) {
|
|
71
|
+
const next = args[i + 1];
|
|
72
|
+
if (next === undefined || next.startsWith("--"))
|
|
73
|
+
throw new UsageError(`--${name} requires a value`);
|
|
74
|
+
value = next;
|
|
75
|
+
i++;
|
|
76
|
+
}
|
|
77
|
+
if (value === "")
|
|
78
|
+
throw new UsageError(`--${name} requires a value`);
|
|
79
|
+
if (key === "plugin") {
|
|
80
|
+
if (!/^\d+$/.test(value))
|
|
81
|
+
throw new UsageError(`--plugin takes a non-negative integer (got "${value}")`);
|
|
82
|
+
flags.plugin = Number(value);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
flags[key] = value;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return flags;
|
|
89
|
+
}
|
|
90
|
+
export function parseInitFlags(args) {
|
|
91
|
+
const flags = { cf: false, force: false };
|
|
92
|
+
for (const arg of args) {
|
|
93
|
+
if (arg === "--cf" || arg === "--cloudflare")
|
|
94
|
+
flags.cf = true;
|
|
95
|
+
else if (arg === "--force")
|
|
96
|
+
flags.force = true;
|
|
97
|
+
else
|
|
98
|
+
throw new UsageError(arg.startsWith("-") ? `unknown option: ${arg}` : `unexpected argument: ${arg}`);
|
|
99
|
+
}
|
|
100
|
+
return flags;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=cli-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Code generated by honey. DO NOT EDIT.
|
|
2
|
+
package cli
|
|
3
|
+
|
|
4
|
+
import (
|
|
5
|
+
"errors"
|
|
6
|
+
"net/http"
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
// ErrMissingAPIKey is returned when no API key can be found via flags, env, or config file.
|
|
10
|
+
var ErrMissingAPIKey = errors.New("api key required: set --api-key, env var, or config file")
|
|
11
|
+
|
|
12
|
+
// ResolveAPIKey returns the resolved API key or ErrMissingAPIKey if none is available.
|
|
13
|
+
func ResolveAPIKey(cfg Config) (string, error) {
|
|
14
|
+
if cfg.APIKey != "" {
|
|
15
|
+
return cfg.APIKey, nil
|
|
16
|
+
}
|
|
17
|
+
return "", ErrMissingAPIKey
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// ApplyAuth sets the auth header for apiKey: prefix + key under headerName.
|
|
21
|
+
func ApplyAuth(h http.Header, headerName, prefix, apiKey string) {
|
|
22
|
+
if apiKey == "" {
|
|
23
|
+
return
|
|
24
|
+
}
|
|
25
|
+
h.Set(headerName, prefix+apiKey)
|
|
26
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
// Code generated by honey. DO NOT EDIT.
|
|
2
|
+
package cli
|
|
3
|
+
|
|
4
|
+
import (
|
|
5
|
+
"errors"
|
|
6
|
+
"fmt"
|
|
7
|
+
"io"
|
|
8
|
+
"io/fs"
|
|
9
|
+
"os"
|
|
10
|
+
"path/filepath"
|
|
11
|
+
"runtime"
|
|
12
|
+
|
|
13
|
+
"github.com/pelletier/go-toml/v2"
|
|
14
|
+
"github.com/spf13/pflag"
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
// Config holds resolved runtime values for the CLI binary.
|
|
18
|
+
//
|
|
19
|
+
// Precedence (high → low) — see LoadConfig below:
|
|
20
|
+
//
|
|
21
|
+
// 1. --api-key / --base-url / --output / … flag set on the command line.
|
|
22
|
+
// 2. Env var: <ENV_PREFIX>_API_KEY / _BASE_URL / _OUTPUT / …
|
|
23
|
+
// 3. Config file from --config, $<ENV_PREFIX>_CONFIG, $XDG_CONFIG_HOME/<name>/config.toml,
|
|
24
|
+
// $HOME/.config/<name>/config.toml, os.UserConfigDir()/<name>/config.toml.
|
|
25
|
+
// 4. Built-in defaults.
|
|
26
|
+
// 5. (missing api-key → ErrMissingAPIKey, mapped to exit 4).
|
|
27
|
+
type Config struct {
|
|
28
|
+
APIKey string
|
|
29
|
+
BaseURL string
|
|
30
|
+
Output string
|
|
31
|
+
Timeout string
|
|
32
|
+
Verbose bool
|
|
33
|
+
ConfigPath string
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
type tomlConfig struct {
|
|
37
|
+
APIKey string `toml:"api_key"`
|
|
38
|
+
BaseURL string `toml:"base_url"`
|
|
39
|
+
Output string `toml:"output"`
|
|
40
|
+
Timeout string `toml:"timeout"`
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// LoadConfig merges flag values, env vars, and a TOML config file into a Config.
|
|
44
|
+
//
|
|
45
|
+
// The resolution order matches the Config doc-comment precedence list.
|
|
46
|
+
func LoadConfig(flags *pflag.FlagSet, envPrefix, configName string) (Config, error) {
|
|
47
|
+
var cfg Config
|
|
48
|
+
|
|
49
|
+
cfgPath := ""
|
|
50
|
+
explicit := false
|
|
51
|
+
if flags.Changed("config") {
|
|
52
|
+
v, _ := flags.GetString("config")
|
|
53
|
+
cfgPath = v
|
|
54
|
+
explicit = true
|
|
55
|
+
} else if v := os.Getenv(envPrefix + "_CONFIG"); v != "" {
|
|
56
|
+
cfgPath = v
|
|
57
|
+
explicit = true
|
|
58
|
+
} else {
|
|
59
|
+
cfgPath = defaultConfigPath(configName)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
var fromFile tomlConfig
|
|
63
|
+
if cfgPath != "" {
|
|
64
|
+
data, err := os.ReadFile(cfgPath)
|
|
65
|
+
switch {
|
|
66
|
+
case err == nil:
|
|
67
|
+
if err := toml.Unmarshal(data, &fromFile); err != nil {
|
|
68
|
+
return cfg, Usage(fmt.Errorf("parse config %s: %w", cfgPath, err))
|
|
69
|
+
}
|
|
70
|
+
warnIfReadableByOthers(cfgPath, fromFile.APIKey != "")
|
|
71
|
+
case explicit || !errors.Is(err, fs.ErrNotExist):
|
|
72
|
+
/* a config the user named must exist; only the default path may be absent */
|
|
73
|
+
return cfg, Usage(fmt.Errorf("read config %s: %w", cfgPath, err))
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
cfg.ConfigPath = cfgPath
|
|
77
|
+
|
|
78
|
+
cfg.APIKey = fromFile.APIKey
|
|
79
|
+
if v := os.Getenv(envPrefix + "_API_KEY"); v != "" {
|
|
80
|
+
cfg.APIKey = v
|
|
81
|
+
}
|
|
82
|
+
if flags.Changed("api-key") {
|
|
83
|
+
v, _ := flags.GetString("api-key")
|
|
84
|
+
cfg.APIKey = v
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
cfg.BaseURL = fromFile.BaseURL
|
|
88
|
+
if v := os.Getenv(envPrefix + "_BASE_URL"); v != "" {
|
|
89
|
+
cfg.BaseURL = v
|
|
90
|
+
}
|
|
91
|
+
if flags.Changed("base-url") {
|
|
92
|
+
v, _ := flags.GetString("base-url")
|
|
93
|
+
cfg.BaseURL = v
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
cfg.Output = fromFile.Output
|
|
97
|
+
if v := os.Getenv(envPrefix + "_OUTPUT"); v != "" {
|
|
98
|
+
cfg.Output = v
|
|
99
|
+
}
|
|
100
|
+
if flags.Changed("output") {
|
|
101
|
+
v, _ := flags.GetString("output")
|
|
102
|
+
cfg.Output = v
|
|
103
|
+
}
|
|
104
|
+
if cfg.Output == "" {
|
|
105
|
+
cfg.Output = "json"
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
cfg.Timeout = fromFile.Timeout
|
|
109
|
+
if v := os.Getenv(envPrefix + "_TIMEOUT"); v != "" {
|
|
110
|
+
cfg.Timeout = v
|
|
111
|
+
}
|
|
112
|
+
if flags.Changed("timeout") {
|
|
113
|
+
v, _ := flags.GetString("timeout")
|
|
114
|
+
cfg.Timeout = v
|
|
115
|
+
}
|
|
116
|
+
if cfg.Timeout == "" {
|
|
117
|
+
cfg.Timeout = "30s"
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if flags.Changed("verbose") {
|
|
121
|
+
v, _ := flags.GetBool("verbose")
|
|
122
|
+
cfg.Verbose = v
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return cfg, nil
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// warnIfReadableByOthers warns when a config file holding an API key can be
|
|
129
|
+
// read by group or other users.
|
|
130
|
+
func warnIfReadableByOthers(path string, hasKey bool) {
|
|
131
|
+
if !hasKey || runtime.GOOS == "windows" {
|
|
132
|
+
return
|
|
133
|
+
}
|
|
134
|
+
info, err := os.Stat(path)
|
|
135
|
+
if err != nil {
|
|
136
|
+
return
|
|
137
|
+
}
|
|
138
|
+
if info.Mode().Perm()&0o077 != 0 {
|
|
139
|
+
fmt.Fprintf(os.Stderr, "warning: %s holds an API key and is readable by other users; run: chmod 600 %s\n", path, path)
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
func defaultConfigPath(configName string) string {
|
|
144
|
+
if configName == "" {
|
|
145
|
+
return ""
|
|
146
|
+
}
|
|
147
|
+
if xdg := os.Getenv("XDG_CONFIG_HOME"); xdg != "" {
|
|
148
|
+
return filepath.Join(xdg, configName, "config.toml")
|
|
149
|
+
}
|
|
150
|
+
if home := os.Getenv("HOME"); home != "" {
|
|
151
|
+
return filepath.Join(home, ".config", configName, "config.toml")
|
|
152
|
+
}
|
|
153
|
+
if dir, err := os.UserConfigDir(); err == nil {
|
|
154
|
+
return filepath.Join(dir, configName, "config.toml")
|
|
155
|
+
}
|
|
156
|
+
return ""
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// readDataFlag resolves the value of a --data flag into raw bytes.
|
|
160
|
+
//
|
|
161
|
+
// Rules:
|
|
162
|
+
// - "@path" → reads file at path.
|
|
163
|
+
// - "-" → reads os.Stdin.
|
|
164
|
+
// - "" → returns nil, nil (caller decides whether required).
|
|
165
|
+
// - anything else → treats val as literal JSON.
|
|
166
|
+
//
|
|
167
|
+
// Exported as ReadDataFlag for use from cmd/*.go.
|
|
168
|
+
func ReadDataFlag(val string) ([]byte, error) {
|
|
169
|
+
return readDataFlag(val)
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
func readDataFlag(val string) ([]byte, error) {
|
|
173
|
+
if val == "" {
|
|
174
|
+
return nil, nil
|
|
175
|
+
}
|
|
176
|
+
if val == "-" {
|
|
177
|
+
data, err := io.ReadAll(os.Stdin)
|
|
178
|
+
if err != nil {
|
|
179
|
+
return nil, fmt.Errorf("read stdin: %w", err)
|
|
180
|
+
}
|
|
181
|
+
return data, nil
|
|
182
|
+
}
|
|
183
|
+
if val[0] == '@' {
|
|
184
|
+
path := val[1:]
|
|
185
|
+
data, err := os.ReadFile(path)
|
|
186
|
+
if err != nil {
|
|
187
|
+
return nil, fmt.Errorf("read data file %s: %w", path, err)
|
|
188
|
+
}
|
|
189
|
+
return data, nil
|
|
190
|
+
}
|
|
191
|
+
return []byte(val), nil
|
|
192
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// Code generated by honey. DO NOT EDIT.
|
|
2
|
+
package cli
|
|
3
|
+
|
|
4
|
+
import (
|
|
5
|
+
"context"
|
|
6
|
+
"errors"
|
|
7
|
+
"net"
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
// UsageError marks bad flags, bad config and invalid input; it maps to exit 4.
|
|
11
|
+
type UsageError struct{ Err error }
|
|
12
|
+
|
|
13
|
+
func (e *UsageError) Error() string { return e.Err.Error() }
|
|
14
|
+
func (e *UsageError) Unwrap() error { return e.Err }
|
|
15
|
+
|
|
16
|
+
// Usage wraps err as a UsageError.
|
|
17
|
+
func Usage(err error) error {
|
|
18
|
+
if err == nil {
|
|
19
|
+
return nil
|
|
20
|
+
}
|
|
21
|
+
return &UsageError{Err: err}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// ExitFor maps a CLI-level error to a process exit code.
|
|
25
|
+
//
|
|
26
|
+
// Codes:
|
|
27
|
+
//
|
|
28
|
+
// 0 success
|
|
29
|
+
// 1 4xx client error
|
|
30
|
+
// 2 5xx server error
|
|
31
|
+
// 3 network / transport failure or timeout
|
|
32
|
+
// 4 bad flags / bad config / missing api key
|
|
33
|
+
// 5 3xx unexpected redirect
|
|
34
|
+
func ExitFor(err error) int {
|
|
35
|
+
if err == nil {
|
|
36
|
+
return 0
|
|
37
|
+
}
|
|
38
|
+
if errors.Is(err, ErrMissingAPIKey) {
|
|
39
|
+
return 4
|
|
40
|
+
}
|
|
41
|
+
var usage *UsageError
|
|
42
|
+
if errors.As(err, &usage) {
|
|
43
|
+
return 4
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* SDK errors expose Status() (APIError) */
|
|
47
|
+
var apiErr interface{ Status() int }
|
|
48
|
+
if errors.As(err, &apiErr) {
|
|
49
|
+
return exitForStatus(apiErr.Status())
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if errors.Is(err, context.DeadlineExceeded) || errors.Is(err, context.Canceled) {
|
|
53
|
+
return 3
|
|
54
|
+
}
|
|
55
|
+
var netErr net.Error
|
|
56
|
+
if errors.As(err, &netErr) {
|
|
57
|
+
return 3
|
|
58
|
+
}
|
|
59
|
+
return 3
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
func exitForStatus(status int) int {
|
|
63
|
+
switch {
|
|
64
|
+
case status == 0:
|
|
65
|
+
return 3
|
|
66
|
+
case status >= 300 && status < 400:
|
|
67
|
+
return 5
|
|
68
|
+
case status >= 400 && status < 500:
|
|
69
|
+
return 1
|
|
70
|
+
case status >= 500 && status < 600:
|
|
71
|
+
return 2
|
|
72
|
+
default:
|
|
73
|
+
return 1
|
|
74
|
+
}
|
|
75
|
+
}
|