@orval/query 8.11.0 → 8.12.2

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.
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { GetterPropType, OutputClient, OutputHttpClient, TEMPLATE_TAG_REGEX, Verbs, camel, compareVersions, generateFormDataAndUrlEncodedFunction, generateMutator, generateMutatorConfig, generateMutatorRequestOptions, generateOptions, generateVerbImports, getAngularFilteredParamsCallExpression, getAngularFilteredParamsHelperBody, getRouteAsArray, getSuccessResponseType, isObject, isString, isSyntheticDefaultImportsAllow, jsDoc, kebab, logWarning, mergeDeep, pascal, stringify, toObjectString } from "@orval/core";
1
+ import { GetterPropType, OutputClient, OutputHttpClient, Verbs, camel, compareVersions, generateFormDataAndUrlEncodedFunction, generateMutator, generateMutatorConfig, generateMutatorRequestOptions, generateOptions, generateVerbImports, getAngularFilteredParamsCallExpression, getAngularFilteredParamsHelperBody, getRouteAsArray, getSuccessResponseType, isObject, isString, isSyntheticDefaultImportsAllow, jsDoc, kebab, logWarning, makeRouteSafe, mergeDeep, pascal, stringify, toObjectString } from "@orval/core";
2
2
  import { generateFetchHeader, generateRequestFunction } from "@orval/fetch";
3
3
  import nodePath from "node:path";
4
4
  import { styleText } from "node:util";
@@ -64,8 +64,6 @@ const vueUnRefParams = (props) => {
64
64
  return `${prop.name} = unref(${prop.name});`;
65
65
  }).join("\n");
66
66
  };
67
- const wrapRouteParameters = (route, prepend, append) => route.replaceAll(TEMPLATE_TAG_REGEX, `\${${prepend}$1${append}}`);
68
- const makeRouteSafe = (route) => wrapRouteParameters(route, "encodeURIComponent(String(", "))");
69
67
  const getQueryTypeForFramework = (type) => {
70
68
  switch (type) {
71
69
  case "suspenseQuery": return "query";
@@ -975,10 +973,10 @@ const createAngularAdapter = ({ hasQueryV5, hasQueryV5WithDataTagError, hasQuery
975
973
  if (!hasMutator) return queryProperties ? `http, ${queryProperties}` : "http";
976
974
  return queryProperties;
977
975
  },
978
- getInfiniteQueryHttpProps(props, queryParam, hasMutator) {
976
+ getInfiniteQueryHttpProps(props, queryParam, _httpClient, hasMutator) {
979
977
  let result = props.map((param) => {
980
978
  if (param.type === GetterPropType.NAMED_PATH_PARAMS) return param.destructured;
981
- return param.name === "params" ? `{...params, '${queryParam}': pageParam || params?.['${queryParam}']}` : param.name;
979
+ return param.name === "params" ? `{...params, '${queryParam}': pageParam ?? params?.['${queryParam}']}` : param.name;
982
980
  }).join(",");
983
981
  if (!hasMutator) result = result ? `http, ${result}` : "http";
984
982
  return result;
@@ -1319,9 +1317,10 @@ const createVueAdapter = ({ hasVueQueryV4, hasQueryV5, hasQueryV5WithDataTagErro
1319
1317
  if (httpClient === OutputHttpClient.FETCH && queryProperties) return queryProperties.split(",").map((prop) => `unref(${prop})`).join(",");
1320
1318
  return queryProperties;
1321
1319
  },
1322
- getInfiniteQueryHttpProps(props, queryParam) {
1320
+ getInfiniteQueryHttpProps(props, queryParam, httpClient) {
1323
1321
  return props.map((param) => {
1324
- return param.name === "params" ? `{...unref(params), '${queryParam}': pageParam || unref(params)?.['${queryParam}']}` : param.name;
1322
+ if (param.name === "params") return `{...unref(params), '${queryParam}': pageParam ?? unref(params)?.['${queryParam}']}`;
1323
+ return httpClient === OutputHttpClient.FETCH ? `unref(${param.name})` : param.name;
1325
1324
  }).join(",");
1326
1325
  },
1327
1326
  getQueryReturnType({ type }) {
@@ -1414,7 +1413,7 @@ const withDefaults = (adapter) => ({
1414
1413
  getInfiniteQueryHttpProps(props, queryParam) {
1415
1414
  return props.map((param) => {
1416
1415
  if (param.type === GetterPropType.NAMED_PATH_PARAMS) return param.destructured;
1417
- return param.name === "params" ? `{...params, '${queryParam}': pageParam || params?.['${queryParam}']}` : param.name;
1416
+ return param.name === "params" ? `{...params, '${queryParam}': pageParam ?? params?.['${queryParam}']}` : param.name;
1418
1417
  }).join(",");
1419
1418
  },
1420
1419
  generateQueryInit({ queryOptionsFnName, queryProperties, isRequestOptions }) {
@@ -1956,7 +1955,7 @@ const generateQueryImplementation = ({ queryOption: { name, queryParam, options,
1956
1955
  mutator
1957
1956
  });
1958
1957
  const hasInfiniteQueryParam = queryParam && queryParams?.schema.name;
1959
- const httpFunctionProps = queryParam ? adapter.getInfiniteQueryHttpProps(props, queryParam, !!mutator) : adapter.getHttpFunctionQueryProps(queryProperties, httpClient, !!mutator);
1958
+ const httpFunctionProps = queryParam ? adapter.getInfiniteQueryHttpProps(props, queryParam, httpClient, !!mutator) : adapter.getHttpFunctionQueryProps(queryProperties, httpClient, !!mutator);
1960
1959
  const definedInitialDataReturnType = adapter.getQueryReturnType({
1961
1960
  type,
1962
1961
  isMutatorHook: mutator?.isHook,
@@ -2077,7 +2076,7 @@ ${hookOptions}
2077
2076
 
2078
2077
  ${adapter.getUnrefStatements(props)}
2079
2078
 
2080
- ${queryOptionsMutator ? `const customOptions = ${queryOptionsMutator.name}({...queryOptions, queryKey, queryFn}${queryOptionsMutator.hasSecondArg ? `, { ${queryProperties} }` : ""}${queryOptionsMutator.hasThirdArg ? `, { url: \`${route}\` }` : ""});` : ""}
2079
+ ${queryOptionsMutator ? `const customOptions = ${queryOptionsMutator.name}({ queryKey, queryFn, ${queryOptionsImp}}${queryOptionsMutator.hasSecondArg ? `, { ${queryProperties} }` : ""}${queryOptionsMutator.hasThirdArg ? `, { url: \`${route}\` }` : ""});` : ""}
2081
2080
 
2082
2081
  return ${queryOptionsMutator ? "customOptions" : `{ queryKey, queryFn, ${queryOptionsImp}}`}${adapter.shouldCastQueryOptions?.() === false ? "" : ` as ${queryOptionFnReturnType} ${adapter.shouldAnnotateQueryKey() ? `& { queryKey: ${hasQueryV5 ? `DataTag<QueryKey, TData${hasQueryV5WithDataTagError ? ", TError" : ""}>` : "QueryKey"} }` : ""}`}
2083
2082
  }`;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["generateFetchRequestFunction","generateFetchRequestFunction","generateFetchRequestFunction","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 OutputClient,\n type OutputClientFunc,\n type QueryOptions,\n TEMPLATE_TAG_REGEX,\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.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 wrapRouteParameters = (\n route: string,\n prepend: string,\n append: string,\n): string => route.replaceAll(TEMPLATE_TAG_REGEX, `\\${${prepend}$1${append}}`);\n\nexport const makeRouteSafe = (route: string): string =>\n wrapRouteParameters(route, 'encodeURIComponent(String(', '))');\n\nexport const isVue = (client: OutputClient | OutputClientFunc) =>\n OutputClient.VUE_QUERY === client;\n\nexport const isSolid = (client: OutputClient | OutputClientFunc) =>\n OutputClient.SOLID_QUERY === client;\n\nexport const isAngular = (client: OutputClient | OutputClientFunc) =>\n OutputClient.ANGULAR_QUERY === client;\n\nexport const isReact = (client: OutputClient | OutputClientFunc) =>\n OutputClient.REACT_QUERY === client;\n\nexport const isSvelte = (client: OutputClient | OutputClientFunc) =>\n OutputClient.SVELTE_QUERY === client;\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 isSyntheticDefaultImportsAllow,\n kebab,\n OutputHttpClient,\n pascal,\n toObjectString,\n} from '@orval/core';\nimport {\n generateFetchHeader,\n generateRequestFunction as generateFetchRequestFunction,\n} from '@orval/fetch';\n\nimport {\n getHasSignal,\n makeRouteSafe,\n vueUnRefParams,\n vueWrapTypeWithMaybeRef,\n} 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 generateQueryRequestFunction = (\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n isVue: boolean,\n isAngularClient = false,\n) => {\n if (\n isAngularClient ||\n options.context.output.httpClient === OutputHttpClient.ANGULAR\n ) {\n return generateAngularHttpRequestFunction(verbOptions, options);\n }\n return options.context.output.httpClient === OutputHttpClient.AXIOS\n ? generateAxiosRequestFunction(verbOptions, options, isVue)\n : generateFetchRequestFunction(verbOptions, options);\n};\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, context }: GeneratorOptions,\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 isVue: false,\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 isVue: boolean,\n) => {\n let props = _props;\n let route = _route;\n\n if (isVue) {\n props = vueWrapTypeWithMaybeRef(_props);\n }\n\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 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 isVue,\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 ret = `${\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 useCallback((\\n ${propsImplementation}\\n ${\n isRequestOptions && mutator.hasSecondArg\n ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter<ReturnType<typeof ${mutator.name}>>,`\n : ''\n }${getSignalDefinition({ hasSignal, hasSignalParam })}) => {${bodyForm}\n return ${operationName}(\n ${mutatorConfig},\n ${requestOptions});\n }, [${operationName}])\n }\n `;\n\n const vueRet = `${\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 (\\n ${propsImplementation}\\n ${\n isRequestOptions && mutator.hasSecondArg\n ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter<ReturnType<typeof ${mutator.name}>>,`\n : ''\n }${getSignalDefinition({ hasSignal, hasSignalParam })}) => {${bodyForm}\n return ${operationName}(\n ${mutatorConfig},\n ${requestOptions});\n }\n }\n `;\n\n return isVue ? vueRet : ret;\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 ${isVue ? vueUnRefParams(props) : ''}\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 isVue: isVue,\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 ${isVue ? vueUnRefParams(props) : ''}\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) => {\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 } else {\n return httpClient === OutputHttpClient.AXIOS\n ? `AxiosError<${errorsType}>`\n : errorsType;\n }\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 getHttpFunctionQueryProps = (\n isVue: boolean,\n httpClient: OutputHttpClient,\n queryProperties: string,\n isAngular = false,\n hasMutator = false,\n) => {\n const result =\n isVue && httpClient === OutputHttpClient.FETCH && queryProperties\n ? queryProperties\n .split(',')\n .map((prop) => `unref(${prop})`)\n .join(',')\n : queryProperties;\n\n // For Angular, prefix with http since request functions take HttpClient as first param\n // Skip when custom mutator is used - mutator handles HTTP client internally\n // http is required as first param so no assertion needed\n if ((isAngular || httpClient === OutputHttpClient.ANGULAR) && !hasMutator) {\n return result ? `http, ${result}` : 'http';\n }\n\n return result;\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 = params.tag\n ? Object.values(params.verbOptions).filter(\n (verbOption) => kebab(verbOption.tags[0] ?? 'default') === params.tag,\n )\n : Object.values(params.verbOptions);\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\nexport const REACT_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n {\n name: 'useCallback',\n values: true,\n },\n ],\n dependency: 'react',\n },\n];\n\nexport const 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: 'UseQueryOptions' },\n { name: 'UseInfiniteQueryOptions' },\n { name: 'UseMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\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};\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 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 {\n type GeneratorOptions,\n type GeneratorVerbOptions,\n OutputClient,\n OutputHttpClient,\n pascal,\n} from '@orval/core';\nimport { generateRequestFunction as generateFetchRequestFunction } from '@orval/fetch';\n\nimport { generateAxiosRequestFunction } from '../client';\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 return `return { ...${queryResultVarName}, queryKey: ${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 generateRequestFunction(\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n ): string {\n return options.context.output.httpClient === OutputHttpClient.AXIOS\n ? generateAxiosRequestFunction(verbOptions, options, false)\n : generateFetchRequestFunction(verbOptions, options);\n },\n});\n","import {\n type GeneratorOptions,\n type GeneratorVerbOptions,\n OutputClient,\n OutputHttpClient,\n} from '@orval/core';\nimport { generateRequestFunction as generateFetchRequestFunction } from '@orval/fetch';\n\nimport { generateAxiosRequestFunction } from '../client';\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 // Use Object.assign to attach queryKey to the result and cast to any to satisfy TypeScript\n // The type is properly enforced by the function signature\n return `return Object.assign(${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 generateRequestFunction(\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n ): string {\n return options.context.output.httpClient === OutputHttpClient.AXIOS\n ? generateAxiosRequestFunction(verbOptions, options, false)\n : generateFetchRequestFunction(verbOptions, options);\n },\n});\n","import {\n type GeneratorOptions,\n type GeneratorVerbOptions,\n type GetterProps,\n OutputClient,\n OutputHttpClient,\n pascal,\n toObjectString,\n} from '@orval/core';\nimport { generateRequestFunction as generateFetchRequestFunction } from '@orval/fetch';\n\nimport {\n generateAxiosRequestFunction,\n getQueryArgumentsRequestType,\n} 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 generateRequestFunction(\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n ): string {\n return options.context.output.httpClient === OutputHttpClient.AXIOS\n ? generateAxiosRequestFunction(verbOptions, options, false)\n : generateFetchRequestFunction(verbOptions, options);\n },\n };\n};\n","import {\n type GeneratorOptions,\n type GeneratorVerbOptions,\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';\nimport { generateRequestFunction as generateFetchRequestFunction } from '@orval/fetch';\n\nimport { generateAxiosRequestFunction } from '../client';\nimport type {\n FrameworkAdapterConfig,\n MutationHookBodyContext,\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(props: GetterProps, queryParam: string): string {\n return props\n .map((param) => {\n // Vue does NOT destructure named path params (keeps param.name)\n return param.name === 'params'\n ? `{...unref(params), '${queryParam}': pageParam || unref(params)?.['${queryParam}']}`\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 getUnrefStatements(props: GetterProps): string {\n return vueUnRefParams(\n props.filter((prop) => prop.type === GetterPropType.NAMED_PATH_PARAMS),\n );\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 isRequestOptions,\n }): string {\n return `${mutationOptionsFnName}(${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n },\n\n supportsMutationInvalidation(): boolean {\n // Vue is NOT in the list: isAngularClient || isReact(outputClient) || isSvelte(outputClient)\n return false;\n },\n\n generateMutationOnSuccess(): string {\n return '';\n },\n\n generateMutationHookBody({\n operationPrefix,\n mutationImplementation,\n optionalQueryClientArgument,\n }: MutationHookBodyContext): string {\n return ` return ${operationPrefix}Mutation(${mutationImplementation}${optionalQueryClientArgument ? `, queryClient` : ''});`;\n },\n\n generateRequestFunction(\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n ): string {\n return options.context.output.httpClient === OutputHttpClient.AXIOS\n ? generateAxiosRequestFunction(verbOptions, options, true)\n : generateFetchRequestFunction(verbOptions, options);\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 type PackageJson,\n toObjectString,\n} from '@orval/core';\n\nimport { getQueryArgumentsRequestType } 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 // --- Original defaults (false / empty string) ---\n isAngularHttp: false,\n getHttpFirstParam: () => '',\n getMutationHttpPrefix: () => '',\n getUnrefStatements: () => '',\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(prop: GetterProp, body: { implementation: string }) {\n if (prop.type === GetterPropType.NAMED_PATH_PARAMS)\n return prop.destructured;\n return prop.type === GetterPropType.BODY ? body.implementation : prop.name;\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({ queryOptionsFnName, queryProperties, isRequestOptions }) {\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 adapter.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 = adapter.getQueryOptionsDefinitionPrefix?.() ?? 'Use';\n const definition = getQueryOptionsDefinition({\n operationName,\n mutator,\n definitions,\n type,\n prefix,\n hasQueryV5: adapter.hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError:\n adapter.hasQueryV5WithInfiniteQueryOptionsError,\n queryParams,\n queryParam,\n isReturnType: false,\n initialData,\n adapter: adapter as FrameworkAdapter,\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 (adapter.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${adapter.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${adapter.hasQueryV5WithRequiredContextOnSuccess ? '' : ' | undefined'}) => {\n ${invalidateCalls}\n mutationOptions?.onSuccess?.(data, variables, context);\n };`;\n }\n },\n ...adapter,\n});\n\nexport type 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 type InvalidateTarget,\n type InvalidateTargetParam,\n isString,\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\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\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 * 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) => {\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 // 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.\n const segments = prefix\n .split('/')\n .filter((s) => s !== '')\n .map((s) => `'${s}'`)\n .join(', ');\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 if (verbPrefix) {\n return ` queryClient.${method}({ predicate: (query) => query.queryKey[0] === '${verbPrefix}' && typeof query.queryKey[1] === 'string' && query.queryKey[1].startsWith('${prefix}') });`;\n }\n return ` queryClient.${method}({ predicate: (query) => typeof query.queryKey[0] === 'string' && query.queryKey[0].startsWith('${prefix}') });`;\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 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 errorType = getQueryErrorType(\n operationName,\n response,\n httpClient,\n mutator,\n );\n\n const dataType = mutator?.isHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`;\n\n const mutationOptionFnReturnType = getQueryOptionsDefinition({\n operationName,\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,\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,\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 ${operationName} = 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 ${operationName}(${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 ),\n uniqueInvalidates,\n })\n : ''\n}\n\n ${\n mutationOptionsMutator\n ? `const customOptions = ${\n mutationOptionsMutator.name\n }({...mutationOptions, mutationFn}${\n mutationOptionsMutator.hasSecondArg\n ? `, { url: \\`${route.replaceAll('/${', '/{')}\\` }`\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 implementation = `\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\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 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 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 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 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 hasInfiniteQueryParam = queryParam && queryParams?.schema.name;\n\n const httpFunctionProps = queryParam\n ? adapter.getInfiniteQueryHttpProps(props, queryParam, !!mutator)\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 );\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 =\n queryParams && queryParam\n ? `, ${queryParams.schema.name}['${queryParam}']`\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, ${queryParams.schema.name}['${queryParam}']`\n : ''\n }> = (${queryFnArguments}) => ${operationName}(${httpFunctionProps}${\n httpFunctionProps ? ', ' : ''\n }${queryOptions});\n\n ${adapter.getUnrefStatements(props)}\n\n ${\n queryOptionsMutator\n ? `const customOptions = ${\n queryOptionsMutator.name\n }({...queryOptions, queryKey, queryFn}${\n queryOptionsMutator.hasSecondArg ? `, { ${queryProperties} }` : ''\n }${\n queryOptionsMutator.hasThirdArg ? `, { url: \\`${route}\\` }` : ''\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 ? `, { url: \\`${route}\\` }` : ''\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 effectiveUseInfinite =\n operationQueryOptions?.useInfinite ??\n globalSuspenseOrInfiniteOnlyForGet(override.query.useInfinite);\n const effectiveUseSuspenseInfiniteQuery =\n operationQueryOptions?.useSuspenseInfiniteQuery ??\n globalSuspenseOrInfiniteOnlyForGet(override.query.useSuspenseInfiniteQuery);\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 ] 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 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 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\nexport const generateQueryHeader: ClientHeaderBuilder = (params) => {\n return `${\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${getQueryHeader(params)}\n`;\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","generateFetchRequestFunction","generateFetchRequestFunction","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 OutputClient,\n type OutputClientFunc,\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.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 isVue = (client: OutputClient | OutputClientFunc) =>\n OutputClient.VUE_QUERY === client;\n\nexport const isSolid = (client: OutputClient | OutputClientFunc) =>\n OutputClient.SOLID_QUERY === client;\n\nexport const isAngular = (client: OutputClient | OutputClientFunc) =>\n OutputClient.ANGULAR_QUERY === client;\n\nexport const isReact = (client: OutputClient | OutputClientFunc) =>\n OutputClient.REACT_QUERY === client;\n\nexport const isSvelte = (client: OutputClient | OutputClientFunc) =>\n OutputClient.SVELTE_QUERY === client;\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 isSyntheticDefaultImportsAllow,\n kebab,\n makeRouteSafe,\n OutputHttpClient,\n pascal,\n toObjectString,\n} from '@orval/core';\nimport {\n generateFetchHeader,\n generateRequestFunction as generateFetchRequestFunction,\n} from '@orval/fetch';\n\nimport { getHasSignal, vueUnRefParams, vueWrapTypeWithMaybeRef } 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 generateQueryRequestFunction = (\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n isVue: boolean,\n isAngularClient = false,\n) => {\n if (\n isAngularClient ||\n options.context.output.httpClient === OutputHttpClient.ANGULAR\n ) {\n return generateAngularHttpRequestFunction(verbOptions, options);\n }\n return options.context.output.httpClient === OutputHttpClient.AXIOS\n ? generateAxiosRequestFunction(verbOptions, options, isVue)\n : generateFetchRequestFunction(verbOptions, options);\n};\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, context }: GeneratorOptions,\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 isVue: false,\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 isVue: boolean,\n) => {\n let props = _props;\n let route = _route;\n\n if (isVue) {\n props = vueWrapTypeWithMaybeRef(_props);\n }\n\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 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 isVue,\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 ret = `${\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 useCallback((\\n ${propsImplementation}\\n ${\n isRequestOptions && mutator.hasSecondArg\n ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter<ReturnType<typeof ${mutator.name}>>,`\n : ''\n }${getSignalDefinition({ hasSignal, hasSignalParam })}) => {${bodyForm}\n return ${operationName}(\n ${mutatorConfig},\n ${requestOptions});\n }, [${operationName}])\n }\n `;\n\n const vueRet = `${\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 (\\n ${propsImplementation}\\n ${\n isRequestOptions && mutator.hasSecondArg\n ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter<ReturnType<typeof ${mutator.name}>>,`\n : ''\n }${getSignalDefinition({ hasSignal, hasSignalParam })}) => {${bodyForm}\n return ${operationName}(\n ${mutatorConfig},\n ${requestOptions});\n }\n }\n `;\n\n return isVue ? vueRet : ret;\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 ${isVue ? vueUnRefParams(props) : ''}\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 isVue: isVue,\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 ${isVue ? vueUnRefParams(props) : ''}\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) => {\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 } else {\n return httpClient === OutputHttpClient.AXIOS\n ? `AxiosError<${errorsType}>`\n : errorsType;\n }\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 getHttpFunctionQueryProps = (\n isVue: boolean,\n httpClient: OutputHttpClient,\n queryProperties: string,\n isAngular = false,\n hasMutator = false,\n) => {\n const result =\n isVue && httpClient === OutputHttpClient.FETCH && queryProperties\n ? queryProperties\n .split(',')\n .map((prop) => `unref(${prop})`)\n .join(',')\n : queryProperties;\n\n // For Angular, prefix with http since request functions take HttpClient as first param\n // Skip when custom mutator is used - mutator handles HTTP client internally\n // http is required as first param so no assertion needed\n if ((isAngular || httpClient === OutputHttpClient.ANGULAR) && !hasMutator) {\n return result ? `http, ${result}` : 'http';\n }\n\n return result;\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 = params.tag\n ? Object.values(params.verbOptions).filter(\n (verbOption) => kebab(verbOption.tags[0] ?? 'default') === params.tag,\n )\n : Object.values(params.verbOptions);\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\nexport const REACT_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n {\n name: 'useCallback',\n values: true,\n },\n ],\n dependency: 'react',\n },\n];\n\nexport const 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: 'UseQueryOptions' },\n { name: 'UseInfiniteQueryOptions' },\n { name: 'UseMutationOptions' },\n { name: 'QueryFunction' },\n { name: 'MutationFunction' },\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};\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 {\n type GeneratorOptions,\n type GeneratorVerbOptions,\n OutputClient,\n OutputHttpClient,\n pascal,\n} from '@orval/core';\nimport { generateRequestFunction as generateFetchRequestFunction } from '@orval/fetch';\n\nimport { generateAxiosRequestFunction } from '../client';\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 return `return { ...${queryResultVarName}, queryKey: ${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 generateRequestFunction(\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n ): string {\n return options.context.output.httpClient === OutputHttpClient.AXIOS\n ? generateAxiosRequestFunction(verbOptions, options, false)\n : generateFetchRequestFunction(verbOptions, options);\n },\n});\n","import {\n type GeneratorOptions,\n type GeneratorVerbOptions,\n OutputClient,\n OutputHttpClient,\n} from '@orval/core';\nimport { generateRequestFunction as generateFetchRequestFunction } from '@orval/fetch';\n\nimport { generateAxiosRequestFunction } from '../client';\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 // Use Object.assign to attach queryKey to the result and cast to any to satisfy TypeScript\n // The type is properly enforced by the function signature\n return `return Object.assign(${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 generateRequestFunction(\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n ): string {\n return options.context.output.httpClient === OutputHttpClient.AXIOS\n ? generateAxiosRequestFunction(verbOptions, options, false)\n : generateFetchRequestFunction(verbOptions, options);\n },\n});\n","import {\n type GeneratorOptions,\n type GeneratorVerbOptions,\n type GetterProps,\n OutputClient,\n OutputHttpClient,\n pascal,\n toObjectString,\n} from '@orval/core';\nimport { generateRequestFunction as generateFetchRequestFunction } from '@orval/fetch';\n\nimport {\n generateAxiosRequestFunction,\n getQueryArgumentsRequestType,\n} 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 generateRequestFunction(\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n ): string {\n return options.context.output.httpClient === OutputHttpClient.AXIOS\n ? generateAxiosRequestFunction(verbOptions, options, false)\n : generateFetchRequestFunction(verbOptions, options);\n },\n };\n};\n","import {\n type GeneratorOptions,\n type GeneratorVerbOptions,\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';\nimport { generateRequestFunction as generateFetchRequestFunction } from '@orval/fetch';\n\nimport { generateAxiosRequestFunction } from '../client';\nimport type {\n FrameworkAdapterConfig,\n MutationHookBodyContext,\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 getUnrefStatements(props: GetterProps): string {\n return vueUnRefParams(\n props.filter((prop) => prop.type === GetterPropType.NAMED_PATH_PARAMS),\n );\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 isRequestOptions,\n }): string {\n return `${mutationOptionsFnName}(${\n isRequestOptions ? 'options' : 'mutationOptions'\n })`;\n },\n\n supportsMutationInvalidation(): boolean {\n // Vue is NOT in the list: isAngularClient || isReact(outputClient) || isSvelte(outputClient)\n return false;\n },\n\n generateMutationOnSuccess(): string {\n return '';\n },\n\n generateMutationHookBody({\n operationPrefix,\n mutationImplementation,\n optionalQueryClientArgument,\n }: MutationHookBodyContext): string {\n return ` return ${operationPrefix}Mutation(${mutationImplementation}${optionalQueryClientArgument ? `, queryClient` : ''});`;\n },\n\n generateRequestFunction(\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n ): string {\n return options.context.output.httpClient === OutputHttpClient.AXIOS\n ? generateAxiosRequestFunction(verbOptions, options, true)\n : generateFetchRequestFunction(verbOptions, options);\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 type PackageJson,\n toObjectString,\n} from '@orval/core';\n\nimport { getQueryArgumentsRequestType } 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 // --- Original defaults (false / empty string) ---\n isAngularHttp: false,\n getHttpFirstParam: () => '',\n getMutationHttpPrefix: () => '',\n getUnrefStatements: () => '',\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(prop: GetterProp, body: { implementation: string }) {\n if (prop.type === GetterPropType.NAMED_PATH_PARAMS)\n return prop.destructured;\n return prop.type === GetterPropType.BODY ? body.implementation : prop.name;\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({ queryOptionsFnName, queryProperties, isRequestOptions }) {\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 adapter.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 = adapter.getQueryOptionsDefinitionPrefix?.() ?? 'Use';\n const definition = getQueryOptionsDefinition({\n operationName,\n mutator,\n definitions,\n type,\n prefix,\n hasQueryV5: adapter.hasQueryV5,\n hasQueryV5WithInfiniteQueryOptionsError:\n adapter.hasQueryV5WithInfiniteQueryOptionsError,\n queryParams,\n queryParam,\n isReturnType: false,\n initialData,\n adapter: adapter as FrameworkAdapter,\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 (adapter.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${adapter.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${adapter.hasQueryV5WithRequiredContextOnSuccess ? '' : ' | undefined'}) => {\n ${invalidateCalls}\n mutationOptions?.onSuccess?.(data, variables, context);\n };`;\n }\n },\n ...adapter,\n});\n\nexport type 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 type InvalidateTarget,\n type InvalidateTargetParam,\n isString,\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\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\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 * 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) => {\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 // 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.\n const segments = prefix\n .split('/')\n .filter((s) => s !== '')\n .map((s) => `'${s}'`)\n .join(', ');\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 if (verbPrefix) {\n return ` queryClient.${method}({ predicate: (query) => query.queryKey[0] === '${verbPrefix}' && typeof query.queryKey[1] === 'string' && query.queryKey[1].startsWith('${prefix}') });`;\n }\n return ` queryClient.${method}({ predicate: (query) => typeof query.queryKey[0] === 'string' && query.queryKey[0].startsWith('${prefix}') });`;\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 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 errorType = getQueryErrorType(\n operationName,\n response,\n httpClient,\n mutator,\n );\n\n const dataType = mutator?.isHook\n ? `ReturnType<typeof use${pascal(operationName)}Hook>`\n : `typeof ${operationName}`;\n\n const mutationOptionFnReturnType = getQueryOptionsDefinition({\n operationName,\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,\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,\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 ${operationName} = 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 ${operationName}(${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 ),\n uniqueInvalidates,\n })\n : ''\n}\n\n ${\n mutationOptionsMutator\n ? `const customOptions = ${\n mutationOptionsMutator.name\n }({...mutationOptions, mutationFn}${\n mutationOptionsMutator.hasSecondArg\n ? `, { url: \\`${route.replaceAll('/${', '/{')}\\` }`\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 implementation = `\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\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 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 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 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 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 hasInfiniteQueryParam = queryParam && queryParams?.schema.name;\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 );\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 =\n queryParams && queryParam\n ? `, ${queryParams.schema.name}['${queryParam}']`\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, ${queryParams.schema.name}['${queryParam}']`\n : ''\n }> = (${queryFnArguments}) => ${operationName}(${httpFunctionProps}${\n httpFunctionProps ? ', ' : ''\n }${queryOptions});\n\n ${adapter.getUnrefStatements(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 `const customOptions = ${\n queryOptionsMutator.name\n }({ queryKey, queryFn, ${queryOptionsImp}}${\n queryOptionsMutator.hasSecondArg ? `, { ${queryProperties} }` : ''\n }${\n queryOptionsMutator.hasThirdArg ? `, { url: \\`${route}\\` }` : ''\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 ? `, { url: \\`${route}\\` }` : ''\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 effectiveUseInfinite =\n operationQueryOptions?.useInfinite ??\n globalSuspenseOrInfiniteOnlyForGet(override.query.useInfinite);\n const effectiveUseSuspenseInfiniteQuery =\n operationQueryOptions?.useSuspenseInfiniteQuery ??\n globalSuspenseOrInfiniteOnlyForGet(override.query.useSuspenseInfiniteQuery);\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 ] 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 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 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\nexport const generateQueryHeader: ClientHeaderBuilder = (params) => {\n return `${\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${getQueryHeader(params)}\n`;\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orval/query",
3
- "version": "8.11.0",
3
+ "version": "8.12.2",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -35,8 +35,8 @@
35
35
  "nuke": "rimraf .turbo dist node_modules"
36
36
  },
37
37
  "dependencies": {
38
- "@orval/core": "8.11.0",
39
- "@orval/fetch": "8.11.0",
38
+ "@orval/core": "8.12.2",
39
+ "@orval/fetch": "8.12.2",
40
40
  "remeda": "^2.33.6"
41
41
  },
42
42
  "devDependencies": {