11import type { ErrorMap , ErrorMapGuard , ErrorMapSuggestions , StrictErrorMap } from './error-map'
2- import type { ContractProcedureDef , RouteOptions } from './procedure'
2+ import type { ContractProcedureDef } from './procedure'
3+ import type { HTTPPath , MergeRoute , Route , StrictRoute } from './route'
34import type { ContractRouter } from './router'
45import type { AdaptedContractRouter } from './router-builder'
5- import type { HTTPPath , Schema , SchemaInput , SchemaOutput } from './types'
6+ import type { Schema , SchemaInput , SchemaOutput } from './types'
67import { ContractProcedure } from './procedure'
78import { ContractProcedureBuilder } from './procedure-builder'
89import { ContractProcedureBuilderWithInput } from './procedure-builder-with-input'
910import { ContractProcedureBuilderWithOutput } from './procedure-builder-with-output'
11+ import { mergeRoute } from './route'
1012import { ContractRouterBuilder } from './router-builder'
1113
1214export interface ContractBuilderConfig {
13- initialRoute ?: RouteOptions
15+ initialRoute ?: Route
1416}
1517
16- export interface ContractBuilderDef < TErrorMap extends ErrorMap > extends ContractProcedureDef < undefined , undefined , TErrorMap > {
17- config : ContractBuilderConfig
18+ export type MergeContractBuilderConfig < A extends ContractBuilderConfig , B extends ContractBuilderConfig > = Omit < A , keyof B > & B
19+
20+ export type GetInitialRoute < T extends ContractBuilderConfig > = T [ 'initialRoute' ] extends Route
21+ ? T [ 'initialRoute' ]
22+ : Record < never , never >
23+
24+ export interface ContractBuilderDef < TConfig extends ContractBuilderConfig , TErrorMap extends ErrorMap >
25+ extends ContractProcedureDef < undefined , undefined , TErrorMap , StrictRoute < GetInitialRoute < TConfig > > > {
26+ config : TConfig
1827}
1928
20- export class ContractBuilder < TErrorMap extends ErrorMap > extends ContractProcedure < undefined , undefined , TErrorMap > {
21- declare '~orpc' : ContractBuilderDef < TErrorMap >
29+ export class ContractBuilder < TConfig extends ContractBuilderConfig , TErrorMap extends ErrorMap >
30+ extends ContractProcedure < undefined , undefined , TErrorMap , GetInitialRoute < TConfig > > {
31+ declare '~orpc' : ContractBuilderDef < TConfig , TErrorMap >
2232
23- constructor ( def : ContractBuilderDef < TErrorMap > ) {
33+ constructor ( def : ContractBuilderDef < TConfig , TErrorMap > ) {
2434 super ( def )
35+ this [ '~orpc' ] . config = def . config
2536 }
2637
27- config ( config : ContractBuilderConfig ) : ContractBuilder < TErrorMap > {
38+ config < const U extends ContractBuilderConfig > ( config : U ) : ContractBuilder < MergeContractBuilderConfig < TConfig , U > , TErrorMap > {
2839 return new ContractBuilder ( {
2940 ...this [ '~orpc' ] ,
3041 config : {
3142 ...this [ '~orpc' ] . config ,
3243 ...config ,
33- } ,
44+ } as any ,
3445 } )
3546 }
3647
37- errors < const U extends ErrorMap & ErrorMapGuard < TErrorMap > & ErrorMapSuggestions > ( errors : U ) : ContractBuilder < U & TErrorMap > {
48+ errors < const U extends ErrorMap & ErrorMapGuard < TErrorMap > & ErrorMapSuggestions > (
49+ errors : U ,
50+ ) : ContractBuilder < TConfig , StrictErrorMap < U > & TErrorMap > {
3851 return new ContractBuilder ( {
3952 ...this [ '~orpc' ] ,
4053 errorMap : {
@@ -44,55 +57,58 @@ export class ContractBuilder<TErrorMap extends ErrorMap> extends ContractProcedu
4457 } )
4558 }
4659
47- route ( route : RouteOptions ) : ContractProcedureBuilder < TErrorMap > {
60+ route < const U extends Route > ( route : U ) : ContractProcedureBuilder < TErrorMap , MergeRoute < StrictRoute < GetInitialRoute < TConfig > > , U > > {
4861 return new ContractProcedureBuilder ( {
49- route : {
50- ...this [ '~orpc' ] . config . initialRoute ,
51- ...route ,
52- } ,
62+ route : mergeRoute ( this [ '~orpc' ] . route , route ) ,
5363 InputSchema : undefined ,
5464 OutputSchema : undefined ,
5565 errorMap : this [ '~orpc' ] . errorMap ,
5666 } )
5767 }
5868
59- input < U extends Schema > ( schema : U , example ?: SchemaInput < U > ) : ContractProcedureBuilderWithInput < U , TErrorMap > {
69+ input < U extends Schema > ( schema : U , example ?: SchemaInput < U > ) : ContractProcedureBuilderWithInput < U , TErrorMap , StrictRoute < GetInitialRoute < TConfig > > > {
6070 return new ContractProcedureBuilderWithInput ( {
61- route : this [ '~orpc' ] . config . initialRoute ,
71+ route : this [ '~orpc' ] . route ,
6272 InputSchema : schema ,
6373 inputExample : example ,
6474 OutputSchema : undefined ,
6575 errorMap : this [ '~orpc' ] . errorMap ,
6676 } )
6777 }
6878
69- output < U extends Schema > ( schema : U , example ?: SchemaOutput < U > ) : ContractProcedureBuilderWithOutput < U , TErrorMap > {
79+ output < U extends Schema > ( schema : U , example ?: SchemaOutput < U > ) : ContractProcedureBuilderWithOutput < U , TErrorMap , StrictRoute < GetInitialRoute < TConfig > > > {
7080 return new ContractProcedureBuilderWithOutput ( {
71- route : this [ '~orpc' ] . config . initialRoute ,
81+ route : this [ '~orpc' ] . route ,
7282 OutputSchema : schema ,
7383 outputExample : example ,
7484 InputSchema : undefined ,
7585 errorMap : this [ '~orpc' ] . errorMap ,
7686 } )
7787 }
7888
79- prefix ( prefix : HTTPPath ) : ContractRouterBuilder < TErrorMap > {
89+ prefix < U extends HTTPPath > ( prefix : U ) : ContractRouterBuilder < TErrorMap , U , undefined > {
8090 return new ContractRouterBuilder ( {
8191 prefix,
8292 errorMap : this [ '~orpc' ] . errorMap ,
93+ tags : undefined ,
8394 } )
8495 }
8596
86- tag ( ...tags : string [ ] ) : ContractRouterBuilder < TErrorMap > {
97+ tag < U extends string [ ] > ( ...tags : U ) : ContractRouterBuilder < TErrorMap , undefined , U > {
8798 return new ContractRouterBuilder ( {
8899 tags,
89100 errorMap : this [ '~orpc' ] . errorMap ,
101+ prefix : undefined ,
90102 } )
91103 }
92104
93- router < T extends ContractRouter < ErrorMap & Partial < StrictErrorMap < TErrorMap > > > > ( router : T ) : AdaptedContractRouter < T , TErrorMap > {
105+ router < T extends ContractRouter < ErrorMap & Partial < TErrorMap > > > (
106+ router : T ,
107+ ) : AdaptedContractRouter < T , TErrorMap , undefined , undefined > {
94108 return new ContractRouterBuilder ( {
95109 errorMap : this [ '~orpc' ] . errorMap ,
110+ prefix : undefined ,
111+ tags : undefined ,
96112 } ) . router ( router )
97113 }
98114}
0 commit comments