Skip to content
Draft
27 changes: 18 additions & 9 deletions examples/openapi-ts-pinia-colada/src/client/@pinia/colada.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,18 @@ export type QueryKey<TOptions extends Options> = [
},
];

export type QueryKeyOptions<
TOptions extends Options,
TStrict extends boolean = true,
> = TStrict extends false
? Partial<Omit<TOptions, 'url'>> & { strict: false }
: TOptions & { strict?: true };

const createQueryKey = <TOptions extends Options>(
id: string,
options?: TOptions,
options?: Partial<Omit<TOptions, 'url'>> & {
strict?: boolean;
},
tags?: ReadonlyArray<string>,
): [QueryKey<TOptions>[0]] => {
const params: QueryKey<TOptions>[0] = {
Expand Down Expand Up @@ -138,7 +147,7 @@ const createQueryKey = <TOptions extends Options>(
*/
export const findPetsByStatusQuery = defineQueryOptions(
(options: Options<FindPetsByStatusData>) => ({
key: createQueryKey('findPetsByStatus', options),
key: createQueryKey<Options<FindPetsByStatusData>>('findPetsByStatus', options),
query: async (context) => {
const { data } = await findPetsByStatus({
...options,
Expand All @@ -156,7 +165,7 @@ export const findPetsByStatusQuery = defineQueryOptions(
* Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
*/
export const findPetsByTagsQuery = defineQueryOptions((options: Options<FindPetsByTagsData>) => ({
key: createQueryKey('findPetsByTags', options),
key: createQueryKey<Options<FindPetsByTagsData>>('findPetsByTags', options),
query: async (context) => {
const { data } = await findPetsByTags({
...options,
Expand Down Expand Up @@ -191,7 +200,7 @@ export const deletePetMutation = (
* Returns a single pet.
*/
export const getPetByIdQuery = defineQueryOptions((options: Options<GetPetByIdData>) => ({
key: createQueryKey('getPetById', options),
key: createQueryKey<Options<GetPetByIdData>>('getPetById', options),
query: async (context) => {
const { data } = await getPetById({
...options,
Expand Down Expand Up @@ -244,7 +253,7 @@ export const uploadFileMutation = (
* Returns a map of status codes to quantities.
*/
export const getInventoryQuery = defineQueryOptions((options?: Options<GetInventoryData>) => ({
key: createQueryKey('getInventory', options),
key: createQueryKey<Options<GetInventoryData>>('getInventory', options),
query: async (context) => {
const { data } = await getInventory({
...options,
Expand Down Expand Up @@ -297,7 +306,7 @@ export const deleteOrderMutation = (
* For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions.
*/
export const getOrderByIdQuery = defineQueryOptions((options: Options<GetOrderByIdData>) => ({
key: createQueryKey('getOrderById', options),
key: createQueryKey<Options<GetOrderByIdData>>('getOrderById', options),
query: async (context) => {
const { data } = await getOrderById({
...options,
Expand Down Expand Up @@ -354,7 +363,7 @@ export const createUsersWithListInputMutation = (
* Log into the system.
*/
export const loginUserQuery = defineQueryOptions((options?: Options<LoginUserData>) => ({
key: createQueryKey('loginUser', options),
key: createQueryKey<Options<LoginUserData>>('loginUser', options),
query: async (context) => {
const { data } = await loginUser({
...options,
Expand All @@ -371,7 +380,7 @@ export const loginUserQuery = defineQueryOptions((options?: Options<LoginUserDat
* Log user out of the system.
*/
export const logoutUserQuery = defineQueryOptions((options?: Options<LogoutUserData>) => ({
key: createQueryKey('logoutUser', options),
key: createQueryKey<Options<LogoutUserData>>('logoutUser', options),
query: async (context) => {
const { data } = await logoutUser({
...options,
Expand Down Expand Up @@ -406,7 +415,7 @@ export const deleteUserMutation = (
* Get user detail based on username.
*/
export const getUserByNameQuery = defineQueryOptions((options: Options<GetUserByNameData>) => ({
key: createQueryKey('getUserByName', options),
key: createQueryKey<Options<GetUserByNameData>>('getUserByName', options),
query: async (context) => {
const { data } = await getUserByName({
...options,
Expand Down
1 change: 1 addition & 0 deletions examples/openapi-ts-pinia-colada/src/client/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export {
logoutUserQuery,
placeOrderMutation,
type QueryKey,
type QueryKeyOptions,
updatePetMutation,
updatePetWithFormMutation,
updateUserMutation,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,18 @@ export type QueryKey<TOptions extends Options> = [
},
];

export type QueryKeyOptions<
TOptions extends Options,
TStrict extends boolean = true,
> = TStrict extends false
? Partial<Omit<TOptions, 'url'>> & { strict: false }
: TOptions & { strict?: true };

const createQueryKey = <TOptions extends Options>(
id: string,
options?: TOptions,
options?: Partial<Omit<TOptions, 'url'>> & {
strict?: boolean;
},
infinite?: boolean,
tags?: ReadonlyArray<string>,
): [QueryKey<TOptions>[0]] => {
Expand Down Expand Up @@ -150,8 +159,9 @@ const createQueryKey = <TOptions extends Options>(
return [params];
};

export const findPetsByStatusQueryKey = (options: Options<FindPetsByStatusData>) =>
createQueryKey('findPetsByStatus', options);
export const findPetsByStatusQueryKey = <TStrict extends boolean = true>(
options: QueryKeyOptions<Options<FindPetsByStatusData>, TStrict>,
) => createQueryKey<Options<FindPetsByStatusData>>('findPetsByStatus', options);

/**
* Finds Pets by status.
Expand All @@ -177,8 +187,9 @@ export const findPetsByStatusOptions = (options: Options<FindPetsByStatusData>)
queryKey: findPetsByStatusQueryKey(options),
});

export const findPetsByTagsQueryKey = (options: Options<FindPetsByTagsData>) =>
createQueryKey('findPetsByTags', options);
export const findPetsByTagsQueryKey = <TStrict extends boolean = true>(
options: QueryKeyOptions<Options<FindPetsByTagsData>, TStrict>,
) => createQueryKey<Options<FindPetsByTagsData>>('findPetsByTags', options);

/**
* Finds Pets by tags.
Expand Down Expand Up @@ -225,8 +236,9 @@ export const deletePetMutation = (
return mutationOptions;
};

export const getPetByIdQueryKey = (options: Options<GetPetByIdData>) =>
createQueryKey('getPetById', options);
export const getPetByIdQueryKey = <TStrict extends boolean = true>(
options: QueryKeyOptions<Options<GetPetByIdData>, TStrict>,
) => createQueryKey<Options<GetPetByIdData>>('getPetById', options);

/**
* Find pet by ID.
Expand Down Expand Up @@ -303,7 +315,7 @@ export const uploadFileMutation = (
};

export const getInventoryQueryKey = (options?: Options<GetInventoryData>) =>
createQueryKey('getInventory', options);
createQueryKey<Options<GetInventoryData>>('getInventory', options);

/**
* Returns pet inventories by status.
Expand Down Expand Up @@ -375,8 +387,9 @@ export const deleteOrderMutation = (
return mutationOptions;
};

export const getOrderByIdQueryKey = (options: Options<GetOrderByIdData>) =>
createQueryKey('getOrderById', options);
export const getOrderByIdQueryKey = <TStrict extends boolean = true>(
options: QueryKeyOptions<Options<GetOrderByIdData>, TStrict>,
) => createQueryKey<Options<GetOrderByIdData>>('getOrderById', options);

/**
* Find purchase order by ID.
Expand Down Expand Up @@ -457,7 +470,7 @@ export const createUsersWithListInputMutation = (
};

export const loginUserQueryKey = (options?: Options<LoginUserData>) =>
createQueryKey('loginUser', options);
createQueryKey<Options<LoginUserData>>('loginUser', options);

/**
* Logs user into the system.
Expand All @@ -484,7 +497,7 @@ export const loginUserOptions = (options?: Options<LoginUserData>) =>
});

export const logoutUserQueryKey = (options?: Options<LogoutUserData>) =>
createQueryKey('logoutUser', options);
createQueryKey<Options<LogoutUserData>>('logoutUser', options);

/**
* Logs out current logged in user session.
Expand Down Expand Up @@ -526,8 +539,9 @@ export const deleteUserMutation = (
return mutationOptions;
};

export const getUserByNameQueryKey = (options: Options<GetUserByNameData>) =>
createQueryKey('getUserByName', options);
export const getUserByNameQueryKey = <TStrict extends boolean = true>(
options: QueryKeyOptions<Options<GetUserByNameData>, TStrict>,
) => createQueryKey<Options<GetUserByNameData>>('getUserByName', options);

/**
* Get user by user name.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,18 @@ export type QueryKey<TOptions extends Options> = [
},
];

export type QueryKeyOptions<
TOptions extends Options,
TStrict extends boolean = true,
> = TStrict extends false
? Partial<Omit<TOptions, 'url'>> & { strict: false }
: TOptions & { strict?: true };

const createQueryKey = <TOptions extends Options>(
id: string,
options?: TOptions,
options?: Partial<Omit<TOptions, 'url'>> & {
strict?: boolean;
},
infinite?: boolean,
tags?: ReadonlyArray<string>,
): [QueryKey<TOptions>[0]] => {
Expand Down Expand Up @@ -125,8 +134,9 @@ const createQueryKey = <TOptions extends Options>(
return [params];
};

export const findPetsByStatusQueryKey = (options: Options<FindPetsByStatusData>) =>
createQueryKey('findPetsByStatus', options);
export const findPetsByStatusQueryKey = <TStrict extends boolean = true>(
options: QueryKeyOptions<Options<FindPetsByStatusData>, TStrict>,
) => createQueryKey<Options<FindPetsByStatusData>>('findPetsByStatus', options);

/**
* Finds Pets by status.
Expand All @@ -152,8 +162,9 @@ export const findPetsByStatusOptions = (options: Options<FindPetsByStatusData>)
queryKey: findPetsByStatusQueryKey(options),
});

export const findPetsByTagsQueryKey = (options: Options<FindPetsByTagsData>) =>
createQueryKey('findPetsByTags', options);
export const findPetsByTagsQueryKey = <TStrict extends boolean = true>(
options: QueryKeyOptions<Options<FindPetsByTagsData>, TStrict>,
) => createQueryKey<Options<FindPetsByTagsData>>('findPetsByTags', options);

/**
* Finds Pets by tags.
Expand Down Expand Up @@ -200,8 +211,9 @@ export const deletePetMutation = (
return mutationOptions;
};

export const getPetByIdQueryKey = (options: Options<GetPetByIdData>) =>
createQueryKey('getPetById', options);
export const getPetByIdQueryKey = <TStrict extends boolean = true>(
options: QueryKeyOptions<Options<GetPetByIdData>, TStrict>,
) => createQueryKey<Options<GetPetByIdData>>('getPetById', options);

/**
* Find pet by ID.
Expand Down Expand Up @@ -278,7 +290,7 @@ export const uploadFileMutation = (
};

export const getInventoryQueryKey = (options?: Options<GetInventoryData>) =>
createQueryKey('getInventory', options);
createQueryKey<Options<GetInventoryData>>('getInventory', options);

/**
* Returns pet inventories by status.
Expand Down Expand Up @@ -350,8 +362,9 @@ export const deleteOrderMutation = (
return mutationOptions;
};

export const getOrderByIdQueryKey = (options: Options<GetOrderByIdData>) =>
createQueryKey('getOrderById', options);
export const getOrderByIdQueryKey = <TStrict extends boolean = true>(
options: QueryKeyOptions<Options<GetOrderByIdData>, TStrict>,
) => createQueryKey<Options<GetOrderByIdData>>('getOrderById', options);

/**
* Find purchase order by ID.
Expand Down Expand Up @@ -432,7 +445,7 @@ export const createUsersWithListInputMutation = (
};

export const loginUserQueryKey = (options?: Options<LoginUserData>) =>
createQueryKey('loginUser', options);
createQueryKey<Options<LoginUserData>>('loginUser', options);

/**
* Logs user into the system.
Expand All @@ -459,7 +472,7 @@ export const loginUserOptions = (options?: Options<LoginUserData>) =>
});

export const logoutUserQueryKey = (options?: Options<LogoutUserData>) =>
createQueryKey('logoutUser', options);
createQueryKey<Options<LogoutUserData>>('logoutUser', options);

/**
* Logs out current logged in user session.
Expand Down Expand Up @@ -501,8 +514,9 @@ export const deleteUserMutation = (
return mutationOptions;
};

export const getUserByNameQueryKey = (options: Options<GetUserByNameData>) =>
createQueryKey('getUserByName', options);
export const getUserByNameQueryKey = <TStrict extends boolean = true>(
options: QueryKeyOptions<Options<GetUserByNameData>, TStrict>,
) => createQueryKey<Options<GetUserByNameData>>('getUserByName', options);

/**
* Get user by user name.
Expand Down
Loading
Loading