ts-procedures 8.6.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +166 -101
- package/agent_config/claude-code/.claude-plugin/plugin.json +1 -1
- package/agent_config/claude-code/agents/ts-procedures-architect.md +11 -10
- package/agent_config/claude-code/skills/ts-procedures/SKILL.md +25 -12
- package/agent_config/claude-code/skills/ts-procedures/anti-patterns.md +10 -12
- package/agent_config/claude-code/skills/ts-procedures/api-reference.md +141 -45
- package/agent_config/claude-code/skills/ts-procedures/checklist.md +7 -6
- package/agent_config/claude-code/skills/ts-procedures/patterns.md +45 -6
- package/agent_config/claude-code/skills/ts-procedures/templates/client.md +1 -1
- package/agent_config/claude-code/skills/ts-procedures/templates/hono.md +1 -1
- package/agent_config/copilot/copilot-instructions.md +50 -33
- package/agent_config/cursor/cursorrules +50 -33
- package/build/adapters/astro/astro-context.js.map +1 -0
- package/build/adapters/astro/create-handler.js.map +1 -0
- package/build/adapters/astro/index.js.map +1 -0
- package/build/{implementations/http → adapters}/astro/index.test.js +1 -1
- package/build/adapters/astro/index.test.js.map +1 -0
- package/build/adapters/astro/rewrite-request.js.map +1 -0
- package/build/adapters/hono/envelope-parity.test.js +98 -0
- package/build/adapters/hono/envelope-parity.test.js.map +1 -0
- package/build/{implementations/http → adapters}/hono/handlers/http-stream.d.ts +1 -1
- package/build/adapters/hono/handlers/http-stream.js +55 -0
- package/build/adapters/hono/handlers/http-stream.js.map +1 -0
- package/build/{implementations/http → adapters}/hono/handlers/http-stream.test.js +1 -1
- package/build/adapters/hono/handlers/http-stream.test.js.map +1 -0
- package/build/{implementations/http → adapters}/hono/handlers/http.d.ts +1 -1
- package/build/adapters/hono/handlers/http.js +50 -0
- package/build/adapters/hono/handlers/http.js.map +1 -0
- package/build/{implementations/http → adapters}/hono/handlers/http.test.js +1 -1
- package/build/adapters/hono/handlers/http.test.js.map +1 -0
- package/build/{implementations/http → adapters}/hono/handlers/rpc.d.ts +2 -2
- package/build/adapters/hono/handlers/rpc.js +23 -0
- package/build/adapters/hono/handlers/rpc.js.map +1 -0
- package/build/{implementations/http → adapters}/hono/handlers/rpc.test.js +1 -1
- package/build/adapters/hono/handlers/rpc.test.js.map +1 -0
- package/build/adapters/hono/handlers/stream.d.ts +12 -0
- package/build/adapters/hono/handlers/stream.js +89 -0
- package/build/adapters/hono/handlers/stream.js.map +1 -0
- package/build/{implementations/http → adapters}/hono/handlers/stream.test.js +3 -2
- package/build/adapters/hono/handlers/stream.test.js.map +1 -0
- package/build/{implementations/http → adapters}/hono/index.d.ts +24 -12
- package/build/{implementations/http → adapters}/hono/index.js +19 -8
- package/build/adapters/hono/index.js.map +1 -0
- package/build/{implementations/http → adapters}/hono/index.test.js +2 -4
- package/build/adapters/hono/index.test.js.map +1 -0
- package/build/{implementations/http → adapters/hono}/on-request-error.test.js +2 -2
- package/build/adapters/hono/on-request-error.test.js.map +1 -0
- package/build/adapters/hono/request.d.ts +7 -0
- package/build/adapters/hono/request.js +22 -0
- package/build/adapters/hono/request.js.map +1 -0
- package/build/{implementations/http → adapters/hono}/route-errors.test.js +4 -4
- package/build/adapters/hono/route-errors.test.js.map +1 -0
- package/build/adapters/hono/types.d.ts +55 -0
- package/build/adapters/hono/types.js +19 -0
- package/build/adapters/hono/types.js.map +1 -0
- package/build/client/freeze.test.js +39 -0
- package/build/client/freeze.test.js.map +1 -0
- package/build/client/typed-error-dispatch.test.js +2 -2
- package/build/client/typed-error-dispatch.test.js.map +1 -1
- package/build/codegen/__fixtures__/make-envelope.d.ts +1 -1
- package/build/codegen/bin/cli.d.ts +5 -0
- package/build/codegen/bin/cli.js +139 -182
- package/build/codegen/bin/cli.js.map +1 -1
- package/build/codegen/bin/cli.test.js +12 -2
- package/build/codegen/bin/cli.test.js.map +1 -1
- package/build/codegen/bin/flag-specs.d.ts +9 -0
- package/build/codegen/bin/flag-specs.js +33 -31
- package/build/codegen/bin/flag-specs.js.map +1 -1
- package/build/codegen/bin/flag-specs.test.js +14 -1
- package/build/codegen/bin/flag-specs.test.js.map +1 -1
- package/build/codegen/collect-models.d.ts +1 -1
- package/build/codegen/emit/api-route.d.ts +8 -0
- package/build/codegen/emit/api-route.js +156 -0
- package/build/codegen/emit/api-route.js.map +1 -0
- package/build/codegen/emit/context.d.ts +30 -0
- package/build/codegen/emit/context.js +2 -0
- package/build/codegen/emit/context.js.map +1 -0
- package/build/codegen/emit/declarations.d.ts +24 -0
- package/build/codegen/emit/declarations.js +48 -0
- package/build/codegen/emit/declarations.js.map +1 -0
- package/build/codegen/emit/format-types.d.ts +61 -0
- package/build/codegen/emit/format-types.js +188 -0
- package/build/codegen/emit/format-types.js.map +1 -0
- package/build/codegen/emit/http-stream-route.d.ts +7 -0
- package/build/codegen/emit/http-stream-route.js +138 -0
- package/build/codegen/emit/http-stream-route.js.map +1 -0
- package/build/codegen/emit/route-shared.d.ts +35 -0
- package/build/codegen/emit/route-shared.js +88 -0
- package/build/codegen/emit/route-shared.js.map +1 -0
- package/build/codegen/emit/rpc-route.d.ts +7 -0
- package/build/codegen/emit/rpc-route.js +37 -0
- package/build/codegen/emit/rpc-route.js.map +1 -0
- package/build/codegen/emit/scope-file.d.ts +39 -0
- package/build/codegen/emit/scope-file.js +166 -0
- package/build/codegen/emit/scope-file.js.map +1 -0
- package/build/codegen/emit/stream-route.d.ts +7 -0
- package/build/codegen/emit/stream-route.js +62 -0
- package/build/codegen/emit/stream-route.js.map +1 -0
- package/build/codegen/emit-errors.d.ts +1 -1
- package/build/codegen/emit-errors.integration.test.js +1 -1
- package/build/codegen/emit-errors.integration.test.js.map +1 -1
- package/build/codegen/emit-scope.d.ts +13 -30
- package/build/codegen/emit-scope.js +15 -844
- package/build/codegen/emit-scope.js.map +1 -1
- package/build/codegen/goldens.test.js +69 -0
- package/build/codegen/goldens.test.js.map +1 -0
- package/build/codegen/group-routes.d.ts +1 -1
- package/build/codegen/pipeline.d.ts +1 -1
- package/build/codegen/resolve-envelope.d.ts +1 -1
- package/build/codegen/targets/_shared/error-schemas.d.ts +1 -1
- package/build/codegen/targets/_shared/route-slots.d.ts +1 -1
- package/build/codegen/targets/_shared/target-run.d.ts +1 -1
- package/build/codegen/targets/kotlin/emit-route-kotlin.d.ts +1 -1
- package/build/codegen/targets/swift/emit-route-swift.d.ts +1 -1
- package/build/core/create-http-stream.d.ts +50 -0
- package/build/core/create-http-stream.js +108 -0
- package/build/core/create-http-stream.js.map +1 -0
- package/build/{create-http-stream.test.js → core/create-http-stream.test.js} +1 -1
- package/build/core/create-http-stream.test.js.map +1 -0
- package/build/core/create-http.d.ts +51 -0
- package/build/core/create-http.js +65 -0
- package/build/core/create-http.js.map +1 -0
- package/build/{create-http.test.js → core/create-http.test.js} +13 -4
- package/build/core/create-http.test.js.map +1 -0
- package/build/core/create-stream.d.ts +26 -0
- package/build/core/create-stream.js +80 -0
- package/build/core/create-stream.js.map +1 -0
- package/build/{create-stream.test.js → core/create-stream.test.js} +23 -28
- package/build/core/create-stream.test.js.map +1 -0
- package/build/core/create.d.ts +22 -0
- package/build/core/create.js +71 -0
- package/build/core/create.js.map +1 -0
- package/build/{create.test.js → core/create.test.js} +25 -46
- package/build/core/create.test.js.map +1 -0
- package/build/core/definition-site.d.ts +24 -0
- package/build/{stack-utils.js → core/definition-site.js} +20 -20
- package/build/core/definition-site.js.map +1 -0
- package/build/{stack-utils.test.js → core/definition-site.test.js} +12 -3
- package/build/core/definition-site.test.js.map +1 -0
- package/build/{errors.d.ts → core/errors.d.ts} +19 -8
- package/build/{errors.js → core/errors.js} +21 -26
- package/build/core/errors.js.map +1 -0
- package/build/core/errors.test.js.map +1 -0
- package/build/core/factory-options.test.js +82 -0
- package/build/core/factory-options.test.js.map +1 -0
- package/build/core/http-route.d.ts +13 -0
- package/build/core/http-route.js +54 -0
- package/build/core/http-route.js.map +1 -0
- package/build/core/internal.d.ts +72 -0
- package/build/core/internal.js +128 -0
- package/build/core/internal.js.map +1 -0
- package/build/{migration.test.js → core/migration.test.js} +17 -1
- package/build/core/migration.test.js.map +1 -0
- package/build/core/procedures.d.ts +143 -0
- package/build/core/procedures.js +64 -0
- package/build/core/procedures.js.map +1 -0
- package/build/{index.test.js → core/procedures.test.js} +14 -11
- package/build/core/procedures.test.js.map +1 -0
- package/build/core/types.d.ts +182 -0
- package/build/{schema → core}/types.js.map +1 -1
- package/build/exports.d.ts +31 -11
- package/build/exports.js +23 -8
- package/build/exports.js.map +1 -1
- package/build/schema/adapter.d.ts +35 -0
- package/build/schema/adapter.js +13 -0
- package/build/schema/adapter.js.map +1 -0
- package/build/schema/adapter.test.js +53 -0
- package/build/schema/adapter.test.js.map +1 -0
- package/build/schema/compile.d.ts +37 -0
- package/build/schema/compile.js +38 -0
- package/build/schema/compile.js.map +1 -0
- package/build/schema/compile.test.js +78 -0
- package/build/schema/compile.test.js.map +1 -0
- package/build/schema/compute-schema.d.ts +47 -37
- package/build/schema/compute-schema.js +86 -29
- package/build/schema/compute-schema.js.map +1 -1
- package/build/schema/compute-schema.test.js +158 -40
- package/build/schema/compute-schema.test.js.map +1 -1
- package/build/schema/json-schema.d.ts +17 -0
- package/build/schema/json-schema.js +2 -0
- package/build/schema/json-schema.js.map +1 -0
- package/build/schema/typebox.d.ts +11 -0
- package/build/schema/typebox.js +24 -0
- package/build/schema/typebox.js.map +1 -0
- package/build/schema/typebox.test.js +34 -0
- package/build/schema/typebox.test.js.map +1 -0
- package/build/server/context.d.ts +8 -0
- package/build/server/context.js +7 -0
- package/build/server/context.js.map +1 -0
- package/build/server/context.test.js +16 -0
- package/build/server/context.test.js.map +1 -0
- package/build/{doc-envelope.d.ts → server/doc-envelope.d.ts} +1 -1
- package/build/server/doc-envelope.js.map +1 -0
- package/build/server/doc-envelope.test.d.ts +1 -0
- package/build/server/doc-envelope.test.js.map +1 -0
- package/build/{implementations/http → server}/doc-registry.d.ts +7 -2
- package/build/{implementations/http → server}/doc-registry.js +9 -5
- package/build/server/doc-registry.js.map +1 -0
- package/build/server/doc-registry.test.d.ts +1 -0
- package/build/{implementations/http → server}/doc-registry.test.js +27 -24
- package/build/server/doc-registry.test.js.map +1 -0
- package/build/server/docs/docs.test.d.ts +1 -0
- package/build/server/docs/docs.test.js +237 -0
- package/build/server/docs/docs.test.js.map +1 -0
- package/build/{implementations/http/hono → server}/docs/http-doc.d.ts +2 -2
- package/build/{implementations/http/hono → server}/docs/http-doc.js +1 -1
- package/build/server/docs/http-doc.js.map +1 -0
- package/build/{implementations/http/hono → server}/docs/http-stream-doc.d.ts +2 -2
- package/build/{implementations/http/hono → server}/docs/http-stream-doc.js +1 -1
- package/build/server/docs/http-stream-doc.js.map +1 -0
- package/build/{implementations/http/hono → server}/docs/rpc-doc.d.ts +2 -2
- package/build/{implementations/http/hono → server}/docs/rpc-doc.js +1 -1
- package/build/server/docs/rpc-doc.js.map +1 -0
- package/build/{implementations/http/hono → server}/docs/stream-doc.d.ts +2 -2
- package/build/{implementations/http/hono → server}/docs/stream-doc.js +1 -1
- package/build/server/docs/stream-doc.js.map +1 -0
- package/build/server/errors/dispatch.d.ts +96 -0
- package/build/{implementations/http/error-dispatch.js → server/errors/dispatch.js} +20 -10
- package/build/server/errors/dispatch.js.map +1 -0
- package/build/server/errors/dispatch.test.d.ts +1 -0
- package/build/server/errors/dispatch.test.js +418 -0
- package/build/server/errors/dispatch.test.js.map +1 -0
- package/build/{implementations/http/error-taxonomy.d.ts → server/errors/taxonomy.d.ts} +8 -17
- package/build/{implementations/http/error-taxonomy.js → server/errors/taxonomy.js} +6 -15
- package/build/server/errors/taxonomy.js.map +1 -0
- package/build/server/errors/taxonomy.test.d.ts +1 -0
- package/build/{implementations/http/error-taxonomy.test.js → server/errors/taxonomy.test.js} +45 -39
- package/build/server/errors/taxonomy.test.js.map +1 -0
- package/build/server/index.d.ts +29 -0
- package/build/server/index.js +27 -0
- package/build/server/index.js.map +1 -0
- package/build/server/no-framework-imports.test.d.ts +1 -0
- package/build/server/no-framework-imports.test.js +40 -0
- package/build/server/no-framework-imports.test.js.map +1 -0
- package/build/{implementations/http/hono/path.d.ts → server/paths.d.ts} +2 -3
- package/build/{implementations/http/hono/path.js → server/paths.js} +1 -1
- package/build/server/paths.js.map +1 -0
- package/build/server/paths.test.d.ts +1 -0
- package/build/server/paths.test.js +111 -0
- package/build/server/paths.test.js.map +1 -0
- package/build/server/request/params.d.ts +29 -0
- package/build/server/request/params.js +43 -0
- package/build/server/request/params.js.map +1 -0
- package/build/server/request/params.test.d.ts +1 -0
- package/build/server/request/params.test.js +91 -0
- package/build/server/request/params.test.js.map +1 -0
- package/build/server/request/query.d.ts +9 -0
- package/build/server/request/query.js +22 -0
- package/build/server/request/query.js.map +1 -0
- package/build/server/request/query.test.d.ts +1 -0
- package/build/server/request/query.test.js +60 -0
- package/build/server/request/query.test.js.map +1 -0
- package/build/server/sse.d.ts +70 -0
- package/build/server/sse.js +94 -0
- package/build/server/sse.js.map +1 -0
- package/build/server/sse.test.d.ts +1 -0
- package/build/server/sse.test.js +98 -0
- package/build/server/sse.test.js.map +1 -0
- package/build/{implementations → server}/types.d.ts +17 -15
- package/build/{implementations → server}/types.js.map +1 -1
- package/docs/astro-adapter.md +8 -9
- package/docs/client-and-codegen.md +4 -4
- package/docs/client-error-handling.md +5 -5
- package/docs/codegen-kotlin.md +2 -3
- package/docs/codegen-swift.md +1 -2
- package/docs/core.md +135 -54
- package/docs/http-integrations.md +58 -6
- package/docs/migration-v8-to-v9.md +192 -0
- package/docs/plans/2026-06-09-v9-rewrite.md +130 -0
- package/docs/specs/2026-06-09-v9-rewrite-design.md +221 -0
- package/docs/streaming.md +12 -0
- package/package.json +23 -47
- package/src/{implementations/http → adapters}/astro/index.test.ts +2 -2
- package/src/adapters/hono/__fixtures__/parity-envelope.json +389 -0
- package/src/adapters/hono/envelope-parity.test.ts +126 -0
- package/src/{implementations/http → adapters}/hono/handlers/http-stream.test.ts +1 -1
- package/src/adapters/hono/handlers/http-stream.ts +73 -0
- package/src/{implementations/http → adapters}/hono/handlers/http.test.ts +1 -1
- package/src/adapters/hono/handlers/http.ts +70 -0
- package/src/{implementations/http → adapters}/hono/handlers/rpc.test.ts +2 -2
- package/src/adapters/hono/handlers/rpc.ts +39 -0
- package/src/{implementations/http → adapters}/hono/handlers/stream.test.ts +4 -3
- package/src/{implementations/http → adapters}/hono/handlers/stream.ts +19 -92
- package/src/{implementations/http → adapters}/hono/index.test.ts +14 -16
- package/src/{implementations/http → adapters}/hono/index.ts +35 -30
- package/src/{implementations/http → adapters/hono}/on-request-error.test.ts +3 -3
- package/src/adapters/hono/request.ts +28 -0
- package/src/{implementations/http → adapters/hono}/route-errors.test.ts +5 -5
- package/src/{implementations/http → adapters}/hono/types.ts +43 -20
- package/src/client/freeze.test.ts +41 -0
- package/src/client/typed-error-dispatch.test.ts +3 -3
- package/src/codegen/__fixtures__/make-envelope.ts +1 -1
- package/src/codegen/__fixtures__/models-envelope.json +310 -0
- package/src/codegen/__goldens__/MANIFEST.json +85 -0
- package/src/codegen/__goldens__/kotlin-default--models/Billing.kt +112 -0
- package/src/codegen/__goldens__/kotlin-default--models/BillingReports.kt +26 -0
- package/src/codegen/__goldens__/kotlin-default--models/Orders.kt +88 -0
- package/src/codegen/__goldens__/kotlin-default--users/Users.kt +189 -0
- package/src/codegen/__goldens__/swift-default--models/Billing.swift +97 -0
- package/src/codegen/__goldens__/swift-default--models/BillingReports.swift +20 -0
- package/src/codegen/__goldens__/swift-default--models/Orders.swift +81 -0
- package/src/codegen/__goldens__/swift-default--users/Users.swift +204 -0
- package/src/codegen/__goldens__/ts-default--models/_client.ts +1319 -0
- package/src/codegen/__goldens__/ts-default--models/_errors.ts +90 -0
- package/src/codegen/__goldens__/ts-default--models/_models.ts +10 -0
- package/src/codegen/__goldens__/ts-default--models/_types.ts +502 -0
- package/src/codegen/__goldens__/ts-default--models/billing-reports.ts +29 -0
- package/src/codegen/__goldens__/ts-default--models/billing.ts +67 -0
- package/src/codegen/__goldens__/ts-default--models/index.ts +48 -0
- package/src/codegen/__goldens__/ts-default--models/orders.ts +80 -0
- package/src/codegen/__goldens__/ts-default--users/_client.ts +1319 -0
- package/src/codegen/__goldens__/ts-default--users/_errors.ts +90 -0
- package/src/codegen/__goldens__/ts-default--users/_types.ts +502 -0
- package/src/codegen/__goldens__/ts-default--users/index.ts +38 -0
- package/src/codegen/__goldens__/ts-default--users/users.ts +169 -0
- package/src/codegen/__goldens__/ts-external-runtime--models/_errors.ts +90 -0
- package/src/codegen/__goldens__/ts-external-runtime--models/_models.ts +10 -0
- package/src/codegen/__goldens__/ts-external-runtime--models/billing-reports.ts +29 -0
- package/src/codegen/__goldens__/ts-external-runtime--models/billing.ts +67 -0
- package/src/codegen/__goldens__/ts-external-runtime--models/index.ts +48 -0
- package/src/codegen/__goldens__/ts-external-runtime--models/orders.ts +80 -0
- package/src/codegen/__goldens__/ts-external-runtime--users/_errors.ts +90 -0
- package/src/codegen/__goldens__/ts-external-runtime--users/index.ts +38 -0
- package/src/codegen/__goldens__/ts-external-runtime--users/users.ts +169 -0
- package/src/codegen/__goldens__/ts-flat--models/_client.ts +1319 -0
- package/src/codegen/__goldens__/ts-flat--models/_errors.ts +87 -0
- package/src/codegen/__goldens__/ts-flat--models/_models.ts +10 -0
- package/src/codegen/__goldens__/ts-flat--models/_types.ts +502 -0
- package/src/codegen/__goldens__/ts-flat--models/billing-reports.ts +28 -0
- package/src/codegen/__goldens__/ts-flat--models/billing.ts +51 -0
- package/src/codegen/__goldens__/ts-flat--models/index.ts +42 -0
- package/src/codegen/__goldens__/ts-flat--models/orders.ts +73 -0
- package/src/codegen/__goldens__/ts-flat--users/_client.ts +1319 -0
- package/src/codegen/__goldens__/ts-flat--users/_errors.ts +87 -0
- package/src/codegen/__goldens__/ts-flat--users/_types.ts +502 -0
- package/src/codegen/__goldens__/ts-flat--users/index.ts +34 -0
- package/src/codegen/__goldens__/ts-flat--users/users.ts +126 -0
- package/src/codegen/__goldens__/ts-no-share-models--models/_client.ts +1319 -0
- package/src/codegen/__goldens__/ts-no-share-models--models/_errors.ts +90 -0
- package/src/codegen/__goldens__/ts-no-share-models--models/_types.ts +502 -0
- package/src/codegen/__goldens__/ts-no-share-models--models/billing-reports.ts +29 -0
- package/src/codegen/__goldens__/ts-no-share-models--models/billing.ts +111 -0
- package/src/codegen/__goldens__/ts-no-share-models--models/index.ts +48 -0
- package/src/codegen/__goldens__/ts-no-share-models--models/orders.ts +112 -0
- package/src/codegen/__goldens__/ts-no-share-models--users/_client.ts +1319 -0
- package/src/codegen/__goldens__/ts-no-share-models--users/_errors.ts +90 -0
- package/src/codegen/__goldens__/ts-no-share-models--users/_types.ts +502 -0
- package/src/codegen/__goldens__/ts-no-share-models--users/index.ts +38 -0
- package/src/codegen/__goldens__/ts-no-share-models--users/users.ts +169 -0
- package/src/codegen/__goldens__/ts-shared-models-module--models/_client.ts +1319 -0
- package/src/codegen/__goldens__/ts-shared-models-module--models/_errors.ts +90 -0
- package/src/codegen/__goldens__/ts-shared-models-module--models/_models.ts +7 -0
- package/src/codegen/__goldens__/ts-shared-models-module--models/_types.ts +502 -0
- package/src/codegen/__goldens__/ts-shared-models-module--models/billing-reports.ts +29 -0
- package/src/codegen/__goldens__/ts-shared-models-module--models/billing.ts +67 -0
- package/src/codegen/__goldens__/ts-shared-models-module--models/index.ts +48 -0
- package/src/codegen/__goldens__/ts-shared-models-module--models/orders.ts +80 -0
- package/src/codegen/bin/cli.test.ts +13 -2
- package/src/codegen/bin/cli.ts +181 -144
- package/src/codegen/bin/flag-specs.test.ts +16 -1
- package/src/codegen/bin/flag-specs.ts +43 -31
- package/src/codegen/bundle-size.test.ts +1 -1
- package/src/codegen/collect-models.ts +1 -1
- package/src/codegen/e2e.test.ts +1 -1
- package/src/codegen/emit/api-route.ts +184 -0
- package/src/codegen/emit/context.ts +32 -0
- package/src/codegen/emit/declarations.ts +49 -0
- package/src/codegen/emit/format-types.ts +232 -0
- package/src/codegen/emit/http-stream-route.ts +162 -0
- package/src/codegen/emit/route-shared.ts +102 -0
- package/src/codegen/emit/rpc-route.ts +49 -0
- package/src/codegen/emit/scope-file.ts +226 -0
- package/src/codegen/emit/stream-route.ts +81 -0
- package/src/codegen/emit-errors.integration.test.ts +2 -2
- package/src/codegen/emit-errors.test.ts +1 -1
- package/src/codegen/emit-errors.ts +1 -1
- package/src/codegen/emit-scope.test.ts +2 -2
- package/src/codegen/emit-scope.ts +15 -1048
- package/src/codegen/goldens.test.ts +89 -0
- package/src/codegen/group-routes.test.ts +1 -1
- package/src/codegen/group-routes.ts +1 -1
- package/src/codegen/pipeline.test.ts +1 -1
- package/src/codegen/pipeline.ts +1 -1
- package/src/codegen/resolve-envelope.test.ts +1 -1
- package/src/codegen/resolve-envelope.ts +1 -1
- package/src/codegen/targets/_shared/error-schemas.test.ts +1 -1
- package/src/codegen/targets/_shared/error-schemas.ts +1 -1
- package/src/codegen/targets/_shared/route-slots.test.ts +1 -1
- package/src/codegen/targets/_shared/route-slots.ts +1 -1
- package/src/codegen/targets/_shared/target-run.ts +1 -1
- package/src/codegen/targets/kotlin/emit-route-kotlin.test.ts +1 -1
- package/src/codegen/targets/kotlin/emit-route-kotlin.ts +1 -1
- package/src/codegen/targets/kotlin/emit-scope-kotlin.test.ts +1 -1
- package/src/codegen/targets/swift/access-level.test.ts +1 -1
- package/src/codegen/targets/swift/emit-route-swift.test.ts +1 -1
- package/src/codegen/targets/swift/emit-route-swift.ts +1 -1
- package/src/codegen/targets/swift/emit-scope-swift.test.ts +1 -1
- package/src/codegen/targets/ts/shared-models.test.ts +1 -1
- package/src/{create-http-stream.test.ts → core/create-http-stream.test.ts} +1 -1
- package/src/core/create-http-stream.ts +207 -0
- package/src/{create-http.test.ts → core/create-http.test.ts} +15 -4
- package/src/core/create-http.ts +126 -0
- package/src/{create-stream.test.ts → core/create-stream.test.ts} +28 -31
- package/src/core/create-stream.ts +142 -0
- package/src/{create.test.ts → core/create.test.ts} +25 -57
- package/src/core/create.ts +121 -0
- package/src/{stack-utils.test.ts → core/definition-site.test.ts} +14 -3
- package/src/{stack-utils.ts → core/definition-site.ts} +20 -23
- package/src/{errors.test.ts → core/errors.test.ts} +1 -1
- package/src/{errors.ts → core/errors.ts} +30 -28
- package/src/core/factory-options.test.ts +112 -0
- package/src/core/http-route.ts +73 -0
- package/src/core/internal.ts +203 -0
- package/src/{migration.test.ts → core/migration.test.ts} +23 -1
- package/src/{index.test.ts → core/procedures.test.ts} +13 -11
- package/src/core/procedures.ts +75 -0
- package/src/core/types.ts +195 -0
- package/src/exports.ts +60 -11
- package/src/schema/adapter.test.ts +58 -0
- package/src/schema/adapter.ts +45 -0
- package/src/schema/compile.test.ts +95 -0
- package/src/schema/compile.ts +64 -0
- package/src/schema/compute-schema.test.ts +222 -41
- package/src/schema/compute-schema.ts +145 -71
- package/src/schema/json-schema.ts +21 -0
- package/src/schema/typebox.test.ts +40 -0
- package/src/schema/typebox.ts +27 -0
- package/src/server/context.test.ts +22 -0
- package/src/server/context.ts +18 -0
- package/src/{doc-envelope.test.ts → server/doc-envelope.test.ts} +2 -2
- package/src/{doc-envelope.ts → server/doc-envelope.ts} +1 -1
- package/src/{implementations/http → server}/doc-registry.test.ts +32 -26
- package/src/{implementations/http → server}/doc-registry.ts +11 -7
- package/src/server/docs/docs.test.ts +287 -0
- package/src/{implementations/http/hono → server}/docs/http-doc.ts +3 -3
- package/src/{implementations/http/hono → server}/docs/http-stream-doc.ts +3 -3
- package/src/{implementations/http/hono → server}/docs/rpc-doc.ts +3 -3
- package/src/{implementations/http/hono → server}/docs/stream-doc.ts +3 -3
- package/src/server/errors/dispatch.test.ts +450 -0
- package/src/server/errors/dispatch.ts +189 -0
- package/src/{implementations/http/error-taxonomy.test.ts → server/errors/taxonomy.test.ts} +45 -39
- package/src/{implementations/http/error-taxonomy.ts → server/errors/taxonomy.ts} +8 -17
- package/src/server/index.ts +29 -0
- package/src/server/no-framework-imports.test.ts +43 -0
- package/src/server/paths.test.ts +141 -0
- package/src/{implementations/http/hono/path.ts → server/paths.ts} +2 -13
- package/src/server/request/params.test.ts +143 -0
- package/src/server/request/params.ts +68 -0
- package/src/server/request/query.test.ts +70 -0
- package/src/server/request/query.ts +24 -0
- package/src/server/sse.test.ts +113 -0
- package/src/server/sse.ts +117 -0
- package/src/{implementations → server}/types.ts +17 -16
- package/build/create-http-stream.d.ts +0 -58
- package/build/create-http-stream.js +0 -122
- package/build/create-http-stream.js.map +0 -1
- package/build/create-http-stream.test.js.map +0 -1
- package/build/create-http.d.ts +0 -49
- package/build/create-http.js +0 -108
- package/build/create-http.js.map +0 -1
- package/build/create-http.test.js.map +0 -1
- package/build/create-stream.d.ts +0 -35
- package/build/create-stream.js +0 -123
- package/build/create-stream.js.map +0 -1
- package/build/create-stream.test.js.map +0 -1
- package/build/create.d.ts +0 -28
- package/build/create.js +0 -82
- package/build/create.js.map +0 -1
- package/build/create.test.js.map +0 -1
- package/build/doc-envelope.js.map +0 -1
- package/build/doc-envelope.test.js.map +0 -1
- package/build/errors.js.map +0 -1
- package/build/errors.test.js.map +0 -1
- package/build/implementations/http/astro/astro-context.js.map +0 -1
- package/build/implementations/http/astro/create-handler.js.map +0 -1
- package/build/implementations/http/astro/index.js.map +0 -1
- package/build/implementations/http/astro/index.test.js.map +0 -1
- package/build/implementations/http/astro/rewrite-request.js.map +0 -1
- package/build/implementations/http/doc-registry.js.map +0 -1
- package/build/implementations/http/doc-registry.test.js.map +0 -1
- package/build/implementations/http/error-dispatch.d.ts +0 -76
- package/build/implementations/http/error-dispatch.js.map +0 -1
- package/build/implementations/http/error-dispatch.test.js +0 -254
- package/build/implementations/http/error-dispatch.test.js.map +0 -1
- package/build/implementations/http/error-taxonomy.js.map +0 -1
- package/build/implementations/http/error-taxonomy.test.js.map +0 -1
- package/build/implementations/http/hono/docs/http-doc.js.map +0 -1
- package/build/implementations/http/hono/docs/http-stream-doc.js.map +0 -1
- package/build/implementations/http/hono/docs/rpc-doc.js.map +0 -1
- package/build/implementations/http/hono/docs/stream-doc.js.map +0 -1
- package/build/implementations/http/hono/handlers/http-stream.js +0 -123
- package/build/implementations/http/hono/handlers/http-stream.js.map +0 -1
- package/build/implementations/http/hono/handlers/http-stream.test.js.map +0 -1
- package/build/implementations/http/hono/handlers/http.js +0 -110
- package/build/implementations/http/hono/handlers/http.js.map +0 -1
- package/build/implementations/http/hono/handlers/http.test.js.map +0 -1
- package/build/implementations/http/hono/handlers/rpc.js +0 -32
- package/build/implementations/http/hono/handlers/rpc.js.map +0 -1
- package/build/implementations/http/hono/handlers/rpc.test.js.map +0 -1
- package/build/implementations/http/hono/handlers/stream.d.ts +0 -23
- package/build/implementations/http/hono/handlers/stream.js +0 -147
- package/build/implementations/http/hono/handlers/stream.js.map +0 -1
- package/build/implementations/http/hono/handlers/stream.test.js.map +0 -1
- package/build/implementations/http/hono/index.js.map +0 -1
- package/build/implementations/http/hono/index.test.js.map +0 -1
- package/build/implementations/http/hono/path.js.map +0 -1
- package/build/implementations/http/hono/path.test.js +0 -83
- package/build/implementations/http/hono/path.test.js.map +0 -1
- package/build/implementations/http/hono/types.d.ts +0 -51
- package/build/implementations/http/hono/types.js.map +0 -1
- package/build/implementations/http/on-request-error.test.js.map +0 -1
- package/build/implementations/http/route-errors.test.js.map +0 -1
- package/build/index.d.ts +0 -175
- package/build/index.js +0 -47
- package/build/index.js.map +0 -1
- package/build/index.test.js.map +0 -1
- package/build/migration.test.js.map +0 -1
- package/build/schema/extract-json-schema.d.ts +0 -2
- package/build/schema/extract-json-schema.js +0 -12
- package/build/schema/extract-json-schema.js.map +0 -1
- package/build/schema/extract-json-schema.test.js +0 -23
- package/build/schema/extract-json-schema.test.js.map +0 -1
- package/build/schema/parser.d.ts +0 -36
- package/build/schema/parser.js +0 -210
- package/build/schema/parser.js.map +0 -1
- package/build/schema/parser.test.js +0 -120
- package/build/schema/parser.test.js.map +0 -1
- package/build/schema/resolve-schema-lib.d.ts +0 -12
- package/build/schema/resolve-schema-lib.js +0 -11
- package/build/schema/resolve-schema-lib.js.map +0 -1
- package/build/schema/resolve-schema-lib.test.js +0 -17
- package/build/schema/resolve-schema-lib.test.js.map +0 -1
- package/build/schema/types.d.ts +0 -8
- package/build/schema/types.js +0 -2
- package/build/stack-utils.d.ts +0 -25
- package/build/stack-utils.js.map +0 -1
- package/build/stack-utils.test.js.map +0 -1
- package/build/types.d.ts +0 -142
- package/build/types.js +0 -2
- package/build/types.js.map +0 -1
- package/docs/decisions/2026-06-02-monorepo-split-evaluation.md +0 -80
- package/docs/handoffs/2026-06-08-dx-round2-declines.md +0 -45
- package/docs/handoffs/ajsc-named-type-collision.md +0 -134
- package/docs/handoffs/ajsc-named-type-support.md +0 -181
- package/docs/handoffs/shared-models-auto-resolve-response.md +0 -181
- package/docs/npm-workspaces-migration-plan.md +0 -611
- package/docs/superpowers/plans/2026-04-24-doc-registry-simplification.md +0 -886
- package/docs/superpowers/plans/2026-04-24-kotlin-codegen-target.md +0 -1265
- package/docs/superpowers/plans/2026-04-25-ajsc-v7-kotlin-polish.md +0 -1993
- package/docs/superpowers/plans/2026-04-29-safe-result-api.md +0 -2293
- package/docs/superpowers/plans/2026-05-07-astro-adapter.md +0 -1391
- package/docs/superpowers/plans/2026-05-08-create-http.md +0 -3355
- package/docs/superpowers/plans/2026-05-08-hono-app-builder-convergence.md +0 -3365
- package/docs/superpowers/plans/2026-06-05-dx-feedback-round.md +0 -1292
- package/docs/superpowers/plans/2026-06-06-shared-models-convention-and-diagnostics.md +0 -659
- package/docs/superpowers/plans/2026-06-08-codegen-dx-surfacing.md +0 -428
- package/docs/superpowers/specs/2026-04-24-kotlin-swift-codegen-design.md +0 -401
- package/docs/superpowers/specs/2026-04-25-ajsc-v7-kotlin-polish-design.md +0 -314
- package/docs/superpowers/specs/2026-04-25-swift-codegen-design.md +0 -264
- package/docs/superpowers/specs/2026-04-29-safe-result-api-design.md +0 -324
- package/docs/superpowers/specs/2026-05-07-astro-adapter-design.md +0 -252
- package/docs/superpowers/specs/2026-05-08-create-http-design.md +0 -409
- package/docs/superpowers/specs/2026-05-08-hono-app-builder-convergence-design.md +0 -411
- package/docs/superpowers/specs/2026-06-05-dx-feedback-round-design.md +0 -285
- package/docs/superpowers/specs/2026-06-08-dx-feedback-round-2-design.md +0 -376
- package/src/create-http-stream.ts +0 -191
- package/src/create-http.ts +0 -210
- package/src/create-stream.ts +0 -228
- package/src/create.ts +0 -172
- package/src/implementations/http/README.md +0 -390
- package/src/implementations/http/error-dispatch.test.ts +0 -283
- package/src/implementations/http/error-dispatch.ts +0 -176
- package/src/implementations/http/hono/handlers/http-stream.ts +0 -152
- package/src/implementations/http/hono/handlers/http.ts +0 -145
- package/src/implementations/http/hono/handlers/rpc.ts +0 -54
- package/src/implementations/http/hono/path.test.ts +0 -96
- package/src/index.ts +0 -101
- package/src/schema/extract-json-schema.test.ts +0 -25
- package/src/schema/extract-json-schema.ts +0 -15
- package/src/schema/parser.test.ts +0 -182
- package/src/schema/parser.ts +0 -265
- package/src/schema/resolve-schema-lib.test.ts +0 -19
- package/src/schema/resolve-schema-lib.ts +0 -29
- package/src/schema/types.ts +0 -20
- package/src/types.ts +0 -133
- /package/build/{implementations/http → adapters}/astro/astro-context.d.ts +0 -0
- /package/build/{implementations/http → adapters}/astro/astro-context.js +0 -0
- /package/build/{implementations/http → adapters}/astro/create-handler.d.ts +0 -0
- /package/build/{implementations/http → adapters}/astro/create-handler.js +0 -0
- /package/build/{implementations/http → adapters}/astro/index.d.ts +0 -0
- /package/build/{implementations/http → adapters}/astro/index.js +0 -0
- /package/build/{implementations/http → adapters}/astro/index.test.d.ts +0 -0
- /package/build/{implementations/http → adapters}/astro/rewrite-request.d.ts +0 -0
- /package/build/{implementations/http → adapters}/astro/rewrite-request.js +0 -0
- /package/build/{create-http-stream.test.d.ts → adapters/hono/envelope-parity.test.d.ts} +0 -0
- /package/build/{implementations/http → adapters}/hono/handlers/http-stream.test.d.ts +0 -0
- /package/build/{implementations/http → adapters}/hono/handlers/http.test.d.ts +0 -0
- /package/build/{implementations/http → adapters}/hono/handlers/rpc.test.d.ts +0 -0
- /package/build/{implementations/http → adapters}/hono/handlers/stream.test.d.ts +0 -0
- /package/build/{implementations/http → adapters}/hono/index.test.d.ts +0 -0
- /package/build/{implementations/http → adapters/hono}/on-request-error.test.d.ts +0 -0
- /package/build/{implementations/http → adapters/hono}/route-errors.test.d.ts +0 -0
- /package/build/{create-http.test.d.ts → client/freeze.test.d.ts} +0 -0
- /package/build/{create-stream.test.d.ts → codegen/goldens.test.d.ts} +0 -0
- /package/build/{create.test.d.ts → core/create-http-stream.test.d.ts} +0 -0
- /package/build/{doc-envelope.test.d.ts → core/create-http.test.d.ts} +0 -0
- /package/build/{errors.test.d.ts → core/create-stream.test.d.ts} +0 -0
- /package/build/{implementations/http/doc-registry.test.d.ts → core/create.test.d.ts} +0 -0
- /package/build/{implementations/http/error-dispatch.test.d.ts → core/definition-site.test.d.ts} +0 -0
- /package/build/{implementations/http/error-taxonomy.test.d.ts → core/errors.test.d.ts} +0 -0
- /package/build/{errors.test.js → core/errors.test.js} +0 -0
- /package/build/{implementations/http/hono/path.test.d.ts → core/factory-options.test.d.ts} +0 -0
- /package/build/{migration.test.d.ts → core/migration.test.d.ts} +0 -0
- /package/build/{index.test.d.ts → core/procedures.test.d.ts} +0 -0
- /package/build/{implementations/http/hono → core}/types.js +0 -0
- /package/build/schema/{extract-json-schema.test.d.ts → adapter.test.d.ts} +0 -0
- /package/build/schema/{parser.test.d.ts → compile.test.d.ts} +0 -0
- /package/build/schema/{resolve-schema-lib.test.d.ts → typebox.test.d.ts} +0 -0
- /package/build/{stack-utils.test.d.ts → server/context.test.d.ts} +0 -0
- /package/build/{doc-envelope.js → server/doc-envelope.js} +0 -0
- /package/build/{doc-envelope.test.js → server/doc-envelope.test.js} +0 -0
- /package/build/{implementations → server}/types.js +0 -0
- /package/src/{implementations/http → adapters}/astro/README.md +0 -0
- /package/src/{implementations/http → adapters}/astro/astro-context.ts +0 -0
- /package/src/{implementations/http → adapters}/astro/create-handler.ts +0 -0
- /package/src/{implementations/http → adapters}/astro/index.ts +0 -0
- /package/src/{implementations/http → adapters}/astro/rewrite-request.ts +0 -0
|
@@ -5,40 +5,42 @@ You are assisting a developer using **ts-procedures**, a TypeScript RPC framewor
|
|
|
5
5
|
## Core Flow
|
|
6
6
|
|
|
7
7
|
```
|
|
8
|
-
Procedures<TContext, TExtendedConfig>(
|
|
8
|
+
Procedures<TContext, TExtendedConfig>(options?)
|
|
9
9
|
↓
|
|
10
|
-
Create(name, config, handler)
|
|
11
|
-
CreateStream(name, config, handler)
|
|
10
|
+
Create(name, config, handler) → Standard async procedure (kind: 'rpc')
|
|
11
|
+
CreateStream(name, config, handler) → Streaming async generator (kind: 'rpc-stream')
|
|
12
|
+
CreateHttp(name, config, handler) → REST-style HTTP route (kind: 'http')
|
|
13
|
+
CreateHttpStream(name, config, handler) → REST-style streaming route (kind: 'http-stream')
|
|
12
14
|
↓
|
|
13
15
|
Returns: { [name]: handler, procedure: handler, info: metadata }
|
|
14
16
|
```
|
|
15
17
|
|
|
18
|
+
Every registration and every creator's `info` carries the `kind` discriminant — branch on it (there is no `isStream` flag).
|
|
19
|
+
|
|
16
20
|
## Imports
|
|
17
21
|
|
|
18
22
|
```typescript
|
|
19
23
|
// Core
|
|
20
24
|
import { Procedures } from 'ts-procedures'
|
|
21
|
-
import type { TLocalContext, TStreamContext, TProcedureRegistration, TStreamProcedureRegistration } from 'ts-procedures'
|
|
25
|
+
import type { Infer, SchemaAdapter, TLocalContext, TStreamContext, TProcedureRegistration, TStreamProcedureRegistration } from 'ts-procedures'
|
|
22
26
|
|
|
23
27
|
// Errors
|
|
24
28
|
import { ProcedureError, ProcedureValidationError, ProcedureYieldValidationError, ProcedureRegistrationError } from 'ts-procedures'
|
|
25
29
|
|
|
26
30
|
// HTTP types
|
|
27
|
-
import type { RPCConfig, RPCHttpRouteDoc, StreamHttpRouteDoc, StreamMode } from 'ts-procedures/http'
|
|
28
|
-
|
|
29
|
-
// Hono RPC
|
|
30
|
-
import { HonoAppBuilder } from 'ts-procedures/hono'
|
|
31
|
+
import type { RPCConfig, APIConfig, APIInput, RPCHttpRouteDoc, StreamHttpRouteDoc, StreamMode } from 'ts-procedures/http'
|
|
31
32
|
|
|
32
|
-
// Hono
|
|
33
|
-
import { HonoAppBuilder, sse } from 'ts-procedures/hono'
|
|
34
|
-
|
|
35
|
-
// Hono API (REST-style)
|
|
36
|
-
import { HonoAppBuilder } from 'ts-procedures/hono'
|
|
37
|
-
import type { APIConfig, APIInput } from 'ts-procedures/hono'
|
|
33
|
+
// Hono (RPC, streaming, REST — one unified builder)
|
|
34
|
+
import { HonoAppBuilder, sse, defineErrorTaxonomy } from 'ts-procedures/hono'
|
|
38
35
|
|
|
39
36
|
// Doc Registry — compose route docs from multiple builders
|
|
40
37
|
import { DocRegistry } from 'ts-procedures/http-docs'
|
|
41
38
|
import type { DocEnvelope, HeaderDoc, ErrorDoc } from 'ts-procedures/http-docs'
|
|
39
|
+
|
|
40
|
+
// Server toolkit — transport-agnostic building blocks for writing custom adapters (Fastify, Express, ...)
|
|
41
|
+
// Also re-exports DocRegistry, writeDocEnvelope, defineErrorTaxonomy, sse, and the doc builders
|
|
42
|
+
import { dispatchPreStreamError, dispatchMidStreamError, extractReqChannels, buildRpcRouteDoc, SseEventSequencer } from 'ts-procedures/server'
|
|
43
|
+
import type { RequestSource } from 'ts-procedures/server'
|
|
42
44
|
```
|
|
43
45
|
|
|
44
46
|
## Architecture Rules
|
|
@@ -51,7 +53,7 @@ import type { DocEnvelope, HeaderDoc, ErrorDoc } from 'ts-procedures/http-docs'
|
|
|
51
53
|
|
|
52
54
|
4. **Stream handlers always have ctx.signal (guaranteed AbortSignal).** Standard handlers get it when HTTP implementations provide it. Check `signal.reason === 'stream-completed'` to distinguish normal completion from client disconnect.
|
|
53
55
|
|
|
54
|
-
5. **Use TypeBox for schemas** (`import { Type } from 'typebox'`). Plain JSON Schema objects are not recognized. AJV config: `allErrors: true`, `coerceTypes: true`, `removeAdditional: true
|
|
56
|
+
5. **Use TypeBox for schemas** (`import { Type } from 'typebox'`). Plain JSON Schema objects are not recognized. TypeBox is the built-in schema library; other libraries plug in via the `SchemaAdapter` interface (`Procedures({ schema: { adapters: [myAdapter] } })` — `{ name, detect, toJsonSchema }`). Custom adapters get runtime validation + docs only; compile-time `Infer<T>` inference is TypeBox-only. Default AJV config: `allErrors: true`, `coerceTypes: true`, `removeAdditional: true` — customize per factory via `Procedures({ validation: { ajv } })` (options merged over defaults, or a configured Ajv instance). The bundled TypeBox does **not** export `Type.Composite` — compose schemas with a flat property spread (`Type.Object({ ...Base.properties, name: Type.String() })`), which also keeps the generated JSON Schema a single `object` instead of an `allOf`.
|
|
55
57
|
|
|
56
58
|
6. **One factory per access level.** Separate `Procedures()` factories for public, authenticated, admin contexts.
|
|
57
59
|
|
|
@@ -59,7 +61,9 @@ import type { DocEnvelope, HeaderDoc, ErrorDoc } from 'ts-procedures/http-docs'
|
|
|
59
61
|
|
|
60
62
|
8. **getProcedures() for introspection.** Returns all registered procedures with metadata.
|
|
61
63
|
|
|
62
|
-
9. **`Procedures({
|
|
64
|
+
9. **`Procedures({ validation: false })` skips per-call AJV validation** for every procedure on the factory (all four creators, both `schema.params` and `schema.req`). JSON Schema and validators are still computed at registration time (bad schemas still fail fast), so codegen and `info.schema` are unaffected; only the per-call validator runs are bypassed. **Never enable this on a factory whose handlers are reachable from public/untrusted callers** — coerceTypes and removeAdditional also stop running. Reserve for trusted internal factories whose callers are already type-checked at build time. Independent of the per-call `ctx.isPrevalidated` escape hatch used by HTTP builders.
|
|
65
|
+
|
|
66
|
+
10. **`Procedures({ http: { pathPrefix, scope } })` sets factory-level defaults for `CreateHttp` / `CreateHttpStream`.** `pathPrefix` is prepended to every route's `path` at registration time — it becomes part of the route's identity (shows up in `config.path` and route docs), unlike the builder-level `pathPrefix`, which is a deployment mount point. `scope` is the default codegen scope for routes that don't set one; per-route values win.
|
|
63
67
|
|
|
64
68
|
## Procedure Pattern
|
|
65
69
|
|
|
@@ -138,15 +142,17 @@ StreamRPC.CreateStream('Feed', {
|
|
|
138
142
|
}
|
|
139
143
|
})
|
|
140
144
|
|
|
141
|
-
const app = new HonoAppBuilder({ defaultStreamMode: 'sse' })
|
|
145
|
+
const app = new HonoAppBuilder({ stream: { defaultStreamMode: 'sse' } })
|
|
142
146
|
.register(StreamRPC, (c) => ({ userId: c.req.header('x-user-id') }))
|
|
143
147
|
.build()
|
|
144
148
|
// GET|POST /events/feed/1
|
|
145
149
|
```
|
|
146
150
|
|
|
147
|
-
|
|
151
|
+
SSE wire behavior is identical for `rpc-stream` and `http-stream` routes (one shared `SseEventSequencer`): `sse(data, { event, id, retry })` metadata is honored on yields and error events of both kinds, and a `null` yield serializes as empty SSE data on both.
|
|
152
|
+
|
|
153
|
+
## Hono API Pattern (REST-style) — `CreateHttp`
|
|
148
154
|
|
|
149
|
-
|
|
155
|
+
HTTP routes use `CreateHttp` (not `Create + APIConfig`). Request channels live under `schema.req` (`pathParams`, `query`, `body`, `headers`); response docs under `schema.res`. The factory needs no `APIConfig` type parameter.
|
|
150
156
|
|
|
151
157
|
```typescript
|
|
152
158
|
import { HonoAppBuilder } from 'ts-procedures/hono'
|
|
@@ -174,13 +180,16 @@ const app = new HonoAppBuilder({ pathPrefix: '/api' })
|
|
|
174
180
|
// GET /api/users/:id → 200, POST /api/users → 201
|
|
175
181
|
```
|
|
176
182
|
|
|
177
|
-
|
|
183
|
+
Streaming HTTP routes use `CreateHttpStream` with `schema.yield` (and optional `schema.res.headers`) — both schemas flow into route docs and generated client types.
|
|
178
184
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
185
|
+
**v8 → v9 migration:**
|
|
186
|
+
|
|
187
|
+
1. `Procedures({ config: { noRuntimeValidation: true } })` → `Procedures({ validation: false })`
|
|
188
|
+
2. Suretype schemas → TypeBox (or a custom `SchemaAdapter`); `isSuretypeSchema` removed
|
|
189
|
+
3. `registration.isStream` → branch on the `kind` discriminant (`'rpc' | 'rpc-stream' | 'http' | 'http-stream'`)
|
|
190
|
+
4. Duplicate-name registration now throws `ProcedureRegistrationError` instead of a bare `Error` (same message)
|
|
191
|
+
5. `schemaParser` removed — use `computeSchema(name, schema, { adapters, compile })`; `extractJsonSchema(schema, adapters)` takes the adapter list explicitly
|
|
192
|
+
6. Codegen CLI/options/output unchanged — regenerated clients are byte-identical to v8.6.0
|
|
184
193
|
|
|
185
194
|
## Astro adapter
|
|
186
195
|
|
|
@@ -195,6 +204,8 @@ Catch-all endpoint pattern. Build Hono apps once with `HonoAppBuilder`, mount vi
|
|
|
195
204
|
| `ProcedureYieldValidationError` | Yield validation failure (validateYields: true) | N/A (mid-stream) |
|
|
196
205
|
| `ProcedureRegistrationError` | Invalid schema or duplicate name at registration | N/A (startup) |
|
|
197
206
|
|
|
207
|
+
Every framework error instance carries a `kind` field (`'procedure' | 'validation' | 'yield-validation' | 'registration'`) as an alternative to `instanceof`.
|
|
208
|
+
|
|
198
209
|
### Error Taxonomy (required for custom errors)
|
|
199
210
|
|
|
200
211
|
`defineErrorTaxonomy` maps error classes to HTTP responses declaratively. Works with `HonoAppBuilder` for `rpc`, `http`, and pre-stream paths (`rpc-stream` / `http-stream`).
|
|
@@ -235,6 +246,8 @@ new HonoAppBuilder({
|
|
|
235
246
|
|
|
236
247
|
Handlers throw the error classes directly — the builder auto-serializes. `onError` is the first-class imperative peer when you want to handle errors in one callback instead (both modes coexist). In v6 `HonoAppBuilder.onPreStreamError` was renamed to `onError`. Cross-cutting `onRequestError` observer fires for every caught error.
|
|
237
248
|
|
|
249
|
+
Custom (non-Hono) adapters consume the same taxonomy via `ts-procedures/server`'s `dispatchPreStreamError` / `dispatchMidStreamError`, which return plain data (`{ type: 'body', statusCode, body } | { type: 'response', response }` / `{ data, sseEvent?, runOnCatch? }`) — your adapter translates that into its framework's response.
|
|
250
|
+
|
|
238
251
|
### Per-route errors (typed)
|
|
239
252
|
|
|
240
253
|
Declare a route's errors via the `errors` field on the `CreateHttp` config. For compile-time typo protection, attach a `satisfies` clause to the array — do NOT pass an explicit generic. `CreateHttp` is generic over `<TName, TReq, TRes, TErrorKey>`, so a single type argument binds `TName` and breaks `schema.req` / `schema.res` inference:
|
|
@@ -298,14 +311,18 @@ onRequestStart → factoryContext() → validation → onStreamStart → handler
|
|
|
298
311
|
## Decision Framework
|
|
299
312
|
|
|
300
313
|
**Which procedure type?**
|
|
301
|
-
- Single response → `Create`
|
|
302
|
-
- Multiple values over time → `CreateStream`
|
|
314
|
+
- Single response (RPC) → `Create`
|
|
315
|
+
- Multiple values over time (RPC) → `CreateStream`
|
|
316
|
+
- REST-style route (`path` + `method`) → `CreateHttp`
|
|
317
|
+
- REST-style streaming route → `CreateHttpStream`
|
|
303
318
|
|
|
304
319
|
**Which schema library?**
|
|
305
|
-
- **TypeBox** (`import { Type } from 'typebox'`)
|
|
320
|
+
- **TypeBox** (`import { Type } from 'typebox'`) — built in, with `Infer<T>` type inference
|
|
321
|
+
- Other libraries → implement `SchemaAdapter` and pass `Procedures({ schema: { adapters: [...] } })` (runtime validation + docs only)
|
|
306
322
|
|
|
307
323
|
**Which HTTP implementation?**
|
|
308
324
|
- Hono (RPC, streams, REST, REST streams) → `HonoAppBuilder`
|
|
325
|
+
- Other frameworks (Fastify, Express, ...) → write a thin adapter on `ts-procedures/server` (doc builders, taxonomy dispatch returning data, `extractReqChannels`/`RequestSource`, `SseEventSequencer`); use the Hono adapter as the blueprint
|
|
309
326
|
|
|
310
327
|
**Stream mode?**
|
|
311
328
|
- Browser EventSource → `'sse'` (default)
|
|
@@ -318,14 +335,14 @@ onRequestStart → factoryContext() → validation → onStreamStart → handler
|
|
|
318
335
|
3. **Never put validation logic in handler** — use `schema.params`
|
|
319
336
|
4. **Never ignore ctx.signal** — pass to all async calls
|
|
320
337
|
5. **Never skip signal.aborted check in stream loops** — causes resource leaks
|
|
321
|
-
6. **Never
|
|
322
|
-
7. **Never use plain JSON Schema objects** — use TypeBox builders
|
|
338
|
+
6. **Never branch on `isStream`** — removed in v9; use the `kind` discriminant (on registrations and every creator's `info`)
|
|
339
|
+
7. **Never use plain JSON Schema objects** — use TypeBox builders (or register a `SchemaAdapter` for another library)
|
|
323
340
|
8. **Never swallow errors without re-throwing** — hides failures
|
|
324
341
|
9. **Never assume extra params fields survive** — `removeAdditional: true` strips them
|
|
325
342
|
10. **Never manually parse types AJV coerces** — `coerceTypes: true` handles it
|
|
326
|
-
11. **Never
|
|
343
|
+
11. **Never put `schema.req` on `Create`/`CreateStream` or `schema.params` on `CreateHttp`/`CreateHttpStream`** — RPC creators take `schema.params`; HTTP creators take `schema.req` channels
|
|
327
344
|
12. **Never catch raw DOMException/TypeError from generated callables** — catch `ClientTimeoutError`, `ClientAbortError`, `ClientNetworkError` instead; or use `.safe()` for Result-based narrowing
|
|
328
|
-
13. **Never use `Create` for HTTP routes (v8+)** — use `CreateHttp` (unary) or `CreateHttpStream` (streaming);
|
|
345
|
+
13. **Never use `Create` for HTTP routes (v8+)** — use `CreateHttp` (unary) or `CreateHttpStream` (streaming); request channels go under `schema.req`; `Procedures<Ctx, APIConfig>()` → `Procedures<Ctx>()`
|
|
329
346
|
|
|
330
347
|
## Testing
|
|
331
348
|
|
|
@@ -449,7 +466,7 @@ interface ProcedureCallOptions extends ProcedureCallDefaults, ClientHooks {}
|
|
|
449
466
|
```
|
|
450
467
|
|
|
451
468
|
- Defaults are set via `config.defaults`; per-call options are passed as the 2nd argument to any generated callable.
|
|
452
|
-
- Header precedence (low → high): adapter config < `defaults.headers` < per-call `headers` < route-declared `schema.
|
|
469
|
+
- Header precedence (low → high): adapter config < `defaults.headers` < per-call `headers` < route-declared `schema.req.headers` < `onBeforeRequest` mutations.
|
|
453
470
|
|
|
454
471
|
### Typed RequestMeta (Declaration Merging)
|
|
455
472
|
|
|
@@ -5,40 +5,42 @@ You are assisting a developer using **ts-procedures**, a TypeScript RPC framewor
|
|
|
5
5
|
## Core Flow
|
|
6
6
|
|
|
7
7
|
```
|
|
8
|
-
Procedures<TContext, TExtendedConfig>(
|
|
8
|
+
Procedures<TContext, TExtendedConfig>(options?)
|
|
9
9
|
↓
|
|
10
|
-
Create(name, config, handler)
|
|
11
|
-
CreateStream(name, config, handler)
|
|
10
|
+
Create(name, config, handler) → Standard async procedure (kind: 'rpc')
|
|
11
|
+
CreateStream(name, config, handler) → Streaming async generator (kind: 'rpc-stream')
|
|
12
|
+
CreateHttp(name, config, handler) → REST-style HTTP route (kind: 'http')
|
|
13
|
+
CreateHttpStream(name, config, handler) → REST-style streaming route (kind: 'http-stream')
|
|
12
14
|
↓
|
|
13
15
|
Returns: { [name]: handler, procedure: handler, info: metadata }
|
|
14
16
|
```
|
|
15
17
|
|
|
18
|
+
Every registration and every creator's `info` carries the `kind` discriminant — branch on it (there is no `isStream` flag).
|
|
19
|
+
|
|
16
20
|
## Imports
|
|
17
21
|
|
|
18
22
|
```typescript
|
|
19
23
|
// Core
|
|
20
24
|
import { Procedures } from 'ts-procedures'
|
|
21
|
-
import type { TLocalContext, TStreamContext, TProcedureRegistration, TStreamProcedureRegistration } from 'ts-procedures'
|
|
25
|
+
import type { Infer, SchemaAdapter, TLocalContext, TStreamContext, TProcedureRegistration, TStreamProcedureRegistration } from 'ts-procedures'
|
|
22
26
|
|
|
23
27
|
// Errors
|
|
24
28
|
import { ProcedureError, ProcedureValidationError, ProcedureYieldValidationError, ProcedureRegistrationError } from 'ts-procedures'
|
|
25
29
|
|
|
26
30
|
// HTTP types
|
|
27
|
-
import type { RPCConfig, RPCHttpRouteDoc, StreamHttpRouteDoc, StreamMode } from 'ts-procedures/http'
|
|
28
|
-
|
|
29
|
-
// Hono RPC
|
|
30
|
-
import { HonoAppBuilder } from 'ts-procedures/hono'
|
|
31
|
+
import type { RPCConfig, APIConfig, APIInput, RPCHttpRouteDoc, StreamHttpRouteDoc, StreamMode } from 'ts-procedures/http'
|
|
31
32
|
|
|
32
|
-
// Hono
|
|
33
|
-
import { HonoAppBuilder, sse } from 'ts-procedures/hono'
|
|
34
|
-
|
|
35
|
-
// Hono API (REST-style)
|
|
36
|
-
import { HonoAppBuilder } from 'ts-procedures/hono'
|
|
37
|
-
import type { APIConfig, APIInput } from 'ts-procedures/hono'
|
|
33
|
+
// Hono (RPC, streaming, REST — one unified builder)
|
|
34
|
+
import { HonoAppBuilder, sse, defineErrorTaxonomy } from 'ts-procedures/hono'
|
|
38
35
|
|
|
39
36
|
// Doc Registry — compose route docs from multiple builders
|
|
40
37
|
import { DocRegistry } from 'ts-procedures/http-docs'
|
|
41
38
|
import type { DocEnvelope, HeaderDoc, ErrorDoc } from 'ts-procedures/http-docs'
|
|
39
|
+
|
|
40
|
+
// Server toolkit — transport-agnostic building blocks for writing custom adapters (Fastify, Express, ...)
|
|
41
|
+
// Also re-exports DocRegistry, writeDocEnvelope, defineErrorTaxonomy, sse, and the doc builders
|
|
42
|
+
import { dispatchPreStreamError, dispatchMidStreamError, extractReqChannels, buildRpcRouteDoc, SseEventSequencer } from 'ts-procedures/server'
|
|
43
|
+
import type { RequestSource } from 'ts-procedures/server'
|
|
42
44
|
```
|
|
43
45
|
|
|
44
46
|
## Architecture Rules
|
|
@@ -51,7 +53,7 @@ import type { DocEnvelope, HeaderDoc, ErrorDoc } from 'ts-procedures/http-docs'
|
|
|
51
53
|
|
|
52
54
|
4. **Stream handlers always have ctx.signal (guaranteed AbortSignal).** Standard handlers get it when HTTP implementations provide it. Check `signal.reason === 'stream-completed'` to distinguish normal completion from client disconnect.
|
|
53
55
|
|
|
54
|
-
5. **Use TypeBox for schemas** (`import { Type } from 'typebox'`). Plain JSON Schema objects are not recognized. AJV config: `allErrors: true`, `coerceTypes: true`, `removeAdditional: true
|
|
56
|
+
5. **Use TypeBox for schemas** (`import { Type } from 'typebox'`). Plain JSON Schema objects are not recognized. TypeBox is the built-in schema library; other libraries plug in via the `SchemaAdapter` interface (`Procedures({ schema: { adapters: [myAdapter] } })` — `{ name, detect, toJsonSchema }`). Custom adapters get runtime validation + docs only; compile-time `Infer<T>` inference is TypeBox-only. Default AJV config: `allErrors: true`, `coerceTypes: true`, `removeAdditional: true` — customize per factory via `Procedures({ validation: { ajv } })` (options merged over defaults, or a configured Ajv instance). The bundled TypeBox does **not** export `Type.Composite` — compose schemas with a flat property spread (`Type.Object({ ...Base.properties, name: Type.String() })`), which also keeps the generated JSON Schema a single `object` instead of an `allOf`.
|
|
55
57
|
|
|
56
58
|
6. **One factory per access level.** Separate `Procedures()` factories for public, authenticated, admin contexts.
|
|
57
59
|
|
|
@@ -59,7 +61,9 @@ import type { DocEnvelope, HeaderDoc, ErrorDoc } from 'ts-procedures/http-docs'
|
|
|
59
61
|
|
|
60
62
|
8. **getProcedures() for introspection.** Returns all registered procedures with metadata.
|
|
61
63
|
|
|
62
|
-
9. **`Procedures({
|
|
64
|
+
9. **`Procedures({ validation: false })` skips per-call AJV validation** for every procedure on the factory (all four creators, both `schema.params` and `schema.req`). JSON Schema and validators are still computed at registration time (bad schemas still fail fast), so codegen and `info.schema` are unaffected; only the per-call validator runs are bypassed. **Never enable this on a factory whose handlers are reachable from public/untrusted callers** — coerceTypes and removeAdditional also stop running. Reserve for trusted internal factories whose callers are already type-checked at build time. Independent of the per-call `ctx.isPrevalidated` escape hatch used by HTTP builders.
|
|
65
|
+
|
|
66
|
+
10. **`Procedures({ http: { pathPrefix, scope } })` sets factory-level defaults for `CreateHttp` / `CreateHttpStream`.** `pathPrefix` is prepended to every route's `path` at registration time — it becomes part of the route's identity (shows up in `config.path` and route docs), unlike the builder-level `pathPrefix`, which is a deployment mount point. `scope` is the default codegen scope for routes that don't set one; per-route values win.
|
|
63
67
|
|
|
64
68
|
## Procedure Pattern
|
|
65
69
|
|
|
@@ -138,15 +142,17 @@ StreamRPC.CreateStream('Feed', {
|
|
|
138
142
|
}
|
|
139
143
|
})
|
|
140
144
|
|
|
141
|
-
const app = new HonoAppBuilder({ defaultStreamMode: 'sse' })
|
|
145
|
+
const app = new HonoAppBuilder({ stream: { defaultStreamMode: 'sse' } })
|
|
142
146
|
.register(StreamRPC, (c) => ({ userId: c.req.header('x-user-id') }))
|
|
143
147
|
.build()
|
|
144
148
|
// GET|POST /events/feed/1
|
|
145
149
|
```
|
|
146
150
|
|
|
147
|
-
|
|
151
|
+
SSE wire behavior is identical for `rpc-stream` and `http-stream` routes (one shared `SseEventSequencer`): `sse(data, { event, id, retry })` metadata is honored on yields and error events of both kinds, and a `null` yield serializes as empty SSE data on both.
|
|
152
|
+
|
|
153
|
+
## Hono API Pattern (REST-style) — `CreateHttp`
|
|
148
154
|
|
|
149
|
-
|
|
155
|
+
HTTP routes use `CreateHttp` (not `Create + APIConfig`). Request channels live under `schema.req` (`pathParams`, `query`, `body`, `headers`); response docs under `schema.res`. The factory needs no `APIConfig` type parameter.
|
|
150
156
|
|
|
151
157
|
```typescript
|
|
152
158
|
import { HonoAppBuilder } from 'ts-procedures/hono'
|
|
@@ -174,13 +180,16 @@ const app = new HonoAppBuilder({ pathPrefix: '/api' })
|
|
|
174
180
|
// GET /api/users/:id → 200, POST /api/users → 201
|
|
175
181
|
```
|
|
176
182
|
|
|
177
|
-
|
|
183
|
+
Streaming HTTP routes use `CreateHttpStream` with `schema.yield` (and optional `schema.res.headers`) — both schemas flow into route docs and generated client types.
|
|
178
184
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
185
|
+
**v8 → v9 migration:**
|
|
186
|
+
|
|
187
|
+
1. `Procedures({ config: { noRuntimeValidation: true } })` → `Procedures({ validation: false })`
|
|
188
|
+
2. Suretype schemas → TypeBox (or a custom `SchemaAdapter`); `isSuretypeSchema` removed
|
|
189
|
+
3. `registration.isStream` → branch on the `kind` discriminant (`'rpc' | 'rpc-stream' | 'http' | 'http-stream'`)
|
|
190
|
+
4. Duplicate-name registration now throws `ProcedureRegistrationError` instead of a bare `Error` (same message)
|
|
191
|
+
5. `schemaParser` removed — use `computeSchema(name, schema, { adapters, compile })`; `extractJsonSchema(schema, adapters)` takes the adapter list explicitly
|
|
192
|
+
6. Codegen CLI/options/output unchanged — regenerated clients are byte-identical to v8.6.0
|
|
184
193
|
|
|
185
194
|
## Astro adapter
|
|
186
195
|
|
|
@@ -195,6 +204,8 @@ Catch-all endpoint pattern. Build Hono apps once with `HonoAppBuilder`, mount vi
|
|
|
195
204
|
| `ProcedureYieldValidationError` | Yield validation failure (validateYields: true) | N/A (mid-stream) |
|
|
196
205
|
| `ProcedureRegistrationError` | Invalid schema or duplicate name at registration | N/A (startup) |
|
|
197
206
|
|
|
207
|
+
Every framework error instance carries a `kind` field (`'procedure' | 'validation' | 'yield-validation' | 'registration'`) as an alternative to `instanceof`.
|
|
208
|
+
|
|
198
209
|
### Error Taxonomy (required for custom errors)
|
|
199
210
|
|
|
200
211
|
`defineErrorTaxonomy` maps error classes to HTTP responses declaratively. Works with `HonoAppBuilder` for `rpc`, `http`, and pre-stream paths (`rpc-stream` / `http-stream`).
|
|
@@ -235,6 +246,8 @@ new HonoAppBuilder({
|
|
|
235
246
|
|
|
236
247
|
Handlers throw the error classes directly — the builder auto-serializes. `onError` is the first-class imperative peer when you want to handle errors in one callback instead (both modes coexist). In v6 `HonoAppBuilder.onPreStreamError` was renamed to `onError`. Cross-cutting `onRequestError` observer fires for every caught error.
|
|
237
248
|
|
|
249
|
+
Custom (non-Hono) adapters consume the same taxonomy via `ts-procedures/server`'s `dispatchPreStreamError` / `dispatchMidStreamError`, which return plain data (`{ type: 'body', statusCode, body } | { type: 'response', response }` / `{ data, sseEvent?, runOnCatch? }`) — your adapter translates that into its framework's response.
|
|
250
|
+
|
|
238
251
|
### Per-route errors (typed)
|
|
239
252
|
|
|
240
253
|
Declare a route's errors via the `errors` field on the `CreateHttp` config. For compile-time typo protection, attach a `satisfies` clause to the array — do NOT pass an explicit generic. `CreateHttp` is generic over `<TName, TReq, TRes, TErrorKey>`, so a single type argument binds `TName` and breaks `schema.req` / `schema.res` inference:
|
|
@@ -298,14 +311,18 @@ onRequestStart → factoryContext() → validation → onStreamStart → handler
|
|
|
298
311
|
## Decision Framework
|
|
299
312
|
|
|
300
313
|
**Which procedure type?**
|
|
301
|
-
- Single response → `Create`
|
|
302
|
-
- Multiple values over time → `CreateStream`
|
|
314
|
+
- Single response (RPC) → `Create`
|
|
315
|
+
- Multiple values over time (RPC) → `CreateStream`
|
|
316
|
+
- REST-style route (`path` + `method`) → `CreateHttp`
|
|
317
|
+
- REST-style streaming route → `CreateHttpStream`
|
|
303
318
|
|
|
304
319
|
**Which schema library?**
|
|
305
|
-
- **TypeBox** (`import { Type } from 'typebox'`)
|
|
320
|
+
- **TypeBox** (`import { Type } from 'typebox'`) — built in, with `Infer<T>` type inference
|
|
321
|
+
- Other libraries → implement `SchemaAdapter` and pass `Procedures({ schema: { adapters: [...] } })` (runtime validation + docs only)
|
|
306
322
|
|
|
307
323
|
**Which HTTP implementation?**
|
|
308
324
|
- Hono (RPC, streams, REST, REST streams) → `HonoAppBuilder`
|
|
325
|
+
- Other frameworks (Fastify, Express, ...) → write a thin adapter on `ts-procedures/server` (doc builders, taxonomy dispatch returning data, `extractReqChannels`/`RequestSource`, `SseEventSequencer`); use the Hono adapter as the blueprint
|
|
309
326
|
|
|
310
327
|
**Stream mode?**
|
|
311
328
|
- Browser EventSource → `'sse'` (default)
|
|
@@ -318,14 +335,14 @@ onRequestStart → factoryContext() → validation → onStreamStart → handler
|
|
|
318
335
|
3. **Never put validation logic in handler** — use `schema.params`
|
|
319
336
|
4. **Never ignore ctx.signal** — pass to all async calls
|
|
320
337
|
5. **Never skip signal.aborted check in stream loops** — causes resource leaks
|
|
321
|
-
6. **Never
|
|
322
|
-
7. **Never use plain JSON Schema objects** — use TypeBox builders
|
|
338
|
+
6. **Never branch on `isStream`** — removed in v9; use the `kind` discriminant (on registrations and every creator's `info`)
|
|
339
|
+
7. **Never use plain JSON Schema objects** — use TypeBox builders (or register a `SchemaAdapter` for another library)
|
|
323
340
|
8. **Never swallow errors without re-throwing** — hides failures
|
|
324
341
|
9. **Never assume extra params fields survive** — `removeAdditional: true` strips them
|
|
325
342
|
10. **Never manually parse types AJV coerces** — `coerceTypes: true` handles it
|
|
326
|
-
11. **Never
|
|
343
|
+
11. **Never put `schema.req` on `Create`/`CreateStream` or `schema.params` on `CreateHttp`/`CreateHttpStream`** — RPC creators take `schema.params`; HTTP creators take `schema.req` channels
|
|
327
344
|
12. **Never catch raw DOMException/TypeError from generated callables** — catch `ClientTimeoutError`, `ClientAbortError`, `ClientNetworkError` instead; or use `.safe()` for Result-based narrowing
|
|
328
|
-
13. **Never use `Create` for HTTP routes (v8+)** — use `CreateHttp` (unary) or `CreateHttpStream` (streaming);
|
|
345
|
+
13. **Never use `Create` for HTTP routes (v8+)** — use `CreateHttp` (unary) or `CreateHttpStream` (streaming); request channels go under `schema.req`; `Procedures<Ctx, APIConfig>()` → `Procedures<Ctx>()`
|
|
329
346
|
|
|
330
347
|
## Testing
|
|
331
348
|
|
|
@@ -449,7 +466,7 @@ interface ProcedureCallOptions extends ProcedureCallDefaults, ClientHooks {}
|
|
|
449
466
|
```
|
|
450
467
|
|
|
451
468
|
- Defaults are set via `config.defaults`; per-call options are passed as the 2nd argument to any generated callable.
|
|
452
|
-
- Header precedence (low → high): adapter config < `defaults.headers` < per-call `headers` < route-declared `schema.
|
|
469
|
+
- Header precedence (low → high): adapter config < `defaults.headers` < per-call `headers` < route-declared `schema.req.headers` < `onBeforeRequest` mutations.
|
|
453
470
|
|
|
454
471
|
### Typed RequestMeta (Declaration Merging)
|
|
455
472
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"astro-context.js","sourceRoot":"","sources":["../../../src/adapters/astro/astro-context.ts"],"names":[],"mappings":"AAGA,MAAM,eAAe,GAAG,IAAI,OAAO,EAAuB,CAAA;AAE1D;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB,EAAE,UAAsB;IACtE,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,CAAc;IAC5C,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,6DAA6D;YAC3D,qFAAqF,CACxF,CAAA;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-handler.js","sourceRoot":"","sources":["../../../src/adapters/astro/create-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AA2BlD,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAU,CAAA;AAE1F,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAErE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;IACnF,CAAC;IAED,MAAM,GAAG,GAAa,KAAK,EAAE,UAAU,EAAE,EAAE;QACzC,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QACpE,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC5C,CAAC;QACD,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QAEtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YACtC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;gBAAE,OAAO,GAAG,CAAA;QACpC,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAC5C,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAmB,CAAA;IACzC,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAA;IACxB,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/astro/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,mEAAmE;AACnE,mDAAmD;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -4,7 +4,7 @@ import { Type } from 'typebox';
|
|
|
4
4
|
import { stripPrefix } from './rewrite-request.js';
|
|
5
5
|
import { setAstroContext, getAstroContext } from './astro-context.js';
|
|
6
6
|
import { createAstroHandler } from './create-handler.js';
|
|
7
|
-
import { Procedures } from '
|
|
7
|
+
import { Procedures } from '../../core/procedures.js';
|
|
8
8
|
import { HonoAppBuilder } from '../hono/index.js';
|
|
9
9
|
// Minimal stand-in for Astro's APIContext for unit tests.
|
|
10
10
|
function fakeApiContext(overrides = {}) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/adapters/astro/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGjD,0DAA0D;AAC1D,SAAS,cAAc,CAAC,YAAqC,EAAE;IAC7D,OAAO;QACL,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;QAC/B,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,IAAI,OAAO,CAAC,uBAAuB,CAAC;QAC7C,GAAG,EAAE,IAAI,GAAG,CAAC,uBAAuB,CAAC;QACrC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACnD,GAAG,SAAS;KAC4B,CAAA;AAC5C,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,GAAG,GAAG,UAAU,EAAqD,CAAA;IAC3E,GAAG,CAAC,UAAU,CACZ,SAAS,EACT;QACE,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,KAAK;QACb,MAAM,EAAE;YACN,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACvD,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;SACvE;KACF,EACD,KAAK,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC5B,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QACnC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAA;QACpC,OAAO,CAAC,CAAA;IACV,CAAC,CACF,CAAA;IACD,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;IACrD,OAAO,IAAI,cAAc,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;AACnE,CAAC;AAED,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC7D,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,kCAAkC,CAAC,CAAA;QAC3D,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAClE,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,8BAA8B,CAAC,CAAA;QACvD,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,kCAAkC,CAAC,CAAA;QAC3D,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAE,CAAA;QACrC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACjD,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,kCAAkC,CAAC,CAAA;QAC3D,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAE,CAAA;QACpC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACvD,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,kCAAkC,CAAC,CAAA;QAC3D,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAE,CAAA;QACtC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC1C,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAAA;QACnD,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAE,CAAA;QACrC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,uEAAuE,EAAE,GAAG,EAAE;QACjF,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,oCAAoC,CAAC,CAAA;QAC7D,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACtF,qEAAqE;QACrE,MAAM,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,oCAAoC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACzF,MAAM,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,+BAA+B,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpF,MAAM,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,mCAAmC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC1F,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAC1D,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,qDAAqD,CAAC,CAAA;QAC9E,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAE,CAAA;QACrC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACnC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACxC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,gCAAgC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QAC7E,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAE,CAAA;QACrC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC7B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,gCAAgC,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE;SACzE,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAE,CAAA;QACrC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACrD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,4BAA4B,CAAC,CAAA;QACrD,MAAM,UAAU,GAAG,cAAc,EAAE,CAAA;QACnC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QAEhC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,IAAI,QAAQ,GAAsC,IAAI,CAAA;QACtD,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACtB,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;YAC7B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAChC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,IAAI,QAAQ,GAAY,IAAI,CAAA;QAC5B,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACtB,IAAI,CAAC;gBACH,eAAe,CAAC,CAAC,CAAC,CAAA;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,GAAG,GAAG,CAAA;YAChB,CAAC;YACD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEF,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAA;QAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QACtC,MAAM,CAAE,QAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAA;IAChF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC3D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAA;QACnE,MAAM,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC5C,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAU,EAAE,CAAC;YACtF,MAAM,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAA;QAClE,MAAM,UAAU,GAAG,cAAc,CAAC;YAChC,OAAO,EAAE,IAAI,OAAO,CAAC,8BAA8B,CAAC;YACpD,GAAG,EAAE,IAAI,GAAG,CAAC,8BAA8B,CAAC;SAC7C,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;QACjC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;IACjE,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACrD,iDAAiD;QACjD,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAA;QAChC,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;QACrE,MAAM,UAAU,GAAG,cAAc,CAAC;YAChC,OAAO,EAAE,IAAI,OAAO,CAAC,kCAAkC,CAAC;YACxD,GAAG,EAAE,IAAI,GAAG,CAAC,kCAAkC,CAAC;SACjD,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;QACjC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;QACtF,MAAM,UAAU,GAAG,cAAc,CAAC;YAChC,OAAO,EAAE,IAAI,OAAO,CAAC,qCAAqC,CAAC;YAC3D,GAAG,EAAE,IAAI,GAAG,CAAC,qCAAqC,CAAC;SACpD,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;QACjC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,GAAG,GAAG,UAAU,EAAmC,CAAA;QACzD,GAAG,CAAC,UAAU,CACZ,QAAQ,EACR;YACE,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;SAC7F,EACD,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAClD,CAAA;QAED,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE;aAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;YACnB,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;YAChC,OAAO,EAAE,IAAI,EAAG,KAAK,CAAC,MAAoC,CAAC,IAAI,IAAI,IAAI,EAAE,CAAA;QAC3E,CAAC,CAAC;aACD,KAAK,EAAE,CAAA;QAEV,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;QACjD,MAAM,UAAU,GAAG,cAAc,CAAC;YAChC,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;YAChC,OAAO,EAAE,IAAI,OAAO,CAAC,6BAA6B,CAAC;YACnD,GAAG,EAAE,IAAI,GAAG,CAAC,6BAA6B,CAAC;SAC5C,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;QACjC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,SAAS,gBAAgB,CAAC,IAAY,EAAE,MAAc,EAAE,IAAa;QACnE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAa,CAAC,CAAC,CAAA;QACjD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,CAAC,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;QACzD,MAAM,CAAC,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;QACzD,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;QAEpD,MAAM,UAAU,GAAG,cAAc,CAAC;YAChC,OAAO,EAAE,IAAI,OAAO,CAAC,6BAA6B,CAAC;YACnD,GAAG,EAAE,IAAI,GAAG,CAAC,6BAA6B,CAAC;SAC5C,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;QACjC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,CAAC,GAAG,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACzD,MAAM,CAAC,GAAG,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;QACxD,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;QAEpD,MAAM,UAAU,GAAG,cAAc,CAAC;YAChC,OAAO,EAAE,IAAI,OAAO,CAAC,4BAA4B,CAAC;YAClD,GAAG,EAAE,IAAI,GAAG,CAAC,4BAA4B,CAAC;SAC3C,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;QACjC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;QACpD,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;QACpD,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;QAEpD,MAAM,UAAU,GAAG,cAAc,CAAC;YAChC,OAAO,EAAE,IAAI,OAAO,CAAC,2BAA2B,CAAC;YACjD,GAAG,EAAE,IAAI,GAAG,CAAC,2BAA2B,CAAC;SAC1C,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;QACjC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,IAAI,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,MAAM,GAAG,UAAU,EAAiB,CAAA;QAC1C,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;YACE,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,CAAC;YACV,MAAM,EAAE;gBACN,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;aAC7C;SACF,EACD,KAAK,SAAS,CAAC;YACb,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;YACd,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;YACd,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;QAChB,CAAC,CACF,CAAA;QAED,MAAM,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;QAC3E,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QAEvD,MAAM,UAAU,GAAG,cAAc,CAAC;YAChC,OAAO,EAAE,IAAI,OAAO,CAAC,wCAAwC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YACjF,GAAG,EAAE,IAAI,GAAG,CAAC,wCAAwC,CAAC;SACvD,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;QACjC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;QAEtE,kEAAkE;QAClE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;QACvC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;QACvC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,IAAI,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACzF,IAAI,cAAuC,CAAA;QAC3C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC5C,MAAM,GAAG,GAAG,UAAU,EAAM,CAAA;YAC5B,GAAG,CAAC,UAAU,CACZ,MAAM,EACN;gBACE,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;aAC/D,EACD,KAAK,EAAE,GAAG,EAAE,EAAE;gBACZ,cAAc,GAAG,GAAG,CAAC,MAAM,CAAA;gBAC3B,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;gBACtE,wCAAwC;gBACxC,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;gBAClD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;YACrB,CAAC,CACF,CAAA;YACD,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;YAClE,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;YAEjD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;YACxC,MAAM,UAAU,GAAG,cAAc,CAAC;gBAChC,OAAO,EAAE,IAAI,OAAO,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;gBAChF,GAAG,EAAE,IAAI,GAAG,CAAC,2BAA2B,CAAC;aAC1C,CAAC,CAAA;YAEF,uEAAuE;YACvE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAChD,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;QAEF,MAAM,OAAO,CAAA;QACb,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewrite-request.js","sourceRoot":"","sources":["../../../src/adapters/astro/rewrite-request.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,MAA0B;IACtE,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,OAAO,CAAA;IACxC,MAAM,UAAU,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IACvD,IAAI,UAAU,KAAK,GAAG;QAAE,OAAO,OAAO,CAAA;IAEtC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAA;IAErD,2EAA2E;IAC3E,yEAAyE;IACzE,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAChD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IAE3D,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAClD,GAAG,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;IAEvC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AAClC,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { describe, expect, it } from 'vitest';
|
|
5
|
+
import { Type } from 'typebox';
|
|
6
|
+
import { Procedures } from '../../core/procedures.js';
|
|
7
|
+
import { HonoAppBuilder, defineErrorTaxonomy } from './index.js';
|
|
8
|
+
/**
|
|
9
|
+
* THE envelope contract test: the v9 builder must emit a DocEnvelope
|
|
10
|
+
* deep-equal to what v8.6.0 emitted for the same procedure set. The fixture
|
|
11
|
+
* was captured from the v8 build by `tools/capture-parity-envelope.mjs` —
|
|
12
|
+
* the procedure set below is that script's twin and MUST stay in sync with it.
|
|
13
|
+
*
|
|
14
|
+
* The envelope is codegen's input; if this test fails, generated client output
|
|
15
|
+
* WILL drift.
|
|
16
|
+
*
|
|
17
|
+
* ONE documented deviation from the raw v8 capture: v8's CreateHttpStream
|
|
18
|
+
* dropped the `yield` schema (and `res.headers`) from http-stream route docs —
|
|
19
|
+
* the registration stored `yieldType` while the doc builder read `yield`. v9
|
|
20
|
+
* fixes that, so the fixture's TailUser route was patched to include the
|
|
21
|
+
* `yield` schema the builder now (correctly) emits. Everything else is the
|
|
22
|
+
* untouched v8 capture.
|
|
23
|
+
*/
|
|
24
|
+
class TeapotError extends Error {
|
|
25
|
+
}
|
|
26
|
+
describe('DocEnvelope parity with v8.6.0', () => {
|
|
27
|
+
it('emits a deep-equal envelope for the reference procedure set', async () => {
|
|
28
|
+
const factory = Procedures();
|
|
29
|
+
const { Create, CreateStream, CreateHttp, CreateHttpStream } = factory;
|
|
30
|
+
Create('GetUser', {
|
|
31
|
+
scope: 'users',
|
|
32
|
+
version: 1,
|
|
33
|
+
errors: ['Teapot'],
|
|
34
|
+
description: 'Fetch one user',
|
|
35
|
+
schema: {
|
|
36
|
+
params: Type.Object({ id: Type.String() }),
|
|
37
|
+
returnType: Type.Object({ id: Type.String(), name: Type.String() }),
|
|
38
|
+
},
|
|
39
|
+
}, async (_ctx, params) => ({ id: params.id, name: 'x' }));
|
|
40
|
+
CreateStream('WatchUser', {
|
|
41
|
+
scope: ['users', 'live'],
|
|
42
|
+
version: 2,
|
|
43
|
+
schema: {
|
|
44
|
+
params: Type.Object({ id: Type.String() }),
|
|
45
|
+
yieldType: Type.Object({ at: Type.Number() }),
|
|
46
|
+
returnType: Type.Object({ total: Type.Number() }),
|
|
47
|
+
},
|
|
48
|
+
}, async function* () {
|
|
49
|
+
yield { at: 1 };
|
|
50
|
+
return { total: 1 };
|
|
51
|
+
});
|
|
52
|
+
CreateHttp('UpdateUser', {
|
|
53
|
+
path: '/users/:id',
|
|
54
|
+
method: 'put',
|
|
55
|
+
successStatus: 200,
|
|
56
|
+
scope: 'users',
|
|
57
|
+
errors: ['Teapot'],
|
|
58
|
+
schema: {
|
|
59
|
+
req: {
|
|
60
|
+
pathParams: Type.Object({ id: Type.String() }),
|
|
61
|
+
query: Type.Object({ dryRun: Type.Optional(Type.Boolean()) }),
|
|
62
|
+
body: Type.Object({ name: Type.String() }),
|
|
63
|
+
},
|
|
64
|
+
res: {
|
|
65
|
+
body: Type.Object({ id: Type.String(), name: Type.String() }),
|
|
66
|
+
headers: Type.Object({ 'x-rev': Type.String() }),
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
}, async (_ctx, req) => ({
|
|
70
|
+
body: { id: req.pathParams.id, name: req.body.name },
|
|
71
|
+
headers: { 'x-rev': '1' },
|
|
72
|
+
}));
|
|
73
|
+
CreateHttpStream('TailUser', {
|
|
74
|
+
path: '/users/:id/tail',
|
|
75
|
+
method: 'get',
|
|
76
|
+
scope: 'users',
|
|
77
|
+
schema: {
|
|
78
|
+
req: { pathParams: Type.Object({ id: Type.String() }) },
|
|
79
|
+
yield: Type.Object({ line: Type.String() }),
|
|
80
|
+
returnType: Type.Object({ lines: Type.Number() }),
|
|
81
|
+
},
|
|
82
|
+
}, async function* () {
|
|
83
|
+
yield { line: 'a' };
|
|
84
|
+
return { lines: 1 };
|
|
85
|
+
});
|
|
86
|
+
const taxonomy = defineErrorTaxonomy({
|
|
87
|
+
Teapot: { class: TeapotError, statusCode: 418, description: 'Short and stout.' },
|
|
88
|
+
});
|
|
89
|
+
const builder = new HonoAppBuilder({ pathPrefix: '/api', errors: taxonomy });
|
|
90
|
+
builder.register(factory, {});
|
|
91
|
+
builder.build();
|
|
92
|
+
const fixturePath = resolve(dirname(fileURLToPath(import.meta.url)), '__fixtures__/parity-envelope.json');
|
|
93
|
+
const expected = JSON.parse(await readFile(fixturePath, 'utf-8'));
|
|
94
|
+
const actual = JSON.parse(JSON.stringify(builder.toDocEnvelope()));
|
|
95
|
+
expect(actual).toEqual(expected);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=envelope-parity.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope-parity.test.js","sourceRoot":"","sources":["../../../src/adapters/hono/envelope-parity.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Hono } from 'hono';
|
|
2
|
-
import type { THttpStreamProcedureRegistration } from '
|
|
2
|
+
import type { THttpStreamProcedureRegistration } from '../../../core/types.js';
|
|
3
3
|
import type { DocAccumulator, HonoAppBuilderConfig, HonoFactoryItem } from '../types.js';
|
|
4
4
|
export declare function installHttpStreamRoute(params: {
|
|
5
5
|
app: Hono;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { streamSSE } from 'hono/streaming';
|
|
2
|
+
import { dispatchMidStreamError, dispatchPreStreamError } from '../../../server/errors/dispatch.js';
|
|
3
|
+
import { buildHttpStreamRouteDoc } from '../../../server/docs/http-stream-doc.js';
|
|
4
|
+
import { resolveFactoryContext } from '../../../server/context.js';
|
|
5
|
+
import { extractReqChannels } from '../../../server/request/params.js';
|
|
6
|
+
import { parseQueryNative } from '../../../server/request/query.js';
|
|
7
|
+
import { SseEventSequencer } from '../../../server/sse.js';
|
|
8
|
+
import { honoRequestSource, respondToDispatch } from '../request.js';
|
|
9
|
+
import { midStreamErrorConfig, preStreamErrorConfig } from '../types.js';
|
|
10
|
+
export function installHttpStreamRoute(params) {
|
|
11
|
+
const { app, procedure, factoryItem, cfg, docs } = params;
|
|
12
|
+
const queryParser = cfg.api?.queryParser ?? parseQueryNative;
|
|
13
|
+
const route = buildHttpStreamRouteDoc(procedure, cfg.pathPrefix, factoryItem.extendProcedureDoc);
|
|
14
|
+
docs.push(route);
|
|
15
|
+
const reqSchema = procedure.config.schema?.req;
|
|
16
|
+
app.on(procedure.config.method.toUpperCase(), route.fullPath, async (c) => {
|
|
17
|
+
try {
|
|
18
|
+
const context = await resolveFactoryContext(factoryItem.factoryContext, c);
|
|
19
|
+
const reqParams = reqSchema
|
|
20
|
+
? await extractReqChannels(honoRequestSource(c), procedure.config.method, reqSchema, queryParser)
|
|
21
|
+
: undefined;
|
|
22
|
+
const { stream: gen, initialHeaders } = await procedure.handler({ ...context, signal: c.req.raw.signal }, reqParams);
|
|
23
|
+
if (initialHeaders) {
|
|
24
|
+
for (const [k, v] of Object.entries(initialHeaders))
|
|
25
|
+
c.header(k, v);
|
|
26
|
+
}
|
|
27
|
+
cfg.stream?.onStreamStart?.(procedure, c, 'sse');
|
|
28
|
+
return streamSSE(c, async (stream) => {
|
|
29
|
+
const events = new SseEventSequencer((e) => stream.writeSSE(e), procedure.name);
|
|
30
|
+
try {
|
|
31
|
+
await events.pump(gen);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
const dispatched = await dispatchMidStreamError({
|
|
35
|
+
err: error,
|
|
36
|
+
procedure,
|
|
37
|
+
raw: c,
|
|
38
|
+
cfg: midStreamErrorConfig(cfg),
|
|
39
|
+
});
|
|
40
|
+
await events.writeError(dispatched);
|
|
41
|
+
if (dispatched.runOnCatch)
|
|
42
|
+
await dispatched.runOnCatch();
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
cfg.stream?.onStreamEnd?.(procedure, c, 'sse');
|
|
46
|
+
cfg.onRequestEnd?.(c);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
return respondToDispatch(c, await dispatchPreStreamError({ err: error, procedure, raw: c, cfg: preStreamErrorConfig(cfg) }));
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=http-stream.js.map
|