ts-procedures 8.5.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-index.js +13 -0
- package/build/codegen/emit-index.js.map +1 -1
- package/build/codegen/emit-index.test.js +25 -0
- package/build/codegen/emit-index.test.js.map +1 -1
- package/build/codegen/emit-scope.d.ts +13 -30
- package/build/codegen/emit-scope.js +15 -807
- package/build/codegen/emit-scope.js.map +1 -1
- package/build/codegen/emit-scope.test.js +86 -4
- package/build/codegen/emit-scope.test.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 +92 -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 +83 -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/__fixtures__/users-envelope.json +9 -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-index.test.ts +34 -0
- package/src/codegen/emit-index.ts +19 -0
- package/src/codegen/emit-scope.test.ts +96 -6
- package/src/codegen/emit-scope.ts +15 -1003
- 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/__fixtures__/users-golden.kt +6 -0
- 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/__fixtures__/users-golden.swift +6 -0
- 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/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/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/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
|
@@ -1,15 +1,20 @@
|
|
|
1
|
-
import { formatDefinitionInfo } from './stack-utils.js';
|
|
2
1
|
import { kebabCase } from 'es-toolkit/string';
|
|
2
|
+
import { formatDefinitionInfo } from './definition-site.js';
|
|
3
|
+
/**
|
|
4
|
+
* Base error for everything the framework throws. Produced by `ctx.error()`
|
|
5
|
+
* in handlers, and used to box non-ProcedureError throws (with the original
|
|
6
|
+
* error as `cause`). Carries the procedure's definition site so stack traces
|
|
7
|
+
* point at the definition, not just the call.
|
|
8
|
+
*/
|
|
3
9
|
export class ProcedureError extends Error {
|
|
4
10
|
procedureName;
|
|
5
11
|
message;
|
|
6
12
|
meta;
|
|
13
|
+
kind = 'procedure';
|
|
7
14
|
cause;
|
|
8
15
|
definedAt;
|
|
9
16
|
definitionStack;
|
|
10
|
-
constructor(procedureName, message, meta,
|
|
11
|
-
// Used for error stack trace details
|
|
12
|
-
definitionInfo) {
|
|
17
|
+
constructor(procedureName, message, meta, definitionInfo) {
|
|
13
18
|
super(message);
|
|
14
19
|
this.procedureName = procedureName;
|
|
15
20
|
this.message = message;
|
|
@@ -21,20 +26,16 @@ export class ProcedureError extends Error {
|
|
|
21
26
|
this.enhanceStack();
|
|
22
27
|
}
|
|
23
28
|
// https://www.dannyguo.com/blog/how-to-fix-instanceof-not-working-for-custom-errors-in-typescript/
|
|
24
|
-
Object.setPrototypeOf(this,
|
|
29
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
25
30
|
}
|
|
26
|
-
/**
|
|
27
|
-
* Returns a formatted string showing where the procedure was defined.
|
|
28
|
-
*/
|
|
31
|
+
/** Returns `file:line:column` of the procedure definition, when captured. */
|
|
29
32
|
getDefinitionLocation() {
|
|
30
33
|
if (!this.definedAt) {
|
|
31
34
|
return undefined;
|
|
32
35
|
}
|
|
33
36
|
return `${this.definedAt.file}:${this.definedAt.line}:${this.definedAt.column}`;
|
|
34
37
|
}
|
|
35
|
-
/**
|
|
36
|
-
* Enhances the error stack with definition location information.
|
|
37
|
-
*/
|
|
38
|
+
/** Appends the definition-site section to the error stack. */
|
|
38
39
|
enhanceStack() {
|
|
39
40
|
if (!this.stack || !this.definedAt) {
|
|
40
41
|
return;
|
|
@@ -45,12 +46,12 @@ export class ProcedureError extends Error {
|
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
48
|
}
|
|
49
|
+
/** Schema validation failure for params / req channels (400 in the default taxonomy). */
|
|
48
50
|
export class ProcedureValidationError extends ProcedureError {
|
|
49
51
|
procedureName;
|
|
50
52
|
errors;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
definitionInfo) {
|
|
53
|
+
kind = 'validation';
|
|
54
|
+
constructor(procedureName, message, errors, definitionInfo) {
|
|
54
55
|
const readableErrors = errors
|
|
55
56
|
?.map((err) => `- ${kebabCase(err.instancePath).replace('-', '.')} ${err.message}`)
|
|
56
57
|
.join(', ');
|
|
@@ -58,34 +59,28 @@ export class ProcedureValidationError extends ProcedureError {
|
|
|
58
59
|
this.procedureName = procedureName;
|
|
59
60
|
this.errors = errors;
|
|
60
61
|
this.name = 'ProcedureValidationError';
|
|
61
|
-
// https://www.dannyguo.com/blog/how-to-fix-instanceof-not-working-for-custom-errors-in-typescript/
|
|
62
|
-
Object.setPrototypeOf(this, ProcedureValidationError.prototype);
|
|
63
62
|
}
|
|
64
63
|
}
|
|
64
|
+
/** Invalid registration: bad schema, duplicate name, misplaced config fields. */
|
|
65
65
|
export class ProcedureRegistrationError extends ProcedureError {
|
|
66
66
|
procedureName;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
definitionInfo) {
|
|
67
|
+
kind = 'registration';
|
|
68
|
+
constructor(procedureName, message, definitionInfo) {
|
|
70
69
|
super(procedureName, message, undefined, definitionInfo);
|
|
71
70
|
this.procedureName = procedureName;
|
|
72
71
|
this.name = 'ProcedureRegistrationError';
|
|
73
|
-
// https://www.dannyguo.com/blog/how-to-fix-instanceof-not-working-for-custom-errors-in-typescript/
|
|
74
|
-
Object.setPrototypeOf(this, ProcedureRegistrationError.prototype);
|
|
75
72
|
}
|
|
76
73
|
}
|
|
74
|
+
/** Stream yield failed schema validation (only with `validateYields: true`). */
|
|
77
75
|
export class ProcedureYieldValidationError extends ProcedureError {
|
|
78
76
|
procedureName;
|
|
79
77
|
errors;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
definitionInfo) {
|
|
78
|
+
kind = 'yield-validation';
|
|
79
|
+
constructor(procedureName, message, errors, definitionInfo) {
|
|
83
80
|
super(procedureName, message, undefined, definitionInfo);
|
|
84
81
|
this.procedureName = procedureName;
|
|
85
82
|
this.errors = errors;
|
|
86
83
|
this.name = 'ProcedureYieldValidationError';
|
|
87
|
-
// https://www.dannyguo.com/blog/how-to-fix-instanceof-not-working-for-custom-errors-in-typescript/
|
|
88
|
-
Object.setPrototypeOf(this, ProcedureYieldValidationError.prototype);
|
|
89
84
|
}
|
|
90
85
|
}
|
|
91
86
|
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAG7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAK3D;;;;;GAKG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAO5B;IACA;IACA;IARF,IAAI,GAAuB,WAAW,CAAA;IAC/C,KAAK,CAAU;IACN,SAAS,CAAqB;IAC9B,eAAe,CAAS;IAEjC,YACW,aAAqB,EACrB,OAAe,EACf,IAAa,EACtB,cAA+B;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAA;QALL,kBAAa,GAAb,aAAa,CAAQ;QACrB,YAAO,GAAP,OAAO,CAAQ;QACf,SAAI,GAAJ,IAAI,CAAS;QAItB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;QAE5B,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,SAAS,CAAA;YACzC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC,eAAe,CAAA;YACrD,IAAI,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC;QAED,mGAAmG;QACnG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACnD,CAAC;IAED,6EAA6E;IAC7E,qBAAqB;QACnB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAA;IACjF,CAAC;IAED,8DAA8D;IACtD,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,OAAM;QACR,CAAC;QAED,MAAM,iBAAiB,GAAG,oBAAoB,CAC5C,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,EACpE,IAAI,CAAC,aAAa,CACnB,CAAA;QAED,IAAI,iBAAiB,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAA;QAC7C,CAAC;IACH,CAAC;CACF;AAED,yFAAyF;AACzF,MAAM,OAAO,wBAAyB,SAAQ,cAAc;IAI/C;IAEA;IALO,IAAI,GAAG,YAAY,CAAA;IAErC,YACW,aAAqB,EAC9B,OAAe,EACN,MAAiC,EAC1C,cAA+B;QAE/B,MAAM,cAAc,GAAG,MAAM;YAC3B,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;aAClF,IAAI,CAAC,IAAI,CAAC,CAAA;QACb,KAAK,CAAC,aAAa,EAAE,OAAO,GAAG,GAAG,GAAG,cAAc,EAAE,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,CAAA;QARvE,kBAAa,GAAb,aAAa,CAAQ;QAErB,WAAM,GAAN,MAAM,CAA2B;QAO1C,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;IACxC,CAAC;CACF;AAED,iFAAiF;AACjF,MAAM,OAAO,0BAA2B,SAAQ,cAAc;IAIjD;IAHO,IAAI,GAAG,cAAc,CAAA;IAEvC,YACW,aAAqB,EAC9B,OAAe,EACf,cAA+B;QAE/B,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;QAJ/C,kBAAa,GAAb,aAAa,CAAQ;QAK9B,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAA;IAC1C,CAAC;CACF;AAED,gFAAgF;AAChF,MAAM,OAAO,6BAA8B,SAAQ,cAAc;IAIpD;IAEA;IALO,IAAI,GAAG,kBAAkB,CAAA;IAE3C,YACW,aAAqB,EAC9B,OAAe,EACN,MAAiC,EAC1C,cAA+B;QAE/B,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;QAL/C,kBAAa,GAAb,aAAa,CAAQ;QAErB,WAAM,GAAN,MAAM,CAA2B;QAI1C,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAA;IAC7C,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/core/errors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { Type } from 'typebox';
|
|
3
|
+
import { Procedures } from './procedures.js';
|
|
4
|
+
import { ProcedureValidationError } from './errors.js';
|
|
5
|
+
describe('Procedures factory options (new in v9)', () => {
|
|
6
|
+
describe('schema.adapters', () => {
|
|
7
|
+
// A minimal stand-in for a zod/valibot-style adapter: schema objects carry
|
|
8
|
+
// their JSON Schema under a custom marker key.
|
|
9
|
+
const fakeLibAdapter = {
|
|
10
|
+
name: 'fake-lib',
|
|
11
|
+
detect: (s) => typeof s === 'object' && s !== null && '__fakeJsonSchema' in s,
|
|
12
|
+
toJsonSchema: (s) => s.__fakeJsonSchema,
|
|
13
|
+
};
|
|
14
|
+
const fakeSchema = {
|
|
15
|
+
__fakeJsonSchema: {
|
|
16
|
+
type: 'object',
|
|
17
|
+
properties: { id: { type: 'string' } },
|
|
18
|
+
required: ['id'],
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
it('registers and validates with a custom schema adapter', async () => {
|
|
22
|
+
const { Create } = Procedures({ schema: { adapters: [fakeLibAdapter] } });
|
|
23
|
+
const { GetThing } = Create('GetThing', { schema: { params: fakeSchema } }, async (_ctx, params) => params);
|
|
24
|
+
await expect(GetThing({}, { id: 'a' })).resolves.toEqual({ id: 'a' });
|
|
25
|
+
await expect(GetThing({}, {})).rejects.toThrow(ProcedureValidationError);
|
|
26
|
+
});
|
|
27
|
+
it('custom adapters take precedence over the built-in TypeBox adapter', () => {
|
|
28
|
+
// An adapter that recognizes EVERYTHING and maps to a permissive schema —
|
|
29
|
+
// if it runs first, a TypeBox schema never reaches the typebox adapter.
|
|
30
|
+
const greedy = {
|
|
31
|
+
name: 'greedy',
|
|
32
|
+
detect: () => true,
|
|
33
|
+
toJsonSchema: () => ({ type: 'object' }),
|
|
34
|
+
};
|
|
35
|
+
const { Create } = Procedures({ schema: { adapters: [greedy] } });
|
|
36
|
+
const { Info } = { Info: Create('Info', { schema: { params: Type.Object({ n: Type.Number() }) } }, async () => 'ok') };
|
|
37
|
+
expect(Info.info.schema.params).toEqual({ type: 'object' });
|
|
38
|
+
});
|
|
39
|
+
it('TypeBox keeps working with custom adapters present', async () => {
|
|
40
|
+
const { Create } = Procedures({ schema: { adapters: [fakeLibAdapter] } });
|
|
41
|
+
const { Echo } = Create('Echo', { schema: { params: Type.Object({ n: Type.Number() }) } }, async (_ctx, p) => p);
|
|
42
|
+
await expect(Echo({}, { n: 1 })).resolves.toEqual({ n: 1 });
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('validation.ajv', () => {
|
|
46
|
+
it('merges custom AJV options over the defaults', async () => {
|
|
47
|
+
const { Create } = Procedures({ validation: { ajv: { coerceTypes: false } } });
|
|
48
|
+
const { Strict } = Create('Strict', { schema: { params: Type.Object({ n: Type.Number() }) } }, async (_ctx, p) => p);
|
|
49
|
+
// Default config would coerce '1' → 1; with coerceTypes off it must fail.
|
|
50
|
+
await expect(Strict({}, { n: '1' })).rejects.toThrow(ProcedureValidationError);
|
|
51
|
+
await expect(Strict({}, { n: 1 })).resolves.toEqual({ n: 1 });
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('http defaults', () => {
|
|
55
|
+
const reqId = { req: { pathParams: Type.Object({ id: Type.String() }) } };
|
|
56
|
+
it('applies pathPrefix and scope to CreateHttp routes', () => {
|
|
57
|
+
const { CreateHttp } = Procedures({ http: { pathPrefix: '/v1', scope: 'billing' } });
|
|
58
|
+
const { info } = CreateHttp('GetInvoice', { path: '/invoices/:id', method: 'get', schema: reqId }, async () => undefined);
|
|
59
|
+
expect(info.path).toBe('/v1/invoices/:id');
|
|
60
|
+
expect(info.scope).toBe('billing');
|
|
61
|
+
});
|
|
62
|
+
it('per-route scope wins over the factory default', () => {
|
|
63
|
+
const { CreateHttp } = Procedures({ http: { scope: 'billing' } });
|
|
64
|
+
const { info } = CreateHttp('GetReport', { path: '/reports', method: 'get', scope: 'reports', schema: {} }, async () => undefined);
|
|
65
|
+
expect(info.scope).toBe('reports');
|
|
66
|
+
expect(info.path).toBe('/reports');
|
|
67
|
+
});
|
|
68
|
+
it('applies pathPrefix to CreateHttpStream routes', () => {
|
|
69
|
+
const { CreateHttpStream } = Procedures({ http: { pathPrefix: 'v1' } });
|
|
70
|
+
const { info } = CreateHttpStream('Watch', { path: 'watch', method: 'get', schema: {} },
|
|
71
|
+
// eslint-disable-next-line require-yield
|
|
72
|
+
async function* () { return undefined; });
|
|
73
|
+
// both prefix and path get normalized to a single joining slash
|
|
74
|
+
expect(info.path).toBe('/v1/watch');
|
|
75
|
+
});
|
|
76
|
+
it('path-param consistency is checked against the prefixed path', () => {
|
|
77
|
+
const { CreateHttp } = Procedures({ http: { pathPrefix: '/v1' } });
|
|
78
|
+
expect(() => CreateHttp('Bad', { path: '/things/:id', method: 'get', schema: {} }, async () => undefined)).toThrow(/path parameters \[id\] but schema\.req\.pathParams is not defined/);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=factory-options.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory-options.test.js","sourceRoot":"","sources":["../../src/core/factory-options.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DefinitionInfo } from './definition-site.js';
|
|
2
|
+
export declare function extractPathParamNames(path: string): string[];
|
|
3
|
+
/**
|
|
4
|
+
* Applies the factory-level `http.pathPrefix` default to a route path.
|
|
5
|
+
* Both sides are normalized to exactly one joining `/`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function applyPathPrefix(prefix: string | undefined, path: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Registration-time guard: the `:params` in the path and the keys of
|
|
10
|
+
* `schema.req.pathParams` must agree exactly. Catches typos where a handler
|
|
11
|
+
* would silently receive `undefined` for a misspelled param.
|
|
12
|
+
*/
|
|
13
|
+
export declare function checkPathParamConsistency(procedureName: string, path: string, pathParamsSchema: Record<string, unknown> | undefined, definitionInfo: DefinitionInfo): void;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route-shape helpers shared by CreateHttp and CreateHttpStream.
|
|
3
|
+
*/
|
|
4
|
+
import { ProcedureRegistrationError } from './errors.js';
|
|
5
|
+
const PATH_PARAM_RE = /:([a-zA-Z_][a-zA-Z0-9_]*)/g;
|
|
6
|
+
export function extractPathParamNames(path) {
|
|
7
|
+
const matches = path.match(PATH_PARAM_RE);
|
|
8
|
+
return matches ? matches.map((m) => m.slice(1)) : [];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Applies the factory-level `http.pathPrefix` default to a route path.
|
|
12
|
+
* Both sides are normalized to exactly one joining `/`.
|
|
13
|
+
*/
|
|
14
|
+
export function applyPathPrefix(prefix, path) {
|
|
15
|
+
if (!prefix)
|
|
16
|
+
return path;
|
|
17
|
+
const normalizedPrefix = prefix.startsWith('/') ? prefix : `/${prefix}`;
|
|
18
|
+
const trimmedPrefix = normalizedPrefix.endsWith('/') ? normalizedPrefix.slice(0, -1) : normalizedPrefix;
|
|
19
|
+
const normalizedPath = path.startsWith('/') ? path : `/${path}`;
|
|
20
|
+
return `${trimmedPrefix}${normalizedPath}`;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Registration-time guard: the `:params` in the path and the keys of
|
|
24
|
+
* `schema.req.pathParams` must agree exactly. Catches typos where a handler
|
|
25
|
+
* would silently receive `undefined` for a misspelled param.
|
|
26
|
+
*/
|
|
27
|
+
export function checkPathParamConsistency(procedureName, path, pathParamsSchema, definitionInfo) {
|
|
28
|
+
const pathParamNames = extractPathParamNames(path);
|
|
29
|
+
const hasPathParams = pathParamNames.length > 0;
|
|
30
|
+
const hasSchema = pathParamsSchema !== undefined;
|
|
31
|
+
if (hasPathParams && !hasSchema) {
|
|
32
|
+
throw new ProcedureRegistrationError(procedureName, `Path "${path}" has path parameters [${pathParamNames.join(', ')}] but schema.req.pathParams is not defined.`, definitionInfo);
|
|
33
|
+
}
|
|
34
|
+
if (!hasPathParams && hasSchema) {
|
|
35
|
+
throw new ProcedureRegistrationError(procedureName, `schema.req.pathParams is defined but path "${path}" has no path parameters.`, definitionInfo);
|
|
36
|
+
}
|
|
37
|
+
if (hasPathParams && hasSchema) {
|
|
38
|
+
const schemaProperties = pathParamsSchema.properties;
|
|
39
|
+
if (schemaProperties) {
|
|
40
|
+
const schemaKeys = Object.keys(schemaProperties);
|
|
41
|
+
const missing = pathParamNames.filter((p) => !schemaKeys.includes(p));
|
|
42
|
+
const extra = schemaKeys.filter((k) => !pathParamNames.includes(k));
|
|
43
|
+
if (missing.length > 0 || extra.length > 0) {
|
|
44
|
+
const parts = [];
|
|
45
|
+
if (missing.length > 0)
|
|
46
|
+
parts.push(`path has [${missing.join(', ')}] missing from schema`);
|
|
47
|
+
if (extra.length > 0)
|
|
48
|
+
parts.push(`schema has [${extra.join(', ')}] not in path`);
|
|
49
|
+
throw new ProcedureRegistrationError(procedureName, `Path param mismatch for "${procedureName}": ${parts.join('; ')}.`, definitionInfo);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=http-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-route.js","sourceRoot":"","sources":["../../src/core/http-route.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared machinery for the four creators. Everything here is package-private:
|
|
3
|
+
* the public API is `Procedures()` and the creators it returns.
|
|
4
|
+
*/
|
|
5
|
+
import { ProcedureError } from './errors.js';
|
|
6
|
+
import type { DefinitionInfo } from './definition-site.js';
|
|
7
|
+
import type { AnyProcedureRegistration } from './types.js';
|
|
8
|
+
import type { SchemaAdapter } from '../schema/adapter.js';
|
|
9
|
+
import type { Validate, ValidatorCompiler } from '../schema/compile.js';
|
|
10
|
+
/**
|
|
11
|
+
* Everything a creator needs from its owning factory, resolved once in
|
|
12
|
+
* `Procedures()`.
|
|
13
|
+
*/
|
|
14
|
+
export type FactoryRuntime<TContext, TExtendedConfig> = {
|
|
15
|
+
registry: Map<string, AnyProcedureRegistration<TContext, TExtendedConfig>>;
|
|
16
|
+
onCreate?: (procedure: AnyProcedureRegistration<TContext, TExtendedConfig>) => void;
|
|
17
|
+
/** True when the factory was created with `validation: false`. */
|
|
18
|
+
skipValidation: boolean;
|
|
19
|
+
adapters: readonly SchemaAdapter[];
|
|
20
|
+
compile: ValidatorCompiler;
|
|
21
|
+
httpDefaults?: {
|
|
22
|
+
pathPrefix?: string;
|
|
23
|
+
scope?: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
/** Create/CreateStream reject HTTP-only config fields with a pointer to CreateHttp. */
|
|
27
|
+
export declare function assertNoHttpFields(creatorName: 'Create' | 'CreateStream', procedureName: string, config: Record<string, unknown>, definitionInfo: DefinitionInfo): void;
|
|
28
|
+
/** Duplicate names fail fast, BEFORE schema computation. */
|
|
29
|
+
export declare function assertNotDuplicate(registry: Map<string, unknown>, name: string, definitionInfo: DefinitionInfo): void;
|
|
30
|
+
/**
|
|
31
|
+
* Should this call skip runtime validation? Either the caller already
|
|
32
|
+
* validated (`ctx.isPrevalidated`, set by HTTP builders) or the whole factory
|
|
33
|
+
* opted out (`validation: false`).
|
|
34
|
+
*/
|
|
35
|
+
export declare function shouldSkipValidation(ctx: unknown, runtime: {
|
|
36
|
+
skipValidation: boolean;
|
|
37
|
+
}): boolean;
|
|
38
|
+
/** Validates RPC params; throws `ProcedureValidationError` on failure. */
|
|
39
|
+
export declare function validateParams(name: string, validate: Validate | undefined, params: unknown, definitionInfo: DefinitionInfo): void;
|
|
40
|
+
/** Validates each HTTP req channel independently; error messages name the channel. */
|
|
41
|
+
export declare function validateReqChannels(name: string, validators: Record<string, Validate> | undefined, req: unknown, definitionInfo: DefinitionInfo): void;
|
|
42
|
+
/**
|
|
43
|
+
* Boxes a non-ProcedureError thrown by a unary handler into a ProcedureError
|
|
44
|
+
* (original error as `cause`), preserving the original stack and appending
|
|
45
|
+
* the definition site. ProcedureErrors pass through untouched.
|
|
46
|
+
*/
|
|
47
|
+
export declare function toProcedureError(name: string, definitionInfo: DefinitionInfo, error: any): ProcedureError;
|
|
48
|
+
/** Appends the definition site to a thrown error's stack, in place. */
|
|
49
|
+
export declare function appendDefinitionSite(error: any, name: string, definitionInfo: DefinitionInfo): void;
|
|
50
|
+
/** Combines an incoming (e.g. HTTP request) signal with the stream's own controller. */
|
|
51
|
+
export declare function combineSignals(incoming: AbortSignal | undefined, own: AbortSignal): AbortSignal;
|
|
52
|
+
/**
|
|
53
|
+
* Drives a user stream iterator with the framework guarantees shared by
|
|
54
|
+
* CreateStream and CreateHttpStream:
|
|
55
|
+
* - optional per-yield validation (`validateYields: true`)
|
|
56
|
+
* - errors get the definition site appended to their stack — but keep their
|
|
57
|
+
* original class, so HTTP taxonomies and typed-error dispatch see the real
|
|
58
|
+
* thrown value
|
|
59
|
+
* - on ANY exit, the user iterator's `return()` runs (its `finally` blocks
|
|
60
|
+
* fire on early consumer close) and the controller aborts with reason
|
|
61
|
+
* `'stream-completed'` so handlers can distinguish completion from client
|
|
62
|
+
* disconnect
|
|
63
|
+
* - the user generator's return value is propagated (becomes the
|
|
64
|
+
* `event: 'return'` SSE payload downstream)
|
|
65
|
+
*/
|
|
66
|
+
export declare function iterateWithGuards(userIterator: AsyncIterator<any, any, unknown>, options: {
|
|
67
|
+
name: string;
|
|
68
|
+
validateYields: boolean;
|
|
69
|
+
validateYield: Validate | undefined;
|
|
70
|
+
abortController: AbortController;
|
|
71
|
+
definitionInfo: DefinitionInfo;
|
|
72
|
+
}): AsyncGenerator<any, any, unknown>;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared machinery for the four creators. Everything here is package-private:
|
|
3
|
+
* the public API is `Procedures()` and the creators it returns.
|
|
4
|
+
*/
|
|
5
|
+
import { ProcedureError, ProcedureRegistrationError, ProcedureValidationError, ProcedureYieldValidationError } from './errors.js';
|
|
6
|
+
const HTTP_FIELDS = ['path', 'method', 'req', 'res', 'successStatus'];
|
|
7
|
+
/** Create/CreateStream reject HTTP-only config fields with a pointer to CreateHttp. */
|
|
8
|
+
export function assertNoHttpFields(creatorName, procedureName, config, definitionInfo) {
|
|
9
|
+
const presentHttpFields = HTTP_FIELDS.filter((f) => config[f] !== undefined);
|
|
10
|
+
if (presentHttpFields.length > 0) {
|
|
11
|
+
throw new ProcedureRegistrationError(procedureName, `HTTP fields require CreateHttp / CreateHttpStream. Procedure "${procedureName}" has [${presentHttpFields.join(', ')}] which are not valid on ${creatorName}.`, definitionInfo);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/** Duplicate names fail fast, BEFORE schema computation. */
|
|
15
|
+
export function assertNotDuplicate(registry, name, definitionInfo) {
|
|
16
|
+
if (registry.has(name)) {
|
|
17
|
+
throw new ProcedureRegistrationError(name, `Procedure with name ${name} is already registered`, definitionInfo);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Should this call skip runtime validation? Either the caller already
|
|
22
|
+
* validated (`ctx.isPrevalidated`, set by HTTP builders) or the whole factory
|
|
23
|
+
* opted out (`validation: false`).
|
|
24
|
+
*/
|
|
25
|
+
export function shouldSkipValidation(ctx, runtime) {
|
|
26
|
+
return Boolean(ctx?.isPrevalidated) || runtime.skipValidation;
|
|
27
|
+
}
|
|
28
|
+
/** Validates RPC params; throws `ProcedureValidationError` on failure. */
|
|
29
|
+
export function validateParams(name, validate, params, definitionInfo) {
|
|
30
|
+
if (!validate)
|
|
31
|
+
return;
|
|
32
|
+
const { errors } = validate(params);
|
|
33
|
+
if (errors) {
|
|
34
|
+
throw new ProcedureValidationError(name, `Validation error for ${name}`, errors, definitionInfo);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Validates each HTTP req channel independently; error messages name the channel. */
|
|
38
|
+
export function validateReqChannels(name, validators, req, definitionInfo) {
|
|
39
|
+
if (!validators)
|
|
40
|
+
return;
|
|
41
|
+
for (const [channel, validate] of Object.entries(validators)) {
|
|
42
|
+
const channelValue = req?.[channel];
|
|
43
|
+
const { errors } = validate(channelValue);
|
|
44
|
+
if (errors) {
|
|
45
|
+
throw new ProcedureValidationError(name, `Validation error for ${name} in req.${channel}`, errors, definitionInfo);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Boxes a non-ProcedureError thrown by a unary handler into a ProcedureError
|
|
51
|
+
* (original error as `cause`), preserving the original stack and appending
|
|
52
|
+
* the definition site. ProcedureErrors pass through untouched.
|
|
53
|
+
*/
|
|
54
|
+
export function toProcedureError(name, definitionInfo, error) {
|
|
55
|
+
if (error instanceof ProcedureError)
|
|
56
|
+
return error;
|
|
57
|
+
const err = new ProcedureError(name, `Error in handler for ${name} - ${error?.message}`, undefined, definitionInfo);
|
|
58
|
+
err.cause = error;
|
|
59
|
+
if (error?.stack && definitionInfo.definedAt) {
|
|
60
|
+
const { file, line, column } = definitionInfo.definedAt;
|
|
61
|
+
err.stack =
|
|
62
|
+
error.stack + `\n--- Procedure "${name}" defined at ---\n at ${file}:${line}:${column}`;
|
|
63
|
+
}
|
|
64
|
+
else if (error?.stack) {
|
|
65
|
+
err.stack = error.stack;
|
|
66
|
+
}
|
|
67
|
+
return err;
|
|
68
|
+
}
|
|
69
|
+
/** Appends the definition site to a thrown error's stack, in place. */
|
|
70
|
+
export function appendDefinitionSite(error, name, definitionInfo) {
|
|
71
|
+
if (definitionInfo.definedAt && error && typeof error.stack === 'string') {
|
|
72
|
+
const { file, line, column } = definitionInfo.definedAt;
|
|
73
|
+
error.stack = `${error.stack}\n--- Procedure "${name}" defined at ---\n at ${file}:${line}:${column}`;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** Combines an incoming (e.g. HTTP request) signal with the stream's own controller. */
|
|
77
|
+
export function combineSignals(incoming, own) {
|
|
78
|
+
return incoming ? AbortSignal.any([incoming, own]) : own;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Drives a user stream iterator with the framework guarantees shared by
|
|
82
|
+
* CreateStream and CreateHttpStream:
|
|
83
|
+
* - optional per-yield validation (`validateYields: true`)
|
|
84
|
+
* - errors get the definition site appended to their stack — but keep their
|
|
85
|
+
* original class, so HTTP taxonomies and typed-error dispatch see the real
|
|
86
|
+
* thrown value
|
|
87
|
+
* - on ANY exit, the user iterator's `return()` runs (its `finally` blocks
|
|
88
|
+
* fire on early consumer close) and the controller aborts with reason
|
|
89
|
+
* `'stream-completed'` so handlers can distinguish completion from client
|
|
90
|
+
* disconnect
|
|
91
|
+
* - the user generator's return value is propagated (becomes the
|
|
92
|
+
* `event: 'return'` SSE payload downstream)
|
|
93
|
+
*/
|
|
94
|
+
export async function* iterateWithGuards(userIterator, options) {
|
|
95
|
+
const { name, validateYields, validateYield, abortController, definitionInfo } = options;
|
|
96
|
+
try {
|
|
97
|
+
let result = await userIterator.next();
|
|
98
|
+
while (!result.done) {
|
|
99
|
+
const value = result.value;
|
|
100
|
+
if (validateYields && validateYield) {
|
|
101
|
+
const { errors } = validateYield(value);
|
|
102
|
+
if (errors) {
|
|
103
|
+
throw new ProcedureYieldValidationError(name, `Yield validation error for ${name}`, errors, definitionInfo);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
yield value;
|
|
107
|
+
result = await userIterator.next();
|
|
108
|
+
}
|
|
109
|
+
return result.value;
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
appendDefinitionSite(error, name, definitionInfo);
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
// Propagate `.return()` to the user generator so its `finally` blocks run
|
|
117
|
+
// when the consumer closes the stream early. No-op when iteration already
|
|
118
|
+
// completed.
|
|
119
|
+
try {
|
|
120
|
+
await userIterator.return?.(undefined);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Swallow — cleanup must not mask the primary error path
|
|
124
|
+
}
|
|
125
|
+
abortController.abort('stream-completed');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=internal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/core/internal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { Procedures } from './
|
|
2
|
+
import { Procedures } from './procedures.js';
|
|
3
3
|
import { ProcedureRegistrationError } from './errors.js';
|
|
4
4
|
import { Type } from 'typebox';
|
|
5
5
|
describe('v7 → v8 migration errors', () => {
|
|
@@ -15,6 +15,22 @@ describe('v7 → v8 migration errors', () => {
|
|
|
15
15
|
}, async function* () { })).toThrow(/schema.input was removed in v8/);
|
|
16
16
|
});
|
|
17
17
|
});
|
|
18
|
+
describe('schema.params rejected on HTTP creators', () => {
|
|
19
|
+
it('CreateHttp rejects schema.params with migration message', () => {
|
|
20
|
+
const procs = Procedures();
|
|
21
|
+
expect(() => procs.CreateHttp('LegacyHttp', {
|
|
22
|
+
path: '/x', method: 'get',
|
|
23
|
+
schema: { params: Type.Object({}) },
|
|
24
|
+
}, async () => undefined)).toThrow(/Use schema.req.body \(or schema.req.query\) instead of schema.params/);
|
|
25
|
+
});
|
|
26
|
+
it('CreateHttpStream rejects schema.params with migration message', () => {
|
|
27
|
+
const procs = Procedures();
|
|
28
|
+
expect(() => procs.CreateHttpStream('LegacyHttpStream', {
|
|
29
|
+
path: '/x', method: 'get',
|
|
30
|
+
schema: { params: Type.Object({}), yield: Type.Number() },
|
|
31
|
+
}, async function* () { })).toThrow(/Use schema.req.body \(or schema.req.query\) instead of schema.params/);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
18
34
|
describe('HTTP fields rejected on RPC creators', () => {
|
|
19
35
|
const HTTP_FIELDS = ['path', 'method', 'req', 'res', 'successStatus'];
|
|
20
36
|
for (const field of HTTP_FIELDS) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.test.js","sourceRoot":"","sources":["../../src/core/migration.test.ts"],"names":[],"mappings":"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"}
|