Skip to content

Commit c4a591c

Browse files
authored
feat(contract): ContractBuilder can use as a ContractProcedure (#90)
1 parent f22c7ec commit c4a591c

File tree

4 files changed

+16
-13
lines changed

4 files changed

+16
-13
lines changed

packages/contract/src/builder.test-d.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ const baseErrorMap = {
1717
},
1818
}
1919

20-
const builder = new ContractBuilder({ errorMap: baseErrorMap })
20+
const builder = new ContractBuilder({ errorMap: baseErrorMap, OutputSchema: undefined, InputSchema: undefined })
21+
22+
it('also is a contract procedure', () => {
23+
expectTypeOf(builder).toMatchTypeOf<ContractProcedure<undefined, undefined, typeof baseErrorMap>>()
24+
})
2125

2226
describe('self chainable', () => {
2327
describe('errors', () => {

packages/contract/src/builder.test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { z } from 'zod'
22
import { ContractBuilder } from './builder'
3-
import { ContractProcedure } from './procedure'
3+
import { ContractProcedure, isContractProcedure } from './procedure'
44
import { DecoratedContractProcedure } from './procedure-decorated'
55
import { ContractRouterBuilder } from './router-builder'
66

@@ -25,10 +25,14 @@ const baseErrorMap = {
2525
},
2626
}
2727

28-
const builder = new ContractBuilder({ errorMap: baseErrorMap })
28+
const builder = new ContractBuilder({ errorMap: baseErrorMap, OutputSchema: undefined, InputSchema: undefined })
2929

3030
const schema = z.object({ val: z.string().transform(val => Number(val)) })
3131

32+
it('also is a contract procedure', () => {
33+
expect(builder).toSatisfy(isContractProcedure)
34+
})
35+
3236
describe('self chainable', () => {
3337
it('errors', () => {
3438
const errors = {

packages/contract/src/builder.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,17 @@
11
import type { ErrorMap, ErrorMapGuard, ErrorMapSuggestions, StrictErrorMap } from './error-map'
2-
import type { RouteOptions } from './procedure'
32
import type { ContractRouter } from './router'
43
import type { AdaptedContractRouter } from './router-builder'
5-
64
import type { HTTPPath, Schema, SchemaInput, SchemaOutput } from './types'
5+
6+
import { ContractProcedure, type RouteOptions } from './procedure'
77
import { DecoratedContractProcedure } from './procedure-decorated'
88
import { ContractRouterBuilder } from './router-builder'
99

1010
export type ContractBuilderDef<TErrorMap extends ErrorMap> = {
1111
errorMap: TErrorMap
1212
}
1313

14-
export class ContractBuilder<TErrorMap extends ErrorMap> {
15-
'~type' = 'ContractBuilder' as const
16-
'~orpc': ContractBuilderDef<TErrorMap>
17-
18-
constructor(def: ContractBuilderDef<TErrorMap>) {
19-
this['~orpc'] = def
20-
}
21-
14+
export class ContractBuilder<TErrorMap extends ErrorMap> extends ContractProcedure<undefined, undefined, TErrorMap> {
2215
errors<const U extends ErrorMap & ErrorMapGuard<TErrorMap> & ErrorMapSuggestions>(errors: U): ContractBuilder<U & TErrorMap> {
2316
return new ContractBuilder({
2417
...this['~orpc'],

packages/contract/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@ export * from './types'
1919

2020
export const oc = new ContractBuilder<Record<never, never>>({
2121
errorMap: {},
22+
InputSchema: undefined,
23+
OutputSchema: undefined,
2224
})

0 commit comments

Comments
 (0)