@openapi-qraft/react
Version:
OpenAPI client for React, providing type-safe requests and dynamic TanStack Query React Hooks via a modular, Proxy-based architecture.
46 lines (41 loc) • 1.38 kB
text/typescript
import type { ServiceOperationMutationKey } from '@openapi-qraft/tanstack-query-react-types';
import type { OperationSchema } from './requestFn.js';
/**
* Omit `body` or `requestBody` from mutation parameters if exists
* and return the rest of the parameters
*/
export function composeMutationKey<TSchema extends OperationSchema>(
schema: TSchema,
parameters: undefined
): ServiceOperationMutationKey<TSchema, undefined>;
export function composeMutationKey<TSchema extends OperationSchema, TParams>(
schema: TSchema,
parameters: TParams
): ServiceOperationMutationKey<TSchema, TParams>;
export function composeMutationKey<
TSchema extends OperationSchema,
TParams = unknown,
>(schema: TSchema, parameters: TParams | undefined) {
return parameters === undefined
? [{ url: schema.url, method: schema.method }, {}]
: [
{
url: schema.url,
method: schema.method,
},
omitMutationPayload(parameters),
];
}
function omitMutationPayload<T>(params: T) {
if (!params || typeof params !== 'object')
throw new Error('`params` must be object');
if ('body' in params || 'requestBody' in params) {
const {
body: _,
requestBody: __,
...paramsRest
} = params as Record<'body' | 'requestBody', unknown>;
return paramsRest;
}
return params as Omit<T, 'body' | 'requestBody'>;
}