From d3e97bd05adba3d38aadb0269c2357cd47f899fd Mon Sep 17 00:00:00 2001 From: andrej kastritsa Date: Tue, 10 Sep 2024 23:14:50 +0300 Subject: [PATCH] fix/#1447 has signal added or condition verb equals post --- packages/core/src/generators/options.ts | 3 +-- packages/query/src/client.ts | 13 ++++++++----- packages/query/src/index.ts | 6 +++++- packages/query/src/utils.ts | 10 ++++++++++ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/packages/core/src/generators/options.ts b/packages/core/src/generators/options.ts index 230a6f081..46b213e9a 100644 --- a/packages/core/src/generators/options.ts +++ b/packages/core/src/generators/options.ts @@ -1,4 +1,3 @@ -import { VERBS_WITH_BODY } from '../constants'; import { GeneratorMutator, GeneratorSchema, @@ -283,7 +282,7 @@ export const generateMutatorConfig = ({ : ''; return `{url: \`${route}\`, method: '${verb.toUpperCase()}'${headerOptions}${bodyOptions}${queryParamsOptions}${ - !getIsBodyVerb(verb) && hasSignal + hasSignal ? `, ${ isExactOptionalPropertyTypes ? '...(signal ? { signal }: {})' diff --git a/packages/query/src/client.ts b/packages/query/src/client.ts index b6129a916..081254efd 100644 --- a/packages/query/src/client.ts +++ b/packages/query/src/client.ts @@ -12,12 +12,14 @@ import { generateFormDataAndUrlEncodedFunction, generateMutatorConfig, generateMutatorRequestOptions, + Verbs, getIsBodyVerb, } from '@orval/core'; import { generateRequestFunction as generateFetchRequestFunction } from '@orval/fetch'; import { + getHasSignal, isVue, makeRouteSafe, vueUnRefParams, @@ -86,7 +88,10 @@ export const generateAxiosRequestFunction = ( const isRequestOptions = override.requestOptions !== false; const isFormData = override.formData !== false; const isFormUrlEncoded = override.formUrlEncoded !== false; - const hasSignal = !!override.query.signal; + const hasSignal = getHasSignal({ + overrideQuerySignal: override.query.signal, + verb, + }); const isExactOptionalPropertyTypes = !!context.output.tsconfig?.compilerOptions?.exactOptionalPropertyTypes; @@ -142,9 +147,7 @@ export const generateAxiosRequestFunction = ( isRequestOptions && mutator.hasSecondArg ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter>,` : '' - }${ - !getIsBodyVerb(verb) && hasSignal ? 'signal?: AbortSignal\n' : '' - }) => {${bodyForm} + }${hasSignal ? 'signal?: AbortSignal\n' : ''}) => {${bodyForm} return ${operationName}( ${mutatorConfig}, ${requestOptions}); @@ -157,7 +160,7 @@ export const generateAxiosRequestFunction = ( isRequestOptions && mutator.hasSecondArg ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter,` : '' - }${!getIsBodyVerb(verb) && hasSignal ? 'signal?: AbortSignal\n' : ''}) => { + }${hasSignal ? 'signal?: AbortSignal\n' : ''}) => { ${isVue ? vueUnRefParams(props) : ''} ${bodyForm} return ${mutator.name}<${response.definition.success || 'unknown'}>( diff --git a/packages/query/src/index.ts b/packages/query/src/index.ts index 2c53d50b6..fa0ff0243 100644 --- a/packages/query/src/index.ts +++ b/packages/query/src/index.ts @@ -44,6 +44,7 @@ import { getQueryOptions, } from './client'; import { + getHasSignal, isVue, normalizeQueryOptions, vueUnRefParams, @@ -1216,7 +1217,10 @@ const generateQueryHook = async ( outputClient, httpClient, isExactOptionalPropertyTypes, - hasSignal: !!query.signal, + hasSignal: getHasSignal({ + overrideQuerySignal: override.query.signal, + verb, + }), queryOptionsMutator, queryKeyMutator, route, diff --git a/packages/query/src/utils.ts b/packages/query/src/utils.ts index 49285ae38..59fb18723 100644 --- a/packages/query/src/utils.ts +++ b/packages/query/src/utils.ts @@ -12,6 +12,8 @@ import { GetterProps, GetterPropType, TEMPLATE_TAG_REGEX, + getIsBodyVerb, + Verbs, } from '@orval/core'; import chalk from 'chalk'; @@ -130,3 +132,11 @@ export const makeRouteSafe = (route: string): string => export const isVue = (client: OutputClient | OutputClientFunc) => OutputClient.VUE_QUERY === client; + +export const getHasSignal = ({ + overrideQuerySignal = false, + verb, +}: { + verb: Verbs; + overrideQuerySignal?: boolean; +}) => overrideQuerySignal && (!getIsBodyVerb(verb) || verb === Verbs.POST);