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
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers shared across the per-kind route emitters: versioned route naming,
|
|
3
|
+
* the route-level `Errors` union builder/injector, and the callable JSDoc
|
|
4
|
+
* builder.
|
|
5
|
+
*/
|
|
6
|
+
import { toPascalCase } from '../naming.js';
|
|
7
|
+
/**
|
|
8
|
+
* Returns the PascalCase display name for a route, appending `V{version}`
|
|
9
|
+
* when version > 1. Version 1 produces no suffix for backward compatibility.
|
|
10
|
+
*/
|
|
11
|
+
export function versionedPascal(name, version) {
|
|
12
|
+
const pascal = toPascalCase(name);
|
|
13
|
+
if (version != null && version > 1)
|
|
14
|
+
return `${pascal}V${version}`;
|
|
15
|
+
return pascal;
|
|
16
|
+
}
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Route-level Errors union injection
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
/**
|
|
21
|
+
* Builds the body of an `Errors` type union from the route's declared error
|
|
22
|
+
* keys. Filters to keys actually emitted in `_errors.ts` so generated code
|
|
23
|
+
* never references undefined types.
|
|
24
|
+
*
|
|
25
|
+
* In namespace mode the union uses qualified names (`ApiErrors.UseCaseError`);
|
|
26
|
+
* in flat mode it uses the bundled wildcard import alias (`_errors.UseCaseError`).
|
|
27
|
+
* Returns `null` when no keys remain.
|
|
28
|
+
*/
|
|
29
|
+
export function buildErrorUnion(routeErrors, ctx) {
|
|
30
|
+
if (!routeErrors || routeErrors.length === 0)
|
|
31
|
+
return null;
|
|
32
|
+
const available = ctx.errorKeys;
|
|
33
|
+
const filtered = available ? routeErrors.filter((k) => available.has(k)) : routeErrors;
|
|
34
|
+
if (filtered.length === 0)
|
|
35
|
+
return null;
|
|
36
|
+
const qualify = ctx.namespaceTypes
|
|
37
|
+
? (k) => `${toPascalCase(ctx.serviceName)}Errors.${k}`
|
|
38
|
+
: (k) => `_errors.${k}`;
|
|
39
|
+
return filtered.map(qualify).join(' | ');
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Injects `export type Errors = ...` into an existing route namespace block
|
|
43
|
+
* (namespace mode) or appends a flat `export type ${pascal}Errors = ...` in
|
|
44
|
+
* flat mode. Mutates the `declarations` array in place and returns whether an
|
|
45
|
+
* injection happened.
|
|
46
|
+
*/
|
|
47
|
+
export function injectRouteErrors(declarations, routePascal, errorUnion, namespaceTypes) {
|
|
48
|
+
if (!errorUnion)
|
|
49
|
+
return false;
|
|
50
|
+
if (namespaceTypes) {
|
|
51
|
+
const lastIdx = declarations.length - 1;
|
|
52
|
+
if (lastIdx < 0)
|
|
53
|
+
return false;
|
|
54
|
+
const lastDecl = declarations[lastIdx];
|
|
55
|
+
const closingIdx = lastDecl.lastIndexOf(' }');
|
|
56
|
+
if (closingIdx === -1)
|
|
57
|
+
return false;
|
|
58
|
+
declarations[lastIdx] =
|
|
59
|
+
lastDecl.slice(0, closingIdx) +
|
|
60
|
+
` export type Errors = ${errorUnion}\n` +
|
|
61
|
+
lastDecl.slice(closingIdx);
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
declarations.push(`export type ${routePascal}Errors = ${errorUnion}`);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Builds the multi-line JSDoc comment for a route callable. Surfaces the
|
|
69
|
+
* second `options` argument (the per-call AbortSignal/timeout seam — DX #8) and,
|
|
70
|
+
* for routes that declare typed errors, points at the route's `Errors` type and
|
|
71
|
+
* how to narrow it on the throwing path (DX #10). Indented for placement inside
|
|
72
|
+
* the bind-object (4 spaces).
|
|
73
|
+
*/
|
|
74
|
+
export function buildCallableJsDoc(opts) {
|
|
75
|
+
const lines = [
|
|
76
|
+
` /**`,
|
|
77
|
+
` * ${opts.methodLabel} ${opts.path}`,
|
|
78
|
+
` *`,
|
|
79
|
+
` * @param options Optional per-call {@link ProcedureCallOptions} —`,
|
|
80
|
+
` * \`signal\` (cancel on dispose), \`timeout\`, \`headers\`, \`basePath\`.`,
|
|
81
|
+
];
|
|
82
|
+
if (opts.errorsRef) {
|
|
83
|
+
lines.push(` * @throws Declared typed errors: {@link ${opts.errorsRef}}. Narrow with`, ` * \`instanceof\` on the throwing path, or call \`.safe()\` for a \`Result\`.`);
|
|
84
|
+
}
|
|
85
|
+
lines.push(` */`);
|
|
86
|
+
return lines.join('\n');
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=route-shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-shared.js","sourceRoot":"","sources":["../../../src/codegen/emit/route-shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emitter for `kind: 'rpc'` routes — bindCallable / bindCallableTyped
|
|
3
|
+
* callables with `Params` / `Response` (and optional `Errors`) types.
|
|
4
|
+
*/
|
|
5
|
+
import type { RPCHttpRouteDoc } from '../../server/types.js';
|
|
6
|
+
import type { EmitRouteContext, RouteChunks } from './context.js';
|
|
7
|
+
export declare function emitRpcRoute(route: RPCHttpRouteDoc, ctx: EmitRouteContext): Promise<RouteChunks>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { formatTypes } from './format-types.js';
|
|
2
|
+
import { buildCallableJsDoc, buildErrorUnion, injectRouteErrors, versionedPascal } from './route-shared.js';
|
|
3
|
+
export async function emitRpcRoute(route, ctx) {
|
|
4
|
+
const pascal = versionedPascal(route.name, route.version);
|
|
5
|
+
const { declarations, refs } = await formatTypes(pascal, [
|
|
6
|
+
{ shortName: 'Params', schema: route.jsonSchema.body },
|
|
7
|
+
{ shortName: 'Response', schema: route.jsonSchema.response },
|
|
8
|
+
], ctx);
|
|
9
|
+
const paramsTypeName = refs['Params'] ?? 'void';
|
|
10
|
+
const responseTypeName = refs['Response'] ?? 'unknown';
|
|
11
|
+
const scopeStr = Array.isArray(route.scope) ? route.scope.join('-') : route.scope;
|
|
12
|
+
const errorUnion = buildErrorUnion(route.errors, ctx);
|
|
13
|
+
const hasErrors = errorUnion !== null;
|
|
14
|
+
const errorsRef = ctx.namespaceTypes
|
|
15
|
+
? `${ctx.scopePascal}.${pascal}.Errors`
|
|
16
|
+
: `${pascal}Errors`;
|
|
17
|
+
const helperCall = hasErrors
|
|
18
|
+
? `client.bindCallableTyped<${paramsTypeName}, ${responseTypeName}, ${errorsRef}>`
|
|
19
|
+
: `client.bindCallable<${paramsTypeName}, ${responseTypeName}>`;
|
|
20
|
+
const callable = [
|
|
21
|
+
buildCallableJsDoc({
|
|
22
|
+
methodLabel: route.method.toUpperCase(),
|
|
23
|
+
path: route.path,
|
|
24
|
+
errorsRef: hasErrors ? errorsRef : null,
|
|
25
|
+
}),
|
|
26
|
+
` ${pascal}: ${helperCall}({`,
|
|
27
|
+
` name: '${pascal}',`,
|
|
28
|
+
` scope: '${scopeStr}',`,
|
|
29
|
+
` path: '${route.path}',`,
|
|
30
|
+
` method: '${route.method}',`,
|
|
31
|
+
` kind: 'rpc',`,
|
|
32
|
+
` }),`,
|
|
33
|
+
].join('\n');
|
|
34
|
+
const hasErrorsInjected = injectRouteErrors(declarations, pascal, errorUnion, ctx.namespaceTypes);
|
|
35
|
+
return { typeDeclarations: declarations, callable, hasStream: false, hasErrors: hasErrorsInjected };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=rpc-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-route.js","sourceRoot":"","sources":["../../../src/codegen/emit/rpc-route.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAE3G,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAsB,EAAE,GAAqB;IAC9E,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAEzD,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE;QACvD,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;QACtD,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE;KAC7D,EAAE,GAAG,CAAC,CAAA;IAEP,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAA;IAC/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,SAAS,CAAA;IACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA;IAEjF,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACrD,MAAM,SAAS,GAAG,UAAU,KAAK,IAAI,CAAA;IACrC,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc;QAClC,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,IAAI,MAAM,SAAS;QACvC,CAAC,CAAC,GAAG,MAAM,QAAQ,CAAA;IACrB,MAAM,UAAU,GAAG,SAAS;QAC1B,CAAC,CAAC,4BAA4B,cAAc,KAAK,gBAAgB,KAAK,SAAS,GAAG;QAClF,CAAC,CAAC,uBAAuB,cAAc,KAAK,gBAAgB,GAAG,CAAA;IAEjE,MAAM,QAAQ,GAAG;QACf,kBAAkB,CAAC;YACjB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE;YACvC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;SACxC,CAAC;QACF,OAAO,MAAM,KAAK,UAAU,IAAI;QAChC,gBAAgB,MAAM,IAAI;QAC1B,iBAAiB,QAAQ,IAAI;QAC7B,gBAAgB,KAAK,CAAC,IAAI,IAAI;QAC9B,kBAAkB,KAAK,CAAC,MAAM,IAAI;QAClC,oBAAoB;QACpB,SAAS;KACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEZ,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,cAAc,CAAC,CAAA;IAEjG,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAA;AACrG,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `emitScopeFile` orchestration: dispatches each route to its per-kind
|
|
3
|
+
* emitter, accumulates type declarations / callables / referenced models,
|
|
4
|
+
* and assembles the final scope file (namespace or flat mode) with its
|
|
5
|
+
* import block.
|
|
6
|
+
*/
|
|
7
|
+
import type { ScopeGroup } from '../group-routes.js';
|
|
8
|
+
import type { AjscOptions } from '../emit-types.js';
|
|
9
|
+
export interface EmitScopeOptions {
|
|
10
|
+
ajsc?: AjscOptions;
|
|
11
|
+
clientImportPath?: string;
|
|
12
|
+
namespaceTypes?: boolean;
|
|
13
|
+
/** Service identifier used to namespace generated error types (defaults to 'Api'). */
|
|
14
|
+
serviceName?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Error keys present in the generated `_errors.ts`. Routes may list keys
|
|
17
|
+
* that aren't emitted (e.g. no schema); those are filtered out at emit time
|
|
18
|
+
* so generated code never references undefined types.
|
|
19
|
+
*/
|
|
20
|
+
errorKeys?: Set<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Maps a model `$id` to its shared model type name (built by the run module
|
|
23
|
+
* from ALL models — generated and imported). When present and non-empty,
|
|
24
|
+
* `$id` subschemas are rewritten to `x-named-type` nodes before ajsc; ajsc
|
|
25
|
+
* emits bare references and reports them via `referencedNamedTypes`, which
|
|
26
|
+
* drives the `import type { … } from './_models'` line. Absent/empty →
|
|
27
|
+
* identical inlining behaviour (the conversion wrappers short-circuit so
|
|
28
|
+
* output is byte-identical for envelopes without models).
|
|
29
|
+
*/
|
|
30
|
+
idToModelName?: Map<string, string>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Generates a complete TypeScript scope file for a ScopeGroup.
|
|
34
|
+
*
|
|
35
|
+
* When `namespaceTypes` is true, types are wrapped in nested TypeScript namespaces
|
|
36
|
+
* and ajsc runs with `inlineTypes: false` so formatting options (enumStyle, depluralize,
|
|
37
|
+
* jsdoc, etc.) produce extracted sub-types inside each namespace.
|
|
38
|
+
*/
|
|
39
|
+
export declare function emitScopeFile(group: ScopeGroup, options?: EmitScopeOptions): Promise<string>;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { CODEGEN_HEADER } from '../constants.js';
|
|
2
|
+
import { toPascalCase } from '../naming.js';
|
|
3
|
+
import { indent } from './declarations.js';
|
|
4
|
+
import { emitRpcRoute } from './rpc-route.js';
|
|
5
|
+
import { emitApiRoute } from './api-route.js';
|
|
6
|
+
import { emitStreamRoute } from './stream-route.js';
|
|
7
|
+
import { emitHttpStreamRoute } from './http-stream-route.js';
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Helpers
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
/**
|
|
12
|
+
* Infers the route kind when the `kind` discriminant is missing.
|
|
13
|
+
* This provides backward compatibility with servers running older ts-procedures
|
|
14
|
+
* versions that don't set `kind` on route docs.
|
|
15
|
+
*/
|
|
16
|
+
function inferRouteKind(route) {
|
|
17
|
+
if ('streamMode' in route && 'fullPath' in route)
|
|
18
|
+
return 'http-stream';
|
|
19
|
+
if ('streamMode' in route)
|
|
20
|
+
return 'stream';
|
|
21
|
+
if ('fullPath' in route)
|
|
22
|
+
return 'api';
|
|
23
|
+
return 'rpc';
|
|
24
|
+
}
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// emitScopeFile
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
/**
|
|
29
|
+
* Generates a complete TypeScript scope file for a ScopeGroup.
|
|
30
|
+
*
|
|
31
|
+
* When `namespaceTypes` is true, types are wrapped in nested TypeScript namespaces
|
|
32
|
+
* and ajsc runs with `inlineTypes: false` so formatting options (enumStyle, depluralize,
|
|
33
|
+
* jsdoc, etc.) produce extracted sub-types inside each namespace.
|
|
34
|
+
*/
|
|
35
|
+
export async function emitScopeFile(group, options) {
|
|
36
|
+
const { ajsc: ajscOpts, clientImportPath = 'ts-procedures/client', namespaceTypes = false, serviceName = 'Api', errorKeys, idToModelName, } = options ?? {};
|
|
37
|
+
const pascal = toPascalCase(group.camelCase);
|
|
38
|
+
const referencedModels = new Set();
|
|
39
|
+
const ctx = {
|
|
40
|
+
ajsc: ajscOpts,
|
|
41
|
+
namespaceTypes,
|
|
42
|
+
scopePascal: pascal,
|
|
43
|
+
serviceName,
|
|
44
|
+
errorKeys,
|
|
45
|
+
idToModelName,
|
|
46
|
+
referencedModels,
|
|
47
|
+
};
|
|
48
|
+
const allTypeDeclarations = [];
|
|
49
|
+
const callables = [];
|
|
50
|
+
let hasStream = false;
|
|
51
|
+
let scopeHasErrors = false;
|
|
52
|
+
for (const route of group.routes) {
|
|
53
|
+
let chunks;
|
|
54
|
+
const kind = route.kind ?? inferRouteKind(route);
|
|
55
|
+
try {
|
|
56
|
+
if (kind === 'rpc') {
|
|
57
|
+
chunks = await emitRpcRoute(route, ctx);
|
|
58
|
+
}
|
|
59
|
+
else if (kind === 'api') {
|
|
60
|
+
chunks = await emitApiRoute(route, ctx);
|
|
61
|
+
}
|
|
62
|
+
else if (kind === 'stream') {
|
|
63
|
+
chunks = await emitStreamRoute(route, ctx);
|
|
64
|
+
}
|
|
65
|
+
else if (kind === 'http-stream') {
|
|
66
|
+
chunks = await emitHttpStreamRoute(route, ctx);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
throw new Error(`Unknown route kind "${kind}"`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
74
|
+
throw new Error(`[ts-procedures-codegen] Failed to emit route "${route.name}" (kind: ${kind}, scope: ${group.scopeKey}): ${msg}`);
|
|
75
|
+
}
|
|
76
|
+
allTypeDeclarations.push(...chunks.typeDeclarations);
|
|
77
|
+
callables.push(chunks.callable);
|
|
78
|
+
if (chunks.hasStream)
|
|
79
|
+
hasStream = true;
|
|
80
|
+
if (chunks.hasErrors)
|
|
81
|
+
scopeHasErrors = true;
|
|
82
|
+
}
|
|
83
|
+
// Build client import line — Result/ResultNoTyped are no longer referenced
|
|
84
|
+
// directly in scope files; the bindCallable helpers infer them from ClientInstance.
|
|
85
|
+
const clientImports = hasStream
|
|
86
|
+
? `import type { ClientInstance, ProcedureCallOptions, TypedStream } from '${clientImportPath}'`
|
|
87
|
+
: `import type { ClientInstance, ProcedureCallOptions } from '${clientImportPath}'`;
|
|
88
|
+
// Build _errors import line when at least one route emits an Errors union.
|
|
89
|
+
// Namespace mode uses the qualified `${Service}Errors` namespace; flat mode
|
|
90
|
+
// pulls classes in via a wildcard alias (`_errors.UseCaseError`).
|
|
91
|
+
let errorsImport = '';
|
|
92
|
+
if (scopeHasErrors) {
|
|
93
|
+
if (namespaceTypes) {
|
|
94
|
+
errorsImport = `import type { ${toPascalCase(serviceName)}Errors } from './_errors'`;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
errorsImport = `import type * as _errors from './_errors'`;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const callablesBlock = callables.join('\n\n');
|
|
101
|
+
// Assemble the type + callable section for this scope. ajsc already emitted
|
|
102
|
+
// bare model references (via `x-named-type`); `convertExtracted` / `convertBody`
|
|
103
|
+
// folded the reported names into `ctx.referencedModels`, which drives the
|
|
104
|
+
// `_models` import below. No post-pass over the body is needed.
|
|
105
|
+
let body;
|
|
106
|
+
if (namespaceTypes) {
|
|
107
|
+
// Namespace mode: types AND `bindScope` live inside `export namespace ${pascal}`.
|
|
108
|
+
// Putting the function inside the namespace makes the merged symbol
|
|
109
|
+
// value+type, which lets `index.ts` use `export import ${pascal} = …`
|
|
110
|
+
// under `verbatimModuleSyntax: true`. (A type-only namespace would trip
|
|
111
|
+
// TS1269/TS1288.) Consumers call `${Pascal}.bindScope(client)`; the
|
|
112
|
+
// generated `index.ts` factory wires this internally.
|
|
113
|
+
const callableLines = indent(callablesBlock, ' ');
|
|
114
|
+
const namespaceMembers = [
|
|
115
|
+
...(allTypeDeclarations.length > 0 ? [allTypeDeclarations.join('\n\n')] : []),
|
|
116
|
+
[
|
|
117
|
+
' /** Binds every callable in this scope to a configured client. */',
|
|
118
|
+
' export function bindScope(client: ClientInstance) {',
|
|
119
|
+
' return {',
|
|
120
|
+
callableLines,
|
|
121
|
+
' }',
|
|
122
|
+
' }',
|
|
123
|
+
].join('\n'),
|
|
124
|
+
].join('\n\n');
|
|
125
|
+
body = [
|
|
126
|
+
`export namespace ${pascal} {`,
|
|
127
|
+
namespaceMembers,
|
|
128
|
+
'}',
|
|
129
|
+
'',
|
|
130
|
+
].join('\n');
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// Flat mode: types at module level, `bind${pascal}Scope` standalone.
|
|
134
|
+
const typesBlock = allTypeDeclarations.length > 0
|
|
135
|
+
? allTypeDeclarations.join('\n') + '\n'
|
|
136
|
+
: '';
|
|
137
|
+
body = [
|
|
138
|
+
'// ── Types ────────────────────────────────────────',
|
|
139
|
+
'',
|
|
140
|
+
typesBlock,
|
|
141
|
+
'// ── Callables ────────────────────────────────────',
|
|
142
|
+
'',
|
|
143
|
+
`export function bind${pascal}Scope(client: ClientInstance) {`,
|
|
144
|
+
' return {',
|
|
145
|
+
callablesBlock,
|
|
146
|
+
' }',
|
|
147
|
+
'}',
|
|
148
|
+
'',
|
|
149
|
+
].join('\n');
|
|
150
|
+
}
|
|
151
|
+
// Build the shared-models import line when any route referenced a `$id` model.
|
|
152
|
+
// Matches the `_errors` import convention exactly: `'./_models'` with no `.js`.
|
|
153
|
+
let modelsImport = '';
|
|
154
|
+
if (referencedModels.size > 0) {
|
|
155
|
+
const names = [...referencedModels].sort().join(', ');
|
|
156
|
+
modelsImport = `import type { ${names} } from './_models'`;
|
|
157
|
+
}
|
|
158
|
+
const importsBlock = [clientImports, errorsImport, modelsImport].filter(Boolean).join('\n');
|
|
159
|
+
return [
|
|
160
|
+
CODEGEN_HEADER,
|
|
161
|
+
importsBlock,
|
|
162
|
+
'',
|
|
163
|
+
body,
|
|
164
|
+
].join('\n');
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=scope-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-file.js","sourceRoot":"","sources":["../../../src/codegen/emit/scope-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emitter for `kind: 'stream'` routes — SSE envelope unwrapping for the yield
|
|
3
|
+
* type plus a `client.stream(...)` callable.
|
|
4
|
+
*/
|
|
5
|
+
import type { StreamHttpRouteDoc } from '../../server/types.js';
|
|
6
|
+
import type { EmitRouteContext, RouteChunks } from './context.js';
|
|
7
|
+
export declare function emitStreamRoute(route: StreamHttpRouteDoc, ctx: EmitRouteContext): Promise<RouteChunks>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { formatTypes } from './format-types.js';
|
|
2
|
+
import { buildCallableJsDoc, buildErrorUnion, injectRouteErrors, versionedPascal } from './route-shared.js';
|
|
3
|
+
/**
|
|
4
|
+
* Checks whether a JSON schema looks like an SSE envelope.
|
|
5
|
+
* SSE envelopes have properties: data, event, id (and optionally retry).
|
|
6
|
+
*/
|
|
7
|
+
function isSseEnvelope(schema) {
|
|
8
|
+
const props = schema.properties;
|
|
9
|
+
if (props == null || typeof props !== 'object')
|
|
10
|
+
return false;
|
|
11
|
+
const keys = Object.keys(props);
|
|
12
|
+
return keys.includes('data') && keys.includes('event') && keys.includes('id');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Unwraps an SSE envelope schema to return the inner `data` property schema.
|
|
16
|
+
* If not an SSE envelope, returns the schema unchanged.
|
|
17
|
+
*/
|
|
18
|
+
function unwrapSseEnvelope(schema) {
|
|
19
|
+
if (!isSseEnvelope(schema))
|
|
20
|
+
return schema;
|
|
21
|
+
const props = schema.properties;
|
|
22
|
+
const dataSchema = props['data'];
|
|
23
|
+
return dataSchema ?? schema;
|
|
24
|
+
}
|
|
25
|
+
export async function emitStreamRoute(route, ctx) {
|
|
26
|
+
const pascal = versionedPascal(route.name, route.version);
|
|
27
|
+
// Unwrap SSE envelope from yieldType
|
|
28
|
+
let yieldSchema = route.jsonSchema.yieldType;
|
|
29
|
+
if (yieldSchema != null && route.streamMode === 'sse' && isSseEnvelope(yieldSchema)) {
|
|
30
|
+
yieldSchema = unwrapSseEnvelope(yieldSchema);
|
|
31
|
+
}
|
|
32
|
+
const { declarations, refs } = await formatTypes(pascal, [
|
|
33
|
+
{ shortName: 'Params', schema: route.jsonSchema.params },
|
|
34
|
+
{ shortName: 'Yield', schema: yieldSchema },
|
|
35
|
+
{ shortName: 'Return', schema: route.jsonSchema.returnType },
|
|
36
|
+
], ctx);
|
|
37
|
+
const paramsTypeName = refs['Params'] ?? 'void';
|
|
38
|
+
const yieldTypeName = refs['Yield'] ?? 'unknown';
|
|
39
|
+
const returnTypeName = refs['Return'] ?? 'void';
|
|
40
|
+
const scopeStr = Array.isArray(route.scope) ? route.scope.join('-') : route.scope;
|
|
41
|
+
const callable = [
|
|
42
|
+
buildCallableJsDoc({
|
|
43
|
+
methodLabel: route.methods.map((m) => m.toUpperCase()).join('|'),
|
|
44
|
+
path: route.path,
|
|
45
|
+
errorsRef: null,
|
|
46
|
+
}),
|
|
47
|
+
` ${pascal}(params: ${paramsTypeName}, options?: ProcedureCallOptions): TypedStream<${yieldTypeName}, ${returnTypeName}> {`,
|
|
48
|
+
` return client.stream<${yieldTypeName}, ${returnTypeName}>({`,
|
|
49
|
+
` name: '${pascal}',`,
|
|
50
|
+
` scope: '${scopeStr}',`,
|
|
51
|
+
` path: '${route.path}',`,
|
|
52
|
+
` method: '${route.methods[0] ?? 'get'}',`,
|
|
53
|
+
` kind: 'stream',`,
|
|
54
|
+
` streamMode: '${route.streamMode}',`,
|
|
55
|
+
` params,`,
|
|
56
|
+
` }, options)`,
|
|
57
|
+
` },`,
|
|
58
|
+
].join('\n');
|
|
59
|
+
const hasErrors = injectRouteErrors(declarations, pascal, buildErrorUnion(route.errors, ctx), ctx.namespaceTypes);
|
|
60
|
+
return { typeDeclarations: declarations, callable, hasStream: true, hasErrors };
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=stream-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-route.js","sourceRoot":"","sources":["../../../src/codegen/emit/stream-route.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { join } from 'node:path';
|
|
|
11
11
|
import { execSync } from 'node:child_process';
|
|
12
12
|
import { generateClient } from './index.js';
|
|
13
13
|
import { emitErrorsFile } from './emit-errors.js';
|
|
14
|
-
import { defineErrorTaxonomy, taxonomyToErrorDocs, } from '../
|
|
14
|
+
import { defineErrorTaxonomy, taxonomyToErrorDocs, } from '../server/errors/taxonomy.js';
|
|
15
15
|
describe('generated _errors.ts — runtime behavior', () => {
|
|
16
16
|
const envelope = {
|
|
17
17
|
basePath: '/api',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-errors.integration.test.js","sourceRoot":"","sources":["../../src/codegen/emit-errors.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,
|
|
1
|
+
{"version":3,"file":"emit-errors.integration.test.js","sourceRoot":"","sources":["../../src/codegen/emit-errors.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +1,16 @@
|
|
|
1
|
-
import type { ScopeGroup } from './group-routes.js';
|
|
2
|
-
import { type AjscOptions } from './emit-types.js';
|
|
3
|
-
export interface EmitScopeOptions {
|
|
4
|
-
ajsc?: AjscOptions;
|
|
5
|
-
clientImportPath?: string;
|
|
6
|
-
namespaceTypes?: boolean;
|
|
7
|
-
/** Service identifier used to namespace generated error types (defaults to 'Api'). */
|
|
8
|
-
serviceName?: string;
|
|
9
|
-
/**
|
|
10
|
-
* Error keys present in the generated `_errors.ts`. Routes may list keys
|
|
11
|
-
* that aren't emitted (e.g. no schema); those are filtered out at emit time
|
|
12
|
-
* so generated code never references undefined types.
|
|
13
|
-
*/
|
|
14
|
-
errorKeys?: Set<string>;
|
|
15
|
-
/**
|
|
16
|
-
* Maps a model `$id` to its shared model type name (built by the run module
|
|
17
|
-
* from ALL models — generated and imported). When present and non-empty,
|
|
18
|
-
* `$id` subschemas are rewritten to `x-named-type` nodes before ajsc; ajsc
|
|
19
|
-
* emits bare references and reports them via `referencedNamedTypes`, which
|
|
20
|
-
* drives the `import type { … } from './_models'` line. Absent/empty →
|
|
21
|
-
* identical inlining behaviour (the conversion wrappers short-circuit so
|
|
22
|
-
* output is byte-identical for envelopes without models).
|
|
23
|
-
*/
|
|
24
|
-
idToModelName?: Map<string, string>;
|
|
25
|
-
}
|
|
26
1
|
/**
|
|
27
|
-
*
|
|
2
|
+
* Thin re-export barrel for the TS scope emitter, which now lives in
|
|
3
|
+
* `./emit/`. Kept so existing imports of `./emit-scope.js` keep working.
|
|
28
4
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
5
|
+
* Module layout:
|
|
6
|
+
* - `emit/scope-file.ts` — `emitScopeFile` orchestration + assembly
|
|
7
|
+
* - `emit/rpc-route.ts` — `kind: 'rpc'` emitter
|
|
8
|
+
* - `emit/api-route.ts` — `kind: 'api'` emitter
|
|
9
|
+
* - `emit/stream-route.ts` — `kind: 'stream'` emitter
|
|
10
|
+
* - `emit/http-stream-route.ts` — `kind: 'http-stream'` emitter
|
|
11
|
+
* - `emit/format-types.ts` — schema→type conversion + formatTypes helpers
|
|
12
|
+
* - `emit/declarations.ts` — `indent` + `DeclarationCollector`
|
|
13
|
+
* - `emit/route-shared.ts` — errors-union / JSDoc / naming helpers
|
|
14
|
+
* - `emit/context.ts` — shared `EmitRouteContext` / `RouteChunks`
|
|
32
15
|
*/
|
|
33
|
-
export
|
|
16
|
+
export { emitScopeFile, type EmitScopeOptions } from './emit/scope-file.js';
|