import type { AnyContract } from "../contract/index.ts"; import type { RouteHandler } from "../app/types.ts"; import type { StandardSchemaV1 } from "../schema/standard-schema.ts"; import type { SchemaAwareHandler } from "../schema/with-schema.ts"; type RequestSchemaOutput = Schema extends StandardSchemaV1 ? Output : Fallback; type ResponseSchemaInput = Schema extends StandardSchemaV1 ? Input : never; type ResponseSchemaOutput = Schema extends StandardSchemaV1 ? Output : ResponseSchemaInput; type ContractRouteHandler = SchemaAwareHandler< RequestSchemaOutput, RequestSchemaOutput, RequestSchemaOutput, RequestSchemaOutput, ResponseSchemaInput, ResponseSchemaOutput >; interface ContractRouteApp { registerContractRoute(contract: AnyContract, handler: RouteHandler): unknown; } export function registerContractRoute( app: TApp, contract: TContract, handler: ContractRouteHandler, ): TApp { app.registerContractRoute(contract, handler); return app; }