diff --git a/packages/contract/src/builder-variants.test-d.ts b/packages/contract/src/builder-variants.test-d.ts index c46238932..b40d515fd 100644 --- a/packages/contract/src/builder-variants.test-d.ts +++ b/packages/contract/src/builder-variants.test-d.ts @@ -14,7 +14,7 @@ describe('ContractProcedureBuilder', () => { const builder = {} as ContractProcedureBuilder it('backward compatibility', () => { - const expected = {} as OmitChainMethodDeep + const expected = {} as OmitChainMethodDeep expectTypeOf(builder).toMatchTypeOf(expected) expectTypeOf().toEqualTypeOf() @@ -95,7 +95,7 @@ describe('ContractProcedureBuilderWithInput', () => { const builder = {} as ContractProcedureBuilderWithInput it('backward compatibility', () => { - const expected = {} as OmitChainMethodDeep + const expected = {} as OmitChainMethodDeep expectTypeOf(builder).toMatchTypeOf(expected) expectTypeOf().toEqualTypeOf() @@ -162,7 +162,7 @@ describe('ContractProcedureBuilderWithOutput', () => { const builder = {} as ContractProcedureBuilderWithOutput it('backward compatibility', () => { - const expected = {} as OmitChainMethodDeep + const expected = {} as OmitChainMethodDeep expectTypeOf(builder).toMatchTypeOf(expected) expectTypeOf().toEqualTypeOf() @@ -229,7 +229,7 @@ it('ContractProcedureBuilderWithInputOutput', () => { const builder = {} as ContractProcedureBuilderWithInputOutput it('backward compatibility', () => { - const expected = {} as OmitChainMethodDeep + const expected = {} as OmitChainMethodDeep expectTypeOf(builder).toMatchTypeOf(expected) expectTypeOf().toEqualTypeOf() @@ -282,7 +282,7 @@ describe('ContractRouterBuilder', () => { const builder = {} as ContractRouterBuilder it('backward compatibility', () => { - const expected = {} as OmitChainMethodDeep + const expected = {} as OmitChainMethodDeep // expectTypeOf(builder).toMatchTypeOf(expected) expectTypeOf().toEqualTypeOf() diff --git a/packages/contract/src/builder.test-d.ts b/packages/contract/src/builder.test-d.ts index f0e3a2df1..ed9818e9d 100644 --- a/packages/contract/src/builder.test-d.ts +++ b/packages/contract/src/builder.test-d.ts @@ -41,6 +41,15 @@ describe('ContractBuilder', () => { builder.$route({ method: 'INVALID' }) }) + it('.$input', () => { + expectTypeOf(builder.$input(generalSchema)).toEqualTypeOf< + ContractBuilder + >() + + // @ts-expect-error - schema is invalid + builder.$input({}) + }) + it('.errors', () => { expectTypeOf(builder.errors({ INVALID: { message: 'invalid' }, OVERRIDE: { message: 'override' } })).toEqualTypeOf< ContractBuilder< diff --git a/packages/contract/src/builder.test.ts b/packages/contract/src/builder.test.ts index 799c630ed..62c8fcc9f 100644 --- a/packages/contract/src/builder.test.ts +++ b/packages/contract/src/builder.test.ts @@ -43,12 +43,23 @@ describe('contractBuilder', () => { const applied = builder.$route(route) expect(applied).toBeInstanceOf(ContractBuilder) + expect(applied).not.toBe(builder) expect(applied['~orpc']).toEqual({ ...def, route, }) }) + it('.$input', () => { + const applied = builder.$input(generalSchema) + expect(applied).toBeInstanceOf(ContractBuilder) + expect(applied).not.toBe(builder) + expect(applied['~orpc']).toEqual({ + ...def, + inputSchema: generalSchema, + }) + }) + it('.errors', () => { const errors = { BAD_GATEWAY: { data: outputSchema }, OVERRIDE: { message: 'override' } } as const diff --git a/packages/contract/src/builder.ts b/packages/contract/src/builder.ts index 7a18f1310..4e04711f0 100644 --- a/packages/contract/src/builder.ts +++ b/packages/contract/src/builder.ts @@ -73,6 +73,20 @@ export class ContractBuilder< }) } + /** + * Sets or overrides the initial input schema. + * + * @see {@link https://orpc.dev/docs/procedure#initial-configuration Initial Procedure Configuration Docs} + */ + $input( + initialInputSchema?: U, + ): ContractBuilder { + return new ContractBuilder({ + ...this['~orpc'], + inputSchema: initialInputSchema, + }) + } + /** * Adds type-safe custom errors to the contract. * The provided errors are spared-merged with any existing errors in the contract.