From 606bab3bf6381e0edf4c8d11b51e71eda987cf21 Mon Sep 17 00:00:00 2001 From: unnoq Date: Sat, 7 Jun 2025 07:58:38 +0700 Subject: [PATCH 1/2] feat(hey-api): improve compatibility --- packages/hey-api/src/to-orpc-client.test-d.ts | 12 +++++----- packages/hey-api/src/to-orpc-client.test.ts | 18 +++++++-------- packages/hey-api/src/to-orpc-client.ts | 6 +++-- packages/hey-api/tests/client/sdk.gen.ts | 10 ++++---- packages/hey-api/tests/client/types.gen.ts | 20 +++++++++++----- packages/hey-api/tests/spec.json | 23 +++++++++++++++++-- 6 files changed, 59 insertions(+), 30 deletions(-) diff --git a/packages/hey-api/src/to-orpc-client.test-d.ts b/packages/hey-api/src/to-orpc-client.test-d.ts index 4202df9a5..cae97c9a7 100644 --- a/packages/hey-api/src/to-orpc-client.test-d.ts +++ b/packages/hey-api/src/to-orpc-client.test-d.ts @@ -9,23 +9,23 @@ describe('toORPCClient', () => { somethingElse: 123, }) - const c = sdk.listPlanets() + const c = sdk.planetList() it('satisfies nested client', () => { const _b: NestedClient> = client }) it('inputs', async () => { - client.listPlanets() + client.planetList() - client.listPlanets({ + client.planetList({ query: { limit: 10, offset: 0, }, }) - client.listPlanets({ + client.planetList({ query: { // @ts-expect-error - invalid type limit: 'invalid', @@ -40,8 +40,8 @@ describe('toORPCClient', () => { }) it('outputs', async () => { - expectTypeOf(await client.listPlanets()).toEqualTypeOf<{ body: Planet[], request: Request, response: Response }>() + expectTypeOf(await client.planetList()).toEqualTypeOf<{ body: Planet[], request: Request, response: Response }>() expectTypeOf(await client.getPlanet({ path: { planetId: 'earth' } })).toEqualTypeOf<{ body: Planet, request: Request, response: Response }>() - expectTypeOf(await client.createPlanet({ body: { name: 'Earth' } })).toEqualTypeOf<{ body: Planet, request: Request, response: Response }>() + expectTypeOf(await client.planetCreate({ body: { name: 'Earth' } })).toEqualTypeOf<{ body: Planet | { id: string }, request: Request, response: Response }>() }) }) diff --git a/packages/hey-api/src/to-orpc-client.test.ts b/packages/hey-api/src/to-orpc-client.test.ts index 472fd6ac9..041e515b1 100644 --- a/packages/hey-api/src/to-orpc-client.test.ts +++ b/packages/hey-api/src/to-orpc-client.test.ts @@ -47,7 +47,7 @@ describe('toORPCClient', () => { }) it('works', async () => { - const result = await client.listPlanets() + const result = await client.planetList() expect(result).toEqual({ body: [{ id: 'earth', name: 'Earth' }], request: expect.any(Request), @@ -56,7 +56,7 @@ describe('toORPCClient', () => { }) it('with lastEventId', async () => { - const result = await client.listPlanets({ + const result = await client.planetList({ headers: { 'x-something': 'value', 'last-event-id': '123', @@ -69,7 +69,7 @@ describe('toORPCClient', () => { }) it('with query', async () => { - const result = await client.listPlanets({ + const result = await client.planetList({ query: { limit: 10, offset: 0, @@ -90,7 +90,7 @@ describe('toORPCClient', () => { }) it('with body', async () => { - const result = await client.createPlanet({ + const result = await client.planetCreate({ body: { name: 'Bob' }, }) @@ -102,7 +102,7 @@ describe('toORPCClient', () => { const controller1 = new AbortController() const controller2 = new AbortController() - const result = await client.createPlanet({ + const result = await client.planetCreate({ body: { name: 'Bob' }, signal: controller1.signal, }, { signal: controller2.signal }) @@ -116,7 +116,7 @@ describe('toORPCClient', () => { const controller1 = new AbortController() const controller2 = new AbortController() - const result = await client.createPlanet({ + const result = await client.planetCreate({ body: { name: 'Bob' }, signal: controller1.signal, }, { signal: controller2.signal }) @@ -132,7 +132,7 @@ describe('toORPCClient', () => { controller1.abort() await expect( - client.createPlanet({ + client.planetCreate({ body: { name: 'Bob' }, signal: controller1.signal, }, { signal: controller2.signal }), @@ -145,7 +145,7 @@ describe('toORPCClient', () => { controller2.abort() await expect( - client.createPlanet({ + client.planetCreate({ body: { name: 'Bob' }, signal: controller1.signal, }, { signal: controller2.signal }), @@ -154,6 +154,6 @@ describe('toORPCClient', () => { }) it('throws on error', async () => { - await expect(client.listPlanets({ query: { throwOnError: 1 } as any })).rejects.toThrowError() + await expect(client.planetList({ query: { throwOnError: 1 } as any })).rejects.toThrowError() }) }) diff --git a/packages/hey-api/src/to-orpc-client.ts b/packages/hey-api/src/to-orpc-client.ts index 2eb127bac..5572e8230 100644 --- a/packages/hey-api/src/to-orpc-client.ts +++ b/packages/hey-api/src/to-orpc-client.ts @@ -2,14 +2,16 @@ import type { Client, ThrowableError } from '@orpc/client' export type experimental_ToORPCClientResult> = { [K in keyof T]: - T[K] extends (options: infer UInput extends Record | undefined) + T[K] extends (options: infer UInput) => Promise ? Client, UInput, { body: UResult extends { data: infer USuccess } ? Exclude : never request: Request response: Response }, ThrowableError> - : never + : T[K] extends Record + ? experimental_ToORPCClientResult + : never } /** diff --git a/packages/hey-api/tests/client/sdk.gen.ts b/packages/hey-api/tests/client/sdk.gen.ts index b2e627531..98bc3d667 100644 --- a/packages/hey-api/tests/client/sdk.gen.ts +++ b/packages/hey-api/tests/client/sdk.gen.ts @@ -1,7 +1,7 @@ // This file is auto-generated by @hey-api/openapi-ts import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; -import type { ListPlanetsData, ListPlanetsResponses, CreatePlanetData, CreatePlanetResponses, GetPlanetData, GetPlanetResponses, GetPlanetErrors } from './types.gen'; +import type { PlanetListData, PlanetListResponses, PlanetCreateData, PlanetCreateResponses, GetPlanetData, GetPlanetResponses, GetPlanetErrors } from './types.gen'; import { client as _heyApiClient } from './client.gen'; export type Options = ClientOptions & { @@ -18,15 +18,15 @@ export type Options; }; -export const listPlanets = (options?: Options) => { - return (options?.client ?? _heyApiClient).get({ +export const planetList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ url: '/planets', ...options }); }; -export const createPlanet = (options: Options) => { - return (options.client ?? _heyApiClient).post({ +export const planetCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ url: '/planets', ...options, headers: { diff --git a/packages/hey-api/tests/client/types.gen.ts b/packages/hey-api/tests/client/types.gen.ts index bd2a531e9..e677c38d4 100644 --- a/packages/hey-api/tests/client/types.gen.ts +++ b/packages/hey-api/tests/client/types.gen.ts @@ -9,7 +9,11 @@ export type NewPlanet = { name: string; }; -export type ListPlanetsData = { +export type UpdatedPlanet = { + id: string; +}; + +export type PlanetListData = { body?: never; path?: never; query?: { @@ -19,30 +23,34 @@ export type ListPlanetsData = { url: '/planets'; }; -export type ListPlanetsResponses = { +export type PlanetListResponses = { /** * A list of planets */ 200: Array; }; -export type ListPlanetsResponse = ListPlanetsResponses[keyof ListPlanetsResponses]; +export type PlanetListResponse = PlanetListResponses[keyof PlanetListResponses]; -export type CreatePlanetData = { +export type PlanetCreateData = { body: NewPlanet; path?: never; query?: never; url: '/planets'; }; -export type CreatePlanetResponses = { +export type PlanetCreateResponses = { + /** + * A updated planet + */ + 200: UpdatedPlanet; /** * A created planet */ 201: Planet; }; -export type CreatePlanetResponse = CreatePlanetResponses[keyof CreatePlanetResponses]; +export type PlanetCreateResponse = PlanetCreateResponses[keyof PlanetCreateResponses]; export type GetPlanetData = { body?: never; diff --git a/packages/hey-api/tests/spec.json b/packages/hey-api/tests/spec.json index b1632a825..7aab48bfc 100644 --- a/packages/hey-api/tests/spec.json +++ b/packages/hey-api/tests/spec.json @@ -7,7 +7,7 @@ "paths": { "/planets": { "get": { - "operationId": "listPlanets", + "operationId": "planet/list", "parameters": [ { "name": "limit", @@ -52,7 +52,7 @@ } }, "post": { - "operationId": "createPlanet", + "operationId": "planet.create", "requestBody": { "content": { "application/json": { @@ -73,6 +73,16 @@ } } } + }, + "200": { + "description": "A updated planet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatedPlanet" + } + } + } } } } @@ -137,6 +147,15 @@ } }, "required": ["name"] + }, + "UpdatedPlanet": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": ["id"] } } } From 81a17491cf86fe3f3a8e8115152c480f9575b573 Mon Sep 17 00:00:00 2001 From: unnoq Date: Sat, 7 Jun 2025 08:07:26 +0700 Subject: [PATCH 2/2] typo --- packages/hey-api/tests/spec.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/hey-api/tests/spec.json b/packages/hey-api/tests/spec.json index 7aab48bfc..60f2ea72a 100644 --- a/packages/hey-api/tests/spec.json +++ b/packages/hey-api/tests/spec.json @@ -75,7 +75,7 @@ } }, "200": { - "description": "A updated planet", + "description": "An updated planet", "content": { "application/json": { "schema": {