From ecb68966dd160a80627678958e19dc48d433fc23 Mon Sep 17 00:00:00 2001 From: unnoq Date: Wed, 17 Dec 2025 12:09:07 +0700 Subject: [PATCH 1/3] fix(contract): missing `.$input` builder method --- packages/contract/src/builder.test-d.ts | 9 +++++++++ packages/contract/src/builder.test.ts | 9 +++++++++ packages/contract/src/builder.ts | 14 ++++++++++++++ 3 files changed, 32 insertions(+) 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..25b8afc8b 100644 --- a/packages/contract/src/builder.test.ts +++ b/packages/contract/src/builder.test.ts @@ -49,6 +49,15 @@ describe('contractBuilder', () => { }) }) + it('.$input', () => { + const applied = builder.$input(generalSchema) + expect(applied).toBeInstanceOf(ContractBuilder) + 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. From 7f121462431a145f115be3b30100aa928e27fb7d Mon Sep 17 00:00:00 2001 From: unnoq Date: Wed, 17 Dec 2025 12:12:06 +0700 Subject: [PATCH 2/3] tests --- packages/contract/src/builder.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/contract/src/builder.test.ts b/packages/contract/src/builder.test.ts index 25b8afc8b..62c8fcc9f 100644 --- a/packages/contract/src/builder.test.ts +++ b/packages/contract/src/builder.test.ts @@ -43,6 +43,7 @@ describe('contractBuilder', () => { const applied = builder.$route(route) expect(applied).toBeInstanceOf(ContractBuilder) + expect(applied).not.toBe(builder) expect(applied['~orpc']).toEqual({ ...def, route, @@ -52,6 +53,7 @@ describe('contractBuilder', () => { it('.$input', () => { const applied = builder.$input(generalSchema) expect(applied).toBeInstanceOf(ContractBuilder) + expect(applied).not.toBe(builder) expect(applied['~orpc']).toEqual({ ...def, inputSchema: generalSchema, From dd50fe6f1f010113491d87d1618517d099daf67d Mon Sep 17 00:00:00 2001 From: unnoq Date: Wed, 17 Dec 2025 12:14:39 +0700 Subject: [PATCH 3/3] tests --- packages/contract/src/builder-variants.test-d.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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()