@orval/query 8.19.0 → 8.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["generateFetchRequestFunction","OutputClientConst"],"sources":["../src/utils.ts","../src/client.ts","../src/dependencies.ts","../src/query-options.ts","../src/frameworks/angular.ts","../src/frameworks/react.ts","../src/frameworks/solid.ts","../src/frameworks/svelte.ts","../src/frameworks/vue.ts","../src/frameworks/index.ts","../src/mutation-generator.ts","../src/query-generator.ts","../src/index.ts"],"sourcesContent":["import nodePath from 'node:path';\nimport { styleText } from 'node:util';\n\nimport {\n type GetterProps,\n GetterPropType,\n isObject,\n isString,\n type Mutator,\n type NormalizedMutator,\n type NormalizedQueryOptions,\n type QueryOptions,\n} from '@orval/core';\n\nexport const normalizeQueryOptions = (\n queryOptions: QueryOptions = {},\n outputWorkspace: string,\n): NormalizedQueryOptions => {\n return {\n ...(queryOptions.usePrefetch ? { usePrefetch: true } : {}),\n ...(queryOptions.useInvalidate ? { useInvalidate: true } : {}),\n ...(queryOptions.useSetQueryData ? { useSetQueryData: true } : {}),\n ...(queryOptions.useGetQueryData ? { useGetQueryData: true } : {}),\n // Preserve explicit `false` so the toggles aren't silent no-ops (#2376).\n ...(queryOptions.useQuery === undefined\n ? {}\n : { useQuery: queryOptions.useQuery }),\n ...(queryOptions.useMutation === undefined\n ? {}\n : { useMutation: queryOptions.useMutation }),\n ...(queryOptions.useSuspenseQuery ? { useSuspenseQuery: true } : {}),\n ...(queryOptions.useSuspenseInfiniteQuery\n ? { useSuspenseInfiniteQuery: true }\n : {}),\n ...(queryOptions.useInfinite ? { useInfinite: true } : {}),\n ...(queryOptions.useInfiniteQueryParam\n ? { useInfiniteQueryParam: queryOptions.useInfiniteQueryParam }\n : {}),\n ...(queryOptions.options ? { options: queryOptions.options } : {}),\n ...(queryOptions.queryKey\n ? {\n queryKey: normalizeMutator(outputWorkspace, queryOptions.queryKey),\n }\n : {}),\n ...(queryOptions.queryOptions\n ? {\n queryOptions: normalizeMutator(\n outputWorkspace,\n queryOptions.queryOptions,\n ),\n }\n : {}),\n ...(queryOptions.mutationOptions\n ? {\n mutationOptions: normalizeMutator(\n outputWorkspace,\n queryOptions.mutationOptions,\n ),\n }\n : {}),\n ...(queryOptions.signal ? { signal: true } : {}),\n ...(queryOptions.shouldExportMutatorHooks\n ? { shouldExportMutatorHooks: true }\n : {}),\n ...(queryOptions.shouldExportQueryKey\n ? { shouldExportQueryKey: true }\n : {}),\n ...(queryOptions.shouldFilterQueryKey\n ? { shouldFilterQueryKey: true }\n : {}),\n ...(queryOptions.queryKeyFilter\n ? { queryKeyFilter: queryOptions.queryKeyFilter }\n : {}),\n ...(queryOptions.shouldExportHttpClient\n ? { shouldExportHttpClient: true }\n : {}),\n ...(queryOptions.shouldSplitQueryKey ? { shouldSplitQueryKey: true } : {}),\n ...(queryOptions.useOperationIdAsQueryKey\n ? { useOperationIdAsQueryKey: true }\n : {}),\n };\n};\n\n// Temporary duplicate code before next major release\nconst normalizeMutator = (\n workspace: string,\n mutator?: Mutator,\n): NormalizedMutator | undefined => {\n if (isObject(mutator)) {\n const m = mutator as Exclude<Mutator, string>;\n if (!m.path) {\n throw new Error(styleText('red', `Mutator need a path`));\n }\n\n return {\n path: nodePath.resolve(workspace, m.path),\n name: m.name,\n default: m.default ?? !m.name,\n alias: m.alias,\n external: m.external,\n extension: m.extension,\n };\n }\n\n if (isString(mutator)) {\n return {\n path: nodePath.resolve(workspace, mutator),\n default: true,\n };\n }\n\n return undefined;\n};\n\nexport function vueWrapTypeWithMaybeRef(props: GetterProps): GetterProps {\n return props.map((prop) => {\n const [paramName, paramType] = prop.implementation.split(':');\n if (!paramType) return prop;\n const name =\n prop.type === GetterPropType.NAMED_PATH_PARAMS ? prop.name : paramName;\n\n const [type, defaultValue] = paramType.split('=');\n return {\n ...prop,\n implementation: `${name}: MaybeRef<${type.trim()}>${\n defaultValue ? ` = ${defaultValue}` : ''\n }`,\n };\n });\n}\n\nexport const vueUnRefParams = (props: GetterProps): string => {\n return props\n .map((prop) => {\n if (prop.type === GetterPropType.NAMED_PATH_PARAMS) {\n return `const ${prop.destructured} = unref(${prop.name});`;\n }\n return `${prop.name} = unref(${prop.name});`;\n })\n .join('\\n');\n};\n\nexport const getQueryTypeForFramework = (type: string): string => {\n // Angular Query and Svelte Query don't have suspense variants, map them to regular queries\n switch (type) {\n case 'suspenseQuery': {\n return 'query';\n }\n case 'suspenseInfiniteQuery': {\n return 'infiniteQuery';\n }\n default: {\n return type;\n }\n }\n};\n\nexport const getHasSignal = ({\n overrideQuerySignal = false,\n}: {\n overrideQuerySignal?: boolean;\n}) => overrideQuerySignal;\n","import {\n type ClientHeaderBuilder,\n generateFormDataAndUrlEncodedFunction,\n generateMutatorConfig,\n generateMutatorRequestOptions,\n generateOptions,\n type GeneratorDependency,\n type GeneratorMutator,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n getAngularFilteredParamsCallExpression,\n getAngularFilteredParamsHelperBody,\n getSuccessResponseType,\n type GetterResponse,\n isObject,\n isOperationInTagBucket,\n isSyntheticDefaultImportsAllow,\n makeRouteSafe,\n OutputHttpClient,\n pascal,\n toObjectString,\n} from '@orval/core';\nimport { generateFetchHeader } from '@orval/fetch';\n\nimport type { FrameworkAdapter } from './framework-adapter';\nimport { getHasSignal } from './utils';\n\nexport const AXIOS_DEPENDENCIES = [\n {\n exports: [\n {\n name: 'axios',\n default: true,\n values: true,\n syntheticDefaultImport: true,\n },\n { name: 'AxiosRequestConfig' },\n { name: 'AxiosResponse' },\n { name: 'AxiosError' },\n ],\n dependency: 'axios',\n },\n] as const satisfies readonly GeneratorDependency[];\n\nexport const ANGULAR_HTTP_DEPENDENCIES = [\n {\n exports: [\n { name: 'HttpClient', values: true },\n { name: 'HttpHeaders', values: true },\n { name: 'HttpParams', values: true },\n { name: 'HttpContext' },\n ],\n dependency: '@angular/common/http',\n },\n // Note: 'inject' from @angular/core is already in ANGULAR_QUERY_DEPENDENCIES\n {\n exports: [\n { name: 'lastValueFrom', values: true },\n { name: 'fromEvent', values: true },\n ],\n dependency: 'rxjs',\n },\n {\n exports: [\n { name: 'takeUntil', values: true },\n { name: 'map', values: true },\n ],\n dependency: 'rxjs/operators',\n },\n] as const satisfies readonly GeneratorDependency[];\n\nexport const generateAngularHttpRequestFunction = (\n {\n headers,\n queryParams,\n operationName,\n response,\n mutator,\n body,\n props,\n verb,\n formData,\n formUrlEncoded,\n override,\n }: GeneratorVerbOptions,\n { route: _route, context }: GeneratorOptions,\n) => {\n let route = _route;\n if (context.output.urlEncodeParameters) {\n route = makeRouteSafe(route);\n }\n\n const isRequestOptions = override.requestOptions !== false;\n const isFormData = !override.formData.disabled;\n const isFormUrlEncoded = override.formUrlEncoded !== false;\n const hasSignal = getHasSignal({\n overrideQuerySignal: override.query.signal,\n });\n // Check if API has a param named \"signal\" to avoid conflict with AbortSignal\n const hasSignalParam = props.some((prop) => prop.name === 'signal');\n\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n // Handle mutator case\n if (mutator) {\n const isExactOptionalPropertyTypes =\n !!context.output.tsconfig?.compilerOptions?.exactOptionalPropertyTypes;\n\n const mutatorConfig = generateMutatorConfig({\n route,\n body,\n headers,\n queryParams,\n response,\n verb,\n isFormData,\n isFormUrlEncoded,\n hasSignal,\n hasSignalParam,\n isExactOptionalPropertyTypes,\n isAngular: context.output.httpClient === OutputHttpClient.ANGULAR,\n });\n\n const requestOptions = isRequestOptions\n ? generateMutatorRequestOptions(\n override.requestOptions,\n mutator.hasSecondArg,\n )\n : '';\n\n const propsImplementation = toObjectString(props, 'implementation');\n\n return `${override.query.shouldExportHttpClient ? 'export ' : ''}const ${operationName} = (\\n ${propsImplementation}\\n ${\n isRequestOptions && mutator.hasSecondArg\n ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter<typeof ${mutator.name}>,`\n : ''\n } ${getSignalDefinition({ hasSignal, hasSignalParam })}) => {\n ${bodyForm}\n return ${mutator.name}<${response.definition.success || 'unknown'}>(\n ${mutatorConfig},\n ${requestOptions});\n }\n `;\n }\n\n // Generate native Angular HttpClient implementation\n const queryProps = toObjectString(props, 'implementation').replace(\n /,\\s*$/,\n '',\n );\n const dataType = response.definition.success || 'unknown';\n\n // Build URL with query params - use httpParams to avoid shadowing the 'params' variable\n const hasQueryParams = queryParams?.schema.name;\n // The queryParams variable from function props is always named 'params'\n const filteredParamsExpression = getAngularFilteredParamsCallExpression(\n 'params',\n queryParams?.requiredNullableKeys,\n );\n const urlConstruction = hasQueryParams\n ? `const httpParams = params ? new HttpParams({ fromObject: ${filteredParamsExpression} }) : undefined;\n const url = \\`${route}\\`;`\n : `const url = \\`${route}\\`;`;\n\n // Build request options\n const httpOptions: string[] = [];\n if (hasQueryParams) {\n httpOptions.push('params: httpParams');\n }\n if (headers) {\n httpOptions.push('headers: new HttpHeaders(headers)');\n }\n\n // Use only success response content types to determine responseType\n // (response.contentTypes includes error responses which may be JSON and would\n // incorrectly prevent text/blob responseType from being set)\n const successResponseType = getSuccessResponseType(response);\n const responseTypeOption = successResponseType\n ? `'${successResponseType}'`\n : undefined;\n if (responseTypeOption) {\n httpOptions.push(`responseType: ${responseTypeOption}`);\n }\n\n const optionsStr =\n httpOptions.length > 0 ? `, { ${httpOptions.join(', ')} }` : '';\n\n // Build the HTTP method call\n let httpCall: string;\n const httpGeneric = responseTypeOption ? '' : `<${dataType}>`;\n const bodyArg =\n isFormData && body.formData\n ? 'formData'\n : isFormUrlEncoded && body.formUrlEncoded\n ? 'formUrlEncoded'\n : body.definition\n ? toObjectString([body], 'implementation').replace(/,\\s*$/, '')\n : '';\n\n switch (verb) {\n case 'get':\n case 'head': {\n httpCall = `http.${verb}${httpGeneric}(url${optionsStr})`;\n break;\n }\n case 'delete': {\n httpCall = bodyArg\n ? `http.${verb}${httpGeneric}(url, { ${httpOptions.length > 0 ? httpOptions.join(', ') + ', ' : ''}body: ${bodyArg} })`\n : `http.${verb}${httpGeneric}(url${optionsStr})`;\n break;\n }\n default: {\n // post, put, patch\n httpCall = `http.${verb}${httpGeneric}(url, ${bodyArg || 'undefined'}${optionsStr})`;\n break;\n }\n }\n\n // Detect if Zod runtime validation should be applied\n const responseType = response.definition.success;\n const isPrimitiveType = [\n 'string',\n 'number',\n 'boolean',\n 'void',\n 'unknown',\n ].includes(responseType);\n const hasSchema = response.imports.some((imp) => imp.name === responseType);\n const isZodOutput =\n isObject(context.output.schemas) && context.output.schemas.type === 'zod';\n const isValidateResponse =\n override.query.runtimeValidation &&\n isZodOutput &&\n !isPrimitiveType &&\n hasSchema;\n\n // If validation is enabled, pipe through map(data => Schema.parse(data))\n if (isValidateResponse) {\n const schemaValueRef =\n responseType === 'Error' ? 'ErrorSchema' : responseType;\n httpCall = `${httpCall}.pipe(map(data => ${schemaValueRef}.parse(data)))`;\n }\n\n // For Angular, we use takeUntil with fromEvent to handle AbortSignal cancellation\n // This follows the pattern from TanStack Query Angular documentation\n // Note: signal can be null (from RequestInit), so we accept null | undefined\n const optionsParam = hasSignal\n ? 'options?: { signal?: AbortSignal | null }'\n : '';\n\n // Build additional params after http, handling empty queryProps properly\n const additionalParams = [queryProps, optionsParam]\n .filter(Boolean)\n .join(', ');\n\n // Note: http parameter is passed from the inject* function which has injection context\n return `${override.query.shouldExportHttpClient ? 'export ' : ''}const ${operationName} = (\n http: HttpClient${additionalParams ? `,\\n ${additionalParams}` : ''}\n ): Promise<${dataType}> => {\n ${bodyForm}\n ${urlConstruction}\n const request$ = ${httpCall};\n if (options?.signal) {\n return lastValueFrom(request$.pipe(takeUntil(fromEvent(options.signal, 'abort'))));\n }\n return lastValueFrom(request$);\n }\n`;\n};\nexport const generateAxiosRequestFunction = (\n {\n headers,\n queryParams,\n operationName,\n response,\n mutator,\n body,\n props: _props,\n verb,\n formData,\n formUrlEncoded,\n override,\n paramsSerializer,\n }: GeneratorVerbOptions,\n { route: _route, context }: GeneratorOptions,\n adapter: FrameworkAdapter,\n) => {\n const props = adapter.transformProps(_props);\n let route = _route;\n\n if (context.output.urlEncodeParameters) {\n route = makeRouteSafe(route);\n }\n\n const unrefStatements = adapter.getRequestUnrefStatements(props);\n\n const isRequestOptions = override.requestOptions !== false;\n const isFormData = !override.formData.disabled;\n const isFormUrlEncoded = override.formUrlEncoded !== false;\n const hasSignal = getHasSignal({\n overrideQuerySignal: override.query.signal,\n });\n // Check if API has a param named \"signal\" to avoid conflict with AbortSignal\n const hasSignalParam = _props.some((prop) => prop.name === 'signal');\n\n const isExactOptionalPropertyTypes =\n !!context.output.tsconfig?.compilerOptions?.exactOptionalPropertyTypes;\n\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n if (mutator) {\n const mutatorConfig = generateMutatorConfig({\n route,\n body,\n headers,\n queryParams,\n response,\n verb,\n isFormData,\n isFormUrlEncoded,\n hasSignal,\n hasSignalParam,\n isExactOptionalPropertyTypes,\n });\n\n const bodyDefinition = body.definition.replace('[]', String.raw`\\[\\]`);\n const propsImplementation =\n mutator.bodyTypeName && body.definition\n ? toObjectString(props, 'implementation').replace(\n new RegExp(String.raw`(\\w*):\\s?${bodyDefinition}`),\n `$1: ${mutator.bodyTypeName}<${body.definition}>`,\n )\n : toObjectString(props, 'implementation');\n\n const requestOptions = isRequestOptions\n ? generateMutatorRequestOptions(\n override.requestOptions,\n mutator.hasSecondArg,\n )\n : '';\n\n if (mutator.isHook) {\n const hookSecondArg =\n isRequestOptions && mutator.hasSecondArg\n ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter<ReturnType<typeof ${mutator.name}>>,`\n : '';\n\n const callback = `(\\n ${propsImplementation}\\n ${hookSecondArg}${getSignalDefinition({ hasSignal, hasSignalParam })}) => {\n ${unrefStatements}\n ${bodyForm}\n return ${operationName}(\n ${mutatorConfig},\n ${requestOptions});\n }`;\n\n return `${\n override.query.shouldExportMutatorHooks ? 'export ' : ''\n }const use${pascal(operationName)}Hook = () => {\n const ${operationName} = ${mutator.name}<${\n response.definition.success || 'unknown'\n }>();\n\n return ${adapter.wrapHookMutatorCallback(callback, operationName)}\n }\n `;\n }\n\n return `${override.query.shouldExportHttpClient ? 'export ' : ''}const ${operationName} = (\\n ${propsImplementation}\\n ${\n isRequestOptions && mutator.hasSecondArg\n ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter<typeof ${mutator.name}>,`\n : ''\n }${getSignalDefinition({ hasSignal, hasSignalParam })}) => {\n ${unrefStatements}\n ${bodyForm}\n return ${mutator.name}<${response.definition.success || 'unknown'}>(\n ${mutatorConfig},\n ${requestOptions});\n }\n `;\n }\n\n const isSyntheticDefaultImportsAllowed = isSyntheticDefaultImportsAllow(\n context.output.tsconfig,\n );\n\n const options = generateOptions({\n route,\n body,\n headers,\n queryParams,\n response,\n verb,\n requestOptions: override.requestOptions,\n isFormData,\n isFormUrlEncoded,\n paramsSerializer,\n paramsSerializerOptions: override.paramsSerializerOptions,\n isExactOptionalPropertyTypes,\n hasSignal,\n hasSignalParam,\n });\n\n const optionsArgs = generateRequestOptionsArguments({\n isRequestOptions,\n hasSignal,\n hasSignalParam,\n });\n\n const queryProps = toObjectString(props, 'implementation');\n\n const httpRequestFunctionImplementation = `${override.query.shouldExportHttpClient ? 'export ' : ''}const ${operationName} = (\\n ${queryProps} ${optionsArgs} ): Promise<AxiosResponse<${\n response.definition.success || 'unknown'\n }>> => {\n ${unrefStatements}\n ${bodyForm}\n return axios${\n isSyntheticDefaultImportsAllowed ? '' : '.default'\n }.${verb}(${options});\n }\n`;\n\n return httpRequestFunctionImplementation;\n};\n\nexport const generateRequestOptionsArguments = ({\n isRequestOptions,\n hasSignal,\n hasSignalParam = false,\n}: {\n isRequestOptions: boolean;\n hasSignal: boolean;\n hasSignalParam?: boolean;\n}) => {\n if (isRequestOptions) {\n return 'options?: AxiosRequestConfig\\n';\n }\n\n return getSignalDefinition({ hasSignal, hasSignalParam });\n};\n\nexport const getSignalDefinition = ({\n hasSignal,\n hasSignalParam = false,\n}: {\n hasSignal: boolean;\n hasSignalParam?: boolean;\n}): string => {\n if (!hasSignal) {\n return '';\n }\n const signalVar = hasSignalParam ? 'querySignal' : 'signal';\n return `${signalVar}?: AbortSignal\\n`;\n};\n\nexport const getQueryArgumentsRequestType = (\n httpClient: OutputHttpClient,\n mutator?: GeneratorMutator,\n useRuntimeFetcher?: boolean,\n) => {\n if (!mutator) {\n if (httpClient === OutputHttpClient.AXIOS) {\n return `axios?: AxiosRequestConfig`;\n }\n if (httpClient === OutputHttpClient.FETCH && useRuntimeFetcher) {\n return 'fetch?: RequestInit, fetcher?: typeof globalThis.fetch';\n }\n return 'fetch?: RequestInit';\n }\n\n if (mutator.hasSecondArg && !mutator.isHook) {\n return `request?: SecondParameter<typeof ${mutator.name}>`;\n }\n\n if (mutator.hasSecondArg && mutator.isHook) {\n return `request?: SecondParameter<ReturnType<typeof ${mutator.name}>>`;\n }\n\n return '';\n};\n\nexport const getQueryOptions = ({\n isRequestOptions,\n mutator,\n isExactOptionalPropertyTypes,\n hasSignal,\n httpClient,\n hasSignalParam = false,\n useRuntimeFetcher = false,\n}: {\n isRequestOptions: boolean;\n mutator?: GeneratorMutator;\n isExactOptionalPropertyTypes: boolean;\n hasSignal: boolean;\n httpClient: OutputHttpClient;\n hasSignalParam?: boolean;\n useRuntimeFetcher?: boolean;\n}) => {\n // Use querySignal if API has a param named \"signal\" to avoid conflict\n const signalVar = hasSignalParam ? 'querySignal' : 'signal';\n // Only use explicit `signal: querySignal` when there's a naming conflict\n const signalProp = hasSignalParam ? `signal: ${signalVar}` : 'signal';\n\n if (!mutator && isRequestOptions) {\n const options =\n httpClient === OutputHttpClient.AXIOS ? 'axiosOptions' : 'fetchOptions';\n const fetcherArg =\n httpClient === OutputHttpClient.FETCH && useRuntimeFetcher\n ? ', fetcherFn'\n : '';\n\n if (!hasSignal) {\n return `${options}${fetcherArg}`;\n }\n\n return `{ ${\n isExactOptionalPropertyTypes\n ? `...(${signalVar} ? { ${signalProp} } : {})`\n : signalProp\n }, ...${options} }${fetcherArg}`;\n }\n\n // For Angular mutators with hasSecondArg, pass http through options parameter\n // http is injected in the queryOptionsFn and passed here as the second arg to the mutator\n if (mutator?.hasSecondArg && httpClient === OutputHttpClient.ANGULAR) {\n if (!hasSignal) {\n return 'http';\n }\n return `http, ${signalVar}`;\n }\n\n if (mutator?.hasSecondArg && isRequestOptions) {\n if (!hasSignal) {\n return 'requestOptions';\n }\n\n // Axios and Angular mutators: signal is a separate argument\n // Fetch mutators: signal is wrapped in options object\n return httpClient === OutputHttpClient.AXIOS ||\n httpClient === OutputHttpClient.ANGULAR\n ? `requestOptions, ${signalVar}`\n : `{ ${signalProp}, ...requestOptions }`;\n }\n\n if (hasSignal) {\n // Axios: signal is always separate\n // Angular with mutator: signal is separate (mutator pattern)\n // Angular without mutator: signal is wrapped (native pattern)\n // Fetch/other: signal is wrapped\n if (httpClient === OutputHttpClient.AXIOS) {\n return signalVar;\n }\n if (httpClient === OutputHttpClient.ANGULAR && mutator) {\n return signalVar;\n }\n return `{ ${signalProp} }`;\n }\n\n return '';\n};\n\nexport const getHookOptions = ({\n isRequestOptions,\n httpClient,\n mutator,\n useRuntimeFetcher = false,\n}: {\n isRequestOptions: boolean;\n httpClient: OutputHttpClient;\n mutator?: GeneratorMutator;\n useRuntimeFetcher?: boolean;\n}) => {\n if (!isRequestOptions) {\n return '';\n }\n\n let value = 'const {query: queryOptions';\n\n if (!mutator) {\n if (httpClient === OutputHttpClient.AXIOS) {\n value += ', axios: axiosOptions';\n } else if (httpClient === OutputHttpClient.FETCH && useRuntimeFetcher) {\n value += ', fetch: fetchOptions, fetcher: fetcherFn';\n } else {\n value += ', fetch: fetchOptions';\n }\n }\n\n if (mutator?.hasSecondArg) {\n value += ', request: requestOptions';\n }\n\n value += '} = options ?? {};';\n\n return value;\n};\n\n// Helper to deduplicate union type string: \"A | B | B\" -> \"A | B\"\nconst dedupeUnionTypes = (types: string): string => {\n if (!types) return types;\n // Split by '|', trim spaces, filter out empty, and dedupe using a Set\n const unique = [\n ...new Set(\n types\n .split('|')\n .map((t) => t.trim())\n .filter(Boolean),\n ),\n ];\n return unique.join(' | ');\n};\n\nexport const getQueryErrorType = (\n operationName: string,\n response: GetterResponse,\n httpClient: OutputHttpClient,\n mutator?: GeneratorMutator,\n forceSuccessResponse?: boolean,\n) => {\n const errorsType = dedupeUnionTypes(response.definition.errors || 'unknown');\n\n if (mutator) {\n return mutator.hasErrorType\n ? `${mutator.default ? pascal(operationName) : ''}ErrorType<${errorsType}>`\n : errorsType;\n }\n\n if (httpClient === OutputHttpClient.AXIOS) {\n return `AxiosError<${errorsType}>`;\n }\n\n // With `forceSuccessResponse`, the fetch client narrows its return type to\n // the success body and throws `globalThis.Error & { info?, status? }` on\n // non-2xx responses instead of returning the error body. TError must match\n // that thrown shape rather than the raw OpenAPI error type. See #3300.\n if (forceSuccessResponse) {\n return `globalThis.Error & { info?: ${errorsType}; status?: number }`;\n }\n\n return errorsType;\n};\n\nexport const getHooksOptionImplementation = (\n isRequestOptions: boolean,\n httpClient: OutputHttpClient,\n operationName: string,\n mutator?: GeneratorMutator,\n useRuntimeFetcher?: boolean,\n) => {\n const fetcherOption =\n httpClient === OutputHttpClient.FETCH && useRuntimeFetcher\n ? ', fetcher: fetcherFn'\n : '';\n const options =\n httpClient === OutputHttpClient.AXIOS\n ? ', axios: axiosOptions'\n : `, fetch: fetchOptions${fetcherOption}`;\n\n return isRequestOptions\n ? `const mutationKey = ['${operationName}'];\nconst {mutation: mutationOptions${\n mutator\n ? mutator.hasSecondArg\n ? ', request: requestOptions'\n : ''\n : options\n }} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }${mutator?.hasSecondArg ? ', request: undefined' : ''}${mutator ? '' : httpClient === OutputHttpClient.AXIOS ? ', axios: undefined' : ', fetch: undefined'}};`\n : '';\n};\n\nexport const getMutationRequestArgs = (\n isRequestOptions: boolean,\n httpClient: OutputHttpClient,\n mutator?: GeneratorMutator,\n useRuntimeFetcher?: boolean,\n) => {\n const options =\n httpClient === OutputHttpClient.AXIOS ? 'axiosOptions' : 'fetchOptions';\n const fetcherArg =\n httpClient === OutputHttpClient.FETCH && useRuntimeFetcher\n ? ', fetcherFn'\n : '';\n\n // For Angular mutators with hasSecondArg, pass http (which is injected in inject* fn)\n // http is required as first param so no assertion needed\n if (mutator?.hasSecondArg && httpClient === OutputHttpClient.ANGULAR) {\n return 'http';\n }\n\n return isRequestOptions\n ? mutator\n ? mutator.hasSecondArg\n ? 'requestOptions'\n : ''\n : `${options}${fetcherArg}`\n : '';\n};\n\nexport const getQueryHeader: ClientHeaderBuilder = (params) => {\n if (params.output.httpClient === OutputHttpClient.FETCH) {\n return generateFetchHeader(params);\n }\n\n if (params.output.httpClient === OutputHttpClient.ANGULAR) {\n const relevantVerbs = Object.values(params.verbOptions).filter(\n (verbOption) => isOperationInTagBucket(verbOption, params.tag),\n );\n const hasQueryParams = relevantVerbs.some((v) => v.queryParams);\n\n return hasQueryParams ? getAngularFilteredParamsHelperBody() : '';\n }\n\n return '';\n};\n","import {\n type ClientDependenciesBuilder,\n compareVersions,\n type GeneratorDependency,\n OutputHttpClient,\n type PackageJson,\n} from '@orval/core';\n\nimport { ANGULAR_HTTP_DEPENDENCIES, AXIOS_DEPENDENCIES } from './client';\n\nconst REACT_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n {\n name: 'useCallback',\n values: true,\n },\n ],\n dependency: 'react',\n },\n];\n\nconst PARAMS_SERIALIZER_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n {\n name: 'qs',\n default: true,\n values: true,\n syntheticDefaultImport: true,\n },\n ],\n dependency: 'qs',\n },\n];\n\nconst SVELTE_QUERY_DEPENDENCIES_V3: GeneratorDependency[] = [\n {\n exports: [\n { name: 'useQuery', values: true },\n { name: 'useInfiniteQuery', values: true },\n { name: 'useMutation', values: true },\n { name: 'useQueryClient', values: true },\n { name: 'UseQueryOptions' },\n {\n name: 'UseInfiniteQueryOptions',\n },\n { name: 'UseMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'UseQueryStoreResult' },\n { name: 'UseInfiniteQueryStoreResult' },\n { name: 'QueryKey' },\n { name: 'CreateMutationResult' },\n { name: 'InvalidateOptions' },\n ],\n dependency: '@sveltestack/svelte-query',\n },\n];\nconst SVELTE_QUERY_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n { name: 'createQuery', values: true },\n { name: 'createInfiniteQuery', values: true },\n { name: 'createMutation', values: true },\n { name: 'useQueryClient', values: true },\n { name: 'CreateQueryOptions' },\n {\n name: 'CreateInfiniteQueryOptions',\n },\n { name: 'MutationFunctionContext' },\n { name: 'CreateMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'CreateQueryResult' },\n { name: 'CreateInfiniteQueryResult' },\n { name: 'QueryKey' },\n { name: 'InfiniteData' },\n { name: 'CreateMutationResult' },\n { name: 'DataTag' },\n { name: 'QueryClient' },\n { name: 'InvalidateOptions' },\n ],\n dependency: '@tanstack/svelte-query',\n },\n];\n\nexport const isSvelteQueryV3 = (packageJson: PackageJson | undefined) => {\n const hasSvelteQuery =\n packageJson?.dependencies?.['@sveltestack/svelte-query'] ??\n packageJson?.devDependencies?.['@sveltestack/svelte-query'] ??\n packageJson?.peerDependencies?.['@sveltestack/svelte-query'];\n const hasSvelteQueryV4 =\n packageJson?.dependencies?.['@tanstack/svelte-query'] ??\n packageJson?.devDependencies?.['@tanstack/svelte-query'] ??\n packageJson?.peerDependencies?.['@tanstack/svelte-query'];\n\n return !!hasSvelteQuery && !hasSvelteQueryV4;\n};\n\nexport const isSvelteQueryV6 = (packageJson: PackageJson | undefined) => {\n return isQueryV6(packageJson, 'svelte-query');\n};\n\nexport const getSvelteQueryDependencies: ClientDependenciesBuilder = (\n hasGlobalMutator,\n hasParamsSerializerOptions,\n packageJson,\n httpClient?: OutputHttpClient,\n) => {\n const hasSvelteQueryV3 = isSvelteQueryV3(packageJson);\n\n return [\n ...(!hasGlobalMutator && httpClient === OutputHttpClient.AXIOS\n ? AXIOS_DEPENDENCIES\n : []),\n ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n ...(hasSvelteQueryV3\n ? SVELTE_QUERY_DEPENDENCIES_V3\n : SVELTE_QUERY_DEPENDENCIES),\n ];\n};\n\nconst REACT_QUERY_DEPENDENCIES_V3: GeneratorDependency[] = [\n {\n exports: [\n { name: 'useQuery', values: true },\n { name: 'useInfiniteQuery', values: true },\n { name: 'useMutation', values: true },\n { name: 'useQueryClient', values: true },\n { name: 'UseQueryOptions' },\n { name: 'UseInfiniteQueryOptions' },\n { name: 'UseMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'UseQueryResult' },\n { name: 'UseInfiniteQueryResult' },\n { name: 'QueryKey' },\n { name: 'QueryClient' },\n { name: 'UseMutationResult' },\n { name: 'InvalidateOptions' },\n ],\n dependency: 'react-query',\n },\n];\nconst REACT_QUERY_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n { name: 'useQuery', values: true },\n { name: 'useSuspenseQuery', values: true },\n { name: 'useInfiniteQuery', values: true },\n { name: 'useSuspenseInfiniteQuery', values: true },\n { name: 'useMutation', values: true },\n { name: 'useQueryClient', values: true },\n { name: 'UseQueryOptions' },\n { name: 'DefinedInitialDataOptions' },\n { name: 'UndefinedInitialDataOptions' },\n { name: 'UseSuspenseQueryOptions' },\n { name: 'UseInfiniteQueryOptions' },\n { name: 'UseSuspenseInfiniteQueryOptions' },\n { name: 'UseMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'MutationFunctionContext' },\n { name: 'UseQueryResult' },\n { name: 'DefinedUseQueryResult' },\n { name: 'UseSuspenseQueryResult' },\n { name: 'UseInfiniteQueryResult' },\n { name: 'DefinedUseInfiniteQueryResult' },\n { name: 'UseSuspenseInfiniteQueryResult' },\n { name: 'QueryKey' },\n { name: 'QueryClient' },\n { name: 'InfiniteData' },\n { name: 'UseMutationResult' },\n { name: 'DataTag' },\n { name: 'InvalidateOptions' },\n ],\n dependency: '@tanstack/react-query',\n },\n];\n\nexport const getReactQueryDependencies: ClientDependenciesBuilder = (\n hasGlobalMutator,\n hasParamsSerializerOptions,\n packageJson,\n httpClient,\n hasTagsMutator,\n override,\n) => {\n const hasReactQuery =\n packageJson?.dependencies?.['react-query'] ??\n packageJson?.devDependencies?.['react-query'] ??\n packageJson?.peerDependencies?.['react-query'];\n const hasReactQueryV4 =\n packageJson?.dependencies?.['@tanstack/react-query'] ??\n packageJson?.devDependencies?.['@tanstack/react-query'] ??\n packageJson?.peerDependencies?.['@tanstack/react-query'];\n\n const queryVersion = override?.query.version;\n const useReactQueryV3 =\n queryVersion === undefined\n ? hasReactQuery && !hasReactQueryV4\n : queryVersion <= 3;\n\n return [\n ...(hasGlobalMutator || hasTagsMutator ? REACT_DEPENDENCIES : []),\n ...(!hasGlobalMutator && httpClient === OutputHttpClient.AXIOS\n ? AXIOS_DEPENDENCIES\n : []),\n ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n ...(useReactQueryV3\n ? REACT_QUERY_DEPENDENCIES_V3\n : REACT_QUERY_DEPENDENCIES),\n ];\n};\n\nconst VUE_QUERY_DEPENDENCIES_V3: GeneratorDependency[] = [\n {\n exports: [\n { name: 'useQuery', values: true },\n { name: 'useInfiniteQuery', values: true },\n { name: 'useMutation', values: true },\n ],\n dependency: 'vue-query',\n },\n {\n exports: [\n { name: 'UseQueryOptions' },\n { name: 'UseInfiniteQueryOptions' },\n { name: 'UseMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'UseQueryResult' },\n { name: 'UseInfiniteQueryResult' },\n { name: 'QueryKey' },\n { name: 'UseMutationReturnType' },\n { name: 'InvalidateOptions' },\n ],\n dependency: 'vue-query/types',\n },\n {\n exports: [\n { name: 'unref', values: true },\n { name: 'computed', values: true },\n ],\n dependency: 'vue',\n },\n {\n exports: [{ name: 'UseQueryReturnType' }],\n dependency: 'vue-query/lib/vue/useBaseQuery',\n },\n];\n\nconst VUE_QUERY_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n { name: 'useQuery', values: true },\n { name: 'useInfiniteQuery', values: true },\n { name: 'useMutation', values: true },\n { name: 'useQueryClient', values: true },\n { name: 'UseQueryOptions' },\n { name: 'UseInfiniteQueryOptions' },\n { name: 'UseMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'MutationFunctionContext' },\n { name: 'QueryKey' },\n { name: 'UseQueryReturnType' },\n { name: 'UseInfiniteQueryReturnType' },\n { name: 'InfiniteData' },\n { name: 'UseMutationReturnType' },\n { name: 'DataTag' },\n { name: 'QueryClient' },\n { name: 'InvalidateOptions' },\n ],\n dependency: '@tanstack/vue-query',\n },\n {\n exports: [\n { name: 'unref', values: true },\n { name: 'MaybeRef' },\n { name: 'computed', values: true },\n ],\n dependency: 'vue',\n },\n];\n\nconst getSolidQueryImports = (\n prefix: 'use' | 'create',\n hasRenamedOptionsTypes: boolean,\n): GeneratorDependency[] => {\n const capitalized = prefix === 'use' ? 'Use' : 'Create';\n // Solid Query renamed the plain options interfaces in v5.100.6, dropping the\n // `Solid` prefix: `SolidQueryOptions` → `QueryOptions`, `SolidInfiniteQueryOptions` →\n // `InfiniteQueryOptions`, `SolidMutationOptions` → `MutationOptions`. The\n // `Use*Options` / `Create*Options` Accessor aliases keep their names but\n // are still imported because queries use them as the user-facing\n // `options.query` param type (Solid's `useQuery` overloads rely on that\n // shape so the `initialData?` discrimination keeps working).\n const queryOptionsTypeName = hasRenamedOptionsTypes\n ? 'QueryOptions'\n : 'SolidQueryOptions';\n const infiniteQueryOptionsTypeName = hasRenamedOptionsTypes\n ? 'InfiniteQueryOptions'\n : 'SolidInfiniteQueryOptions';\n const mutationOptionsTypeName = hasRenamedOptionsTypes\n ? 'MutationOptions'\n : 'SolidMutationOptions';\n return [\n {\n exports: [\n { name: `${prefix}Query`, values: true },\n { name: `${prefix}InfiniteQuery`, values: true },\n { name: `${prefix}Mutation`, values: true },\n { name: `${capitalized}QueryOptions` },\n { name: `${capitalized}InfiniteQueryOptions` },\n { name: queryOptionsTypeName },\n { name: infiniteQueryOptionsTypeName },\n { name: mutationOptionsTypeName },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: `${capitalized}QueryResult` },\n { name: `${capitalized}InfiniteQueryResult` },\n { name: 'QueryKey' },\n { name: 'InfiniteData' },\n { name: `${capitalized}MutationResult` },\n { name: 'DataTag' },\n { name: 'QueryClient' },\n { name: 'InvalidateOptions' },\n ],\n dependency: '@tanstack/solid-query',\n },\n {\n // `mergeProps` lets the query hook attach `queryKey` to the result\n // without mutating the read-only Solid Store (see #3347). `addDependency`\n // only emits an import when the export name appears in the generated\n // file, so mutation-only outputs never receive an unused `mergeProps`\n // import.\n exports: [{ name: 'mergeProps', values: true }],\n dependency: 'solid-js',\n },\n ];\n};\n\nconst ANGULAR_QUERY_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n { name: 'injectQuery', values: true },\n { name: 'injectInfiniteQuery', values: true },\n { name: 'injectMutation', values: true },\n { name: 'InjectQueryOptions' },\n { name: 'InjectMutationOptions' },\n { name: 'CreateQueryOptions' },\n { name: 'CreateInfiniteQueryOptions' },\n { name: 'CreateMutationOptions' },\n { name: 'MutationFunctionContext' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'QueryKey' },\n { name: 'CreateQueryResult' },\n { name: 'CreateInfiniteQueryResult' },\n { name: 'InfiniteData' },\n { name: 'CreateMutationResult' },\n { name: 'DataTag' },\n { name: 'QueryClient', values: true },\n { name: 'InvalidateOptions' },\n ],\n dependency: '@tanstack/angular-query-experimental',\n },\n {\n exports: [\n { name: 'inject', values: true },\n { name: 'Signal' },\n { name: 'computed', values: true },\n ],\n dependency: '@angular/core',\n },\n];\n\nexport const isVueQueryV3 = (packageJson: PackageJson | undefined) => {\n const hasVueQuery =\n packageJson?.dependencies?.['vue-query'] ??\n packageJson?.devDependencies?.['vue-query'] ??\n packageJson?.peerDependencies?.['vue-query'];\n const hasVueQueryV4 =\n packageJson?.dependencies?.['@tanstack/vue-query'] ??\n packageJson?.devDependencies?.['@tanstack/vue-query'] ??\n packageJson?.peerDependencies?.['@tanstack/vue-query'];\n\n return !!hasVueQuery && !hasVueQueryV4;\n};\n\nexport const getVueQueryDependencies: ClientDependenciesBuilder = (\n hasGlobalMutator: boolean,\n hasParamsSerializerOptions: boolean,\n packageJson,\n httpClient?: OutputHttpClient,\n) => {\n const hasVueQueryV3 = isVueQueryV3(packageJson);\n\n return [\n ...(!hasGlobalMutator && httpClient === OutputHttpClient.AXIOS\n ? AXIOS_DEPENDENCIES\n : []),\n ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n ...(hasVueQueryV3 ? VUE_QUERY_DEPENDENCIES_V3 : VUE_QUERY_DEPENDENCIES),\n ];\n};\n\nexport const getSolidQueryDependencies: ClientDependenciesBuilder = (\n hasGlobalMutator: boolean,\n hasParamsSerializerOptions: boolean,\n packageJson,\n httpClient?: OutputHttpClient,\n) => {\n return [\n ...(!hasGlobalMutator && httpClient === OutputHttpClient.AXIOS\n ? AXIOS_DEPENDENCIES\n : []),\n ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n ...getSolidQueryImports(\n isSolidQueryWithUsePrefix(packageJson) ? 'use' : 'create',\n isSolidQueryWithRenamedOptionsTypes(packageJson),\n ),\n ];\n};\n\nexport const getAngularQueryDependencies: ClientDependenciesBuilder = (\n hasGlobalMutator: boolean,\n hasParamsSerializerOptions: boolean,\n packageJson,\n httpClient?: OutputHttpClient,\n) => {\n // Always use Angular HTTP dependencies for Angular httpClient\n // Previously skipped for mutators, but we now inject http everywhere\n const useAngularHttp = httpClient === OutputHttpClient.ANGULAR;\n const useAxios = !hasGlobalMutator && httpClient === OutputHttpClient.AXIOS;\n\n return [\n ...(useAngularHttp ? ANGULAR_HTTP_DEPENDENCIES : []),\n ...(useAxios ? AXIOS_DEPENDENCIES : []),\n ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n ...ANGULAR_QUERY_DEPENDENCIES,\n ];\n};\n\nexport const isQueryV5 = (\n packageJson: PackageJson | undefined,\n queryClient:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n) => {\n // Angular Query is v5 only\n if (queryClient === 'angular-query') {\n return true;\n }\n\n const version = getPackageByQueryClient(packageJson, queryClient);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '5.0.0');\n};\n\nconst isQueryV6 = (\n packageJson: PackageJson | undefined,\n queryClient: 'react-query' | 'vue-query' | 'svelte-query' | 'solid-query',\n) => {\n const version = getPackageByQueryClient(packageJson, queryClient);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '6.0.0');\n};\n\nexport const isQueryV5WithDataTagError = (\n packageJson: PackageJson | undefined,\n queryClient:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n) => {\n // Angular Query is v5 only and supports DataTag\n if (queryClient === 'angular-query') {\n return true;\n }\n\n const version = getPackageByQueryClient(packageJson, queryClient);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '5.62.0');\n};\n\nexport const isQueryV5WithRequiredContextOnSuccess = (\n packageJson: PackageJson | undefined,\n queryClient:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n) => {\n const version = getPackageByQueryClient(packageJson, queryClient);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '5.14.1');\n};\n\nexport const isQueryV5WithMutationContextOnSuccess = (\n packageJson: PackageJson | undefined,\n queryClient:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n) => {\n const version = getPackageByQueryClient(packageJson, queryClient);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '5.89.0');\n};\n\nexport const isQueryV5WithInfiniteQueryOptionsError = (\n packageJson: PackageJson | undefined,\n queryClient:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n) => {\n // Angular Query is v5 only and supports infinite query options\n if (queryClient === 'angular-query') {\n return true;\n }\n\n const version = getPackageByQueryClient(packageJson, queryClient);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '5.80.0');\n};\n\nexport const isSolidQueryWithUsePrefix = (\n packageJson: PackageJson | undefined,\n) => {\n const version = getPackageByQueryClient(packageJson, 'solid-query');\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n // https://github.com/TanStack/query/blob/v5.71.5/packages/solid-query/src/index.ts\n return compareVersions(withoutRc, '5.71.5');\n};\n\n/**\n * Solid Query renamed its plain options interfaces in v5.100.6, dropping the\n * `Solid` prefix:\n * - `SolidQueryOptions` → `QueryOptions`\n * - `SolidInfiniteQueryOptions` → `InfiniteQueryOptions`\n * - `SolidMutationOptions` → `MutationOptions`\n *\n * The Accessor wrappers `UseQueryOptions` / `UseInfiniteQueryOptions` /\n * `UseMutationOptions` keep the same names but reference the renamed\n * interfaces internally.\n *\n * https://github.com/TanStack/query/commit/<rename-commit>\n */\nexport const isSolidQueryWithRenamedOptionsTypes = (\n packageJson: PackageJson | undefined,\n) => {\n const version = getPackageByQueryClient(packageJson, 'solid-query');\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '5.100.6');\n};\n\nconst getPackageByQueryClient = (\n packageJson: PackageJson | undefined,\n queryClient:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n) => {\n switch (queryClient) {\n case 'react-query': {\n const pkgName = '@tanstack/react-query';\n return (\n packageJson?.resolvedVersions?.[pkgName] ??\n packageJson?.dependencies?.[pkgName] ??\n packageJson?.devDependencies?.[pkgName] ??\n packageJson?.peerDependencies?.[pkgName]\n );\n }\n case 'svelte-query': {\n const pkgName = '@tanstack/svelte-query';\n return (\n packageJson?.resolvedVersions?.[pkgName] ??\n packageJson?.dependencies?.[pkgName] ??\n packageJson?.devDependencies?.[pkgName] ??\n packageJson?.peerDependencies?.[pkgName]\n );\n }\n case 'vue-query': {\n const pkgName = '@tanstack/vue-query';\n return (\n packageJson?.resolvedVersions?.[pkgName] ??\n packageJson?.dependencies?.[pkgName] ??\n packageJson?.devDependencies?.[pkgName] ??\n packageJson?.peerDependencies?.[pkgName]\n );\n }\n case 'angular-query': {\n const pkgName = '@tanstack/angular-query-experimental';\n return (\n packageJson?.resolvedVersions?.[pkgName] ??\n packageJson?.dependencies?.[pkgName] ??\n packageJson?.devDependencies?.[pkgName] ??\n packageJson?.peerDependencies?.[pkgName]\n );\n }\n case 'solid-query': {\n const pkgName = '@tanstack/solid-query';\n return (\n packageJson?.resolvedVersions?.[pkgName] ??\n packageJson?.dependencies?.[pkgName] ??\n packageJson?.devDependencies?.[pkgName] ??\n packageJson?.peerDependencies?.[pkgName]\n );\n }\n }\n};\n","import {\n type GeneratorMutator,\n type GetterParams,\n type GetterQueryParam,\n isObject,\n pascal,\n stringify,\n} from '@orval/core';\nimport { omitBy } from 'remeda';\n\nimport type { FrameworkAdapter } from './framework-adapter';\n\ntype QueryType = 'infiniteQuery' | 'query';\n\nexport const QueryType = {\n INFINITE: 'infiniteQuery' as QueryType,\n QUERY: 'query' as QueryType,\n SUSPENSE_QUERY: 'suspenseQuery' as QueryType,\n SUSPENSE_INFINITE: 'suspenseInfiniteQuery' as QueryType,\n};\n\nconst INFINITE_QUERY_PROPERTIES = new Set([\n 'getNextPageParam',\n 'getPreviousPageParam',\n]);\n\nexport const generateQueryOptions = ({\n params,\n options,\n type,\n adapter,\n}: {\n params: GetterParams;\n options?: object | boolean;\n type: QueryType;\n adapter?: FrameworkAdapter;\n}) => {\n if (options === false) {\n return '';\n }\n\n const queryConfig = isObject(options)\n ? ` ${stringify(\n omitBy(\n options,\n (_, key) =>\n type !== QueryType.INFINITE &&\n type !== QueryType.SUSPENSE_INFINITE &&\n INFINITE_QUERY_PROPERTIES.has(key),\n ),\n )?.slice(1, -1)}`\n : '';\n\n if (params.length === 0 || isSuspenseQuery(type)) {\n if (options) {\n return `${queryConfig} ...queryOptions`;\n }\n\n return '...queryOptions';\n }\n\n const enabledOption = adapter\n ? adapter.generateEnabledOption(params, options)\n : !isObject(options) || !Object.hasOwn(options, 'enabled')\n ? `enabled: ${params.map(({ name }) => `${name} != null`).join(' && ')},`\n : '';\n\n return `${enabledOption}${queryConfig} ...queryOptions`;\n};\n\nexport const isSuspenseQuery = (type: QueryType) => {\n return [QueryType.SUSPENSE_INFINITE, QueryType.SUSPENSE_QUERY].includes(type);\n};\n\nexport const getQueryOptionsDefinition = ({\n operationName,\n mutator,\n definitions,\n type,\n prefix,\n hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError,\n queryParams,\n queryParam,\n isReturnType,\n initialData,\n adapter,\n}: {\n operationName: string;\n mutator?: GeneratorMutator;\n definitions: string;\n type?: QueryType;\n /** 'Use' or 'Create' — from adapter.getQueryOptionsDefinitionPrefix() */\n prefix: string;\n hasQueryV5: boolean;\n hasQueryV5WithInfiniteQueryOptionsError: boolean;\n queryParams?: GetterQueryParam;\n queryParam?: string;\n isReturnType: boolean;\n initialData?: 'defined' | 'undefined';\n adapter?: FrameworkAdapter;\n}) => {\n const isMutatorHook = mutator?.isHook;\n const partialOptions = !isReturnType && hasQueryV5;\n\n if (type) {\n const funcReturnType = `Awaited<ReturnType<${\n isMutatorHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`\n }>>`;\n\n const optionTypeInitialDataPostfix =\n initialData && !isSuspenseQuery(type)\n ? ` & Pick<\n ${pascal(initialData)}InitialDataOptions<\n ${funcReturnType},\n TError,\n ${funcReturnType}${\n hasQueryV5 &&\n (type === QueryType.INFINITE ||\n type === QueryType.SUSPENSE_INFINITE) &&\n queryParam &&\n queryParams\n ? `, QueryKey`\n : ''\n }\n > , 'initialData'\n >`\n : '';\n\n // Use adapter's custom options type name for return types if available.\n // For the user-facing query param (isReturnType: false), keep the\n // prefix-based fallback — Solid Query intentionally emits its `Use*Options`\n // Accessor type there so the discriminator at the `useQuery` call site\n // (which only has `UndefinedInitialDataOptions` / `DefinedInitialDataOptions`\n // overloads) keeps working. See [issue #3365] for the mutation-side fix.\n const optionsTypeName =\n isReturnType && adapter?.getOptionsReturnTypeName\n ? adapter.getOptionsReturnTypeName(\n type === QueryType.INFINITE || type === QueryType.SUSPENSE_INFINITE\n ? 'infiniteQuery'\n : 'query',\n )\n : undefined;\n\n const optionType = optionsTypeName\n ? `${optionsTypeName}<${funcReturnType}, TError, TData${\n hasQueryV5 &&\n (type === QueryType.INFINITE ||\n type === QueryType.SUSPENSE_INFINITE) &&\n queryParam &&\n queryParams\n ? `, QueryKey, ${queryParams.schema.name}['${queryParam}']`\n : ''\n }>`\n : `${prefix}${pascal(type)}Options<${funcReturnType}, TError, TData${\n hasQueryV5 &&\n (type === QueryType.INFINITE ||\n type === QueryType.SUSPENSE_INFINITE) &&\n queryParam &&\n queryParams\n ? hasQueryV5WithInfiniteQueryOptionsError\n ? `, QueryKey, ${queryParams.schema.name}['${queryParam}']`\n : `, ${funcReturnType}, QueryKey, ${queryParams.schema.name}['${queryParam}']`\n : ''\n }>`;\n\n return `${partialOptions ? 'Partial<' : ''}${optionType}${\n partialOptions ? '>' : ''\n }${optionTypeInitialDataPostfix}`;\n }\n\n // Mutation options — use the adapter's plain-options type name for both\n // helper return type and user-facing `options.mutation` param (see comment\n // above for the Solid Query rationale).\n const mutationOptionsTypeName = adapter?.getOptionsReturnTypeName\n ? adapter.getOptionsReturnTypeName('mutation')\n : undefined;\n\n return mutationOptionsTypeName\n ? `${mutationOptionsTypeName}<Awaited<ReturnType<${\n isMutatorHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`\n }>>, TError,${definitions ? `{${definitions}}` : 'void'}, TContext>`\n : `${prefix}MutationOptions<Awaited<ReturnType<${\n isMutatorHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`\n }>>, TError,${definitions ? `{${definitions}}` : 'void'}, TContext>`;\n};\n","import {\n camel,\n type GeneratorMutator,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n type GetterProps,\n GetterPropType,\n OutputClient,\n type OutputHttpClient,\n toObjectString,\n} from '@orval/core';\n\nimport {\n generateAngularHttpRequestFunction,\n getQueryArgumentsRequestType,\n} from '../client';\nimport type {\n FrameworkAdapterConfig,\n MutationHookBodyContext,\n MutationReturnTypeContext,\n PrefetchContext,\n QueryInitContext,\n QueryInvocationContext,\n QueryReturnStatementContext,\n QueryReturnTypeContext,\n} from '../framework-adapter';\nimport { getQueryOptionsDefinition, QueryType } from '../query-options';\nimport { getQueryTypeForFramework } from '../utils';\n\nexport const createAngularAdapter = ({\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n}: {\n hasQueryV5: boolean;\n hasQueryV5WithDataTagError: boolean;\n hasQueryV5WithInfiniteQueryOptionsError: boolean;\n hasQueryV5WithMutationContextOnSuccess: boolean;\n hasQueryV5WithRequiredContextOnSuccess: boolean;\n}): FrameworkAdapterConfig => {\n const prefix = 'Create';\n\n return {\n outputClient: OutputClient.ANGULAR_QUERY,\n hookPrefix: 'inject',\n isAngularHttp: true,\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n\n getHookPropsDefinitions(props: GetterProps): string {\n // Angular: allow params to be a getter function for reactive signal support\n return toObjectString(\n props.map((prop) => {\n const getterType = prop.definition.replace(\n /^(\\w+)(\\??): (.+)$/,\n (\n _match: string,\n name: string,\n optional: string,\n type: string,\n ): string =>\n `${name}${optional}: ${type} | (() => ${type.replace(' | undefined', '')}${optional ? ' | undefined' : ''})`,\n );\n return { ...prop, definition: getterType };\n }),\n 'definition',\n );\n },\n\n getHttpFunctionQueryProps(\n queryProperties: string,\n _httpClient: OutputHttpClient,\n hasMutator: boolean,\n ): string {\n // Prefix with http since request functions take HttpClient as first param\n // Skip when custom mutator is used\n if (!hasMutator) {\n return queryProperties ? `http, ${queryProperties}` : 'http';\n }\n return queryProperties;\n },\n\n getInfiniteQueryHttpProps(\n props: GetterProps,\n queryParam: string,\n _httpClient: OutputHttpClient,\n hasMutator: boolean,\n ): string {\n let result = props\n .map((param) => {\n if (param.type === GetterPropType.NAMED_PATH_PARAMS)\n return param.destructured;\n return param.name === 'params'\n ? `{...params, '${queryParam}': pageParam ?? params?.['${queryParam}']}`\n : param.name;\n })\n .join(',');\n\n // Prefix with http for infinite queries\n // Skip when custom mutator is used\n if (!hasMutator) {\n result = result ? `http, ${result}` : 'http';\n }\n\n return result;\n },\n\n getHttpFirstParam(mutator?: GeneratorMutator): string {\n if (!mutator || mutator.hasSecondArg) {\n return 'http: HttpClient, ';\n }\n return '';\n },\n\n getMutationHttpPrefix(mutator?: GeneratorMutator): string {\n if (!mutator) {\n return 'http, ';\n }\n return '';\n },\n\n getQueryReturnType({ type }: QueryReturnTypeContext): string {\n if (type !== QueryType.INFINITE && type !== QueryType.SUSPENSE_INFINITE) {\n return `CreateQueryResult<TData, TError>`;\n }\n return `CreateInfiniteQueryResult<TData, TError>`;\n },\n\n getMutationReturnType({\n dataType,\n variableType,\n }: MutationReturnTypeContext): string {\n return `: CreateMutationResult<\n Awaited<ReturnType<${dataType}>>,\n TError,\n ${variableType},\n TContext\n >`;\n },\n\n getQueryReturnStatement({\n queryResultVarName,\n }: QueryReturnStatementContext): string {\n return `return ${queryResultVarName};`;\n },\n\n shouldAnnotateQueryKey(): boolean {\n // Angular skips DataTag annotation\n return false;\n },\n\n generateQueryInit({ mutator }: QueryInitContext): string {\n // Angular: inject HttpClient if needed, no queryOptions assignment\n if (!mutator || mutator.hasSecondArg) {\n return `const http = inject(HttpClient);`;\n }\n return '';\n },\n\n generateQueryInvocationArgs({\n props,\n queryOptionsFnName,\n isRequestOptions,\n mutator,\n }: QueryInvocationContext): string {\n // Angular: () => { resolve getters; return options(http, ...); }\n return `() => {${\n props.length > 0\n ? `\n // Resolve params if getter function (for signal reactivity)\n ${props.map((p) => `const _${p.name} = typeof ${p.name} === 'function' ? ${p.name}() : ${p.name};`).join('\\n ')}`\n : ''\n }\n // Resolve options if getter function (for signal reactivity)\n const _options = typeof ${isRequestOptions ? 'options' : 'queryOptions'} === 'function' ? ${isRequestOptions ? 'options' : 'queryOptions'}() : ${isRequestOptions ? 'options' : 'queryOptions'};\n return ${queryOptionsFnName}(${!mutator || mutator.hasSecondArg ? 'http' : ''}${props.length > 0 ? `${!mutator || mutator.hasSecondArg ? ', ' : ''}${props.map((p) => `_${p.name}`).join(', ')}` : ''}, _options);\n }`;\n },\n\n getOptionalQueryClientArgument(): string {\n // Angular never has optional queryClient argument (it injects it)\n return '';\n },\n\n getQueryOptionsDefinitionPrefix(): string {\n return prefix;\n },\n\n generateQueryArguments({\n operationName,\n definitions,\n mutator,\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n initialData,\n httpClient,\n forQueryOptions = false,\n hasInvalidation,\n useRuntimeFetcher,\n }): string {\n const definition = getQueryOptionsDefinition({\n operationName,\n mutator,\n definitions,\n type,\n prefix,\n hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError,\n queryParams,\n queryParam,\n isReturnType: false,\n initialData,\n });\n\n if (!isRequestOptions) {\n return `${type ? 'queryOptions' : 'mutationOptions'}${\n initialData === 'defined' ? '' : '?'\n }: ${definition}`;\n }\n\n const requestType = getQueryArgumentsRequestType(\n httpClient,\n mutator,\n useRuntimeFetcher,\n );\n const isQueryRequired = initialData === 'defined';\n const skipInvalidationProp =\n !type && hasInvalidation ? 'skipInvalidation?: boolean, ' : '';\n const optionsType = `{ ${\n type ? 'query' : 'mutation'\n }${isQueryRequired ? '' : '?'}:${definition}, ${skipInvalidationProp}${requestType}}`;\n\n // For Angular inject* functions (query hooks, not queryOptions or mutations),\n // allow options to be a getter for reactivity.\n // Inject style applies when type is defined (it's a query hook) and not forQueryOptions.\n const forAngularInject = type !== undefined && !forQueryOptions;\n if (forAngularInject) {\n return `options${isQueryRequired ? '' : '?'}: ${optionsType} | (() => ${optionsType})\\n`;\n }\n\n return `options${isQueryRequired ? '' : '?'}: ${optionsType}\\n`;\n },\n\n generateMutationImplementation({\n mutationOptionsFnName,\n hasInvalidation,\n isRequestOptions,\n }): string {\n return `${mutationOptionsFnName}(${hasInvalidation ? `queryClient, ` : ''}${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n },\n\n supportsMutationInvalidation(): boolean {\n return true;\n },\n\n generateMutationHookBody({\n operationPrefix,\n mutationOptionsFnName,\n mutationOptionsVarName,\n isRequestOptions,\n mutator,\n hasInvalidation,\n }: MutationHookBodyContext): string {\n if (!mutator || mutator.hasSecondArg) {\n return ` const http = inject(HttpClient);${hasInvalidation ? '\\n const queryClient = inject(QueryClient);' : ''}\n const ${mutationOptionsVarName} = ${mutationOptionsFnName}(http${hasInvalidation ? ', queryClient' : ''}${isRequestOptions ? ', options' : ', mutationOptions'});\n\n return ${operationPrefix}Mutation(() => ${mutationOptionsVarName});`;\n }\n\n const mutationImpl = `${mutationOptionsFnName}(${hasInvalidation ? `queryClient, ` : ''}${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n return ` const ${mutationOptionsVarName} = ${mutationImpl};\n\n return ${operationPrefix}Mutation(() => ${mutationOptionsVarName});`;\n },\n\n getQueryType(type: string): string {\n return getQueryTypeForFramework(type);\n },\n\n generateRequestFunction(\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n ): string {\n return generateAngularHttpRequestFunction(verbOptions, options);\n },\n\n generatePrefetch({\n usePrefetch,\n type,\n useQuery,\n useInfinite,\n operationName,\n mutator,\n doc,\n queryProps,\n dataType,\n errorType,\n queryArguments,\n queryOptionsVarName,\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n }: PrefetchContext): string {\n const shouldGeneratePrefetch =\n usePrefetch &&\n (type === QueryType.QUERY ||\n type === QueryType.INFINITE ||\n (type === QueryType.SUSPENSE_QUERY && !useQuery) ||\n (type === QueryType.SUSPENSE_INFINITE && !useInfinite));\n\n if (!shouldGeneratePrefetch) {\n return '';\n }\n\n const prefetchType =\n type === QueryType.QUERY || type === QueryType.SUSPENSE_QUERY\n ? 'query'\n : 'infinite-query';\n const prefetchFnName = camel(`prefetch-${prefetchType}`);\n const prefetchVarName = camel(\n `prefetch-${operationName}-${prefetchType}`,\n );\n\n // Angular: plain async function with http param (no React hooks like useQueryClient/useCallback)\n const httpParam =\n !mutator || mutator.hasSecondArg ? 'http: HttpClient, ' : '';\n return `${doc}export const ${prefetchVarName} = async <TData = Awaited<ReturnType<${dataType}>>, TError = ${errorType}>(\\n queryClient: QueryClient, ${httpParam}${queryProps} ${queryArguments}\\n ): Promise<QueryClient> => {\n\n const ${queryOptionsVarName} = ${queryOptionsFnName}(${!mutator || mutator.hasSecondArg ? 'http, ' : ''}${queryProperties}${\n queryProperties ? ',' : ''\n }${isRequestOptions ? 'options' : 'queryOptions'})\n\n if (${queryOptionsVarName}.enabled === false) {\n return queryClient;\n }\n\n await queryClient.${prefetchFnName}(${queryOptionsVarName});\n\n return queryClient;\n}\\n`;\n },\n };\n};\n","import { OutputClient, pascal } from '@orval/core';\n\nimport type {\n FrameworkAdapterConfig,\n MutationHookBodyContext,\n MutationReturnTypeContext,\n QueryReturnStatementContext,\n QueryReturnTypeContext,\n} from '../framework-adapter';\nimport { isSuspenseQuery } from '../query-options';\n\nexport const createReactAdapter = ({\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n}: {\n hasQueryV5: boolean;\n hasQueryV5WithDataTagError: boolean;\n hasQueryV5WithInfiniteQueryOptionsError: boolean;\n hasQueryV5WithMutationContextOnSuccess: boolean;\n hasQueryV5WithRequiredContextOnSuccess: boolean;\n}): FrameworkAdapterConfig => ({\n outputClient: OutputClient.REACT_QUERY,\n hookPrefix: 'use',\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n\n getQueryReturnType({\n type,\n isInitialDataDefined,\n }: QueryReturnTypeContext): string {\n return ` ${\n isInitialDataDefined && !isSuspenseQuery(type) ? 'Defined' : ''\n }Use${pascal(type)}Result<TData, TError> & { queryKey: ${hasQueryV5 ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>` : 'QueryKey'} }`;\n },\n\n getMutationReturnType({\n dataType,\n variableType,\n }: MutationReturnTypeContext): string {\n return `: UseMutationResult<\n Awaited<ReturnType<${dataType}>>,\n TError,\n ${variableType},\n TContext\n >`;\n },\n\n getQueryReturnStatement({\n queryResultVarName,\n queryOptionsVarName,\n }: QueryReturnStatementContext): string {\n // Spreading the tracked query result reads every field, subscribing the\n // consumer to all of them and defeating React Query v5's per-property\n // render optimization (it also trips @tanstack/query/no-rest-destructuring).\n // withQueryKey re-exposes the fields as lazy getters so tracking is\n // preserved, without mutating the hook result (react-compiler safe). The\n // helper is emitted once per file by generateQueryHeader. See #3573.\n return `return withQueryKey(${queryResultVarName}, ${queryOptionsVarName}.queryKey);`;\n },\n\n shouldGenerateOverrideTypes(): boolean {\n return hasQueryV5;\n },\n\n generateMutationImplementation({\n mutationOptionsFnName,\n hasInvalidation,\n isRequestOptions,\n }): string {\n return `${mutationOptionsFnName}(${hasInvalidation ? `queryClient ?? backupQueryClient, ` : ''}${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n },\n\n supportsMutationInvalidation(): boolean {\n return true;\n },\n\n generateMutationHookBody({\n operationPrefix,\n mutationImplementation,\n hasInvalidation,\n optionalQueryClientArgument,\n }: MutationHookBodyContext): string {\n return ` ${hasInvalidation ? `const backupQueryClient = useQueryClient();\\n ` : ''}return ${operationPrefix}Mutation(${mutationImplementation}${optionalQueryClientArgument ? `, queryClient` : ''});`;\n },\n});\n","import { OutputClient } from '@orval/core';\n\nimport type {\n FrameworkAdapterConfig,\n MutationHookBodyContext,\n MutationReturnTypeContext,\n QueryInvocationContext,\n QueryReturnStatementContext,\n QueryReturnTypeContext,\n} from '../framework-adapter';\nimport { QueryType } from '../query-options';\n\nexport const createSolidAdapter = ({\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n hasSolidQueryUsePrefix,\n hasSolidQueryRenamedOptionsTypes,\n}: {\n hasQueryV5: boolean;\n hasQueryV5WithDataTagError: boolean;\n hasQueryV5WithInfiniteQueryOptionsError: boolean;\n hasQueryV5WithMutationContextOnSuccess: boolean;\n hasQueryV5WithRequiredContextOnSuccess: boolean;\n hasSolidQueryUsePrefix: boolean;\n hasSolidQueryRenamedOptionsTypes: boolean;\n}): FrameworkAdapterConfig => ({\n outputClient: OutputClient.SOLID_QUERY,\n hookPrefix: hasSolidQueryUsePrefix ? 'use' : 'create',\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n\n getQueryOptionsDefinitionPrefix(): string {\n return hasSolidQueryUsePrefix ? 'Use' : 'Create';\n },\n\n getOptionsReturnTypeName(\n type: 'query' | 'infiniteQuery' | 'mutation',\n ): string | undefined {\n // Solid Query exposes plain (non-Accessor) options interfaces. The\n // Accessor-wrapped `Use*Options` / `Create*Options` variants cannot be\n // used here because the generated code passes options as a plain object\n // (`{ ...options.mutation }`) before the call site wraps the whole result\n // in an accessor (`useMutation(() => mutationOptions(...))`).\n //\n // v5.100.6 renamed these interfaces to drop the `Solid` prefix.\n if (type === 'mutation') {\n return hasSolidQueryRenamedOptionsTypes\n ? 'MutationOptions'\n : 'SolidMutationOptions';\n }\n if (type === 'infiniteQuery') {\n return hasSolidQueryRenamedOptionsTypes\n ? 'InfiniteQueryOptions'\n : 'SolidInfiniteQueryOptions';\n }\n return hasSolidQueryRenamedOptionsTypes\n ? 'QueryOptions'\n : 'SolidQueryOptions';\n },\n\n getQueryKeyPrefix(): string {\n // Solid Query v5 doesn't support accessing queryKey from queryOptions\n // The queryKey must be generated directly from the params\n return '';\n },\n\n shouldAnnotateQueryKey(): boolean {\n // Solid Query works with accessor functions\n // The queryKey is accessed from within the accessor, not annotated on the return type\n return false;\n },\n\n shouldCastQueryResult(): boolean {\n // Solid Query should not cast the query result because it breaks TypeScript's\n // ability to discriminate between overloads based on initialData\n return false;\n },\n\n shouldCastQueryOptions(): boolean {\n // Solid Query should not cast the query options return type because it prevents\n // TypeScript from properly discriminating between defined and undefined initialData\n return false;\n },\n\n getQueryReturnType({ type }: QueryReturnTypeContext): string {\n const prefix = hasSolidQueryUsePrefix ? 'Use' : 'Create';\n const queryKeyType = hasQueryV5\n ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>`\n : 'QueryKey';\n\n if (type !== QueryType.INFINITE && type !== QueryType.SUSPENSE_INFINITE) {\n return `${prefix}QueryResult<TData, TError> & { queryKey: ${queryKeyType} }`;\n }\n return `${prefix}InfiniteQueryResult<TData, TError> & { queryKey: ${queryKeyType} }`;\n },\n\n getMutationReturnType({\n dataType,\n variableType,\n }: MutationReturnTypeContext): string {\n const prefix = hasSolidQueryUsePrefix ? 'Use' : 'Create';\n return `: ${prefix}MutationResult<\n Awaited<ReturnType<${dataType}>>,\n TError,\n ${variableType},\n TContext\n >`;\n },\n\n getQueryReturnStatement({\n queryResultVarName,\n queryOptionsVarName,\n }: QueryReturnStatementContext): string {\n // Attach queryKey without mutating the Solid Store. The query result is a\n // read-only store, so `Object.assign` hits its `set` trap: in dev it warns\n // \"Cannot mutate a Store directly\", and in every build the assignment is a\n // no-op (queryKey is never actually attached). `mergeProps` is Solid's\n // first-party way to compose a new accessor object via getters, so the\n // queryKey is exposed while the underlying store stays untouched and\n // reactive. The `as any` cast is required because mergeProps infers a\n // concrete result type that TS cannot prove assignable to the generic\n // `…Result<TData, TError>`; the caller-facing type comes from the hook's\n // explicit return-type annotation. See #3347.\n return `return mergeProps(${queryResultVarName}, { queryKey: ${queryOptionsVarName}.queryKey }) as any;`;\n },\n\n generateQueryInvocationArgs({\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n optionalQueryClientArgument,\n }: QueryInvocationContext): string {\n // Solid Query requires options to be wrapped in an arrow function for reactivity\n const optionsArg = isRequestOptions ? 'options' : 'queryOptions';\n const args = queryProperties\n ? `${queryProperties},${optionsArg}`\n : optionsArg;\n return `() => ${queryOptionsFnName}(${args})${optionalQueryClientArgument ? ', queryClient' : ''}`;\n },\n\n generateMutationImplementation({\n mutationOptionsFnName,\n isRequestOptions,\n }): string {\n return `${mutationOptionsFnName}(${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n },\n\n supportsMutationInvalidation(): boolean {\n // Solid is NOT in the list of frameworks supporting mutation invalidation\n return false;\n },\n\n generateMutationOnSuccess(): string {\n return '';\n },\n\n generateMutationHookBody({\n operationPrefix,\n mutationImplementation,\n optionalQueryClientArgument,\n }: MutationHookBodyContext): string {\n // Solid Query mutations also need to be wrapped in accessor functions\n return ` return ${operationPrefix}Mutation(() => ${mutationImplementation}${optionalQueryClientArgument ? `, queryClient` : ''});`;\n },\n\n getOptionalQueryClientArgument(): string {\n // Solid Query expects queryClient to be an Accessor: () => QueryClient\n return ', queryClient?: () => QueryClient';\n },\n});\n","import {\n type GetterProps,\n OutputClient,\n pascal,\n toObjectString,\n} from '@orval/core';\n\nimport { getQueryArgumentsRequestType } from '../client';\nimport type {\n FrameworkAdapterConfig,\n MutationHookBodyContext,\n MutationReturnTypeContext,\n QueryInitContext,\n QueryInvocationContext,\n QueryReturnStatementContext,\n QueryReturnTypeContext,\n} from '../framework-adapter';\nimport { getQueryOptionsDefinition } from '../query-options';\nimport { getQueryTypeForFramework } from '../utils';\n\nexport const createSvelteAdapter = ({\n hasSvelteQueryV4,\n hasSvelteQueryV6,\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n}: {\n hasSvelteQueryV4: boolean;\n hasSvelteQueryV6: boolean;\n hasQueryV5: boolean;\n hasQueryV5WithDataTagError: boolean;\n hasQueryV5WithInfiniteQueryOptionsError: boolean;\n hasQueryV5WithMutationContextOnSuccess: boolean;\n hasQueryV5WithRequiredContextOnSuccess: boolean;\n}): FrameworkAdapterConfig => {\n const prefix = hasSvelteQueryV4 ? 'Create' : 'Use';\n\n return {\n outputClient: OutputClient.SVELTE_QUERY,\n hookPrefix: hasSvelteQueryV4 ? 'create' : 'use',\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n\n getHookPropsDefinitions(props: GetterProps): string {\n if (hasSvelteQueryV6) {\n return toObjectString(\n props.map((p) => ({\n ...p,\n definition: p.definition.replace(':', ': () => '),\n })),\n 'definition',\n );\n }\n return toObjectString(props, 'implementation');\n },\n\n getQueryReturnType({\n type,\n isMutatorHook,\n operationName,\n }: QueryReturnTypeContext): string {\n if (!hasSvelteQueryV4) {\n return `Use${pascal(type)}StoreResult<Awaited<ReturnType<${\n isMutatorHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`\n }>>, TError, TData, QueryKey> & { queryKey: QueryKey }`;\n }\n\n return `Create${pascal(\n type,\n )}Result<TData, TError> & { queryKey: ${hasQueryV5 ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>` : 'QueryKey'} }`;\n },\n\n getMutationReturnType({\n dataType,\n variableType,\n }: MutationReturnTypeContext): string {\n return `: CreateMutationResult<\n Awaited<ReturnType<${dataType}>>,\n TError,\n ${variableType},\n TContext\n >`;\n },\n\n getQueryReturnStatement({\n queryResultVarName,\n queryOptionsVarName,\n }: QueryReturnStatementContext): string {\n if (hasSvelteQueryV6) {\n return `return ${queryResultVarName}`;\n }\n if (hasSvelteQueryV4) {\n return `${queryResultVarName}.queryKey = ${queryOptionsVarName}.queryKey;\n\n return ${queryResultVarName};`;\n }\n // Svelte v3 - same as default\n return `return { ...${queryResultVarName}, queryKey: ${queryOptionsVarName}.queryKey };`;\n },\n\n generateQueryInit({\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n }: QueryInitContext): string {\n if (hasSvelteQueryV6) {\n return '';\n }\n const queryOptionsVarName = isRequestOptions ? 'queryOptions' : 'options';\n return `const ${queryOptionsVarName} = ${queryOptionsFnName}(${queryProperties}${\n queryProperties ? ',' : ''\n }${isRequestOptions ? 'options' : 'queryOptions'})`;\n },\n\n generateQueryInvocationArgs({\n props,\n queryOptionsFnName,\n isRequestOptions,\n queryOptionsVarName,\n optionalQueryClientArgument,\n }: QueryInvocationContext): string {\n if (hasSvelteQueryV6) {\n return `() => ${queryOptionsFnName}(${toObjectString(\n props.map((p) => ({\n ...p,\n name: p.default || !p.required ? `${p.name}?.()` : `${p.name}()`,\n })),\n 'name',\n )}${isRequestOptions ? 'options?.()' : 'queryOptions?.()'})`;\n }\n return `${queryOptionsVarName}${optionalQueryClientArgument ? ', queryClient' : ''}`;\n },\n\n getQueryInvocationSuffix(): string {\n return hasSvelteQueryV6 ? `, queryClient` : '';\n },\n\n getOptionalQueryClientArgument(hasInvalidation?: boolean): string {\n if (hasSvelteQueryV6) {\n return `, queryClient?: () => QueryClient`;\n }\n if (hasQueryV5 || hasInvalidation) {\n return ', queryClient?: QueryClient';\n }\n return '';\n },\n\n getQueryOptionsDefinitionPrefix(): string {\n return prefix;\n },\n\n generateQueryArguments({\n operationName,\n definitions,\n mutator,\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n initialData,\n httpClient,\n forQueryOptions = false,\n hasInvalidation,\n useRuntimeFetcher,\n }): string {\n const definition = getQueryOptionsDefinition({\n operationName,\n mutator,\n definitions,\n type,\n prefix,\n hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError,\n queryParams,\n queryParam,\n isReturnType: false,\n initialData,\n });\n\n if (!isRequestOptions) {\n return `${type ? 'queryOptions' : 'mutationOptions'}${\n initialData === 'defined' ? '' : '?'\n }: ${definition}`;\n }\n\n const requestType = getQueryArgumentsRequestType(\n httpClient,\n mutator,\n useRuntimeFetcher,\n );\n const isQueryRequired = initialData === 'defined';\n const skipInvalidationProp =\n !type && hasInvalidation ? 'skipInvalidation?: boolean, ' : '';\n const optionsType = `{ ${\n type ? 'query' : 'mutation'\n }${isQueryRequired ? '' : '?'}:${definition}, ${skipInvalidationProp}${requestType}}`;\n\n return `options${isQueryRequired ? '' : '?'}: ${hasSvelteQueryV6 && !forQueryOptions ? '() => ' : ''}${optionsType}\\n`;\n },\n\n generateMutationImplementation({\n mutationOptionsFnName,\n hasInvalidation,\n isRequestOptions,\n }): string {\n if (hasSvelteQueryV6) {\n return `${mutationOptionsFnName}(${hasInvalidation ? `backupQueryClient, ` : ''}${\n isRequestOptions ? 'options' : 'mutationOptions'\n }?.())`;\n }\n return `${mutationOptionsFnName}(${hasInvalidation ? `queryClient ?? backupQueryClient, ` : ''}${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n },\n\n supportsMutationInvalidation(): boolean {\n return true;\n },\n\n generateMutationHookBody({\n operationPrefix,\n mutationImplementation,\n hasInvalidation,\n optionalQueryClientArgument,\n }: MutationHookBodyContext): string {\n if (hasSvelteQueryV6) {\n return ` ${hasInvalidation ? `const backupQueryClient = useQueryClient(${optionalQueryClientArgument ? 'queryClient?.()' : ''});\\n ` : ''}return ${operationPrefix}Mutation(() => ({ ...${mutationImplementation} })${optionalQueryClientArgument ? `, queryClient` : ''});`;\n }\n // Svelte v4/v5\n return ` ${hasInvalidation ? `const backupQueryClient = useQueryClient();\\n ` : ''}return ${operationPrefix}Mutation(${mutationImplementation});`;\n },\n\n getQueryType(type: string): string {\n if (hasSvelteQueryV4) {\n return getQueryTypeForFramework(type);\n }\n return type;\n },\n };\n};\n","import {\n getRouteAsArray,\n type GetterParams,\n type GetterProp,\n type GetterProps,\n GetterPropType,\n isObject,\n OutputClient,\n OutputHttpClient,\n pascal,\n} from '@orval/core';\n\nimport type {\n FrameworkAdapterConfig,\n MutationHookBodyContext,\n MutationOnSuccessContext,\n MutationReturnTypeContext,\n QueryReturnStatementContext,\n QueryReturnTypeContext,\n} from '../framework-adapter';\nimport { QueryType } from '../query-options';\nimport { vueUnRefParams, vueWrapTypeWithMaybeRef } from '../utils';\n\nexport const createVueAdapter = ({\n hasVueQueryV4,\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n}: {\n hasVueQueryV4: boolean;\n hasQueryV5: boolean;\n hasQueryV5WithDataTagError: boolean;\n hasQueryV5WithInfiniteQueryOptionsError: boolean;\n hasQueryV5WithMutationContextOnSuccess: boolean;\n hasQueryV5WithRequiredContextOnSuccess: boolean;\n}): FrameworkAdapterConfig => ({\n outputClient: OutputClient.VUE_QUERY,\n hookPrefix: 'use',\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n\n transformProps(props: GetterProps): GetterProps {\n return vueWrapTypeWithMaybeRef(props);\n },\n\n shouldDestructureNamedPathParams(): boolean {\n // Vue keeps param.name for named path params (doesn't destructure)\n return false;\n },\n\n getHttpFunctionQueryProps(\n queryProperties: string,\n httpClient: OutputHttpClient,\n ): string {\n // Vue with fetch: unref each prop\n if (httpClient === OutputHttpClient.FETCH && queryProperties) {\n return queryProperties\n .split(',')\n .map((prop) => `unref(${prop})`)\n .join(',');\n }\n return queryProperties;\n },\n\n getInfiniteQueryHttpProps(\n props: GetterProps,\n queryParam: string,\n httpClient: OutputHttpClient,\n ): string {\n return props\n .map((param) => {\n // Vue does NOT destructure named path params (keeps param.name)\n if (param.name === 'params') {\n return `{...unref(params), '${queryParam}': pageParam ?? unref(params)?.['${queryParam}']}`;\n }\n\n // Fetch-style request functions accept plain values, but axios-style\n // accept MaybeRef<T> so they unref MaybeRef values internally.\n return httpClient === OutputHttpClient.FETCH\n ? `unref(${param.name})`\n : param.name;\n })\n .join(',');\n },\n\n getQueryReturnType({ type }: QueryReturnTypeContext): string {\n if (!hasVueQueryV4) {\n return ` UseQueryReturnType<TData, TError, Use${pascal(\n type,\n )}Result<TData, TError>> & { queryKey: QueryKey }`;\n }\n\n if (type !== QueryType.INFINITE && type !== QueryType.SUSPENSE_INFINITE) {\n return `UseQueryReturnType<TData, TError> & { queryKey: ${hasQueryV5 ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>` : 'QueryKey'} }`;\n }\n\n return `UseInfiniteQueryReturnType<TData, TError> & { queryKey: ${hasQueryV5 ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>` : 'QueryKey'} }`;\n },\n\n getMutationReturnType({\n dataType,\n variableType,\n }: MutationReturnTypeContext): string {\n return `: UseMutationReturnType<\n Awaited<ReturnType<${dataType}>>,\n TError,\n ${variableType},\n TContext\n >`;\n },\n\n getQueryReturnStatement({\n queryResultVarName,\n queryOptionsVarName,\n }: QueryReturnStatementContext): string {\n const queryKeyType = hasQueryV5\n ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>`\n : 'QueryKey';\n return `${queryResultVarName}.queryKey = unref(${queryOptionsVarName}).queryKey as ${queryKeyType};\n\n return ${queryResultVarName};`;\n },\n\n getQueryKeyRouteString(route: string): string {\n // Vue always uses getRouteAsArray for reactivity\n return getRouteAsArray(route);\n },\n\n shouldAnnotateQueryKey(): boolean {\n // Vue skips DataTag annotation\n return false;\n },\n\n getRequestUnrefStatements(props: GetterProps): string {\n return vueUnRefParams(props);\n },\n\n getQueryOptionsUnrefStatements(props: GetterProps): string {\n return vueUnRefParams(\n props.filter((prop) => prop.type === GetterPropType.NAMED_PATH_PARAMS),\n );\n },\n\n wrapHookMutatorCallback(callback: string): string {\n // Vue does not wrap the hook mutator callback with useCallback.\n return callback;\n },\n\n generateEnabledOption(\n params: GetterParams,\n options?: object | boolean,\n ): string {\n if (params.length === 0) return '';\n if (!isObject(options) || !Object.hasOwn(options, 'enabled')) {\n return `enabled: computed(() => ${params\n .map(\n ({ name }) =>\n `unref(${name}) !== null && unref(${name}) !== undefined`,\n )\n .join(' && ')}),`;\n }\n return '';\n },\n\n getQueryKeyPrefix(): string {\n return hasVueQueryV4 ? '' : 'queryOptions?.queryKey ?? ';\n },\n\n generateMutationImplementation({\n mutationOptionsFnName,\n hasInvalidation,\n isRequestOptions,\n }): string {\n return `${mutationOptionsFnName}(${hasInvalidation ? `queryClient ?? backupQueryClient, ` : ''}${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n },\n\n supportsMutationInvalidation(): boolean {\n return hasQueryV5;\n },\n\n generateMutationOnSuccess({\n operationName,\n definitions,\n isRequestOptions,\n generateInvalidateCall,\n uniqueInvalidates,\n }: MutationOnSuccessContext): string {\n const invalidateCalls = uniqueInvalidates\n .map((t) => generateInvalidateCall(t))\n .join('\\n');\n if (hasQueryV5WithMutationContextOnSuccess) {\n if (isRequestOptions) {\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, onMutateResult: TContext, context: MutationFunctionContext) => {\n if (!options?.skipInvalidation) {\n ${invalidateCalls}\n }\n unref(unref(typeof mutationOptions === 'function' ? mutationOptions() : mutationOptions)?.onSuccess)?.(data, variables, onMutateResult, context);\n };`;\n }\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, onMutateResult: TContext, context: MutationFunctionContext) => {\n ${invalidateCalls}\n unref(unref(typeof mutationOptions === 'function' ? mutationOptions() : mutationOptions)?.onSuccess)?.(data, variables, onMutateResult, context);\n };`;\n }\n if (isRequestOptions) {\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, context: TContext${hasQueryV5WithRequiredContextOnSuccess ? '' : ' | undefined'}) => {\n if (!options?.skipInvalidation) {\n ${invalidateCalls}\n }\n unref(unref(typeof mutationOptions === 'function' ? mutationOptions() : mutationOptions)?.onSuccess)?.(data, variables, context);\n };`;\n }\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, context: TContext${hasQueryV5WithRequiredContextOnSuccess ? '' : ' | undefined'}) => {\n ${invalidateCalls}\n unref(unref(typeof mutationOptions === 'function' ? mutationOptions() : mutationOptions)?.onSuccess)?.(data, variables, context);\n };`;\n },\n\n generateMutationHookBody({\n operationPrefix,\n mutationImplementation,\n hasInvalidation,\n optionalQueryClientArgument,\n }: MutationHookBodyContext): string {\n return ` ${hasInvalidation ? `const backupQueryClient = useQueryClient();\\n ` : ''}return ${operationPrefix}Mutation(${mutationImplementation}${optionalQueryClientArgument ? `, queryClient` : ''});`;\n },\n\n getQueryPropertyForProp(\n prop: GetterProp,\n body: { implementation: string },\n ): string {\n // Vue does NOT destructure named path params (keeps param.name for reactivity)\n return prop.type === GetterPropType.BODY ? body.implementation : prop.name;\n },\n});\n","import {\n getRouteAsArray,\n type GetterProp,\n type GetterProps,\n GetterPropType,\n isObject,\n type OutputClient,\n OutputClient as OutputClientConst,\n type OutputClientFunc,\n OutputHttpClient,\n type PackageJson,\n toObjectString,\n} from '@orval/core';\nimport { generateRequestFunction as generateFetchRequestFunction } from '@orval/fetch';\n\nimport {\n generateAxiosRequestFunction,\n getQueryArgumentsRequestType,\n} from '../client';\nimport {\n isQueryV5,\n isQueryV5WithDataTagError,\n isQueryV5WithInfiniteQueryOptionsError,\n isQueryV5WithMutationContextOnSuccess,\n isQueryV5WithRequiredContextOnSuccess,\n isSolidQueryWithRenamedOptionsTypes,\n isSolidQueryWithUsePrefix,\n isSvelteQueryV3,\n isSvelteQueryV6,\n isVueQueryV3,\n} from '../dependencies';\nimport type {\n FrameworkAdapter,\n FrameworkAdapterConfig,\n MutationOnSuccessContext,\n} from '../framework-adapter';\nimport { getQueryOptionsDefinition } from '../query-options';\nimport { createAngularAdapter } from './angular';\nimport { createReactAdapter } from './react';\nimport { createSolidAdapter } from './solid';\nimport { createSvelteAdapter } from './svelte';\nimport { createVueAdapter } from './vue';\n\n/** Fill in defaults for fields that most adapters leave empty or share a common implementation. */\nconst withDefaults = (adapter: FrameworkAdapterConfig): FrameworkAdapter => {\n // `composed` is the fully-built adapter (defaults + overrides). Defaults that\n // need sibling fields close over it instead of using `this`, so they stay\n // correct even if a method is destructured off the adapter.\n const composed: FrameworkAdapter = {\n // --- Original defaults (false / empty string) ---\n isAngularHttp: false,\n getHttpFirstParam: () => '',\n getMutationHttpPrefix: () => '',\n getRequestUnrefStatements: () => '',\n getQueryOptionsUnrefStatements: () => '',\n wrapHookMutatorCallback: (callback, operationName) =>\n `useCallback(${callback}, [${operationName}])`,\n getQueryInvocationSuffix: () => '',\n\n // --- Identity / pass-through defaults ---\n transformProps: (props) => props,\n getHttpFunctionQueryProps: (qp) => qp,\n getQueryType: (type) => type,\n\n // --- Boolean defaults ---\n shouldDestructureNamedPathParams: () => true,\n shouldAnnotateQueryKey: () => true,\n shouldGenerateOverrideTypes: () => false,\n shouldCastQueryResult: () => true,\n shouldCastQueryOptions: () => true,\n\n // --- String defaults ---\n getQueryKeyPrefix: () => 'queryOptions?.queryKey ?? ',\n getQueryOptionsDefinitionPrefix: () => 'Use',\n\n // --- Common implementation defaults ---\n getHookPropsDefinitions: (props) => toObjectString(props, 'implementation'),\n\n getQueryKeyRouteString(route, shouldSplitQueryKey) {\n if (shouldSplitQueryKey) {\n return getRouteAsArray(route);\n }\n return `\\`${route}\\``;\n },\n\n generateEnabledOption(params, options) {\n if (params.length === 0) return '';\n if (!isObject(options) || !Object.hasOwn(options, 'enabled')) {\n return `enabled: ${params\n .map(({ name }) => `${name} !== null && ${name} !== undefined`)\n .join(' && ')},`;\n }\n return '';\n },\n\n getQueryPropertyForProp(\n prop: GetterProp,\n body: { implementation: string },\n ) {\n if (prop.type === GetterPropType.NAMED_PATH_PARAMS)\n return prop.destructured;\n return prop.type === GetterPropType.BODY\n ? body.implementation\n : prop.name;\n },\n\n generateRequestFunction(verbOptions, options) {\n return options.context.output.httpClient === OutputHttpClient.AXIOS\n ? generateAxiosRequestFunction(verbOptions, options, composed)\n : generateFetchRequestFunction(verbOptions, options);\n },\n\n getInfiniteQueryHttpProps(props: GetterProps, queryParam: string) {\n return props\n .map((param) => {\n if (param.type === GetterPropType.NAMED_PATH_PARAMS)\n return param.destructured;\n return param.name === 'params'\n ? `{...params, '${queryParam}': pageParam ?? params?.['${queryParam}']}`\n : param.name;\n })\n .join(',');\n },\n\n generateQueryInit({\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n }) {\n const queryOptionsVarName = isRequestOptions ? 'queryOptions' : 'options';\n return `const ${queryOptionsVarName} = ${queryOptionsFnName}(${queryProperties}${\n queryProperties ? ',' : ''\n }${isRequestOptions ? 'options' : 'queryOptions'})`;\n },\n\n generateQueryInvocationArgs({\n queryOptionsVarName,\n optionalQueryClientArgument,\n }) {\n return `${queryOptionsVarName}${optionalQueryClientArgument ? ', queryClient' : ''}`;\n },\n\n getOptionalQueryClientArgument() {\n return composed.hasQueryV5 ? ', queryClient?: QueryClient' : '';\n },\n\n generateQueryArguments({\n operationName,\n definitions,\n mutator,\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n initialData,\n httpClient,\n hasInvalidation,\n useRuntimeFetcher,\n }) {\n const prefix = composed.getQueryOptionsDefinitionPrefix();\n const definition = getQueryOptionsDefinition({\n operationName,\n mutator,\n definitions,\n type,\n prefix,\n hasQueryV5: composed.hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError:\n composed.hasQueryV5WithInfiniteQueryOptionsError,\n queryParams,\n queryParam,\n isReturnType: false,\n initialData,\n adapter: composed,\n });\n\n if (!isRequestOptions) {\n return `${type ? 'queryOptions' : 'mutationOptions'}${\n initialData === 'defined' ? '' : '?'\n }: ${definition}`;\n }\n\n const requestType = getQueryArgumentsRequestType(\n httpClient,\n mutator,\n useRuntimeFetcher,\n );\n const isQueryRequired = initialData === 'defined';\n const skipInvalidationProp =\n !type && hasInvalidation ? 'skipInvalidation?: boolean, ' : '';\n const optionsType = `{ ${\n type ? 'query' : 'mutation'\n }${isQueryRequired ? '' : '?'}:${definition}, ${skipInvalidationProp}${requestType}}`;\n\n return `options${isQueryRequired ? '' : '?'}: ${optionsType}\\n`;\n },\n\n generateMutationOnSuccess({\n operationName,\n definitions,\n isRequestOptions,\n generateInvalidateCall,\n uniqueInvalidates,\n }: MutationOnSuccessContext): string {\n const invalidateCalls = uniqueInvalidates\n .map((t) => generateInvalidateCall(t))\n .join('\\n');\n if (composed.hasQueryV5WithMutationContextOnSuccess) {\n if (isRequestOptions) {\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, onMutateResult: TContext, context: MutationFunctionContext) => {\n if (!options?.skipInvalidation) {\n ${invalidateCalls}\n }\n mutationOptions?.onSuccess?.(data, variables, onMutateResult, context);\n };`;\n }\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, onMutateResult: TContext, context: MutationFunctionContext) => {\n ${invalidateCalls}\n mutationOptions?.onSuccess?.(data, variables, onMutateResult, context);\n };`;\n } else {\n if (isRequestOptions) {\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, context: TContext${composed.hasQueryV5WithRequiredContextOnSuccess ? '' : ' | undefined'}) => {\n if (!options?.skipInvalidation) {\n ${invalidateCalls}\n }\n mutationOptions?.onSuccess?.(data, variables, context);\n };`;\n }\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, context: TContext${composed.hasQueryV5WithRequiredContextOnSuccess ? '' : ' | undefined'}) => {\n ${invalidateCalls}\n mutationOptions?.onSuccess?.(data, variables, context);\n };`;\n }\n },\n ...adapter,\n };\n\n return composed;\n};\n\ntype QueryClientType =\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query';\n\n/**\n * Create a FrameworkAdapter for the given output client, resolving version flags\n * from the packageJson and query config.\n */\nexport const createFrameworkAdapter = ({\n outputClient,\n packageJson,\n queryVersion,\n}: {\n outputClient: OutputClient | OutputClientFunc;\n packageJson?: PackageJson;\n queryVersion?: number;\n}): FrameworkAdapter => {\n const clientType = outputClient as QueryClientType;\n\n const _hasQueryV5 = queryVersion === 5 || isQueryV5(packageJson, clientType);\n\n const _hasQueryV5WithDataTagError =\n queryVersion === 5 || isQueryV5WithDataTagError(packageJson, clientType);\n\n const _hasQueryV5WithInfiniteQueryOptionsError =\n queryVersion === 5 ||\n isQueryV5WithInfiniteQueryOptionsError(packageJson, clientType);\n const _hasQueryV5WithMutationContextOnSuccess =\n isQueryV5WithMutationContextOnSuccess(packageJson, clientType);\n const _hasQueryV5WithRequiredContextOnSuccess =\n isQueryV5WithRequiredContextOnSuccess(packageJson, clientType);\n\n switch (outputClient) {\n case OutputClientConst.VUE_QUERY: {\n const hasVueQueryV4 = !isVueQueryV3(packageJson) || queryVersion === 4;\n return withDefaults(\n createVueAdapter({\n hasVueQueryV4,\n hasQueryV5: _hasQueryV5,\n hasQueryV5WithDataTagError: _hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError:\n _hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess:\n _hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess:\n _hasQueryV5WithRequiredContextOnSuccess,\n }),\n );\n }\n\n case OutputClientConst.SVELTE_QUERY: {\n const hasSvelteQueryV4 =\n !isSvelteQueryV3(packageJson) || queryVersion === 4;\n const _hasSvelteQueryV6 = isSvelteQueryV6(packageJson);\n return withDefaults(\n createSvelteAdapter({\n hasSvelteQueryV4,\n hasSvelteQueryV6: _hasSvelteQueryV6,\n hasQueryV5: _hasQueryV5,\n hasQueryV5WithDataTagError: _hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError:\n _hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess:\n _hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess:\n _hasQueryV5WithRequiredContextOnSuccess,\n }),\n );\n }\n\n case OutputClientConst.ANGULAR_QUERY: {\n return withDefaults(\n createAngularAdapter({\n hasQueryV5: _hasQueryV5,\n hasQueryV5WithDataTagError: _hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError:\n _hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess:\n _hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess:\n _hasQueryV5WithRequiredContextOnSuccess,\n }),\n );\n }\n\n case OutputClientConst.SOLID_QUERY: {\n const hasSolidQueryWithUsePrefix = isSolidQueryWithUsePrefix(packageJson);\n const hasSolidQueryWithRenamedOptionsTypes =\n isSolidQueryWithRenamedOptionsTypes(packageJson);\n return withDefaults(\n createSolidAdapter({\n hasQueryV5: _hasQueryV5,\n hasQueryV5WithDataTagError: _hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError:\n _hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess:\n _hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess:\n _hasQueryV5WithRequiredContextOnSuccess,\n hasSolidQueryUsePrefix: hasSolidQueryWithUsePrefix,\n hasSolidQueryRenamedOptionsTypes:\n hasSolidQueryWithRenamedOptionsTypes,\n }),\n );\n }\n\n default: {\n // react-query is the default\n return withDefaults(\n createReactAdapter({\n hasQueryV5: _hasQueryV5,\n hasQueryV5WithDataTagError: _hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError:\n _hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess:\n _hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess:\n _hasQueryV5WithRequiredContextOnSuccess,\n }),\n );\n }\n }\n};\n","import {\n camel,\n generateMutator,\n type GeneratorImport,\n type GeneratorMutator,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n GetterPropType,\n getFullRoute,\n getRouteAsArray,\n type InvalidateTarget,\n type InvalidateTargetParam,\n isString,\n type NormalizedOutputOptions,\n type OpenApiServerObject,\n type OutputHttpClient,\n pascal,\n type Verbs,\n} from '@orval/core';\n\nimport {\n getHooksOptionImplementation,\n getMutationRequestArgs,\n getQueryErrorType,\n} from './client';\nimport type { FrameworkAdapter } from './framework-adapter';\nimport { getQueryKeyVerbPrefix } from './query-generator';\nimport { getQueryOptionsDefinition } from './query-options';\n\ninterface NormalizedTarget {\n query: string;\n params?: InvalidateTargetParam[] | Record<string, InvalidateTargetParam>;\n invalidateMode: 'invalidate' | 'reset';\n file?: string;\n}\n\nconst normalizeInvalidateMode = (\n invalidateMode: string | undefined,\n): NormalizedTarget['invalidateMode'] =>\n invalidateMode === 'reset' ? 'reset' : 'invalidate';\n\nconst normalizeTarget = (target: InvalidateTarget): NormalizedTarget =>\n isString(target)\n ? { query: target, invalidateMode: 'invalidate' }\n : {\n ...target,\n invalidateMode: normalizeInvalidateMode(target.invalidateMode),\n };\n\nconst serializeTarget = (target: NormalizedTarget): string =>\n JSON.stringify({\n query: target.query,\n params: target.params ?? [],\n invalidateMode: target.invalidateMode,\n file: target.file ?? '',\n });\n\nconst HTTP_METHODS = [\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'options',\n 'head',\n 'trace',\n];\n\nconst MUTATION_OPERATION_LOCAL_NAMES = new Set([\n 'backupQueryClient',\n 'context',\n 'customOptions',\n 'data',\n 'fetchOptions',\n 'http',\n 'mutationFn',\n 'mutationKey',\n 'mutationOptions',\n 'onMutateResult',\n 'onSuccess',\n 'options',\n 'props',\n 'queryClient',\n 'variables',\n]);\n\nconst getMutationOperationReferenceName = (\n operationName: string,\n localNames: ReadonlySet<string>,\n): string => {\n if (!localNames.has(operationName)) {\n return operationName;\n }\n\n let candidate = camel(`${operationName}-request-fn`);\n let index = 2;\n while (localNames.has(candidate)) {\n candidate = camel(`${operationName}-request-fn-${index}`);\n index += 1;\n }\n\n return candidate;\n};\n\ninterface OperationRouteInfo {\n route: string;\n /** HTTP method (lowercase) — needed to mirror the verb prefix that\n * `getQueryKeyVerbPrefix` adds to non-GET cache keys. */\n method: string;\n /** true when the route has path params that lack a default value */\n hasRequiredPathParams: boolean;\n}\n\ninterface SpecPathItem {\n parameters?: SpecParameter[];\n [method: string]: unknown;\n}\n\ninterface SpecOperation {\n operationId?: string;\n parameters?: SpecParameter[];\n}\n\ninterface SpecParameter {\n in?: string;\n default?: unknown;\n schema?: { default?: unknown };\n}\n\n/**\n * Look up an operation's route and path-parameter metadata from the OpenAPI\n * spec. Matches against both the raw `operationId` and its camelCase form\n * so that renamed/overridden operations are still found.\n */\nconst findOperationInfo = (\n spec: Record<string, unknown> | undefined,\n operationName: string,\n): OperationRouteInfo | undefined => {\n const paths = spec?.paths;\n if (!paths || typeof paths !== 'object') return undefined;\n\n for (const [routePath, rawPathItem] of Object.entries(\n paths as Record<string, unknown>,\n )) {\n if (!rawPathItem || typeof rawPathItem !== 'object') continue;\n const pathItem = rawPathItem as SpecPathItem;\n\n for (const method of HTTP_METHODS) {\n const operation = pathItem[method] as SpecOperation | undefined;\n const opId = operation?.operationId;\n if (!opId) continue;\n // Match both raw operationId and its camelCase generated name\n if (opId !== operationName && camel(opId) !== operationName) continue;\n\n if (!routePath.includes('{')) {\n return { route: routePath, method, hasRequiredPathParams: false };\n }\n\n // Collect path parameters from both path-level and operation-level\n const pathParams = [\n ...(Array.isArray(pathItem.parameters) ? pathItem.parameters : []),\n ...(Array.isArray(operation.parameters) ? operation.parameters : []),\n ].filter((p) => p.in === 'path');\n\n const hasRequiredPathParams = pathParams.some(\n (p) => p.schema?.default === undefined && p.default === undefined,\n );\n\n return { route: routePath, method, hasRequiredPathParams };\n }\n }\n return undefined;\n};\n\n/**\n * Extract the static route prefix before the first path parameter.\n * e.g. \"/pets/{petId}\" → \"/pets/\", \"/pets\" → \"/pets\"\n *\n * Returns `undefined` when the prefix contains no meaningful literal\n * segments (e.g. \"/{tenantId}/pets\") to avoid overly-broad invalidation.\n */\nconst getStaticRoutePrefix = (route: string): string | undefined => {\n const idx = route.indexOf('{');\n if (idx === -1) return route;\n const prefix = route.slice(0, idx);\n // Guard: a prefix like \"/\" has no stable literal segment and would\n // match every route-style query key – fall back to the zero-arg call.\n const hasLiteralSegment = prefix\n .split('/')\n .some((segment) => segment.length > 0);\n return hasLiteralSegment ? prefix : undefined;\n};\n\nexport const getMutationOptionsUrl = (\n route: string,\n pathParamNames: Iterable<string>,\n pathRoute?: string,\n): string => {\n const pathParams = new Set(pathParamNames);\n if (pathParams.size === 0) return route;\n\n const formatPathRoute = (value: string) =>\n value.replace(/\\$\\{([^}]+)\\}/g, (match, expression: string) =>\n pathParams.has(expression) ? `{${expression}}` : match,\n );\n\n if (pathRoute) {\n if (route.endsWith(pathRoute)) {\n return `${route.slice(0, -pathRoute.length)}${formatPathRoute(\n pathRoute,\n )}`;\n }\n\n const routeWithoutLeadingSlash = pathRoute.startsWith('/')\n ? pathRoute.slice(1)\n : undefined;\n if (routeWithoutLeadingSlash && route.endsWith(routeWithoutLeadingSlash)) {\n return `${route.slice(\n 0,\n -routeWithoutLeadingSlash.length,\n )}${formatPathRoute(routeWithoutLeadingSlash)}`;\n }\n }\n\n return pathRoute ? route : formatPathRoute(route);\n};\n\nconst getMutationOptionsNamedPathParamName = (param: string) => {\n const trimmedParam = param.trim();\n if (!trimmedParam || trimmedParam.startsWith('...')) return undefined;\n\n const [name] = trimmedParam.split(/[=:]/);\n return name?.trim() || undefined;\n};\n\nexport const getMutationOptionsPathParamNames = (\n props: GeneratorVerbOptions['props'],\n) =>\n props.flatMap((prop) => {\n if (prop.type === GetterPropType.PARAM) return [prop.name];\n if (prop.type === GetterPropType.NAMED_PATH_PARAMS) {\n return prop.destructured\n .replace(/^\\{\\s*|\\s*\\}$/g, '')\n .split(',')\n .flatMap((param) => {\n const name = getMutationOptionsNamedPathParamName(param);\n return name ? [name] : [];\n });\n }\n return [];\n });\n\n/**\n * Check whether the target invalidation needs to call the query key function.\n * Returns false when no params are specified and the route has required path\n * parameters (without defaults), meaning we should use predicate-based broad\n * invalidation instead of calling the function without the required arguments.\n */\nconst hasNonEmptyParams = (\n params:\n | InvalidateTargetParam[]\n | Record<string, InvalidateTargetParam>\n | undefined,\n): params is\n | InvalidateTargetParam[]\n | Record<string, InvalidateTargetParam> => {\n if (!params) return false;\n if (Array.isArray(params)) return params.length > 0;\n return Object.keys(params).length > 0;\n};\n\nconst needsQueryKeyFnCall = (\n target: NormalizedTarget,\n spec: Record<string, unknown> | undefined,\n): boolean => {\n if (hasNonEmptyParams(target.params)) return true;\n const info = findOperationInfo(spec, target.query);\n if (info?.hasRequiredPathParams) return false;\n return true;\n};\n\nconst generateParamArg = (param: InvalidateTargetParam): string => {\n if (!isString(param)) {\n return JSON.stringify(param.literal);\n }\n const parts = param.split('.');\n if (parts.length === 1) {\n return `variables.${param}`;\n }\n return `variables.${parts[0]}?.${parts.slice(1).join('?.')}`;\n};\n\nconst generateParamArgs = (\n params: InvalidateTargetParam[] | Record<string, InvalidateTargetParam>,\n): string => {\n if (Array.isArray(params)) {\n return params.map((v) => generateParamArg(v)).join(', ');\n }\n return Object.values(params)\n .map((v) => generateParamArg(v))\n .join(', ');\n};\n\n/**\n * Build the code-literal form of a static route prefix for use inside a\n * `.startsWith(...)` predicate. A prefix derived from a runtime `baseUrl`\n * contains a `${...}` interpolation, so it must be emitted as a template\n * literal; otherwise a plain single-quoted string is enough and keeps the\n * output byte-identical to the no-baseUrl case.\n */\nconst toPrefixLiteral = (prefix: string): string =>\n prefix.includes('${') ? `\\`${prefix}\\`` : `'${prefix}'`;\n\n/**\n * Create a generateInvalidateCall function that has access to the OpenAPI spec\n * for intelligent route-based invalidation when params are not specified.\n */\nconst createGenerateInvalidateCall = (\n spec: Record<string, unknown> | undefined,\n shouldSplitQueryKey: boolean,\n useOperationIdAsQueryKey: boolean,\n baseUrl: NormalizedOutputOptions['baseUrl'],\n servers: OpenApiServerObject[] | undefined,\n) => {\n return (target: NormalizedTarget): string => {\n const method =\n target.invalidateMode === 'reset' ? 'resetQueries' : 'invalidateQueries';\n const queryKeyFn = camel(`get-${target.query}-query-key`);\n\n if (hasNonEmptyParams(target.params)) {\n const args = generateParamArgs(target.params);\n return ` queryClient.${method}({ queryKey: ${queryKeyFn}(${args}) });`;\n }\n\n // No params specified – check if the target query has required path params\n const info = findOperationInfo(spec, target.query);\n\n if (info?.hasRequiredPathParams) {\n // Route has required path parameters (no defaults) – use broad\n // invalidation instead of calling the query key function without\n // the required arguments.\n const prefix = getStaticRoutePrefix(info.route);\n\n // When the prefix has no meaningful literal segments (e.g. route\n // starts with a path param like /{tenantId}/...), fall through to\n // the zero-arg call rather than generating an overly-broad match.\n if (prefix !== undefined) {\n // Issue #3534: the generated query keys are built from the full route\n // (`getFullRoute` prepends `baseUrl`), so the broad-invalidation\n // prefix must carry the same `baseUrl` – otherwise the predicate /\n // partial key never matches a baseUrl-prefixed cache key. `prefix`\n // has no path params, so `getFullRoute` just concatenates the base.\n const prefixWithBase = getFullRoute(prefix, servers, baseUrl);\n // Mirror the verb prefix that `getQueryKeyVerbPrefix` injects into\n // non-GET Query keys; without this, the predicate / partial key\n // would never match a verb-prefixed cache key and the broad\n // invalidation would silently no-op. We share the helper from\n // `query-generator.ts` so both sites stay in sync.\n // `info.method` is narrowed by the spec walker to one of HTTP_METHODS\n // (a superset of `Verbs` that also includes `options`/`trace`); the\n // helper only branches on `Verbs.GET`, so the cast is safe for any\n // non-GET method.\n const verbPrefix = getQueryKeyVerbPrefix({\n verb: info.method as Verbs,\n useOperationIdAsQueryKey,\n });\n\n if (shouldSplitQueryKey) {\n // Split-key mode: query keys are arrays like ['pets', petId]\n // (or ['DELETE', 'pets', petId] for non-GET Query keys).\n // Use partial key matching with static route segments. Reuse\n // `getRouteAsArray` so baseUrl-derived segments are produced the\n // same way as the query key (e.g. a runtime baseUrl is emitted as\n // an unquoted expression, a static one as quoted literals).\n const segments = getRouteAsArray(prefixWithBase);\n const keyArr = verbPrefix\n ? `['${verbPrefix}', ${segments}]`\n : `[${segments}]`;\n return ` queryClient.${method}({ queryKey: ${keyArr} });`;\n }\n\n // Default mode: query keys are template strings like\n // ['/pets/${petId}'] (or ['DELETE', '/pets/${petId}'] for non-GET\n // Query keys). Use a predicate that knows where the route segment\n // lives in the tuple.\n const prefixLiteral = toPrefixLiteral(prefixWithBase);\n if (verbPrefix) {\n return ` queryClient.${method}({ predicate: (query) => query.queryKey[0] === '${verbPrefix}' && typeof query.queryKey[1] === 'string' && query.queryKey[1].startsWith(${prefixLiteral}) });`;\n }\n return ` queryClient.${method}({ predicate: (query) => typeof query.queryKey[0] === 'string' && query.queryKey[0].startsWith(${prefixLiteral}) });`;\n }\n }\n\n // No path params or route not found – call query key function without args\n return ` queryClient.${method}({ queryKey: ${queryKeyFn}() });`;\n };\n};\n\nexport interface MutationHookContext {\n verbOptions: GeneratorVerbOptions;\n options: GeneratorOptions;\n isRequestOptions: boolean;\n httpClient: OutputHttpClient;\n doc: string;\n adapter: FrameworkAdapter;\n}\n\nexport const generateMutationHook = async ({\n verbOptions,\n options,\n isRequestOptions,\n httpClient,\n doc,\n adapter,\n}: MutationHookContext): Promise<{\n implementation: string;\n mutators: GeneratorMutator[] | undefined;\n imports: GeneratorImport[];\n}> => {\n const {\n operationName,\n body,\n props,\n mutator,\n response,\n operationId,\n route: pathRoute,\n override,\n } = verbOptions;\n const { route, context, output } = options;\n const query = override.query;\n\n const mutationOptionsMutator = query.mutationOptions\n ? await generateMutator({\n output,\n mutator: query.mutationOptions,\n name: `${operationName}MutationOptions`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n const bodyOptionalMark = body.isOptional ? '?' : '';\n const definitions = props\n .map(({ definition, type }) =>\n type === GetterPropType.BODY\n ? mutator?.bodyTypeName\n ? `data${bodyOptionalMark}: ${mutator.bodyTypeName}<${body.definition}>`\n : `data${bodyOptionalMark}: ${body.definition}`\n : definition,\n )\n .join(';');\n\n const properties = props\n .map(({ name, type }) => (type === GetterPropType.BODY ? 'data' : name))\n .join(',');\n\n const operationLocalNames = new Set(MUTATION_OPERATION_LOCAL_NAMES);\n for (const { name, type } of props) {\n operationLocalNames.add(type === GetterPropType.BODY ? 'data' : name);\n }\n\n const errorType = getQueryErrorType(\n operationName,\n response,\n httpClient,\n mutator,\n override.fetch.forceSuccessResponse,\n );\n\n const operationReferenceName = getMutationOperationReferenceName(\n operationName,\n operationLocalNames,\n );\n const dataType = mutator?.isHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationReferenceName}`;\n const operationTypeReferenceName = mutator?.isHook\n ? operationName\n : operationReferenceName;\n\n const mutationOptionFnReturnType = getQueryOptionsDefinition({\n operationName: operationTypeReferenceName,\n mutator,\n definitions,\n prefix: adapter.getQueryOptionsDefinitionPrefix(),\n hasQueryV5: adapter.hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError:\n adapter.hasQueryV5WithInfiniteQueryOptionsError,\n isReturnType: true,\n adapter,\n });\n\n const invalidatesConfig = (query.mutationInvalidates ?? [])\n .filter((rule) => rule.onMutations.includes(operationName))\n .flatMap((rule) => rule.invalidates)\n .map((t) => normalizeTarget(t));\n const seenTargets = new Set<string>();\n const uniqueInvalidates = invalidatesConfig.filter((target) => {\n const key = serializeTarget(target);\n if (seenTargets.has(key)) return false;\n seenTargets.add(key);\n return true;\n });\n\n const hasInvalidation =\n uniqueInvalidates.length > 0 && adapter.supportsMutationInvalidation();\n\n const useRuntimeFetcher = override.fetch.useRuntimeFetcher;\n\n const mutationArguments = adapter.generateQueryArguments({\n operationName: operationTypeReferenceName,\n definitions,\n mutator,\n isRequestOptions,\n httpClient,\n hasInvalidation,\n useRuntimeFetcher,\n });\n\n // Separate arguments for getMutationOptions function (includes http: HttpClient param for Angular)\n const mutationArgumentsForOptions = adapter.generateQueryArguments({\n operationName: operationTypeReferenceName,\n definitions,\n mutator,\n isRequestOptions,\n httpClient,\n forQueryOptions: true,\n hasInvalidation,\n useRuntimeFetcher,\n });\n\n const mutationOptionsFnName = camel(\n mutationOptionsMutator || mutator?.isHook\n ? `use-${operationName}-mutationOptions`\n : `get-${operationName}-mutationOptions`,\n );\n\n const hooksOptionImplementation = getHooksOptionImplementation(\n isRequestOptions,\n httpClient,\n camel(operationName),\n mutator,\n useRuntimeFetcher,\n );\n\n // For Angular, add http: HttpClient as FIRST param (required, before optional params)\n // This avoids TS1016 \"required param cannot follow optional param\"\n const httpFirstParam = adapter.getHttpFirstParam(mutator);\n\n // For Angular/React mutations with invalidation, add queryClient as second required param\n const queryClientParam = hasInvalidation ? 'queryClient: QueryClient, ' : '';\n\n const mutationOptionsFn = `export const ${mutationOptionsFnName} = <TError = ${errorType},\n TContext = unknown>(${httpFirstParam}${queryClientParam}${mutationArgumentsForOptions}): ${mutationOptionFnReturnType} => {\n\n${hooksOptionImplementation}\n\n ${\n mutator?.isHook\n ? `const ${operationReferenceName} = use${pascal(operationName)}Hook()`\n : ''\n }\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<${dataType}>>, ${\n definitions ? `{${definitions}}` : 'void'\n }> = (${properties ? 'props' : ''}) => {\n ${properties ? `const {${properties}} = props ?? {};` : ''}\n\n return ${operationReferenceName}(${adapter.getMutationHttpPrefix(mutator)}${properties}${\n properties ? ',' : ''\n }${getMutationRequestArgs(isRequestOptions, httpClient, mutator, useRuntimeFetcher)})\n }\n\n${\n hasInvalidation\n ? adapter.generateMutationOnSuccess({\n operationName,\n definitions,\n isRequestOptions,\n generateInvalidateCall: createGenerateInvalidateCall(\n context.spec,\n !!query.shouldSplitQueryKey,\n !!query.useOperationIdAsQueryKey,\n // `options.output` is the target file path (a string); the\n // normalized output – and thus `baseUrl` – lives on `context.output`.\n context.output.baseUrl,\n context.spec.servers,\n ),\n uniqueInvalidates,\n })\n : ''\n}\n\n ${\n mutationOptionsMutator\n ? `const customOptions = ${\n mutationOptionsMutator.name\n }({...mutationOptions, mutationFn}${\n mutationOptionsMutator.hasSecondArg\n ? `, { url: \\`${getMutationOptionsUrl(\n route,\n getMutationOptionsPathParamNames(props),\n pathRoute,\n )}\\` }`\n : ''\n }${\n mutationOptionsMutator.hasThirdArg\n ? `, { operationId: '${operationId}', operationName: '${operationName}' }`\n : ''\n });`\n : ''\n }\n\n\n return ${\n mutationOptionsMutator\n ? 'customOptions'\n : hasInvalidation\n ? '{ ...mutationOptions, mutationFn, onSuccess }'\n : '{ mutationFn, ...mutationOptions }'\n }}`;\n\n const operationPrefix = adapter.hookPrefix;\n\n const optionalQueryClientArgument =\n adapter.getOptionalQueryClientArgument(hasInvalidation);\n\n const mutationImplementation = adapter.generateMutationImplementation({\n mutationOptionsFnName,\n hasInvalidation,\n isRequestOptions,\n });\n\n const mutationOptionsVarName = camel(`${operationName}-mutation-options`);\n\n const mutationReturnType = adapter.getMutationReturnType({\n dataType,\n variableType: definitions ? `{${definitions}}` : 'void',\n });\n\n const mutationHookBody = adapter.generateMutationHookBody({\n operationPrefix,\n mutationOptionsFnName,\n mutationImplementation,\n mutationOptionsVarName,\n isRequestOptions,\n mutator,\n hasInvalidation,\n optionalQueryClientArgument,\n });\n\n const operationReferenceDeclaration =\n !mutator?.isHook && operationReferenceName !== operationName\n ? `const ${operationReferenceName} = ${operationName};`\n : '';\n\n const implementation = `\n${operationReferenceDeclaration}\n${mutationOptionsFn}\n\n export type ${pascal(\n operationName,\n )}MutationResult = NonNullable<Awaited<ReturnType<${dataType}>>>\n ${\n body.definition\n ? `export type ${pascal(operationName)}MutationBody = ${\n mutator?.bodyTypeName\n ? `${mutator.bodyTypeName}<${body.definition}>`\n : body.definition\n }${body.isOptional ? ' | undefined' : ''}`\n : ''\n }\n export type ${pascal(operationName)}MutationError = ${errorType}\n\n ${doc}export const ${camel(\n `${operationPrefix}-${operationName}`,\n )} = <TError = ${errorType},\n TContext = unknown>(${mutationArguments} ${optionalQueryClientArgument})${mutationReturnType} => {\n${mutationHookBody}\n }\n `;\n\n const mutators = mutationOptionsMutator\n ? [mutationOptionsMutator]\n : undefined;\n\n const imports: GeneratorImport[] = hasInvalidation\n ? uniqueInvalidates\n .filter((i) => !!i.file && needsQueryKeyFnCall(i, context.spec))\n .map<GeneratorImport>((i) => ({\n name: camel(`get-${i.query}-query-key`),\n importPath: i.file,\n values: true,\n }))\n : [];\n\n return {\n implementation,\n mutators,\n imports,\n };\n};\n","import {\n camel,\n generateMutator,\n type GeneratorImport,\n type GeneratorMutator,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n type GetterBody,\n type GetterParams,\n type GetterProp,\n type GetterProps,\n GetterPropType,\n type GetterQueryParam,\n type GetterResponse,\n jsDoc,\n logWarning,\n OutputClient,\n type OutputClientFunc,\n type OutputHttpClient,\n pascal,\n toObjectString,\n Verbs,\n} from '@orval/core';\n\nimport { getHookOptions, getQueryErrorType, getQueryOptions } from './client';\nimport type { FrameworkAdapter } from './framework-adapter';\nimport { generateMutationHook } from './mutation-generator';\nimport {\n generateQueryOptions,\n getQueryOptionsDefinition,\n QueryType,\n} from './query-options';\nimport { getHasSignal } from './utils';\n\n/**\n * Decide whether the current operation's configuration conflicts with a\n * `mutationInvalidates` rule. The rule wires its invalidation through the\n * Mutation hook's `onSuccess`, so referencing an operation that is not\n * generated as a Mutation (either forced into a Query via per-operation\n * `useQuery: true`, or suppressed entirely) makes the rule a silent no-op.\n *\n * Returns the warning message when the conflict applies, or `undefined`\n * when the configuration is consistent.\n */\nexport const getMutationInvalidatesConflictWarning = ({\n operationName,\n isMutation,\n isQuery,\n mutationInvalidates,\n}: {\n operationName: string;\n isMutation: boolean | undefined;\n isQuery: boolean;\n mutationInvalidates:\n | NonNullable<\n GeneratorVerbOptions['override']['query']['mutationInvalidates']\n >\n | undefined;\n}): string | undefined => {\n if (isMutation) return undefined;\n if (!mutationInvalidates?.length) return undefined;\n\n const referencingRule = mutationInvalidates.find((rule) =>\n rule.onMutations.includes(operationName),\n );\n if (!referencingRule) return undefined;\n\n const generatedAs = isQuery ? 'Query hook' : 'plain function (no hook)';\n return (\n `mutationInvalidates rule references '${operationName}', but that ` +\n `operation is generated as a ${generatedAs}, not a Mutation. The ` +\n `invalidation will not fire. Either remove '${operationName}' from the ` +\n `rule's onMutations list, or configure '${operationName}' so that it ` +\n `is generated as a Mutation hook.`\n );\n};\n\nexport const hasQueryParam = (\n queryParams: GetterQueryParam | undefined,\n queryParam: string | undefined,\n) => {\n if (!queryParam || !queryParams) {\n return false;\n }\n\n return queryParams.paramNames?.includes(queryParam) ?? true;\n};\n\nconst escapeRegExpMetaChars = (value: string): string =>\n value.replaceAll(/[.*+?^${}()|[\\]\\\\]/g, String.raw`\\$&`);\n\n/**\n * Wraps the body parameter's type in a property string with the mutator's\n * `BodyType<T>` envelope so that user-facing Query helpers (hook signature,\n * `getXxxQueryOptions`, `getXxxQueryKey`, prefetch / invalidate / set+get\n * QueryData) match the request function's signature, which is already\n * wrapped by `client.ts`. Without this, callers that pass a plain body to\n * a non-GET Query hook (possible after #2376 routes non-GET verbs to\n * Query hooks) would hit a type mismatch against the underlying request\n * function.\n *\n * The pattern handles three prop shapes that the various\n * `toObjectString(props, ...)` callers can emit:\n * - `name: T` — required body\n * - `name?: T` — optional body\n * - `name: undefined | T` — `definedInitialData` overload transform\n *\n * `body.definition` is fully regex-escaped so types containing metachars\n * (e.g. `Pet[]`, `Foo | Bar`, anonymous object types) are matched\n * verbatim rather than reinterpreted as regex syntax.\n *\n * No-op when the operation has no body or the mutator does not export a\n * `BodyType<T>` wrapper, so existing GET-only Query keys are unchanged.\n */\nexport const wrapPropsBodyWithMutatorBodyType = ({\n propsString,\n body,\n mutator,\n}: {\n propsString: string;\n body: GetterBody;\n mutator: GeneratorMutator | undefined;\n}): string => {\n if (!mutator?.bodyTypeName || !body.definition) return propsString;\n const bodyDefinitionPattern = escapeRegExpMetaChars(body.definition);\n return propsString.replace(\n new RegExp(\n String.raw`(\\w+\\??:\\s*(?:undefined\\s*\\|\\s*)?)${bodyDefinitionPattern}`,\n ),\n `$1${mutator.bodyTypeName}<${body.definition}>`,\n );\n};\n\n/**\n * Widens a parameter signature to be optional. Skips params that already\n * carry a default value (`= ...`), since those are syntactically optional\n * and adding `?` on top would be a TypeScript error.\n */\nexport const makeOptionalParam = (impl: string) => {\n if (impl.includes('=')) return impl;\n return impl.replace(/^(\\w+):\\s*/, '$1?: ');\n};\n\n/**\n * Widens a parameter type to also accept `undefined`. Already-optional\n * (`?:`) signatures are normalized to required-with-undefined, and params\n * with a default value pass through unchanged.\n */\nexport const allowUndefinedParam = (impl: string) => {\n if (impl.includes('=')) return impl;\n const optional = /^(\\w+)\\?:\\s*(.+)$/.exec(impl);\n if (optional) return `${optional[1]}: ${optional[2]} | undefined`;\n return impl.replace(/^(\\w+):\\s*(.+)$/, '$1: $2 | undefined');\n};\n\n/**\n * Renders the `setXxxQueryData` helper as either a React hook (returns a\n * setter) or a plain function taking `queryClient`. Both shapes share the\n * same body and signature, so this collapses what would otherwise be two\n * near-identical template literals.\n */\nconst renderSetQueryDataHelper = ({\n doc,\n isReactQuery,\n fnName,\n propsSig,\n body,\n}: {\n doc: string | undefined;\n isReactQuery: boolean;\n fnName: string;\n propsSig: string;\n body: string;\n}) => {\n const docPrefix = doc ?? '';\n if (isReactQuery) {\n return `${docPrefix}export const ${fnName} = () => {\n const queryClient = useQueryClient();\n return (${propsSig}) => {\n ${body}\n };\n}\\n`;\n }\n return `${docPrefix}export const ${fnName} = (queryClient: QueryClient, ${propsSig}) => {\n ${body}\n}\\n`;\n};\n\n/**\n * Renders the prop list shared by `getXxxQueryKey`, `setXxxQueryData` and\n * `getXxxQueryData` helpers: headers are dropped, path params stay required,\n * non-path params (query params, body) are passed through `widenNonPath`\n * (defaults to identity — pass `makeOptionalParam` or `allowUndefinedParam`\n * to relax the signature).\n *\n * Centralising this prevents the three call sites from drifting apart on\n * how they treat the same props.\n */\nconst buildKeyShapedProps = ({\n props,\n body,\n mutator,\n widenNonPath = (impl) => impl,\n}: {\n props: GetterProps;\n body: GetterBody;\n mutator: GeneratorMutator | undefined;\n widenNonPath?: (impl: string) => string;\n}) =>\n wrapPropsBodyWithMutatorBodyType({\n propsString: toObjectString(\n props\n .filter((prop) => prop.type !== GetterPropType.HEADER)\n .map((prop) => ({\n ...prop,\n implementation:\n prop.type === GetterPropType.PARAM ||\n prop.type === GetterPropType.NAMED_PATH_PARAMS\n ? prop.implementation\n : widenNonPath(prop.implementation),\n })),\n 'implementation',\n ),\n body,\n mutator,\n });\n\n/**\n * Computes a verb prefix segment for query keys when a non-GET operation is\n * routed to a Query hook. Without this prefix, two operations sharing a path\n * (e.g. `GET /pets` and `POST /pets`) would generate cache keys that both\n * begin with `'/pets'`, so TanStack Query would mix their cached data and\n * `invalidateQueries({ queryKey: ['/pets'] })` would match both.\n *\n * Skipped for GET (preserves existing keys) and when\n * `useOperationIdAsQueryKey` is enabled (operation IDs are already unique\n * across verb + path, so the prefix would be redundant).\n *\n * Returns the uppercased verb when a prefix should be inserted, or\n * `undefined` when no prefix is needed.\n */\nexport const getQueryKeyVerbPrefix = ({\n verb,\n useOperationIdAsQueryKey,\n}: {\n verb: Verbs;\n useOperationIdAsQueryKey: boolean | undefined;\n}): string | undefined => {\n if (useOperationIdAsQueryKey) return undefined;\n if (verb === Verbs.GET) return undefined;\n return verb.toUpperCase();\n};\n\nconst getQueryFnArguments = ({\n hasQueryParam,\n hasSignal,\n hasSignalParam = false,\n}: {\n hasQueryParam: boolean;\n hasSignal: boolean;\n hasSignalParam?: boolean;\n}) => {\n if (!hasQueryParam && !hasSignal) {\n return '';\n }\n\n // Rename AbortSignal if API has a param named \"signal\" to avoid conflict\n const signalDestructure = hasSignalParam ? 'signal: querySignal' : 'signal';\n\n if (hasQueryParam) {\n if (hasSignal) {\n return `{ ${signalDestructure}, pageParam }`;\n }\n\n return '{ pageParam }';\n }\n\n return `{ ${signalDestructure} }`;\n};\n\nconst generatePrefetch = ({\n usePrefetch,\n type,\n useQuery,\n useInfinite,\n operationName,\n mutator,\n doc,\n queryProps,\n dataType,\n errorType,\n queryArguments,\n queryOptionsVarName,\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n}: {\n operationName: string;\n mutator?: GeneratorMutator;\n type: (typeof QueryType)[keyof typeof QueryType];\n usePrefetch?: boolean;\n useQuery?: boolean;\n useInfinite?: boolean;\n doc?: string;\n queryProps: string;\n dataType: string;\n errorType: string;\n queryArguments: string;\n queryOptionsVarName: string;\n queryOptionsFnName: string;\n queryProperties: string;\n isRequestOptions: boolean;\n}) => {\n const shouldGeneratePrefetch =\n usePrefetch &&\n (type === QueryType.QUERY ||\n type === QueryType.INFINITE ||\n (type === QueryType.SUSPENSE_QUERY && !useQuery) ||\n (type === QueryType.SUSPENSE_INFINITE && !useInfinite));\n\n if (!shouldGeneratePrefetch) {\n return '';\n }\n\n const prefetchType =\n type === QueryType.QUERY || type === QueryType.SUSPENSE_QUERY\n ? 'query'\n : 'infinite-query';\n const prefetchFnName = camel(`prefetch-${prefetchType}`);\n\n if (mutator?.isHook) {\n const prefetchVarName = camel(\n `use-prefetch-${operationName}-${prefetchType}`,\n );\n return `${doc}export const ${prefetchVarName} = <TData = Awaited<ReturnType<${dataType}>>, TError = ${errorType}>(${queryProps} ${queryArguments}) => {\n const queryClient = useQueryClient();\n const ${queryOptionsVarName} = ${queryOptionsFnName}(${queryProperties}${\n queryProperties ? ',' : ''\n }${isRequestOptions ? 'options' : 'queryOptions'})\n return useCallback(async (): Promise<QueryClient> => {\n await queryClient.${prefetchFnName}(${queryOptionsVarName})\n return queryClient;\n },[queryClient, ${queryOptionsVarName}]);\n};\\n`;\n } else {\n const prefetchVarName = camel(`prefetch-${operationName}-${prefetchType}`);\n return `${doc}export const ${prefetchVarName} = async <TData = Awaited<ReturnType<${dataType}>>, TError = ${errorType}>(\\n queryClient: QueryClient, ${queryProps} ${queryArguments}\\n ): Promise<QueryClient> => {\n\n const ${queryOptionsVarName} = ${queryOptionsFnName}(${queryProperties}${\n queryProperties ? ',' : ''\n }${isRequestOptions ? 'options' : 'queryOptions'})\n\n await queryClient.${prefetchFnName}(${queryOptionsVarName});\n\n return queryClient;\n}\\n`;\n }\n};\n\nconst generateQueryImplementation = ({\n queryOption: { name, queryParam, options, type, queryKeyFnName },\n operationId,\n operationName,\n queryProperties,\n queryKeyProperties,\n queryParams,\n params,\n props,\n body,\n mutator,\n queryOptionsMutator,\n queryKeyMutator,\n isRequestOptions,\n response,\n httpClient,\n isExactOptionalPropertyTypes,\n hasSignal,\n useRuntimeFetcher,\n forceSuccessResponse,\n route,\n doc,\n usePrefetch,\n useQuery,\n useInfinite,\n useInvalidate,\n useSetQueryData,\n useGetQueryData,\n adapter,\n}: {\n queryOption: {\n name: string;\n options?: object | boolean;\n type: (typeof QueryType)[keyof typeof QueryType];\n queryParam?: string;\n queryKeyFnName: string;\n };\n isRequestOptions: boolean;\n operationId: string;\n operationName: string;\n queryProperties: string;\n queryKeyProperties: string;\n params: GetterParams;\n props: GetterProps;\n body: GetterBody;\n response: GetterResponse;\n queryParams?: GetterQueryParam;\n mutator?: GeneratorMutator;\n queryOptionsMutator?: GeneratorMutator;\n queryKeyMutator?: GeneratorMutator;\n httpClient: OutputHttpClient;\n isExactOptionalPropertyTypes: boolean;\n hasSignal: boolean;\n useRuntimeFetcher?: boolean;\n forceSuccessResponse?: boolean;\n route: string;\n doc?: string;\n usePrefetch?: boolean;\n useQuery?: boolean;\n useInfinite?: boolean;\n useInvalidate?: boolean;\n useSetQueryData?: boolean;\n useGetQueryData?: boolean;\n adapter: FrameworkAdapter;\n}) => {\n const {\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n } = adapter;\n\n // Check if API has a param named \"signal\" to avoid conflict with AbortSignal\n const hasSignalParam = props.some(\n (prop: GetterProp) => prop.name === 'signal',\n );\n\n const queryPropDefinitions = wrapPropsBodyWithMutatorBodyType({\n propsString: toObjectString(props, 'definition'),\n body,\n mutator,\n });\n const definedInitialDataQueryPropsDefinitions =\n wrapPropsBodyWithMutatorBodyType({\n propsString: toObjectString(\n props.map((prop) => {\n const regex = new RegExp(String.raw`^${prop.name}\\s*\\?:`);\n\n if (!regex.test(prop.definition)) {\n return prop;\n }\n\n const definitionWithUndefined = prop.definition.replace(\n regex,\n `${prop.name}: undefined | `,\n );\n return {\n ...prop,\n definition: definitionWithUndefined,\n };\n }),\n 'definition',\n ),\n body,\n mutator,\n });\n const queryProps = wrapPropsBodyWithMutatorBodyType({\n propsString: toObjectString(props, 'implementation'),\n body,\n mutator,\n });\n\n const infiniteQueryParamType =\n hasQueryParam(queryParams, queryParam) && queryParams && queryParam\n ? `${queryParams.schema.name}['${queryParam}']`\n : '';\n const hasInfiniteQueryParam = !!infiniteQueryParamType;\n\n const httpFunctionProps = queryParam\n ? adapter.getInfiniteQueryHttpProps(\n props,\n queryParam,\n httpClient,\n !!mutator,\n )\n : adapter.getHttpFunctionQueryProps(queryProperties, httpClient, !!mutator);\n\n const definedInitialDataReturnType = adapter.getQueryReturnType({\n type,\n isMutatorHook: mutator?.isHook,\n operationName,\n hasQueryV5,\n hasQueryV5WithDataTagError,\n isInitialDataDefined: true,\n });\n const returnType = adapter.getQueryReturnType({\n type,\n isMutatorHook: mutator?.isHook,\n operationName,\n hasQueryV5,\n hasQueryV5WithDataTagError,\n });\n\n const errorType = getQueryErrorType(\n operationName,\n response,\n httpClient,\n mutator,\n forceSuccessResponse,\n );\n\n const dataType = mutator?.isHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`;\n\n const definedInitialDataQueryArguments = adapter.generateQueryArguments({\n operationName,\n mutator,\n definitions: '',\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n initialData: 'defined',\n httpClient,\n useRuntimeFetcher,\n });\n const undefinedInitialDataQueryArguments = adapter.generateQueryArguments({\n operationName,\n definitions: '',\n mutator,\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n initialData: 'undefined',\n httpClient,\n useRuntimeFetcher,\n });\n const queryArguments = adapter.generateQueryArguments({\n operationName,\n definitions: '',\n mutator,\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n httpClient,\n useRuntimeFetcher,\n });\n\n // Separate arguments for getQueryOptions function (includes http: HttpClient param for Angular)\n const queryArgumentsForOptions = adapter.generateQueryArguments({\n operationName,\n definitions: '',\n mutator,\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n httpClient,\n forQueryOptions: true,\n useRuntimeFetcher,\n });\n\n const queryOptions = getQueryOptions({\n isRequestOptions,\n isExactOptionalPropertyTypes,\n mutator,\n hasSignal,\n httpClient,\n hasSignalParam,\n useRuntimeFetcher,\n });\n\n const hookOptions = getHookOptions({\n isRequestOptions,\n httpClient,\n mutator,\n useRuntimeFetcher,\n });\n\n const queryFnArguments = getQueryFnArguments({\n hasQueryParam:\n !!queryParam && props.some(({ type }) => type === 'queryParam'),\n hasSignal,\n hasSignalParam,\n });\n\n const queryOptionFnReturnType = getQueryOptionsDefinition({\n operationName,\n mutator,\n definitions: '',\n type,\n prefix: adapter.getQueryOptionsDefinitionPrefix(),\n hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError,\n queryParams,\n queryParam,\n isReturnType: true,\n adapter,\n });\n\n const queryOptionsImp = generateQueryOptions({\n params,\n options,\n type,\n adapter,\n });\n\n const queryOptionsFnName = camel(\n queryKeyMutator || queryOptionsMutator || mutator?.isHook\n ? `use-${name}-queryOptions`\n : `get-${name}-queryOptions`,\n );\n\n const queryOptionsVarName = isRequestOptions ? 'queryOptions' : 'options';\n\n const hasParamReservedWord = props.some(\n (prop: GetterProp) => prop.name === 'query',\n );\n const queryResultVarName = hasParamReservedWord ? '_query' : 'query';\n\n const infiniteParam = infiniteQueryParamType\n ? `, ${infiniteQueryParamType}`\n : '';\n const TData =\n hasQueryV5 &&\n (type === QueryType.INFINITE || type === QueryType.SUSPENSE_INFINITE)\n ? `InfiniteData<Awaited<ReturnType<${dataType}>>${infiniteParam}>`\n : `Awaited<ReturnType<${dataType}>>`;\n\n // For Angular, add http: HttpClient as FIRST param (required, before optional params)\n // This avoids TS1016 \"required param cannot follow optional param\"\n const httpFirstParam = adapter.getHttpFirstParam(mutator);\n\n const queryOptionsFn = `export const ${queryOptionsFnName} = <TData = ${TData}, TError = ${errorType}>(${httpFirstParam}${queryProps} ${queryArgumentsForOptions}) => {\n\n${hookOptions}\n\n const queryKey = ${\n queryKeyMutator\n ? `${queryKeyMutator.name}({ ${queryProperties} }${\n queryKeyMutator.hasSecondArg\n ? `, { url: \\`${route}\\`, queryOptions }`\n : ''\n });`\n : `${adapter.getQueryKeyPrefix()}${queryKeyFnName}(${queryKeyProperties});`\n }\n\n ${\n mutator?.isHook\n ? `const ${operationName} = use${pascal(operationName)}Hook();`\n : ''\n }\n\n const queryFn: QueryFunction<Awaited<ReturnType<${\n mutator?.isHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`\n }>>${\n hasQueryV5 && hasInfiniteQueryParam\n ? `, QueryKey, ${infiniteQueryParamType}`\n : ''\n }> = (${queryFnArguments}) => ${operationName}(${httpFunctionProps}${\n httpFunctionProps ? ', ' : ''\n }${queryOptions});\n\n ${adapter.getQueryOptionsUnrefStatements(props)}\n\n ${\n queryOptionsMutator\n ? // Pass the same options object the non-mutator branch returns so\n // generated guards (e.g. the `enabled` clause for nullish path\n // params) reach the mutator instead of being dropped. See #1522.\n // The third arg additionally carries operation identity (matching\n // mutationOptions per #1974) so mutators can branch on the source\n // operation. See #3153.\n `const customOptions = ${\n queryOptionsMutator.name\n }({ queryKey, queryFn, ${queryOptionsImp}}${\n queryOptionsMutator.hasSecondArg ? `, { ${queryProperties} }` : ''\n }${\n queryOptionsMutator.hasThirdArg\n ? `, { url: \\`${route}\\`, operationId: '${operationId}', operationName: '${operationName}' }`\n : ''\n });`\n : ''\n }\n\n return ${\n queryOptionsMutator\n ? 'customOptions'\n : `{ queryKey, queryFn, ${queryOptionsImp}}`\n }${\n adapter.shouldCastQueryOptions?.() === false\n ? ''\n : ` as ${queryOptionFnReturnType} ${\n adapter.shouldAnnotateQueryKey()\n ? `& { queryKey: ${hasQueryV5 ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>` : 'QueryKey'} }`\n : ''\n }`\n }\n}`;\n const operationPrefix = adapter.hookPrefix;\n const optionalQueryClientArgument = adapter.getOptionalQueryClientArgument();\n\n const queryHookName = camel(`${operationPrefix}-${name}`);\n\n const overrideTypes = `\nexport function ${queryHookName}<TData = ${TData}, TError = ${errorType}>(\\n ${definedInitialDataQueryPropsDefinitions} ${definedInitialDataQueryArguments} ${optionalQueryClientArgument}\\n ): ${definedInitialDataReturnType}\nexport function ${queryHookName}<TData = ${TData}, TError = ${errorType}>(\\n ${queryPropDefinitions} ${undefinedInitialDataQueryArguments} ${optionalQueryClientArgument}\\n ): ${returnType}\nexport function ${queryHookName}<TData = ${TData}, TError = ${errorType}>(\\n ${queryPropDefinitions} ${queryArguments} ${optionalQueryClientArgument}\\n ): ${returnType}`;\n\n const prefetchContext = {\n usePrefetch,\n type,\n useQuery,\n useInfinite,\n operationName,\n mutator,\n queryProps,\n dataType,\n errorType,\n queryArguments: queryArgumentsForOptions,\n queryOptionsVarName,\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n doc,\n };\n\n const prefetch = adapter.generatePrefetch\n ? adapter.generatePrefetch(prefetchContext)\n : generatePrefetch(prefetchContext);\n\n const isPrimaryQueryType =\n type === QueryType.QUERY ||\n type === QueryType.INFINITE ||\n (type === QueryType.SUSPENSE_QUERY && !useQuery) ||\n (type === QueryType.SUSPENSE_INFINITE && !useInfinite);\n\n const buildBaseQueryKeyExpr = () =>\n queryKeyMutator\n ? `${queryKeyMutator.name}({ ${queryProperties} }${\n queryKeyMutator.hasSecondArg ? `, { url: \\`${route}\\` }` : ''\n })`\n : `${queryKeyFnName}(${queryKeyProperties})`;\n\n // queryOptions mutator may augment the queryKey (e.g. tenant prefix).\n // Route invalidate / set / get helpers through the mutator so the key\n // matches what the query hook actually wrote into the cache. Hook-shaped\n // mutators are skipped here because none of these helpers can legally\n // call a hook at the right time — set/get helpers stop being emitted\n // entirely in that case (see `hasHookMutator` below), and invalidate\n // falls back to the unmutated base key for backwards compatibility.\n const applyQueryOptionsMutator = (baseExpr: string) =>\n queryOptionsMutator && !queryOptionsMutator.isHook\n ? `${queryOptionsMutator.name}({ queryKey: ${baseExpr} }${\n queryOptionsMutator.hasSecondArg ? `, { ${queryProperties} }` : ''\n }${\n queryOptionsMutator.hasThirdArg\n ? `, { url: \\`${route}\\`, operationId: '${operationId}', operationName: '${operationName}' }`\n : ''\n }).queryKey`\n : baseExpr;\n\n // Hook-shaped queryOptions mutators rewrite the queryKey at hook-call\n // time, but the set/get helpers cannot call a hook to recover that key.\n // Emitting them would silently target a different cache slot than the\n // query hook actually wrote into, so we skip generation in that case and\n // surface a warning to the user. Invalidate is left alone for backwards\n // compatibility — it has shipped with the same gap and changing its\n // contract is out of scope here.\n const hasHookMutator = !!queryOptionsMutator?.isHook;\n if (hasHookMutator && (useSetQueryData || useGetQueryData)) {\n logWarning(\n `'${name}' has a hook-based queryOptions mutator, so the requested set/get-query-data helpers were skipped to avoid a cache-key mismatch with the query hook.`,\n );\n }\n\n const shouldGenerateInvalidate = useInvalidate && isPrimaryQueryType;\n const invalidateFnName = camel(`invalidate-${name}`);\n const invalidateQueryKeyExpr = applyQueryOptionsMutator(\n buildBaseQueryKeyExpr(),\n );\n\n const shouldGenerateSetQueryData =\n useSetQueryData && isPrimaryQueryType && !hasHookMutator;\n const isReactQuery = adapter.outputClient === OutputClient.REACT_QUERY;\n const setQueryDataFnName = isReactQuery\n ? camel(`use-set-${name}-query-data`)\n : camel(`set-${name}-query-data`);\n // Route the set-query-data key through the same mutator as invalidate so\n // that any user-applied prefix (e.g. tenant) is honoured. Without this,\n // `setQueriesData` and `invalidateQueries` would target different keys.\n const setQueryDataKeyExpr = applyQueryOptionsMutator(buildBaseQueryKeyExpr());\n // `setQueriesData` matches by query-key prefix, so non-path props (query\n // params, body) are widened to `T | undefined` — passing `undefined`\n // updates every cached entry sharing the path prefix, matching what\n // `getXxxQueryKey()` already allows. `T | undefined` is used instead of\n // `?:` because the `updater` parameter follows and TS1016 forbids a\n // required parameter after an optional one.\n const setQueryDataProps = buildKeyShapedProps({\n props,\n body,\n mutator,\n widenNonPath: allowUndefinedParam,\n });\n\n const shouldGenerateGetQueryData =\n useGetQueryData && isPrimaryQueryType && !hasHookMutator;\n const getQueryDataFnName = isReactQuery\n ? camel(`use-get-${name}-query-data`)\n : camel(`get-${name}-query-data`);\n // `getQueryData` reads a single cache entry — keep every prop required and\n // reuse `setQueryDataKeyExpr` so read and write target the same slot.\n const getQueryDataProps = buildKeyShapedProps({ props, body, mutator });\n\n // Generate query init (e.g. const queryOptions = fn(...) or const http = inject(HttpClient))\n const queryInit = adapter.generateQueryInit({\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n mutator,\n });\n\n // Generate query hook invocation arguments\n const queryInvocationArgs = adapter.generateQueryInvocationArgs({\n props,\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n mutator,\n operationPrefix,\n type,\n queryOptionsVarName,\n optionalQueryClientArgument,\n });\n\n const queryInvocationSuffix = adapter.getQueryInvocationSuffix();\n\n return `\n${queryOptionsFn}\n\nexport type ${pascal(\n name,\n )}QueryResult = NonNullable<Awaited<ReturnType<${dataType}>>>\nexport type ${pascal(name)}QueryError = ${errorType}\n\n${adapter.shouldGenerateOverrideTypes() ? overrideTypes : ''}\n${doc}\nexport function ${queryHookName}<TData = ${TData}, TError = ${errorType}>(\\n ${wrapPropsBodyWithMutatorBodyType(\n {\n propsString: adapter.getHookPropsDefinitions(props),\n body,\n mutator,\n },\n )} ${queryArguments} ${optionalQueryClientArgument} \\n ): ${returnType} {\n\n ${queryInit}\n\n const ${queryResultVarName} = ${camel(\n `${operationPrefix}-${adapter.getQueryType(type)}`,\n )}(${queryInvocationArgs}${queryInvocationSuffix})${adapter.shouldCastQueryResult?.() === false ? '' : ` as ${returnType}`};\n\n ${adapter.getQueryReturnStatement({\n hasQueryV5,\n hasQueryV5WithDataTagError,\n queryResultVarName,\n queryOptionsVarName,\n })}\n}\\n\n${prefetch}\n${\n shouldGenerateInvalidate\n ? `${doc}export const ${invalidateFnName} = async (\\n queryClient: QueryClient, ${queryProps} options?: InvalidateOptions\\n ): Promise<QueryClient> => {\n\n await queryClient.invalidateQueries({ queryKey: ${invalidateQueryKeyExpr} }, options);\n\n return queryClient;\n}\\n`\n : ''\n}\n${\n shouldGenerateSetQueryData\n ? renderSetQueryDataHelper({\n doc,\n isReactQuery,\n fnName: setQueryDataFnName,\n propsSig: `${setQueryDataProps}updater: ${TData} | undefined | ((old: ${TData} | undefined) => ${TData} | undefined)`,\n body: `queryClient.setQueriesData<${TData}>({ queryKey: ${setQueryDataKeyExpr} }, updater);`,\n })\n : ''\n}\n${\n shouldGenerateGetQueryData\n ? isReactQuery\n ? `${doc}export const ${getQueryDataFnName} = () => {\n const queryClient = useQueryClient();\n return (${getQueryDataProps}) =>\n queryClient.getQueryData<${TData}>(${setQueryDataKeyExpr});\n}\\n`\n : `${doc}export const ${getQueryDataFnName} = (queryClient: QueryClient, ${getQueryDataProps}) =>\n queryClient.getQueryData<${TData}>(${setQueryDataKeyExpr});\\n`\n : ''\n}\n`;\n};\n\nexport const generateQueryHook = async (\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n outputClient: OutputClient | OutputClientFunc,\n adapter?: FrameworkAdapter,\n) => {\n if (!adapter) {\n throw new Error('FrameworkAdapter is required for generateQueryHook');\n }\n\n const {\n queryParams,\n operationName,\n body,\n props: _props,\n verb,\n params,\n override,\n mutator,\n response,\n operationId,\n summary,\n deprecated,\n } = verbOptions;\n const {\n route,\n override: { operations },\n context,\n output,\n } = options;\n\n // Use adapter to transform props (Vue wraps with MaybeRef)\n const props = adapter.transformProps(_props);\n\n const query = override.query;\n const isRequestOptions = override.requestOptions !== false;\n const operationQueryOptions = operations[operationId]?.query;\n const isExactOptionalPropertyTypes =\n !!context.output.tsconfig?.compilerOptions?.exactOptionalPropertyTypes;\n\n const httpClient = context.output.httpClient;\n const doc = jsDoc({ summary, deprecated });\n\n let implementation = '';\n let mutators: GeneratorMutator[] | undefined;\n\n // Precedence: per-operation override > global > per-verb default.\n // `?? false` lets per-op `false` actually disable a globally enabled\n // hook (the previous `[…].some(Boolean)` masked op-level false).\n const effectiveUseQuery =\n operationQueryOptions?.useQuery ??\n override.query.useQuery ??\n verb === Verbs.GET;\n const effectiveUseMutation =\n operationQueryOptions?.useMutation ??\n override.query.useMutation ??\n verb !== Verbs.GET;\n\n // Suspense / Infinite have no per-verb default; global is GET-only,\n // per-op overrides bypass that restriction in either direction.\n const globalSuspenseOrInfiniteOnlyForGet = (\n flag: boolean | undefined,\n ): boolean => flag === true && verb === Verbs.GET;\n const effectiveUseSuspenseQuery =\n operationQueryOptions?.useSuspenseQuery ??\n globalSuspenseOrInfiniteOnlyForGet(override.query.useSuspenseQuery);\n const hasConfiguredInfiniteQueryParam =\n !query.useInfiniteQueryParam ||\n hasQueryParam(queryParams, query.useInfiniteQueryParam);\n const effectiveUseInfinite =\n (operationQueryOptions?.useInfinite ??\n globalSuspenseOrInfiniteOnlyForGet(override.query.useInfinite)) &&\n hasConfiguredInfiniteQueryParam;\n const effectiveUseSuspenseInfiniteQuery =\n (operationQueryOptions?.useSuspenseInfiniteQuery ??\n globalSuspenseOrInfiniteOnlyForGet(\n override.query.useSuspenseInfiniteQuery,\n )) &&\n hasConfiguredInfiniteQueryParam;\n\n let isQuery =\n effectiveUseQuery ||\n effectiveUseSuspenseQuery ||\n effectiveUseInfinite ||\n effectiveUseSuspenseInfiniteQuery;\n\n // No verb gate here: `effectiveUseMutation` already encodes the\n // per-verb default (`verb !== Verbs.GET`), so an explicit\n // `useMutation: true` — global or per-operation — must be honoured for\n // GET operations too, mirroring how `isQuery` honours `useQuery: true`\n // for non-GET verbs (#3358).\n let isMutation = effectiveUseMutation;\n\n // If both query and mutation are true for a non-GET operation, prioritize query\n if (verb !== Verbs.GET && isQuery) {\n isMutation = false;\n }\n\n // If both query and mutation are true for a GET operation, prioritize mutation\n if (verb === Verbs.GET && isMutation) {\n isQuery = false;\n }\n\n // Warn when an operation referenced by a `mutationInvalidates` rule's\n // `onMutations` list is generated as a Query (or no hook at all). The rule\n // is wired up in mutation-generator and only fires for Mutation hooks, so\n // referencing a Query-emitted operation is a silent no-op — surface that\n // misconfiguration explicitly.\n const conflictWarning = getMutationInvalidatesConflictWarning({\n operationName,\n isMutation,\n isQuery,\n mutationInvalidates: override.query.mutationInvalidates,\n });\n if (conflictWarning) {\n logWarning(conflictWarning);\n }\n\n if (isQuery) {\n const queryKeyMutator = query.queryKey\n ? await generateMutator({\n output,\n mutator: query.queryKey,\n name: `${operationName}QueryKey`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n const queryOptionsMutator = query.queryOptions\n ? await generateMutator({\n output,\n mutator: query.queryOptions,\n name: `${operationName}QueryOptions`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n // Use adapter to determine how to map props to query properties\n const queryProperties = props\n .map((param) => {\n return adapter.getQueryPropertyForProp(param, body);\n })\n .join(',');\n\n const queryKeyProperties = props\n .filter((prop) => prop.type !== GetterPropType.HEADER)\n .map((param) => {\n return adapter.getQueryPropertyForProp(param, body);\n })\n .join(',');\n\n const queries = [\n ...(effectiveUseInfinite\n ? [\n {\n name: camel(`${operationName}-infinite`),\n options: query.options,\n type: QueryType.INFINITE,\n queryParam: query.useInfiniteQueryParam,\n queryKeyFnName: camel(`get-${operationName}-infinite-query-key`),\n },\n ]\n : []),\n ...(effectiveUseQuery\n ? [\n {\n name: operationName,\n options: query.options,\n type: QueryType.QUERY,\n queryKeyFnName: camel(`get-${operationName}-query-key`),\n },\n ]\n : []),\n ...(effectiveUseSuspenseQuery\n ? [\n {\n name: camel(`${operationName}-suspense`),\n options: query.options,\n type: QueryType.SUSPENSE_QUERY,\n queryKeyFnName: camel(`get-${operationName}-query-key`),\n },\n ]\n : []),\n ...(effectiveUseSuspenseInfiniteQuery\n ? [\n {\n name: camel(`${operationName}-suspense-infinite`),\n options: query.options,\n type: QueryType.SUSPENSE_INFINITE,\n queryParam: query.useInfiniteQueryParam,\n queryKeyFnName: camel(`get-${operationName}-infinite-query-key`),\n },\n ]\n : []),\n ];\n\n const uniqueQueryOptionsByKeys = queries.filter(\n (obj, index, self) =>\n index ===\n self.findIndex((t) => t.queryKeyFnName === obj.queryKeyFnName),\n );\n\n let queryKeyFns = '';\n\n if (!queryKeyMutator) {\n for (const queryOption of uniqueQueryOptionsByKeys) {\n const queryKeyProps = buildKeyShapedProps({\n props,\n body,\n mutator,\n widenNonPath: makeOptionalParam,\n });\n\n const routeString = adapter.getQueryKeyRouteString(\n route,\n !!override.query.shouldSplitQueryKey,\n );\n\n // Use operation ID as query key if enabled, otherwise use route string\n const queryKeyIdentifier = override.query.useOperationIdAsQueryKey\n ? `\"${operationName}\"`\n : routeString;\n\n // Use all params in query key when useOperationIdAsQueryKey=true, otherwise use only query param\n // All params sorted by required first\n const queryKeyParams = props\n .filter((p) =>\n override.query.useOperationIdAsQueryKey\n ? true\n : p.type === GetterPropType.QUERY_PARAM,\n )\n .toSorted((a) => (a.required ? -1 : 1))\n .map((p) => `...(${p.name} ? [${p.name}] : [])`)\n .join(', ');\n\n const verbPrefix = getQueryKeyVerbPrefix({\n verb,\n useOperationIdAsQueryKey: override.query.useOperationIdAsQueryKey,\n });\n\n // Note: do not unref() params in Vue - this will make key lose reactivity\n queryKeyFns += `\n${override.query.shouldExportQueryKey ? 'export ' : ''}const ${queryOption.queryKeyFnName} = (${queryKeyProps}) => {\n return [\n ${[\n queryOption.type === QueryType.INFINITE ||\n queryOption.type === QueryType.SUSPENSE_INFINITE\n ? `'infinite'`\n : '',\n verbPrefix ? `'${verbPrefix}'` : '',\n queryKeyIdentifier,\n queryKeyParams,\n body.implementation,\n ]\n .filter((x) => !!x)\n .join(', ')}\n ]${override.query.shouldFilterQueryKey ? `.filter(${override.query.queryKeyFilter ?? 'q => q !== undefined'})` : ' as const'};\n }\n`;\n }\n }\n\n implementation += `\n${queryKeyFns}`;\n\n let queryImplementations = '';\n\n for (const queryOption of queries) {\n queryImplementations += generateQueryImplementation({\n queryOption,\n operationId,\n operationName,\n queryProperties,\n queryKeyProperties,\n params,\n props,\n body,\n mutator,\n isRequestOptions,\n queryParams,\n response,\n httpClient,\n isExactOptionalPropertyTypes,\n hasSignal: getHasSignal({\n overrideQuerySignal: override.query.signal,\n }),\n useRuntimeFetcher: override.fetch.useRuntimeFetcher,\n forceSuccessResponse: override.fetch.forceSuccessResponse,\n queryOptionsMutator,\n queryKeyMutator,\n route,\n doc,\n usePrefetch: query.usePrefetch,\n useQuery: effectiveUseQuery,\n useInfinite: effectiveUseInfinite,\n useInvalidate: query.useInvalidate,\n useSetQueryData:\n operationQueryOptions?.useSetQueryData ?? query.useSetQueryData,\n useGetQueryData:\n operationQueryOptions?.useGetQueryData ?? query.useGetQueryData,\n adapter,\n });\n }\n\n implementation += `\n ${queryImplementations}\n`;\n\n mutators =\n queryOptionsMutator || queryKeyMutator\n ? [\n ...(queryOptionsMutator ? [queryOptionsMutator] : []),\n ...(queryKeyMutator ? [queryKeyMutator] : []),\n ]\n : undefined;\n }\n\n let imports: GeneratorImport[] = [];\n\n if (isMutation) {\n const mutationResult = await generateMutationHook({\n verbOptions: { ...verbOptions, props },\n options,\n isRequestOptions,\n httpClient,\n doc,\n adapter,\n });\n\n implementation += mutationResult.implementation;\n mutators = mutationResult.mutators\n ? [...(mutators ?? []), ...mutationResult.mutators]\n : mutators;\n imports = mutationResult.imports;\n }\n\n return {\n implementation,\n mutators,\n imports,\n };\n};\n","import {\n type ClientBuilder,\n type ClientDependenciesBuilder,\n type ClientHeaderBuilder,\n generateVerbImports,\n mergeDeep,\n type NormalizedOutputOptions,\n OutputHttpClient,\n type QueryOptions,\n} from '@orval/core';\n\nimport { getQueryHeader } from './client';\nimport {\n getAngularQueryDependencies,\n getReactQueryDependencies,\n getSolidQueryDependencies,\n getSvelteQueryDependencies,\n getVueQueryDependencies,\n} from './dependencies';\nimport { createFrameworkAdapter } from './frameworks';\nimport { generateQueryHook } from './query-generator';\nimport { normalizeQueryOptions } from './utils';\n\nexport {\n getAngularQueryDependencies,\n getReactQueryDependencies,\n getSolidQueryDependencies,\n getSvelteQueryDependencies,\n getVueQueryDependencies,\n} from './dependencies';\n\n// Lazy-getter merge helper emitted once per file for the react-query client.\n// It attaches `queryKey` to the hook result without spreading it (which would\n// read every tracked field and over-subscribe the consumer) or mutating it\n// (which react-compiler forbids). Each field is re-exposed as an own getter so\n// React Query v5's per-property tracking still fires only for fields the\n// consumer actually reads. See #3573.\nconst WITH_QUERY_KEY_HELPER = `const withQueryKey = <T extends object, K>(query: T, queryKey: K): T & { queryKey: K } => {\n const result = { queryKey } as T & { queryKey: K };\n for (const key of Object.keys(query)) {\n // The explicit queryKey always wins, matching the previous\n // \\`{ ...query, queryKey }\\` spread where it was set last.\n if (key === 'queryKey') continue;\n Object.defineProperty(result, key, {\n enumerable: true,\n configurable: true,\n get: () => (query as Record<string, unknown>)[key],\n });\n }\n return result;\n};`;\n\nexport const generateQueryHeader: ClientHeaderBuilder = (params) => {\n const needsWithQueryKey =\n params.clientImplementation.includes('withQueryKey(');\n\n const innerHeader = getQueryHeader(params);\n const innerImpl =\n typeof innerHeader === 'string' ? innerHeader : innerHeader.implementation;\n const innerSharedTypes =\n typeof innerHeader === 'string' ? undefined : innerHeader.sharedTypes;\n\n const ownImplementation = `${\n params.hasAwaitedType\n ? ''\n : `type AwaitedInput<T> = PromiseLike<T> | T;\\n\n type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;\\n\\n`\n }\n${\n params.isRequestOptions && params.isMutator\n ? `type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\\n\\n`\n : ''\n}\n${innerImpl}\n${needsWithQueryKey ? `${WITH_QUERY_KEY_HELPER}\\n\\n` : ''}`;\n\n if (innerSharedTypes && innerSharedTypes.length > 0) {\n return {\n implementation: ownImplementation,\n sharedTypes: innerSharedTypes,\n };\n }\n\n return ownImplementation;\n};\n\nexport const generateQuery: ClientBuilder = async (\n verbOptions,\n options,\n outputClient,\n) => {\n const isZodOutput =\n typeof options.context.output.schemas === 'object' &&\n options.context.output.schemas.type === 'zod';\n const responseType = verbOptions.response.definition.success;\n const isPrimitiveResponse = [\n 'string',\n 'number',\n 'boolean',\n 'void',\n 'unknown',\n ].includes(responseType);\n const shouldUseRuntimeValidation =\n verbOptions.override.query.runtimeValidation && isZodOutput;\n\n const normalizedVerbOptions =\n shouldUseRuntimeValidation &&\n !isPrimitiveResponse &&\n verbOptions.response.imports.some((imp) => imp.name === responseType)\n ? {\n ...verbOptions,\n response: {\n ...verbOptions.response,\n imports: verbOptions.response.imports.map((imp) =>\n imp.name === responseType ? { ...imp, values: true } : imp,\n ),\n },\n }\n : verbOptions;\n\n const adapter = createFrameworkAdapter({\n outputClient,\n packageJson: options.context.output.packageJson,\n queryVersion: normalizedVerbOptions.override.query.version,\n });\n\n const imports = generateVerbImports(normalizedVerbOptions);\n const functionImplementation = adapter.generateRequestFunction(\n normalizedVerbOptions,\n options,\n );\n const {\n implementation: hookImplementation,\n imports: hookImports,\n mutators,\n } = await generateQueryHook(\n normalizedVerbOptions,\n options,\n outputClient,\n adapter,\n );\n\n const isFetchHttpClient =\n options.context.output.httpClient !== OutputHttpClient.AXIOS;\n\n return {\n implementation: `${functionImplementation}\\n\\n${hookImplementation}`,\n imports: [...imports, ...hookImports],\n mutators,\n ...(isFetchHttpClient && { docComment: '' }),\n };\n};\n\nconst dependenciesBuilder: Record<\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n ClientDependenciesBuilder\n> = {\n 'react-query': getReactQueryDependencies,\n 'vue-query': getVueQueryDependencies,\n 'svelte-query': getSvelteQueryDependencies,\n 'angular-query': getAngularQueryDependencies,\n 'solid-query': getSolidQueryDependencies,\n};\n\nexport const builder =\n ({\n type = 'react-query',\n options: queryOptions,\n output,\n }: {\n type?:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query';\n options?: QueryOptions;\n output?: NormalizedOutputOptions;\n } = {}) =>\n () => {\n const client: ClientBuilder = (verbOptions, options, outputClient) => {\n if (\n options.override.useNamedParameters &&\n (type === 'vue-query' || outputClient === 'vue-query')\n ) {\n throw new Error(\n `vue-query client does not support named parameters, and had broken reactivity previously, please set useNamedParameters to false; See for context: https://github.com/orval-labs/orval/pull/931#issuecomment-1752355686`,\n );\n }\n\n if (queryOptions) {\n const normalizedQueryOptions = normalizeQueryOptions(\n queryOptions,\n options.context.workspace,\n );\n verbOptions.override.query = mergeDeep(\n normalizedQueryOptions,\n verbOptions.override.query,\n );\n options.override.query = mergeDeep(\n normalizedQueryOptions,\n verbOptions.override.query,\n );\n }\n return generateQuery(verbOptions, options, outputClient, output);\n };\n\n return {\n client: client,\n header: generateQueryHeader,\n dependencies: dependenciesBuilder[type],\n };\n };\n\nexport default builder;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["generateFetchRequestFunction","OutputClientConst"],"sources":["../src/utils.ts","../src/client.ts","../src/dependencies.ts","../src/query-options.ts","../src/frameworks/angular.ts","../src/frameworks/react.ts","../src/frameworks/solid.ts","../src/frameworks/svelte.ts","../src/frameworks/vue.ts","../src/frameworks/index.ts","../src/mutation-generator.ts","../src/query-generator.ts","../src/index.ts"],"sourcesContent":["import nodePath from 'node:path';\nimport { styleText } from 'node:util';\n\nimport {\n isObject,\n isString,\n type Mutator,\n type NormalizedMutator,\n type NormalizedQueryOptions,\n type QueryOptions,\n} from '@orval/core';\n\nexport const normalizeQueryOptions = (\n queryOptions: QueryOptions = {},\n outputWorkspace: string,\n): NormalizedQueryOptions => {\n return {\n ...(queryOptions.usePrefetch ? { usePrefetch: true } : {}),\n ...(queryOptions.useInvalidate ? { useInvalidate: true } : {}),\n ...(queryOptions.useSetQueryData ? { useSetQueryData: true } : {}),\n ...(queryOptions.useGetQueryData ? { useGetQueryData: true } : {}),\n // Preserve explicit `false` so the toggles aren't silent no-ops (#2376).\n ...(queryOptions.useQuery === undefined\n ? {}\n : { useQuery: queryOptions.useQuery }),\n ...(queryOptions.useMutation === undefined\n ? {}\n : { useMutation: queryOptions.useMutation }),\n ...(queryOptions.useSuspenseQuery ? { useSuspenseQuery: true } : {}),\n ...(queryOptions.useSuspenseInfiniteQuery\n ? { useSuspenseInfiniteQuery: true }\n : {}),\n ...(queryOptions.useInfinite ? { useInfinite: true } : {}),\n ...(queryOptions.useInfiniteQueryParam\n ? { useInfiniteQueryParam: queryOptions.useInfiniteQueryParam }\n : {}),\n ...(queryOptions.options ? { options: queryOptions.options } : {}),\n ...(queryOptions.queryKey\n ? {\n queryKey: normalizeMutator(outputWorkspace, queryOptions.queryKey),\n }\n : {}),\n ...(queryOptions.queryOptions\n ? {\n queryOptions: normalizeMutator(\n outputWorkspace,\n queryOptions.queryOptions,\n ),\n }\n : {}),\n ...(queryOptions.mutationOptions\n ? {\n mutationOptions: normalizeMutator(\n outputWorkspace,\n queryOptions.mutationOptions,\n ),\n }\n : {}),\n ...(queryOptions.signal ? { signal: true } : {}),\n ...(queryOptions.shouldExportMutatorHooks\n ? { shouldExportMutatorHooks: true }\n : {}),\n ...(queryOptions.shouldExportQueryKey\n ? { shouldExportQueryKey: true }\n : {}),\n ...(queryOptions.shouldFilterQueryKey\n ? { shouldFilterQueryKey: true }\n : {}),\n ...(queryOptions.queryKeyFilter\n ? { queryKeyFilter: queryOptions.queryKeyFilter }\n : {}),\n ...(queryOptions.shouldExportHttpClient\n ? { shouldExportHttpClient: true }\n : {}),\n ...(queryOptions.shouldSplitQueryKey ? { shouldSplitQueryKey: true } : {}),\n ...(queryOptions.useOperationIdAsQueryKey\n ? { useOperationIdAsQueryKey: true }\n : {}),\n };\n};\n\n// Temporary duplicate code before next major release\nconst normalizeMutator = (\n workspace: string,\n mutator?: Mutator,\n): NormalizedMutator | undefined => {\n if (isObject(mutator)) {\n const m = mutator as Exclude<Mutator, string>;\n if (!m.path) {\n throw new Error(styleText('red', `Mutator need a path`));\n }\n\n return {\n path: nodePath.resolve(workspace, m.path),\n name: m.name,\n default: m.default ?? !m.name,\n alias: m.alias,\n external: m.external,\n extension: m.extension,\n };\n }\n\n if (isString(mutator)) {\n return {\n path: nodePath.resolve(workspace, mutator),\n default: true,\n };\n }\n\n return undefined;\n};\n\nexport const getQueryTypeForFramework = (type: string): string => {\n // Angular Query and Svelte Query don't have suspense variants, map them to regular queries\n switch (type) {\n case 'suspenseQuery': {\n return 'query';\n }\n case 'suspenseInfiniteQuery': {\n return 'infiniteQuery';\n }\n default: {\n return type;\n }\n }\n};\n\nexport const getHasSignal = ({\n overrideQuerySignal = false,\n}: {\n overrideQuerySignal?: boolean;\n}) => overrideQuerySignal;\n","import {\n type ClientHeaderBuilder,\n generateFormDataAndUrlEncodedFunction,\n generateMutatorConfig,\n generateMutatorRequestOptions,\n generateOptions,\n type GeneratorDependency,\n type GeneratorMutator,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n getAngularFilteredParamsCallExpression,\n getAngularFilteredParamsHelperBody,\n getSuccessResponseType,\n type GetterResponse,\n isObject,\n isOperationInTagBucket,\n isSyntheticDefaultImportsAllow,\n makeRouteSafe,\n OutputHttpClient,\n pascal,\n toObjectString,\n} from '@orval/core';\nimport { generateFetchHeader } from '@orval/fetch';\n\nimport type { FrameworkAdapter } from './framework-adapter';\nimport { getHasSignal } from './utils';\n\nexport const AXIOS_DEPENDENCIES = [\n {\n exports: [\n {\n name: 'axios',\n default: true,\n values: true,\n syntheticDefaultImport: true,\n },\n { name: 'AxiosRequestConfig' },\n { name: 'AxiosResponse' },\n { name: 'AxiosError' },\n ],\n dependency: 'axios',\n },\n] as const satisfies readonly GeneratorDependency[];\n\nexport const ANGULAR_HTTP_DEPENDENCIES = [\n {\n exports: [\n { name: 'HttpClient', values: true },\n { name: 'HttpHeaders', values: true },\n { name: 'HttpParams', values: true },\n { name: 'HttpContext' },\n ],\n dependency: '@angular/common/http',\n },\n // Note: 'inject' from @angular/core is already in ANGULAR_QUERY_DEPENDENCIES\n {\n exports: [\n { name: 'lastValueFrom', values: true },\n { name: 'fromEvent', values: true },\n ],\n dependency: 'rxjs',\n },\n {\n exports: [\n { name: 'takeUntil', values: true },\n { name: 'map', values: true },\n ],\n dependency: 'rxjs/operators',\n },\n] as const satisfies readonly GeneratorDependency[];\n\nexport const generateAngularHttpRequestFunction = (\n {\n headers,\n queryParams,\n operationName,\n response,\n mutator,\n body,\n props,\n verb,\n formData,\n formUrlEncoded,\n override,\n }: GeneratorVerbOptions,\n { route: _route, context }: GeneratorOptions,\n) => {\n let route = _route;\n if (context.output.urlEncodeParameters) {\n route = makeRouteSafe(route);\n }\n\n const isRequestOptions = override.requestOptions !== false;\n const isFormData = !override.formData.disabled;\n const isFormUrlEncoded = override.formUrlEncoded !== false;\n const hasSignal = getHasSignal({\n overrideQuerySignal: override.query.signal,\n });\n // Check if API has a param named \"signal\" to avoid conflict with AbortSignal\n const hasSignalParam = props.some((prop) => prop.name === 'signal');\n\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n // Handle mutator case\n if (mutator) {\n const isExactOptionalPropertyTypes =\n !!context.output.tsconfig?.compilerOptions?.exactOptionalPropertyTypes;\n\n const mutatorConfig = generateMutatorConfig({\n route,\n body,\n headers,\n queryParams,\n response,\n verb,\n isFormData,\n isFormUrlEncoded,\n hasSignal,\n hasSignalParam,\n isExactOptionalPropertyTypes,\n isAngular: context.output.httpClient === OutputHttpClient.ANGULAR,\n });\n\n const requestOptions = isRequestOptions\n ? generateMutatorRequestOptions(\n override.requestOptions,\n mutator.hasSecondArg,\n )\n : '';\n\n const propsImplementation = toObjectString(props, 'implementation');\n\n return `${override.query.shouldExportHttpClient ? 'export ' : ''}const ${operationName} = (\\n ${propsImplementation}\\n ${\n isRequestOptions && mutator.hasSecondArg\n ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter<typeof ${mutator.name}>,`\n : ''\n } ${getSignalDefinition({ hasSignal, hasSignalParam })}) => {\n ${bodyForm}\n return ${mutator.name}<${response.definition.success || 'unknown'}>(\n ${mutatorConfig},\n ${requestOptions});\n }\n `;\n }\n\n // Generate native Angular HttpClient implementation\n const queryProps = toObjectString(props, 'implementation').replace(\n /,\\s*$/,\n '',\n );\n const dataType = response.definition.success || 'unknown';\n\n // Build URL with query params - use httpParams to avoid shadowing the 'params' variable\n const hasQueryParams = queryParams?.schema.name;\n // The queryParams variable from function props is always named 'params'\n const filteredParamsExpression = getAngularFilteredParamsCallExpression(\n 'params',\n queryParams?.requiredNullableKeys,\n );\n const urlConstruction = hasQueryParams\n ? `const httpParams = params ? new HttpParams({ fromObject: ${filteredParamsExpression} }) : undefined;\n const url = \\`${route}\\`;`\n : `const url = \\`${route}\\`;`;\n\n // Build request options\n const httpOptions: string[] = [];\n if (hasQueryParams) {\n httpOptions.push('params: httpParams');\n }\n if (headers) {\n httpOptions.push('headers: new HttpHeaders(headers)');\n }\n\n // Use only success response content types to determine responseType\n // (response.contentTypes includes error responses which may be JSON and would\n // incorrectly prevent text/blob responseType from being set)\n const successResponseType = getSuccessResponseType(response);\n const responseTypeOption = successResponseType\n ? `'${successResponseType}'`\n : undefined;\n if (responseTypeOption) {\n httpOptions.push(`responseType: ${responseTypeOption}`);\n }\n\n const optionsStr =\n httpOptions.length > 0 ? `, { ${httpOptions.join(', ')} }` : '';\n\n // Build the HTTP method call\n let httpCall: string;\n const httpGeneric = responseTypeOption ? '' : `<${dataType}>`;\n const bodyArg =\n isFormData && body.formData\n ? 'formData'\n : isFormUrlEncoded && body.formUrlEncoded\n ? 'formUrlEncoded'\n : body.definition\n ? toObjectString([body], 'implementation').replace(/,\\s*$/, '')\n : '';\n\n switch (verb) {\n case 'get':\n case 'head': {\n httpCall = `http.${verb}${httpGeneric}(url${optionsStr})`;\n break;\n }\n case 'delete': {\n httpCall = bodyArg\n ? `http.${verb}${httpGeneric}(url, { ${httpOptions.length > 0 ? httpOptions.join(', ') + ', ' : ''}body: ${bodyArg} })`\n : `http.${verb}${httpGeneric}(url${optionsStr})`;\n break;\n }\n default: {\n // post, put, patch\n httpCall = `http.${verb}${httpGeneric}(url, ${bodyArg || 'undefined'}${optionsStr})`;\n break;\n }\n }\n\n // Detect if Zod runtime validation should be applied\n const responseType = response.definition.success;\n const isPrimitiveType = [\n 'string',\n 'number',\n 'boolean',\n 'void',\n 'unknown',\n ].includes(responseType);\n const hasSchema = response.imports.some((imp) => imp.name === responseType);\n const isZodOutput =\n isObject(context.output.schemas) && context.output.schemas.type === 'zod';\n const isValidateResponse =\n override.query.runtimeValidation &&\n isZodOutput &&\n !isPrimitiveType &&\n hasSchema;\n\n // If validation is enabled, pipe through map(data => Schema.parse(data))\n if (isValidateResponse) {\n const schemaValueRef =\n responseType === 'Error' ? 'ErrorSchema' : responseType;\n httpCall = `${httpCall}.pipe(map(data => ${schemaValueRef}.parse(data)))`;\n }\n\n // For Angular, we use takeUntil with fromEvent to handle AbortSignal cancellation\n // This follows the pattern from TanStack Query Angular documentation\n // Note: signal can be null (from RequestInit), so we accept null | undefined\n const optionsParam = hasSignal\n ? 'options?: { signal?: AbortSignal | null }'\n : '';\n\n // Build additional params after http, handling empty queryProps properly\n const additionalParams = [queryProps, optionsParam]\n .filter(Boolean)\n .join(', ');\n\n // Note: http parameter is passed from the inject* function which has injection context\n return `${override.query.shouldExportHttpClient ? 'export ' : ''}const ${operationName} = (\n http: HttpClient${additionalParams ? `,\\n ${additionalParams}` : ''}\n ): Promise<${dataType}> => {\n ${bodyForm}\n ${urlConstruction}\n const request$ = ${httpCall};\n if (options?.signal) {\n return lastValueFrom(request$.pipe(takeUntil(fromEvent(options.signal, 'abort'))));\n }\n return lastValueFrom(request$);\n }\n`;\n};\nexport const generateAxiosRequestFunction = (\n {\n headers,\n queryParams,\n operationName,\n response,\n mutator,\n body,\n props: _props,\n verb,\n formData,\n formUrlEncoded,\n override,\n paramsSerializer,\n }: GeneratorVerbOptions,\n { route: _route, context }: GeneratorOptions,\n adapter: FrameworkAdapter,\n) => {\n const props = adapter.transformProps(_props);\n let route = _route;\n\n if (context.output.urlEncodeParameters) {\n route = makeRouteSafe(route);\n }\n\n const unrefStatements = adapter.getRequestUnrefStatements(props);\n\n const isRequestOptions = override.requestOptions !== false;\n const isFormData = !override.formData.disabled;\n const isFormUrlEncoded = override.formUrlEncoded !== false;\n const hasSignal = getHasSignal({\n overrideQuerySignal: override.query.signal,\n });\n // Check if API has a param named \"signal\" to avoid conflict with AbortSignal\n const hasSignalParam = _props.some((prop) => prop.name === 'signal');\n\n const isExactOptionalPropertyTypes =\n !!context.output.tsconfig?.compilerOptions?.exactOptionalPropertyTypes;\n\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n if (mutator) {\n const mutatorConfig = generateMutatorConfig({\n route,\n body,\n headers,\n queryParams,\n response,\n verb,\n isFormData,\n isFormUrlEncoded,\n hasSignal,\n hasSignalParam,\n isExactOptionalPropertyTypes,\n });\n\n const bodyDefinition = body.definition.replace('[]', String.raw`\\[\\]`);\n const propsImplementation =\n mutator.bodyTypeName && body.definition\n ? toObjectString(props, 'implementation').replace(\n new RegExp(String.raw`(\\w*):\\s?${bodyDefinition}`),\n `$1: ${mutator.bodyTypeName}<${body.definition}>`,\n )\n : toObjectString(props, 'implementation');\n\n const requestOptions = isRequestOptions\n ? generateMutatorRequestOptions(\n override.requestOptions,\n mutator.hasSecondArg,\n )\n : '';\n\n if (mutator.isHook) {\n const hookSecondArg =\n isRequestOptions && mutator.hasSecondArg\n ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter<ReturnType<typeof ${mutator.name}>>,`\n : '';\n\n const callback = `(\\n ${propsImplementation}\\n ${hookSecondArg}${getSignalDefinition({ hasSignal, hasSignalParam })}) => {\n ${unrefStatements}\n ${bodyForm}\n return ${operationName}(\n ${mutatorConfig},\n ${requestOptions});\n }`;\n\n return `${\n override.query.shouldExportMutatorHooks ? 'export ' : ''\n }const use${pascal(operationName)}Hook = () => {\n const ${operationName} = ${mutator.name}<${\n response.definition.success || 'unknown'\n }>();\n\n return ${adapter.wrapHookMutatorCallback(callback, operationName)}\n }\n `;\n }\n\n return `${override.query.shouldExportHttpClient ? 'export ' : ''}const ${operationName} = (\\n ${propsImplementation}\\n ${\n isRequestOptions && mutator.hasSecondArg\n ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter<typeof ${mutator.name}>,`\n : ''\n }${getSignalDefinition({ hasSignal, hasSignalParam })}) => {\n ${unrefStatements}\n ${bodyForm}\n return ${mutator.name}<${response.definition.success || 'unknown'}>(\n ${mutatorConfig},\n ${requestOptions});\n }\n `;\n }\n\n const isSyntheticDefaultImportsAllowed = isSyntheticDefaultImportsAllow(\n context.output.tsconfig,\n );\n\n const options = generateOptions({\n route,\n body,\n headers,\n queryParams,\n response,\n verb,\n requestOptions: override.requestOptions,\n isFormData,\n isFormUrlEncoded,\n paramsSerializer,\n paramsSerializerOptions: override.paramsSerializerOptions,\n isExactOptionalPropertyTypes,\n hasSignal,\n hasSignalParam,\n });\n\n const optionsArgs = generateRequestOptionsArguments({\n isRequestOptions,\n hasSignal,\n hasSignalParam,\n });\n\n const queryProps = toObjectString(props, 'implementation');\n\n const httpRequestFunctionImplementation = `${override.query.shouldExportHttpClient ? 'export ' : ''}const ${operationName} = (\\n ${queryProps} ${optionsArgs} ): Promise<AxiosResponse<${\n response.definition.success || 'unknown'\n }>> => {\n ${unrefStatements}\n ${bodyForm}\n return axios${\n isSyntheticDefaultImportsAllowed ? '' : '.default'\n }.${verb}(${options});\n }\n`;\n\n return httpRequestFunctionImplementation;\n};\n\nexport const generateRequestOptionsArguments = ({\n isRequestOptions,\n hasSignal,\n hasSignalParam = false,\n}: {\n isRequestOptions: boolean;\n hasSignal: boolean;\n hasSignalParam?: boolean;\n}) => {\n if (isRequestOptions) {\n return 'options?: AxiosRequestConfig\\n';\n }\n\n return getSignalDefinition({ hasSignal, hasSignalParam });\n};\n\nexport const getSignalDefinition = ({\n hasSignal,\n hasSignalParam = false,\n}: {\n hasSignal: boolean;\n hasSignalParam?: boolean;\n}): string => {\n if (!hasSignal) {\n return '';\n }\n const signalVar = hasSignalParam ? 'querySignal' : 'signal';\n return `${signalVar}?: AbortSignal\\n`;\n};\n\nexport const getQueryArgumentsRequestType = (\n httpClient: OutputHttpClient,\n mutator?: GeneratorMutator,\n useRuntimeFetcher?: boolean,\n) => {\n if (!mutator) {\n if (httpClient === OutputHttpClient.AXIOS) {\n return `axios?: AxiosRequestConfig`;\n }\n if (httpClient === OutputHttpClient.FETCH && useRuntimeFetcher) {\n return 'fetch?: RequestInit, fetcher?: typeof globalThis.fetch';\n }\n return 'fetch?: RequestInit';\n }\n\n if (mutator.hasSecondArg && !mutator.isHook) {\n return `request?: SecondParameter<typeof ${mutator.name}>`;\n }\n\n if (mutator.hasSecondArg && mutator.isHook) {\n return `request?: SecondParameter<ReturnType<typeof ${mutator.name}>>`;\n }\n\n return '';\n};\n\nexport const getQueryOptions = ({\n isRequestOptions,\n mutator,\n isExactOptionalPropertyTypes,\n hasSignal,\n httpClient,\n hasSignalParam = false,\n useRuntimeFetcher = false,\n}: {\n isRequestOptions: boolean;\n mutator?: GeneratorMutator;\n isExactOptionalPropertyTypes: boolean;\n hasSignal: boolean;\n httpClient: OutputHttpClient;\n hasSignalParam?: boolean;\n useRuntimeFetcher?: boolean;\n}) => {\n // Use querySignal if API has a param named \"signal\" to avoid conflict\n const signalVar = hasSignalParam ? 'querySignal' : 'signal';\n // Only use explicit `signal: querySignal` when there's a naming conflict\n const signalProp = hasSignalParam ? `signal: ${signalVar}` : 'signal';\n\n if (!mutator && isRequestOptions) {\n const options =\n httpClient === OutputHttpClient.AXIOS ? 'axiosOptions' : 'fetchOptions';\n const fetcherArg =\n httpClient === OutputHttpClient.FETCH && useRuntimeFetcher\n ? ', fetcherFn'\n : '';\n\n if (!hasSignal) {\n return `${options}${fetcherArg}`;\n }\n\n return `{ ${\n isExactOptionalPropertyTypes\n ? `...(${signalVar} ? { ${signalProp} } : {})`\n : signalProp\n }, ...${options} }${fetcherArg}`;\n }\n\n // For Angular mutators with hasSecondArg, pass http through options parameter\n // http is injected in the queryOptionsFn and passed here as the second arg to the mutator\n if (mutator?.hasSecondArg && httpClient === OutputHttpClient.ANGULAR) {\n if (!hasSignal) {\n return 'http';\n }\n return `http, ${signalVar}`;\n }\n\n if (mutator?.hasSecondArg && isRequestOptions) {\n if (!hasSignal) {\n return 'requestOptions';\n }\n\n // Axios and Angular mutators: signal is a separate argument\n // Fetch mutators: signal is wrapped in options object\n return httpClient === OutputHttpClient.AXIOS ||\n httpClient === OutputHttpClient.ANGULAR\n ? `requestOptions, ${signalVar}`\n : `{ ${signalProp}, ...requestOptions }`;\n }\n\n if (hasSignal) {\n // Axios: signal is always separate\n // Angular with mutator: signal is separate (mutator pattern)\n // Angular without mutator: signal is wrapped (native pattern)\n // Fetch/other: signal is wrapped\n if (httpClient === OutputHttpClient.AXIOS) {\n return signalVar;\n }\n if (httpClient === OutputHttpClient.ANGULAR && mutator) {\n return signalVar;\n }\n return `{ ${signalProp} }`;\n }\n\n return '';\n};\n\nexport const getHookOptions = ({\n isRequestOptions,\n httpClient,\n mutator,\n useRuntimeFetcher = false,\n}: {\n isRequestOptions: boolean;\n httpClient: OutputHttpClient;\n mutator?: GeneratorMutator;\n useRuntimeFetcher?: boolean;\n}) => {\n if (!isRequestOptions) {\n return '';\n }\n\n let value = 'const {query: queryOptions';\n\n if (!mutator) {\n if (httpClient === OutputHttpClient.AXIOS) {\n value += ', axios: axiosOptions';\n } else if (httpClient === OutputHttpClient.FETCH && useRuntimeFetcher) {\n value += ', fetch: fetchOptions, fetcher: fetcherFn';\n } else {\n value += ', fetch: fetchOptions';\n }\n }\n\n if (mutator?.hasSecondArg) {\n value += ', request: requestOptions';\n }\n\n value += '} = options ?? {};';\n\n return value;\n};\n\n// Helper to deduplicate union type string: \"A | B | B\" -> \"A | B\"\nconst dedupeUnionTypes = (types: string): string => {\n if (!types) return types;\n // Split by '|', trim spaces, filter out empty, and dedupe using a Set\n const unique = [\n ...new Set(\n types\n .split('|')\n .map((t) => t.trim())\n .filter(Boolean),\n ),\n ];\n return unique.join(' | ');\n};\n\nexport const getQueryErrorType = (\n operationName: string,\n response: GetterResponse,\n httpClient: OutputHttpClient,\n mutator?: GeneratorMutator,\n forceSuccessResponse?: boolean,\n) => {\n const errorsType = dedupeUnionTypes(response.definition.errors || 'unknown');\n\n if (mutator) {\n return mutator.hasErrorType\n ? `${mutator.default ? pascal(operationName) : ''}ErrorType<${errorsType}>`\n : errorsType;\n }\n\n if (httpClient === OutputHttpClient.AXIOS) {\n return `AxiosError<${errorsType}>`;\n }\n\n // With `forceSuccessResponse`, the fetch client narrows its return type to\n // the success body and throws `globalThis.Error & { info?, status? }` on\n // non-2xx responses instead of returning the error body. TError must match\n // that thrown shape rather than the raw OpenAPI error type. See #3300.\n if (forceSuccessResponse) {\n return `globalThis.Error & { info?: ${errorsType}; status?: number }`;\n }\n\n return errorsType;\n};\n\nexport const getHooksOptionImplementation = (\n isRequestOptions: boolean,\n httpClient: OutputHttpClient,\n operationName: string,\n mutator?: GeneratorMutator,\n useRuntimeFetcher?: boolean,\n) => {\n const fetcherOption =\n httpClient === OutputHttpClient.FETCH && useRuntimeFetcher\n ? ', fetcher: fetcherFn'\n : '';\n const options =\n httpClient === OutputHttpClient.AXIOS\n ? ', axios: axiosOptions'\n : `, fetch: fetchOptions${fetcherOption}`;\n\n return isRequestOptions\n ? `const mutationKey = ['${operationName}'];\nconst {mutation: mutationOptions${\n mutator\n ? mutator.hasSecondArg\n ? ', request: requestOptions'\n : ''\n : options\n }} = options ?\n options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?\n options\n : {...options, mutation: {...options.mutation, mutationKey}}\n : {mutation: { mutationKey, }${mutator?.hasSecondArg ? ', request: undefined' : ''}${mutator ? '' : httpClient === OutputHttpClient.AXIOS ? ', axios: undefined' : ', fetch: undefined'}};`\n : '';\n};\n\nexport const getMutationRequestArgs = (\n isRequestOptions: boolean,\n httpClient: OutputHttpClient,\n mutator?: GeneratorMutator,\n useRuntimeFetcher?: boolean,\n) => {\n const options =\n httpClient === OutputHttpClient.AXIOS ? 'axiosOptions' : 'fetchOptions';\n const fetcherArg =\n httpClient === OutputHttpClient.FETCH && useRuntimeFetcher\n ? ', fetcherFn'\n : '';\n\n // For Angular mutators with hasSecondArg, pass http (which is injected in inject* fn)\n // http is required as first param so no assertion needed\n if (mutator?.hasSecondArg && httpClient === OutputHttpClient.ANGULAR) {\n return 'http';\n }\n\n return isRequestOptions\n ? mutator\n ? mutator.hasSecondArg\n ? 'requestOptions'\n : ''\n : `${options}${fetcherArg}`\n : '';\n};\n\nexport const getQueryHeader: ClientHeaderBuilder = (params) => {\n if (params.output.httpClient === OutputHttpClient.FETCH) {\n return generateFetchHeader(params);\n }\n\n if (params.output.httpClient === OutputHttpClient.ANGULAR) {\n const relevantVerbs = Object.values(params.verbOptions).filter(\n (verbOption) => isOperationInTagBucket(verbOption, params.tag),\n );\n const hasQueryParams = relevantVerbs.some((v) => v.queryParams);\n\n return hasQueryParams ? getAngularFilteredParamsHelperBody() : '';\n }\n\n return '';\n};\n","import {\n type ClientDependenciesBuilder,\n compareVersions,\n type GeneratorDependency,\n OutputHttpClient,\n type PackageJson,\n} from '@orval/core';\n\nimport { ANGULAR_HTTP_DEPENDENCIES, AXIOS_DEPENDENCIES } from './client';\n\nconst REACT_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n {\n name: 'useCallback',\n values: true,\n },\n ],\n dependency: 'react',\n },\n];\n\nconst PARAMS_SERIALIZER_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n {\n name: 'qs',\n default: true,\n values: true,\n syntheticDefaultImport: true,\n },\n ],\n dependency: 'qs',\n },\n];\n\nconst SVELTE_QUERY_DEPENDENCIES_V3: GeneratorDependency[] = [\n {\n exports: [\n { name: 'useQuery', values: true },\n { name: 'useInfiniteQuery', values: true },\n { name: 'useMutation', values: true },\n { name: 'useQueryClient', values: true },\n { name: 'UseQueryOptions' },\n {\n name: 'UseInfiniteQueryOptions',\n },\n { name: 'UseMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'UseQueryStoreResult' },\n { name: 'UseInfiniteQueryStoreResult' },\n { name: 'QueryKey' },\n { name: 'CreateMutationResult' },\n { name: 'InvalidateOptions' },\n ],\n dependency: '@sveltestack/svelte-query',\n },\n];\nconst SVELTE_QUERY_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n { name: 'createQuery', values: true },\n { name: 'createInfiniteQuery', values: true },\n { name: 'createMutation', values: true },\n { name: 'useQueryClient', values: true },\n { name: 'CreateQueryOptions' },\n {\n name: 'CreateInfiniteQueryOptions',\n },\n { name: 'MutationFunctionContext' },\n { name: 'CreateMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'CreateQueryResult' },\n { name: 'CreateInfiniteQueryResult' },\n { name: 'QueryKey' },\n { name: 'InfiniteData' },\n { name: 'CreateMutationResult' },\n { name: 'DataTag' },\n { name: 'QueryClient' },\n { name: 'InvalidateOptions' },\n ],\n dependency: '@tanstack/svelte-query',\n },\n];\n\nexport const isSvelteQueryV3 = (packageJson: PackageJson | undefined) => {\n const hasSvelteQuery =\n packageJson?.dependencies?.['@sveltestack/svelte-query'] ??\n packageJson?.devDependencies?.['@sveltestack/svelte-query'] ??\n packageJson?.peerDependencies?.['@sveltestack/svelte-query'];\n const hasSvelteQueryV4 =\n packageJson?.dependencies?.['@tanstack/svelte-query'] ??\n packageJson?.devDependencies?.['@tanstack/svelte-query'] ??\n packageJson?.peerDependencies?.['@tanstack/svelte-query'];\n\n return !!hasSvelteQuery && !hasSvelteQueryV4;\n};\n\nexport const isSvelteQueryV6 = (packageJson: PackageJson | undefined) => {\n return isQueryV6(packageJson, 'svelte-query');\n};\n\nexport const getSvelteQueryDependencies: ClientDependenciesBuilder = (\n hasGlobalMutator,\n hasParamsSerializerOptions,\n packageJson,\n httpClient?: OutputHttpClient,\n) => {\n const hasSvelteQueryV3 = isSvelteQueryV3(packageJson);\n\n return [\n ...(!hasGlobalMutator && httpClient === OutputHttpClient.AXIOS\n ? AXIOS_DEPENDENCIES\n : []),\n ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n ...(hasSvelteQueryV3\n ? SVELTE_QUERY_DEPENDENCIES_V3\n : SVELTE_QUERY_DEPENDENCIES),\n ];\n};\n\nconst REACT_QUERY_DEPENDENCIES_V3: GeneratorDependency[] = [\n {\n exports: [\n { name: 'useQuery', values: true },\n { name: 'useInfiniteQuery', values: true },\n { name: 'useMutation', values: true },\n { name: 'useQueryClient', values: true },\n { name: 'UseQueryOptions' },\n { name: 'UseInfiniteQueryOptions' },\n { name: 'UseMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'UseQueryResult' },\n { name: 'UseInfiniteQueryResult' },\n { name: 'QueryKey' },\n { name: 'QueryClient' },\n { name: 'UseMutationResult' },\n { name: 'InvalidateOptions' },\n ],\n dependency: 'react-query',\n },\n];\nconst REACT_QUERY_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n { name: 'useQuery', values: true },\n { name: 'useSuspenseQuery', values: true },\n { name: 'useInfiniteQuery', values: true },\n { name: 'useSuspenseInfiniteQuery', values: true },\n { name: 'useMutation', values: true },\n { name: 'useQueryClient', values: true },\n { name: 'UseQueryOptions' },\n { name: 'DefinedInitialDataOptions' },\n { name: 'UndefinedInitialDataOptions' },\n { name: 'UseSuspenseQueryOptions' },\n { name: 'UseInfiniteQueryOptions' },\n { name: 'UseSuspenseInfiniteQueryOptions' },\n { name: 'UseMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'MutationFunctionContext' },\n { name: 'UseQueryResult' },\n { name: 'DefinedUseQueryResult' },\n { name: 'UseSuspenseQueryResult' },\n { name: 'UseInfiniteQueryResult' },\n { name: 'DefinedUseInfiniteQueryResult' },\n { name: 'UseSuspenseInfiniteQueryResult' },\n { name: 'QueryKey' },\n { name: 'QueryClient' },\n { name: 'InfiniteData' },\n { name: 'UseMutationResult' },\n { name: 'DataTag' },\n { name: 'InvalidateOptions' },\n ],\n dependency: '@tanstack/react-query',\n },\n];\n\nexport const getReactQueryDependencies: ClientDependenciesBuilder = (\n hasGlobalMutator,\n hasParamsSerializerOptions,\n packageJson,\n httpClient,\n hasTagsMutator,\n override,\n) => {\n const hasReactQuery =\n packageJson?.dependencies?.['react-query'] ??\n packageJson?.devDependencies?.['react-query'] ??\n packageJson?.peerDependencies?.['react-query'];\n const hasReactQueryV4 =\n packageJson?.dependencies?.['@tanstack/react-query'] ??\n packageJson?.devDependencies?.['@tanstack/react-query'] ??\n packageJson?.peerDependencies?.['@tanstack/react-query'];\n\n const queryVersion = override?.query.version;\n const useReactQueryV3 =\n queryVersion === undefined\n ? hasReactQuery && !hasReactQueryV4\n : queryVersion <= 3;\n\n return [\n ...(hasGlobalMutator || hasTagsMutator ? REACT_DEPENDENCIES : []),\n ...(!hasGlobalMutator && httpClient === OutputHttpClient.AXIOS\n ? AXIOS_DEPENDENCIES\n : []),\n ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n ...(useReactQueryV3\n ? REACT_QUERY_DEPENDENCIES_V3\n : REACT_QUERY_DEPENDENCIES),\n ];\n};\n\nconst VUE_QUERY_DEPENDENCIES_V3: GeneratorDependency[] = [\n {\n exports: [\n { name: 'useQuery', values: true },\n { name: 'useInfiniteQuery', values: true },\n { name: 'useMutation', values: true },\n ],\n dependency: 'vue-query',\n },\n {\n exports: [\n { name: 'UseQueryOptions' },\n { name: 'UseInfiniteQueryOptions' },\n { name: 'UseMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'UseQueryResult' },\n { name: 'UseInfiniteQueryResult' },\n { name: 'QueryKey' },\n { name: 'UseMutationReturnType' },\n { name: 'InvalidateOptions' },\n ],\n dependency: 'vue-query/types',\n },\n {\n exports: [\n { name: 'unref', values: true },\n { name: 'computed', values: true },\n ],\n dependency: 'vue',\n },\n {\n exports: [{ name: 'UseQueryReturnType' }],\n dependency: 'vue-query/lib/vue/useBaseQuery',\n },\n];\n\nconst VUE_QUERY_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n { name: 'useQuery', values: true },\n { name: 'useInfiniteQuery', values: true },\n { name: 'useMutation', values: true },\n { name: 'useQueryClient', values: true },\n { name: 'UseQueryOptions' },\n { name: 'UseInfiniteQueryOptions' },\n { name: 'UseMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'MutationFunctionContext' },\n { name: 'QueryKey' },\n { name: 'UseQueryReturnType' },\n { name: 'UseInfiniteQueryReturnType' },\n { name: 'InfiniteData' },\n { name: 'UseMutationReturnType' },\n { name: 'DataTag' },\n { name: 'QueryClient' },\n { name: 'InvalidateOptions' },\n ],\n dependency: '@tanstack/vue-query',\n },\n {\n exports: [\n { name: 'computed', values: true },\n { name: 'unref', values: true },\n { name: 'toValue', values: true },\n { name: 'MaybeRef' },\n { name: 'MaybeRefOrGetter' },\n ],\n dependency: 'vue',\n },\n];\n\nconst getSolidQueryImports = (\n prefix: 'use' | 'create',\n hasRenamedOptionsTypes: boolean,\n): GeneratorDependency[] => {\n const capitalized = prefix === 'use' ? 'Use' : 'Create';\n // Solid Query renamed the plain options interfaces in v5.100.6, dropping the\n // `Solid` prefix: `SolidQueryOptions` → `QueryOptions`, `SolidInfiniteQueryOptions` →\n // `InfiniteQueryOptions`, `SolidMutationOptions` → `MutationOptions`. The\n // `Use*Options` / `Create*Options` Accessor aliases keep their names but\n // are still imported because queries use them as the user-facing\n // `options.query` param type (Solid's `useQuery` overloads rely on that\n // shape so the `initialData?` discrimination keeps working).\n const queryOptionsTypeName = hasRenamedOptionsTypes\n ? 'QueryOptions'\n : 'SolidQueryOptions';\n const infiniteQueryOptionsTypeName = hasRenamedOptionsTypes\n ? 'InfiniteQueryOptions'\n : 'SolidInfiniteQueryOptions';\n const mutationOptionsTypeName = hasRenamedOptionsTypes\n ? 'MutationOptions'\n : 'SolidMutationOptions';\n return [\n {\n exports: [\n { name: `${prefix}Query`, values: true },\n { name: `${prefix}InfiniteQuery`, values: true },\n { name: `${prefix}Mutation`, values: true },\n { name: `${capitalized}QueryOptions` },\n { name: `${capitalized}InfiniteQueryOptions` },\n { name: queryOptionsTypeName },\n { name: infiniteQueryOptionsTypeName },\n { name: mutationOptionsTypeName },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: `${capitalized}QueryResult` },\n { name: `${capitalized}InfiniteQueryResult` },\n { name: 'QueryKey' },\n { name: 'InfiniteData' },\n { name: `${capitalized}MutationResult` },\n { name: 'DataTag' },\n { name: 'QueryClient' },\n { name: 'InvalidateOptions' },\n ],\n dependency: '@tanstack/solid-query',\n },\n {\n // `mergeProps` lets the query hook attach `queryKey` to the result\n // without mutating the read-only Solid Store (see #3347). `addDependency`\n // only emits an import when the export name appears in the generated\n // file, so mutation-only outputs never receive an unused `mergeProps`\n // import.\n exports: [{ name: 'mergeProps', values: true }],\n dependency: 'solid-js',\n },\n ];\n};\n\nconst ANGULAR_QUERY_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n { name: 'injectQuery', values: true },\n { name: 'injectInfiniteQuery', values: true },\n { name: 'injectMutation', values: true },\n { name: 'InjectQueryOptions' },\n { name: 'InjectMutationOptions' },\n { name: 'CreateQueryOptions' },\n { name: 'CreateInfiniteQueryOptions' },\n { name: 'CreateMutationOptions' },\n { name: 'MutationFunctionContext' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\n { name: 'QueryKey' },\n { name: 'CreateQueryResult' },\n { name: 'CreateInfiniteQueryResult' },\n { name: 'InfiniteData' },\n { name: 'CreateMutationResult' },\n { name: 'DataTag' },\n { name: 'QueryClient', values: true },\n { name: 'InvalidateOptions' },\n ],\n dependency: '@tanstack/angular-query-experimental',\n },\n {\n exports: [\n { name: 'inject', values: true },\n { name: 'Signal' },\n { name: 'computed', values: true },\n ],\n dependency: '@angular/core',\n },\n];\n\nexport const isVueQueryV3 = (packageJson: PackageJson | undefined) => {\n const hasVueQuery =\n packageJson?.dependencies?.['vue-query'] ??\n packageJson?.devDependencies?.['vue-query'] ??\n packageJson?.peerDependencies?.['vue-query'];\n const hasVueQueryV4 =\n packageJson?.dependencies?.['@tanstack/vue-query'] ??\n packageJson?.devDependencies?.['@tanstack/vue-query'] ??\n packageJson?.peerDependencies?.['@tanstack/vue-query'];\n\n return !!hasVueQuery && !hasVueQueryV4;\n};\n\nexport const getVueQueryDependencies: ClientDependenciesBuilder = (\n hasGlobalMutator,\n hasParamsSerializerOptions,\n packageJson,\n httpClient,\n) => {\n const hasVueQueryV3 = isVueQueryV3(packageJson);\n\n return [\n ...(!hasGlobalMutator && httpClient === OutputHttpClient.AXIOS\n ? AXIOS_DEPENDENCIES\n : []),\n ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n ...(hasVueQueryV3 ? VUE_QUERY_DEPENDENCIES_V3 : VUE_QUERY_DEPENDENCIES),\n ];\n};\n\nexport const getSolidQueryDependencies: ClientDependenciesBuilder = (\n hasGlobalMutator: boolean,\n hasParamsSerializerOptions: boolean,\n packageJson,\n httpClient?: OutputHttpClient,\n) => {\n return [\n ...(!hasGlobalMutator && httpClient === OutputHttpClient.AXIOS\n ? AXIOS_DEPENDENCIES\n : []),\n ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n ...getSolidQueryImports(\n isSolidQueryWithUsePrefix(packageJson) ? 'use' : 'create',\n isSolidQueryWithRenamedOptionsTypes(packageJson),\n ),\n ];\n};\n\nexport const getAngularQueryDependencies: ClientDependenciesBuilder = (\n hasGlobalMutator: boolean,\n hasParamsSerializerOptions: boolean,\n packageJson,\n httpClient?: OutputHttpClient,\n) => {\n // Always use Angular HTTP dependencies for Angular httpClient\n // Previously skipped for mutators, but we now inject http everywhere\n const useAngularHttp = httpClient === OutputHttpClient.ANGULAR;\n const useAxios = !hasGlobalMutator && httpClient === OutputHttpClient.AXIOS;\n\n return [\n ...(useAngularHttp ? ANGULAR_HTTP_DEPENDENCIES : []),\n ...(useAxios ? AXIOS_DEPENDENCIES : []),\n ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n ...ANGULAR_QUERY_DEPENDENCIES,\n ];\n};\n\nexport const isQueryV5 = (\n packageJson: PackageJson | undefined,\n queryClient:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n) => {\n // Angular Query is v5 only\n if (queryClient === 'angular-query') {\n return true;\n }\n\n const version = getPackageByQueryClient(packageJson, queryClient);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '5.0.0');\n};\n\nconst isQueryV6 = (\n packageJson: PackageJson | undefined,\n queryClient: 'react-query' | 'vue-query' | 'svelte-query' | 'solid-query',\n) => {\n const version = getPackageByQueryClient(packageJson, queryClient);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '6.0.0');\n};\n\nexport const isQueryV5WithDataTagError = (\n packageJson: PackageJson | undefined,\n queryClient:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n) => {\n // Angular Query is v5 only and supports DataTag\n if (queryClient === 'angular-query') {\n return true;\n }\n\n const version = getPackageByQueryClient(packageJson, queryClient);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '5.62.0');\n};\n\nexport const isQueryV5WithRequiredContextOnSuccess = (\n packageJson: PackageJson | undefined,\n queryClient:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n) => {\n const version = getPackageByQueryClient(packageJson, queryClient);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '5.14.1');\n};\n\nexport const isQueryV5WithMutationContextOnSuccess = (\n packageJson: PackageJson | undefined,\n queryClient:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n) => {\n const version = getPackageByQueryClient(packageJson, queryClient);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '5.89.0');\n};\n\nexport const isQueryV5WithInfiniteQueryOptionsError = (\n packageJson: PackageJson | undefined,\n queryClient:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n) => {\n // Angular Query is v5 only and supports infinite query options\n if (queryClient === 'angular-query') {\n return true;\n }\n\n const version = getPackageByQueryClient(packageJson, queryClient);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '5.80.0');\n};\n\nexport const isSolidQueryWithUsePrefix = (\n packageJson: PackageJson | undefined,\n) => {\n const version = getPackageByQueryClient(packageJson, 'solid-query');\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n // https://github.com/TanStack/query/blob/v5.71.5/packages/solid-query/src/index.ts\n return compareVersions(withoutRc, '5.71.5');\n};\n\n/**\n * Solid Query renamed its plain options interfaces in v5.100.6, dropping the\n * `Solid` prefix:\n * - `SolidQueryOptions` → `QueryOptions`\n * - `SolidInfiniteQueryOptions` → `InfiniteQueryOptions`\n * - `SolidMutationOptions` → `MutationOptions`\n *\n * The Accessor wrappers `UseQueryOptions` / `UseInfiniteQueryOptions` /\n * `UseMutationOptions` keep the same names but reference the renamed\n * interfaces internally.\n *\n * https://github.com/TanStack/query/commit/<rename-commit>\n */\nexport const isSolidQueryWithRenamedOptionsTypes = (\n packageJson: PackageJson | undefined,\n) => {\n const version = getPackageByQueryClient(packageJson, 'solid-query');\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '5.100.6');\n};\n\nconst getPackageByQueryClient = (\n packageJson: PackageJson | undefined,\n queryClient:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n) => {\n switch (queryClient) {\n case 'react-query': {\n const pkgName = '@tanstack/react-query';\n return (\n packageJson?.resolvedVersions?.[pkgName] ??\n packageJson?.dependencies?.[pkgName] ??\n packageJson?.devDependencies?.[pkgName] ??\n packageJson?.peerDependencies?.[pkgName]\n );\n }\n case 'svelte-query': {\n const pkgName = '@tanstack/svelte-query';\n return (\n packageJson?.resolvedVersions?.[pkgName] ??\n packageJson?.dependencies?.[pkgName] ??\n packageJson?.devDependencies?.[pkgName] ??\n packageJson?.peerDependencies?.[pkgName]\n );\n }\n case 'vue-query': {\n const pkgName = '@tanstack/vue-query';\n return (\n packageJson?.resolvedVersions?.[pkgName] ??\n packageJson?.dependencies?.[pkgName] ??\n packageJson?.devDependencies?.[pkgName] ??\n packageJson?.peerDependencies?.[pkgName]\n );\n }\n case 'angular-query': {\n const pkgName = '@tanstack/angular-query-experimental';\n return (\n packageJson?.resolvedVersions?.[pkgName] ??\n packageJson?.dependencies?.[pkgName] ??\n packageJson?.devDependencies?.[pkgName] ??\n packageJson?.peerDependencies?.[pkgName]\n );\n }\n case 'solid-query': {\n const pkgName = '@tanstack/solid-query';\n return (\n packageJson?.resolvedVersions?.[pkgName] ??\n packageJson?.dependencies?.[pkgName] ??\n packageJson?.devDependencies?.[pkgName] ??\n packageJson?.peerDependencies?.[pkgName]\n );\n }\n }\n};\n","import {\n type GeneratorMutator,\n type GetterParams,\n type GetterQueryParam,\n isObject,\n pascal,\n stringify,\n} from '@orval/core';\nimport { omitBy } from 'remeda';\n\nimport type { FrameworkAdapter } from './framework-adapter';\n\ntype QueryType = 'infiniteQuery' | 'query';\n\nexport const QueryType = {\n INFINITE: 'infiniteQuery' as QueryType,\n QUERY: 'query' as QueryType,\n SUSPENSE_QUERY: 'suspenseQuery' as QueryType,\n SUSPENSE_INFINITE: 'suspenseInfiniteQuery' as QueryType,\n};\n\nconst INFINITE_QUERY_PROPERTIES = new Set([\n 'getNextPageParam',\n 'getPreviousPageParam',\n]);\n\nexport const generateQueryOptions = ({\n params,\n options,\n type,\n adapter,\n}: {\n params: GetterParams;\n options?: object | boolean;\n type: QueryType;\n adapter?: FrameworkAdapter;\n}) => {\n if (options === false) {\n return '';\n }\n\n const queryConfig = isObject(options)\n ? ` ${stringify(\n omitBy(\n options,\n (_, key) =>\n type !== QueryType.INFINITE &&\n type !== QueryType.SUSPENSE_INFINITE &&\n INFINITE_QUERY_PROPERTIES.has(key),\n ),\n )?.slice(1, -1)}`\n : '';\n\n if (params.length === 0 || isSuspenseQuery(type)) {\n if (options) {\n return `${queryConfig} ...queryOptions`;\n }\n\n return '...queryOptions';\n }\n\n const enabledOption = adapter\n ? adapter.generateEnabledOption(params, options)\n : !isObject(options) || !Object.hasOwn(options, 'enabled')\n ? `enabled: ${params.map(({ name }) => `${name} != null`).join(' && ')},`\n : '';\n\n return `${enabledOption}${queryConfig} ...queryOptions`;\n};\n\nexport const isSuspenseQuery = (type: QueryType) => {\n return [QueryType.SUSPENSE_INFINITE, QueryType.SUSPENSE_QUERY].includes(type);\n};\n\nexport const getQueryOptionsDefinition = ({\n operationName,\n mutator,\n definitions,\n type,\n prefix,\n hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError,\n queryParams,\n queryParam,\n isReturnType,\n initialData,\n adapter,\n}: {\n operationName: string;\n mutator?: GeneratorMutator;\n definitions: string;\n type?: QueryType;\n /** 'Use' or 'Create' — from adapter.getQueryOptionsDefinitionPrefix() */\n prefix: string;\n hasQueryV5: boolean;\n hasQueryV5WithInfiniteQueryOptionsError: boolean;\n queryParams?: GetterQueryParam;\n queryParam?: string;\n isReturnType: boolean;\n initialData?: 'defined' | 'undefined';\n adapter?: FrameworkAdapter;\n}) => {\n const isMutatorHook = mutator?.isHook;\n const partialOptions = !isReturnType && hasQueryV5;\n\n if (type) {\n const funcReturnType = `Awaited<ReturnType<${\n isMutatorHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`\n }>>`;\n\n const optionTypeInitialDataPostfix =\n initialData && !isSuspenseQuery(type)\n ? ` & Pick<\n ${pascal(initialData)}InitialDataOptions<\n ${funcReturnType},\n TError,\n ${funcReturnType}${\n hasQueryV5 &&\n (type === QueryType.INFINITE ||\n type === QueryType.SUSPENSE_INFINITE) &&\n queryParam &&\n queryParams\n ? `, QueryKey`\n : ''\n }\n > , 'initialData'\n >`\n : '';\n\n // Use adapter's custom options type name for return types if available.\n // For the user-facing query param (isReturnType: false), keep the\n // prefix-based fallback — Solid Query intentionally emits its `Use*Options`\n // Accessor type there so the discriminator at the `useQuery` call site\n // (which only has `UndefinedInitialDataOptions` / `DefinedInitialDataOptions`\n // overloads) keeps working. See [issue #3365] for the mutation-side fix.\n const optionsTypeName =\n isReturnType && adapter?.getOptionsReturnTypeName\n ? adapter.getOptionsReturnTypeName(\n type === QueryType.INFINITE || type === QueryType.SUSPENSE_INFINITE\n ? 'infiniteQuery'\n : 'query',\n )\n : undefined;\n\n const optionType = optionsTypeName\n ? `${optionsTypeName}<${funcReturnType}, TError, TData${\n hasQueryV5 &&\n (type === QueryType.INFINITE ||\n type === QueryType.SUSPENSE_INFINITE) &&\n queryParam &&\n queryParams\n ? `, QueryKey, ${queryParams.schema.name}['${queryParam}']`\n : ''\n }>`\n : `${prefix}${pascal(type)}Options<${funcReturnType}, TError, TData${\n hasQueryV5 &&\n (type === QueryType.INFINITE ||\n type === QueryType.SUSPENSE_INFINITE) &&\n queryParam &&\n queryParams\n ? hasQueryV5WithInfiniteQueryOptionsError\n ? `, QueryKey, ${queryParams.schema.name}['${queryParam}']`\n : `, ${funcReturnType}, QueryKey, ${queryParams.schema.name}['${queryParam}']`\n : ''\n }>`;\n\n return `${partialOptions ? 'Partial<' : ''}${optionType}${\n partialOptions ? '>' : ''\n }${optionTypeInitialDataPostfix}`;\n }\n\n // Mutation options — use the adapter's plain-options type name for both\n // helper return type and user-facing `options.mutation` param (see comment\n // above for the Solid Query rationale).\n const mutationOptionsTypeName = adapter?.getOptionsReturnTypeName\n ? adapter.getOptionsReturnTypeName('mutation')\n : undefined;\n\n return mutationOptionsTypeName\n ? `${mutationOptionsTypeName}<Awaited<ReturnType<${\n isMutatorHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`\n }>>, TError,${definitions ? `{${definitions}}` : 'void'}, TContext>`\n : `${prefix}MutationOptions<Awaited<ReturnType<${\n isMutatorHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`\n }>>, TError,${definitions ? `{${definitions}}` : 'void'}, TContext>`;\n};\n","import {\n camel,\n type GeneratorMutator,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n type GetterProps,\n GetterPropType,\n OutputClient,\n type OutputHttpClient,\n toObjectString,\n} from '@orval/core';\n\nimport {\n generateAngularHttpRequestFunction,\n getQueryArgumentsRequestType,\n} from '../client';\nimport type {\n FrameworkAdapterConfig,\n MutationHookBodyContext,\n MutationReturnTypeContext,\n PrefetchContext,\n QueryInitContext,\n QueryInvocationContext,\n QueryReturnStatementContext,\n QueryReturnTypeContext,\n} from '../framework-adapter';\nimport { getQueryOptionsDefinition, QueryType } from '../query-options';\nimport { getQueryTypeForFramework } from '../utils';\n\nexport const createAngularAdapter = ({\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n}: {\n hasQueryV5: boolean;\n hasQueryV5WithDataTagError: boolean;\n hasQueryV5WithInfiniteQueryOptionsError: boolean;\n hasQueryV5WithMutationContextOnSuccess: boolean;\n hasQueryV5WithRequiredContextOnSuccess: boolean;\n}): FrameworkAdapterConfig => {\n const prefix = 'Create';\n\n return {\n outputClient: OutputClient.ANGULAR_QUERY,\n hookPrefix: 'inject',\n isAngularHttp: true,\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n\n getHookPropsDefinitions(props: GetterProps): string {\n // Angular: allow params to be a getter function for reactive signal support\n return toObjectString(\n props.map((prop) => {\n const getterType = prop.definition.replace(\n /^(\\w+)(\\??): (.+)$/,\n (\n _match: string,\n name: string,\n optional: string,\n type: string,\n ): string =>\n `${name}${optional}: ${type} | (() => ${type.replace(' | undefined', '')}${optional ? ' | undefined' : ''})`,\n );\n return { ...prop, definition: getterType };\n }),\n 'definition',\n );\n },\n\n getHttpFunctionQueryProps(\n queryProperties: string,\n _httpClient: OutputHttpClient,\n hasMutator: boolean,\n ): string {\n // Prefix with http since request functions take HttpClient as first param\n // Skip when custom mutator is used\n if (!hasMutator) {\n return queryProperties ? `http, ${queryProperties}` : 'http';\n }\n return queryProperties;\n },\n\n getInfiniteQueryHttpProps(\n props: GetterProps,\n queryParam: string,\n _httpClient: OutputHttpClient,\n hasMutator: boolean,\n ): string {\n let result = props\n .map((param) => {\n if (param.type === GetterPropType.NAMED_PATH_PARAMS)\n return param.destructured;\n return param.name === 'params'\n ? `{...params, '${queryParam}': pageParam ?? params?.['${queryParam}']}`\n : param.name;\n })\n .join(',');\n\n // Prefix with http for infinite queries\n // Skip when custom mutator is used\n if (!hasMutator) {\n result = result ? `http, ${result}` : 'http';\n }\n\n return result;\n },\n\n getHttpFirstParam(mutator?: GeneratorMutator): string {\n if (!mutator || mutator.hasSecondArg) {\n return 'http: HttpClient, ';\n }\n return '';\n },\n\n getMutationHttpPrefix(mutator?: GeneratorMutator): string {\n if (!mutator) {\n return 'http, ';\n }\n return '';\n },\n\n getQueryReturnType({ type }: QueryReturnTypeContext): string {\n if (type !== QueryType.INFINITE && type !== QueryType.SUSPENSE_INFINITE) {\n return `CreateQueryResult<TData, TError>`;\n }\n return `CreateInfiniteQueryResult<TData, TError>`;\n },\n\n getMutationReturnType({\n dataType,\n variableType,\n }: MutationReturnTypeContext): string {\n return `: CreateMutationResult<\n Awaited<ReturnType<${dataType}>>,\n TError,\n ${variableType},\n TContext\n >`;\n },\n\n getQueryReturnStatement({\n queryResultVarName,\n }: QueryReturnStatementContext): string {\n return `return ${queryResultVarName};`;\n },\n\n shouldAnnotateQueryKey(): boolean {\n // Angular skips DataTag annotation\n return false;\n },\n\n generateQueryInit({ mutator }: QueryInitContext): string {\n // Angular: inject HttpClient if needed, no queryOptions assignment\n if (!mutator || mutator.hasSecondArg) {\n return `const http = inject(HttpClient);`;\n }\n return '';\n },\n\n generateQueryInvocationArgs({\n props,\n queryOptionsFnName,\n isRequestOptions,\n mutator,\n }: QueryInvocationContext): string {\n // Angular: () => { resolve getters; return options(http, ...); }\n return `() => {${\n props.length > 0\n ? `\n // Resolve params if getter function (for signal reactivity)\n ${props.map((p) => `const _${p.name} = typeof ${p.name} === 'function' ? ${p.name}() : ${p.name};`).join('\\n ')}`\n : ''\n }\n // Resolve options if getter function (for signal reactivity)\n const _options = typeof ${isRequestOptions ? 'options' : 'queryOptions'} === 'function' ? ${isRequestOptions ? 'options' : 'queryOptions'}() : ${isRequestOptions ? 'options' : 'queryOptions'};\n return ${queryOptionsFnName}(${!mutator || mutator.hasSecondArg ? 'http' : ''}${props.length > 0 ? `${!mutator || mutator.hasSecondArg ? ', ' : ''}${props.map((p) => `_${p.name}`).join(', ')}` : ''}, _options);\n }`;\n },\n\n getOptionalQueryClientArgument(): string {\n // Angular never has optional queryClient argument (it injects it)\n return '';\n },\n\n getQueryOptionsDefinitionPrefix(): string {\n return prefix;\n },\n\n generateQueryArguments({\n operationName,\n definitions,\n mutator,\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n initialData,\n httpClient,\n forQueryOptions = false,\n hasInvalidation,\n useRuntimeFetcher,\n }): string {\n const definition = getQueryOptionsDefinition({\n operationName,\n mutator,\n definitions,\n type,\n prefix,\n hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError,\n queryParams,\n queryParam,\n isReturnType: false,\n initialData,\n });\n\n if (!isRequestOptions) {\n return `${type ? 'queryOptions' : 'mutationOptions'}${\n initialData === 'defined' ? '' : '?'\n }: ${definition}`;\n }\n\n const requestType = getQueryArgumentsRequestType(\n httpClient,\n mutator,\n useRuntimeFetcher,\n );\n const isQueryRequired = initialData === 'defined';\n const skipInvalidationProp =\n !type && hasInvalidation ? 'skipInvalidation?: boolean, ' : '';\n const optionsType = `{ ${\n type ? 'query' : 'mutation'\n }${isQueryRequired ? '' : '?'}:${definition}, ${skipInvalidationProp}${requestType}}`;\n\n // For Angular inject* functions (query hooks, not queryOptions or mutations),\n // allow options to be a getter for reactivity.\n // Inject style applies when type is defined (it's a query hook) and not forQueryOptions.\n const forAngularInject = type !== undefined && !forQueryOptions;\n if (forAngularInject) {\n return `options${isQueryRequired ? '' : '?'}: ${optionsType} | (() => ${optionsType})\\n`;\n }\n\n return `options${isQueryRequired ? '' : '?'}: ${optionsType}\\n`;\n },\n\n generateMutationImplementation({\n mutationOptionsFnName,\n hasInvalidation,\n isRequestOptions,\n }): string {\n return `${mutationOptionsFnName}(${hasInvalidation ? `queryClient, ` : ''}${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n },\n\n supportsMutationInvalidation(): boolean {\n return true;\n },\n\n generateMutationHookBody({\n operationPrefix,\n mutationOptionsFnName,\n mutationOptionsVarName,\n isRequestOptions,\n mutator,\n hasInvalidation,\n }: MutationHookBodyContext): string {\n if (!mutator || mutator.hasSecondArg) {\n return ` const http = inject(HttpClient);${hasInvalidation ? '\\n const queryClient = inject(QueryClient);' : ''}\n const ${mutationOptionsVarName} = ${mutationOptionsFnName}(http${hasInvalidation ? ', queryClient' : ''}${isRequestOptions ? ', options' : ', mutationOptions'});\n\n return ${operationPrefix}Mutation(() => ${mutationOptionsVarName});`;\n }\n\n const mutationImpl = `${mutationOptionsFnName}(${hasInvalidation ? `queryClient, ` : ''}${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n return ` const ${mutationOptionsVarName} = ${mutationImpl};\n\n return ${operationPrefix}Mutation(() => ${mutationOptionsVarName});`;\n },\n\n getQueryType(type: string): string {\n return getQueryTypeForFramework(type);\n },\n\n generateRequestFunction(\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n ): string {\n return generateAngularHttpRequestFunction(verbOptions, options);\n },\n\n generatePrefetch({\n usePrefetch,\n type,\n useQuery,\n useInfinite,\n operationName,\n mutator,\n doc,\n queryProps,\n dataType,\n errorType,\n queryArguments,\n queryOptionsVarName,\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n }: PrefetchContext): string {\n const shouldGeneratePrefetch =\n usePrefetch &&\n (type === QueryType.QUERY ||\n type === QueryType.INFINITE ||\n (type === QueryType.SUSPENSE_QUERY && !useQuery) ||\n (type === QueryType.SUSPENSE_INFINITE && !useInfinite));\n\n if (!shouldGeneratePrefetch) {\n return '';\n }\n\n const prefetchType =\n type === QueryType.QUERY || type === QueryType.SUSPENSE_QUERY\n ? 'query'\n : 'infinite-query';\n const prefetchFnName = camel(`prefetch-${prefetchType}`);\n const prefetchVarName = camel(\n `prefetch-${operationName}-${prefetchType}`,\n );\n\n // Angular: plain async function with http param (no React hooks like useQueryClient/useCallback)\n const httpParam =\n !mutator || mutator.hasSecondArg ? 'http: HttpClient, ' : '';\n return `${doc}export const ${prefetchVarName} = async <TData = Awaited<ReturnType<${dataType}>>, TError = ${errorType}>(\\n queryClient: QueryClient, ${httpParam}${queryProps} ${queryArguments}\\n ): Promise<QueryClient> => {\n\n const ${queryOptionsVarName} = ${queryOptionsFnName}(${!mutator || mutator.hasSecondArg ? 'http, ' : ''}${queryProperties}${\n queryProperties ? ',' : ''\n }${isRequestOptions ? 'options' : 'queryOptions'})\n\n if (${queryOptionsVarName}.enabled === false) {\n return queryClient;\n }\n\n await queryClient.${prefetchFnName}(${queryOptionsVarName});\n\n return queryClient;\n}\\n`;\n },\n };\n};\n","import { OutputClient, pascal } from '@orval/core';\n\nimport type {\n FrameworkAdapterConfig,\n MutationHookBodyContext,\n MutationReturnTypeContext,\n QueryReturnStatementContext,\n QueryReturnTypeContext,\n} from '../framework-adapter';\nimport { isSuspenseQuery } from '../query-options';\n\nexport const createReactAdapter = ({\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n}: {\n hasQueryV5: boolean;\n hasQueryV5WithDataTagError: boolean;\n hasQueryV5WithInfiniteQueryOptionsError: boolean;\n hasQueryV5WithMutationContextOnSuccess: boolean;\n hasQueryV5WithRequiredContextOnSuccess: boolean;\n}): FrameworkAdapterConfig => ({\n outputClient: OutputClient.REACT_QUERY,\n hookPrefix: 'use',\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n\n getQueryReturnType({\n type,\n isInitialDataDefined,\n }: QueryReturnTypeContext): string {\n return ` ${\n isInitialDataDefined && !isSuspenseQuery(type) ? 'Defined' : ''\n }Use${pascal(type)}Result<TData, TError> & { queryKey: ${hasQueryV5 ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>` : 'QueryKey'} }`;\n },\n\n getMutationReturnType({\n dataType,\n variableType,\n }: MutationReturnTypeContext): string {\n return `: UseMutationResult<\n Awaited<ReturnType<${dataType}>>,\n TError,\n ${variableType},\n TContext\n >`;\n },\n\n getQueryReturnStatement({\n queryResultVarName,\n queryOptionsVarName,\n }: QueryReturnStatementContext): string {\n // Spreading the tracked query result reads every field, subscribing the\n // consumer to all of them and defeating React Query v5's per-property\n // render optimization (it also trips @tanstack/query/no-rest-destructuring).\n // withQueryKey re-exposes the fields as lazy getters so tracking is\n // preserved, without mutating the hook result (react-compiler safe). The\n // helper is emitted once per file by generateQueryHeader. See #3573.\n return `return withQueryKey(${queryResultVarName}, ${queryOptionsVarName}.queryKey);`;\n },\n\n shouldGenerateOverrideTypes(): boolean {\n return hasQueryV5;\n },\n\n generateMutationImplementation({\n mutationOptionsFnName,\n hasInvalidation,\n isRequestOptions,\n }): string {\n return `${mutationOptionsFnName}(${hasInvalidation ? `queryClient ?? backupQueryClient, ` : ''}${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n },\n\n supportsMutationInvalidation(): boolean {\n return true;\n },\n\n generateMutationHookBody({\n operationPrefix,\n mutationImplementation,\n hasInvalidation,\n optionalQueryClientArgument,\n }: MutationHookBodyContext): string {\n return ` ${hasInvalidation ? `const backupQueryClient = useQueryClient();\\n ` : ''}return ${operationPrefix}Mutation(${mutationImplementation}${optionalQueryClientArgument ? `, queryClient` : ''});`;\n },\n});\n","import { OutputClient } from '@orval/core';\n\nimport type {\n FrameworkAdapterConfig,\n MutationHookBodyContext,\n MutationReturnTypeContext,\n QueryInvocationContext,\n QueryReturnStatementContext,\n QueryReturnTypeContext,\n} from '../framework-adapter';\nimport { QueryType } from '../query-options';\n\nexport const createSolidAdapter = ({\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n hasSolidQueryUsePrefix,\n hasSolidQueryRenamedOptionsTypes,\n}: {\n hasQueryV5: boolean;\n hasQueryV5WithDataTagError: boolean;\n hasQueryV5WithInfiniteQueryOptionsError: boolean;\n hasQueryV5WithMutationContextOnSuccess: boolean;\n hasQueryV5WithRequiredContextOnSuccess: boolean;\n hasSolidQueryUsePrefix: boolean;\n hasSolidQueryRenamedOptionsTypes: boolean;\n}): FrameworkAdapterConfig => ({\n outputClient: OutputClient.SOLID_QUERY,\n hookPrefix: hasSolidQueryUsePrefix ? 'use' : 'create',\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n\n getQueryOptionsDefinitionPrefix(): string {\n return hasSolidQueryUsePrefix ? 'Use' : 'Create';\n },\n\n getOptionsReturnTypeName(\n type: 'query' | 'infiniteQuery' | 'mutation',\n ): string | undefined {\n // Solid Query exposes plain (non-Accessor) options interfaces. The\n // Accessor-wrapped `Use*Options` / `Create*Options` variants cannot be\n // used here because the generated code passes options as a plain object\n // (`{ ...options.mutation }`) before the call site wraps the whole result\n // in an accessor (`useMutation(() => mutationOptions(...))`).\n //\n // v5.100.6 renamed these interfaces to drop the `Solid` prefix.\n if (type === 'mutation') {\n return hasSolidQueryRenamedOptionsTypes\n ? 'MutationOptions'\n : 'SolidMutationOptions';\n }\n if (type === 'infiniteQuery') {\n return hasSolidQueryRenamedOptionsTypes\n ? 'InfiniteQueryOptions'\n : 'SolidInfiniteQueryOptions';\n }\n return hasSolidQueryRenamedOptionsTypes\n ? 'QueryOptions'\n : 'SolidQueryOptions';\n },\n\n getQueryKeyPrefix(): string {\n // Solid Query v5 doesn't support accessing queryKey from queryOptions\n // The queryKey must be generated directly from the params\n return '';\n },\n\n shouldAnnotateQueryKey(): boolean {\n // Solid Query works with accessor functions\n // The queryKey is accessed from within the accessor, not annotated on the return type\n return false;\n },\n\n shouldCastQueryResult(): boolean {\n // Solid Query should not cast the query result because it breaks TypeScript's\n // ability to discriminate between overloads based on initialData\n return false;\n },\n\n shouldCastQueryOptions(): boolean {\n // Solid Query should not cast the query options return type because it prevents\n // TypeScript from properly discriminating between defined and undefined initialData\n return false;\n },\n\n getQueryReturnType({ type }: QueryReturnTypeContext): string {\n const prefix = hasSolidQueryUsePrefix ? 'Use' : 'Create';\n const queryKeyType = hasQueryV5\n ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>`\n : 'QueryKey';\n\n if (type !== QueryType.INFINITE && type !== QueryType.SUSPENSE_INFINITE) {\n return `${prefix}QueryResult<TData, TError> & { queryKey: ${queryKeyType} }`;\n }\n return `${prefix}InfiniteQueryResult<TData, TError> & { queryKey: ${queryKeyType} }`;\n },\n\n getMutationReturnType({\n dataType,\n variableType,\n }: MutationReturnTypeContext): string {\n const prefix = hasSolidQueryUsePrefix ? 'Use' : 'Create';\n return `: ${prefix}MutationResult<\n Awaited<ReturnType<${dataType}>>,\n TError,\n ${variableType},\n TContext\n >`;\n },\n\n getQueryReturnStatement({\n queryResultVarName,\n queryOptionsVarName,\n }: QueryReturnStatementContext): string {\n // Attach queryKey without mutating the Solid Store. The query result is a\n // read-only store, so `Object.assign` hits its `set` trap: in dev it warns\n // \"Cannot mutate a Store directly\", and in every build the assignment is a\n // no-op (queryKey is never actually attached). `mergeProps` is Solid's\n // first-party way to compose a new accessor object via getters, so the\n // queryKey is exposed while the underlying store stays untouched and\n // reactive. The `as any` cast is required because mergeProps infers a\n // concrete result type that TS cannot prove assignable to the generic\n // `…Result<TData, TError>`; the caller-facing type comes from the hook's\n // explicit return-type annotation. See #3347.\n return `return mergeProps(${queryResultVarName}, { queryKey: ${queryOptionsVarName}.queryKey }) as any;`;\n },\n\n generateQueryInvocationArgs({\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n optionalQueryClientArgument,\n }: QueryInvocationContext): string {\n // Solid Query requires options to be wrapped in an arrow function for reactivity\n const optionsArg = isRequestOptions ? 'options' : 'queryOptions';\n const args = queryProperties\n ? `${queryProperties},${optionsArg}`\n : optionsArg;\n return `() => ${queryOptionsFnName}(${args})${optionalQueryClientArgument ? ', queryClient' : ''}`;\n },\n\n generateMutationImplementation({\n mutationOptionsFnName,\n isRequestOptions,\n }): string {\n return `${mutationOptionsFnName}(${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n },\n\n supportsMutationInvalidation(): boolean {\n // Solid is NOT in the list of frameworks supporting mutation invalidation\n return false;\n },\n\n generateMutationOnSuccess(): string {\n return '';\n },\n\n generateMutationHookBody({\n operationPrefix,\n mutationImplementation,\n optionalQueryClientArgument,\n }: MutationHookBodyContext): string {\n // Solid Query mutations also need to be wrapped in accessor functions\n return ` return ${operationPrefix}Mutation(() => ${mutationImplementation}${optionalQueryClientArgument ? `, queryClient` : ''});`;\n },\n\n getOptionalQueryClientArgument(): string {\n // Solid Query expects queryClient to be an Accessor: () => QueryClient\n return ', queryClient?: () => QueryClient';\n },\n});\n","import {\n type GetterProps,\n OutputClient,\n pascal,\n toObjectString,\n} from '@orval/core';\n\nimport { getQueryArgumentsRequestType } from '../client';\nimport type {\n FrameworkAdapterConfig,\n MutationHookBodyContext,\n MutationReturnTypeContext,\n QueryInitContext,\n QueryInvocationContext,\n QueryReturnStatementContext,\n QueryReturnTypeContext,\n} from '../framework-adapter';\nimport { getQueryOptionsDefinition } from '../query-options';\nimport { getQueryTypeForFramework } from '../utils';\n\nexport const createSvelteAdapter = ({\n hasSvelteQueryV4,\n hasSvelteQueryV6,\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n}: {\n hasSvelteQueryV4: boolean;\n hasSvelteQueryV6: boolean;\n hasQueryV5: boolean;\n hasQueryV5WithDataTagError: boolean;\n hasQueryV5WithInfiniteQueryOptionsError: boolean;\n hasQueryV5WithMutationContextOnSuccess: boolean;\n hasQueryV5WithRequiredContextOnSuccess: boolean;\n}): FrameworkAdapterConfig => {\n const prefix = hasSvelteQueryV4 ? 'Create' : 'Use';\n\n return {\n outputClient: OutputClient.SVELTE_QUERY,\n hookPrefix: hasSvelteQueryV4 ? 'create' : 'use',\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n\n getHookPropsDefinitions(props: GetterProps): string {\n if (hasSvelteQueryV6) {\n return toObjectString(\n props.map((p) => ({\n ...p,\n definition: p.definition.replace(':', ': () => '),\n })),\n 'definition',\n );\n }\n return toObjectString(props, 'implementation');\n },\n\n getQueryReturnType({\n type,\n isMutatorHook,\n operationName,\n }: QueryReturnTypeContext): string {\n if (!hasSvelteQueryV4) {\n return `Use${pascal(type)}StoreResult<Awaited<ReturnType<${\n isMutatorHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`\n }>>, TError, TData, QueryKey> & { queryKey: QueryKey }`;\n }\n\n return `Create${pascal(\n type,\n )}Result<TData, TError> & { queryKey: ${hasQueryV5 ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>` : 'QueryKey'} }`;\n },\n\n getMutationReturnType({\n dataType,\n variableType,\n }: MutationReturnTypeContext): string {\n return `: CreateMutationResult<\n Awaited<ReturnType<${dataType}>>,\n TError,\n ${variableType},\n TContext\n >`;\n },\n\n getQueryReturnStatement({\n queryResultVarName,\n queryOptionsVarName,\n }: QueryReturnStatementContext): string {\n if (hasSvelteQueryV6) {\n return `return ${queryResultVarName}`;\n }\n if (hasSvelteQueryV4) {\n return `${queryResultVarName}.queryKey = ${queryOptionsVarName}.queryKey;\n\n return ${queryResultVarName};`;\n }\n // Svelte v3 - same as default\n return `return { ...${queryResultVarName}, queryKey: ${queryOptionsVarName}.queryKey };`;\n },\n\n generateQueryInit({\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n }: QueryInitContext): string {\n if (hasSvelteQueryV6) {\n return '';\n }\n const queryOptionsVarName = isRequestOptions ? 'queryOptions' : 'options';\n return `const ${queryOptionsVarName} = ${queryOptionsFnName}(${queryProperties}${\n queryProperties ? ',' : ''\n }${isRequestOptions ? 'options' : 'queryOptions'})`;\n },\n\n generateQueryInvocationArgs({\n props,\n queryOptionsFnName,\n isRequestOptions,\n queryOptionsVarName,\n optionalQueryClientArgument,\n }: QueryInvocationContext): string {\n if (hasSvelteQueryV6) {\n return `() => ${queryOptionsFnName}(${toObjectString(\n props.map((p) => ({\n ...p,\n name: p.default || !p.required ? `${p.name}?.()` : `${p.name}()`,\n })),\n 'name',\n )}${isRequestOptions ? 'options?.()' : 'queryOptions?.()'})`;\n }\n return `${queryOptionsVarName}${optionalQueryClientArgument ? ', queryClient' : ''}`;\n },\n\n getQueryInvocationSuffix(): string {\n return hasSvelteQueryV6 ? `, queryClient` : '';\n },\n\n getOptionalQueryClientArgument(hasInvalidation?: boolean): string {\n if (hasSvelteQueryV6) {\n return `, queryClient?: () => QueryClient`;\n }\n if (hasQueryV5 || hasInvalidation) {\n return ', queryClient?: QueryClient';\n }\n return '';\n },\n\n getQueryOptionsDefinitionPrefix(): string {\n return prefix;\n },\n\n generateQueryArguments({\n operationName,\n definitions,\n mutator,\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n initialData,\n httpClient,\n forQueryOptions = false,\n hasInvalidation,\n useRuntimeFetcher,\n }): string {\n const definition = getQueryOptionsDefinition({\n operationName,\n mutator,\n definitions,\n type,\n prefix,\n hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError,\n queryParams,\n queryParam,\n isReturnType: false,\n initialData,\n });\n\n if (!isRequestOptions) {\n return `${type ? 'queryOptions' : 'mutationOptions'}${\n initialData === 'defined' ? '' : '?'\n }: ${definition}`;\n }\n\n const requestType = getQueryArgumentsRequestType(\n httpClient,\n mutator,\n useRuntimeFetcher,\n );\n const isQueryRequired = initialData === 'defined';\n const skipInvalidationProp =\n !type && hasInvalidation ? 'skipInvalidation?: boolean, ' : '';\n const optionsType = `{ ${\n type ? 'query' : 'mutation'\n }${isQueryRequired ? '' : '?'}:${definition}, ${skipInvalidationProp}${requestType}}`;\n\n return `options${isQueryRequired ? '' : '?'}: ${hasSvelteQueryV6 && !forQueryOptions ? '() => ' : ''}${optionsType}\\n`;\n },\n\n generateMutationImplementation({\n mutationOptionsFnName,\n hasInvalidation,\n isRequestOptions,\n }): string {\n if (hasSvelteQueryV6) {\n return `${mutationOptionsFnName}(${hasInvalidation ? `backupQueryClient, ` : ''}${\n isRequestOptions ? 'options' : 'mutationOptions'\n }?.())`;\n }\n return `${mutationOptionsFnName}(${hasInvalidation ? `queryClient ?? backupQueryClient, ` : ''}${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n },\n\n supportsMutationInvalidation(): boolean {\n return true;\n },\n\n generateMutationHookBody({\n operationPrefix,\n mutationImplementation,\n hasInvalidation,\n optionalQueryClientArgument,\n }: MutationHookBodyContext): string {\n if (hasSvelteQueryV6) {\n return ` ${hasInvalidation ? `const backupQueryClient = useQueryClient(${optionalQueryClientArgument ? 'queryClient?.()' : ''});\\n ` : ''}return ${operationPrefix}Mutation(() => ({ ...${mutationImplementation} })${optionalQueryClientArgument ? `, queryClient` : ''});`;\n }\n // Svelte v4/v5\n return ` ${hasInvalidation ? `const backupQueryClient = useQueryClient();\\n ` : ''}return ${operationPrefix}Mutation(${mutationImplementation});`;\n },\n\n getQueryType(type: string): string {\n if (hasSvelteQueryV4) {\n return getQueryTypeForFramework(type);\n }\n return type;\n },\n };\n};\n","import {\n getRouteAsArray,\n type GetterParams,\n type GetterProp,\n type GetterProps,\n GetterPropType,\n isObject,\n OutputClient,\n OutputHttpClient,\n pascal,\n} from '@orval/core';\n\nimport type {\n FrameworkAdapterConfig,\n MutationHookBodyContext,\n MutationOnSuccessContext,\n MutationReturnTypeContext,\n QueryReturnStatementContext,\n QueryReturnTypeContext,\n} from '../framework-adapter';\nimport { QueryType } from '../query-options';\n\n/**\n * Vue Query v5 requires Vue 3.3+, where `MaybeRefOrGetter<T>` (a superset of\n * `MaybeRef<T>` that also accepts `() => T` getters) and `toValue()` exist.\n * The wrapper type and resolver must always move together: pairing\n * `MaybeRefOrGetter` with `unref` (which cannot resolve a getter) would\n * silently break reactive params.\n */\ninterface VueReactivity {\n wrapper: 'MaybeRef' | 'MaybeRefOrGetter';\n resolve: 'unref' | 'toValue';\n}\n\nconst getVueReactivity = (hasQueryV5: boolean): VueReactivity =>\n hasQueryV5\n ? { wrapper: 'MaybeRefOrGetter', resolve: 'toValue' }\n : { wrapper: 'MaybeRef', resolve: 'unref' };\n\nfunction vueWrapTypeWithMaybeRef(\n props: GetterProps,\n hasQueryV5: boolean,\n): GetterProps {\n const { wrapper } = getVueReactivity(hasQueryV5);\n return props.map((prop) => {\n const [paramName, paramType] = prop.implementation.split(':');\n if (!paramType) return prop;\n const name =\n prop.type === GetterPropType.NAMED_PATH_PARAMS ? prop.name : paramName;\n\n const [type, defaultValue] = paramType.split('=');\n return {\n ...prop,\n implementation: `${name}: ${wrapper}<${type.trim()}>${\n defaultValue ? ` = ${defaultValue}` : ''\n }`,\n };\n });\n}\n\nconst vueUnRefParams = (props: GetterProps, hasQueryV5: boolean): string => {\n const { resolve } = getVueReactivity(hasQueryV5);\n return props\n .map((prop) => {\n if (prop.type === GetterPropType.NAMED_PATH_PARAMS) {\n return `const ${prop.destructured} = ${resolve}(${prop.name});`;\n }\n return `${prop.name} = ${resolve}(${prop.name});`;\n })\n .join('\\n');\n};\n\nexport const createVueAdapter = ({\n hasVueQueryV4,\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n}: {\n hasVueQueryV4: boolean;\n hasQueryV5: boolean;\n hasQueryV5WithDataTagError: boolean;\n hasQueryV5WithInfiniteQueryOptionsError: boolean;\n hasQueryV5WithMutationContextOnSuccess: boolean;\n hasQueryV5WithRequiredContextOnSuccess: boolean;\n}): FrameworkAdapterConfig => ({\n outputClient: OutputClient.VUE_QUERY,\n hookPrefix: 'use',\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess,\n\n transformProps(props: GetterProps): GetterProps {\n return vueWrapTypeWithMaybeRef(props, hasQueryV5);\n },\n\n shouldDestructureNamedPathParams(): boolean {\n // Vue keeps param.name for named path params (doesn't destructure)\n return false;\n },\n\n getHttpFunctionQueryProps(\n queryProperties: string,\n httpClient: OutputHttpClient,\n ): string {\n // Vue with fetch: resolve each prop (toValue on v5 to support getters)\n if (httpClient === OutputHttpClient.FETCH && queryProperties) {\n const { resolve } = getVueReactivity(hasQueryV5);\n return queryProperties\n .split(',')\n .map((prop) => `${resolve}(${prop})`)\n .join(',');\n }\n return queryProperties;\n },\n\n getInfiniteQueryHttpProps(\n props: GetterProps,\n queryParam: string,\n httpClient: OutputHttpClient,\n ): string {\n const { resolve } = getVueReactivity(hasQueryV5);\n return props\n .map((param) => {\n // Vue does NOT destructure named path params (keeps param.name)\n if (param.name === 'params') {\n return `{...${resolve}(params), '${queryParam}': pageParam ?? ${resolve}(params)?.['${queryParam}']}`;\n }\n\n // Fetch-style request functions accept plain values, but axios-style\n // accept MaybeRef(OrGetter)<T> so they unwrap the values internally.\n return httpClient === OutputHttpClient.FETCH\n ? `${resolve}(${param.name})`\n : param.name;\n })\n .join(',');\n },\n\n getQueryReturnType({ type }: QueryReturnTypeContext): string {\n if (!hasVueQueryV4) {\n return ` UseQueryReturnType<TData, TError, Use${pascal(\n type,\n )}Result<TData, TError>> & { queryKey: QueryKey }`;\n }\n\n if (type !== QueryType.INFINITE && type !== QueryType.SUSPENSE_INFINITE) {\n return `UseQueryReturnType<TData, TError> & { queryKey: ${hasQueryV5 ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>` : 'QueryKey'} }`;\n }\n\n return `UseInfiniteQueryReturnType<TData, TError> & { queryKey: ${hasQueryV5 ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>` : 'QueryKey'} }`;\n },\n\n getMutationReturnType({\n dataType,\n variableType,\n }: MutationReturnTypeContext): string {\n return `: UseMutationReturnType<\n Awaited<ReturnType<${dataType}>>,\n TError,\n ${variableType},\n TContext\n >`;\n },\n\n getQueryReturnStatement({\n queryResultVarName,\n queryOptionsVarName,\n }: QueryReturnStatementContext): string {\n const queryKeyType = hasQueryV5\n ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>`\n : 'QueryKey';\n // `unref`, not the v5 `resolve`: this runs on both v4 and v5, and the query\n // options object is a plain ref (never a getter), so `unref` is sufficient\n // and stays valid on Vue < 3.3 where `toValue` doesn't exist.\n return `${queryResultVarName}.queryKey = unref(${queryOptionsVarName}).queryKey as ${queryKeyType};\n\n return ${queryResultVarName};`;\n },\n\n getQueryKeyRouteString(route: string): string {\n // Vue always uses getRouteAsArray for reactivity\n return getRouteAsArray(route);\n },\n\n shouldAnnotateQueryKey(): boolean {\n // Vue skips DataTag annotation\n return false;\n },\n\n getRequestUnrefStatements(props: GetterProps): string {\n return vueUnRefParams(props, hasQueryV5);\n },\n\n getQueryOptionsUnrefStatements(props: GetterProps): string {\n return vueUnRefParams(\n props.filter((prop) => prop.type === GetterPropType.NAMED_PATH_PARAMS),\n hasQueryV5,\n );\n },\n\n wrapHookMutatorCallback(callback: string): string {\n // Vue does not wrap the hook mutator callback with useCallback.\n return callback;\n },\n\n generateEnabledOption(\n params: GetterParams,\n options?: object | boolean,\n ): string {\n if (params.length === 0) return '';\n if (!isObject(options) || !Object.hasOwn(options, 'enabled')) {\n const { resolve } = getVueReactivity(hasQueryV5);\n return `enabled: computed(() => ${params\n .map(\n ({ name }) =>\n `${resolve}(${name}) !== null && ${resolve}(${name}) !== undefined`,\n )\n .join(' && ')}),`;\n }\n return '';\n },\n\n getQueryKeyPrefix(): string {\n return hasVueQueryV4 ? '' : 'queryOptions?.queryKey ?? ';\n },\n\n generateMutationImplementation({\n mutationOptionsFnName,\n hasInvalidation,\n isRequestOptions,\n }): string {\n return `${mutationOptionsFnName}(${hasInvalidation ? `queryClient ?? backupQueryClient, ` : ''}${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n },\n\n supportsMutationInvalidation(): boolean {\n return hasQueryV5;\n },\n\n generateMutationOnSuccess({\n operationName,\n definitions,\n isRequestOptions,\n generateInvalidateCall,\n uniqueInvalidates,\n }: MutationOnSuccessContext): string {\n // The `unref` calls below resolve user-supplied mutation options (a ref,\n // never a getter), so `unref` is correct here and on Vue < 3.3 — unlike the\n // request params, these are not wrapped in `MaybeRefOrGetter`.\n const invalidateCalls = uniqueInvalidates\n .map((t) => generateInvalidateCall(t))\n .join('\\n');\n if (hasQueryV5WithMutationContextOnSuccess) {\n if (isRequestOptions) {\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, onMutateResult: TContext, context: MutationFunctionContext) => {\n if (!options?.skipInvalidation) {\n ${invalidateCalls}\n }\n unref(unref(typeof mutationOptions === 'function' ? mutationOptions() : mutationOptions)?.onSuccess)?.(data, variables, onMutateResult, context);\n };`;\n }\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, onMutateResult: TContext, context: MutationFunctionContext) => {\n ${invalidateCalls}\n unref(unref(typeof mutationOptions === 'function' ? mutationOptions() : mutationOptions)?.onSuccess)?.(data, variables, onMutateResult, context);\n };`;\n }\n if (isRequestOptions) {\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, context: TContext${hasQueryV5WithRequiredContextOnSuccess ? '' : ' | undefined'}) => {\n if (!options?.skipInvalidation) {\n ${invalidateCalls}\n }\n unref(unref(typeof mutationOptions === 'function' ? mutationOptions() : mutationOptions)?.onSuccess)?.(data, variables, context);\n };`;\n }\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, context: TContext${hasQueryV5WithRequiredContextOnSuccess ? '' : ' | undefined'}) => {\n ${invalidateCalls}\n unref(unref(typeof mutationOptions === 'function' ? mutationOptions() : mutationOptions)?.onSuccess)?.(data, variables, context);\n };`;\n },\n\n generateMutationHookBody({\n operationPrefix,\n mutationImplementation,\n hasInvalidation,\n optionalQueryClientArgument,\n }: MutationHookBodyContext): string {\n return ` ${hasInvalidation ? `const backupQueryClient = useQueryClient();\\n ` : ''}return ${operationPrefix}Mutation(${mutationImplementation}${optionalQueryClientArgument ? `, queryClient` : ''});`;\n },\n\n getQueryPropertyForProp(\n prop: GetterProp,\n body: { implementation: string },\n ): string {\n // Vue does NOT destructure named path params (keeps param.name for reactivity)\n return prop.type === GetterPropType.BODY ? body.implementation : prop.name;\n },\n});\n","import {\n getRouteAsArray,\n type GetterProp,\n type GetterProps,\n GetterPropType,\n isObject,\n type OutputClient,\n OutputClient as OutputClientConst,\n type OutputClientFunc,\n OutputHttpClient,\n type PackageJson,\n toObjectString,\n} from '@orval/core';\nimport { generateRequestFunction as generateFetchRequestFunction } from '@orval/fetch';\n\nimport {\n generateAxiosRequestFunction,\n getQueryArgumentsRequestType,\n} from '../client';\nimport {\n isQueryV5,\n isQueryV5WithDataTagError,\n isQueryV5WithInfiniteQueryOptionsError,\n isQueryV5WithMutationContextOnSuccess,\n isQueryV5WithRequiredContextOnSuccess,\n isSolidQueryWithRenamedOptionsTypes,\n isSolidQueryWithUsePrefix,\n isSvelteQueryV3,\n isSvelteQueryV6,\n isVueQueryV3,\n} from '../dependencies';\nimport type {\n FrameworkAdapter,\n FrameworkAdapterConfig,\n MutationOnSuccessContext,\n} from '../framework-adapter';\nimport { getQueryOptionsDefinition } from '../query-options';\nimport { createAngularAdapter } from './angular';\nimport { createReactAdapter } from './react';\nimport { createSolidAdapter } from './solid';\nimport { createSvelteAdapter } from './svelte';\nimport { createVueAdapter } from './vue';\n\n/** Fill in defaults for fields that most adapters leave empty or share a common implementation. */\nconst withDefaults = (adapter: FrameworkAdapterConfig): FrameworkAdapter => {\n // `composed` is the fully-built adapter (defaults + overrides). Defaults that\n // need sibling fields close over it instead of using `this`, so they stay\n // correct even if a method is destructured off the adapter.\n const composed: FrameworkAdapter = {\n // --- Original defaults (false / empty string) ---\n isAngularHttp: false,\n getHttpFirstParam: () => '',\n getMutationHttpPrefix: () => '',\n getRequestUnrefStatements: () => '',\n getQueryOptionsUnrefStatements: () => '',\n wrapHookMutatorCallback: (callback, operationName) =>\n `useCallback(${callback}, [${operationName}])`,\n getQueryInvocationSuffix: () => '',\n\n // --- Identity / pass-through defaults ---\n transformProps: (props) => props,\n getHttpFunctionQueryProps: (qp) => qp,\n getQueryType: (type) => type,\n\n // --- Boolean defaults ---\n shouldDestructureNamedPathParams: () => true,\n shouldAnnotateQueryKey: () => true,\n shouldGenerateOverrideTypes: () => false,\n shouldCastQueryResult: () => true,\n shouldCastQueryOptions: () => true,\n\n // --- String defaults ---\n getQueryKeyPrefix: () => 'queryOptions?.queryKey ?? ',\n getQueryOptionsDefinitionPrefix: () => 'Use',\n\n // --- Common implementation defaults ---\n getHookPropsDefinitions: (props) => toObjectString(props, 'implementation'),\n\n getQueryKeyRouteString(route, shouldSplitQueryKey) {\n if (shouldSplitQueryKey) {\n return getRouteAsArray(route);\n }\n return `\\`${route}\\``;\n },\n\n generateEnabledOption(params, options) {\n if (params.length === 0) return '';\n if (!isObject(options) || !Object.hasOwn(options, 'enabled')) {\n return `enabled: ${params\n .map(({ name }) => `${name} !== null && ${name} !== undefined`)\n .join(' && ')},`;\n }\n return '';\n },\n\n getQueryPropertyForProp(\n prop: GetterProp,\n body: { implementation: string },\n ) {\n if (prop.type === GetterPropType.NAMED_PATH_PARAMS)\n return prop.destructured;\n return prop.type === GetterPropType.BODY\n ? body.implementation\n : prop.name;\n },\n\n generateRequestFunction(verbOptions, options) {\n return options.context.output.httpClient === OutputHttpClient.AXIOS\n ? generateAxiosRequestFunction(verbOptions, options, composed)\n : generateFetchRequestFunction(verbOptions, options);\n },\n\n getInfiniteQueryHttpProps(props: GetterProps, queryParam: string) {\n return props\n .map((param) => {\n if (param.type === GetterPropType.NAMED_PATH_PARAMS)\n return param.destructured;\n return param.name === 'params'\n ? `{...params, '${queryParam}': pageParam ?? params?.['${queryParam}']}`\n : param.name;\n })\n .join(',');\n },\n\n generateQueryInit({\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n }) {\n const queryOptionsVarName = isRequestOptions ? 'queryOptions' : 'options';\n return `const ${queryOptionsVarName} = ${queryOptionsFnName}(${queryProperties}${\n queryProperties ? ',' : ''\n }${isRequestOptions ? 'options' : 'queryOptions'})`;\n },\n\n generateQueryInvocationArgs({\n queryOptionsVarName,\n optionalQueryClientArgument,\n }) {\n return `${queryOptionsVarName}${optionalQueryClientArgument ? ', queryClient' : ''}`;\n },\n\n getOptionalQueryClientArgument() {\n return composed.hasQueryV5 ? ', queryClient?: QueryClient' : '';\n },\n\n generateQueryArguments({\n operationName,\n definitions,\n mutator,\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n initialData,\n httpClient,\n hasInvalidation,\n useRuntimeFetcher,\n }) {\n const prefix = composed.getQueryOptionsDefinitionPrefix();\n const definition = getQueryOptionsDefinition({\n operationName,\n mutator,\n definitions,\n type,\n prefix,\n hasQueryV5: composed.hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError:\n composed.hasQueryV5WithInfiniteQueryOptionsError,\n queryParams,\n queryParam,\n isReturnType: false,\n initialData,\n adapter: composed,\n });\n\n if (!isRequestOptions) {\n return `${type ? 'queryOptions' : 'mutationOptions'}${\n initialData === 'defined' ? '' : '?'\n }: ${definition}`;\n }\n\n const requestType = getQueryArgumentsRequestType(\n httpClient,\n mutator,\n useRuntimeFetcher,\n );\n const isQueryRequired = initialData === 'defined';\n const skipInvalidationProp =\n !type && hasInvalidation ? 'skipInvalidation?: boolean, ' : '';\n const optionsType = `{ ${\n type ? 'query' : 'mutation'\n }${isQueryRequired ? '' : '?'}:${definition}, ${skipInvalidationProp}${requestType}}`;\n\n return `options${isQueryRequired ? '' : '?'}: ${optionsType}\\n`;\n },\n\n generateMutationOnSuccess({\n operationName,\n definitions,\n isRequestOptions,\n generateInvalidateCall,\n uniqueInvalidates,\n }: MutationOnSuccessContext): string {\n const invalidateCalls = uniqueInvalidates\n .map((t) => generateInvalidateCall(t))\n .join('\\n');\n if (composed.hasQueryV5WithMutationContextOnSuccess) {\n if (isRequestOptions) {\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, onMutateResult: TContext, context: MutationFunctionContext) => {\n if (!options?.skipInvalidation) {\n ${invalidateCalls}\n }\n mutationOptions?.onSuccess?.(data, variables, onMutateResult, context);\n };`;\n }\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, onMutateResult: TContext, context: MutationFunctionContext) => {\n ${invalidateCalls}\n mutationOptions?.onSuccess?.(data, variables, onMutateResult, context);\n };`;\n } else {\n if (isRequestOptions) {\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, context: TContext${composed.hasQueryV5WithRequiredContextOnSuccess ? '' : ' | undefined'}) => {\n if (!options?.skipInvalidation) {\n ${invalidateCalls}\n }\n mutationOptions?.onSuccess?.(data, variables, context);\n };`;\n }\n return ` const onSuccess = (data: Awaited<ReturnType<typeof ${operationName}>>, variables: ${definitions ? `{${definitions}}` : 'void'}, context: TContext${composed.hasQueryV5WithRequiredContextOnSuccess ? '' : ' | undefined'}) => {\n ${invalidateCalls}\n mutationOptions?.onSuccess?.(data, variables, context);\n };`;\n }\n },\n ...adapter,\n };\n\n return composed;\n};\n\ntype QueryClientType =\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query';\n\n/**\n * Create a FrameworkAdapter for the given output client, resolving version flags\n * from the packageJson and query config.\n */\nexport const createFrameworkAdapter = ({\n outputClient,\n packageJson,\n queryVersion,\n}: {\n outputClient: OutputClient | OutputClientFunc;\n packageJson?: PackageJson;\n queryVersion?: number;\n}): FrameworkAdapter => {\n const clientType = outputClient as QueryClientType;\n\n const _hasQueryV5 = queryVersion === 5 || isQueryV5(packageJson, clientType);\n\n const _hasQueryV5WithDataTagError =\n queryVersion === 5 || isQueryV5WithDataTagError(packageJson, clientType);\n\n const _hasQueryV5WithInfiniteQueryOptionsError =\n queryVersion === 5 ||\n isQueryV5WithInfiniteQueryOptionsError(packageJson, clientType);\n const _hasQueryV5WithMutationContextOnSuccess =\n isQueryV5WithMutationContextOnSuccess(packageJson, clientType);\n const _hasQueryV5WithRequiredContextOnSuccess =\n isQueryV5WithRequiredContextOnSuccess(packageJson, clientType);\n\n switch (outputClient) {\n case OutputClientConst.VUE_QUERY: {\n const hasVueQueryV4 = !isVueQueryV3(packageJson) || queryVersion === 4;\n return withDefaults(\n createVueAdapter({\n hasVueQueryV4,\n hasQueryV5: _hasQueryV5,\n hasQueryV5WithDataTagError: _hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError:\n _hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess:\n _hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess:\n _hasQueryV5WithRequiredContextOnSuccess,\n }),\n );\n }\n\n case OutputClientConst.SVELTE_QUERY: {\n const hasSvelteQueryV4 =\n !isSvelteQueryV3(packageJson) || queryVersion === 4;\n const _hasSvelteQueryV6 = isSvelteQueryV6(packageJson);\n return withDefaults(\n createSvelteAdapter({\n hasSvelteQueryV4,\n hasSvelteQueryV6: _hasSvelteQueryV6,\n hasQueryV5: _hasQueryV5,\n hasQueryV5WithDataTagError: _hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError:\n _hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess:\n _hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess:\n _hasQueryV5WithRequiredContextOnSuccess,\n }),\n );\n }\n\n case OutputClientConst.ANGULAR_QUERY: {\n return withDefaults(\n createAngularAdapter({\n hasQueryV5: _hasQueryV5,\n hasQueryV5WithDataTagError: _hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError:\n _hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess:\n _hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess:\n _hasQueryV5WithRequiredContextOnSuccess,\n }),\n );\n }\n\n case OutputClientConst.SOLID_QUERY: {\n const hasSolidQueryWithUsePrefix = isSolidQueryWithUsePrefix(packageJson);\n const hasSolidQueryWithRenamedOptionsTypes =\n isSolidQueryWithRenamedOptionsTypes(packageJson);\n return withDefaults(\n createSolidAdapter({\n hasQueryV5: _hasQueryV5,\n hasQueryV5WithDataTagError: _hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError:\n _hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess:\n _hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess:\n _hasQueryV5WithRequiredContextOnSuccess,\n hasSolidQueryUsePrefix: hasSolidQueryWithUsePrefix,\n hasSolidQueryRenamedOptionsTypes:\n hasSolidQueryWithRenamedOptionsTypes,\n }),\n );\n }\n\n default: {\n // react-query is the default\n return withDefaults(\n createReactAdapter({\n hasQueryV5: _hasQueryV5,\n hasQueryV5WithDataTagError: _hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError:\n _hasQueryV5WithInfiniteQueryOptionsError,\n hasQueryV5WithMutationContextOnSuccess:\n _hasQueryV5WithMutationContextOnSuccess,\n hasQueryV5WithRequiredContextOnSuccess:\n _hasQueryV5WithRequiredContextOnSuccess,\n }),\n );\n }\n }\n};\n","import {\n camel,\n generateMutator,\n type GeneratorImport,\n type GeneratorMutator,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n GetterPropType,\n getFullRoute,\n getRouteAsArray,\n type InvalidateTarget,\n type InvalidateTargetParam,\n isString,\n type NormalizedOutputOptions,\n type OpenApiServerObject,\n type OutputHttpClient,\n pascal,\n type Verbs,\n} from '@orval/core';\n\nimport {\n getHooksOptionImplementation,\n getMutationRequestArgs,\n getQueryErrorType,\n} from './client';\nimport type { FrameworkAdapter } from './framework-adapter';\nimport { getQueryKeyVerbPrefix } from './query-generator';\nimport { getQueryOptionsDefinition } from './query-options';\n\ninterface NormalizedTarget {\n query: string;\n params?: InvalidateTargetParam[] | Record<string, InvalidateTargetParam>;\n invalidateMode: 'invalidate' | 'reset';\n file?: string;\n}\n\nconst normalizeInvalidateMode = (\n invalidateMode: string | undefined,\n): NormalizedTarget['invalidateMode'] =>\n invalidateMode === 'reset' ? 'reset' : 'invalidate';\n\nconst normalizeTarget = (target: InvalidateTarget): NormalizedTarget =>\n isString(target)\n ? { query: target, invalidateMode: 'invalidate' }\n : {\n ...target,\n invalidateMode: normalizeInvalidateMode(target.invalidateMode),\n };\n\nconst serializeTarget = (target: NormalizedTarget): string =>\n JSON.stringify({\n query: target.query,\n params: target.params ?? [],\n invalidateMode: target.invalidateMode,\n file: target.file ?? '',\n });\n\nconst HTTP_METHODS = [\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'options',\n 'head',\n 'trace',\n];\n\nconst MUTATION_OPERATION_LOCAL_NAMES = new Set([\n 'backupQueryClient',\n 'context',\n 'customOptions',\n 'data',\n 'fetchOptions',\n 'http',\n 'mutationFn',\n 'mutationKey',\n 'mutationOptions',\n 'onMutateResult',\n 'onSuccess',\n 'options',\n 'props',\n 'queryClient',\n 'variables',\n]);\n\nconst getMutationOperationReferenceName = (\n operationName: string,\n localNames: ReadonlySet<string>,\n): string => {\n if (!localNames.has(operationName)) {\n return operationName;\n }\n\n let candidate = camel(`${operationName}-request-fn`);\n let index = 2;\n while (localNames.has(candidate)) {\n candidate = camel(`${operationName}-request-fn-${index}`);\n index += 1;\n }\n\n return candidate;\n};\n\ninterface OperationRouteInfo {\n route: string;\n /** HTTP method (lowercase) — needed to mirror the verb prefix that\n * `getQueryKeyVerbPrefix` adds to non-GET cache keys. */\n method: string;\n /** true when the route has path params that lack a default value */\n hasRequiredPathParams: boolean;\n}\n\ninterface SpecPathItem {\n parameters?: SpecParameter[];\n [method: string]: unknown;\n}\n\ninterface SpecOperation {\n operationId?: string;\n parameters?: SpecParameter[];\n}\n\ninterface SpecParameter {\n in?: string;\n default?: unknown;\n schema?: { default?: unknown };\n}\n\n/**\n * Look up an operation's route and path-parameter metadata from the OpenAPI\n * spec. Matches against both the raw `operationId` and its camelCase form\n * so that renamed/overridden operations are still found.\n */\nconst findOperationInfo = (\n spec: Record<string, unknown> | undefined,\n operationName: string,\n): OperationRouteInfo | undefined => {\n const paths = spec?.paths;\n if (!paths || typeof paths !== 'object') return undefined;\n\n for (const [routePath, rawPathItem] of Object.entries(\n paths as Record<string, unknown>,\n )) {\n if (!rawPathItem || typeof rawPathItem !== 'object') continue;\n const pathItem = rawPathItem as SpecPathItem;\n\n for (const method of HTTP_METHODS) {\n const operation = pathItem[method] as SpecOperation | undefined;\n const opId = operation?.operationId;\n if (!opId) continue;\n // Match both raw operationId and its camelCase generated name\n if (opId !== operationName && camel(opId) !== operationName) continue;\n\n if (!routePath.includes('{')) {\n return { route: routePath, method, hasRequiredPathParams: false };\n }\n\n // Collect path parameters from both path-level and operation-level\n const pathParams = [\n ...(Array.isArray(pathItem.parameters) ? pathItem.parameters : []),\n ...(Array.isArray(operation.parameters) ? operation.parameters : []),\n ].filter((p) => p.in === 'path');\n\n const hasRequiredPathParams = pathParams.some(\n (p) => p.schema?.default === undefined && p.default === undefined,\n );\n\n return { route: routePath, method, hasRequiredPathParams };\n }\n }\n return undefined;\n};\n\n/**\n * Extract the static route prefix before the first path parameter.\n * e.g. \"/pets/{petId}\" → \"/pets/\", \"/pets\" → \"/pets\"\n *\n * Returns `undefined` when the prefix contains no meaningful literal\n * segments (e.g. \"/{tenantId}/pets\") to avoid overly-broad invalidation.\n */\nconst getStaticRoutePrefix = (route: string): string | undefined => {\n const idx = route.indexOf('{');\n if (idx === -1) return route;\n const prefix = route.slice(0, idx);\n // Guard: a prefix like \"/\" has no stable literal segment and would\n // match every route-style query key – fall back to the zero-arg call.\n const hasLiteralSegment = prefix\n .split('/')\n .some((segment) => segment.length > 0);\n return hasLiteralSegment ? prefix : undefined;\n};\n\nexport const getMutationOptionsUrl = (\n route: string,\n pathParamNames: Iterable<string>,\n pathRoute?: string,\n): string => {\n const pathParams = new Set(pathParamNames);\n if (pathParams.size === 0) return route;\n\n const formatPathRoute = (value: string) =>\n value.replace(/\\$\\{([^}]+)\\}/g, (match, expression: string) =>\n pathParams.has(expression) ? `{${expression}}` : match,\n );\n\n if (pathRoute) {\n if (route.endsWith(pathRoute)) {\n return `${route.slice(0, -pathRoute.length)}${formatPathRoute(\n pathRoute,\n )}`;\n }\n\n const routeWithoutLeadingSlash = pathRoute.startsWith('/')\n ? pathRoute.slice(1)\n : undefined;\n if (routeWithoutLeadingSlash && route.endsWith(routeWithoutLeadingSlash)) {\n return `${route.slice(\n 0,\n -routeWithoutLeadingSlash.length,\n )}${formatPathRoute(routeWithoutLeadingSlash)}`;\n }\n }\n\n return pathRoute ? route : formatPathRoute(route);\n};\n\nconst getMutationOptionsNamedPathParamName = (param: string) => {\n const trimmedParam = param.trim();\n if (!trimmedParam || trimmedParam.startsWith('...')) return undefined;\n\n const [name] = trimmedParam.split(/[=:]/);\n return name?.trim() || undefined;\n};\n\nexport const getMutationOptionsPathParamNames = (\n props: GeneratorVerbOptions['props'],\n) =>\n props.flatMap((prop) => {\n if (prop.type === GetterPropType.PARAM) return [prop.name];\n if (prop.type === GetterPropType.NAMED_PATH_PARAMS) {\n return prop.destructured\n .replace(/^\\{\\s*|\\s*\\}$/g, '')\n .split(',')\n .flatMap((param) => {\n const name = getMutationOptionsNamedPathParamName(param);\n return name ? [name] : [];\n });\n }\n return [];\n });\n\n/**\n * Check whether the target invalidation needs to call the query key function.\n * Returns false when no params are specified and the route has required path\n * parameters (without defaults), meaning we should use predicate-based broad\n * invalidation instead of calling the function without the required arguments.\n */\nconst hasNonEmptyParams = (\n params:\n | InvalidateTargetParam[]\n | Record<string, InvalidateTargetParam>\n | undefined,\n): params is\n | InvalidateTargetParam[]\n | Record<string, InvalidateTargetParam> => {\n if (!params) return false;\n if (Array.isArray(params)) return params.length > 0;\n return Object.keys(params).length > 0;\n};\n\nconst needsQueryKeyFnCall = (\n target: NormalizedTarget,\n spec: Record<string, unknown> | undefined,\n): boolean => {\n if (hasNonEmptyParams(target.params)) return true;\n const info = findOperationInfo(spec, target.query);\n if (info?.hasRequiredPathParams) return false;\n return true;\n};\n\nconst generateParamArg = (param: InvalidateTargetParam): string => {\n if (!isString(param)) {\n return JSON.stringify(param.literal);\n }\n const parts = param.split('.');\n if (parts.length === 1) {\n return `variables.${param}`;\n }\n return `variables.${parts[0]}?.${parts.slice(1).join('?.')}`;\n};\n\nconst generateParamArgs = (\n params: InvalidateTargetParam[] | Record<string, InvalidateTargetParam>,\n): string => {\n if (Array.isArray(params)) {\n return params.map((v) => generateParamArg(v)).join(', ');\n }\n return Object.values(params)\n .map((v) => generateParamArg(v))\n .join(', ');\n};\n\n/**\n * Build the code-literal form of a static route prefix for use inside a\n * `.startsWith(...)` predicate. A prefix derived from a runtime `baseUrl`\n * contains a `${...}` interpolation, so it must be emitted as a template\n * literal; otherwise a plain single-quoted string is enough and keeps the\n * output byte-identical to the no-baseUrl case.\n */\nconst toPrefixLiteral = (prefix: string): string =>\n prefix.includes('${') ? `\\`${prefix}\\`` : `'${prefix}'`;\n\n/**\n * Create a generateInvalidateCall function that has access to the OpenAPI spec\n * for intelligent route-based invalidation when params are not specified.\n */\nconst createGenerateInvalidateCall = (\n spec: Record<string, unknown> | undefined,\n shouldSplitQueryKey: boolean,\n useOperationIdAsQueryKey: boolean,\n baseUrl: NormalizedOutputOptions['baseUrl'],\n servers: OpenApiServerObject[] | undefined,\n) => {\n return (target: NormalizedTarget): string => {\n const method =\n target.invalidateMode === 'reset' ? 'resetQueries' : 'invalidateQueries';\n const queryKeyFn = camel(`get-${target.query}-query-key`);\n\n if (hasNonEmptyParams(target.params)) {\n const args = generateParamArgs(target.params);\n return ` queryClient.${method}({ queryKey: ${queryKeyFn}(${args}) });`;\n }\n\n // No params specified – check if the target query has required path params\n const info = findOperationInfo(spec, target.query);\n\n if (info?.hasRequiredPathParams) {\n // Route has required path parameters (no defaults) – use broad\n // invalidation instead of calling the query key function without\n // the required arguments.\n const prefix = getStaticRoutePrefix(info.route);\n\n // When the prefix has no meaningful literal segments (e.g. route\n // starts with a path param like /{tenantId}/...), fall through to\n // the zero-arg call rather than generating an overly-broad match.\n if (prefix !== undefined) {\n // Issue #3534: the generated query keys are built from the full route\n // (`getFullRoute` prepends `baseUrl`), so the broad-invalidation\n // prefix must carry the same `baseUrl` – otherwise the predicate /\n // partial key never matches a baseUrl-prefixed cache key. `prefix`\n // has no path params, so `getFullRoute` just concatenates the base.\n const prefixWithBase = getFullRoute(prefix, servers, baseUrl);\n // Mirror the verb prefix that `getQueryKeyVerbPrefix` injects into\n // non-GET Query keys; without this, the predicate / partial key\n // would never match a verb-prefixed cache key and the broad\n // invalidation would silently no-op. We share the helper from\n // `query-generator.ts` so both sites stay in sync.\n // `info.method` is narrowed by the spec walker to one of HTTP_METHODS\n // (a superset of `Verbs` that also includes `options`/`trace`); the\n // helper only branches on `Verbs.GET`, so the cast is safe for any\n // non-GET method.\n const verbPrefix = getQueryKeyVerbPrefix({\n verb: info.method as Verbs,\n useOperationIdAsQueryKey,\n });\n\n if (shouldSplitQueryKey) {\n // Split-key mode: query keys are arrays like ['pets', petId]\n // (or ['DELETE', 'pets', petId] for non-GET Query keys).\n // Use partial key matching with static route segments. Reuse\n // `getRouteAsArray` so baseUrl-derived segments are produced the\n // same way as the query key (e.g. a runtime baseUrl is emitted as\n // an unquoted expression, a static one as quoted literals).\n const segments = getRouteAsArray(prefixWithBase);\n const keyArr = verbPrefix\n ? `['${verbPrefix}', ${segments}]`\n : `[${segments}]`;\n return ` queryClient.${method}({ queryKey: ${keyArr} });`;\n }\n\n // Default mode: query keys are template strings like\n // ['/pets/${petId}'] (or ['DELETE', '/pets/${petId}'] for non-GET\n // Query keys). Use a predicate that knows where the route segment\n // lives in the tuple.\n const prefixLiteral = toPrefixLiteral(prefixWithBase);\n if (verbPrefix) {\n return ` queryClient.${method}({ predicate: (query) => query.queryKey[0] === '${verbPrefix}' && typeof query.queryKey[1] === 'string' && query.queryKey[1].startsWith(${prefixLiteral}) });`;\n }\n return ` queryClient.${method}({ predicate: (query) => typeof query.queryKey[0] === 'string' && query.queryKey[0].startsWith(${prefixLiteral}) });`;\n }\n }\n\n // No path params or route not found – call query key function without args\n return ` queryClient.${method}({ queryKey: ${queryKeyFn}() });`;\n };\n};\n\nexport interface MutationHookContext {\n verbOptions: GeneratorVerbOptions;\n options: GeneratorOptions;\n isRequestOptions: boolean;\n httpClient: OutputHttpClient;\n doc: string;\n adapter: FrameworkAdapter;\n}\n\nexport const generateMutationHook = async ({\n verbOptions,\n options,\n isRequestOptions,\n httpClient,\n doc,\n adapter,\n}: MutationHookContext): Promise<{\n implementation: string;\n mutators: GeneratorMutator[] | undefined;\n imports: GeneratorImport[];\n}> => {\n const {\n operationName,\n body,\n props,\n mutator,\n response,\n operationId,\n route: pathRoute,\n override,\n } = verbOptions;\n const { route, context, output } = options;\n const query = override.query;\n\n const mutationOptionsMutator = query.mutationOptions\n ? await generateMutator({\n output,\n mutator: query.mutationOptions,\n name: `${operationName}MutationOptions`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n const bodyOptionalMark = body.isOptional ? '?' : '';\n const definitions = props\n .map(({ definition, type }) =>\n type === GetterPropType.BODY\n ? mutator?.bodyTypeName\n ? `data${bodyOptionalMark}: ${mutator.bodyTypeName}<${body.definition}>`\n : `data${bodyOptionalMark}: ${body.definition}`\n : definition,\n )\n .join(';');\n\n const properties = props\n .map(({ name, type }) => (type === GetterPropType.BODY ? 'data' : name))\n .join(',');\n\n const operationLocalNames = new Set(MUTATION_OPERATION_LOCAL_NAMES);\n for (const { name, type } of props) {\n operationLocalNames.add(type === GetterPropType.BODY ? 'data' : name);\n }\n\n const errorType = getQueryErrorType(\n operationName,\n response,\n httpClient,\n mutator,\n override.fetch.forceSuccessResponse,\n );\n\n const operationReferenceName = getMutationOperationReferenceName(\n operationName,\n operationLocalNames,\n );\n const dataType = mutator?.isHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationReferenceName}`;\n const operationTypeReferenceName = mutator?.isHook\n ? operationName\n : operationReferenceName;\n\n const mutationOptionFnReturnType = getQueryOptionsDefinition({\n operationName: operationTypeReferenceName,\n mutator,\n definitions,\n prefix: adapter.getQueryOptionsDefinitionPrefix(),\n hasQueryV5: adapter.hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError:\n adapter.hasQueryV5WithInfiniteQueryOptionsError,\n isReturnType: true,\n adapter,\n });\n\n const invalidatesConfig = (query.mutationInvalidates ?? [])\n .filter((rule) => rule.onMutations.includes(operationName))\n .flatMap((rule) => rule.invalidates)\n .map((t) => normalizeTarget(t));\n const seenTargets = new Set<string>();\n const uniqueInvalidates = invalidatesConfig.filter((target) => {\n const key = serializeTarget(target);\n if (seenTargets.has(key)) return false;\n seenTargets.add(key);\n return true;\n });\n\n const hasInvalidation =\n uniqueInvalidates.length > 0 && adapter.supportsMutationInvalidation();\n\n const useRuntimeFetcher = override.fetch.useRuntimeFetcher;\n\n const mutationArguments = adapter.generateQueryArguments({\n operationName: operationTypeReferenceName,\n definitions,\n mutator,\n isRequestOptions,\n httpClient,\n hasInvalidation,\n useRuntimeFetcher,\n });\n\n // Separate arguments for getMutationOptions function (includes http: HttpClient param for Angular)\n const mutationArgumentsForOptions = adapter.generateQueryArguments({\n operationName: operationTypeReferenceName,\n definitions,\n mutator,\n isRequestOptions,\n httpClient,\n forQueryOptions: true,\n hasInvalidation,\n useRuntimeFetcher,\n });\n\n const mutationOptionsFnName = camel(\n mutationOptionsMutator || mutator?.isHook\n ? `use-${operationName}-mutationOptions`\n : `get-${operationName}-mutationOptions`,\n );\n\n const hooksOptionImplementation = getHooksOptionImplementation(\n isRequestOptions,\n httpClient,\n camel(operationName),\n mutator,\n useRuntimeFetcher,\n );\n\n // For Angular, add http: HttpClient as FIRST param (required, before optional params)\n // This avoids TS1016 \"required param cannot follow optional param\"\n const httpFirstParam = adapter.getHttpFirstParam(mutator);\n\n // For Angular/React mutations with invalidation, add queryClient as second required param\n const queryClientParam = hasInvalidation ? 'queryClient: QueryClient, ' : '';\n\n const mutationOptionsFn = `export const ${mutationOptionsFnName} = <TError = ${errorType},\n TContext = unknown>(${httpFirstParam}${queryClientParam}${mutationArgumentsForOptions}): ${mutationOptionFnReturnType} => {\n\n${hooksOptionImplementation}\n\n ${\n mutator?.isHook\n ? `const ${operationReferenceName} = use${pascal(operationName)}Hook()`\n : ''\n }\n\n\n const mutationFn: MutationFunction<Awaited<ReturnType<${dataType}>>, ${\n definitions ? `{${definitions}}` : 'void'\n }> = (${properties ? 'props' : ''}) => {\n ${properties ? `const {${properties}} = props ?? {};` : ''}\n\n return ${operationReferenceName}(${adapter.getMutationHttpPrefix(mutator)}${properties}${\n properties ? ',' : ''\n }${getMutationRequestArgs(isRequestOptions, httpClient, mutator, useRuntimeFetcher)})\n }\n\n${\n hasInvalidation\n ? adapter.generateMutationOnSuccess({\n operationName,\n definitions,\n isRequestOptions,\n generateInvalidateCall: createGenerateInvalidateCall(\n context.spec,\n !!query.shouldSplitQueryKey,\n !!query.useOperationIdAsQueryKey,\n // `options.output` is the target file path (a string); the\n // normalized output – and thus `baseUrl` – lives on `context.output`.\n context.output.baseUrl,\n context.spec.servers,\n ),\n uniqueInvalidates,\n })\n : ''\n}\n\n ${\n mutationOptionsMutator\n ? `const customOptions = ${\n mutationOptionsMutator.name\n }({...mutationOptions, mutationFn}${\n mutationOptionsMutator.hasSecondArg\n ? `, { url: \\`${getMutationOptionsUrl(\n route,\n getMutationOptionsPathParamNames(props),\n pathRoute,\n )}\\` }`\n : ''\n }${\n mutationOptionsMutator.hasThirdArg\n ? `, { operationId: '${operationId}', operationName: '${operationName}' }`\n : ''\n });`\n : ''\n }\n\n\n return ${\n mutationOptionsMutator\n ? 'customOptions'\n : hasInvalidation\n ? '{ ...mutationOptions, mutationFn, onSuccess }'\n : '{ mutationFn, ...mutationOptions }'\n }}`;\n\n const operationPrefix = adapter.hookPrefix;\n\n const optionalQueryClientArgument =\n adapter.getOptionalQueryClientArgument(hasInvalidation);\n\n const mutationImplementation = adapter.generateMutationImplementation({\n mutationOptionsFnName,\n hasInvalidation,\n isRequestOptions,\n });\n\n const mutationOptionsVarName = camel(`${operationName}-mutation-options`);\n\n const mutationReturnType = adapter.getMutationReturnType({\n dataType,\n variableType: definitions ? `{${definitions}}` : 'void',\n });\n\n const mutationHookBody = adapter.generateMutationHookBody({\n operationPrefix,\n mutationOptionsFnName,\n mutationImplementation,\n mutationOptionsVarName,\n isRequestOptions,\n mutator,\n hasInvalidation,\n optionalQueryClientArgument,\n });\n\n const operationReferenceDeclaration =\n !mutator?.isHook && operationReferenceName !== operationName\n ? `const ${operationReferenceName} = ${operationName};`\n : '';\n\n const implementation = `\n${operationReferenceDeclaration}\n${mutationOptionsFn}\n\n export type ${pascal(\n operationName,\n )}MutationResult = NonNullable<Awaited<ReturnType<${dataType}>>>\n ${\n body.definition\n ? `export type ${pascal(operationName)}MutationBody = ${\n mutator?.bodyTypeName\n ? `${mutator.bodyTypeName}<${body.definition}>`\n : body.definition\n }${body.isOptional ? ' | undefined' : ''}`\n : ''\n }\n export type ${pascal(operationName)}MutationError = ${errorType}\n\n ${doc}export const ${camel(\n `${operationPrefix}-${operationName}`,\n )} = <TError = ${errorType},\n TContext = unknown>(${mutationArguments} ${optionalQueryClientArgument})${mutationReturnType} => {\n${mutationHookBody}\n }\n `;\n\n const mutators = mutationOptionsMutator\n ? [mutationOptionsMutator]\n : undefined;\n\n const imports: GeneratorImport[] = hasInvalidation\n ? uniqueInvalidates\n .filter((i) => !!i.file && needsQueryKeyFnCall(i, context.spec))\n .map<GeneratorImport>((i) => ({\n name: camel(`get-${i.query}-query-key`),\n importPath: i.file,\n values: true,\n }))\n : [];\n\n return {\n implementation,\n mutators,\n imports,\n };\n};\n","import {\n camel,\n generateMutator,\n type GeneratorImport,\n type GeneratorMutator,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n type GetterBody,\n type GetterParams,\n type GetterProp,\n type GetterProps,\n GetterPropType,\n type GetterQueryParam,\n type GetterResponse,\n jsDoc,\n logWarning,\n OutputClient,\n type OutputClientFunc,\n type OutputHttpClient,\n pascal,\n toObjectString,\n Verbs,\n} from '@orval/core';\n\nimport { getHookOptions, getQueryErrorType, getQueryOptions } from './client';\nimport type { FrameworkAdapter } from './framework-adapter';\nimport { generateMutationHook } from './mutation-generator';\nimport {\n generateQueryOptions,\n getQueryOptionsDefinition,\n QueryType,\n} from './query-options';\nimport { getHasSignal } from './utils';\n\n/**\n * Decide whether the current operation's configuration conflicts with a\n * `mutationInvalidates` rule. The rule wires its invalidation through the\n * Mutation hook's `onSuccess`, so referencing an operation that is not\n * generated as a Mutation (either forced into a Query via per-operation\n * `useQuery: true`, or suppressed entirely) makes the rule a silent no-op.\n *\n * Returns the warning message when the conflict applies, or `undefined`\n * when the configuration is consistent.\n */\nexport const getMutationInvalidatesConflictWarning = ({\n operationName,\n isMutation,\n isQuery,\n mutationInvalidates,\n}: {\n operationName: string;\n isMutation: boolean | undefined;\n isQuery: boolean;\n mutationInvalidates:\n | NonNullable<\n GeneratorVerbOptions['override']['query']['mutationInvalidates']\n >\n | undefined;\n}): string | undefined => {\n if (isMutation) return undefined;\n if (!mutationInvalidates?.length) return undefined;\n\n const referencingRule = mutationInvalidates.find((rule) =>\n rule.onMutations.includes(operationName),\n );\n if (!referencingRule) return undefined;\n\n const generatedAs = isQuery ? 'Query hook' : 'plain function (no hook)';\n return (\n `mutationInvalidates rule references '${operationName}', but that ` +\n `operation is generated as a ${generatedAs}, not a Mutation. The ` +\n `invalidation will not fire. Either remove '${operationName}' from the ` +\n `rule's onMutations list, or configure '${operationName}' so that it ` +\n `is generated as a Mutation hook.`\n );\n};\n\nexport const hasQueryParam = (\n queryParams: GetterQueryParam | undefined,\n queryParam: string | undefined,\n) => {\n if (!queryParam || !queryParams) {\n return false;\n }\n\n return queryParams.paramNames?.includes(queryParam) ?? true;\n};\n\nconst escapeRegExpMetaChars = (value: string): string =>\n value.replaceAll(/[.*+?^${}()|[\\]\\\\]/g, String.raw`\\$&`);\n\n/**\n * Wraps the body parameter's type in a property string with the mutator's\n * `BodyType<T>` envelope so that user-facing Query helpers (hook signature,\n * `getXxxQueryOptions`, `getXxxQueryKey`, prefetch / invalidate / set+get\n * QueryData) match the request function's signature, which is already\n * wrapped by `client.ts`. Without this, callers that pass a plain body to\n * a non-GET Query hook (possible after #2376 routes non-GET verbs to\n * Query hooks) would hit a type mismatch against the underlying request\n * function.\n *\n * The pattern handles three prop shapes that the various\n * `toObjectString(props, ...)` callers can emit:\n * - `name: T` — required body\n * - `name?: T` — optional body\n * - `name: undefined | T` — `definedInitialData` overload transform\n *\n * `body.definition` is fully regex-escaped so types containing metachars\n * (e.g. `Pet[]`, `Foo | Bar`, anonymous object types) are matched\n * verbatim rather than reinterpreted as regex syntax.\n *\n * No-op when the operation has no body or the mutator does not export a\n * `BodyType<T>` wrapper, so existing GET-only Query keys are unchanged.\n */\nexport const wrapPropsBodyWithMutatorBodyType = ({\n propsString,\n body,\n mutator,\n}: {\n propsString: string;\n body: GetterBody;\n mutator: GeneratorMutator | undefined;\n}): string => {\n if (!mutator?.bodyTypeName || !body.definition) return propsString;\n const bodyDefinitionPattern = escapeRegExpMetaChars(body.definition);\n return propsString.replace(\n new RegExp(\n String.raw`(\\w+\\??:\\s*(?:undefined\\s*\\|\\s*)?)${bodyDefinitionPattern}`,\n ),\n `$1${mutator.bodyTypeName}<${body.definition}>`,\n );\n};\n\n/**\n * Widens a parameter signature to be optional. Skips params that already\n * carry a default value (`= ...`), since those are syntactically optional\n * and adding `?` on top would be a TypeScript error.\n */\nexport const makeOptionalParam = (impl: string) => {\n if (impl.includes('=')) return impl;\n return impl.replace(/^(\\w+):\\s*/, '$1?: ');\n};\n\n/**\n * Widens a parameter type to also accept `undefined`. Already-optional\n * (`?:`) signatures are normalized to required-with-undefined, and params\n * with a default value pass through unchanged.\n */\nexport const allowUndefinedParam = (impl: string) => {\n if (impl.includes('=')) return impl;\n const optional = /^(\\w+)\\?:\\s*(.+)$/.exec(impl);\n if (optional) return `${optional[1]}: ${optional[2]} | undefined`;\n return impl.replace(/^(\\w+):\\s*(.+)$/, '$1: $2 | undefined');\n};\n\n/**\n * Renders the `setXxxQueryData` helper as either a React hook (returns a\n * setter) or a plain function taking `queryClient`. Both shapes share the\n * same body and signature, so this collapses what would otherwise be two\n * near-identical template literals.\n */\nconst renderSetQueryDataHelper = ({\n doc,\n isReactQuery,\n fnName,\n propsSig,\n body,\n}: {\n doc: string | undefined;\n isReactQuery: boolean;\n fnName: string;\n propsSig: string;\n body: string;\n}) => {\n const docPrefix = doc ?? '';\n if (isReactQuery) {\n return `${docPrefix}export const ${fnName} = () => {\n const queryClient = useQueryClient();\n return (${propsSig}) => {\n ${body}\n };\n}\\n`;\n }\n return `${docPrefix}export const ${fnName} = (queryClient: QueryClient, ${propsSig}) => {\n ${body}\n}\\n`;\n};\n\n/**\n * Renders the prop list shared by `getXxxQueryKey`, `setXxxQueryData` and\n * `getXxxQueryData` helpers: headers are dropped, path params stay required,\n * non-path params (query params, body) are passed through `widenNonPath`\n * (defaults to identity — pass `makeOptionalParam` or `allowUndefinedParam`\n * to relax the signature).\n *\n * Centralising this prevents the three call sites from drifting apart on\n * how they treat the same props.\n */\nconst buildKeyShapedProps = ({\n props,\n body,\n mutator,\n widenNonPath = (impl) => impl,\n}: {\n props: GetterProps;\n body: GetterBody;\n mutator: GeneratorMutator | undefined;\n widenNonPath?: (impl: string) => string;\n}) =>\n wrapPropsBodyWithMutatorBodyType({\n propsString: toObjectString(\n props\n .filter((prop) => prop.type !== GetterPropType.HEADER)\n .map((prop) => ({\n ...prop,\n implementation:\n prop.type === GetterPropType.PARAM ||\n prop.type === GetterPropType.NAMED_PATH_PARAMS\n ? prop.implementation\n : widenNonPath(prop.implementation),\n })),\n 'implementation',\n ),\n body,\n mutator,\n });\n\n/**\n * Computes a verb prefix segment for query keys when a non-GET operation is\n * routed to a Query hook. Without this prefix, two operations sharing a path\n * (e.g. `GET /pets` and `POST /pets`) would generate cache keys that both\n * begin with `'/pets'`, so TanStack Query would mix their cached data and\n * `invalidateQueries({ queryKey: ['/pets'] })` would match both.\n *\n * Skipped for GET (preserves existing keys) and when\n * `useOperationIdAsQueryKey` is enabled (operation IDs are already unique\n * across verb + path, so the prefix would be redundant).\n *\n * Returns the uppercased verb when a prefix should be inserted, or\n * `undefined` when no prefix is needed.\n */\nexport const getQueryKeyVerbPrefix = ({\n verb,\n useOperationIdAsQueryKey,\n}: {\n verb: Verbs;\n useOperationIdAsQueryKey: boolean | undefined;\n}): string | undefined => {\n if (useOperationIdAsQueryKey) return undefined;\n if (verb === Verbs.GET) return undefined;\n return verb.toUpperCase();\n};\n\nconst getQueryFnArguments = ({\n hasQueryParam,\n hasSignal,\n hasSignalParam = false,\n}: {\n hasQueryParam: boolean;\n hasSignal: boolean;\n hasSignalParam?: boolean;\n}) => {\n if (!hasQueryParam && !hasSignal) {\n return '';\n }\n\n // Rename AbortSignal if API has a param named \"signal\" to avoid conflict\n const signalDestructure = hasSignalParam ? 'signal: querySignal' : 'signal';\n\n if (hasQueryParam) {\n if (hasSignal) {\n return `{ ${signalDestructure}, pageParam }`;\n }\n\n return '{ pageParam }';\n }\n\n return `{ ${signalDestructure} }`;\n};\n\nconst generatePrefetch = ({\n usePrefetch,\n type,\n useQuery,\n useInfinite,\n operationName,\n mutator,\n doc,\n queryProps,\n dataType,\n errorType,\n queryArguments,\n queryOptionsVarName,\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n}: {\n operationName: string;\n mutator?: GeneratorMutator;\n type: (typeof QueryType)[keyof typeof QueryType];\n usePrefetch?: boolean;\n useQuery?: boolean;\n useInfinite?: boolean;\n doc?: string;\n queryProps: string;\n dataType: string;\n errorType: string;\n queryArguments: string;\n queryOptionsVarName: string;\n queryOptionsFnName: string;\n queryProperties: string;\n isRequestOptions: boolean;\n}) => {\n const shouldGeneratePrefetch =\n usePrefetch &&\n (type === QueryType.QUERY ||\n type === QueryType.INFINITE ||\n (type === QueryType.SUSPENSE_QUERY && !useQuery) ||\n (type === QueryType.SUSPENSE_INFINITE && !useInfinite));\n\n if (!shouldGeneratePrefetch) {\n return '';\n }\n\n const prefetchType =\n type === QueryType.QUERY || type === QueryType.SUSPENSE_QUERY\n ? 'query'\n : 'infinite-query';\n const prefetchFnName = camel(`prefetch-${prefetchType}`);\n\n if (mutator?.isHook) {\n const prefetchVarName = camel(\n `use-prefetch-${operationName}-${prefetchType}`,\n );\n return `${doc}export const ${prefetchVarName} = <TData = Awaited<ReturnType<${dataType}>>, TError = ${errorType}>(${queryProps} ${queryArguments}) => {\n const queryClient = useQueryClient();\n const ${queryOptionsVarName} = ${queryOptionsFnName}(${queryProperties}${\n queryProperties ? ',' : ''\n }${isRequestOptions ? 'options' : 'queryOptions'})\n return useCallback(async (): Promise<QueryClient> => {\n await queryClient.${prefetchFnName}(${queryOptionsVarName})\n return queryClient;\n },[queryClient, ${queryOptionsVarName}]);\n};\\n`;\n } else {\n const prefetchVarName = camel(`prefetch-${operationName}-${prefetchType}`);\n return `${doc}export const ${prefetchVarName} = async <TData = Awaited<ReturnType<${dataType}>>, TError = ${errorType}>(\\n queryClient: QueryClient, ${queryProps} ${queryArguments}\\n ): Promise<QueryClient> => {\n\n const ${queryOptionsVarName} = ${queryOptionsFnName}(${queryProperties}${\n queryProperties ? ',' : ''\n }${isRequestOptions ? 'options' : 'queryOptions'})\n\n await queryClient.${prefetchFnName}(${queryOptionsVarName});\n\n return queryClient;\n}\\n`;\n }\n};\n\nconst generateQueryImplementation = ({\n queryOption: { name, queryParam, options, type, queryKeyFnName },\n operationId,\n operationName,\n queryProperties,\n queryKeyProperties,\n queryParams,\n params,\n props,\n body,\n mutator,\n queryOptionsMutator,\n queryKeyMutator,\n isRequestOptions,\n response,\n httpClient,\n isExactOptionalPropertyTypes,\n hasSignal,\n useRuntimeFetcher,\n forceSuccessResponse,\n route,\n doc,\n usePrefetch,\n useQuery,\n useInfinite,\n useInvalidate,\n useSetQueryData,\n useGetQueryData,\n adapter,\n}: {\n queryOption: {\n name: string;\n options?: object | boolean;\n type: (typeof QueryType)[keyof typeof QueryType];\n queryParam?: string;\n queryKeyFnName: string;\n };\n isRequestOptions: boolean;\n operationId: string;\n operationName: string;\n queryProperties: string;\n queryKeyProperties: string;\n params: GetterParams;\n props: GetterProps;\n body: GetterBody;\n response: GetterResponse;\n queryParams?: GetterQueryParam;\n mutator?: GeneratorMutator;\n queryOptionsMutator?: GeneratorMutator;\n queryKeyMutator?: GeneratorMutator;\n httpClient: OutputHttpClient;\n isExactOptionalPropertyTypes: boolean;\n hasSignal: boolean;\n useRuntimeFetcher?: boolean;\n forceSuccessResponse?: boolean;\n route: string;\n doc?: string;\n usePrefetch?: boolean;\n useQuery?: boolean;\n useInfinite?: boolean;\n useInvalidate?: boolean;\n useSetQueryData?: boolean;\n useGetQueryData?: boolean;\n adapter: FrameworkAdapter;\n}) => {\n const {\n hasQueryV5,\n hasQueryV5WithDataTagError,\n hasQueryV5WithInfiniteQueryOptionsError,\n } = adapter;\n\n // Check if API has a param named \"signal\" to avoid conflict with AbortSignal\n const hasSignalParam = props.some(\n (prop: GetterProp) => prop.name === 'signal',\n );\n\n const queryPropDefinitions = wrapPropsBodyWithMutatorBodyType({\n propsString: toObjectString(props, 'definition'),\n body,\n mutator,\n });\n const definedInitialDataQueryPropsDefinitions =\n wrapPropsBodyWithMutatorBodyType({\n propsString: toObjectString(\n props.map((prop) => {\n const regex = new RegExp(String.raw`^${prop.name}\\s*\\?:`);\n\n if (!regex.test(prop.definition)) {\n return prop;\n }\n\n const definitionWithUndefined = prop.definition.replace(\n regex,\n `${prop.name}: undefined | `,\n );\n return {\n ...prop,\n definition: definitionWithUndefined,\n };\n }),\n 'definition',\n ),\n body,\n mutator,\n });\n const queryProps = wrapPropsBodyWithMutatorBodyType({\n propsString: toObjectString(props, 'implementation'),\n body,\n mutator,\n });\n\n const infiniteQueryParamType =\n hasQueryParam(queryParams, queryParam) && queryParams && queryParam\n ? `${queryParams.schema.name}['${queryParam}']`\n : '';\n const hasInfiniteQueryParam = !!infiniteQueryParamType;\n\n const httpFunctionProps = queryParam\n ? adapter.getInfiniteQueryHttpProps(\n props,\n queryParam,\n httpClient,\n !!mutator,\n )\n : adapter.getHttpFunctionQueryProps(queryProperties, httpClient, !!mutator);\n\n const definedInitialDataReturnType = adapter.getQueryReturnType({\n type,\n isMutatorHook: mutator?.isHook,\n operationName,\n hasQueryV5,\n hasQueryV5WithDataTagError,\n isInitialDataDefined: true,\n });\n const returnType = adapter.getQueryReturnType({\n type,\n isMutatorHook: mutator?.isHook,\n operationName,\n hasQueryV5,\n hasQueryV5WithDataTagError,\n });\n\n const errorType = getQueryErrorType(\n operationName,\n response,\n httpClient,\n mutator,\n forceSuccessResponse,\n );\n\n const dataType = mutator?.isHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`;\n\n const definedInitialDataQueryArguments = adapter.generateQueryArguments({\n operationName,\n mutator,\n definitions: '',\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n initialData: 'defined',\n httpClient,\n useRuntimeFetcher,\n });\n const undefinedInitialDataQueryArguments = adapter.generateQueryArguments({\n operationName,\n definitions: '',\n mutator,\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n initialData: 'undefined',\n httpClient,\n useRuntimeFetcher,\n });\n const queryArguments = adapter.generateQueryArguments({\n operationName,\n definitions: '',\n mutator,\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n httpClient,\n useRuntimeFetcher,\n });\n\n // Separate arguments for getQueryOptions function (includes http: HttpClient param for Angular)\n const queryArgumentsForOptions = adapter.generateQueryArguments({\n operationName,\n definitions: '',\n mutator,\n isRequestOptions,\n type,\n queryParams,\n queryParam,\n httpClient,\n forQueryOptions: true,\n useRuntimeFetcher,\n });\n\n const queryOptions = getQueryOptions({\n isRequestOptions,\n isExactOptionalPropertyTypes,\n mutator,\n hasSignal,\n httpClient,\n hasSignalParam,\n useRuntimeFetcher,\n });\n\n const hookOptions = getHookOptions({\n isRequestOptions,\n httpClient,\n mutator,\n useRuntimeFetcher,\n });\n\n const queryFnArguments = getQueryFnArguments({\n hasQueryParam:\n !!queryParam && props.some(({ type }) => type === 'queryParam'),\n hasSignal,\n hasSignalParam,\n });\n\n const queryOptionFnReturnType = getQueryOptionsDefinition({\n operationName,\n mutator,\n definitions: '',\n type,\n prefix: adapter.getQueryOptionsDefinitionPrefix(),\n hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError,\n queryParams,\n queryParam,\n isReturnType: true,\n adapter,\n });\n\n const queryOptionsImp = generateQueryOptions({\n params,\n options,\n type,\n adapter,\n });\n\n const queryOptionsFnName = camel(\n queryKeyMutator || queryOptionsMutator || mutator?.isHook\n ? `use-${name}-queryOptions`\n : `get-${name}-queryOptions`,\n );\n\n const queryOptionsVarName = isRequestOptions ? 'queryOptions' : 'options';\n\n const hasParamReservedWord = props.some(\n (prop: GetterProp) => prop.name === 'query',\n );\n const queryResultVarName = hasParamReservedWord ? '_query' : 'query';\n\n const infiniteParam = infiniteQueryParamType\n ? `, ${infiniteQueryParamType}`\n : '';\n const TData =\n hasQueryV5 &&\n (type === QueryType.INFINITE || type === QueryType.SUSPENSE_INFINITE)\n ? `InfiniteData<Awaited<ReturnType<${dataType}>>${infiniteParam}>`\n : `Awaited<ReturnType<${dataType}>>`;\n\n // For Angular, add http: HttpClient as FIRST param (required, before optional params)\n // This avoids TS1016 \"required param cannot follow optional param\"\n const httpFirstParam = adapter.getHttpFirstParam(mutator);\n\n const queryOptionsFn = `export const ${queryOptionsFnName} = <TData = ${TData}, TError = ${errorType}>(${httpFirstParam}${queryProps} ${queryArgumentsForOptions}) => {\n\n${hookOptions}\n\n const queryKey = ${\n queryKeyMutator\n ? `${queryKeyMutator.name}({ ${queryProperties} }${\n queryKeyMutator.hasSecondArg\n ? `, { url: \\`${route}\\`, queryOptions }`\n : ''\n });`\n : `${adapter.getQueryKeyPrefix()}${queryKeyFnName}(${queryKeyProperties});`\n }\n\n ${\n mutator?.isHook\n ? `const ${operationName} = use${pascal(operationName)}Hook();`\n : ''\n }\n\n const queryFn: QueryFunction<Awaited<ReturnType<${\n mutator?.isHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`\n }>>${\n hasQueryV5 && hasInfiniteQueryParam\n ? `, QueryKey, ${infiniteQueryParamType}`\n : ''\n }> = (${queryFnArguments}) => ${operationName}(${httpFunctionProps}${\n httpFunctionProps ? ', ' : ''\n }${queryOptions});\n\n ${adapter.getQueryOptionsUnrefStatements(props)}\n\n ${\n queryOptionsMutator\n ? // Pass the same options object the non-mutator branch returns so\n // generated guards (e.g. the `enabled` clause for nullish path\n // params) reach the mutator instead of being dropped. See #1522.\n // The third arg additionally carries operation identity (matching\n // mutationOptions per #1974) so mutators can branch on the source\n // operation. See #3153.\n `const customOptions = ${\n queryOptionsMutator.name\n }({ queryKey, queryFn, ${queryOptionsImp}}${\n queryOptionsMutator.hasSecondArg ? `, { ${queryProperties} }` : ''\n }${\n queryOptionsMutator.hasThirdArg\n ? `, { url: \\`${route}\\`, operationId: '${operationId}', operationName: '${operationName}' }`\n : ''\n });`\n : ''\n }\n\n return ${\n queryOptionsMutator\n ? 'customOptions'\n : `{ queryKey, queryFn, ${queryOptionsImp}}`\n }${\n adapter.shouldCastQueryOptions?.() === false\n ? ''\n : ` as ${queryOptionFnReturnType} ${\n adapter.shouldAnnotateQueryKey()\n ? `& { queryKey: ${hasQueryV5 ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ', TError' : ''}>` : 'QueryKey'} }`\n : ''\n }`\n }\n}`;\n const operationPrefix = adapter.hookPrefix;\n const optionalQueryClientArgument = adapter.getOptionalQueryClientArgument();\n\n const queryHookName = camel(`${operationPrefix}-${name}`);\n\n const overrideTypes = `\nexport function ${queryHookName}<TData = ${TData}, TError = ${errorType}>(\\n ${definedInitialDataQueryPropsDefinitions} ${definedInitialDataQueryArguments} ${optionalQueryClientArgument}\\n ): ${definedInitialDataReturnType}\nexport function ${queryHookName}<TData = ${TData}, TError = ${errorType}>(\\n ${queryPropDefinitions} ${undefinedInitialDataQueryArguments} ${optionalQueryClientArgument}\\n ): ${returnType}\nexport function ${queryHookName}<TData = ${TData}, TError = ${errorType}>(\\n ${queryPropDefinitions} ${queryArguments} ${optionalQueryClientArgument}\\n ): ${returnType}`;\n\n const prefetchContext = {\n usePrefetch,\n type,\n useQuery,\n useInfinite,\n operationName,\n mutator,\n queryProps,\n dataType,\n errorType,\n queryArguments: queryArgumentsForOptions,\n queryOptionsVarName,\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n doc,\n };\n\n const prefetch = adapter.generatePrefetch\n ? adapter.generatePrefetch(prefetchContext)\n : generatePrefetch(prefetchContext);\n\n const isPrimaryQueryType =\n type === QueryType.QUERY ||\n type === QueryType.INFINITE ||\n (type === QueryType.SUSPENSE_QUERY && !useQuery) ||\n (type === QueryType.SUSPENSE_INFINITE && !useInfinite);\n\n const buildBaseQueryKeyExpr = () =>\n queryKeyMutator\n ? `${queryKeyMutator.name}({ ${queryProperties} }${\n queryKeyMutator.hasSecondArg ? `, { url: \\`${route}\\` }` : ''\n })`\n : `${queryKeyFnName}(${queryKeyProperties})`;\n\n // queryOptions mutator may augment the queryKey (e.g. tenant prefix).\n // Route invalidate / set / get helpers through the mutator so the key\n // matches what the query hook actually wrote into the cache. Hook-shaped\n // mutators are skipped here because none of these helpers can legally\n // call a hook at the right time — set/get helpers stop being emitted\n // entirely in that case (see `hasHookMutator` below), and invalidate\n // falls back to the unmutated base key for backwards compatibility.\n const applyQueryOptionsMutator = (baseExpr: string) =>\n queryOptionsMutator && !queryOptionsMutator.isHook\n ? `${queryOptionsMutator.name}({ queryKey: ${baseExpr} }${\n queryOptionsMutator.hasSecondArg ? `, { ${queryProperties} }` : ''\n }${\n queryOptionsMutator.hasThirdArg\n ? `, { url: \\`${route}\\`, operationId: '${operationId}', operationName: '${operationName}' }`\n : ''\n }).queryKey`\n : baseExpr;\n\n // Hook-shaped queryOptions mutators rewrite the queryKey at hook-call\n // time, but the set/get helpers cannot call a hook to recover that key.\n // Emitting them would silently target a different cache slot than the\n // query hook actually wrote into, so we skip generation in that case and\n // surface a warning to the user. Invalidate is left alone for backwards\n // compatibility — it has shipped with the same gap and changing its\n // contract is out of scope here.\n const hasHookMutator = !!queryOptionsMutator?.isHook;\n if (hasHookMutator && (useSetQueryData || useGetQueryData)) {\n logWarning(\n `'${name}' has a hook-based queryOptions mutator, so the requested set/get-query-data helpers were skipped to avoid a cache-key mismatch with the query hook.`,\n );\n }\n\n const shouldGenerateInvalidate = useInvalidate && isPrimaryQueryType;\n const invalidateFnName = camel(`invalidate-${name}`);\n const invalidateQueryKeyExpr = applyQueryOptionsMutator(\n buildBaseQueryKeyExpr(),\n );\n\n const shouldGenerateSetQueryData =\n useSetQueryData && isPrimaryQueryType && !hasHookMutator;\n const isReactQuery = adapter.outputClient === OutputClient.REACT_QUERY;\n const setQueryDataFnName = isReactQuery\n ? camel(`use-set-${name}-query-data`)\n : camel(`set-${name}-query-data`);\n // Route the set-query-data key through the same mutator as invalidate so\n // that any user-applied prefix (e.g. tenant) is honoured. Without this,\n // `setQueriesData` and `invalidateQueries` would target different keys.\n const setQueryDataKeyExpr = applyQueryOptionsMutator(buildBaseQueryKeyExpr());\n // `setQueriesData` matches by query-key prefix, so non-path props (query\n // params, body) are widened to `T | undefined` — passing `undefined`\n // updates every cached entry sharing the path prefix, matching what\n // `getXxxQueryKey()` already allows. `T | undefined` is used instead of\n // `?:` because the `updater` parameter follows and TS1016 forbids a\n // required parameter after an optional one.\n const setQueryDataProps = buildKeyShapedProps({\n props,\n body,\n mutator,\n widenNonPath: allowUndefinedParam,\n });\n\n const shouldGenerateGetQueryData =\n useGetQueryData && isPrimaryQueryType && !hasHookMutator;\n const getQueryDataFnName = isReactQuery\n ? camel(`use-get-${name}-query-data`)\n : camel(`get-${name}-query-data`);\n // `getQueryData` reads a single cache entry — keep every prop required and\n // reuse `setQueryDataKeyExpr` so read and write target the same slot.\n const getQueryDataProps = buildKeyShapedProps({ props, body, mutator });\n\n // Generate query init (e.g. const queryOptions = fn(...) or const http = inject(HttpClient))\n const queryInit = adapter.generateQueryInit({\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n mutator,\n });\n\n // Generate query hook invocation arguments\n const queryInvocationArgs = adapter.generateQueryInvocationArgs({\n props,\n queryOptionsFnName,\n queryProperties,\n isRequestOptions,\n mutator,\n operationPrefix,\n type,\n queryOptionsVarName,\n optionalQueryClientArgument,\n });\n\n const queryInvocationSuffix = adapter.getQueryInvocationSuffix();\n\n return `\n${queryOptionsFn}\n\nexport type ${pascal(\n name,\n )}QueryResult = NonNullable<Awaited<ReturnType<${dataType}>>>\nexport type ${pascal(name)}QueryError = ${errorType}\n\n${adapter.shouldGenerateOverrideTypes() ? overrideTypes : ''}\n${doc}\nexport function ${queryHookName}<TData = ${TData}, TError = ${errorType}>(\\n ${wrapPropsBodyWithMutatorBodyType(\n {\n propsString: adapter.getHookPropsDefinitions(props),\n body,\n mutator,\n },\n )} ${queryArguments} ${optionalQueryClientArgument} \\n ): ${returnType} {\n\n ${queryInit}\n\n const ${queryResultVarName} = ${camel(\n `${operationPrefix}-${adapter.getQueryType(type)}`,\n )}(${queryInvocationArgs}${queryInvocationSuffix})${adapter.shouldCastQueryResult?.() === false ? '' : ` as ${returnType}`};\n\n ${adapter.getQueryReturnStatement({\n hasQueryV5,\n hasQueryV5WithDataTagError,\n queryResultVarName,\n queryOptionsVarName,\n })}\n}\\n\n${prefetch}\n${\n shouldGenerateInvalidate\n ? `${doc}export const ${invalidateFnName} = async (\\n queryClient: QueryClient, ${queryProps} options?: InvalidateOptions\\n ): Promise<QueryClient> => {\n\n await queryClient.invalidateQueries({ queryKey: ${invalidateQueryKeyExpr} }, options);\n\n return queryClient;\n}\\n`\n : ''\n}\n${\n shouldGenerateSetQueryData\n ? renderSetQueryDataHelper({\n doc,\n isReactQuery,\n fnName: setQueryDataFnName,\n propsSig: `${setQueryDataProps}updater: ${TData} | undefined | ((old: ${TData} | undefined) => ${TData} | undefined)`,\n body: `queryClient.setQueriesData<${TData}>({ queryKey: ${setQueryDataKeyExpr} }, updater);`,\n })\n : ''\n}\n${\n shouldGenerateGetQueryData\n ? isReactQuery\n ? `${doc}export const ${getQueryDataFnName} = () => {\n const queryClient = useQueryClient();\n return (${getQueryDataProps}) =>\n queryClient.getQueryData<${TData}>(${setQueryDataKeyExpr});\n}\\n`\n : `${doc}export const ${getQueryDataFnName} = (queryClient: QueryClient, ${getQueryDataProps}) =>\n queryClient.getQueryData<${TData}>(${setQueryDataKeyExpr});\\n`\n : ''\n}\n`;\n};\n\nexport const generateQueryHook = async (\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n outputClient: OutputClient | OutputClientFunc,\n adapter?: FrameworkAdapter,\n) => {\n if (!adapter) {\n throw new Error('FrameworkAdapter is required for generateQueryHook');\n }\n\n const {\n queryParams,\n operationName,\n body,\n props: _props,\n verb,\n params,\n override,\n mutator,\n response,\n operationId,\n summary,\n deprecated,\n } = verbOptions;\n const {\n route,\n override: { operations },\n context,\n output,\n } = options;\n\n // Use adapter to transform props (Vue wraps with MaybeRef)\n const props = adapter.transformProps(_props);\n\n const query = override.query;\n const isRequestOptions = override.requestOptions !== false;\n const operationQueryOptions = operations[operationId]?.query;\n const isExactOptionalPropertyTypes =\n !!context.output.tsconfig?.compilerOptions?.exactOptionalPropertyTypes;\n\n const httpClient = context.output.httpClient;\n const doc = jsDoc({ summary, deprecated });\n\n let implementation = '';\n let mutators: GeneratorMutator[] | undefined;\n\n // Precedence: per-operation override > global > per-verb default.\n // `?? false` lets per-op `false` actually disable a globally enabled\n // hook (the previous `[…].some(Boolean)` masked op-level false).\n const effectiveUseQuery =\n operationQueryOptions?.useQuery ??\n override.query.useQuery ??\n verb === Verbs.GET;\n const effectiveUseMutation =\n operationQueryOptions?.useMutation ??\n override.query.useMutation ??\n verb !== Verbs.GET;\n\n // Suspense / Infinite have no per-verb default; global is GET-only,\n // per-op overrides bypass that restriction in either direction.\n const globalSuspenseOrInfiniteOnlyForGet = (\n flag: boolean | undefined,\n ): boolean => flag === true && verb === Verbs.GET;\n const effectiveUseSuspenseQuery =\n operationQueryOptions?.useSuspenseQuery ??\n globalSuspenseOrInfiniteOnlyForGet(override.query.useSuspenseQuery);\n const hasConfiguredInfiniteQueryParam =\n !query.useInfiniteQueryParam ||\n hasQueryParam(queryParams, query.useInfiniteQueryParam);\n const effectiveUseInfinite =\n (operationQueryOptions?.useInfinite ??\n globalSuspenseOrInfiniteOnlyForGet(override.query.useInfinite)) &&\n hasConfiguredInfiniteQueryParam;\n const effectiveUseSuspenseInfiniteQuery =\n (operationQueryOptions?.useSuspenseInfiniteQuery ??\n globalSuspenseOrInfiniteOnlyForGet(\n override.query.useSuspenseInfiniteQuery,\n )) &&\n hasConfiguredInfiniteQueryParam;\n\n let isQuery =\n effectiveUseQuery ||\n effectiveUseSuspenseQuery ||\n effectiveUseInfinite ||\n effectiveUseSuspenseInfiniteQuery;\n\n // No verb gate here: `effectiveUseMutation` already encodes the\n // per-verb default (`verb !== Verbs.GET`), so an explicit\n // `useMutation: true` — global or per-operation — must be honoured for\n // GET operations too, mirroring how `isQuery` honours `useQuery: true`\n // for non-GET verbs (#3358).\n let isMutation = effectiveUseMutation;\n\n // If both query and mutation are true for a non-GET operation, prioritize query\n if (verb !== Verbs.GET && isQuery) {\n isMutation = false;\n }\n\n // If both query and mutation are true for a GET operation, prioritize mutation\n if (verb === Verbs.GET && isMutation) {\n isQuery = false;\n }\n\n // Warn when an operation referenced by a `mutationInvalidates` rule's\n // `onMutations` list is generated as a Query (or no hook at all). The rule\n // is wired up in mutation-generator and only fires for Mutation hooks, so\n // referencing a Query-emitted operation is a silent no-op — surface that\n // misconfiguration explicitly.\n const conflictWarning = getMutationInvalidatesConflictWarning({\n operationName,\n isMutation,\n isQuery,\n mutationInvalidates: override.query.mutationInvalidates,\n });\n if (conflictWarning) {\n logWarning(conflictWarning);\n }\n\n if (isQuery) {\n const queryKeyMutator = query.queryKey\n ? await generateMutator({\n output,\n mutator: query.queryKey,\n name: `${operationName}QueryKey`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n const queryOptionsMutator = query.queryOptions\n ? await generateMutator({\n output,\n mutator: query.queryOptions,\n name: `${operationName}QueryOptions`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n // Use adapter to determine how to map props to query properties\n const queryProperties = props\n .map((param) => {\n return adapter.getQueryPropertyForProp(param, body);\n })\n .join(',');\n\n const queryKeyProperties = props\n .filter((prop) => prop.type !== GetterPropType.HEADER)\n .map((param) => {\n return adapter.getQueryPropertyForProp(param, body);\n })\n .join(',');\n\n const queries = [\n ...(effectiveUseInfinite\n ? [\n {\n name: camel(`${operationName}-infinite`),\n options: query.options,\n type: QueryType.INFINITE,\n queryParam: query.useInfiniteQueryParam,\n queryKeyFnName: camel(`get-${operationName}-infinite-query-key`),\n },\n ]\n : []),\n ...(effectiveUseQuery\n ? [\n {\n name: operationName,\n options: query.options,\n type: QueryType.QUERY,\n queryKeyFnName: camel(`get-${operationName}-query-key`),\n },\n ]\n : []),\n ...(effectiveUseSuspenseQuery\n ? [\n {\n name: camel(`${operationName}-suspense`),\n options: query.options,\n type: QueryType.SUSPENSE_QUERY,\n queryKeyFnName: camel(`get-${operationName}-query-key`),\n },\n ]\n : []),\n ...(effectiveUseSuspenseInfiniteQuery\n ? [\n {\n name: camel(`${operationName}-suspense-infinite`),\n options: query.options,\n type: QueryType.SUSPENSE_INFINITE,\n queryParam: query.useInfiniteQueryParam,\n queryKeyFnName: camel(`get-${operationName}-infinite-query-key`),\n },\n ]\n : []),\n ];\n\n const uniqueQueryOptionsByKeys = queries.filter(\n (obj, index, self) =>\n index ===\n self.findIndex((t) => t.queryKeyFnName === obj.queryKeyFnName),\n );\n\n let queryKeyFns = '';\n\n if (!queryKeyMutator) {\n for (const queryOption of uniqueQueryOptionsByKeys) {\n const queryKeyProps = buildKeyShapedProps({\n props,\n body,\n mutator,\n widenNonPath: makeOptionalParam,\n });\n\n const routeString = adapter.getQueryKeyRouteString(\n route,\n !!override.query.shouldSplitQueryKey,\n );\n\n // Use operation ID as query key if enabled, otherwise use route string\n const queryKeyIdentifier = override.query.useOperationIdAsQueryKey\n ? `\"${operationName}\"`\n : routeString;\n\n // Use all params in query key when useOperationIdAsQueryKey=true, otherwise use only query param\n // All params sorted by required first\n const queryKeyParams = props\n .filter((p) =>\n override.query.useOperationIdAsQueryKey\n ? true\n : p.type === GetterPropType.QUERY_PARAM,\n )\n .toSorted((a) => (a.required ? -1 : 1))\n .map((p) => `...(${p.name} ? [${p.name}] : [])`)\n .join(', ');\n\n const verbPrefix = getQueryKeyVerbPrefix({\n verb,\n useOperationIdAsQueryKey: override.query.useOperationIdAsQueryKey,\n });\n\n // Note: do not unref() params in Vue - this will make key lose reactivity\n queryKeyFns += `\n${override.query.shouldExportQueryKey ? 'export ' : ''}const ${queryOption.queryKeyFnName} = (${queryKeyProps}) => {\n return [\n ${[\n queryOption.type === QueryType.INFINITE ||\n queryOption.type === QueryType.SUSPENSE_INFINITE\n ? `'infinite'`\n : '',\n verbPrefix ? `'${verbPrefix}'` : '',\n queryKeyIdentifier,\n queryKeyParams,\n body.implementation,\n ]\n .filter((x) => !!x)\n .join(', ')}\n ]${override.query.shouldFilterQueryKey ? `.filter(${override.query.queryKeyFilter ?? 'q => q !== undefined'})` : ' as const'};\n }\n`;\n }\n }\n\n implementation += `\n${queryKeyFns}`;\n\n let queryImplementations = '';\n\n for (const queryOption of queries) {\n queryImplementations += generateQueryImplementation({\n queryOption,\n operationId,\n operationName,\n queryProperties,\n queryKeyProperties,\n params,\n props,\n body,\n mutator,\n isRequestOptions,\n queryParams,\n response,\n httpClient,\n isExactOptionalPropertyTypes,\n hasSignal: getHasSignal({\n overrideQuerySignal: override.query.signal,\n }),\n useRuntimeFetcher: override.fetch.useRuntimeFetcher,\n forceSuccessResponse: override.fetch.forceSuccessResponse,\n queryOptionsMutator,\n queryKeyMutator,\n route,\n doc,\n usePrefetch: query.usePrefetch,\n useQuery: effectiveUseQuery,\n useInfinite: effectiveUseInfinite,\n useInvalidate: query.useInvalidate,\n useSetQueryData:\n operationQueryOptions?.useSetQueryData ?? query.useSetQueryData,\n useGetQueryData:\n operationQueryOptions?.useGetQueryData ?? query.useGetQueryData,\n adapter,\n });\n }\n\n implementation += `\n ${queryImplementations}\n`;\n\n mutators =\n queryOptionsMutator || queryKeyMutator\n ? [\n ...(queryOptionsMutator ? [queryOptionsMutator] : []),\n ...(queryKeyMutator ? [queryKeyMutator] : []),\n ]\n : undefined;\n }\n\n let imports: GeneratorImport[] = [];\n\n if (isMutation) {\n const mutationResult = await generateMutationHook({\n verbOptions: { ...verbOptions, props },\n options,\n isRequestOptions,\n httpClient,\n doc,\n adapter,\n });\n\n implementation += mutationResult.implementation;\n mutators = mutationResult.mutators\n ? [...(mutators ?? []), ...mutationResult.mutators]\n : mutators;\n imports = mutationResult.imports;\n }\n\n return {\n implementation,\n mutators,\n imports,\n };\n};\n","import {\n type ClientBuilder,\n type ClientDependenciesBuilder,\n type ClientHeaderBuilder,\n generateVerbImports,\n mergeDeep,\n type NormalizedOutputOptions,\n OutputHttpClient,\n type QueryOptions,\n} from '@orval/core';\n\nimport { getQueryHeader } from './client';\nimport {\n getAngularQueryDependencies,\n getReactQueryDependencies,\n getSolidQueryDependencies,\n getSvelteQueryDependencies,\n getVueQueryDependencies,\n} from './dependencies';\nimport { createFrameworkAdapter } from './frameworks';\nimport { generateQueryHook } from './query-generator';\nimport { normalizeQueryOptions } from './utils';\n\nexport {\n getAngularQueryDependencies,\n getReactQueryDependencies,\n getSolidQueryDependencies,\n getSvelteQueryDependencies,\n getVueQueryDependencies,\n} from './dependencies';\n\n// Lazy-getter merge helper emitted once per file for the react-query client.\n// It attaches `queryKey` to the hook result without spreading it (which would\n// read every tracked field and over-subscribe the consumer) or mutating it\n// (which react-compiler forbids). Each field is re-exposed as an own getter so\n// React Query v5's per-property tracking still fires only for fields the\n// consumer actually reads. See #3573.\nconst WITH_QUERY_KEY_HELPER = `const withQueryKey = <T extends object, K>(query: T, queryKey: K): T & { queryKey: K } => {\n const result = { queryKey } as T & { queryKey: K };\n for (const key of Object.keys(query)) {\n // The explicit queryKey always wins, matching the previous\n // \\`{ ...query, queryKey }\\` spread where it was set last.\n if (key === 'queryKey') continue;\n Object.defineProperty(result, key, {\n enumerable: true,\n configurable: true,\n get: () => (query as Record<string, unknown>)[key],\n });\n }\n return result;\n};`;\n\nexport const generateQueryHeader: ClientHeaderBuilder = (params) => {\n const needsWithQueryKey =\n params.clientImplementation.includes('withQueryKey(');\n\n const innerHeader = getQueryHeader(params);\n const innerImpl =\n typeof innerHeader === 'string' ? innerHeader : innerHeader.implementation;\n const innerSharedTypes =\n typeof innerHeader === 'string' ? undefined : innerHeader.sharedTypes;\n\n const ownImplementation = `${\n params.hasAwaitedType\n ? ''\n : `type AwaitedInput<T> = PromiseLike<T> | T;\\n\n type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;\\n\\n`\n }\n${\n params.isRequestOptions && params.isMutator\n ? `type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\\n\\n`\n : ''\n}\n${innerImpl}\n${needsWithQueryKey ? `${WITH_QUERY_KEY_HELPER}\\n\\n` : ''}`;\n\n if (innerSharedTypes && innerSharedTypes.length > 0) {\n return {\n implementation: ownImplementation,\n sharedTypes: innerSharedTypes,\n };\n }\n\n return ownImplementation;\n};\n\nexport const generateQuery: ClientBuilder = async (\n verbOptions,\n options,\n outputClient,\n) => {\n const isZodOutput =\n typeof options.context.output.schemas === 'object' &&\n options.context.output.schemas.type === 'zod';\n const responseType = verbOptions.response.definition.success;\n const isPrimitiveResponse = [\n 'string',\n 'number',\n 'boolean',\n 'void',\n 'unknown',\n ].includes(responseType);\n const shouldUseRuntimeValidation =\n verbOptions.override.query.runtimeValidation && isZodOutput;\n\n const normalizedVerbOptions =\n shouldUseRuntimeValidation &&\n !isPrimitiveResponse &&\n verbOptions.response.imports.some((imp) => imp.name === responseType)\n ? {\n ...verbOptions,\n response: {\n ...verbOptions.response,\n imports: verbOptions.response.imports.map((imp) =>\n imp.name === responseType ? { ...imp, values: true } : imp,\n ),\n },\n }\n : verbOptions;\n\n const adapter = createFrameworkAdapter({\n outputClient,\n packageJson: options.context.output.packageJson,\n queryVersion: normalizedVerbOptions.override.query.version,\n });\n\n const imports = generateVerbImports(normalizedVerbOptions);\n const functionImplementation = adapter.generateRequestFunction(\n normalizedVerbOptions,\n options,\n );\n const {\n implementation: hookImplementation,\n imports: hookImports,\n mutators,\n } = await generateQueryHook(\n normalizedVerbOptions,\n options,\n outputClient,\n adapter,\n );\n\n const isFetchHttpClient =\n options.context.output.httpClient !== OutputHttpClient.AXIOS;\n\n return {\n implementation: `${functionImplementation}\\n\\n${hookImplementation}`,\n imports: [...imports, ...hookImports],\n mutators,\n ...(isFetchHttpClient && { docComment: '' }),\n };\n};\n\nconst dependenciesBuilder: Record<\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query',\n ClientDependenciesBuilder\n> = {\n 'react-query': getReactQueryDependencies,\n 'vue-query': getVueQueryDependencies,\n 'svelte-query': getSvelteQueryDependencies,\n 'angular-query': getAngularQueryDependencies,\n 'solid-query': getSolidQueryDependencies,\n};\n\nexport const builder =\n ({\n type = 'react-query',\n options: queryOptions,\n output,\n }: {\n type?:\n | 'react-query'\n | 'vue-query'\n | 'svelte-query'\n | 'angular-query'\n | 'solid-query';\n options?: QueryOptions;\n output?: NormalizedOutputOptions;\n } = {}) =>\n () => {\n const client: ClientBuilder = (verbOptions, options, outputClient) => {\n if (\n options.override.useNamedParameters &&\n (type === 'vue-query' || outputClient === 'vue-query')\n ) {\n throw new Error(\n `vue-query client does not support named parameters, and had broken reactivity previously, please set useNamedParameters to false; See for context: https://github.com/orval-labs/orval/pull/931#issuecomment-1752355686`,\n );\n }\n\n if (queryOptions) {\n const normalizedQueryOptions = normalizeQueryOptions(\n queryOptions,\n options.context.workspace,\n );\n verbOptions.override.query = mergeDeep(\n normalizedQueryOptions,\n verbOptions.override.query,\n );\n options.override.query = mergeDeep(\n normalizedQueryOptions,\n verbOptions.override.query,\n );\n }\n return generateQuery(verbOptions, options, outputClient, output);\n };\n\n return {\n client: client,\n header: generateQueryHeader,\n dependencies: dependenciesBuilder[type],\n };\n };\n\nexport default builder;\n"],"mappings":"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"}