diff --git a/.changepacks/changepack_log_D8fobT6BfrHUsnwTK0qDM.json b/.changepacks/changepack_log_D8fobT6BfrHUsnwTK0qDM.json new file mode 100644 index 0000000..fff6cd0 --- /dev/null +++ b/.changepacks/changepack_log_D8fobT6BfrHUsnwTK0qDM.json @@ -0,0 +1 @@ +{"changes":{"packages/react-query/package.json":"Patch","packages/generator/package.json":"Patch","packages/core/package.json":"Patch","packages/fetch/package.json":"Patch"},"note":"Optimize typing","date":"2025-12-04T13:37:03.219785200Z"} \ No newline at end of file diff --git a/packages/core/src/additional.ts b/packages/core/src/additional.ts index ba134e0..d835e75 100644 --- a/packages/core/src/additional.ts +++ b/packages/core/src/additional.ts @@ -29,3 +29,15 @@ export type DevupApiRequestInit = Omit & { export type ExtractValue = V extends keyof T ? T[V] : F + +export type BoildApiOption = Omit & + Omit +export type ConditionalApiOption = IsCold extends true + ? DevupApiRequestInit + : BoildApiOption + +export type ApiOption = [ + RequiredOptions, +] extends [never] + ? [options?: ConditionalApiOption, ...R] + : [options: BoildApiOption, ...R] diff --git a/packages/fetch/src/api.ts b/packages/fetch/src/api.ts index 99fdc18..0867c0c 100644 --- a/packages/fetch/src/api.ts +++ b/packages/fetch/src/api.ts @@ -1,5 +1,7 @@ import type { Additional, + ApiOption, + BoildApiOption, ConditionalKeys, DevupApiRequestInit, DevupApiServers, @@ -16,9 +18,7 @@ import type { DevupPutApiStructKey, DevupPutApiStructScope, ExtractValue, - IsCold, Middleware, - RequiredOptions, } from '@devup-api/core' import { convertResponse } from './response-converter' import { getApiEndpointInfo } from './url-map' @@ -59,24 +59,14 @@ export class DevupApi> { O extends Additional>, >( path: T, - ...options: [RequiredOptions] extends [never] - ? [ - options?: IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit, - ] - : [ - options: Omit & - Omit, - ] + ...options: ApiOption ): Promise< DevupApiResponse, ExtractValue> > { return this.request(path, { method: 'GET', ...options[0], - } as DevupApiRequestInit & Omit) + } as BoildApiOption) } GET< @@ -84,24 +74,14 @@ export class DevupApi> { O extends Additional>, >( path: T, - ...options: [RequiredOptions] extends [never] - ? [ - options?: IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit, - ] - : [ - options: Omit & - Omit, - ] + ...options: ApiOption ): Promise< DevupApiResponse, ExtractValue> > { return this.request(path, { method: 'GET', ...options[0], - } as DevupApiRequestInit & Omit) + } as BoildApiOption) } post< @@ -109,24 +89,14 @@ export class DevupApi> { O extends Additional>, >( path: T, - ...options: [RequiredOptions] extends [never] - ? [ - options?: IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit, - ] - : [ - options: Omit & - Omit, - ] + ...options: ApiOption ): Promise< DevupApiResponse, ExtractValue> > { return this.request(path, { method: 'POST', ...options[0], - } as DevupApiRequestInit & Omit) + } as BoildApiOption) } POST< @@ -134,24 +104,14 @@ export class DevupApi> { O extends Additional>, >( path: T, - ...options: [RequiredOptions] extends [never] - ? [ - options?: IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit, - ] - : [ - options: Omit & - Omit, - ] + ...options: ApiOption ): Promise< DevupApiResponse, ExtractValue> > { return this.request(path, { method: 'POST', ...options[0], - } as DevupApiRequestInit & Omit) + } as BoildApiOption) } put< @@ -159,24 +119,14 @@ export class DevupApi> { O extends Additional>, >( path: T, - ...options: [RequiredOptions] extends [never] - ? [ - options?: IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit, - ] - : [ - options: Omit & - Omit, - ] + ...options: ApiOption ): Promise< DevupApiResponse, ExtractValue> > { return this.request(path, { method: 'PUT', ...options[0], - } as DevupApiRequestInit & Omit) + } as BoildApiOption) } PUT< @@ -184,24 +134,14 @@ export class DevupApi> { O extends Additional>, >( path: T, - ...options: [RequiredOptions] extends [never] - ? [ - options?: IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit, - ] - : [ - options: Omit & - Omit, - ] + ...options: ApiOption ): Promise< DevupApiResponse, ExtractValue> > { return this.request(path, { method: 'PUT', ...options[0], - } as DevupApiRequestInit & Omit) + } as BoildApiOption) } delete< @@ -209,24 +149,14 @@ export class DevupApi> { O extends Additional>, >( path: T, - ...options: [RequiredOptions] extends [never] - ? [ - options?: IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit, - ] - : [ - options: Omit & - Omit, - ] + ...options: ApiOption ): Promise< DevupApiResponse, ExtractValue> > { return this.request(path, { method: 'DELETE', ...options[0], - } as DevupApiRequestInit & Omit) + } as BoildApiOption) } DELETE< @@ -234,24 +164,14 @@ export class DevupApi> { O extends Additional>, >( path: T, - ...options: [RequiredOptions] extends [never] - ? [ - options?: IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit, - ] - : [ - options: Omit & - Omit, - ] + ...options: ApiOption ): Promise< DevupApiResponse, ExtractValue> > { return this.request(path, { method: 'DELETE', ...options[0], - } as DevupApiRequestInit & Omit) + } as BoildApiOption) } patch< @@ -259,24 +179,14 @@ export class DevupApi> { O extends Additional>, >( path: T, - ...options: [RequiredOptions] extends [never] - ? [ - options?: IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit, - ] - : [ - options: Omit & - Omit, - ] + ...options: ApiOption ): Promise< DevupApiResponse, ExtractValue> > { return this.request(path, { method: 'PATCH', ...options[0], - } as DevupApiRequestInit & Omit) + } as BoildApiOption) } PATCH< @@ -284,24 +194,14 @@ export class DevupApi> { O extends Additional>, >( path: T, - ...options: [RequiredOptions] extends [never] - ? [ - options?: IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit, - ] - : [ - options: Omit & - Omit, - ] + ...options: ApiOption ): Promise< DevupApiResponse, ExtractValue> > { return this.request(path, { method: 'PATCH', ...options[0], - } as DevupApiRequestInit & Omit) + } as BoildApiOption) } async request< @@ -309,17 +209,7 @@ export class DevupApi> { O extends Additional>, >( path: T, - ...options: [RequiredOptions] extends [never] - ? [ - options?: IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit, - ] - : [ - options: Omit & - Omit, - ] + ...options: ApiOption ): Promise< DevupApiResponse, ExtractValue> > { diff --git a/packages/react-query/src/query-client.ts b/packages/react-query/src/query-client.ts index a947e06..67441d8 100644 --- a/packages/react-query/src/query-client.ts +++ b/packages/react-query/src/query-client.ts @@ -1,5 +1,7 @@ import type { Additional, + ApiOption, + ConditionalApiOption, ConditionalKeys, DevupApi, DevupApiRequestInit, @@ -11,9 +13,6 @@ import type { DevupPostApiStructScope, DevupPutApiStructScope, ExtractValue, - IsCold, - RequiredOptions, - // RequiredOptions, } from '@devup-api/fetch' import { useInfiniteQuery, @@ -70,27 +69,16 @@ export class DevupQueryClient> { >( method: M, path: T, - ...options: [RequiredOptions] extends [never] - ? [ - options?: IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit, - queryOptions?: Omit< - Parameters>[0], - 'queryFn' | 'queryKey' - >, - queryClient?: Parameters>[1], - ] - : [ - options: Omit & - Omit, - queryOptions?: Omit< - Parameters>[0], - 'queryFn' | 'queryKey' - >, - queryClient?: Parameters>[1], - ] + ...options: ApiOption< + O, + [ + queryOptions?: Omit< + Parameters>[0], + 'queryFn' | 'queryKey' + >, + queryClient?: Parameters>[1], + ] + > ): ReturnType> { return useQuery( { @@ -143,14 +131,7 @@ export class DevupQueryClient> { O extends Additional, D extends ExtractValue, E extends ExtractValue, - V extends [RequiredOptions] extends [never] - ? - | (IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit) - | undefined - : Omit & Omit, + V extends ApiOption[0], >( method: M, path: T, @@ -208,27 +189,16 @@ export class DevupQueryClient> { >( method: M, path: T, - ...options: [RequiredOptions] extends [never] - ? [ - options?: IsCold extends true - ? DevupApiRequestInit - : Omit & - Omit, - queryOptions?: Omit< - Parameters>[0], - 'queryFn' | 'queryKey' - >, - queryClient?: Parameters>[1], - ] - : [ - options: Omit & - Omit, - queryOptions?: Omit< - Parameters>[0], - 'queryFn' | 'queryKey' - >, - queryClient?: Parameters>[1], - ] + ...options: ApiOption< + O, + [ + queryOptions?: Omit< + Parameters>[0], + 'queryFn' | 'queryKey' + >, + queryClient?: Parameters>[1], + ] + > ): ReturnType> { return useSuspenseQuery( { @@ -285,9 +255,7 @@ export class DevupQueryClient> { method: M, path: T, ...options: [ - options: (IsCold extends true - ? DevupApiRequestInit - : Omit & Omit) & + options: ConditionalApiOption & Pick< Parameters>[0], 'getNextPageParam' | 'initialPageParam'