import { type ContractBuilder, type ContractProcedure } from '@ts-pf/contract'; import type { MiddlewareFn } from './middleware.js'; import { type ImplementedProcedure, type ImplementedRouter } from './runtime.js'; export declare function createImplementer(contract: T): Implementer; export type ProcedureBuilder = Record> = { use: (mw: MiddlewareFn) => ProcedureBuilder; useAfter: (mw: MiddlewareFn) => ProcedureBuilder; handler: (fn: (opts: { input: TInput; context: TCtx; errors: import('./middleware.js').ErrorFactory; path: string[]; signal?: AbortSignal; }) => TOutput | Promise) => ImplementedProcedure; }; export type Implementer = { $context: () => Implementer; use: (mw: MiddlewareFn) => Implementer; useAfter: (mw: MiddlewareFn) => Implementer; middleware: (fn: MiddlewareFn) => MiddlewareFn; router: (impl: RouterImpl) => ImplementedRouter; } & { [K in keyof T as K extends '~pf' ? never : K]: T[K] extends ContractBuilder ? ProcedureBuilder : T[K] extends ContractProcedure ? ProcedureBuilder : Implementer; }; export type RouterImpl = { [K in keyof T as K extends '~pf' ? never : K]: T[K] extends ContractBuilder ? ImplementedProcedure : T[K] extends ContractProcedure ? ImplementedProcedure : RouterImpl; }; //# sourceMappingURL=implement.d.ts.map