{"version":3,"sources":["../../zimic-utils/src/data/isDefined.ts","../../zimic-utils/src/data/isNonEmpty.ts","../src/typegen/openapi/utils/types.ts","../src/types/schema.ts","../../zimic-utils/src/logging/Logger.ts","../src/utils/logging.ts","../src/typegen/openapi/transform/operations.ts","../src/typegen/openapi/transform/methods.ts","../src/typegen/openapi/transform/paths.ts","../src/typegen/openapi/transform/components.ts","../src/utils/strings.ts","../../zimic-utils/src/url/createRegexFromPath.ts","../../zimic-utils/src/url/createWildcardRegexFromPath.ts","../src/utils/files.ts","../src/typegen/openapi/transform/filters.ts","../src/typegen/openapi/transform/context.ts","../src/typegen/openapi/transform/imports.ts","../../zimic-utils/src/import/createCachedDynamicImport.ts","../src/typegen/openapi/transform/io.ts","../src/typegen/openapi/generate.ts"],"names":["ts","color","type","isComponent","path","node","componentPath","fs","generateTypesFromOpenAPI"],"mappings":"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","file":"chunk-GALM2NMU.mjs","sourcesContent":["function isDefined<Value>(value: Value): value is NonNullable<Value> {\n  return value !== undefined && value !== null;\n}\n\nexport default isDefined;\n","import isDefined from './isDefined';\n\nfunction isNonEmpty<Value>(value: Value): value is Exclude<NonNullable<Value>, ''> {\n  return isDefined(value) && value !== '';\n}\n\nexport default isNonEmpty;\n","import ts from 'typescript';\n\nexport function isNeverType(type: ts.TypeNode) {\n  return type.kind === ts.SyntaxKind.NeverKeyword;\n}\n\nexport function isUnknownType(type: ts.TypeNode) {\n  return type.kind === ts.SyntaxKind.UnknownKeyword;\n}\n\nexport function isNumericType(type: ts.TypeNode) {\n  return type.kind === ts.SyntaxKind.NumberKeyword;\n}\n\nexport function isBooleanType(type: ts.TypeNode) {\n  return type.kind === ts.SyntaxKind.BooleanKeyword;\n}\n\nexport function isNullType(type: ts.TypeNode | ts.LiteralTypeNode['literal']) {\n  return type.kind === ts.SyntaxKind.NullKeyword;\n}\n\nexport function createBlobType() {\n  return ts.factory.createTypeReferenceNode('Blob');\n}\n\nexport function createNullType() {\n  return ts.factory.createLiteralTypeNode(ts.factory.createNull());\n}\n\nexport function createImportSpecifier(importName: string) {\n  return ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier(importName));\n}\n\nexport function createImportDeclaration(\n  importSpecifiers: ts.ImportSpecifier[],\n  moduleName: string,\n  options: { typeOnly: boolean },\n) {\n  return ts.factory.createImportDeclaration(\n    undefined,\n    ts.factory.createImportClause(\n      options.typeOnly ? ts.SyntaxKind.TypeKeyword : undefined,\n      undefined,\n      ts.factory.createNamedImports(importSpecifiers),\n    ),\n    ts.factory.createStringLiteral(moduleName),\n  );\n}\n","import {\n  IfAny,\n  UnionToIntersection,\n  UnionHasMoreThanOneType,\n  Prettify,\n  NonEmptyArray,\n  Branded,\n} from '@zimic/utils/types';\n\nimport { HttpFormDataSchema } from '../formData/types';\nimport { HttpHeadersSchema } from '../headers/types';\nimport { HttpPathParamsSchema } from '../pathParams/types';\nimport { HttpSearchParamsSchema } from '../searchParams/types';\nimport { HttpBody } from './requests';\n\nexport const HTTP_METHODS = Object.freeze(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'] as const);\n/**\n * A type representing the currently supported\n * {@link https://developer.mozilla.org/docs/Web/HTTP/Methods `HTTP methods`}.\n */\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\n/**\n * A schema representing the structure of an HTTP request.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport interface HttpRequestSchema {\n  headers?: HttpHeadersSchema.Loose;\n  searchParams?: HttpSearchParamsSchema.Loose;\n  body?: HttpBody.Loose;\n}\n\n/**\n * A schema representing the structure of an HTTP response.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport interface HttpResponseSchema {\n  headers?: HttpHeadersSchema.Loose;\n  body?: HttpBody.Loose;\n}\n\n/**\n * The status codes used in HTTP responses, as defined by\n * {@link https://httpwg.org/specs/rfc9110.html#overview.of.status.codes RFC-9110}.\n *\n * - `HttpStatusCode.Information`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#information_responses `1XX`}\n * - `HttpStatusCode.Success`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#successful_responses `2XX`}\n * - `HttpStatusCode.Redirection`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#redirection_messages `3XX`}\n * - `HttpStatusCode.ClientError`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#client_error_responses `4XX`}\n * - `HttpStatusCode.ServerError`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#server_error_responses `5XX`}\n */\nexport type HttpStatusCode =\n  | HttpStatusCode.Information\n  | HttpStatusCode.Success\n  | HttpStatusCode.Redirection\n  | HttpStatusCode.ClientError\n  | HttpStatusCode.ServerError;\n\nexport namespace HttpStatusCode {\n  /**\n   * An HTTP status code in the `1XX` range, representing an informational response.\n   *\n   * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#information_responses `1XX`}\n   */\n  export type Information =\n    | 100 // Continue\n    | 101 // Switching Protocols\n    | 102 // Processing\n    | 103; // Early Hints\n\n  /**\n   * An HTTP status code in the `2XX` range, representing a successful response.\n   *\n   * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#successful_responses `2XX`}\n   */\n  export type Success =\n    | 200 // OK\n    | 201 // Created\n    | 202 // Accepted\n    | 203 // Non-Authoritative Information\n    | 204 // No Content\n    | 205 // Reset Content\n    | 206 // Partial Content\n    | 207 // Multi-Status\n    | 208 // Already Reported\n    | 226; // IM Used\n\n  /**\n   * An HTTP status code in the `3XX` range, representing a redirection response.\n   *\n   * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#redirection_messages `3XX`}\n   */\n  export type Redirection =\n    | 300 // Multiple Choices\n    | 301 // Moved Permanently\n    | 302 // Found\n    | 303 // See Other\n    | 304 // Not Modified\n    | 307 // Temporary Redirect\n    | 308; // Permanent Redirect\n\n  /**\n   * An HTTP status code in the `4XX` range, representing a client error response.\n   *\n   * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#client_error_responses `4XX`}\n   */\n  export type ClientError =\n    | 400 // Bad Request\n    | 401 // Unauthorized\n    | 402 // Payment Required\n    | 403 // Forbidden\n    | 404 // Not Found\n    | 405 // Method Not Allowed\n    | 406 // Not Acceptable\n    | 407 // Proxy Authentication Required\n    | 408 // Request Timeout\n    | 409 // Conflict\n    | 410 // Gone\n    | 411 // Length Required\n    | 412 // Precondition Failed\n    | 413 // Content Too Large\n    | 414 // URI Too Long\n    | 415 // Unsupported Media Type\n    | 416 // Range Not Satisfiable\n    | 417 // Expectation Failed\n    | 418 // I'm a teapot\n    | 421 // Misdirected Request\n    | 422 // Unprocessable Content\n    | 423 // Locked\n    | 424 // Failed Dependency\n    | 425 // Too Early\n    | 426 // Upgrade Required\n    | 428 // Precondition Required\n    | 429 // Too Many Requests\n    | 431 // Request Header Fields Too Large\n    | 451; // Unavailable For Legal Reasons\n\n  /**\n   * An HTTP status code in the `5XX` range, representing a server error response.\n   *\n   * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#server_error_responses `5XX`}\n   */\n  export type ServerError =\n    | 500 // Internal Server Error\n    | 501 // Not Implemented\n    | 502 // Bad Gateway\n    | 503 // Service Unavailable\n    | 504 // Gateway Timeout\n    | 505 // HTTP Version Not Supported\n    | 506 // Variant Also Negotiates\n    | 507 // Insufficient Storage\n    | 508 // Loop Detected\n    | 510 // Not Extended\n    | 511; // Network Authentication Required\n}\n\n/**\n * A schema representing the structure of HTTP responses by status code.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport type HttpResponseSchemaByStatusCode = {\n  [StatusCode in HttpStatusCode]?: HttpResponseSchema;\n};\n\n/**\n * Extracts the status codes used in a response schema by status code.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport type HttpResponseSchemaStatusCode<ResponseSchemaByStatusCode extends HttpResponseSchemaByStatusCode> =\n  keyof ResponseSchemaByStatusCode & HttpStatusCode;\n\n/**\n * A schema representing the structure of an HTTP request and response for a given method.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport interface HttpMethodSchema {\n  request?: HttpRequestSchema;\n  response?: HttpResponseSchemaByStatusCode;\n}\n\n/**\n * A schema representing the structure of HTTP request and response by method.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport interface HttpMethodsSchema {\n  GET?: HttpMethodSchema;\n  POST?: HttpMethodSchema;\n  PUT?: HttpMethodSchema;\n  PATCH?: HttpMethodSchema;\n  DELETE?: HttpMethodSchema;\n  HEAD?: HttpMethodSchema;\n  OPTIONS?: HttpMethodSchema;\n}\n\ninterface BaseHttpSchema {\n  [path: string]: HttpMethodsSchema;\n}\n\n/** @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference} */\nexport type HttpSchema<Schema extends BaseHttpSchema = BaseHttpSchema> = Branded<Schema, 'HttpSchema'>;\n\nexport namespace HttpSchema {\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemamethods `HttpSchema.Methods` API reference} */\n  export type Methods<Schema extends HttpMethodsSchema> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemamethod `HttpSchema.Method` API reference} */\n  export type Method<Schema extends HttpMethodSchema> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemarequest `HttpSchema.Request` API reference} */\n  export type Request<Schema extends HttpRequestSchema> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemaresponsebystatuscode `HttpSchema.ResponseByStatusCode` API reference} */\n  export type ResponseByStatusCode<Schema extends HttpResponseSchemaByStatusCode> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemaresponse  `HttpSchema.Response` API reference} */\n  export type Response<Schema extends HttpResponseSchema> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemabody `HttpSchema.Body` API reference} */\n  export type Body<Schema extends HttpBody.Loose> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemaheaders `HttpSchema.Headers` API reference} */\n  export type Headers<Schema extends HttpHeadersSchema.Loose> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemasearchparams `HttpSchema.SearchParams` API reference} */\n  export type SearchParams<Schema extends HttpSearchParamsSchema.Loose> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemapathparams `HttpSchema.PathParams` API reference} */\n  export type PathParams<Schema extends HttpPathParamsSchema.Loose> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemaformdata `HttpSchema.FormData` API reference} */\n  export type FormData<Schema extends HttpFormDataSchema.Loose> = Schema;\n}\n\n/**\n * Extracts the methods from an HTTP service schema.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport type HttpSchemaMethod<Schema extends HttpSchema> = IfAny<\n  Schema,\n  any, // eslint-disable-line @typescript-eslint/no-explicit-any\n  keyof UnionToIntersection<Schema[keyof Schema]> & HttpMethod\n>;\n\ntype RepeatingPathParamModifier = '+';\ntype OptionalPathParamModifier = '?' | '*';\n\ntype ConvertPathParamToRecord<PathParam extends string> = PathParam extends `${infer PathParamWithoutSlash}/`\n  ? ConvertPathParamToRecord<PathParamWithoutSlash>\n  : PathParam extends `${infer PathParamWithoutSlash}\\\\:`\n    ? ConvertPathParamToRecord<PathParamWithoutSlash>\n    : PathParam extends `${infer PathParamWithoutModifier}${OptionalPathParamModifier}`\n      ? { [Name in PathParamWithoutModifier]?: string }\n      : PathParam extends `${infer PathParamWithoutModifier}${RepeatingPathParamModifier}`\n        ? { [Name in PathParamWithoutModifier]: string }\n        : { [Name in PathParam]: string };\n\ntype RecursiveInferPathParams<Path extends string> = Path extends `${infer Prefix}:${infer PathParamWithRemainingPath}`\n  ? PathParamWithRemainingPath extends `${infer PathParam}/${infer RemainingPath}`\n    ? Prefix extends `${string}\\\\`\n      ? RecursiveInferPathParams<RemainingPath>\n      : ConvertPathParamToRecord<PathParam> & RecursiveInferPathParams<RemainingPath>\n    : PathParamWithRemainingPath extends `${infer PathParam}\\\\:${infer RemainingPath}`\n      ? Prefix extends `${string}\\\\`\n        ? RecursiveInferPathParams<`\\\\:${RemainingPath}`>\n        : ConvertPathParamToRecord<PathParam> & RecursiveInferPathParams<`\\\\:${RemainingPath}`>\n      : PathParamWithRemainingPath extends `${infer PathParam}:${infer RemainingPath}`\n        ? Prefix extends `${string}\\\\`\n          ? RecursiveInferPathParams<RemainingPath>\n          : ConvertPathParamToRecord<PathParam> & RecursiveInferPathParams<`:${RemainingPath}`>\n        : Prefix extends `${string}\\\\`\n          ? {}\n          : ConvertPathParamToRecord<PathParamWithRemainingPath>\n  : {};\n\n/** @see {@link https://zimic.dev/docs/http/api/http-schema#inferpathparams `InferPathParams` API reference} */\nexport type InferPathParams<\n  PathOrSchema extends string | HttpSchema,\n  OptionalPath extends (PathOrSchema extends HttpSchema ? HttpSchemaPath.Literal<PathOrSchema> : never) = never,\n> = Prettify<\n  RecursiveInferPathParams<\n    PathOrSchema extends HttpSchema ? OptionalPath : PathOrSchema extends string ? PathOrSchema : never\n  >\n>;\n\ntype WithoutEscapedColons<Path extends string> = Path extends `${infer Prefix}\\\\:${infer Suffix}`\n  ? WithoutEscapedColons<`${Prefix}:${Suffix}`>\n  : Path;\n\ntype ConvertPathParamToString<PathParam extends string> = PathParam extends `${infer PathParamWithoutSlash}/`\n  ? `${ConvertPathParamToString<PathParamWithoutSlash>}/`\n  : PathParam extends `${infer PathParamWithoutSlash}\\\\:`\n    ? `${ConvertPathParamToString<PathParamWithoutSlash>}:`\n    : string;\n\nexport type AllowAnyStringInPathParams<Path extends string> =\n  Path extends `${infer Prefix}:${infer PathParamWithRemainingPath}`\n    ? PathParamWithRemainingPath extends `${infer PathParam}/${infer RemainingPath}`\n      ? Prefix extends `${infer PrefixPrefix}\\\\`\n        ? `${PrefixPrefix}:${AllowAnyStringInPathParams<PathParamWithRemainingPath>}`\n        : `${Prefix}${ConvertPathParamToString<PathParam>}/${AllowAnyStringInPathParams<RemainingPath>}`\n      : PathParamWithRemainingPath extends `${infer PathParam}\\\\:${infer RemainingPath}`\n        ? Prefix extends `${infer PrefixPrefix}\\\\`\n          ? `${PrefixPrefix}:${AllowAnyStringInPathParams<PathParamWithRemainingPath>}`\n          : `${Prefix}${ConvertPathParamToString<PathParam>}:${AllowAnyStringInPathParams<RemainingPath>}`\n        : PathParamWithRemainingPath extends `${infer PathParam}:${infer RemainingPath}`\n          ? Prefix extends `${infer PrefixPrefix}\\\\`\n            ? `${PrefixPrefix}:${AllowAnyStringInPathParams<PathParamWithRemainingPath>}`\n            : `${Prefix}${ConvertPathParamToString<PathParam>}${AllowAnyStringInPathParams<`:${RemainingPath}`>}`\n          : Prefix extends `${infer PrefixPrefix}\\\\`\n            ? `${PrefixPrefix}:${PathParamWithRemainingPath}`\n            : `${Prefix}${ConvertPathParamToString<PathParamWithRemainingPath>}`\n    : Path;\n\n/** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemapath `HttpSchemaPath` API reference} */\nexport namespace HttpSchemaPath {\n  type LooseLiteral<Schema extends HttpSchema, Method extends HttpMethod = HttpMethod> = {\n    [Path in keyof Schema & string]: Method extends keyof Schema[Path] ? Path : never;\n  }[keyof Schema & string];\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemapathliteral `HttpSchemaPath.Literal` API reference} */\n  export type Literal<\n    Schema extends HttpSchema,\n    Method extends HttpSchemaMethod<Schema> = HttpSchemaMethod<Schema>,\n  > = LooseLiteral<Schema, Method>;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemapathnonliteral `HttpSchemaPath.NonLiteral` API reference} */\n  export type NonLiteral<\n    Schema extends HttpSchema,\n    Method extends HttpSchemaMethod<Schema> = HttpSchemaMethod<Schema>,\n  > = WithoutEscapedColons<AllowAnyStringInPathParams<LooseLiteral<Schema, Method>>>;\n}\n\nexport type HttpSchemaPath<\n  Schema extends HttpSchema,\n  Method extends HttpSchemaMethod<Schema> = HttpSchemaMethod<Schema>,\n> = HttpSchemaPath.Literal<Schema, Method> | HttpSchemaPath.NonLiteral<Schema, Method>;\n\ntype LargestPathPrefix<Path extends string> = Path extends `${infer Prefix}/${infer Suffix}`\n  ? `${Prefix}/${Suffix extends `${string}/${string}` ? LargestPathPrefix<Suffix> : ''}`\n  : Path;\n\ntype ExcludeNonLiteralPathsSupersededByLiteralPath<Path extends string> =\n  Path extends `${LargestPathPrefix<Path>}:${string}` ? never : Path;\n\nexport type PreferMostStaticLiteralPath<Path extends string> =\n  UnionHasMoreThanOneType<Path> extends true ? ExcludeNonLiteralPathsSupersededByLiteralPath<Path> : Path;\n\ntype RecursiveInferHttpSchemaPath<\n  Schema extends HttpSchema,\n  Method extends HttpSchemaMethod<Schema>,\n  NonLiteralPath extends string,\n  LiteralPath extends HttpSchemaPath.Literal<Schema, Method>,\n> =\n  NonLiteralPath extends AllowAnyStringInPathParams<LiteralPath>\n    ? NonLiteralPath extends `${AllowAnyStringInPathParams<LiteralPath>}/${string}`\n      ? never\n      : LiteralPath\n    : never;\n\nexport type LiteralHttpSchemaPathFromNonLiteral<\n  Schema extends HttpSchema,\n  Method extends HttpSchemaMethod<Schema>,\n  NonLiteralPath extends string,\n  LiteralPath extends HttpSchemaPath.Literal<Schema, Method> = HttpSchemaPath.Literal<Schema, Method>,\n> = PreferMostStaticLiteralPath<\n  LiteralPath extends LiteralPath ? RecursiveInferHttpSchemaPath<Schema, Method, NonLiteralPath, LiteralPath> : never\n>;\n\ntype OmitPastHttpStatusCodes<\n  Schema extends HttpResponseSchemaByStatusCode,\n  PastSchemas extends HttpResponseSchemaByStatusCode[],\n> =\n  PastSchemas extends NonEmptyArray<HttpResponseSchemaByStatusCode>\n    ? Omit<Schema, keyof UnionToIntersection<PastSchemas[number]>>\n    : Schema;\n\n/** @see {@link https://zimic.dev/docs/http/api/http-schema#mergehttpresponsesbystatuscode `MergeHttpResponsesByStatusCode` API reference} */\nexport type MergeHttpResponsesByStatusCode<\n  Schemas extends HttpResponseSchemaByStatusCode[],\n  PastSchemas extends HttpResponseSchemaByStatusCode[] = [],\n> = Schemas extends [\n  infer FirstSchema extends HttpResponseSchemaByStatusCode,\n  ...infer RestSchemas extends HttpResponseSchemaByStatusCode[],\n]\n  ? RestSchemas extends NonEmptyArray<HttpResponseSchemaByStatusCode>\n    ? OmitPastHttpStatusCodes<FirstSchema, PastSchemas> &\n        MergeHttpResponsesByStatusCode<RestSchemas, [...PastSchemas, FirstSchema]>\n    : OmitPastHttpStatusCodes<FirstSchema, PastSchemas>\n  : never;\n","export type TableLogRow = Record<string, string>;\n\nexport interface TableLogHeader<Row extends TableLogRow> {\n  title: string;\n  property: keyof Row;\n}\n\nexport interface LoggerOptions {\n  prefix?: string;\n}\n\nclass Logger {\n  prefix?: string;\n\n  raw: Logger;\n\n  constructor(options: LoggerOptions = {}) {\n    const { prefix } = options;\n\n    this.prefix = prefix;\n\n    this.raw = prefix ? new Logger({ ...options, prefix: undefined }) : this;\n  }\n\n  private logWithLevel(level: 'log' | 'warn' | 'error', ...messages: unknown[]) {\n    if (this.prefix) {\n      console[level](this.prefix, ...messages);\n    } else {\n      console[level](...messages);\n    }\n  }\n\n  info(...messages: unknown[]) {\n    this.logWithLevel('log', ...messages);\n  }\n\n  warn(...messages: unknown[]) {\n    this.logWithLevel('warn', ...messages);\n  }\n\n  error(...messages: unknown[]) {\n    this.logWithLevel('error', ...messages);\n  }\n\n  table<Row extends TableLogRow>(headers: TableLogHeader<Row>[], rows: Row[]) {\n    const columnLengths = headers.map((header) => {\n      let maxValueLength = header.title.length;\n\n      for (const row of rows) {\n        const value = row[header.property];\n\n        if (value.length > maxValueLength) {\n          maxValueLength = value.length;\n        }\n      }\n\n      return maxValueLength;\n    });\n\n    const formattedRows: string[][] = [];\n\n    const horizontalLine = columnLengths.map((length) => '─'.repeat(length));\n    formattedRows.push(horizontalLine, []);\n\n    for (let headerIndex = 0; headerIndex < headers.length; headerIndex++) {\n      const header = headers[headerIndex];\n      const columnLength = columnLengths[headerIndex];\n\n      const value = header.title;\n      formattedRows.at(-1)?.push(value.padEnd(columnLength, ' '));\n    }\n\n    formattedRows.push(horizontalLine);\n\n    for (const row of rows) {\n      formattedRows.push([]);\n\n      for (let headerIndex = 0; headerIndex < headers.length; headerIndex++) {\n        const header = headers[headerIndex];\n        const columnLength = columnLengths[headerIndex];\n\n        const value = row[header.property];\n        formattedRows.at(-1)?.push(value.padEnd(columnLength, ' '));\n      }\n    }\n\n    formattedRows.push(horizontalLine);\n\n    const formattedTable = formattedRows\n      .map((row, index) => {\n        const isFirstLine = index === 0;\n        if (isFirstLine) {\n          return `┌─${row.join('─┬─')}─┐`;\n        }\n\n        const isLineAfterHeaders = index === 2;\n        if (isLineAfterHeaders) {\n          return `├─${row.join('─┼─')}─┤`;\n        }\n\n        const isLastLine = index === formattedRows.length - 1;\n        if (isLastLine) {\n          return `└─${row.join('─┴─')}─┘`;\n        }\n\n        return `│ ${row.join(' │ ')} │`;\n      })\n      .join('\\n');\n\n    this.logWithLevel('log', formattedTable);\n  }\n}\n\nexport default Logger;\n","import { Logger } from '@zimic/utils/logging';\nimport color from 'picocolors';\n\nexport const logger = new Logger({\n  prefix: color.cyan('[@zimic/http]'),\n});\n","import { isDefined } from '@zimic/utils/data';\nimport { Override } from '@zimic/utils/types';\nimport ts from 'typescript';\n\nimport { TypeTransformContext } from './context';\nimport { normalizeTypeLiteralMethodType } from './methods';\n\nexport function createOperationsIdentifierText(serviceName: string) {\n  return `${serviceName}Operations`;\n}\n\nexport function createOperationsIdentifier(serviceName: string) {\n  return ts.factory.createIdentifier(createOperationsIdentifierText(serviceName));\n}\n\ntype OperationsDeclaration = ts.InterfaceDeclaration;\n\nexport function isOperationsDeclaration(node: ts.Node | undefined): node is OperationsDeclaration {\n  return node !== undefined && ts.isInterfaceDeclaration(node) && node.name.text === 'operations';\n}\n\ntype Operation = Override<\n  ts.PropertySignature,\n  {\n    type: ts.TypeLiteralNode;\n    name: ts.Identifier | ts.StringLiteral;\n  }\n>;\n\nfunction isOperation(node: ts.Node): node is Operation {\n  return (\n    ts.isPropertySignature(node) &&\n    (ts.isIdentifier(node.name) || ts.isStringLiteral(node.name)) &&\n    node.type !== undefined &&\n    ts.isTypeLiteralNode(node.type)\n  );\n}\n\nfunction normalizeOperation(operation: ts.TypeElement, context: TypeTransformContext) {\n  /* istanbul ignore if -- @preserve\n   * Operation members are always expected to be an operation. */\n  if (!isOperation(operation)) {\n    return undefined;\n  }\n\n  const newType = normalizeTypeLiteralMethodType(operation.type, context);\n\n  return ts.factory.updatePropertySignature(\n    operation,\n    operation.modifiers,\n    operation.name,\n    operation.questionToken,\n    newType,\n  );\n}\n\nexport function normalizeOperations(operations: OperationsDeclaration, context: TypeTransformContext) {\n  const newIdentifier = createOperationsIdentifier(context.serviceName);\n\n  const newMembers = operations.members.map((operation) => normalizeOperation(operation, context)).filter(isDefined);\n\n  return ts.factory.updateInterfaceDeclaration(\n    operations,\n    operations.modifiers,\n    newIdentifier,\n    operations.typeParameters,\n    operations.heritageClauses,\n    newMembers,\n  );\n}\n\nfunction removeOperationIfUnreferenced(operation: ts.TypeElement, context: TypeTransformContext) {\n  /* istanbul ignore if -- @preserve\n   * Operation members are always expected to be an operation. */\n  if (!isOperation(operation)) {\n    return undefined;\n  }\n\n  const operationName = operation.name.text;\n  const isReferenced = context.referencedTypes.operations.has(operationName);\n\n  if (isReferenced) {\n    context.referencedTypes.operations.delete(operationName);\n    return operation;\n  }\n\n  return undefined;\n}\n\nexport function removeUnreferencedOperations(operations: OperationsDeclaration, context: TypeTransformContext) {\n  const newMembers = operations.members\n    .map((operation) => removeOperationIfUnreferenced(operation, context))\n    .filter(isDefined);\n\n  context.referencedTypes.operations.clear();\n\n  if (newMembers.length === 0) {\n    return undefined;\n  }\n\n  return ts.factory.updateInterfaceDeclaration(\n    operations,\n    operations.modifiers,\n    operations.name,\n    operations.typeParameters,\n    operations.heritageClauses,\n    newMembers,\n  );\n}\n","import { isDefined } from '@zimic/utils/data';\nimport { Override } from '@zimic/utils/types';\nimport color from 'picocolors';\nimport ts from 'typescript';\n\nimport { HTTP_METHODS, HttpMethod } from '@/types/schema';\nimport { logger } from '@/utils/logging';\n\nimport { isUnknownType, isNeverType, isNullType } from '../utils/types';\nimport { renameComponentReferences } from './components';\nimport { TypeTransformContext } from './context';\nimport { createOperationsIdentifier } from './operations';\n\ntype Method = Override<\n  ts.PropertySignature,\n  {\n    type: ts.TypeLiteralNode | ts.IndexedAccessTypeNode;\n    name: ts.Identifier;\n  }\n>;\n\nfunction isMethod(node: ts.Node): node is Method {\n  return (\n    ts.isPropertySignature(node) &&\n    ts.isIdentifier(node.name) &&\n    node.type !== undefined &&\n    (ts.isTypeLiteralNode(node.type) || ts.isIndexedAccessTypeNode(node.type))\n  );\n}\n\ntype MethodMember = Override<\n  ts.PropertySignature,\n  {\n    name: ts.Identifier | ts.StringLiteral;\n    type: ts.TypeLiteralNode | ts.IndexedAccessTypeNode;\n  }\n>;\n\nfunction isMethodMember(node: ts.Node): node is MethodMember {\n  return (\n    ts.isPropertySignature(node) &&\n    ts.isIdentifier(node.name) &&\n    node.type !== undefined &&\n    (ts.isTypeLiteralNode(node.type) || ts.isIndexedAccessTypeNode(node.type) || isNeverType(node.type))\n  );\n}\n\ntype RequestMember = Override<\n  ts.PropertySignature,\n  {\n    name: ts.Identifier;\n    type: ts.TypeNode;\n  }\n>;\n\nfunction isRequestMember(node: ts.Node): node is RequestMember {\n  return (\n    ts.isPropertySignature(node) && ts.isIdentifier(node.name) && node.type !== undefined && !isNeverType(node.type)\n  );\n}\n\ntype RequestHeaders = Override<RequestMember, { type: ts.TypeLiteralNode }>;\n\nfunction isRequestHeaders(node: ts.Node): node is RequestHeaders {\n  return isRequestMember(node) && node.name.text === 'headers' && ts.isTypeLiteralNode(node.type);\n}\n\ntype NormalizedRequestHeaders = Override<RequestHeaders, { type: ts.TypeLiteralNode }>;\n\nfunction isNormalizedRequestHeaders(node: ts.Node): node is NormalizedRequestHeaders {\n  return isRequestMember(node) && node.name.text === 'headers' && ts.isTypeLiteralNode(node.type);\n}\n\ntype RequestParameters = Override<RequestMember, { type: ts.TypeLiteralNode }>;\n\nfunction isRequestParameters(node: ts.Node): node is RequestParameters {\n  return isRequestMember(node) && node.name.text === 'parameters' && ts.isTypeLiteralNode(node.type);\n}\n\ntype Content = Override<RequestMember, { type: ts.TypeLiteralNode }>;\n\nfunction isContentPropertySignature(node: ts.Node): node is Content {\n  return isRequestMember(node) && node.name.text === 'content' && ts.isTypeLiteralNode(node.type);\n}\n\ntype ContentMember = Override<\n  ts.PropertySignature,\n  {\n    name: ts.Identifier | ts.StringLiteral;\n    type: ts.TypeNode;\n  }\n>;\n\nfunction isContentMember(node: ts.Node): node is ContentMember {\n  return (\n    ts.isPropertySignature(node) &&\n    (ts.isIdentifier(node.name) || ts.isStringLiteral(node.name)) &&\n    node.type !== undefined &&\n    !isNeverType(node.type)\n  );\n}\n\ntype Response = Override<\n  ts.PropertySignature,\n  {\n    name: ts.Identifier | ts.StringLiteral | ts.NumericLiteral;\n    type: ts.TypeNode;\n  }\n>;\n\nfunction isResponse(node: ts.Node): node is Response {\n  return (\n    ts.isPropertySignature(node) &&\n    (ts.isIdentifier(node.name) || ts.isStringLiteral(node.name) || ts.isNumericLiteral(node.name)) &&\n    node.type !== undefined\n  );\n}\n\nfunction removeRedundantNullUnionIfNecessary(type: ts.TypeNode) {\n  const containsRedundantNullUnion =\n    ts.isUnionTypeNode(type) &&\n    type.types.some((type) => {\n      const isNull = ts.isLiteralTypeNode(type) && isNullType(type.literal);\n      return isNull;\n    }) &&\n    type.types.some((type) => {\n      return (\n        ts.isParenthesizedTypeNode(type) &&\n        ts.isUnionTypeNode(type.type) &&\n        type.type.types.some((subType) => {\n          const isNull = ts.isLiteralTypeNode(subType) && isNullType(subType.literal);\n          return isNull;\n        })\n      );\n    });\n\n  if (!containsRedundantNullUnion) {\n    return type;\n  }\n\n  const typesWithoutRedundantNullUnion = type.types\n    .filter((type) => {\n      const isNull = ts.isLiteralTypeNode(type) && isNullType(type.literal);\n      return !isNull;\n    })\n    .flatMap((type) => {\n      /* istanbul ignore else -- @preserve */\n      if (ts.isParenthesizedTypeNode(type) && ts.isUnionTypeNode(type.type)) {\n        return type.type.types;\n      }\n      /* istanbul ignore next -- @preserve\n       * Member types are always expected to be a union type or a parenthesized union type. */\n      return [type];\n    });\n\n  return ts.factory.createUnionTypeNode(typesWithoutRedundantNullUnion);\n}\n\nfunction wrapFormDataContentType(type: ts.TypeNode, context: TypeTransformContext) {\n  context.typeImports.http.add('HttpFormData');\n\n  return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('HttpFormData'), [\n    renameComponentReferences(type, context),\n  ]);\n}\n\nfunction wrapURLEncodedContentType(type: ts.TypeNode, context: TypeTransformContext) {\n  context.typeImports.http.add('HttpSearchParams');\n\n  return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('HttpSearchParams'), [\n    renameComponentReferences(type, context),\n  ]);\n}\n\nfunction normalizeRequestBodyMember(\n  requestBodyMember: ts.TypeElement,\n  context: TypeTransformContext,\n  options: { questionToken: ts.QuestionToken | undefined },\n) {\n  /* istanbul ignore if -- @preserve\n   * Request body members are always expected to be a request body. */\n  if (!isContentMember(requestBodyMember)) {\n    return undefined;\n  }\n\n  const newIdentifier = ts.factory.createIdentifier('body');\n\n  const contentType = requestBodyMember.name.text;\n  let newType = removeRedundantNullUnionIfNecessary(renameComponentReferences(requestBodyMember.type, context));\n\n  if (contentType === 'multipart/form-data') {\n    newType = wrapFormDataContentType(newType, context);\n  } else if (contentType === 'application/x-www-form-urlencoded') {\n    newType = wrapURLEncodedContentType(newType, context);\n  }\n\n  return {\n    contentTypeName: contentType,\n    propertySignature: ts.factory.updatePropertySignature(\n      requestBodyMember,\n      requestBodyMember.modifiers,\n      newIdentifier,\n      options.questionToken,\n      newType,\n    ),\n  };\n}\n\nfunction normalizeHeaders(headers: ts.TypeLiteralNode, context: TypeTransformContext) {\n  const newHeaderMembers = headers.members.filter((header) => {\n    if (ts.isIndexSignatureDeclaration(header)) {\n      return false;\n    }\n    /* istanbul ignore else -- @preserve */\n    if (ts.isPropertySignature(header)) {\n      return header.type !== undefined && !isUnknownType(header.type);\n    }\n    /* istanbul ignore next -- @preserve\n     * Headers are always expected to be property signatures or index signatures. */\n    return true;\n  });\n\n  if (newHeaderMembers.length === 0) {\n    return undefined;\n  }\n\n  return renameComponentReferences(\n    ts.factory.updateTypeLiteralNode(headers, ts.factory.createNodeArray(newHeaderMembers)),\n    context,\n  );\n}\n\nfunction normalizeRequestHeaders(\n  requestHeader: ts.TypeElement,\n  context: TypeTransformContext,\n): NormalizedRequestHeaders | undefined {\n  if (!isRequestHeaders(requestHeader)) {\n    return undefined;\n  }\n\n  const newType = normalizeHeaders(requestHeader.type, context);\n\n  if (!newType || !ts.isTypeLiteralNode(newType)) {\n    return undefined;\n  }\n\n  return ts.factory.updatePropertySignature(\n    requestHeader,\n    requestHeader.modifiers,\n    requestHeader.name,\n    requestHeader.questionToken,\n    newType satisfies NormalizedRequestHeaders['type'],\n  ) satisfies ts.PropertySignature as NormalizedRequestHeaders;\n}\n\nfunction createHeaderForUnionByContentType(\n  existingHeader: NormalizedRequestHeaders | undefined,\n  contentTypeName: string,\n) {\n  const existingHeaderMembers = existingHeader?.type.members ?? [];\n\n  const contentTypeIdentifier = ts.factory.createIdentifier('\"content-type\"');\n  const contentTypeValue = ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(contentTypeName));\n\n  const newHeaderType = ts.factory.createTypeLiteralNode([\n    ts.factory.createPropertySignature(undefined, contentTypeIdentifier, undefined, contentTypeValue),\n    ...existingHeaderMembers,\n  ]);\n\n  return ts.factory.createPropertySignature(\n    existingHeader?.modifiers,\n    ts.factory.createIdentifier('headers'),\n    undefined,\n    newHeaderType,\n  );\n}\n\nexport function normalizeContentType(\n  contentType: ts.TypeNode,\n  context: TypeTransformContext,\n  options: { bodyQuestionToken: ts.QuestionToken | undefined },\n) {\n  const { bodyQuestionToken } = options;\n\n  if (ts.isIndexedAccessTypeNode(contentType)) {\n    return renameComponentReferences(contentType, context);\n  }\n\n  if (!ts.isTypeLiteralNode(contentType)) {\n    return contentType;\n  }\n\n  const newHeader = contentType.members.map((member) => normalizeRequestHeaders(member, context)).find(isDefined);\n\n  const newBodyMembers = contentType.members.flatMap((body) => {\n    if (isContentPropertySignature(body)) {\n      return body.type.members\n        .map((member) => normalizeRequestBodyMember(member, context, { questionToken: bodyQuestionToken }))\n        .filter(isDefined);\n    }\n    return [];\n  });\n\n  if (newBodyMembers.length === 0) {\n    const newMembers = [newHeader].filter(isDefined);\n\n    return ts.factory.updateTypeLiteralNode(contentType, ts.factory.createNodeArray(newMembers));\n  } else {\n    const bodyMemberUnionTypes = newBodyMembers.map((bodyMember) => {\n      const headerMember = createHeaderForUnionByContentType(newHeader, bodyMember.contentTypeName);\n      return ts.factory.createTypeLiteralNode([headerMember, bodyMember.propertySignature]);\n    });\n\n    return ts.factory.createUnionTypeNode(bodyMemberUnionTypes);\n  }\n}\n\nfunction normalizeRequest(request: MethodMember, context: TypeTransformContext) {\n  const newIdentifier = ts.factory.createIdentifier('request');\n\n  const newType = normalizeContentType(request.type, context, {\n    bodyQuestionToken: request.questionToken,\n  });\n\n  if (\n    request.questionToken &&\n    ts.isIndexedAccessTypeNode(request.type) &&\n    ts.isLiteralTypeNode(request.type.indexType) &&\n    (ts.isIdentifier(request.type.indexType.literal) || ts.isStringLiteral(request.type.indexType.literal))\n  ) {\n    const referencedComponentName = request.type.indexType.literal.text;\n    context.pendingActions.components.requests.toMarkBodyAsOptional.add(referencedComponentName);\n  }\n\n  return ts.factory.updatePropertySignature(request, request.modifiers, newIdentifier, undefined, newType);\n}\n\nfunction normalizeResponseType(\n  responseType: ts.TypeNode,\n  context: TypeTransformContext,\n  options: { questionToken?: ts.QuestionToken },\n) {\n  const { questionToken } = options;\n\n  if (!ts.isTypeLiteralNode(responseType)) {\n    return responseType;\n  }\n\n  return normalizeContentType(responseType, context, { bodyQuestionToken: questionToken });\n}\n\nconst NON_NUMERIC_RESPONSE_STATUS_TO_MAPPED_TYPE: Record<string, string | undefined> = {\n  default: 'HttpStatusCode',\n  '1xx': 'HttpStatusCode.Information',\n  '2xx': 'HttpStatusCode.Success',\n  '3xx': 'HttpStatusCode.Redirection',\n  '4xx': 'HttpStatusCode.ClientError',\n  '5xx': 'HttpStatusCode.ServerError',\n};\n\nexport function normalizeResponse(\n  response: ts.TypeElement,\n  context: TypeTransformContext,\n  options: { isComponent?: boolean } = {},\n) {\n  const { isComponent = false } = options;\n\n  /* istanbul ignore if -- @preserve\n   * Response members are always expected to be a response. */\n  if (!isResponse(response)) {\n    return undefined;\n  }\n\n  const newType = normalizeResponseType(response.type, context, {\n    questionToken: response.questionToken,\n  });\n\n  const statusCodeOrComponentName = response.name.text;\n  const isNumericStatusCode = /^\\d+$/.test(statusCodeOrComponentName);\n  const shouldReuseIdentifier = isComponent || isNumericStatusCode;\n\n  let newSignature: ts.PropertySignature;\n\n  if (shouldReuseIdentifier) {\n    newSignature = ts.factory.updatePropertySignature(\n      response,\n      response.modifiers,\n      response.name,\n      response.questionToken,\n      newType,\n    );\n  } else {\n    const statusCode = statusCodeOrComponentName.toLowerCase();\n    const mappedType = NON_NUMERIC_RESPONSE_STATUS_TO_MAPPED_TYPE[statusCode];\n\n    if (!mappedType) {\n      logger.warn(\n        `Warning: Response has a non-standard status code: ${color.yellow(response.name.text)}. ` +\n          \"Consider replacing it with a number (e.g. '200'), a pattern ('1xx', '2xx', '3xx', '4xx', or '5xx'), \" +\n          \"or 'default'.\",\n      );\n\n      return undefined;\n    }\n\n    context.typeImports.http.add('HttpStatusCode');\n    const newIdentifier = ts.factory.createIdentifier(`[StatusCode in ${mappedType}]`);\n\n    newSignature = ts.factory.updatePropertySignature(\n      response,\n      response.modifiers,\n      newIdentifier,\n      response.questionToken,\n      newType,\n    );\n  }\n\n  return {\n    newSignature,\n    statusCode: {\n      value: statusCodeOrComponentName,\n      isNumeric: isNumericStatusCode,\n    },\n  };\n}\n\nexport function normalizeResponses(responses: MethodMember, context: TypeTransformContext) {\n  if (isNeverType(responses.type) || !ts.isTypeLiteralNode(responses.type)) {\n    return undefined;\n  }\n\n  const newIdentifier = ts.factory.createIdentifier('response');\n  const newQuestionToken = undefined;\n\n  const newMembers = responses.type.members.map((response) => normalizeResponse(response, context)).filter(isDefined);\n\n  const sortedNewMembers = Array.from(newMembers).sort((response, otherResponse) => {\n    return response.statusCode.value.localeCompare(otherResponse.statusCode.value);\n  });\n\n  const isEveryStatusCodeNumeric = sortedNewMembers.every((response) => response.statusCode.isNumeric);\n  let newType: ts.TypeLiteralNode | ts.TypeReferenceNode;\n\n  if (isEveryStatusCodeNumeric) {\n    newType = ts.factory.updateTypeLiteralNode(\n      responses.type,\n      ts.factory.createNodeArray(sortedNewMembers.map((response) => response.newSignature)),\n    );\n  } else {\n    context.typeImports.http.add('MergeHttpResponsesByStatusCode');\n\n    const typeMembersToMerge = sortedNewMembers.reduce<{\n      numeric: ts.PropertySignature[];\n      nonNumeric: ts.PropertySignature[];\n    }>(\n      (members, response) => {\n        if (response.statusCode.isNumeric) {\n          members.numeric.push(response.newSignature);\n        } else {\n          members.nonNumeric.push(response.newSignature);\n        }\n        return members;\n      },\n      { numeric: [], nonNumeric: [] },\n    );\n\n    const numericTypeLiteral = ts.factory.createTypeLiteralNode(typeMembersToMerge.numeric);\n    const nonNumericTypeLiterals = typeMembersToMerge.nonNumeric.map((response) =>\n      ts.factory.createTypeLiteralNode([response]),\n    );\n\n    const mergeWrapper = ts.factory.createIdentifier('MergeHttpResponsesByStatusCode');\n    newType = ts.factory.createTypeReferenceNode(mergeWrapper, [\n      ts.factory.createTupleTypeNode([numericTypeLiteral, ...nonNumericTypeLiterals]),\n    ]);\n  }\n\n  return ts.factory.updatePropertySignature(\n    responses,\n    responses.modifiers,\n    newIdentifier,\n    newQuestionToken,\n    renameComponentReferences(newType, context),\n  );\n}\n\nfunction normalizeMethodMember(methodMember: ts.TypeElement, context: TypeTransformContext) {\n  /* istanbul ignore else -- @preserve */\n  if (isMethodMember(methodMember)) {\n    if (methodMember.name.text === 'requestBody') {\n      return normalizeRequest(methodMember, context);\n    }\n    if (methodMember.name.text === 'responses') {\n      return normalizeResponses(methodMember, context);\n    }\n    return methodMember;\n  }\n\n  /* istanbul ignore next -- @preserve\n   * Method members are always expected as property signatures in methods. */\n  return undefined;\n}\n\nfunction normalizeRequestQueryWithParameters(requestMember: RequestMember, context: TypeTransformContext) {\n  const newIdentifier = ts.factory.createIdentifier('searchParams');\n  const newQuestionToken = undefined;\n\n  const newType = renameComponentReferences(requestMember.type, context);\n\n  return ts.factory.updatePropertySignature(\n    requestMember,\n    requestMember.modifiers,\n    newIdentifier,\n    newQuestionToken,\n    newType,\n  );\n}\n\nfunction normalizeRequestHeadersWithParameters(requestMember: RequestMember, context: TypeTransformContext) {\n  const newIdentifier = ts.factory.createIdentifier('headers');\n  const newQuestionToken = undefined;\n\n  const newType = renameComponentReferences(requestMember.type, context);\n\n  return ts.factory.updatePropertySignature(\n    requestMember,\n    requestMember.modifiers,\n    newIdentifier,\n    newQuestionToken,\n    newType,\n  );\n}\n\nfunction normalizeRequestMemberWithParameters(requestMember: ts.TypeElement, context: TypeTransformContext) {\n  if (!isRequestMember(requestMember) || requestMember.name.text === 'path') {\n    return undefined;\n  }\n\n  if (requestMember.name.text === 'query') {\n    return normalizeRequestQueryWithParameters(requestMember, context);\n  }\n  if (requestMember.name.text === 'header') {\n    return normalizeRequestHeadersWithParameters(requestMember, context);\n  }\n\n  return requestMember;\n}\n\nfunction mergeRequestHeadersMember(headers: NormalizedRequestHeaders, otherHeaders: NormalizedRequestHeaders) {\n  const newType = ts.factory.updateTypeLiteralNode(\n    headers.type,\n    ts.factory.createNodeArray([...otherHeaders.type.members, ...headers.type.members]),\n  );\n\n  return ts.factory.updatePropertySignature(\n    headers,\n    headers.modifiers,\n    headers.name,\n    headers.questionToken,\n    newType satisfies NormalizedRequestHeaders['type'],\n  ) satisfies ts.PropertySignature as NormalizedRequestHeaders;\n}\n\nfunction mergeRequestHeadersMembers(members: (ts.PropertySignature | undefined)[]) {\n  let mergedHeaders: NormalizedRequestHeaders | undefined;\n  let firstHeadersIndex: number | undefined;\n\n  const mergedHeadersMembers = members.map((member, index) => {\n    if (!member || !isNormalizedRequestHeaders(member)) {\n      return member;\n    }\n\n    if (firstHeadersIndex === undefined || !mergedHeaders) {\n      firstHeadersIndex = index;\n      mergedHeaders = member;\n      return member;\n    }\n\n    mergedHeaders = mergeRequestHeadersMember(mergedHeaders, member);\n    return undefined;\n  });\n\n  if (firstHeadersIndex !== undefined) {\n    mergedHeadersMembers[firstHeadersIndex] = mergedHeaders;\n  }\n\n  return mergedHeadersMembers.filter(isDefined);\n}\n\nfunction mergeRequestAndParameterTypes(\n  requestType: ts.TypeNode,\n  methodMembers: ts.TypeElement[],\n  context: TypeTransformContext,\n) {\n  const parameters = methodMembers.find(isRequestParameters);\n  /* istanbul ignore next -- @preserve\n   * Parameters member is always expected to be found. */\n  const parametersMembers = parameters ? parameters.type.members : [];\n\n  const requestMembers = ts.isTypeLiteralNode(requestType) ? requestType.members : [];\n\n  const newMembers = mergeRequestHeadersMembers(\n    [...parametersMembers, ...requestMembers].map((member) => {\n      return normalizeRequestMemberWithParameters(member, context);\n    }),\n  );\n\n  if (newMembers.length === 0) {\n    return undefined;\n  }\n\n  return ts.factory.createTypeLiteralNode(newMembers);\n}\n\nfunction normalizeRequestTypeWithParameters(\n  requestType: ts.TypeNode,\n  methodMembers: ts.TypeElement[],\n  context: TypeTransformContext,\n): ts.TypeNode | undefined {\n  if (ts.isUnionTypeNode(requestType)) {\n    const newTypes = requestType.types\n      .map((type) => normalizeRequestTypeWithParameters(type, methodMembers, context))\n      .filter(isDefined);\n    return ts.factory.updateUnionTypeNode(requestType, ts.factory.createNodeArray(newTypes));\n  }\n\n  if (ts.isIndexedAccessTypeNode(requestType)) {\n    const newType = normalizeRequestTypeWithParameters(ts.factory.createTypeLiteralNode([]), methodMembers, context);\n    return ts.factory.createIntersectionTypeNode([requestType, newType].filter(isDefined));\n  }\n\n  return mergeRequestAndParameterTypes(requestType, methodMembers, context);\n}\n\nfunction normalizeMethodMemberWithParameters(\n  methodMember: ts.PropertySignature,\n  methodMembers: ts.TypeElement[],\n  context: TypeTransformContext,\n) {\n  /* istanbul ignore if -- @preserve\n   * Method members are always expected to have a name and type at this point. */\n  if (!ts.isIdentifier(methodMember.name) || !methodMember.type) {\n    return undefined;\n  }\n\n  if (methodMember.name.text === 'request') {\n    const newType = normalizeRequestTypeWithParameters(methodMember.type, methodMembers, context);\n\n    if (!newType) {\n      return undefined;\n    }\n\n    return ts.factory.updatePropertySignature(\n      methodMember,\n      methodMember.modifiers,\n      methodMember.name,\n      undefined,\n      newType,\n    );\n  }\n\n  if (methodMember.name.text === 'response') {\n    return methodMember;\n  }\n\n  return undefined;\n}\n\nexport function normalizeTypeLiteralMethodType(methodType: ts.TypeLiteralNode, context: TypeTransformContext) {\n  const newMembers = methodType.members\n    .map((member) => normalizeMethodMember(member, context))\n    .filter(isDefined)\n    .map((member, _index, partialMembers) => normalizeMethodMemberWithParameters(member, partialMembers, context))\n    .filter(isDefined);\n\n  return ts.factory.updateTypeLiteralNode(methodType, ts.factory.createNodeArray(newMembers));\n}\n\nfunction normalizeIndexedAccessMethodType(methodType: ts.IndexedAccessTypeNode, context: TypeTransformContext) {\n  const isOperationsReference =\n    ts.isTypeReferenceNode(methodType.objectType) &&\n    ts.isIdentifier(methodType.objectType.typeName) &&\n    methodType.objectType.typeName.text === 'operations';\n\n  /* istanbul ignore if -- @preserve\n   * In indexed access method types, the reference is always expected to be an operation. */\n  if (!isOperationsReference) {\n    return methodType;\n  }\n\n  const newIdentifier = createOperationsIdentifier(context.serviceName);\n  const newObjectType = ts.factory.createTypeReferenceNode(newIdentifier, methodType.objectType.typeArguments);\n\n  const hasIndexTypeName =\n    ts.isLiteralTypeNode(methodType.indexType) &&\n    (ts.isIdentifier(methodType.indexType.literal) || ts.isStringLiteral(methodType.indexType.literal));\n\n  /* istanbul ignore else -- @preserve\n   * In indexed access method types referencing operations, an index type name is always expected. */\n  if (hasIndexTypeName) {\n    const operationName = methodType.indexType.literal.text;\n    context.referencedTypes.operations.add(operationName);\n  }\n\n  return ts.factory.updateIndexedAccessTypeNode(methodType, newObjectType, methodType.indexType);\n}\n\nexport function normalizeMethod(method: ts.TypeElement, context: TypeTransformContext, options: { pathName: string }) {\n  if (!isMethod(method)) {\n    return undefined;\n  }\n\n  const methodName = method.name.text.toUpperCase<HttpMethod>();\n\n  if (!HTTP_METHODS.includes(methodName)) {\n    return undefined;\n  }\n\n  const matchesPositiveFilters =\n    context.filters.paths.positive.length === 0 ||\n    context.filters.paths.positive.some(\n      (filter) => filter.methodRegex.test(methodName) && filter.pathRegex.test(options.pathName),\n    );\n\n  if (!matchesPositiveFilters) {\n    return undefined;\n  }\n\n  const matchesNegativeFilters =\n    context.filters.paths.negative.length > 0 &&\n    context.filters.paths.negative.some(\n      (filter) => filter.methodRegex.test(methodName) && filter.pathRegex.test(options.pathName),\n    );\n\n  if (matchesNegativeFilters) {\n    return undefined;\n  }\n\n  const newIdentifier = ts.factory.createIdentifier(methodName);\n\n  const newType = ts.isTypeLiteralNode(method.type)\n    ? normalizeTypeLiteralMethodType(method.type, context)\n    : normalizeIndexedAccessMethodType(method.type, context);\n\n  return ts.factory.updatePropertySignature(method, method.modifiers, newIdentifier, method.questionToken, newType);\n}\n","import { isDefined } from '@zimic/utils/data';\nimport { Override } from '@zimic/utils/types';\nimport ts from 'typescript';\n\nimport { renameComponentReferences } from './components';\nimport { TypeTransformContext } from './context';\nimport { normalizeMethod } from './methods';\n\nexport function createPathsIdentifier(serviceName: string) {\n  return ts.factory.createIdentifier(`${serviceName}Schema`);\n}\n\ntype PathsDeclaration = ts.InterfaceDeclaration | ts.TypeAliasDeclaration;\n\nexport function isPathsDeclaration(node: ts.Node | undefined): node is PathsDeclaration {\n  return (\n    node !== undefined &&\n    (ts.isInterfaceDeclaration(node) || ts.isTypeAliasDeclaration(node)) &&\n    node.name.text === 'paths'\n  );\n}\n\ntype Path = Override<\n  ts.PropertySignature,\n  {\n    type: ts.TypeLiteralNode | ts.IndexedAccessTypeNode;\n    name: ts.Identifier | ts.StringLiteral;\n  }\n>;\n\nfunction isPath(node: ts.TypeElement): node is Path {\n  return (\n    ts.isPropertySignature(node) &&\n    (ts.isIdentifier(node.name) || ts.isStringLiteral(node.name)) &&\n    node.type !== undefined &&\n    (ts.isTypeLiteralNode(node.type) || ts.isIndexedAccessTypeNode(node.type))\n  );\n}\n\nfunction normalizePathNameWithParameters(pathName: string) {\n  return pathName.replace(/{([^}]+)}/g, ':$1');\n}\n\nexport function normalizePath(\n  path: ts.TypeElement,\n  context: TypeTransformContext,\n  options: { isComponent?: boolean } = {},\n) {\n  const { isComponent = false } = options;\n\n  /* istanbul ignore if -- @preserve\n   * Path members are always expected to be a path. */\n  if (!isPath(path)) {\n    return undefined;\n  }\n\n  const newPathName = isComponent ? path.name.text : normalizePathNameWithParameters(path.name.text);\n  const newIdentifier = isComponent ? path.name : ts.factory.createStringLiteral(newPathName);\n\n  let newType: ts.TypeNode;\n\n  if (ts.isTypeLiteralNode(path.type)) {\n    const newMethods = path.type.members\n      .map((method) => normalizeMethod(method, context, { pathName: newPathName }))\n      .filter(isDefined);\n\n    if (newMethods.length === 0) {\n      return undefined;\n    }\n\n    newType = ts.factory.updateTypeLiteralNode(path.type, ts.factory.createNodeArray(newMethods));\n  } else {\n    newType = renameComponentReferences(path.type, context);\n  }\n\n  return ts.factory.updatePropertySignature(path, path.modifiers, newIdentifier, path.questionToken, newType);\n}\n\nfunction wrapPathsType(type: ts.TypeLiteralNode, context: TypeTransformContext) {\n  context.typeImports.http.add('HttpSchema');\n\n  const httpSchemaPathsWrapper = ts.factory.createIdentifier('HttpSchema');\n  return ts.factory.createTypeReferenceNode(httpSchemaPathsWrapper, [type]);\n}\n\nexport function normalizePaths(pathsOrTypeAlias: PathsDeclaration, context: TypeTransformContext) {\n  const newIdentifier = createPathsIdentifier(context.serviceName);\n\n  const paths = ts.isTypeAliasDeclaration(pathsOrTypeAlias)\n    ? ts.factory.createInterfaceDeclaration(pathsOrTypeAlias.modifiers, pathsOrTypeAlias.name, undefined, undefined, [])\n    : pathsOrTypeAlias;\n\n  const newMembers = paths.members.map((path) => normalizePath(path, context)).filter(isDefined);\n  const newType = ts.factory.createTypeLiteralNode(newMembers);\n\n  return ts.factory.createTypeAliasDeclaration(\n    paths.modifiers,\n    newIdentifier,\n    paths.typeParameters,\n    wrapPathsType(newType, context),\n  );\n}\n","import { isDefined } from '@zimic/utils/data';\nimport { Override } from '@zimic/utils/types';\nimport ts from 'typescript';\n\nimport { isNeverType, isUnknownType } from '../utils/types';\nimport { ComponentPath, TypeTransformContext } from './context';\nimport { normalizeContentType, normalizeResponse } from './methods';\nimport { normalizePath } from './paths';\n\nexport function createComponentsIdentifierText(serviceName: string) {\n  return `${serviceName}Components`;\n}\n\nfunction createComponentsIdentifier(serviceName: string) {\n  return ts.factory.createIdentifier(createComponentsIdentifierText(serviceName));\n}\n\ntype ComponentsDeclaration = ts.InterfaceDeclaration;\n\nexport function isComponentsDeclaration(\n  node: ts.Node | undefined,\n  context: TypeTransformContext,\n): node is ComponentsDeclaration {\n  const componentIdentifiers = ['components', createComponentsIdentifierText(context.serviceName)];\n  return node !== undefined && ts.isInterfaceDeclaration(node) && componentIdentifiers.includes(node.name.text);\n}\n\ntype ComponentGroup = Override<\n  ts.PropertySignature,\n  {\n    type: ts.TypeLiteralNode;\n    name: ts.Identifier | ts.StringLiteral;\n  }\n>;\n\nfunction isComponentGroup(node: ts.TypeElement): node is ComponentGroup {\n  return (\n    ts.isPropertySignature(node) &&\n    node.type !== undefined &&\n    ts.isTypeLiteralNode(node.type) &&\n    ts.isIdentifier(node.name)\n  );\n}\n\ntype Component = Override<\n  ts.PropertySignature,\n  {\n    type: ts.TypeNode;\n    name: ts.Identifier | ts.StringLiteral;\n  }\n>;\n\nfunction isComponent(node: ts.TypeElement): node is Component {\n  return (\n    ts.isPropertySignature(node) &&\n    node.type !== undefined &&\n    !isNeverType(node.type) &&\n    (ts.isIdentifier(node.name) || ts.isStringLiteral(node.name))\n  );\n}\n\ntype RequestComponent = Override<Component, { type: ts.TypeLiteralNode }>;\n\nfunction isRequestComponent(node: Component): node is RequestComponent {\n  return ts.isTypeLiteralNode(node.type);\n}\n\nfunction unchangedIndexedAccessTypeNode(node: ts.IndexedAccessTypeNode) {\n  return node;\n}\n\nfunction visitComponentReferences(\n  node: ts.TypeNode,\n  context: TypeTransformContext & {\n    isComponentIndexedAccess?: boolean;\n    partialComponentPath?: string[];\n  },\n  options: {\n    onComponentReference: (node: ts.IndexedAccessTypeNode, componentPath: ComponentPath) => void;\n    renameComponentReference?: (\n      node: ts.IndexedAccessTypeNode,\n      resources: {\n        objectType: ts.TypeReferenceNode;\n        indexType: ts.LiteralTypeNode;\n        componentGroupName: string;\n      },\n    ) => ts.IndexedAccessTypeNode;\n  },\n): ts.TypeNode {\n  const { onComponentReference, renameComponentReference = unchangedIndexedAccessTypeNode } = options;\n\n  if (isUnknownType(node)) {\n    return ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword);\n  }\n\n  if (ts.isTypeReferenceNode(node)) {\n    const newTypeArguments = node.typeArguments?.map((type) => visitComponentReferences(type, context, options));\n    return ts.factory.updateTypeReferenceNode(node, node.typeName, ts.factory.createNodeArray(newTypeArguments));\n  }\n\n  if (ts.isArrayTypeNode(node)) {\n    const newElementType = visitComponentReferences(node.elementType, context, options);\n    return ts.factory.updateArrayTypeNode(node, newElementType);\n  }\n\n  if (ts.isTupleTypeNode(node)) {\n    const newElements = node.elements.map((element) => visitComponentReferences(element, context, options));\n    return ts.factory.updateTupleTypeNode(node, ts.factory.createNodeArray(newElements));\n  }\n\n  if (ts.isUnionTypeNode(node)) {\n    const newTypes = node.types.map((type) => visitComponentReferences(type, context, options));\n    return ts.factory.updateUnionTypeNode(node, ts.factory.createNodeArray(newTypes));\n  }\n\n  if (ts.isIntersectionTypeNode(node)) {\n    const newTypes = node.types.map((type) => visitComponentReferences(type, context, options));\n    return ts.factory.updateIntersectionTypeNode(node, ts.factory.createNodeArray(newTypes));\n  }\n\n  if (ts.isParenthesizedTypeNode(node)) {\n    const newType = visitComponentReferences(node.type, context, options);\n    return ts.factory.updateParenthesizedType(node, newType);\n  }\n\n  if (ts.isTypeLiteralNode(node)) {\n    const newMembers = node.members.map((member) => {\n      if (ts.isPropertySignature(member) && member.type) {\n        const newType = visitComponentReferences(member.type, context, options);\n        return ts.factory.updatePropertySignature(member, member.modifiers, member.name, member.questionToken, newType);\n      }\n\n      /* istanbul ignore else -- @preserve */\n      if (ts.isIndexSignatureDeclaration(member)) {\n        const newType = visitComponentReferences(member.type, context, options);\n        return ts.factory.updateIndexSignature(member, member.modifiers, member.parameters, newType);\n      }\n\n      /* istanbul ignore next -- @preserve\n       * All members are expected to be either a property signature or an index signature. */\n      return member;\n    });\n\n    return ts.factory.updateTypeLiteralNode(node, ts.factory.createNodeArray(newMembers));\n  }\n\n  if (ts.isIndexedAccessTypeNode(node)) {\n    const isRootIndexedAccess = context.isComponentIndexedAccess ?? true;\n\n    if (ts.isIndexedAccessTypeNode(node.objectType)) {\n      const childContext: typeof context = { ...context, isComponentIndexedAccess: false };\n      const newObjectType = visitComponentReferences(node.objectType, childContext, options);\n\n      const newNode = ts.factory.updateIndexedAccessTypeNode(node, newObjectType, node.indexType);\n\n      /* istanbul ignore else -- @preserve\n       * Component indexed accesses are always expected to have child indexed accesses. */\n      if (childContext.partialComponentPath && childContext.partialComponentPath.length > 0) {\n        const hasIndexTypeName =\n          ts.isLiteralTypeNode(node.indexType) &&\n          (ts.isIdentifier(node.indexType.literal) || ts.isStringLiteral(node.indexType.literal));\n\n        /* istanbul ignore else -- @preserve\n         * Component indexed accesses are always expected to have child indexed accesses. */\n        if (hasIndexTypeName) {\n          const componentName = node.indexType.literal.text;\n          childContext.partialComponentPath.push(componentName);\n        }\n\n        /* istanbul ignore else -- @preserve\n         * Component indexed accesses are always expected to have child indexed accesses. */\n        if (isRootIndexedAccess) {\n          const componentGroupName = childContext.partialComponentPath[0];\n          const componentName = childContext.partialComponentPath.slice(1).join('.');\n          const componentPath = `${componentGroupName}.${componentName}` as const;\n          onComponentReference(newNode, componentPath);\n        }\n      }\n\n      return newNode;\n    }\n\n    const componentIdentifiers = ['components', createComponentsIdentifierText(context.serviceName)];\n\n    const isComponentIndexedAccess =\n      ts.isTypeReferenceNode(node.objectType) &&\n      ts.isIdentifier(node.objectType.typeName) &&\n      componentIdentifiers.includes(node.objectType.typeName.text) &&\n      ts.isLiteralTypeNode(node.indexType) &&\n      (ts.isIdentifier(node.indexType.literal) || ts.isStringLiteral(node.indexType.literal));\n\n    /* istanbul ignore else -- @preserve\n     * All indexed accesses are expected to point to components. */\n    if (isComponentIndexedAccess) {\n      const isRawComponent = node.objectType.typeName.text === 'components';\n      const componentGroupName = node.indexType.literal.text;\n\n      const newNode = isRawComponent\n        ? renameComponentReference(node, {\n            objectType: node.objectType,\n            indexType: node.indexType,\n            componentGroupName,\n          })\n        : node;\n\n      const newNodeHasComponentGroupName =\n        ts.isLiteralTypeNode(newNode.indexType) &&\n        (ts.isIdentifier(newNode.indexType.literal) || ts.isStringLiteral(newNode.indexType.literal));\n\n      /* istanbul ignore else -- @preserve\n       * All component indexed accesses are expected to have an index type name. */\n      if (newNodeHasComponentGroupName) {\n        const newComponentGroupName = newNode.indexType.literal.text;\n        context.partialComponentPath = [newComponentGroupName];\n      }\n\n      return newNode;\n    }\n  }\n\n  return node;\n}\n\nexport function normalizeComponentGroupName(rawComponentGroupName: string) {\n  if (rawComponentGroupName === 'requestBodies') {\n    return 'requests';\n  }\n  return rawComponentGroupName;\n}\n\nexport function renameComponentReferences(node: ts.TypeNode, context: TypeTransformContext): ts.TypeNode {\n  return visitComponentReferences(node, context, {\n    onComponentReference(_node, componentPath) {\n      context.referencedTypes.components.add(componentPath);\n    },\n\n    renameComponentReference(node, { indexType, objectType, componentGroupName }) {\n      const newIdentifier = createComponentsIdentifier(context.serviceName);\n      const newObjectType = ts.factory.updateTypeReferenceNode(objectType, newIdentifier, objectType.typeArguments);\n\n      const newComponentGroupName = normalizeComponentGroupName(componentGroupName);\n\n      const newIndexType = ts.factory.updateLiteralTypeNode(\n        indexType,\n        ts.factory.createStringLiteral(newComponentGroupName),\n      );\n\n      return ts.factory.updateIndexedAccessTypeNode(node, newObjectType, newIndexType);\n    },\n  });\n}\n\nfunction processPendingRequestComponentActions(component: RequestComponent, context: TypeTransformContext) {\n  const pendingRequestActions = context.pendingActions.components.requests;\n\n  const componentName = component.name.text;\n  const shouldBeMarkedAsOptional = pendingRequestActions.toMarkBodyAsOptional.has(componentName);\n\n  const bodyQuestionToken = shouldBeMarkedAsOptional\n    ? ts.factory.createToken(ts.SyntaxKind.QuestionToken)\n    : component.questionToken;\n\n  pendingRequestActions.toMarkBodyAsOptional.delete(componentName);\n\n  return { bodyQuestionToken };\n}\n\nfunction normalizeRequestComponent(component: Component, context: TypeTransformContext) {\n  /* istanbul ignore if -- @preserve\n   * Component group members in `requests` are always expected the be request components. */\n  if (!isRequestComponent(component)) {\n    return undefined;\n  }\n\n  const { bodyQuestionToken } = processPendingRequestComponentActions(component, context);\n  const newType = normalizeContentType(component.type, context, { bodyQuestionToken });\n\n  return ts.factory.updatePropertySignature(\n    component,\n    component.modifiers,\n    component.name,\n    component.questionToken,\n    newType,\n  );\n}\n\nfunction normalizeComponent(\n  component: ts.TypeElement,\n  componentGroupName: string,\n  context: TypeTransformContext,\n): ts.TypeElement | undefined {\n  /* istanbul ignore if -- @preserve\n   * Component group members are always expected the be components. */\n  if (!isComponent(component)) {\n    return undefined;\n  }\n\n  if (componentGroupName === 'requests') {\n    return normalizeRequestComponent(component, context);\n  }\n\n  if (componentGroupName === 'responses') {\n    const responseComponent = normalizeResponse(component, context, { isComponent: true });\n    return responseComponent?.newSignature;\n  }\n\n  if (componentGroupName === 'pathItems') {\n    return normalizePath(component, context, { isComponent: true });\n  }\n\n  return ts.factory.updatePropertySignature(\n    component,\n    component.modifiers,\n    component.name,\n    component.questionToken,\n    renameComponentReferences(component.type, context),\n  );\n}\n\nfunction normalizeComponentGroup(componentGroup: ts.TypeElement, context: TypeTransformContext) {\n  if (!isComponentGroup(componentGroup)) {\n    return undefined;\n  }\n\n  const componentGroupName = normalizeComponentGroupName(componentGroup.name.text);\n  const newIdentifier = ts.factory.createIdentifier(componentGroupName);\n\n  const newComponents = componentGroup.type.members\n    .map((component) => normalizeComponent(component, componentGroupName, context))\n    .filter(isDefined);\n\n  const newType = ts.factory.updateTypeLiteralNode(componentGroup.type, ts.factory.createNodeArray(newComponents));\n\n  return ts.factory.updatePropertySignature(\n    componentGroup,\n    componentGroup.modifiers,\n    newIdentifier,\n    componentGroup.questionToken,\n    newType,\n  );\n}\n\nexport function normalizeComponents(components: ts.InterfaceDeclaration, context: TypeTransformContext) {\n  const newIdentifier = createComponentsIdentifier(context.serviceName);\n\n  const newMembers = components.members\n    .map((componentGroup) => normalizeComponentGroup(componentGroup, context))\n    .filter(isDefined);\n\n  return ts.factory.updateInterfaceDeclaration(\n    components,\n    components.modifiers,\n    newIdentifier,\n    components.typeParameters,\n    components.heritageClauses,\n    newMembers,\n  );\n}\n\nexport function populateReferencedComponents(components: ts.InterfaceDeclaration, context: TypeTransformContext) {\n  const pathsToVisit = new Set(context.referencedTypes.components);\n\n  while (pathsToVisit.size > 0) {\n    const previousPathsToVisit = new Set(pathsToVisit);\n    pathsToVisit.clear();\n\n    for (const componentGroup of components.members) {\n      if (!isComponentGroup(componentGroup)) {\n        continue;\n      }\n\n      const componentGroupName = normalizeComponentGroupName(componentGroup.name.text);\n\n      for (const component of componentGroup.type.members) {\n        /* istanbul ignore if -- @preserve\n         * Component group members are always expected the be components. */\n        if (!isComponent(component)) {\n          continue;\n        }\n\n        const componentName = component.name.text;\n        const componentPath = `${componentGroupName}.${componentName}` as const;\n        const isComponentToVisit = previousPathsToVisit.has(componentPath);\n\n        if (!isComponentToVisit) {\n          continue;\n        }\n\n        context.referencedTypes.components.add(componentPath);\n\n        visitComponentReferences(component.type, context, {\n          onComponentReference(_node, componentPath) {\n            const isKnownReferencedComponent = context.referencedTypes.components.has(componentPath);\n            if (!isKnownReferencedComponent) {\n              pathsToVisit.add(componentPath);\n            }\n          },\n        });\n      }\n    }\n  }\n}\n\nexport function removeComponentIfUnreferenced(\n  component: ts.TypeElement,\n  componentGroupName: string,\n  context: TypeTransformContext,\n) {\n  /* istanbul ignore if -- @preserve\n   * Component group members are always expected the be components. */\n  if (!isComponent(component)) {\n    return undefined;\n  }\n\n  const componentName = component.name.text;\n  const componentPath = `${componentGroupName}.${componentName}` as const;\n\n  if (context.referencedTypes.components.has(componentPath)) {\n    context.referencedTypes.components.delete(componentPath);\n    return component;\n  }\n\n  return undefined;\n}\n\nfunction removeUnreferencedComponentsInGroup(componentGroup: ts.TypeElement, context: TypeTransformContext) {\n  /* istanbul ignore if -- @preserve\n   * Component members are always expected the be component groups. */\n  if (!isComponentGroup(componentGroup)) {\n    return undefined;\n  }\n\n  const componentGroupName = normalizeComponentGroupName(componentGroup.name.text);\n\n  const newComponents = componentGroup.type.members\n    .map((component) => removeComponentIfUnreferenced(component, componentGroupName, context))\n    .filter(isDefined);\n\n  if (newComponents.length === 0) {\n    return undefined;\n  }\n\n  return ts.factory.updatePropertySignature(\n    componentGroup,\n    componentGroup.modifiers,\n    componentGroup.name,\n    componentGroup.questionToken,\n    ts.factory.updateTypeLiteralNode(componentGroup.type, ts.factory.createNodeArray(newComponents)),\n  );\n}\n\nexport function removeUnreferencedComponents(components: ts.InterfaceDeclaration, context: TypeTransformContext) {\n  const newComponentGroups = components.members\n    .map((componentGroup) => removeUnreferencedComponentsInGroup(componentGroup, context))\n    .filter(isDefined);\n\n  context.referencedTypes.components.clear();\n\n  if (newComponentGroups.length === 0) {\n    return undefined;\n  }\n\n  return ts.factory.updateInterfaceDeclaration(\n    components,\n    components.modifiers,\n    components.name,\n    components.typeParameters,\n    components.heritageClauses,\n    newComponentGroups,\n  );\n}\n","export function convertToPascalCase(value: string) {\n  return value.replace(/(?:^|[^A-Za-z\\d])([A-Za-z\\d])/g, (_match, letter: string) => letter.toUpperCase());\n}\n","export function createPathCharactersToEscapeRegex() {\n  return /([.(){}+$])/g;\n}\n\nexport function preparePathForRegex(path: string) {\n  // We encode the path using the URL API because, differently from encodeURI and encodeURIComponent, URL does not\n  // re-encode already encoded characters. Since URL requires a full URL, we use a data scheme and strip it later.\n  const pathURLPrefix = `data:${path.startsWith('/') ? '' : '/'}`;\n  const pathAsURL = new URL(`${pathURLPrefix}${path}`);\n  const encodedPath = pathAsURL.href.replace(pathURLPrefix, '');\n\n  return encodedPath.replace(/^\\/+/g, '').replace(/\\/+$/g, '').replace(createPathCharactersToEscapeRegex(), '\\\\$1');\n}\n\n// Path params names must match the JavaScript identifier pattern.\n// See // https://developer.mozilla.org/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers.\nexport function createPathParamRegex() {\n  return /(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)(?!\\\\[*+?])/gu;\n}\n\nexport function createRepeatingPathParamRegex() {\n  return /(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\\\\\+/gu;\n}\n\nexport function createOptionalPathParamRegex() {\n  return /(?<leadingSlash>\\/)?(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\?(?<trailingSlash>\\/)?/gu;\n}\n\nexport function createOptionalRepeatingPathParamRegex() {\n  return /(?<leadingSlash>\\/)?(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\*(?<trailingSlash>\\/)?/gu;\n}\n\nfunction createRegexFromPath(path: string) {\n  const pathRegexContent = preparePathForRegex(path)\n    .replace(\n      createOptionalRepeatingPathParamRegex(),\n      (\n        _match,\n        leadingSlash: string | undefined,\n        escape: string | undefined,\n        identifier: string,\n        trailingSlash: string | undefined,\n      ) => {\n        if (escape) {\n          return `${leadingSlash ?? ''}:${identifier}\\\\*${trailingSlash ?? ''}`;\n        }\n\n        const hasSegmentBeforePrefix = leadingSlash === '/';\n        const prefixExpression = hasSegmentBeforePrefix ? '/?' : leadingSlash;\n\n        const hasSegmentAfterSuffix = trailingSlash === '/';\n        const suffixExpression = hasSegmentAfterSuffix ? '/?' : trailingSlash;\n\n        if (prefixExpression && suffixExpression) {\n          return `(?:${prefixExpression}(?<${identifier}>.+?)?${suffixExpression})?`;\n        } else if (prefixExpression) {\n          return `(?:${prefixExpression}(?<${identifier}>.+?))?`;\n        } else if (suffixExpression) {\n          return `(?:(?<${identifier}>.+?)${suffixExpression})?`;\n        } else {\n          return `(?<${identifier}>.+?)?`;\n        }\n      },\n    )\n    .replace(createRepeatingPathParamRegex(), (_match, escape: string | undefined, identifier: string) => {\n      return escape ? `:${identifier}\\\\+` : `(?<${identifier}>.+)`;\n    })\n    .replace(\n      createOptionalPathParamRegex(),\n      (\n        _match,\n        leadingSlash: string | undefined,\n        escape: string | undefined,\n        identifier: string,\n        trailingSlash: string | undefined,\n      ) => {\n        if (escape) {\n          return `${leadingSlash ?? ''}:${identifier}\\\\?${trailingSlash ?? ''}`;\n        }\n\n        const hasSegmentBeforePrefix = leadingSlash === '/';\n        const prefixExpression = hasSegmentBeforePrefix ? '/?' : leadingSlash;\n\n        const hasSegmentAfterSuffix = trailingSlash === '/';\n        const suffixExpression = hasSegmentAfterSuffix ? '/?' : trailingSlash;\n\n        if (prefixExpression && suffixExpression) {\n          return `(?:${prefixExpression}(?<${identifier}>[^\\\\/]+?)?${suffixExpression})`;\n        } else if (prefixExpression) {\n          return `(?:${prefixExpression}(?<${identifier}>[^\\\\/]+?))?`;\n        } else if (suffixExpression) {\n          return `(?:(?<${identifier}>[^\\\\/]+?)${suffixExpression})?`;\n        } else {\n          return `(?<${identifier}>[^\\\\/]+?)?`;\n        }\n      },\n    )\n    .replace(createPathParamRegex(), (_match, escape: string | undefined, identifier: string) => {\n      return escape ? `:${identifier}` : `(?<${identifier}>[^\\\\/]+?)`;\n    });\n\n  return new RegExp(`^/?${pathRegexContent}/?$`);\n}\n\nexport default createRegexFromPath;\n","import { preparePathForRegex } from './createRegexFromPath';\n\nfunction getSingleWildcardPathRegex() {\n  return /(?<wildcardPrefix>^|[^*])(?<escape>\\\\)?\\*(?<wildcardSuffix>[^*]|$)/g;\n}\n\nfunction getDoubleWildcardPathRegex() {\n  return /(?<escape>\\\\)?\\*\\*/g;\n}\n\nfunction getTripleWildcardPathRegex() {\n  return /(?<escape>\\\\)?\\*\\*\\/\\*(?<wildcardSuffix>[^*]|$)/g;\n}\n\nfunction createWildcardRegexFromPath(path: string) {\n  const pathRegexContent = preparePathForRegex(path)\n    .replace(getTripleWildcardPathRegex(), (_match, escape: string | undefined, wildcardSuffix: string) => {\n      return escape === '\\\\' ? `\\\\*\\\\*/\\\\*${wildcardSuffix}` : `**${wildcardSuffix}`;\n    })\n    .replace(\n      getSingleWildcardPathRegex(),\n      (_match, wildcardPrefix: string, escape: string | undefined, wildcardSuffix: string) => {\n        return escape === '\\\\' ? `${wildcardPrefix}\\\\*${wildcardSuffix}` : `${wildcardPrefix}[^/]*${wildcardSuffix}`;\n      },\n    )\n    .replace(getDoubleWildcardPathRegex(), (_match, escape: string | undefined) => {\n      return escape === '\\\\' ? '\\\\*\\\\*' : '.*';\n    });\n\n  return new RegExp(`^/?${pathRegexContent}/?$`);\n}\n\nexport default createWildcardRegexFromPath;\n","import fs from 'fs';\nimport path from 'path';\n\nexport function replaceFileExtension(filePath: string, newExtension: string) {\n  const parsedFilePath = path.parse(filePath);\n  return path.join(parsedFilePath.dir, `${parsedFilePath.name}.${newExtension}`);\n}\n\nexport async function pathExists(path: string) {\n  try {\n    await fs.promises.access(path, fs.constants.R_OK);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport async function ensurePathExists(path: string, options: { errorMessage: string }) {\n  try {\n    await fs.promises.access(path, fs.constants.R_OK);\n  } catch (accessError) {\n    const error = new Error(options.errorMessage);\n    error.cause = accessError;\n    throw error;\n  }\n}\n","import { isNonEmpty } from '@zimic/utils/data';\nimport { createWildcardRegexFromPath } from '@zimic/utils/url';\nimport fs from 'fs';\nimport color from 'picocolors';\n\nimport { HTTP_METHODS } from '@/types/schema';\nimport { ensurePathExists } from '@/utils/files';\nimport { logger } from '@/utils/logging';\n\nimport { TypePathFilter, TypePathFilters } from './context';\n\nconst HTTP_METHOD_OPTIONS = HTTP_METHODS.join('|');\nconst MODIFIER_GROUP = '(?<modifier>!?)';\nconst METHOD_FILTER_GROUP = `(?<method>(?:\\\\*|(?:${HTTP_METHOD_OPTIONS})(?:,\\\\s*(?:${HTTP_METHOD_OPTIONS}))*))`;\nconst PATH_FILTER_GROUP = '(?<path>.+)';\nconst FILTER_REGEX = new RegExp(`^${MODIFIER_GROUP}\\\\s*${METHOD_FILTER_GROUP}\\\\s+${PATH_FILTER_GROUP}$`, 'i');\n\nexport function parseRawFilter(rawFilter: string): TypePathFilter | undefined {\n  const filterMatch = rawFilter.match(FILTER_REGEX);\n  const { modifier: filterModifier, method: filteredMethodsOrWildcard, path: filteredPath } = filterMatch?.groups ?? {};\n\n  const isValidFilter = !filteredMethodsOrWildcard || !filteredPath;\n\n  if (isValidFilter) {\n    logger.warn(`Warning: Filter could not be parsed and was ignored: ${color.yellow(rawFilter)}`);\n    return undefined;\n  }\n\n  return {\n    methodRegex: new RegExp(`(?:${filteredMethodsOrWildcard.toUpperCase().replace(/,/g, '|').replace(/\\*/g, '.*')})`),\n    pathRegex: createWildcardRegexFromPath(filteredPath),\n    isNegativeMatch: filterModifier === '!',\n  };\n}\n\nexport function groupParsedFiltersByMatch(parsedFilters: (TypePathFilter | undefined)[]) {\n  return parsedFilters.reduce<TypePathFilters>(\n    (groupedFilters, filter) => {\n      if (filter) {\n        if (filter.isNegativeMatch) {\n          groupedFilters.negative.push(filter);\n        } else {\n          groupedFilters.positive.push(filter);\n        }\n      }\n\n      return groupedFilters;\n    },\n    { positive: [], negative: [] },\n  );\n}\n\nexport async function readPathFiltersFromFile(filePath: string) {\n  await ensurePathExists(filePath, {\n    errorMessage: `Could not read filter file: ${color.yellow(filePath)}`,\n  });\n\n  const fileContent = await fs.promises.readFile(filePath, 'utf-8');\n  const fileContentWithoutComments = fileContent.replace(/#.*$/gm, '');\n\n  const filters = fileContentWithoutComments.split('\\n');\n  return filters;\n}\n\nexport function ignoreEmptyFilters(filters: string[]) {\n  return filters.map((line) => line.trim()).filter(isNonEmpty);\n}\n","import { convertToPascalCase } from '@/utils/strings';\n\nimport { parseRawFilter, groupParsedFiltersByMatch } from './filters';\n\nexport interface TypePathFilter {\n  methodRegex: RegExp;\n  pathRegex: RegExp;\n  isNegativeMatch: boolean;\n}\n\nexport interface TypePathFilters {\n  positive: TypePathFilter[];\n  negative: TypePathFilter[];\n}\n\ntype HttpTypeImportName =\n  'HttpSchema' | 'HttpFormData' | 'HttpSearchParams' | 'HttpStatusCode' | 'MergeHttpResponsesByStatusCode';\n\ntype OperationName = string;\nexport type OperationPath = OperationName;\n\nexport type ComponentGroupName = string;\nexport type ComponentName = string;\nexport type ComponentPath = `${ComponentGroupName}.${ComponentName}`;\n\nexport interface TypeTransformContext {\n  serviceName: string;\n  filters: {\n    paths: TypePathFilters;\n  };\n  typeImports: {\n    http: Set<HttpTypeImportName>;\n  };\n  referencedTypes: {\n    operations: Set<OperationPath>;\n    components: Set<ComponentPath>;\n  };\n  pendingActions: {\n    components: {\n      requests: { toMarkBodyAsOptional: Set<ComponentName> };\n    };\n  };\n}\n\nexport function createTypeTransformationContext(serviceName: string, rawFilters: string[]): TypeTransformContext {\n  const parsedFilters = rawFilters.map(parseRawFilter);\n\n  return {\n    serviceName: convertToPascalCase(serviceName),\n    filters: {\n      paths: groupParsedFiltersByMatch(parsedFilters),\n    },\n    typeImports: {\n      http: new Set(),\n    },\n    referencedTypes: {\n      operations: new Set(),\n      components: new Set(),\n    },\n    pendingActions: {\n      components: {\n        requests: { toMarkBodyAsOptional: new Set() },\n      },\n    },\n  };\n}\n","import ts from 'typescript';\n\nimport { createImportDeclaration, createImportSpecifier } from '../utils/types';\nimport { TypeTransformContext } from './context';\n\n/* istanbul ignore next -- @preserve\n * The root import module is defined at build time. The fallback is not expected to be used. */\nexport const TYPEGEN_HTTP_IMPORT_MODULE = process.env.TYPEGEN_HTTP_IMPORT_MODULE ?? '@zimic/http';\n\nexport function createImportDeclarations(context: TypeTransformContext): ts.ImportDeclaration[] {\n  const httpTypeImports = Array.from(context.typeImports.http).sort().map(createImportSpecifier);\n  const httpImportDeclaration = createImportDeclaration(httpTypeImports, TYPEGEN_HTTP_IMPORT_MODULE, {\n    typeOnly: true,\n  });\n\n  return [httpImportDeclaration];\n}\n","function createCachedDynamicImport<ImportType>(\n  importModuleDynamically: () => Promise<ImportType>,\n): () => Promise<ImportType> {\n  let cachedImportResult: ImportType | undefined;\n\n  return async function importModuleDynamicallyWithCache() {\n    cachedImportResult ??= await importModuleDynamically();\n    return cachedImportResult;\n  };\n}\n\nexport default createCachedDynamicImport;\n","import { createCachedDynamicImport } from '@zimic/utils/import';\nimport fs from 'fs';\nimport type { SchemaObject } from 'openapi-typescript';\nimport path from 'path';\nimport ts from 'typescript';\n\nimport { createBlobType, createNullType } from '../utils/types';\n\nconst importOpenapiTypeScript = createCachedDynamicImport(() => import('openapi-typescript'));\n\nfunction transformSchemaObject(schemaObject: SchemaObject) {\n  if (schemaObject.format === 'binary') {\n    const blobType = createBlobType();\n\n    if (schemaObject.nullable) {\n      const nullType = createNullType();\n      return ts.factory.createUnionTypeNode([blobType, nullType]);\n    }\n\n    return blobType;\n  }\n}\n\nfunction convertFilePathOrURLToURL(filePathOrURL: string) {\n  try {\n    return new URL(filePathOrURL);\n  } catch {\n    return new URL(`file://${path.resolve(filePathOrURL)}`);\n  }\n}\n\nexport async function importTypesFromOpenAPI(filePathOrURL: string) {\n  const schemaURL = convertFilePathOrURLToURL(filePathOrURL);\n\n  const { default: generateTypesFromOpenAPI } = await importOpenapiTypeScript();\n\n  const rawNodes = await generateTypesFromOpenAPI(schemaURL, {\n    alphabetize: false,\n    additionalProperties: false,\n    excludeDeprecated: false,\n    propertiesRequiredByDefault: false,\n    defaultNonNullable: true,\n    pathParamsAsTypes: false,\n    emptyObjectsUnknown: true,\n    exportType: false,\n    arrayLength: false,\n    immutable: false,\n    enumValues: false,\n    enum: false,\n    silent: true,\n    transform: transformSchemaObject,\n  });\n\n  return rawNodes;\n}\n\nexport async function convertTypesToString(nodes: ts.Node[], options: { includeComments: boolean }) {\n  const { astToString: convertTypeASTToString } = await importOpenapiTypeScript();\n\n  const typegenResult = convertTypeASTToString(nodes, {\n    formatOptions: { removeComments: !options.includeComments },\n  });\n\n  return typegenResult;\n}\n\nexport function formatTypegenResultToOutput(typegenResult: string) {\n  const formattedResult = typegenResult\n    .replace(/^export (\\w+)/gm, '\\nexport $1')\n    .replace(/^( {4})+/gm, (match) => match.replace(/ {4}/g, '  '));\n\n  return [\n    '// Auto-generated by @zimic/http.',\n    '// NOTE: Do not manually edit this file. Changes will be overridden.\\n',\n    formattedResult,\n  ].join('\\n');\n}\n\nexport async function writeTypegenResultToStandardOutput(typegenResult: string) {\n  await new Promise((resolve) => {\n    process.stdout.write(typegenResult, 'utf-8', resolve);\n  });\n}\n\nexport async function writeTypegenResultToFile(outputFilePath: string, formattedResult: string) {\n  const outputDirectory = path.dirname(outputFilePath);\n  await fs.promises.mkdir(outputDirectory, { recursive: true });\n\n  await fs.promises.writeFile(outputFilePath, formattedResult);\n}\n","import { isDefined } from '@zimic/utils/data';\nimport path from 'path';\nimport ts from 'typescript';\n\nimport {\n  isComponentsDeclaration,\n  normalizeComponents,\n  populateReferencedComponents,\n  removeUnreferencedComponents,\n} from './transform/components';\nimport { createTypeTransformationContext, TypeTransformContext } from './transform/context';\nimport { readPathFiltersFromFile, ignoreEmptyFilters } from './transform/filters';\nimport { createImportDeclarations } from './transform/imports';\nimport {\n  convertTypesToString,\n  importTypesFromOpenAPI,\n  formatTypegenResultToOutput,\n  writeTypegenResultToStandardOutput,\n  writeTypegenResultToFile,\n} from './transform/io';\nimport { isOperationsDeclaration, normalizeOperations, removeUnreferencedOperations } from './transform/operations';\nimport { isPathsDeclaration, normalizePaths } from './transform/paths';\n\nconst RESOURCES_TO_REMOVE_IF_NOT_NORMALIZED = ['paths', 'webhooks', 'operations', 'components', '$defs'];\n\nfunction removeUnknownResources(node: ts.Node | undefined) {\n  const isUnknownResource =\n    !node ||\n    ((ts.isTypeAliasDeclaration(node) || ts.isInterfaceDeclaration(node)) &&\n      RESOURCES_TO_REMOVE_IF_NOT_NORMALIZED.includes(node.name.text));\n\n  if (isUnknownResource) {\n    return undefined;\n  }\n\n  return node;\n}\n\nfunction normalizeRawNodes(rawNodes: ts.Node[], context: TypeTransformContext, options: { prune: boolean }) {\n  let normalizedNodes = rawNodes.map((node) => (isPathsDeclaration(node) ? normalizePaths(node, context) : node));\n\n  if (options.prune) {\n    normalizedNodes = normalizedNodes\n      .map((node) => (isOperationsDeclaration(node) ? removeUnreferencedOperations(node, context) : node))\n      .filter(isDefined);\n  }\n\n  normalizedNodes = normalizedNodes\n    .map((node) => (isOperationsDeclaration(node) ? normalizeOperations(node, context) : node))\n    .filter(isDefined);\n\n  if (options.prune) {\n    for (const node of normalizedNodes) {\n      if (isComponentsDeclaration(node, context)) {\n        populateReferencedComponents(node, context);\n      }\n    }\n\n    normalizedNodes = normalizedNodes\n      .map((node) => (isComponentsDeclaration(node, context) ? removeUnreferencedComponents(node, context) : node))\n      .filter(isDefined);\n  }\n\n  normalizedNodes = normalizedNodes\n    .map((node) => (isComponentsDeclaration(node, context) ? normalizeComponents(node, context) : node))\n    .map(removeUnknownResources)\n    .filter(isDefined);\n\n  return normalizedNodes;\n}\n\n/** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\nexport interface OpenAPITypegenOptions {\n  /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n  input: string;\n  /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n  output?: string;\n  /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n  serviceName: string;\n  /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n  includeComments: boolean;\n  /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n  prune: boolean;\n  /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n  filters?: string[];\n  /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n  filterFile?: string;\n}\n\n/** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi  `generateTypesFromOpenAPI()` API reference} */\nasync function generateTypesFromOpenAPI({\n  input: inputFilePathOrURL,\n  output: outputFilePath,\n  serviceName,\n  includeComments,\n  prune,\n  filters: filtersFromArguments = [],\n  filterFile,\n}: OpenAPITypegenOptions) {\n  const filtersFromFile = filterFile ? await readPathFiltersFromFile(path.resolve(filterFile)) : [];\n  const filters = ignoreEmptyFilters([...filtersFromFile, ...filtersFromArguments]);\n\n  const rawNodes = await importTypesFromOpenAPI(inputFilePathOrURL);\n  const context = createTypeTransformationContext(serviceName, filters);\n  const nodes = normalizeRawNodes(rawNodes, context, { prune });\n\n  const importDeclarations = createImportDeclarations(context);\n\n  for (const declaration of importDeclarations) {\n    nodes.unshift(declaration);\n  }\n\n  const typegenResult = await convertTypesToString(nodes, { includeComments });\n  const formattedTypegenResult = formatTypegenResultToOutput(typegenResult);\n\n  const shouldWriteToStandardOutput = outputFilePath === undefined;\n\n  if (shouldWriteToStandardOutput) {\n    await writeTypegenResultToStandardOutput(formattedTypegenResult);\n  } else {\n    await writeTypegenResultToFile(path.resolve(outputFilePath), formattedTypegenResult);\n  }\n}\n\nexport default generateTypesFromOpenAPI;\n"]}