{"version":3,"sources":["../src/index.ts","../src/core/base/Adaptor.ts","../src/core/constants/keywords.ts","../src/core/interface.ts","../src/core/base/Base.ts","../src/core/base/Provider.ts","../src/core/generator/index.ts","../src/core/client/axios.ts","../src/core/client/fetch.ts","../src/openapi/index.ts","../src/openapi/V2.ts","../src/openapi/V3.ts","../src/openapi/V3_1.ts","../src/vite-plugin/index.ts"],"sourcesContent":["export * from \"./core\";\nexport * from \"./core/interface\";\nexport * from \"./openapi\";\nexport * from \"./vite-plugin\";\n","/**\n * @file Adapter abstract class definition\n * @author [Your Name]\n * @description Base adapter implementation for various code generation tools\n */\n\nimport type {\n  MediaTypeObject,\n  ParameterObject,\n} from \"@apicodegen/core/interface\";\nimport type { Statement } from \"typescript\";\n\n/**\n * Base adapter for tool\n * This abstract class serves as the foundation for implementing adapters for different code generation tools\n */\nexport abstract class Adapter {\n  /**\n   * @abstract The unique name/identifier for this adapter implementation\n   */\n  abstract readonly name: string;\n\n  /**\n   * @abstract The name of the field used to specify the HTTP method in API calls\n   */\n  abstract readonly methodFieldName: string;\n\n  /**\n   * @abstract The name of the field used to specify the request body in API calls\n   */\n  abstract readonly bodyFieldName: string;\n\n  /**\n   * @abstract The name of the field used to specify request headers in API calls\n   */\n  abstract readonly headersFieldName: string;\n\n  /**\n   * @abstract The name of the field used to specify query parameters in API calls\n   */\n  abstract readonly queryFieldName: string;\n\n  /**\n   * @abstract\n   * @param {string} uri - The API endpoint URI\n   * @param {string} method - The HTTP method (e.g., GET, POST, etc.)\n   * @param {ParameterObject[]} parameters - An array of parameters for the API call\n   * @param {MediaTypeObject | undefined} requestBody - The request body payload (if applicable)\n   * @param {MediaTypeObject | undefined} response - The expected response format (if applicable)\n   * @param {Adapter} adapter - An instance of the adapter being used\n   * @param {boolean} useFormData - Flag indicating whether to use FormData for the request body\n   * @param {boolean} useJSONResponse - Flag indicating whether the response should be parsed as JSON\n   * @returns {Statement[]} An array of TypeScript AST statements representing the generated code\n   */\n  abstract client(\n    uri: string,\n    method: string,\n    parameters: ParameterObject[],\n    requestBody: MediaTypeObject | undefined,\n    response: MediaTypeObject | undefined,\n    adapter: Adapter,\n    useFormData: boolean,\n    useJSONResponse: boolean,\n  ): Statement[];\n}\n","export const typescriptKeywords = new Set([\n  \"break\",\n  \"case\",\n  \"catch\",\n  \"class\",\n  \"const\",\n  \"continue\",\n  \"debugger\",\n  \"default\",\n  \"delete\",\n  \"do\",\n  \"else\",\n  \"enum\",\n  \"export\",\n  \"extends\",\n  \"false\",\n  \"finally\",\n  \"for\",\n  \"function\",\n  \"if\",\n  \"import\",\n  \"in\",\n  \"instanceof\",\n  \"new\",\n  \"null\",\n  \"return\",\n  \"super\",\n  \"switch\",\n  \"this\",\n  \"throw\",\n  \"true\",\n  \"try\",\n  \"typeof\",\n  \"var\",\n  \"void\",\n  \"while\",\n  \"with\",\n  \"as\",\n  \"implements\",\n  \"interface\",\n  \"let\",\n  \"package\",\n  \"private\",\n  \"protected\",\n  \"public\",\n  \"static\",\n  \"yield\",\n  \"abstract\",\n  \"any\",\n  \"async\",\n  \"await\",\n  \"constructor\",\n  \"declare\",\n  \"from\",\n  \"get\",\n  \"is\",\n  \"module\",\n  \"namespace\",\n  \"never\",\n  \"require\",\n  \"set\",\n  \"type\",\n  \"unknown\",\n  \"readonly\",\n  \"of\",\n  \"asserts\",\n  \"infer\",\n  \"keyof\",\n  \"boolean\",\n  \"number\",\n  \"string\",\n  \"symbol\",\n  \"object\",\n  \"undefined\",\n  \"bigint\",\n]);\n","/**\n * Simple represenration for JSON object\n */\nexport type JSONValue = {\n  [K: string]:\n    | string\n    | number\n    | boolean\n    | JSONValue\n    | (string | number | boolean | JSONValue)[];\n};\n\nexport enum SchemaType {\n  schemas = \"schemas\",\n  parameters = \"parameters\",\n  responses = \"responses\",\n  requestBodies = \"requestBodies\",\n}\n\nexport enum NonArraySchemaType {\n  \"object\" = \"object\",\n  \"string\" = \"string\",\n  \"number\" = \"number\",\n  \"boolean\" = \"boolean\",\n  \"integer\" = \"integer\",\n  \"enum\" = \"enum\",\n  \"file\" = \"file\",\n}\n\nexport enum ArraySchemaType {\n  \"array\" = \"array\",\n}\n\nexport enum SchemaFormatType {\n  \"string\" = \"string\",\n  \"number\" = \"number\",\n  \"boolean\" = \"boolean\",\n  \"file\" = \"file\",\n  \"binary\" = \"binary\",\n  \"blob\" = \"blob\",\n}\n\nexport enum ParameterIn {\n  \"header\" = \"header\",\n  \"body\" = \"body\",\n  \"query\" = \"query\",\n  \"cookie\" = \"cookie\",\n  \"path\" = \"path\",\n  \"formData\" = \"formData\",\n}\n\nexport interface ReferenceObject {\n  $ref: string;\n}\n\nexport interface EnumSchemaObject {\n  name: string;\n  enum: (string | number)[];\n}\n\nexport interface SingleTypeSchemaObject {\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  type: keyof typeof NonArraySchemaType | string;\n  description?: string;\n  allOf?: SchemaObject[];\n  anyOf?: SchemaObject[];\n  deprecated?: boolean;\n  enum?: (string | number)[];\n  format?: keyof typeof SchemaFormatType;\n  oneOf?: SchemaObject[];\n  properties?: Record<string, SchemaObject>;\n  readonly?: boolean;\n  required?: string[] | boolean;\n  ref?: string;\n}\n\nexport interface ArrayTypeSchemaObject {\n  type: keyof typeof ArraySchemaType;\n  items?: SchemaObject;\n  required?: boolean;\n  description?: string;\n  ref?: string;\n}\n\nexport type SchemaObject = SingleTypeSchemaObject | ArrayTypeSchemaObject;\n\nexport type ParameterObject = {\n  name: string;\n  in: keyof typeof ParameterIn;\n  schema?: SchemaObject;\n  required?: boolean;\n  description?: string;\n  deprecated?: boolean;\n  ref?: string;\n};\n\nexport enum MediaTypes {\n  JSON = \"application/json\",\n  TEXT = \"text\",\n  IMAGE = \"image\",\n  AUDIO = \"audio\",\n  VIDEO = \"video\",\n}\n\nexport type MediaTypeObject = {\n  type: MediaTypes | keyof typeof MediaTypes;\n  schema?: SchemaObject;\n};\n\nexport type ResponsesObject = Record<string, MediaTypeObject[]>;\n\nexport type RequestBodyObject = ResponsesObject;\n\nexport enum HttpMethods {\n  GET = \"get\",\n  PUT = \"put\",\n  POST = \"post\",\n  DELETE = \"delete\",\n  OPTIONS = \"options\",\n  HEAD = \"head\",\n  PATCH = \"patch\",\n  TRACE = \"trace\",\n}\n\nexport type OperationObject = {\n  method: string;\n  summary?: string;\n  description?: string;\n  operationId?: string;\n  externalDocs?: { url: string; description?: string }[];\n  parameters?: ParameterObject[];\n  requestBody?: MediaTypeObject[];\n  responses: MediaTypeObject[];\n  deprecated?: boolean;\n};\n\nexport type PathObject = {\n  ref?: string;\n  summary?: string;\n  description?: string;\n  parameters?: ParameterObject[];\n} & Partial<Record<HttpMethods, OperationObject>>;\n\nexport type PathsObject = Record<string, OperationObject[]>;\n\nexport type FetchDocRequestInit = {\n  method?: string;\n  body?: string | FormData;\n  headers?: Record<string, string>;\n};\n\nexport enum Adaptors {\n  fetch = \"fetch\",\n  axios = \"axios\",\n}\n\nexport type ProviderInitOptions = {\n  docURL: string;\n  output: string;\n  baseURL?: string;\n  importClientSource?: string;\n  requestOptions?: FetchDocRequestInit;\n  verbose?: boolean;\n  adaptor?: keyof typeof Adaptors;\n};\n\nexport interface ProviderInitResult {\n  readonly enums: EnumSchemaObject[];\n  readonly schemas: Record<string, SchemaObject>;\n  readonly parameters: Record<string, ParameterObject>;\n  readonly responses: Record<string, ResponsesObject>;\n  readonly requestBodies: Record<string, RequestBodyObject>;\n  readonly apis: PathsObject;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * @file Base class implementation\n * @author [Your Name]\n * @description Base utility class providing common methods for code generation and API handling\n */\n\nimport { typescriptKeywords } from \"@apicodegen/core/constants/keywords\";\nimport type {\n  EnumSchemaObject,\n  FetchDocRequestInit,\n  ReferenceObject,\n  SchemaObject,\n  SingleTypeSchemaObject,\n} from \"@apicodegen/core/interface\";\nimport { MediaTypes } from \"@apicodegen/core/interface\";\nimport { Agent, request } from \"undici\";\n\n/**\n * Represents success HTTP status codes.\n * Each key is a string representation of a success HTTP status code.\n */\nexport const SuccessHttpStatusCode = {\n  \"200\": \"200\", // OK\n  \"201\": \"201\", // Created\n  \"202\": \"202\", // Accepted\n  \"203\": \"203\", // Non-Authoritative Information\n  \"204\": \"204\", // No Content\n  \"205\": \"205\", // Reset Content\n  \"206\": \"206\", // Partial Content\n  \"207\": \"207\", // Multi_Status\n  \"208\": \"208\", // Already_Reported\n  \"226\": \"226\", // IM Used\n};\n\n/**\n * Base abstract class providing common utility methods.\n */\nexport abstract class Base {\n  protected constructor() {\n    if (new.target === Base) {\n      throw new Error(\"Cannot instantiate abstract class\");\n    }\n  }\n\n  /**\n   * Converts a reference string to a meaningful name.\n   * @param ref - The reference string to process.\n   * @param [doc] - Optional document reference for context.\n   * @returns - The processed name.\n   */\n  static ref2name(ref: string, doc?: any): string {\n    const paths = ref.replace(/^#/, \"\").split(\"/\").filter(Boolean);\n\n    if (!doc) {\n      return paths.slice(-1)[0];\n    }\n\n    let temporary = doc as unknown;\n    let lastPath = \"\";\n    for (const path of paths) {\n      // For handling path prefix with ~1\n      const adjustedPath = path.replaceAll(\"~1\", \"/\");\n      temporary = (temporary as Record<string, any>)[adjustedPath];\n      lastPath = adjustedPath;\n    }\n\n    if (!temporary) {\n      return \"unknown\";\n    }\n\n    return (temporary as unknown as { $ref: string }).$ref\n      ? this.ref2name((temporary as unknown as { $ref: string }).$ref, doc)\n      : lastPath;\n  }\n\n  /**\n   * Converts an API path to a function name.\n   * @param path - The API endpoint path.\n   * @param [method] - The HTTP method (e.g., GET, POST).\n   * @param [operationId] - Unique identifier for the operation.\n   * @returns - The generated function name.\n   */\n  static pathToFnName(\n    path: string,\n    method?: string,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _operationId: string = \"\",\n  ) {\n    const name = this.normalize(this.camelCase(this.normalize(path)));\n    const suffix = method\n      ? this.capitalize(this.upperCamelCase(`using_${method}`))\n      : \"\";\n\n    return name + suffix;\n  }\n\n  /**\n   * Normalizes a string by replacing special characters and avoiding TypeScript keywords.\n   * @param text - Input text to normalize.\n   * @returns - The normalized string.\n   */\n  static normalize(text: string) {\n    if (typescriptKeywords.has(text)) {\n      text += \"_\";\n    }\n    return text.replace(/[/\\-_{}():\\s`,*<>$#.]/gm, \"_\").replace(/^\\d./gm, '').replaceAll(\"...\", \"\");\n  }\n\n  /**\n   * Capitalizes the first character of a string.\n   * @param text - Input string.\n   * @returns - Capitalized string.\n   */\n  static capitalize(text: string) {\n    text = text.trim();\n    return `${text.charAt(0).toUpperCase()}${text.slice(1)}`;\n  }\n\n  /**\n   * Converts a string to camelCase.\n   * @param text - Input string.\n   * @returns - CamelCase string.\n   */\n  static camelCase(text: string) {\n    text = text.trim();\n    return text\n      .split(\"_\")\n      .filter(Boolean)\n      .map((t, index) => (index === 0 ? t : this.capitalize(t)))\n      .join(\"\");\n  }\n\n  /**\n   * Converts a string to UpperCamelCase.\n   * @param text - Input string.\n   * @returns - UpperCamelCase string.\n   */\n  static upperCamelCase(text: string) {\n    return this.normalize(text)\n      .replaceAll(\"...\", \"\")\n      .split(\"_\")\n      .filter(Boolean)\n      .map(this.capitalize)\n      .join(\"\");\n  }\n\n  /**\n   * Fetches documentation from a given URL.\n   * @param url - The URL to fetch the documentation from.\n   * @param requestInit - Additional request parameters.\n   * @returns - A promise resolving to the fetched documentation data.\n   */\n  static async fetchDoc<T = unknown>(\n    url: string,\n    requestInit: FetchDocRequestInit = {},\n  ): Promise<T> {\n    const agent = new Agent({\n      connect: {\n        rejectUnauthorized: false,\n      },\n    });\n\n    // eslint-disable-next-line no-useless-catch\n    try {\n      const { body } = await request(url, {\n        method: \"GET\",\n        dispatcher: agent,\n        ...requestInit,\n      });\n      return body.json() as T;\n    } catch (error) {\n      throw error;\n    }\n  }\n\n  /**\n   * Determines the media type from a given media type string.\n   * @param mediaType - The media type string to evaluate.\n   * @returns - The matched MediaTypes or null.\n   */\n  static getMediaType(mediaType: string): MediaTypes | undefined {\n    // eslint-disable-next-line @typescript-eslint/no-for-in-array\n    for (const type in Object.values(MediaTypes)) {\n      if (new RegExp(type).test(mediaType)) {\n        return type as MediaTypes;\n      }\n    }\n    return;\n  }\n\n  /**\n   * Checks if a schema is a valid enum type that isn't boolean.\n   * @param a - The schema object to evaluate.\n   * @returns - True if the schema is a valid non-boolean enum.\n   */\n  static isValidEnumType(a: SchemaObject) {\n    return a.type !== \"boolean\" && !this.isBooleanEnum(a);\n  }\n\n  /**\n   * Checks if a schema represents a boolean enum.\n   * @param a - The schema object to evaluate.\n   * @returns - True if the schema is a boolean enum.\n   */\n  static isBooleanEnum(a: SchemaObject) {\n    return (\n      a.type === \"boolean\" ||\n      !!(a as SingleTypeSchemaObject).enum?.some(\n        (member) => typeof member === \"boolean\",\n      )\n    );\n  }\n\n  /**\n   * Checks if two enum schemas are identical.\n   * @param a - First enum schema to compare.\n   * @param b - Second enum schema to compare.\n   * @returns - True if the enums are identical.\n   */\n  private static isSameEnum(a: EnumSchemaObject, b: EnumSchemaObject) {\n    return (\n      a.enum.length === b.enum.length &&\n      a.enum.sort().every((v, index) => v === b.enum.sort()[index])\n    );\n  }\n\n  /**\n   * Filters out duplicate enum schemas from an array.\n   * @param enums - Array of enum schemas to process.\n   * @returns - Array of unique enum schemas.\n   */\n  static uniqueEnums(enums: EnumSchemaObject[]) {\n    const uniqueEnums_: EnumSchemaObject[] = [];\n    for (const enumObject of enums) {\n      if (uniqueEnums_.length === 0) {\n        uniqueEnums_.push(enumObject);\n      } else {\n        if (!uniqueEnums_.some((a) => this.isSameEnum(a, enumObject))) {\n          uniqueEnums_.push(enumObject);\n        }\n      }\n    }\n    return uniqueEnums_;\n  }\n\n  /**\n   * Finds the first occurrence of a matching enum schema in an array.\n   * @param a - The enum schema to find.\n   * @param enums - Array of enum schemas to search.\n   * @returns - The found schema or undefined.\n   */\n  static findSameSchema(a: EnumSchemaObject, enums: EnumSchemaObject[]) {\n    return enums.find((b) => this.isSameEnum(b, a));\n  }\n\n  /**\n   * Checks if an object is a reference object.\n   * @param schema - The object to check.\n   * @returns - True if the object is a reference.\n   */\n\n  static isRef(schema: any): schema is ReferenceObject {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return \"$ref\" in schema && typeof schema.$ref === \"string\";\n  }\n}\n","/**\n * @file Provider abstract class.\n * This file defines the `Provider` abstract class, which serves as a base for providers responsible for parsing\n * and processing API documentation.\n */\n\nimport type {\n  EnumSchemaObject,\n  FetchDocRequestInit,\n  OperationObject,\n  ParameterObject,\n  ProviderInitOptions,\n  ProviderInitResult,\n  RequestBodyObject,\n  ResponsesObject,\n  SchemaObject,\n} from \"@apicodegen/core/interface\";\n\n/**\n * Abstract Provider Class.\n *\n * The Provider class is designed to be extended by specific implementations (e.g., OpenAPI 2 provider, OpenAPI 3 provider).\n * It handles the initialization of the provider and the parsing of documentation into structured data.\n *\n * @example\n *\n * ```ts\n * /// Example of how this class might be used by a subclass:\n * class OpenAPIProvider extends Provider {\n *   /// Implement the parse method to handle OpenAPI-specific documentation parsing.\n *   parse(doc: unknown): ProviderInitResult {\n *     /// Implementation details...\n *   }\n * }\n *\n * /// Initializing a provider with configuration and documentation data:\n * const initOptions: ProviderInitOptions = {\n *   docURL: \"https://example.com/api/swagger.json\",\n *   baseURL: \"https://api.example.com\",\n *   output: \"./generated\",\n *   requestOptions: {\n *     headers: { \"Content-Type\": \"application/json\" },\n *   },\n *   importClientSource: \"generated/client\",\n * };\n *\n * const docData = fetchSwaggerDoc();\n * const provider = new OpenAPIProvider(initOptions, docData);\n * ```\n */\nexport abstract class Provider\n  implements ProviderInitResult, ProviderInitOptions\n{\n  /** collection of enum schemas */\n  readonly enums: EnumSchemaObject[] = [];\n  /** collection of schemas indexed by name */\n  readonly schemas: Record<string, SchemaObject> = {};\n  /** collection of parameters indexed by name */\n  readonly parameters: Record<string, ParameterObject> = {};\n  /** collection of API responses indexed by name */\n  readonly responses: Record<string, ResponsesObject> = {};\n  /** collection of request bodies indexed by name */\n  readonly requestBodies: Record<string, RequestBodyObject> = {};\n  /** collection of API endpoints (operations) indexed by path */\n  readonly apis: Record<string, OperationObject[]> = {};\n\n  /** URL for fetching API documentation */\n  readonly docURL: string;\n  /** base URL for API endpoints */\n  readonly baseURL: string;\n  /** output directory for generated code */\n  readonly output: string;\n  /** request options for API documentation fetch */\n  readonly requestOptions: FetchDocRequestInit;\n  /** source path for imported client */\n  readonly importClientSource: string;\n\n  /**\n   * Provider Constructor.\n   * @param {ProviderInitOptions} initOptions - Initial configuration for the provider.\n   * @param {unknown} doc - Raw API documentation data to be parsed.\n   */\n  constructor(initOptions: ProviderInitOptions, doc: unknown) {\n    this.docURL = initOptions.docURL;\n    this.baseURL = initOptions.baseURL ?? \"\";\n    this.output = initOptions.output ?? \".\";\n    this.requestOptions = initOptions.requestOptions ?? {};\n    this.importClientSource = initOptions.importClientSource ?? \"\";\n\n    const { enums, schemas, requestBodies, responses, parameters, apis } =\n      this.parse(doc);\n\n    this.enums = enums;\n    this.schemas = schemas;\n    this.responses = responses;\n    this.parameters = parameters;\n    this.requestBodies = requestBodies;\n    this.apis = apis;\n  }\n\n  /**\n   * Abstract Parse Method.\n   * @abstract\n   * @param {unknown} doc - Raw API documentation data.\n   * @returns {ProviderInitResult} - Parsed documentation data.\n   *\n   * This method must be implemented by subclasses to parse the raw documentation into structured data.\n   */\n  abstract parse(doc: unknown): ProviderInitResult;\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n/* eslint-disable no-case-declarations */\nimport { Adapter } from \"@apicodegen/core/base/Adaptor\";\nimport { Base } from \"@apicodegen/core/base/Base\";\nimport type {\n  ArrayTypeSchemaObject,\n  MediaTypeObject,\n  ParameterObject,\n  ProviderInitOptions,\n  ProviderInitResult,\n  SchemaObject,\n  SingleTypeSchemaObject,\n} from \"@apicodegen/core/interface\";\nimport {\n  ArraySchemaType,\n  MediaTypes,\n  NonArraySchemaType,\n  ParameterIn,\n  SchemaFormatType,\n} from \"@apicodegen/core/interface\";\nimport { writeFile } from \"fs/promises\";\nimport { format } from \"prettier\";\nimport type {\n  BindingElement,\n  Block,\n  Node,\n  ParameterDeclaration,\n  PropertySignature,\n  Statement,\n  TypeNode,\n} from \"typescript\";\nimport {\n  addSyntheticLeadingComment,\n  createPrinter,\n  factory as t,\n  NodeFlags,\n  SyntaxKind,\n} from \"typescript\";\n\n/**\n * Represents a comment object with optional tag and message.\n */\nexport type CommentObject = {\n  tag?: string;\n  comment: string;\n};\n\n/**\n * Array of comment objects to be added to the code.\n */\nexport type Comments = CommentObject[];\n\nexport class Generator {\n  /**\n   * Converts an array of TypeScript statements into a formatted string of code.\n   *\n   * @param statements - The array of TypeScript statement nodes.\n   * @returns Formatted code as a string.\n   * @throws {Error} If no valid statements are provided.\n   */\n  static toCode(statements: Statement[]): string {\n    if (statements.length === 0) {\n      return \"// No api declaration found.\";\n    }\n\n    const sourceFile = t.createSourceFile(\n      statements,\n      t.createToken(SyntaxKind.EndOfFileToken),\n      NodeFlags.None,\n    );\n\n    return createPrinter().printFile(sourceFile);\n  }\n\n  static async write(code: string, filepath: string) {\n    try {\n      await writeFile(filepath, code);\n    } catch (error) {\n      console.error(error);\n    }\n  }\n\n  /**\n   * Converts a path string with parameters into a TypeScript template expression.\n   * Handles query parameters and path placeholders.\n   *\n   * @param path - The base path string containing placeholders.\n   * @param parameters - Array of parameter objects defining the parameters.\n   * @param basePath - Optional base path to prepend (default: \"\").\n   * @returns A TypeScript template expressi\n   */\n  static toUrlTemplate(\n    path: string,\n    parameters: ParameterObject[],\n    basePath = \"\",\n  ) {\n    // Extract query parameters\n    const queryParameters = parameters.filter(\n      (p) => p.in === ParameterIn.query,\n    );\n\n    if (queryParameters.length > 0) {\n      const queryString = queryParameters\n        .map(\n          (qp, index) =>\n            `${index === 0 ? \"?\" : \"&\"}${encodeURIComponent(qp.name)}={${Base.camelCase(Base.normalize(qp.name))}}`,\n        )\n        .join(\"\");\n      path += queryString;\n    }\n\n    // Split the path into segments\n    const pathSegments = path.replaceAll(\"{\", \"${\").split(\"$\").filter(Boolean);\n\n    // If path segments only got one item, it means there are no parameters in path. So just return the path literal.\n    if (pathSegments.length === 1) {\n      return t.createNoSubstitutionTemplateLiteral(basePath + path);\n    }\n\n    return t.createTemplateExpression(\n      t.createTemplateHead(basePath + pathSegments[0]),\n      pathSegments.slice(1).map((segment, index) => {\n        const match = /^{(.+)}(.+)?/gm.exec(segment);\n        const isLastSegment = index === pathSegments.length - 2;\n\n        if (!match) {\n          throw new Error(`Invalid path segment: ${segment}`);\n        }\n\n        return t.createTemplateSpan(\n          t.createIdentifier(match[1]),\n          !isLastSegment\n            ? t.createTemplateMiddle(match[2])\n            : t.createTemplateTail(match[2] || \"\"),\n        );\n      }),\n    );\n  }\n\n  /**\n   * Adds synthetic comments to a TypeScript AST node.\n   *\n   * @param node - The target AST node.\n   * @param comments - Array of comment objects to add.\n   */\n  static addComments(node: Node, comments: Comments) {\n    if (!Array.isArray(comments) || comments.filter(Boolean).length === 0)\n      return;\n\n    const formatComment = (comment: CommentObject): string => {\n      return comment.tag\n        ? ` @${comment.tag} ${comment.comment ?? \"\"}`\n        : ` ${comment.comment}`;\n    };\n\n    const formattedComments =\n      \"*\\n\" + comments.map(formatComment).join(\"\\n\").trim() + \"\\n\";\n\n    addSyntheticLeadingComment(\n      node,\n      SyntaxKind.MultiLineCommentTrivia,\n      formattedComments,\n      true,\n    );\n  }\n\n  /**\n   * Checks if a schema represents a binary type.\n   *\n   * @param schema - The schema object to check.\n   * @returns true if the schema is a binary type, false otherwise.\n   */\n  static isBinarySchema(schema: SchemaObject): boolean {\n    if (schema.type === \"array\") {\n      const arraySchema = schema as ArrayTypeSchemaObject;\n      return this.isBinarySchema(arraySchema.items!);\n    }\n\n    const nonArraySchema = schema as SingleTypeSchemaObject;\n    return (\n      nonArraySchema.format === SchemaFormatType.blob ||\n      nonArraySchema.format === SchemaFormatType.binary ||\n      nonArraySchema.type === SchemaFormatType.file\n    );\n  }\n\n  static toRequestBodyTypeNode(schema: SchemaObject) {\n    return t.createParameterDeclaration(\n      undefined,\n      undefined,\n      t.createIdentifier(\"req\"),\n      undefined,\n      this.toTypeNode(schema),\n    );\n  }\n\n  static toTypeNode(schema: SchemaObject): TypeNode {\n    const { type, ref } = schema;\n\n    if (ref) {\n      const identify = Base.ref2name(ref);\n      return t.createTypeReferenceNode(\n        t.createIdentifier(\n          identify === \"unknown\" ? identify : Base.upperCamelCase(identify),\n        ),\n      );\n    }\n\n    switch (type) {\n      case ArraySchemaType.array:\n        const { items } = schema as ArrayTypeSchemaObject;\n        return t.createArrayTypeNode(this.toTypeNode(items!));\n      case NonArraySchemaType.object:\n        const propsCount = Object.keys(schema.properties ?? {}).length;\n        if (!schema.properties || propsCount === 0) {\n          // Record<string, unknown>\n          return t.createTypeReferenceNode(t.createIdentifier(\"Record\"), [\n            t.createToken(SyntaxKind.StringKeyword),\n            t.createToken(SyntaxKind.UnknownKeyword),\n          ]);\n        }\n\n        const props = Object.keys(schema.properties);\n\n        return t.createTypeLiteralNode(\n          props.map((propKey) => {\n            const propSchema = schema.properties![propKey];\n            return t.createPropertySignature(\n              undefined,\n              t.createStringLiteral(propKey),\n              // When field is required, a refrence or binary value, don't add question mark.\n              schema.required || schema.ref || this.isBinarySchema(schema)\n                ? undefined\n                : t.createToken(SyntaxKind.QuestionToken),\n              this.toTypeNode(propSchema),\n            );\n          }),\n        );\n      case NonArraySchemaType.integer:\n      case NonArraySchemaType.number:\n        if (schema.enum) {\n          return t.createUnionTypeNode(\n            schema.enum.map((e) =>\n              t.createLiteralTypeNode(t.createNumericLiteral(e)),\n            ),\n          );\n        }\n        return t.createToken(SyntaxKind.NumberKeyword);\n      // case NonArraySchemaType.string:\n      case NonArraySchemaType.boolean:\n        return t.createToken(SyntaxKind.BooleanKeyword);\n      case NonArraySchemaType.file:\n        return t.createTypeReferenceNode(t.createIdentifier(\"Blob\"));\n      default:\n        const {\n          format,\n          oneOf,\n          allOf,\n          anyOf,\n          type,\n          enum: enum_,\n        } = schema as SingleTypeSchemaObject;\n\n        switch (format) {\n          case SchemaFormatType.number:\n            return t.createToken(SyntaxKind.NumberKeyword);\n          case SchemaFormatType.string:\n            return t.createToken(SyntaxKind.StringKeyword);\n          case SchemaFormatType.boolean:\n            return t.createToken(SyntaxKind.BooleanKeyword);\n          case SchemaFormatType.blob:\n          case SchemaFormatType.binary:\n            return t.createTypeReferenceNode(t.createIdentifier(\"Blob\"));\n          default:\n        }\n\n        if (enum_) {\n          return t.createUnionTypeNode(\n            enum_.map((e) =>\n              t.createLiteralTypeNode(t.createStringLiteral(e as string)),\n            ),\n          );\n        }\n\n        if (type === NonArraySchemaType.string) {\n          return t.createToken(SyntaxKind.StringKeyword);\n        }\n\n        if (oneOf) {\n          return t.createUnionTypeNode(\n            oneOf.map((schema) => this.toTypeNode(schema)),\n          );\n        }\n\n        if (anyOf) {\n          return t.createUnionTypeNode(\n            anyOf.map((schema) => this.toTypeNode(schema)),\n          );\n        }\n\n        if (allOf) {\n          return t.createIntersectionTypeNode(\n            allOf.map((schema) => this.toTypeNode(schema)),\n          );\n        }\n\n        if (type && typeof type === \"string\") {\n          return t.createTypeReferenceNode(\n            type !== \"unknown\" && type !== \"null\"\n              ? t.createIdentifier(Base.upperCamelCase(type))\n              : type,\n          );\n        }\n    }\n\n    return t.createToken(SyntaxKind.UnknownKeyword);\n  }\n\n  static toDeclarationNode(\n    parameters: ParameterObject[],\n  ): ParameterDeclaration {\n    const objectElements: BindingElement[] = [];\n    const typeObjectElements: PropertySignature[] = [];\n\n    for (const parameter of parameters) {\n      if (parameter.ref) {\n        t.createParameterDeclaration(\n          undefined,\n          undefined,\n          t.createIdentifier(\n            Base.camelCase(Base.normalize(Base.ref2name(parameter.ref))),\n          ),\n          undefined,\n          t.createTypeReferenceNode(\n            t.createIdentifier(\n              Base.upperCamelCase(Base.normalize(Base.ref2name(parameter.ref))),\n            ),\n          ),\n          undefined,\n        );\n      } else {\n        const { name, schema, required } = parameter;\n        objectElements.push(\n          t.createBindingElement(\n            undefined,\n            undefined,\n            t.createIdentifier(Base.camelCase(Base.normalize(name))),\n          ),\n        );\n\n        typeObjectElements.push(\n          t.createPropertySignature(\n            [],\n            t.createIdentifier(Base.camelCase(Base.normalize(name))),\n            required ? undefined : t.createToken(SyntaxKind.QuestionToken),\n            !schema\n              ? t.createToken(SyntaxKind.UnknownKeyword)\n              : this.toTypeNode(schema),\n          ),\n        );\n      }\n    }\n\n    return t.createParameterDeclaration(\n      undefined,\n      undefined,\n      t.createObjectBindingPattern(objectElements),\n      undefined,\n      t.createTypeLiteralNode(typeObjectElements),\n      undefined,\n    );\n  }\n\n  static toFormDataStatement(\n    parameters: ParameterObject[],\n    requestBody?: SchemaObject,\n  ): Statement[] {\n    const statements: Statement[] = [];\n    const fdDeclaration = t.createVariableStatement(\n      undefined,\n      t.createVariableDeclarationList(\n        [\n          t.createVariableDeclaration(\n            t.createIdentifier(\"fd\"),\n            undefined,\n            undefined,\n            t.createNewExpression(\n              t.createIdentifier(\"FormData\"),\n              undefined,\n              [],\n            ),\n          ),\n        ],\n        NodeFlags.Const,\n      ),\n    );\n\n    statements.push(fdDeclaration);\n\n    parameters.forEach((parameter) => {\n      statements.push(\n        t.createExpressionStatement(\n          t.createBinaryExpression(\n            t.createIdentifier(parameter.name),\n            t.createToken(SyntaxKind.AmpersandAmpersandToken),\n            t.createCallExpression(\n              t.createPropertyAccessExpression(\n                t.createIdentifier(\"fd\"),\n                t.createIdentifier(\"append\"),\n              ),\n              undefined,\n              [\n                t.createStringLiteral(parameter.name),\n                t.createIdentifier(parameter.name),\n              ],\n            ),\n          ),\n        ),\n      );\n    });\n\n    if (\n      requestBody &&\n      requestBody.type === \"object\" &&\n      requestBody.properties &&\n      Object.keys(requestBody.properties).length !== 0\n    ) {\n      Object.keys(requestBody.properties).forEach((key) => {\n        const schemaByKey = requestBody.properties![key];\n        if (\n          schemaByKey.type === ArraySchemaType.array &&\n          this.isBinarySchema(schemaByKey)\n        ) {\n          statements.push(\n            t.createForOfStatement(\n              undefined,\n              t.createVariableDeclarationList(\n                [t.createVariableDeclaration(\"file\")],\n                NodeFlags.Const,\n              ),\n              t.createElementAccessExpression(\n                t.createIdentifier(\"req\"),\n                t.createStringLiteral(key),\n              ),\n              t.createBlock([\n                t.createExpressionStatement(\n                  t.createCallExpression(\n                    t.createPropertyAccessExpression(\n                      t.createIdentifier(\"fd\"),\n                      t.createIdentifier(\"append\"),\n                    ),\n                    [],\n                    [\n                      t.createStringLiteral(key),\n                      t.createIdentifier(\"file\"),\n                      t.createPropertyAccessExpression(\n                        t.createAsExpression(\n                          t.createIdentifier(\"file\"),\n                          t.createTypeReferenceNode(\n                            t.createIdentifier(\"File\"),\n                            undefined,\n                          ),\n                        ),\n                        t.createIdentifier(\"name\"),\n                      ),\n                    ],\n                  ),\n                ),\n              ]),\n            ),\n          );\n        } else {\n          if (schemaByKey.required) {\n            statements.push(\n              t.createExpressionStatement(\n                t.createCallExpression(\n                  t.createPropertyAccessExpression(\n                    t.createIdentifier(\"fd\"),\n                    t.createIdentifier(\"append\"),\n                  ),\n                  undefined,\n                  [\n                    t.createStringLiteral(key),\n                    schemaByKey.type === \"string\"\n                      ? t.createElementAccessExpression(\n                          t.createIdentifier(\"req\"),\n                          t.createStringLiteral(key),\n                        )\n                      : t.createCallExpression(\n                          t.createIdentifier(\"String\"),\n                          undefined,\n                          [\n                            t.createElementAccessExpression(\n                              t.createIdentifier(\"req\"),\n                              t.createStringLiteral(key),\n                            ),\n                          ],\n                        ),\n                  ],\n                ),\n              ),\n            );\n          } else {\n            statements.push(\n              t.createExpressionStatement(\n                t.createBinaryExpression(\n                  t.createElementAccessExpression(\n                    t.createIdentifier(\"req\"),\n                    t.createStringLiteral(key),\n                  ),\n                  t.createToken(SyntaxKind.AmpersandAmpersandToken),\n                  t.createCallExpression(\n                    t.createPropertyAccessExpression(\n                      t.createIdentifier(\"fd\"),\n                      t.createIdentifier(\"append\"),\n                    ),\n                    undefined,\n                    [\n                      t.createStringLiteral(key),\n                      schemaByKey.type === \"string\"\n                        ? t.createElementAccessExpression(\n                            t.createIdentifier(\"req\"),\n                            t.createStringLiteral(key),\n                          )\n                        : t.createCallExpression(\n                            t.createIdentifier(\"String\"),\n                            undefined,\n                            [\n                              t.createElementAccessExpression(\n                                t.createIdentifier(\"req\"),\n                                t.createStringLiteral(key),\n                              ),\n                            ],\n                          ),\n                    ],\n                  ),\n                ),\n              ),\n            );\n          }\n        }\n      });\n    }\n\n    return statements;\n  }\n\n  static bodyBlock(\n    uri: string,\n    method: string,\n    parameters: ParameterObject[],\n    requestBody: MediaTypeObject | undefined,\n    response: MediaTypeObject | undefined,\n    adapter: Adapter,\n  ): Block {\n    const isFormDataRequest =\n      requestBody &&\n      [\"multipart/form-data\", \"application/x-www-form-urlencoded\"].includes(\n        requestBody.type,\n      );\n\n    const shouldParseResponseToJSON = \"application/json\" === response?.type;\n\n    // Ignore one and only blob parameter.\n    const isRequestBodyBinary =\n      requestBody?.schema &&\n      requestBody.schema.type === ArraySchemaType.array &&\n      this.isBinarySchema(requestBody.schema);\n\n    const parametersShouldPutInFormData = parameters.filter(\n      (p) =>\n        p.in === ParameterIn.formData ||\n        (p.schema && this.isBinarySchema(p.schema)),\n    );\n\n    const parametersShouldNotPutInFormData = parameters.filter(\n      (p) => !parametersShouldPutInFormData.includes(p),\n    );\n\n    const isRequestBodyContainsBinary =\n      requestBody?.schema &&\n      \"properties\" in requestBody.schema &&\n      Object.values(requestBody.schema?.properties ?? {}).some((p) =>\n        this.isBinarySchema(p),\n      );\n\n    const hasBinaryInParameters = parameters.some(\n      (p) => p?.schema && this.isBinarySchema(p.schema),\n    );\n\n    const shouldPutParametersOrBodyInFormData =\n      isFormDataRequest ||\n      isRequestBodyBinary ||\n      hasBinaryInParameters ||\n      isRequestBodyContainsBinary ||\n      parametersShouldPutInFormData.length > 0;\n\n    return t.createBlock([\n      ...(shouldPutParametersOrBodyInFormData\n        ? this.toFormDataStatement(\n            parametersShouldPutInFormData,\n            requestBody?.schema,\n          )\n        : []),\n      ...adapter.client(\n        uri,\n        method,\n        parametersShouldNotPutInFormData,\n        requestBody,\n        response,\n        adapter,\n        shouldPutParametersOrBodyInFormData,\n        shouldParseResponseToJSON,\n      ),\n    ]);\n  }\n\n  static schemaToStatemets(\n    parsedDoc: ProviderInitResult,\n    adaptor: Adapter,\n    options: Omit<ProviderInitOptions, \"docURL\" | \"output\" | \"requestOptions\">,\n  ): Statement[] {\n    const statements = [] as Statement[];\n    const { apis, schemas = {}, enums } = parsedDoc;\n\n    const enumNames: string[] = [];\n\n    for (const enumObject of enums) {\n      enumNames.push(Base.capitalize(enumObject.name));\n      statements.push(\n        t.createEnumDeclaration(\n          [t.createToken(SyntaxKind.ExportKeyword)],\n          t.createIdentifier(Base.upperCamelCase(enumObject.name)),\n          enumObject.enum.map((member) => {\n            return t.createEnumMember(\n              t.createStringLiteral(\n                typeof member === \"string\" ? member : `${member}_`,\n              ),\n              typeof member === \"string\"\n                ? t.createStringLiteral(member)\n                : t.createNumericLiteral(member),\n            );\n          }),\n        ),\n      );\n    }\n\n    for (const schemaKey in schemas) {\n      if (\n        Object.hasOwnProperty.call(schemas, schemaKey) &&\n        !enumNames.includes(Base.upperCamelCase(schemaKey))\n      ) {\n        const schema = schemas[schemaKey];\n        statements.push(\n          t.createTypeAliasDeclaration(\n            [t.createModifier(SyntaxKind.ExportKeyword)],\n            t.createIdentifier(Base.upperCamelCase(schemaKey)),\n            undefined,\n            this.toTypeNode(schema),\n          ),\n        );\n      }\n    }\n\n    for (const uri in apis) {\n      const operations = apis[uri];\n      for (const operation of operations) {\n        const {\n          method,\n          operationId,\n          requestBody = [],\n          responses = [],\n          summary,\n          deprecated,\n          description,\n        } = operation;\n\n        let { parameters = [] } = operation;\n\n        parameters = parameters.filter((p) => p.in !== \"cookie\");\n\n        // Add a default request, with no schema.\n        if (requestBody.length === 0) {\n          requestBody.push({ type: MediaTypes.JSON });\n        }\n\n        const shouldAddExtraMethodNameSuffix = requestBody.length > 1;\n\n        for (const req of requestBody) {\n          const statement = t.createFunctionDeclaration(\n            [\n              t.createModifier(SyntaxKind.ExportKeyword),\n              t.createModifier(SyntaxKind.AsyncKeyword),\n            ],\n            undefined,\n            Base.pathToFnName(uri, method, operationId) +\n              (shouldAddExtraMethodNameSuffix\n                ? Base.capitalize(req.type.split(\"/\")[1])\n                : \"\"),\n            undefined,\n            [\n              parameters.length > 0\n                ? Generator.toDeclarationNode(parameters)\n                : undefined,\n              req?.schema\n                ? Generator.toRequestBodyTypeNode(req.schema)\n                : undefined,\n            ].filter(Boolean) as ParameterDeclaration[],\n            undefined,\n            this.bodyBlock(\n              options.baseURL + uri,\n              method,\n              parameters,\n              req,\n              responses[0],\n              adaptor,\n            ),\n          );\n\n          this.addComments(\n            statement,\n            [\n              description && {\n                comment: description,\n              },\n              summary && {\n                comment: summary,\n              },\n              deprecated && {\n                tag: \"deprecated\",\n              },\n            ].filter(Boolean) as CommentObject[],\n          );\n          statements.push(statement);\n        }\n      }\n    }\n\n    return statements;\n  }\n\n  static async prettier(code: string) {\n    return await format(code, {\n      parser: \"typescript\",\n    });\n  }\n\n  static async genCode(\n    schema: ProviderInitResult,\n    initOptions: ProviderInitOptions,\n    adaptor: Adapter,\n  ) {\n    const { importClientSource } = initOptions;\n    const statements = this.schemaToStatemets(schema, adaptor, {\n      baseURL: initOptions.baseURL ?? \"\",\n    });\n    let code = this.toCode(statements);\n\n    if (importClientSource) {\n      code = importClientSource + \"\\n\\n\" + code;\n    }\n\n    return await this.prettier(code);\n  }\n}\n","/* eslint-disable unicorn/prefer-spread */\n/**\n * File containing the implementation of the AxiosAdapter class.\n * This adapter is responsible for generating code that uses the Axios HTTP client library.\n */\n\nimport { Adapter } from \"@apicodegen/core/base/Adaptor\";\nimport { Base } from \"@apicodegen/core/base/Base\";\nimport { Generator } from \"@apicodegen/core/generator\";\nimport { MediaTypeObject, ParameterObject } from \"@apicodegen/core/interface\";\nimport type { Statement, TypeReferenceNode } from \"typescript\";\nimport { factory as t } from \"typescript\";\n\n/**\n * Adapter class implementing support for generating code that makes use of the Axios HTTP client library.\n * This class defines custom behavior and field mappings specific to the Axios client.\n */\nexport class AxiosAdapter extends Adapter {\n  /**\n   * Name of the field used to specify the HTTP method in the request configuration.\n   */\n  readonly methodFieldName = \"method\";\n\n  /**\n   * Name of the field used to specify the request body (data) in the request configuration.\n   */\n  readonly bodyFieldName = \"data\";\n\n  /**\n   * Name of the field used to specify the request headers in the request configuration.\n   */\n  readonly headersFieldName = \"headers\";\n\n  /**\n   * Name of the field used to specify the query parameters in the request configuration.\n   */\n  readonly queryFieldName = \"params\";\n\n  /**\n   * The name of the client this adapter is configured for, which is 'axios' in this case.\n   */\n  readonly name = \"axios\";\n\n  /**\n   * Method that should generate and return the client-specific configuration statements.\n   *\n   * @returns {Statement[]} An array of TypeScript statements that define the client configuration.\n   *\n   * @throws {Error} Indicates that the method is not yet implemented and needs to be filled in.\n   */\n  public client(\n    uri: string,\n    method: string,\n    parameters: ParameterObject[],\n    requestBody: MediaTypeObject | undefined,\n    response: MediaTypeObject | undefined,\n    adapter: Adapter,\n    shouldUseFormData: boolean,\n  ): Statement[] {\n    const statements: Statement[] = [];\n\n    // Split parameters into header and body parameters\n    const inBody = parameters.filter((p) => !p.in || p.in === \"body\");\n    const inHeader = parameters.filter((p) => p.in === \"header\");\n\n    /**\n     * Creates the literal object expression for fetch options\n     * including method, headers, and body.\n     * @returns - The constructed fetch options object\n     */\n    const toLiterlExpression = () => {\n      return t.createObjectLiteralExpression(\n        [\n          // Set the HTTP method\n          t.createPropertyAssignment(\n            t.createIdentifier(adapter.methodFieldName),\n            t.createStringLiteral(method.toUpperCase()),\n          ),\n        ]\n          .concat(\n            // Add headers if there are any\n            inHeader.length > 0\n              ? t.createPropertyAssignment(\n                  t.createIdentifier(adapter.headersFieldName),\n                  t.createObjectLiteralExpression(\n                    inHeader.map((p) =>\n                      t.createPropertyAssignment(\n                        t.createStringLiteral(p.name),\n                        t.createCallExpression(\n                          t.createIdentifier(\"encodeURIComponent\"),\n                          undefined,\n                          [\n                            t.createCallExpression(\n                              t.createIdentifier(\"String\"),\n                              undefined,\n                              [\n                                t.createIdentifier(\n                                  Base.camelCase(Base.normalize(p.name)),\n                                ),\n                              ],\n                            ),\n                          ],\n                        ),\n                      ),\n                    ),\n                  ),\n                )\n              : [],\n          )\n          .concat(\n            // Add body if needed\n            shouldUseFormData || inBody.length > 0 || requestBody?.schema\n              ? t.createPropertyAssignment(\n                  t.createIdentifier(adapter.bodyFieldName),\n                  shouldUseFormData\n                    ? t.createIdentifier(\"fd\")\n                    : inBody.length > 0 ||\n                        (requestBody?.schema &&\n                          !Generator.isBinarySchema(requestBody.schema))\n                      ? t.createIdentifier(\"req\")\n                      : t.createIdentifier(\"req\"),\n                )\n              : [],\n          ),\n        true,\n      );\n    };\n\n    // Construct the fetch call and return statement\n    statements.push(\n      t.createReturnStatement(\n        t.createCallExpression(\n          t.createIdentifier(adapter.name),\n          response?.schema\n            ? [\n                Generator.toTypeNode(\n                  response.schema,\n                ) as unknown as TypeReferenceNode,\n              ]\n            : undefined,\n          [Generator.toUrlTemplate(uri, parameters), toLiterlExpression()],\n        ),\n      ),\n    );\n\n    return statements;\n  }\n}\n","/* eslint-disable unicorn/prefer-spread */\nimport { Adapter } from \"@apicodegen/core/base/Adaptor\";\nimport { Base } from \"@apicodegen/core/base/Base\";\nimport { Generator } from \"@apicodegen/core/generator\";\nimport { MediaTypeObject, ParameterObject } from \"@apicodegen/core/interface\";\nimport type { Statement } from \"typescript\";\nimport { factory as t, SyntaxKind } from \"typescript\";\n\n/**\n * FetchAdapter is an adapter class that generates client-side fetch requests.\n * It handles parameters, headers, and request bodies to construct proper fetch calls.\n */\nexport class FetchAdapter extends Adapter {\n  readonly methodFieldName = \"method\";\n  readonly bodyFieldName = \"body\";\n  readonly headersFieldName = \"headers\";\n  readonly queryFieldName = \"\";\n  readonly name = \"fetch\";\n\n  /**\n   * Generates client code for making API requests using the Fetch API.\n   * @param uri - The API endpoint URI\n   * @param method - The HTTP method (GET, POST, etc.)\n   * @param parameters - Array of parameters to include in the request\n   * @param requestBody - The request body media type definition\n   * @param response - The response media type definition\n   * @param adapter - The adapter instance\n   * @param shouldUseFormData - Flag to use FormData for the request body\n   * @param shouldUseJSONResponse - Flag to use JSON parsing for the response\n   * @return - An array of generated TypeScript statements\n   */\n  public client(\n    uri: string,\n    method: string,\n    parameters: ParameterObject[],\n    requestBody: MediaTypeObject | undefined,\n    response: MediaTypeObject | undefined,\n    adapter: Adapter,\n    shouldUseFormData: boolean,\n    shouldUseJSONResponse: boolean,\n  ): Statement[] {\n    const statements: Statement[] = [];\n\n    // Split parameters into header and body parameters\n    const inBody = parameters.filter((p) => !p.in || p.in === \"body\");\n    const inHeader = parameters.filter((p) => p.in === \"header\");\n\n    /**\n     * Creates the literal object expression for fetch options\n     * including method, headers, and body.\n     * @returns - The constructed fetch options object\n     */\n    const toLiterlExpression = () => {\n      return t.createObjectLiteralExpression(\n        [\n          // Set the HTTP method\n          t.createPropertyAssignment(\n            t.createIdentifier(adapter.methodFieldName),\n            t.createStringLiteral(method.toUpperCase()),\n          ),\n        ]\n          .concat(\n            // Add headers if there are any\n            inHeader.length > 0\n              ? t.createPropertyAssignment(\n                  t.createIdentifier(adapter.headersFieldName),\n                  t.createObjectLiteralExpression(\n                    inHeader.map((p) =>\n                      t.createPropertyAssignment(\n                        t.createStringLiteral(p.name),\n                        t.createCallExpression(\n                          t.createIdentifier(\"encodeURIComponent\"),\n                          undefined,\n                          [\n                            t.createCallExpression(\n                              t.createIdentifier(\"String\"),\n                              undefined,\n                              [\n                                t.createIdentifier(\n                                  Base.camelCase(Base.normalize(p.name)),\n                                ),\n                              ],\n                            ),\n                          ],\n                        ),\n                      ),\n                    ),\n                  ),\n                )\n              : [],\n          )\n          .concat(\n            // Add body if needed\n            shouldUseFormData || inBody.length > 0 || requestBody?.schema\n              ? t.createPropertyAssignment(\n                  t.createIdentifier(adapter.bodyFieldName),\n                  shouldUseFormData\n                    ? t.createIdentifier(\"fd\")\n                    : inBody.length > 0 ||\n                        (requestBody?.schema &&\n                          !Generator.isBinarySchema(requestBody.schema))\n                      ? t.createCallExpression(\n                          t.createPropertyAccessExpression(\n                            t.createIdentifier(\"JSON\"),\n                            t.createIdentifier(\"stringify\"),\n                          ),\n                          [],\n                          [\n                            requestBody\n                              ? t.createIdentifier(\"req\")\n                              : t.createObjectLiteralExpression(\n                                  inBody.map((b) =>\n                                    t.createShorthandPropertyAssignment(\n                                      t.createIdentifier(b.name),\n                                    ),\n                                  ),\n                                  true,\n                                ),\n                          ],\n                        )\n                      : // One File parameter\n                        t.createIdentifier(\"req\"),\n                )\n              : [],\n          ),\n        true,\n      );\n    };\n\n    // Construct the fetch call and return statement\n    statements.push(\n      t.createReturnStatement(\n        shouldUseJSONResponse\n          ? // Handle JSON response with proper type checking\n            t.createCallExpression(\n              t.createPropertyAccessExpression(\n                t.createCallExpression(\n                  t.createIdentifier(adapter.name),\n                  undefined,\n                  [\n                    Generator.toUrlTemplate(uri, parameters),\n                    toLiterlExpression(),\n                  ],\n                ),\n                t.createIdentifier(\"then\"),\n              ),\n              undefined,\n              [\n                t.createArrowFunction(\n                  [t.createModifier(SyntaxKind.AsyncKeyword)],\n                  [],\n                  [\n                    t.createParameterDeclaration(\n                      undefined,\n                      undefined,\n                      t.createIdentifier(\"response\"),\n                    ),\n                  ],\n                  undefined,\n                  t.createToken(SyntaxKind.EqualsGreaterThanToken),\n                  response?.schema\n                    ? t.createAsExpression(\n                        t.createParenthesizedExpression(\n                          t.createAwaitExpression(\n                            t.createCallExpression(\n                              t.createPropertyAccessExpression(\n                                t.createIdentifier(\"response\"),\n                                t.createIdentifier(\"json\"),\n                              ),\n                              undefined,\n                              [],\n                            ),\n                          ),\n                        ),\n                        response?.schema\n                          ? Generator.toTypeNode(response.schema)\n                          : t.createToken(SyntaxKind.UnknownKeyword),\n                      )\n                    : t.createParenthesizedExpression(\n                        t.createAwaitExpression(\n                          t.createCallExpression(\n                            t.createPropertyAccessExpression(\n                              t.createIdentifier(\"response\"),\n                              t.createIdentifier(\"json\"),\n                            ),\n                            undefined,\n                            [],\n                          ),\n                        ),\n                      ),\n                ),\n              ],\n            )\n          : // Simple fetch call without JSON parsing\n            t.createCallExpression(\n              t.createIdentifier(adapter.name),\n              undefined,\n              [Generator.toUrlTemplate(uri, parameters), toLiterlExpression()],\n            ),\n      ),\n    );\n\n    return statements;\n  }\n}\n","import type {\n  Adaptors,\n  ProviderInitOptions,\n  ProviderInitResult,\n} from \"@apicodegen/core\";\nimport {\n  Adapter,\n  Adaptors as ads,\n  AxiosAdapter,\n  Base,\n  FetchAdapter,\n  Generator,\n  Provider,\n} from \"@apicodegen/core\";\nimport { createScopedLogger } from \"@moccona/logger\";\nimport { OpenAPI, OpenAPIV2, OpenAPIV3, OpenAPIV3_1 } from \"openapi-types\";\n\nimport { V2 } from \"./V2\";\nimport { V3 } from \"./V3\";\nimport { V3_1 } from \"./V3_1\";\n\nconst logger = createScopedLogger(\"OpenAPI\");\n\nexport enum OpenAPIVersion {\n  v2 = \"v2\",\n  v3 = \"v3\",\n  v3_1 = \"v3_1\",\n  unknown = \"unknown\",\n}\n\nfunction getDocVersion(doc: OpenAPI.Document) {\n  const version = (\n    (doc as OpenAPIV3.Document).openapi || (doc as OpenAPIV2.Document).swagger\n  ).slice(0, 3);\n\n  switch (version) {\n    case \"2.0\":\n      return OpenAPIVersion.v2;\n    case \"3.0\":\n      return OpenAPIVersion.v3;\n    case \"3.1\":\n      return OpenAPIVersion.v3_1;\n    default:\n      return OpenAPIVersion.unknown;\n  }\n}\n\nexport class OpenAPIProvider extends Provider {\n  public parse(doc: OpenAPIV3.Document): ProviderInitResult {\n    const version = getDocVersion(doc);\n\n    logger.debug(`openapi version ${version}`);\n\n    let returnValue: ProviderInitResult;\n\n    switch (version) {\n      case OpenAPIVersion.v2:\n        returnValue = new V2(doc as unknown as OpenAPIV2.Document).init();\n        break;\n      case OpenAPIVersion.v3:\n        returnValue = new V3(doc as unknown as OpenAPIV3.Document).init();\n        break;\n      case OpenAPIVersion.v3_1:\n        returnValue = new V3_1(doc as unknown as OpenAPIV3_1.Document).init();\n        break;\n      default:\n        logger.error(`Not a valid OpenAPI version ${version}`);\n        process.exit(1);\n    }\n\n    return returnValue!;\n  }\n}\n\nfunction getAdaptor(type: keyof typeof Adaptors): Adapter {\n  switch (type) {\n    case ads.axios:\n      return new AxiosAdapter();\n    case ads.fetch:\n      return new FetchAdapter();\n    default:\n      throw TypeError(`Not Supported Adaptor ${type}`);\n  }\n}\n\nexport async function codeGen(initOptions: ProviderInitOptions) {\n  const { verbose } = initOptions;\n\n  if (verbose) {\n    logger.setLevel(\"debug\");\n  } else {\n    logger.setLevel(\"info\");\n  }\n\n  logger.info(`Fech document from ${initOptions.docURL}`);\n\n  const doc = await Base.fetchDoc(\n    initOptions.docURL,\n    initOptions.requestOptions,\n  );\n\n  const provider = new OpenAPIProvider(initOptions, doc);\n  const { enums, schemas, parameters, responses, requestBodies, apis } =\n    provider;\n\n  const adaptor = getAdaptor(initOptions.adaptor ?? ads.fetch);\n  const code = await Generator.genCode(\n    {\n      enums,\n      schemas,\n      parameters,\n      responses,\n      requestBodies,\n      apis,\n    },\n    initOptions,\n    adaptor,\n  );\n\n  if (process.env.NODE_ENV === \"test\") {\n    await Generator.write(code, initOptions.output);\n  }\n\n  return code;\n}\n\nexport { type ProviderInitOptions } from \"@apicodegen/core\";\n","import {\n  ArrayTypeSchemaObject,\n  EnumSchemaObject,\n  MediaTypeObject,\n  MediaTypes,\n  OperationObject,\n  ParameterIn,\n  ParameterObject,\n  SchemaFormatType,\n  SchemaObject,\n} from \"@apicodegen/core\";\nimport { Base, HttpMethods, NonArraySchemaType } from \"@apicodegen/core\";\nimport { OpenAPIV2 } from \"openapi-types\";\n\nexport class V2 {\n  doc!: OpenAPIV2.Document;\n\n  constructor(doc: OpenAPIV2.Document) {\n    this.doc = doc;\n  }\n\n  /**\n   * Is array schema.\n   */\n  private isOpenAPIArraySchema(schema: OpenAPIV2.SchemaObject): boolean {\n    return typeof schema === \"object\" && schema.type === \"array\";\n  }\n\n  /**\n   * OpenAPI schema to base schema.\n   */\n  private getSchemaByRef(\n    schema: OpenAPIV2.SchemaObject | OpenAPIV2.ReferenceObject,\n    reserveRef = false,\n    enums: EnumSchemaObject[] = [],\n    upLevelSchemaKey = \"\",\n  ): SchemaObject {\n    let refName = \"\";\n    if (Base.isRef(schema)) {\n      refName = Base.upperCamelCase(Base.ref2name(schema.$ref));\n      if (reserveRef) {\n        return {\n          type: upLevelSchemaKey + refName,\n        };\n      }\n\n      if (!this.doc.definitions) {\n        this.doc.definitions = {};\n      }\n\n      schema = this.doc.definitions[Base.ref2name(schema.$ref, this.doc)];\n    }\n\n    return this.toBaseSchema(schema, enums, \"\", upLevelSchemaKey + refName);\n  }\n\n  /**\n   * Transform all OpenAPI schema to Base Schema\n   */\n  private toBaseSchema(\n    schema: OpenAPIV2.SchemaObject | OpenAPIV2.ReferenceObject | undefined,\n    enums: EnumSchemaObject[] = [],\n    schemaKey = \"\",\n    upLevelSchemaKey = \"\",\n  ): SchemaObject {\n    if (!schema) {\n      return {\n        type: \"unknown\",\n      };\n    }\n\n    if (Base.isRef(schema)) {\n      return this.getSchemaByRef(schema, true);\n    }\n\n    if (this.isOpenAPIArraySchema(schema)) {\n      const { type, description, items, required } = schema;\n\n      return {\n        type: type as string,\n        required: !!required,\n        description,\n        items: this.toBaseSchema(items, enums, schemaKey, upLevelSchemaKey),\n      } as ArrayTypeSchemaObject;\n    } else {\n      const {\n        required = [],\n        allOf,\n        anyOf,\n        description,\n        enum: enum_,\n        format,\n        oneOf,\n        properties = {},\n      } = schema;\n      let { type } = schema;\n\n      if (enum_ && type !== \"boolean\") {\n        const name =\n          Base.upperCamelCase(upLevelSchemaKey) +\n          Base.upperCamelCase(schemaKey);\n\n        const enumObject = {\n          name,\n          enum: [...new Set(enum_ as (string | number)[])],\n        };\n\n        const sameObject = Base.findSameSchema(enumObject, enums);\n\n        if (\n          !sameObject &&\n          Base.isValidEnumType(schema as unknown as SchemaObject)\n        ) {\n          enums.push(enumObject);\n        }\n\n        return {\n          type: sameObject\n            ? sameObject.name\n            : Base.isBooleanEnum(schema as unknown as SchemaObject)\n              ? \"boolean\"\n              : enumObject.name,\n          required,\n          description,\n        };\n      }\n\n      if (type === undefined && Object.keys(properties).length > 0) {\n        type = NonArraySchemaType.object;\n      }\n\n      return {\n        type: type as unknown as NonArraySchemaType,\n        required,\n        description,\n        enum: enum_,\n        format: format as unknown as SchemaFormatType,\n        allOf: allOf?.map((s) =>\n          Base.isRef(s)\n            ? {\n                ...s,\n                ref: s.$ref,\n                type: Base.upperCamelCase(Base.ref2name(s.$ref, this.doc)),\n              }\n            : this.toBaseSchema(s as OpenAPIV2.SchemaObject, enums),\n        ),\n        anyOf: anyOf?.map((s) =>\n          Base.isRef(s)\n            ? {\n                ...s,\n                ref: s.$ref,\n                type: Base.upperCamelCase(Base.ref2name(s.$ref, this.doc)),\n              }\n            : this.toBaseSchema(s as OpenAPIV2.SchemaObject, enums),\n        ),\n        oneOf: oneOf?.map((s) =>\n          Base.isRef(s)\n            ? {\n                ...s,\n                ref: s.$ref,\n                type: Base.upperCamelCase(Base.ref2name(s.$ref, this.doc)),\n              }\n            : this.toBaseSchema(s as OpenAPIV2.SchemaObject, enums),\n        ),\n        properties: Object.keys(properties).reduce((acc, p) => {\n          const propSchema = properties[p];\n          return {\n            ...acc,\n            [p]: Base.isRef(propSchema)\n              ? {\n                  type: Base.upperCamelCase(\n                    Base.ref2name(propSchema.$ref, this.doc),\n                  ),\n                }\n              : this.toBaseSchema(propSchema, enums, p, upLevelSchemaKey),\n          };\n        }, {}),\n      };\n    }\n  }\n\n  /**\n   * OpenAPI parameter to base parameter.\n   */\n  private getParameterByRef(\n    parameter: OpenAPIV2.ParameterObject | OpenAPIV2.ReferenceObject,\n    enums: EnumSchemaObject[] = [],\n    upLevelSchemaKey = \"\",\n  ): ParameterObject {\n    if (Base.isRef(parameter)) {\n      parameter = this.doc.parameters![Base.ref2name(parameter.$ref, this.doc)];\n    }\n\n    const {\n      name,\n      required,\n      description,\n      type,\n      items,\n      enum: enum_,\n      properties,\n      schema,\n    } = parameter;\n\n    if (enum_) {\n      const type =\n        Base.upperCamelCase(upLevelSchemaKey) + Base.upperCamelCase(name);\n\n      const enumSchema = {\n        name: type,\n        enum: [...new Set(enum_ as (string | number)[])],\n      };\n\n      const sameEnum = Base.findSameSchema(enumSchema, enums);\n\n      if (\n        !sameEnum &&\n        Base.isValidEnumType({ type, enum: enums } as SchemaObject)\n      ) {\n        enums.push(enumSchema);\n      }\n\n      return {\n        name,\n        required,\n        description,\n        in: parameter.in as ParameterIn,\n        schema: {\n          type: sameEnum?.name ?? type,\n        },\n      };\n    }\n\n    if (items) {\n      return {\n        name,\n        required,\n        description,\n        in: parameter.in as ParameterIn,\n        schema: {\n          type: type as string,\n          items: items as OpenAPIV2.SchemaObject | undefined,\n        } as ArrayTypeSchemaObject,\n      };\n    }\n\n    if (schema && Base.isRef(schema)) {\n      return {\n        name,\n        required,\n        description,\n        in: parameter.in as ParameterIn,\n        schema: {\n          type: Base.upperCamelCase(Base.ref2name(schema.$ref)),\n        },\n      };\n    }\n\n    return {\n      name,\n      required,\n      description,\n      in: parameter.in as ParameterIn,\n      schema: {\n        type: type as string,\n        properties,\n      } as SchemaObject,\n    };\n  }\n\n  /**\n   * OpenAPI schema to base response\n   */\n  private getResponseByRef(\n    schema: OpenAPIV2.ResponseObject | OpenAPIV2.ReferenceObject,\n  ): MediaTypeObject[] {\n    if (Base.isRef(schema)) {\n      schema = this.doc.responses![Base.ref2name(schema.$ref, this.doc)]!;\n    }\n\n    const { schema: responseSchema } = schema;\n\n    return [\n      {\n        type: MediaTypes.JSON,\n        schema: responseSchema && this.getSchemaByRef(responseSchema, true),\n      },\n    ];\n  }\n\n  public init() {\n    const { definitions = {}, responses = {}, paths = {} } = this.doc;\n    const enums: EnumSchemaObject[] = [];\n\n    const definitions_ = Object.keys(definitions).reduce((acc, key) => {\n      const schema = definitions[key];\n\n      return {\n        ...acc,\n        [key]: this.getSchemaByRef(schema, false, enums, key),\n      };\n    }, {});\n\n    const responses_ = Object.keys(responses).reduce((acc, key) => {\n      const response = responses[key];\n\n      return {\n        ...acc,\n        [key]: this.getResponseByRef(response),\n      };\n    }, {});\n\n    const apis = Object.keys(paths).reduce((acc, path) => {\n      const pathObject = paths[path] ?? {};\n      const { $ref } = pathObject;\n\n      const methodApis: OperationObject[] = [];\n      if ($ref) {\n        // TODO: Need to handle ref senario\n      } else {\n        const { parameters = [] } = pathObject;\n        Object.values(HttpMethods).forEach((method) => {\n          const methodObject = pathObject[method as OpenAPIV2.HttpMethods];\n\n          if (methodObject) {\n            const {\n              deprecated,\n              operationId,\n              summary: summary_,\n              description: description_,\n              responses = {},\n            } = methodObject;\n            const { parameters: parameters_ = [] } = methodObject;\n            const baseParameters = [...parameters, ...parameters_].map(\n              (parameter) => this.getParameterByRef(parameter, enums),\n            );\n            const uniqueParameterName = [\n              ...new Set(baseParameters.map((p) => p.name)),\n            ];\n\n            if (Object.keys(responses).length === 0) {\n              Object.assign(responses, {\n                200: {\n                  description: \"Successful response\",\n                },\n              });\n            }\n\n            const inBody = baseParameters.filter(\n              (p) => p.in === \"body\" || p.in === \"formData\",\n            );\n\n            const notInBody = baseParameters.filter(\n              (p) => p.in !== \"body\" && p.in !== \"formData\",\n            );\n\n            const httpCodes = Object.keys(responses);\n            for (const code of httpCodes) {\n              if (code in responses) {\n                const response = responses[code]!;\n                const responseSchema = this.getResponseByRef(response);\n\n                const inBodyOnlyHasBody =\n                  inBody &&\n                  inBody.length === 1 &&\n                  inBody[0].in === \"body\" &&\n                  inBody[0].name === \"body\";\n\n                methodApis.push({\n                  method,\n                  operationId,\n                  summary: summary_,\n                  deprecated: deprecated,\n                  description: description_,\n                  parameters: uniqueParameterName\n                    .map((name) => notInBody.find((p) => p.name === name)!)\n                    .filter(Boolean),\n                  responses: responseSchema,\n                  requestBody:\n                    inBody.length > 0\n                      ? inBodyOnlyHasBody\n                        ? [\n                            {\n                              type: MediaTypes.JSON,\n                              schema: inBody[0].schema,\n                            },\n                          ]\n                        : [\n                            {\n                              type: MediaTypes.JSON,\n                              schema: {\n                                type: NonArraySchemaType.object,\n                                properties: inBody.reduce<\n                                  Record<string, SchemaObject>\n                                >((a, p) => {\n                                  return {\n                                    ...a,\n                                    [p.name]: {\n                                      type: p.schema?.type ?? \"unknown\",\n                                      required: p.schema?.required,\n                                      // @ts-expect-error items can be undefined\n                                      // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                                      items: p.schema?.items,\n                                      description: p.schema?.description,\n                                    } as SchemaObject,\n                                  };\n                                }, {}),\n                              },\n                            },\n                          ]\n                      : undefined,\n                });\n                break;\n              }\n            }\n          }\n        });\n      }\n\n      return {\n        ...acc,\n        [path]: methodApis,\n      };\n    }, {});\n\n    return {\n      enums: Base.uniqueEnums(enums),\n      schemas: definitions_,\n      responses: responses_,\n      parameters: {},\n      requestBodies: {},\n      apis,\n    };\n  }\n}\n","import type {\n  EnumSchemaObject,\n  MediaTypeObject,\n  MediaTypes,\n  OperationObject,\n  ParameterIn,\n  ParameterObject,\n  SchemaFormatType,\n  SchemaObject,\n} from \"@apicodegen/core\";\nimport { Base, HttpMethods, NonArraySchemaType } from \"@apicodegen/core\";\nimport { OpenAPIV3 } from \"openapi-types\";\n\nexport class V3 {\n  doc!: OpenAPIV3.Document;\n\n  constructor(doc: OpenAPIV3.Document) {\n    this.doc = doc;\n  }\n\n  /**\n   * Is array schema.\n   */\n  private isOpenAPIArraySchema(\n    schema: OpenAPIV3.SchemaObject,\n  ): schema is OpenAPIV3.ArraySchemaObject {\n    return typeof schema === \"object\" && schema.type === \"array\";\n  }\n\n  /**\n   * OpenAPI schema to base schema.\n   */\n  private getSchemaByRef(\n    schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject,\n    reserveRef = false,\n    enums: EnumSchemaObject[] = [],\n    upLevelSchemaKey = \"\",\n  ): SchemaObject {\n    let refName = \"\";\n    if (Base.isRef(schema)) {\n      refName = Base.capitalize(Base.ref2name(schema.$ref));\n      if (reserveRef) {\n        return {\n          type: upLevelSchemaKey + refName,\n        };\n      }\n      schema = this.doc.components?.schemas?.[\n        Base.ref2name(schema.$ref, this.doc)\n      ] as OpenAPIV3.SchemaObject;\n    }\n\n    return this.toBaseSchema(schema, enums, \"\", upLevelSchemaKey + refName);\n  }\n\n  /**\n   * OpenAPI parameter to base parameter.\n   */\n  private getParameterByRef(\n    schema: OpenAPIV3.ParameterObject | OpenAPIV3.ReferenceObject,\n    enums: EnumSchemaObject[] = [],\n    upLevelSchemaKey = \"\",\n  ): ParameterObject {\n    if (Base.isRef(schema)) {\n      schema = this.doc.components?.parameters?.[\n        Base.ref2name(schema.$ref, this.doc)\n      ] as OpenAPIV3.ParameterObject;\n    }\n\n    const {\n      name,\n      required,\n      deprecated,\n      description,\n      schema: parameterSchema,\n    } = schema;\n\n    if (\n      parameterSchema &&\n      !Base.isRef(parameterSchema) &&\n      parameterSchema.enum\n    ) {\n      const type =\n        Base.upperCamelCase(Base.normalize(upLevelSchemaKey)) +\n        Base.upperCamelCase(Base.normalize(name));\n\n      const enumSchema = {\n        name: type,\n        enum: [...new Set(parameterSchema.enum as (string | number)[])],\n      };\n\n      const sameEnum = Base.findSameSchema(enumSchema, enums);\n\n      if (\n        !sameEnum &&\n        Base.isValidEnumType(parameterSchema as unknown as SchemaObject)\n      ) {\n        enums.push(enumSchema);\n      }\n\n      return {\n        name,\n        required,\n        description,\n        deprecated,\n        in: schema.in as ParameterIn,\n        schema: {\n          type: sameEnum?.name ?? type,\n        },\n      };\n    }\n\n    return {\n      name,\n      required,\n      description,\n      deprecated,\n      in: schema.in as ParameterIn,\n      schema:\n        schema.schema &&\n        this.getSchemaByRef(\n          schema.schema,\n          false,\n          enums,\n          upLevelSchemaKey + Base.capitalize(name),\n        ),\n    };\n  }\n\n  /**\n   * OpenAPI schema to base response\n   */\n  private getResponseByRef(\n    schema: OpenAPIV3.ResponseObject | OpenAPIV3.ReferenceObject,\n  ): MediaTypeObject[] {\n    if (Base.isRef(schema)) {\n      schema = this.doc.components?.responses?.[\n        Base.ref2name(schema.$ref, this.doc)\n      ] as OpenAPIV3.ResponseObject;\n    }\n\n    const { content = {} } = schema;\n\n    return Object.keys(content).map((c) => ({\n      type: c as MediaTypes,\n      schema: content[c].schema && this.getSchemaByRef(content[c].schema, true),\n    }));\n  }\n\n  /**\n   * OpenAPI schema to requestBody.\n   */\n  private getRequestBodyByRef(\n    schema: OpenAPIV3.RequestBodyObject | OpenAPIV3.ReferenceObject,\n    enums: EnumSchemaObject[] = [],\n  ): MediaTypeObject[] {\n    if (Base.isRef(schema)) {\n      schema = this.doc.components?.requestBodies?.[\n        Base.ref2name(schema.$ref, this.doc)\n      ] as OpenAPIV3.RequestBodyObject;\n    }\n\n    const { content = {} } = schema;\n\n    return Object.keys(content).map((c) => ({\n      type: c as MediaTypes,\n      schema:\n        content[c].schema &&\n        this.getSchemaByRef(content[c].schema, false, enums),\n    }));\n  }\n\n  /**\n   * Transform all OpenAPI schema to Base Schema\n   */\n  private toBaseSchema(\n    schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | undefined,\n    enums: EnumSchemaObject[] = [],\n    schemaKey = \"\",\n    upLevelSchemaKey = \"\",\n  ): SchemaObject {\n    if (!schema) {\n      return {\n        type: \"unknown\",\n      };\n    }\n\n    if (Base.isRef(schema)) {\n      return this.getSchemaByRef(schema, true);\n    }\n\n    if (this.isOpenAPIArraySchema(schema)) {\n      const { type, description, items, required } = schema;\n\n      return {\n        type,\n        required: !!required,\n        description,\n        items: this.toBaseSchema(items, enums, schemaKey, upLevelSchemaKey),\n      };\n    } else {\n      const {\n        required = [],\n        allOf,\n        anyOf,\n        description,\n        deprecated,\n        enum: enum_,\n        format,\n        oneOf,\n        properties = {},\n      } = schema;\n      let { type } = schema;\n\n      if (enum_ && type !== \"boolean\") {\n        const name =\n          Base.upperCamelCase(Base.normalize(upLevelSchemaKey)) +\n          Base.upperCamelCase(Base.normalize(schemaKey));\n\n        const enumObject = {\n          name,\n          enum: [...new Set(enum_ as (string | number)[])],\n        };\n\n        const sameObject = Base.findSameSchema(enumObject, enums);\n\n        if (\n          !sameObject &&\n          Base.isValidEnumType(schema as unknown as SchemaObject)\n        ) {\n          enums.push(enumObject);\n        }\n\n        return {\n          type: sameObject\n            ? sameObject.name\n            : Base.isBooleanEnum(schema as unknown as SchemaObject)\n              ? \"boolean\"\n              : enumObject.name,\n          required,\n          description,\n          deprecated,\n        };\n      }\n\n      if (type === undefined && Object.keys(properties).length > 0) {\n        type = NonArraySchemaType.object;\n      }\n\n      return {\n        type: type as unknown as NonArraySchemaType,\n        required,\n        description,\n        deprecated,\n        enum: enum_,\n        format: format as unknown as SchemaFormatType,\n        allOf: allOf?.map((s) =>\n          Base.isRef(s)\n            ? {\n                ...s,\n                ref: s.$ref,\n                type: Base.capitalize(Base.ref2name(s.$ref, this.doc)),\n              }\n            : this.toBaseSchema(s, enums),\n        ),\n        anyOf: anyOf?.map((s) =>\n          Base.isRef(s)\n            ? {\n                ...s,\n                ref: s.$ref,\n                type: Base.capitalize(Base.ref2name(s.$ref, this.doc)),\n              }\n            : this.toBaseSchema(s, enums),\n        ),\n        oneOf: oneOf?.map((s) =>\n          Base.isRef(s)\n            ? {\n                ...s,\n                ref: s.$ref,\n                type: Base.capitalize(Base.ref2name(s.$ref, this.doc)),\n              }\n            : this.toBaseSchema(s, enums),\n        ),\n        properties: Object.keys(properties).reduce((acc, p) => {\n          const propSchema = properties[p];\n          return {\n            ...acc,\n            [p]: Base.isRef(propSchema)\n              ? {\n                  type: Base.capitalize(\n                    Base.ref2name(propSchema.$ref, this.doc),\n                  ),\n                }\n              : this.toBaseSchema(propSchema, enums, p, upLevelSchemaKey),\n          };\n        }, {}),\n      };\n    }\n  }\n\n  public init() {\n    const { components = {}, paths = {} } = this.doc;\n    const enums: EnumSchemaObject[] = [];\n    const {\n      requestBodies = {},\n      responses = {},\n      parameters = {},\n      schemas = {},\n    } = components;\n\n    const schemas_ = Object.keys(schemas).reduce((acc, key) => {\n      const schema = schemas[key];\n\n      return {\n        ...acc,\n        [key]: this.getSchemaByRef(schema, false, enums, key),\n      };\n    }, {});\n\n    const parameters_ = Object.keys(parameters).reduce((acc, key) => {\n      const parameter = parameters[key];\n\n      return {\n        ...acc,\n        [key]: this.getParameterByRef(parameter, enums, key),\n      };\n    }, {});\n\n    const responses_ = Object.keys(responses).reduce((acc, key) => {\n      const response = responses[key];\n\n      return {\n        ...acc,\n        [key]: this.getResponseByRef(response),\n      };\n    }, {});\n\n    const requestBodies_ = Object.keys(requestBodies).reduce((acc, key) => {\n      const requestBody = requestBodies[key];\n\n      return {\n        ...acc,\n        [key]: this.getRequestBodyByRef(requestBody, enums),\n      };\n    }, {});\n\n    const apis = Object.keys(paths).reduce((acc, path) => {\n      const pathObject = paths[path] ?? {};\n      const { $ref } = pathObject;\n\n      const methodApis: OperationObject[] = [];\n      if ($ref) {\n        // TODO: Need to handle ref senario\n      } else {\n        const { parameters = [], description, summary } = pathObject;\n        Object.values(HttpMethods).forEach((method) => {\n          const methodObject = pathObject[method as OpenAPIV3.HttpMethods];\n\n          if (methodObject) {\n            const {\n              deprecated,\n              operationId,\n              responses = {},\n              summary: summary_,\n              description: description_,\n              requestBody = { content: {} },\n            } = methodObject;\n            const { parameters: parameters_ = [] } = methodObject;\n            const baseParameters = [...parameters, ...parameters_].map(\n              (parameter) => this.getParameterByRef(parameter, enums),\n            );\n            const baseRequestBody = this.getRequestBodyByRef(\n              requestBody,\n              enums,\n            );\n            const uniqueParameterName = [\n              ...new Set(baseParameters.map((p) => p.name)),\n            ];\n\n            if (Object.keys(responses).length === 0) {\n              Object.assign(responses, {\n                200: {\n                  description: \"Successful response\",\n                },\n              });\n            }\n            const httpCodes = Object.keys(responses);\n            for (const code of httpCodes) {\n              if (code in responses) {\n                const response = responses[code];\n                const responseSchema = this.getResponseByRef(response);\n                methodApis.push({\n                  method,\n                  operationId,\n                  summary: summary_ ?? summary,\n                  description: description_ ?? description,\n                  deprecated: deprecated,\n                  parameters: uniqueParameterName.map(\n                    (name) => baseParameters.find((p) => p.name === name)!,\n                  ),\n                  responses: responseSchema,\n                  requestBody: baseRequestBody,\n                });\n                break;\n              }\n            }\n          }\n        });\n      }\n\n      return {\n        ...acc,\n        [path]: methodApis,\n      };\n    }, {});\n\n    return {\n      enums: Base.uniqueEnums(enums),\n      schemas: schemas_,\n      responses: responses_,\n      parameters: parameters_,\n      requestBodies: requestBodies_,\n      apis,\n    };\n  }\n}\n","/* eslint-disable unicorn/filename-case */\n\nimport type {\n  EnumSchemaObject,\n  MediaTypeObject,\n  MediaTypes,\n  OperationObject,\n  ParameterIn,\n  ParameterObject,\n  SchemaFormatType,\n  SchemaObject,\n} from \"@apicodegen/core\";\nimport { Base, HttpMethods, NonArraySchemaType } from \"@apicodegen/core\";\nimport { OpenAPIV3_1 } from \"openapi-types\";\n\nexport class V3_1 {\n  doc!: OpenAPIV3_1.Document;\n\n  constructor(doc: OpenAPIV3_1.Document) {\n    this.doc = doc;\n  }\n\n  /**\n   * Is array schema.\n   */\n  private isOpenAPIArraySchema(\n    schema: OpenAPIV3_1.SchemaObject,\n  ): schema is OpenAPIV3_1.ArraySchemaObject {\n    return typeof schema === \"object\" && schema.type === \"array\";\n  }\n\n  /**\n   * OpenAPI schema to base schema.\n   */\n  private getSchemaByRef(\n    schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject,\n    reserveRef = false,\n    enums: EnumSchemaObject[] = [],\n    upLevelSchemaKey = \"\",\n  ): SchemaObject {\n    let refName = \"\";\n    if (Base.isRef(schema)) {\n      refName = Base.upperCamelCase(Base.ref2name(schema.$ref));\n      if (reserveRef) {\n        return {\n          type: upLevelSchemaKey + refName,\n        };\n      }\n\n      if (!this.doc.components) {\n        this.doc.components = {\n          schemas: {},\n        };\n      }\n\n      schema =\n        this.doc.components.schemas![Base.ref2name(schema.$ref, this.doc)];\n    }\n\n    return this.toBaseSchema(schema, enums, \"\", upLevelSchemaKey + refName);\n  }\n\n  /**\n   * OpenAPI parameter to base parameter.\n   */\n  private getParameterByRef(\n    schema: OpenAPIV3_1.ParameterObject | OpenAPIV3_1.ReferenceObject,\n    enums: EnumSchemaObject[] = [],\n    upLevelSchemaKey = \"\",\n  ): ParameterObject {\n    if (Base.isRef(schema)) {\n      schema = this.doc.components?.parameters?.[\n        Base.ref2name(schema.$ref, this.doc)\n      ] as OpenAPIV3_1.ParameterObject;\n    }\n\n    const {\n      name,\n      required,\n      deprecated,\n      description,\n      schema: parameterSchema,\n    } = schema;\n\n    if (\n      parameterSchema &&\n      !Base.isRef(parameterSchema) &&\n      parameterSchema.enum\n    ) {\n      const type =\n        Base.upperCamelCase(upLevelSchemaKey) + Base.upperCamelCase(name);\n\n      const enumSchema = {\n        name: type,\n        enum: [...new Set(parameterSchema.enum as (string | number)[])],\n      };\n\n      const sameEnum = Base.findSameSchema(enumSchema, enums);\n\n      if (\n        !sameEnum &&\n        Base.isValidEnumType(parameterSchema as unknown as SchemaObject)\n      ) {\n        enums.push(enumSchema);\n      }\n\n      return {\n        name,\n        required,\n        description,\n        deprecated,\n        in: schema.in as ParameterIn,\n        schema: {\n          type: sameEnum?.name ?? type,\n        },\n      };\n    }\n\n    return {\n      name,\n      required,\n      description,\n      deprecated,\n      in: schema.in as ParameterIn,\n      schema:\n        schema.schema &&\n        this.getSchemaByRef(\n          schema.schema,\n          false,\n          enums,\n          upLevelSchemaKey + Base.capitalize(name),\n        ),\n    };\n  }\n\n  /**\n   * OpenAPI schema to base response\n   */\n  private getResponseByRef(\n    schema: OpenAPIV3_1.ResponseObject | OpenAPIV3_1.ReferenceObject,\n  ): MediaTypeObject[] {\n    if (Base.isRef(schema)) {\n      schema = this.doc.components?.responses?.[\n        Base.ref2name(schema.$ref, this.doc)\n      ] as OpenAPIV3_1.ResponseObject;\n    }\n\n    const { content = {} } = schema;\n\n    return Object.keys(content).map((c) => ({\n      type: c as MediaTypes,\n      schema: content[c].schema && this.getSchemaByRef(content[c].schema, true),\n    }));\n  }\n\n  /**\n   * OpenAPI schema to requestBody.\n   */\n  private getRequestBodyByRef(\n    schema: OpenAPIV3_1.RequestBodyObject | OpenAPIV3_1.ReferenceObject,\n    enums: EnumSchemaObject[] = [],\n    reserveRef = false,\n  ): MediaTypeObject[] {\n    if (Base.isRef(schema)) {\n      schema = this.doc.components?.requestBodies?.[\n        Base.ref2name(schema.$ref, this.doc)\n      ] as OpenAPIV3_1.RequestBodyObject;\n    }\n\n    const { content = {} } = schema;\n\n    return Object.keys(content).map((c) => ({\n      type: c as MediaTypes,\n      schema:\n        content[c].schema &&\n        this.getSchemaByRef(content[c].schema, reserveRef, enums),\n    }));\n  }\n\n  /**\n   * Transform all OpenAPI schema to Base Schema\n   */\n  private toBaseSchema(\n    schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject | undefined,\n    enums: EnumSchemaObject[] = [],\n    schemaKey = \"\",\n    upLevelSchemaKey = \"\",\n  ): SchemaObject {\n    if (!schema) {\n      return {\n        type: \"unknown\",\n      };\n    }\n\n    if (Base.isRef(schema)) {\n      return this.getSchemaByRef(schema, true);\n    }\n\n    if (this.isOpenAPIArraySchema(schema)) {\n      const { type, description, items, required } = schema;\n\n      return {\n        type,\n        required: !!required,\n        description,\n        items: this.toBaseSchema(items, enums, schemaKey, upLevelSchemaKey),\n      };\n    } else {\n      const {\n        required = [],\n        allOf,\n        anyOf,\n        description,\n        deprecated,\n        enum: enum_,\n        format,\n        oneOf,\n        properties = {},\n      } = schema;\n      let { type } = schema;\n\n      if (enum_ && type !== \"boolean\") {\n        const name =\n          Base.upperCamelCase(upLevelSchemaKey) +\n          Base.upperCamelCase(schemaKey);\n\n        const enumObject = {\n          name,\n          enum: [...new Set(enum_ as (string | number)[])],\n        };\n\n        const sameObject = Base.findSameSchema(enumObject, enums);\n\n        if (\n          !sameObject &&\n          Base.isValidEnumType(schema as unknown as SchemaObject)\n        ) {\n          enums.push(enumObject);\n        }\n\n        return {\n          type: sameObject\n            ? sameObject.name\n            : Base.isBooleanEnum(schema as unknown as SchemaObject)\n              ? \"boolean\"\n              : enumObject.name,\n          required,\n          description,\n          deprecated,\n        };\n      }\n\n      if (type === undefined && Object.keys(properties).length > 0) {\n        type = NonArraySchemaType.object;\n      }\n\n      return {\n        type: type as unknown as NonArraySchemaType,\n        required,\n        description,\n        deprecated,\n        enum: enum_,\n        format: format as unknown as SchemaFormatType,\n        allOf: allOf?.map((s) =>\n          Base.isRef(s)\n            ? {\n                ...s,\n                ref: s.$ref,\n                type: Base.upperCamelCase(Base.ref2name(s.$ref, this.doc)),\n              }\n            : this.toBaseSchema(s, enums),\n        ),\n        anyOf: anyOf?.map((s) =>\n          Base.isRef(s)\n            ? {\n                ...s,\n                ref: s.$ref,\n                type: Base.upperCamelCase(Base.ref2name(s.$ref, this.doc)),\n              }\n            : this.toBaseSchema(s, enums),\n        ),\n        oneOf: oneOf?.map((s) =>\n          Base.isRef(s)\n            ? {\n                ...s,\n                ref: s.$ref,\n                type: Base.upperCamelCase(Base.ref2name(s.$ref, this.doc)),\n              }\n            : this.toBaseSchema(s, enums),\n        ),\n        properties: Object.keys(properties).reduce((acc, p) => {\n          const propSchema = properties[p];\n          return {\n            ...acc,\n            [p]: Base.isRef(propSchema)\n              ? {\n                  type: Base.upperCamelCase(\n                    Base.ref2name(propSchema.$ref, this.doc),\n                  ),\n                }\n              : this.toBaseSchema(propSchema, enums, p, upLevelSchemaKey),\n          };\n        }, {}),\n      };\n    }\n  }\n\n  public init() {\n    const { components = {}, paths = {} } = this.doc;\n    const enums: EnumSchemaObject[] = [];\n    const {\n      requestBodies = {},\n      responses = {},\n      parameters = {},\n      schemas = {},\n    } = components;\n\n    const schemas_ = Object.keys(schemas).reduce((acc, key) => {\n      const schema = schemas[key];\n\n      return {\n        ...acc,\n        [key]: this.getSchemaByRef(schema, false, enums, key),\n      };\n    }, {});\n\n    const parameters_ = Object.keys(parameters).reduce((acc, key) => {\n      const parameter = parameters[key];\n\n      return {\n        ...acc,\n        [key]: this.getParameterByRef(parameter, enums, key),\n      };\n    }, {});\n\n    const responses_ = Object.keys(responses).reduce((acc, key) => {\n      const response = responses[key];\n\n      return {\n        ...acc,\n        [key]: this.getResponseByRef(response),\n      };\n    }, {});\n\n    const requestBodies_ = Object.keys(requestBodies).reduce((acc, key) => {\n      const requestBody = requestBodies[key];\n\n      return {\n        ...acc,\n        [key]: this.getRequestBodyByRef(requestBody, enums),\n      };\n    }, {});\n\n    const apis = Object.keys(paths).reduce((acc, path) => {\n      const pathObject = paths[path] ?? {};\n      const { $ref } = pathObject;\n\n      const methodApis: OperationObject[] = [];\n      if ($ref) {\n        // TODO: Need to handle ref senario\n      } else {\n        const { parameters = [], description, summary } = pathObject;\n        Object.values(HttpMethods).forEach((method) => {\n          const methodObject = pathObject[method as OpenAPIV3_1.HttpMethods];\n\n          if (methodObject) {\n            const {\n              deprecated,\n              operationId,\n              summary: summary_,\n              description: description_,\n              responses = {},\n              requestBody = { content: {} },\n            } = methodObject;\n            const { parameters: parameters_ = [] } = methodObject;\n            const baseParameters = [...parameters, ...parameters_].map(\n              (parameter) => this.getParameterByRef(parameter, enums),\n            );\n            const baseRequestBody = this.getRequestBodyByRef(\n              requestBody,\n              enums,\n              true,\n            );\n            const uniqueParameterName = [\n              ...new Set(baseParameters.map((p) => p.name)),\n            ];\n\n            if (Object.keys(responses).length === 0) {\n              Object.assign(responses, {\n                200: {\n                  description: \"Successful response\",\n                },\n              });\n            }\n            const httpCodes = Object.keys(responses);\n            for (const code of httpCodes) {\n              if (code in responses) {\n                const response = responses[code];\n                const responseSchema = this.getResponseByRef(response);\n                methodApis.push({\n                  method,\n                  operationId,\n                  summary: summary_ ?? summary,\n                  description: description_ ?? description,\n                  deprecated: deprecated,\n                  parameters: uniqueParameterName.map(\n                    (name) => baseParameters.find((p) => p.name === name)!,\n                  ),\n                  responses: responseSchema,\n                  requestBody: baseRequestBody,\n                });\n                break;\n              }\n            }\n          }\n        });\n      }\n\n      return {\n        ...acc,\n        [path]: methodApis,\n      };\n    }, {});\n\n    return {\n      enums: Base.uniqueEnums(enums),\n      schemas: schemas_,\n      responses: responses_,\n      parameters: parameters_,\n      requestBodies: requestBodies_,\n      apis,\n    };\n  }\n}\n","import { codeGen, type ProviderInitOptions } from \"@apicodegen/openapi\";\nimport { createScopedLogger } from \"@moccona/logger\";\nimport { execaCommand } from \"execa\";\nimport fs from \"fs-extra\";\nimport type { PluginOption, ServerOptions } from \"vite\";\n\nconst PLUGIN_NAME = \"apiCodeGen\";\nconst logger = createScopedLogger(\"api-codegen-vite-plugin\");\n\nexport type apiCodeGenPluginOptions = ProviderInitOptions & {\n  name: string;\n  proxy?: ServerOptions[\"proxy\"];\n};\n\nexport const tsc = async () => {\n  await execaCommand(\"npx tsc -b\");\n};\n\nexport function apiCodeGenPlugin(\n  options: apiCodeGenPluginOptions[],\n): PluginOption {\n  let firstRun = true;\n  return {\n    name: PLUGIN_NAME,\n    async config(config) {\n      if (!firstRun) return;\n      firstRun = false;\n      logger.info(\"-------> api codegen start <--------\");\n\n      const proxies = await options.reduce(\n        async (proxiesPromise_, option) => {\n          const proxies_ = await proxiesPromise_;\n          const { proxy = {}, name, ...codeGenInitOptions } = option;\n\n          try {\n            const code = await codeGen(codeGenInitOptions);\n            await fs.createFile(codeGenInitOptions.output);\n            await fs.writeFile(codeGenInitOptions.output, code);\n          } catch (error) {\n            logger.error(`Failed to generate api ${name}`);\n            console.error(error);\n          }\n\n          return {\n            ...proxies_,\n            ...proxy,\n          };\n        },\n        Promise.resolve({} as ServerOptions[\"proxy\"]),\n      );\n\n      logger.info(\"-------> api codegen finished <--------\");\n\n      try {\n        await tsc();\n      } catch (error) {\n        logger.error(error);\n      }\n\n      return {\n        ...config,\n        server: {\n          ...(config.server ?? {}),\n          proxy: Object.assign({}, config.server?.proxy ?? {}, proxies),\n        },\n      };\n    },\n  };\n}\n"],"mappings":"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","names":["SchemaType","NonArraySchemaType","ArraySchemaType","SchemaFormatType","ParameterIn","MediaTypes","HttpMethods","Adaptors","t","t","format","type","schema","import_typescript","t","import_typescript","t","format","type","responses","format","parameters","responses","parameters_","format","parameters","responses","parameters_","OpenAPIVersion","import_logger","logger","fs"]}