{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import {\n  type ClientBuilder,\n  type ClientDependenciesBuilder,\n  type ClientFooterBuilder,\n  type ClientGeneratorsBuilder,\n  type ClientHeaderBuilder,\n  type ClientTitleBuilder,\n  generateFormDataAndUrlEncodedFunction,\n  generateMutatorConfig,\n  generateMutatorRequestOptions,\n  generateOptions,\n  generateVerbImports,\n  type GeneratorDependency,\n  type GeneratorOptions,\n  type GeneratorVerbOptions,\n  isSyntheticDefaultImportsAllow,\n  pascal,\n  sanitize,\n  toObjectString,\n} from '@orval/core';\n\nconst AXIOS_DEPENDENCIES: GeneratorDependency[] = [\n  {\n    exports: [\n      {\n        name: 'axios',\n        default: true,\n        values: true,\n        syntheticDefaultImport: true,\n      },\n      { name: 'AxiosRequestConfig' },\n      { name: 'AxiosResponse' },\n    ],\n    dependency: 'axios',\n  },\n];\n\nconst PARAMS_SERIALIZER_DEPENDENCIES: GeneratorDependency[] = [\n  {\n    exports: [\n      {\n        name: 'qs',\n        default: true,\n        values: true,\n        syntheticDefaultImport: true,\n      },\n    ],\n    dependency: 'qs',\n  },\n];\n\nconst returnTypesToWrite = new Map<string, (title?: string) => string>();\n\nexport const getAxiosDependencies: ClientDependenciesBuilder = (\n  hasGlobalMutator,\n  hasParamsSerializerOptions: boolean,\n) => [\n  ...(hasGlobalMutator ? [] : AXIOS_DEPENDENCIES),\n  ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n];\n\n// Factory mode needs axios default import (for optional parameter default value)\n// plus AxiosInstance type for the parameter type\n// When using mutator, AxiosInstance is not needed as the mutator handles the axios instance\nexport const getAxiosFactoryDependencies: ClientDependenciesBuilder = (\n  hasGlobalMutator,\n  hasParamsSerializerOptions: boolean,\n  _packageJson,\n  _httpClient,\n  hasTagsMutator,\n) => [\n  {\n    exports: [\n      {\n        name: 'axios',\n        default: true,\n        values: true,\n        syntheticDefaultImport: true,\n      },\n      // Only include AxiosInstance if we're not using a mutator (global or tags)\n      ...(!hasGlobalMutator && !hasTagsMutator\n        ? [{ name: 'AxiosInstance' }]\n        : []),\n      ...(hasGlobalMutator\n        ? []\n        : [{ name: 'AxiosRequestConfig' }, { name: 'AxiosResponse' }]),\n    ],\n    dependency: 'axios',\n  },\n  ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n];\n\nconst generateAxiosImplementation = (\n  {\n    headers,\n    queryParams,\n    operationName,\n    response,\n    mutator,\n    body,\n    props,\n    verb,\n    override,\n    formData,\n    formUrlEncoded,\n    paramsSerializer,\n  }: GeneratorVerbOptions,\n  { route, context }: GeneratorOptions,\n  isFactoryMode = false,\n) => {\n  const isRequestOptions = override.requestOptions !== false;\n  const isFormData = !override.formData.disabled;\n  const isFormUrlEncoded = override.formUrlEncoded !== false;\n  const isExactOptionalPropertyTypes =\n    !!context.output.tsconfig?.compilerOptions?.exactOptionalPropertyTypes;\n\n  const isSyntheticDefaultImportsAllowed = isSyntheticDefaultImportsAllow(\n    context.output.tsconfig,\n  );\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: false,\n      isExactOptionalPropertyTypes,\n    });\n\n    const requestOptions = isRequestOptions\n      ? generateMutatorRequestOptions(\n          override.requestOptions,\n          mutator.hasSecondArg,\n        )\n      : '';\n\n    returnTypesToWrite.set(\n      operationName,\n      (title?: string) =>\n        `export type ${pascal(\n          operationName,\n        )}Result = NonNullable<Awaited<ReturnType<${\n          title\n            ? `ReturnType<typeof ${title}>['${operationName}']`\n            : `typeof ${operationName}`\n        }>>>`,\n    );\n\n    const propsImplementation =\n      mutator.bodyTypeName && body.definition\n        ? toObjectString(props, 'implementation').replace(\n            new RegExp(String.raw`(\\w*):\\s?${body.definition}`),\n            `$1: ${mutator.bodyTypeName}<${body.definition}>`,\n          )\n        : toObjectString(props, 'implementation');\n\n    return `const ${operationName} = (\\n    ${propsImplementation}\\n ${\n      isRequestOptions && mutator.hasSecondArg\n        ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter<typeof ${mutator.name}<${response.definition.success || 'unknown'}>>,`\n        : ''\n    }) => {${bodyForm}\n      return ${mutator.name}<${response.definition.success || 'unknown'}>(\n      ${mutatorConfig},\n      ${requestOptions});\n    }\n  `;\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: false,\n  });\n\n  returnTypesToWrite.set(\n    operationName,\n    () =>\n      `export type ${pascal(operationName)}Result = AxiosResponse<${\n        response.definition.success || 'unknown'\n      }>`,\n  );\n\n  // In factory mode, use the axiosInstance parameter\n  // In functions mode with global import, .default may be needed based on tsconfig\n  const axiosRef = isFactoryMode\n    ? 'axiosInstance'\n    : `axios${isSyntheticDefaultImportsAllowed ? '' : '.default'}`;\n\n  return `const ${operationName} = (\\n    ${toObjectString(props, 'implementation')} ${\n    isRequestOptions\n      ? `options${context.output.optionsParamRequired ? '' : '?'}: AxiosRequestConfig\\n`\n      : ''\n  } ): Promise<AxiosResponse<${response.definition.success || 'unknown'}>> => {${bodyForm}\n    return ${axiosRef}.${verb}(${options});\n  }\n`;\n};\n\nexport const generateAxiosTitle: ClientTitleBuilder = (title) => {\n  const sanTitle = sanitize(title);\n  return `get${pascal(sanTitle)}`;\n};\n\n// Header for factory mode - axios is optional parameter with default value\n// When using mutator (global or tags-level), axiosInstance parameter is not needed\nexport const generateAxiosHeader: ClientHeaderBuilder = ({\n  title,\n  isRequestOptions,\n  isMutator,\n  isGlobalMutator,\n  noFunction,\n  output,\n  verbOptions,\n}) => {\n  const isSyntheticDefaultImportsAllowed = isSyntheticDefaultImportsAllow(\n    output.tsconfig,\n  );\n  const axiosDefault = isSyntheticDefaultImportsAllowed\n    ? 'axios'\n    : 'axios.default';\n\n  // Check if any operation uses a mutator (either global or tags-level)\n  const hasAnyMutator =\n    isGlobalMutator ||\n    Object.values(verbOptions).some((verbOption) => !!verbOption.mutator);\n\n  return `\n${\n  isRequestOptions && isMutator\n    ? `type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\\n\\n`\n    : ''\n}\n  ${noFunction ? '' : hasAnyMutator ? `export const ${title} = () => {\\n` : `export const ${title} = (axiosInstance: AxiosInstance = ${axiosDefault}) => {\\n`}`;\n};\n\nexport const generateAxiosFooter: ClientFooterBuilder = ({\n  operationNames,\n  title,\n  noFunction,\n  hasMutator,\n  hasAwaitedType,\n}) => {\n  let footer = '';\n\n  if (!noFunction) {\n    footer += `return {${operationNames.join(',')}}};\\n`;\n  }\n\n  if (hasMutator && !hasAwaitedType) {\n    footer += `\\ntype AwaitedInput<T> = PromiseLike<T> | T;\\n\n    type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;\n\\n`;\n  }\n\n  for (const operationName of operationNames) {\n    if (returnTypesToWrite.has(operationName)) {\n      // Map.has ensures Map.get will not return undefined, but TS still complains\n      // bug https://github.com/microsoft/TypeScript/issues/13086\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      const func = returnTypesToWrite.get(operationName)!;\n      footer += func(noFunction ? undefined : title) + '\\n';\n    }\n  }\n\n  return footer;\n};\n\nexport const generateAxios = (\n  verbOptions: GeneratorVerbOptions,\n  options: GeneratorOptions,\n  isFactoryMode = false,\n) => {\n  const imports = generateVerbImports(verbOptions);\n  const implementation = generateAxiosImplementation(\n    verbOptions,\n    options,\n    isFactoryMode,\n  );\n\n  return { implementation, imports };\n};\n\n// Factory mode generator - axios is optional parameter\nexport const generateAxiosFactory: ClientBuilder = (verbOptions, options) => {\n  const { implementation, imports } = generateAxios(verbOptions, options, true);\n  return { implementation, imports };\n};\n\nexport const generateAxiosFunctions: ClientBuilder = (verbOptions, options) => {\n  const { implementation, imports } = generateAxios(verbOptions, options);\n\n  return {\n    implementation: 'export ' + implementation,\n    imports,\n  };\n};\n\n// axios client with factory pattern (axios as optional parameter)\nconst axiosClientBuilder: ClientGeneratorsBuilder = {\n  client: generateAxiosFactory,\n  header: generateAxiosHeader,\n  dependencies: getAxiosFactoryDependencies,\n  footer: generateAxiosFooter,\n  title: generateAxiosTitle,\n};\n\nconst axiosFunctionsClientBuilder: ClientGeneratorsBuilder = {\n  client: generateAxiosFunctions,\n  header: (options) => generateAxiosHeader({ ...options, noFunction: true }),\n  dependencies: getAxiosDependencies,\n  footer: (options) => generateAxiosFooter({ ...options, noFunction: true }),\n  title: generateAxiosTitle,\n};\n\nexport interface AxiosBuilderOptions {\n  type?: 'axios' | 'axios-functions';\n}\n\nexport const builder =\n  ({ type = 'axios-functions' }: AxiosBuilderOptions = {}) =>\n  () => {\n    if (type === 'axios-functions') {\n      return axiosFunctionsClientBuilder;\n    }\n    return axiosClientBuilder;\n  };\n\nexport default builder;\n"],"mappings":"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"}