{"version":3,"file":"index.mjs","names":["isNullish","path","isString","isFunction","path","path","basepath","path","upath.getSchemaFileName","isNullish","getSchema","bindingRecord","currentSchemaObject","rec","schemaRecord","getSchemaType","isBoolean","upath.normalizeSafe","upath.joinSafe","upath.isAbsolute","upath.resolve","upath.relativeSafe","isReference","upath.getRelativeImportPath","fs","fs","upath.relativeSafe","upath.joinSafe","upath\n    .join","fs","upath.normalizeSafe","upath.joinSafe","basepath","upath.getRelativeImportPath","emptyMockOutputFull","flattenMockOutput","upath.getRelativeImportPath","path","upath.getRelativeImportPath","path","path","upath.getRelativeImportPath","upath.joinSafe","upath.getRelativeImportPath","path","upath.joinSafe"],"sources":["../src/types.ts","../src/constants.ts","../src/utils/assertion.ts","../src/utils/async-reduce.ts","../src/utils/case.ts","../src/utils/compare-version.ts","../src/utils/content-type.ts","../src/utils/debug.ts","../src/utils/doc.ts","../src/utils/dynamic-import.ts","../src/utils/extension.ts","../src/utils/file.ts","../src/utils/file-extensions.ts","../src/utils/get-property-safe.ts","../src/utils/is-body-verb.ts","../src/utils/logger.ts","../src/utils/merge-deep.ts","../src/utils/occurrence.ts","../src/utils/path.ts","../src/utils/resolve-version.ts","../src/utils/schemas-options.ts","../src/utils/sort.ts","../src/utils/string.ts","../src/utils/tsconfig.ts","../src/getters/enum.ts","../src/getters/ref.ts","../src/getters/imports.ts","../src/getters/combine.ts","../src/getters/keys.ts","../src/getters/object.ts","../src/getters/scalar.ts","../src/resolvers/ref.ts","../src/resolvers/value.ts","../src/resolvers/object.ts","../src/getters/array.ts","../src/getters/res-req-types.ts","../src/getters/body.ts","../src/getters/discriminators.ts","../src/getters/operation.ts","../src/getters/parameters.ts","../src/getters/params.ts","../src/getters/props.ts","../src/getters/query-params.ts","../src/getters/response.ts","../src/getters/route.ts","../src/generators/component-definition.ts","../src/generators/factory.ts","../src/generators/imports.ts","../src/generators/input-filters.ts","../src/generators/models-inline.ts","../src/generators/mutator-info.ts","../src/generators/mutator.ts","../src/generators/options.ts","../src/generators/parameter-definition.ts","../src/generators/interface.ts","../src/generators/schema-definition.ts","../src/generators/verbs-options.ts","../src/writers/file.ts","../src/writers/schemas.ts","../src/writers/finalize-mock-implementation.ts","../src/writers/generate-imports-for-builder.ts","../src/writers/mock-outputs.ts","../src/writers/mock-utils.ts","../src/writers/target.ts","../src/writers/types.ts","../src/writers/single-mode.ts","../src/writers/split-mode.ts","../src/writers/target-tags.ts","../src/writers/split-tags-mode.ts","../src/writers/tags-mode.ts"],"sourcesContent":["import type { allLocales } from '@faker-js/faker';\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types';\nimport type { TypeDocOptions } from 'typedoc';\n\nexport const SupportedFormatter = {\n  PRETTIER: 'prettier',\n  BIOME: 'biome',\n  OXFMT: 'oxfmt',\n} as const;\n\nexport type SupportedFormatter =\n  (typeof SupportedFormatter)[keyof typeof SupportedFormatter];\n\nexport interface Options {\n  output?: string | OutputOptions;\n  input?: string | string[] | InputOptions;\n  hooks?: Partial<HooksOptions>;\n}\n\nexport type OptionsFn = () => Options | Promise<Options>;\nexport type OptionsExport = Options | Promise<Options> | OptionsFn;\n\nexport type Config = Record<string, OptionsExport>;\nexport type ConfigFn = () => Config | Promise<Config>;\n\nexport type ConfigExternal = Config | Promise<Config> | ConfigFn;\n\nexport type NormalizedConfig = Record<string, NormalizedOptions | undefined>;\n\nexport interface NormalizedOptions {\n  output: NormalizedOutputOptions;\n  input: NormalizedInputOptions;\n  hooks: NormalizedHookOptions;\n}\n\nexport interface NormalizedOutputOptions {\n  workspace?: string;\n  target: string;\n  schemas?: string | SchemaOptions;\n  operationSchemas?: string;\n  namingConvention: NamingConvention;\n  fileExtension: string;\n  /**\n   * File extension for schema artifacts (TS types or Zod schemas) under\n   * `schemas:`. Defaults to `.zod.ts` when the output is Zod schemas\n   * (`schemas: { type: 'zod' }` or `client: 'zod'` + `generateReusableSchemas`),\n   * otherwise `.ts`. A user-set `output.fileExtension` always wins.\n   */\n  schemaFileExtension: string;\n  mode: OutputMode;\n  // Always normalized to an object form; an empty `generators` array means\n  // no mocks are emitted.\n  mock: NormalizedMocksConfig;\n  override: NormalizedOverrideOutput;\n  client: OutputClient | OutputClientFunc;\n  httpClient: OutputHttpClient;\n  clean: boolean | string[];\n  docs: boolean | OutputDocsOptions;\n  formatter?: SupportedFormatter;\n  tsconfig?: Tsconfig;\n  packageJson?: PackageJson;\n  headers: boolean;\n  indexFiles: boolean;\n  baseUrl?: string | BaseUrlFromSpec | BaseUrlFromConstant | BaseUrlRuntime;\n  allParamsOptional: boolean;\n  urlEncodeParameters: boolean;\n  unionAddMissingProperties: boolean;\n  optionsParamRequired: boolean;\n  propertySortOrder: PropertySortOrder;\n  factoryMethods?: NormalizedFactoryMethodsOptions;\n}\n\nexport interface NormalizedParamsSerializerOptions {\n  qs?: Record<string, unknown>;\n}\n\n/**\n * Controls how readonly properties are treated when a schema is reused as a request body.\n *\n * Best practice:\n * - `strip` (default): recommended for most OpenAPI specs, because `readOnly`\n *   properties are response-oriented and generally should not constrain request\n *   payload authoring.\n * - `preserve`: use when your schema intentionally models immutable request DTOs\n *   and you want generated request-body types to keep readonly modifiers.\n *\n * Note: this applies to request bodies regardless of the generated client style\n * (`httpClient`, `httpResource`, etc.). `httpResource` still issues request\n * payloads, so the same OpenAPI guidance applies.\n *\n * If we later want a stricter OpenAPI-aligned mode that omits `readOnly`\n * properties from request bodies entirely, that should be introduced as a new\n * explicit mode rather than overloading `preserve`.\n */\nexport type ReadonlyRequestBodiesMode = 'strip' | 'preserve';\n\nexport interface NormalizedOverrideOutput {\n  title?: (title: string) => string;\n  transformer?: OutputTransformer;\n  mutator?: NormalizedMutator;\n  operations: Record<string, NormalizedOperationOptions | undefined>;\n  tags: Record<string, NormalizedOperationOptions | undefined>;\n  mock?: OverrideMockOptions;\n  contentType?: OverrideOutputContentType;\n  header: false | ((info: OpenApiInfoObject) => string[] | string);\n  formData: NormalizedFormDataType<NormalizedMutator>;\n  formUrlEncoded: boolean | NormalizedMutator;\n  paramsSerializer?: NormalizedMutator;\n  paramsSerializerOptions?: NormalizedParamsSerializerOptions;\n  paramsFilter?: NormalizedMutator;\n  namingConvention: {\n    enum?: NamingConvention;\n  };\n  components: {\n    schemas: {\n      suffix: string;\n      itemSuffix: string;\n    };\n    responses: {\n      suffix: string;\n    };\n    parameters: {\n      suffix: string;\n    };\n    requestBodies: {\n      suffix: string;\n    };\n  };\n  hono: NormalizedHonoOptions;\n  mcp: NormalizedMcpOptions;\n  query: NormalizedQueryOptions;\n  angular: NormalizedAngularOptions;\n  swr: SwrOptions;\n  zod: NormalizedZodOptions;\n  effect: NormalizedEffectOptions;\n  fetch: NormalizedFetchOptions;\n  operationName?: (\n    operation: OpenApiOperationObject,\n    route: string,\n    verb: Verbs,\n  ) => string;\n\n  requestOptions: Record<string, unknown> | boolean;\n  useDates?: boolean;\n  useTypeOverInterfaces?: boolean;\n  useDeprecatedOperations?: boolean;\n  useBigInt?: boolean;\n  useNamedParameters?: boolean;\n  enumGenerationType: EnumGeneration;\n  suppressReadonlyModifier?: boolean;\n  /**\n   * Controls how readonly properties are handled for generated request-body types.\n   *\n   * Prefer `strip` for most OpenAPI specs because `readOnly` fields are\n   * response-oriented. Use `preserve` only when your request DTOs are\n   * intentionally immutable and should remain readonly in generated types.\n   */\n  preserveReadonlyRequestBodies?: ReadonlyRequestBodiesMode;\n  /**\n   * When enabled, operations with multiple request body content-types\n   * (e.g. both `multipart/form-data` and `application/json`) will generate\n   * separate functions for each content type instead of a single function\n   * with a union type parameter.\n   *\n   * @example\n   * // With splitByContentType: true\n   * updateProfileWithFormData(body: FormDataType) => { ... }\n   * updateProfileWithJson(body: JsonType) => { ... }\n   *\n   * // With splitByContentType: false (default)\n   * updateProfile(body: FormDataType | JsonType) => { ... }\n   *\n   * @default false\n   */\n  splitByContentType: boolean;\n  jsDoc: NormalizedJsDocOptions;\n  aliasCombinedTypes: boolean;\n  /**\n   * When enabled, optional properties will be typed as `T | null` instead of just `T`.\n   * @default false\n   */\n  useNullForOptional?: boolean;\n}\n\nexport interface NormalizedMutator {\n  path: string;\n  name?: string;\n  default: boolean;\n  alias?: Record<string, string>;\n  external?: string[];\n  extension?: string;\n}\n\nexport interface NormalizedOperationOptions {\n  transformer?: OutputTransformer;\n  mutator?: NormalizedMutator;\n  mock?: {\n    data?: MockData;\n    properties?: MockProperties;\n  };\n  contentType?: OverrideOutputContentType;\n  query?: NormalizedQueryOptions;\n  angular?: NormalizedAngularOptions;\n  swr?: SwrOptions;\n  zod?: NormalizedZodOptions;\n  effect?: NormalizedEffectOptions;\n  operationName?: (\n    operation: OpenApiOperationObject,\n    route: string,\n    verb: Verbs,\n  ) => string;\n  fetch?: FetchOptions;\n  formData?: NormalizedFormDataType<NormalizedMutator>;\n  formUrlEncoded?: boolean | NormalizedMutator;\n  paramsSerializer?: NormalizedMutator;\n  paramsFilter?: NormalizedMutator;\n  requestOptions?: object | boolean;\n}\n\nexport interface NormalizedInputOptions {\n  target: string | OpenApiDocument;\n  override: OverrideInput;\n  unsafeDisableValidation: boolean;\n  filters?: InputFiltersOptions;\n  parserOptions?: {\n    headers?: {\n      domains: string[];\n      headers: Record<string, string>;\n    }[];\n  };\n}\n\nexport type OutputClientFunc = (\n  clients: GeneratorClients,\n) => ClientGeneratorsBuilder;\n\nexport interface BaseUrlFromSpec {\n  getBaseUrlFromSpecification: true;\n  variables?: Record<string, string>;\n  index?: number;\n  baseUrl?: never;\n}\n\nexport interface BaseUrlFromConstant {\n  getBaseUrlFromSpecification: false;\n  variables?: never;\n  index?: never;\n  baseUrl: string;\n}\n\n/**\n * Embed a runtime JavaScript expression into generated URL template literals\n * (e.g. `process.env.API_BASE_URL`) so the same build can target different hosts at runtime.\n */\nexport interface BaseUrlRuntime {\n  runtime: string;\n  /** Named imports for symbols used in `runtime` (e.g. `{ name: 'apiBase', importPath: '../config' }`). */\n  imports?: GeneratorImport[];\n  getBaseUrlFromSpecification?: never;\n  baseUrl?: never;\n}\n\nexport const PropertySortOrder = {\n  ALPHABETICAL: 'Alphabetical',\n  SPECIFICATION: 'Specification',\n} as const;\n\nexport type PropertySortOrder =\n  (typeof PropertySortOrder)[keyof typeof PropertySortOrder];\n\nexport const NamingConvention = {\n  CAMEL_CASE: 'camelCase',\n  PASCAL_CASE: 'PascalCase',\n  SNAKE_CASE: 'snake_case',\n  KEBAB_CASE: 'kebab-case',\n} as const;\n\nexport type NamingConvention =\n  (typeof NamingConvention)[keyof typeof NamingConvention];\n\nexport const EnumGeneration = {\n  CONST: 'const',\n  ENUM: 'enum',\n  UNION: 'union',\n} as const;\n\nexport type EnumGeneration =\n  (typeof EnumGeneration)[keyof typeof EnumGeneration];\n\nexport type SchemaGenerationType = 'typescript' | 'zod';\n\nexport type FactoryMethodsMode = 'single' | 'split' | 'single-split';\n\nexport interface FactoryMethodsOptions {\n  functionNamePrefix?: string;\n  mode?: FactoryMethodsMode;\n  outputDirectory?: string;\n  includeOptionalProperty?: boolean;\n}\n\nexport interface NormalizedFactoryMethodsOptions {\n  functionNamePrefix: string;\n  mode: FactoryMethodsMode;\n  outputDirectory: string;\n  includeOptionalProperty: boolean;\n}\n\nexport interface SchemaOptions {\n  path: string;\n  type: SchemaGenerationType;\n  importPath?: string;\n}\n\nexport interface NormalizedSchemaOptions {\n  path: string;\n  type: SchemaGenerationType;\n  importPath?: string;\n}\n\nexport interface OutputOptions {\n  workspace?: string;\n  target: string;\n  schemas?: string | SchemaOptions | false;\n  /**\n   * Separate path for operation-derived types (params, bodies, responses).\n   * When set, types matching operation patterns (e.g., *Params, *Body) are written here\n   * while regular schema types remain in the `schemas` path.\n   */\n  operationSchemas?: string;\n  namingConvention?: NamingConvention;\n  fileExtension?: string;\n  /**\n   * Optional file extension applied only to schema artifacts (TS types or\n   * Zod schemas) under `schemas:`. Takes precedence over `fileExtension`\n   * for schema files. Defaults to `.zod.ts` when the output is Zod schemas\n   * (`schemas: { type: 'zod' }` or `client: 'zod'` + `generateReusableSchemas`),\n   * otherwise mirrors `fileExtension`.\n   */\n  schemaFileExtension?: string;\n  mode?: OutputMode;\n  // Mocks config. Accepts:\n  // - `true` shorthand: emits both msw + faker with defaults\n  // - OutputMocksConfig object with `generators` array and optional `indexMockFiles`\n  // - ClientMockBuilder function for advanced custom generators\n  mock?: OutputMocksOption;\n  override?: OverrideOutput;\n  client?: OutputClient | OutputClientFunc;\n  httpClient?: OutputHttpClient;\n  clean?: boolean | string[];\n  docs?: boolean | OutputDocsOptions;\n  formatter?: SupportedFormatter;\n  tsconfig?: string | Tsconfig;\n  packageJson?: string;\n  headers?: boolean;\n  indexFiles?: boolean;\n  baseUrl?: string | BaseUrlFromSpec | BaseUrlFromConstant | BaseUrlRuntime;\n  allParamsOptional?: boolean;\n  urlEncodeParameters?: boolean;\n  unionAddMissingProperties?: boolean;\n  optionsParamRequired?: boolean;\n  propertySortOrder?: PropertySortOrder;\n  factoryMethods?: FactoryMethodsOptions;\n}\n\nexport interface InputFiltersOptions {\n  mode?: 'include' | 'exclude';\n  tags?: (string | RegExp)[];\n  schemas?: (string | RegExp)[];\n  /**\n   * When `tags` is set, orval limits the output to only the schemas referenced\n   * by the matching operations. Set this to `true` to keep every\n   * `#/components/schemas` entry (including unreferenced ones) while still\n   * filtering endpoints by `tags`. The other component sections (`responses`,\n   * `parameters`, `requestBodies`) remain pruned to what the matching\n   * operations use. Ignored when `schemas` is set.\n   *\n   * @default false\n   */\n  includeUnreferencedSchemas?: boolean;\n}\n\nexport interface InputOptions {\n  target: string | string[] | Record<string, unknown> | OpenApiDocument;\n  override?: OverrideInput;\n  /**\n   * Disable OpenAPI spec validation.\n   *\n   * **Use at your own risk** — code generation with invalid specs is not guaranteed\n   * to work and may break in minor updates. Bug reports with validation disabled are\n   * not accepted.\n   *\n   * @default false\n   */\n  unsafeDisableValidation?: boolean;\n  filters?: InputFiltersOptions;\n  parserOptions?: {\n    headers?: {\n      domains: string[];\n      headers: Record<string, string>;\n    }[];\n  };\n}\n\nexport const OutputClient = {\n  ANGULAR: 'angular',\n  ANGULAR_QUERY: 'angular-query',\n  AXIOS: 'axios',\n  AXIOS_FUNCTIONS: 'axios-functions',\n  REACT_QUERY: 'react-query',\n  SOLID_START: 'solid-start',\n  SOLID_QUERY: 'solid-query',\n  SVELTE_QUERY: 'svelte-query',\n  VUE_QUERY: 'vue-query',\n  SWR: 'swr',\n  ZOD: 'zod',\n  EFFECT: 'effect',\n  HONO: 'hono',\n  FETCH: 'fetch',\n  MCP: 'mcp',\n} as const;\n\nexport type OutputClient = (typeof OutputClient)[keyof typeof OutputClient];\n\nexport const OutputHttpClient = {\n  AXIOS: 'axios',\n  FETCH: 'fetch',\n  ANGULAR: 'angular',\n} as const;\n\nexport type OutputHttpClient =\n  (typeof OutputHttpClient)[keyof typeof OutputHttpClient];\n\nexport const OutputMode = {\n  SINGLE: 'single',\n  SPLIT: 'split',\n  TAGS: 'tags',\n  TAGS_SPLIT: 'tags-split',\n} as const;\n\nexport type OutputMode = (typeof OutputMode)[keyof typeof OutputMode];\n\nexport type OutputDocsOptions = {\n  configPath?: string;\n} & Partial<TypeDocOptions>;\n\n// TODO: add support for other mock types (like cypress or playwright)\nexport const OutputMockType = {\n  MSW: 'msw',\n  FAKER: 'faker',\n} as const;\n\nexport type OutputMockType =\n  (typeof OutputMockType)[keyof typeof OutputMockType];\n\nexport type PreferredContentType =\n  | 'application/json'\n  | 'application/xml'\n  | 'text/plain'\n  | 'text/html'\n  | 'application/octet-stream'\n  | (string & {});\n\n// Shared by every mock generator.\nexport interface CommonMockOptions {\n  // Use OpenAPI examples to seed mock values where available\n  useExamples?: boolean;\n  // Generate response factories for every HTTP status defined in the spec\n  generateEachHttpStatus?: boolean;\n  // Faker locale (controls the `@faker-js/faker/locale/<x>` import path)\n  locale?: keyof typeof allLocales;\n  // Selects which response schema is mocked when multiple content types exist\n  preferredContentType?: string;\n  // Emit reusable mock factories for object-like array item schemas found in\n  // operation responses (e.g. `getTenantResponseModelDtoMock` for\n  // `value: TenantResponseModelDto[]`). Defaults to `false`.\n  arrayItems?: boolean;\n}\n\nexport interface MswMockOptions extends CommonMockOptions {\n  type: typeof OutputMockType.MSW;\n  // Base URL prefix for the generated MSW route matchers\n  baseUrl?: string;\n  // Response delay before MSW handlers resolve (false disables delay)\n  delay?: false | number | (() => number);\n  // Execute the `delay` function at runtime rather than build time\n  delayFunctionLazyExecute?: boolean;\n  // Custom output directory for MSW mock files. Overrides the shared\n  // `OutputMocksConfig.path` when set. When provided in `single` or `tags`\n  // modes, mock code is written to separate files instead of being inlined\n  // into the implementation file.\n  path?: string;\n}\n\nexport interface FakerMockOptions extends CommonMockOptions {\n  type: typeof OutputMockType.FAKER;\n  // Emit a consolidated mock factory file for every entry under\n  // `components/schemas` (one `get<SchemaName>Mock` per schema). Defaults to\n  // `false` — schema factories are opt-in to preserve existing output.\n  schemas?: boolean;\n  // Emit per-operation response mock factories (the historical behavior).\n  // Defaults to `true`. Set to `false` together with `schemas: true` to get\n  // only the consolidated schema factories.\n  operationResponses?: boolean;\n  // Custom output directory for faker mock files. Overrides the shared\n  // `OutputMocksConfig.path` when set. When provided in `single` or `tags`\n  // modes, mock code is written to separate files instead of being inlined\n  // into the implementation file.\n  path?: string;\n}\n\nexport type GlobalMockOptions = MswMockOptions | FakerMockOptions;\n\n// The top-level `mock` key on OutputOptions accepts this object form:\n//   mock: {\n//     indexMockFiles: true,\n//     generators: [\n//       { type: OutputMockType.MSW, ... },\n//       { type: OutputMockType.FAKER, ... },\n//     ],\n//   }\nexport interface OutputMocksConfig {\n  // When true, emits one root-level `index.<ext>.ts` per generator entry\n  // (e.g. `index.msw.ts` and/or `index.faker.ts`) in `split` and `tags-split`\n  // modes. In `tags-split` it re-exports each per-tag mock; in `split` it\n  // re-exports the single mock file. Keeps mocks in a dedicated barrel so the\n  // models/production barrels never pull them in.\n  indexMockFiles?: boolean;\n  // Shared output directory for all mock files. Individual generators can\n  // override this with their own `path` property. When provided in `single`\n  // or `tags` modes, mock code is written to separate files instead of being\n  // inlined into the implementation file.\n  path?: string;\n  generators: (GlobalMockOptions | ClientMockBuilder)[];\n}\n\n// Accepts:\n//   - boolean shorthand (`mock: true` => both msw + faker with defaults)\n//   - OutputMocksConfig (full object form)\n//   - ClientMockBuilder (single function-form for advanced users)\nexport type OutputMocksOption = boolean | OutputMocksConfig | ClientMockBuilder;\n\n// Normalized result of resolving OutputMocksOption. Always an object so the\n// rest of the pipeline can iterate `generators` without branching on shape.\nexport interface NormalizedMocksConfig {\n  indexMockFiles: boolean;\n  path?: string;\n  generators: (GlobalMockOptions | ClientMockBuilder)[];\n}\n\nexport type OverrideMockOptions = Partial<GlobalMockOptions> & {\n  arrayMin?: number;\n  arrayMax?: number;\n  stringMin?: number;\n  stringMax?: number;\n  numberMin?: number;\n  numberMax?: number;\n  required?: boolean; // When true, all properties are required (and thus not optional) in mocks.\n  nonNullable?: boolean; // When true, nullable mock values are never wrapped in `arrayElement([value, null])`.\n  properties?: MockProperties;\n  format?: Record<string, unknown>;\n  fractionDigits?: number;\n};\n\nexport type MockOptions = Omit<OverrideMockOptions, 'properties'> & {\n  properties?: Record<string, unknown>;\n  operations?: Record<string, { properties: Record<string, unknown> }>;\n  tags?: Record<string, { properties: Record<string, unknown> }>;\n};\n\nexport type MockPropertiesObject = Record<string, unknown>;\nexport type MockPropertiesObjectFn = (\n  specs: OpenApiDocument,\n) => MockPropertiesObject;\n\nexport type MockProperties = MockPropertiesObject | MockPropertiesObjectFn;\n\nexport type MockDataObject = Record<string, unknown>;\n\nexport type MockDataObjectFn = (specs: OpenApiDocument) => MockDataObject;\n\nexport type MockDataArray = unknown[];\n\nexport type MockDataArrayFn = (specs: OpenApiDocument) => MockDataArray;\n\nexport type MockData =\n  | MockDataObject\n  | MockDataObjectFn\n  | MockDataArray\n  | MockDataArrayFn;\n\ntype OutputTransformerFn = (verb: GeneratorVerbOptions) => GeneratorVerbOptions;\n\ntype OutputTransformer = string | OutputTransformerFn;\n\nexport interface MutatorObject {\n  path: string;\n  name?: string;\n  default?: boolean;\n  alias?: Record<string, string>;\n  external?: string[];\n  extension?: string;\n}\n\nexport type Mutator = string | MutatorObject;\n\nexport interface ParamsSerializerOptions {\n  qs?: Record<string, unknown>;\n}\n\nexport const FormDataArrayHandling = {\n  SERIALIZE: 'serialize',\n  EXPLODE: 'explode',\n  SERIALIZE_WITH_BRACKETS: 'serialize-with-brackets',\n} as const;\n\nexport type FormDataArrayHandling =\n  (typeof FormDataArrayHandling)[keyof typeof FormDataArrayHandling];\n\nexport type NormalizedFormDataType<TMutator> =\n  | {\n      disabled: true;\n      mutator?: never;\n      arrayHandling: FormDataArrayHandling;\n    }\n  | {\n      disabled: false;\n      mutator?: TMutator;\n      arrayHandling: FormDataArrayHandling;\n    };\nexport type FormDataType<TMutator> =\n  | {\n      mutator: TMutator;\n      arrayHandling?: FormDataArrayHandling;\n    }\n  | {\n      mutator?: TMutator;\n      arrayHandling: FormDataArrayHandling;\n    };\n\nexport interface OverrideOutput {\n  title?: (title: string) => string;\n  transformer?: OutputTransformer;\n  mutator?: Mutator;\n  operations?: Record<string, OperationOptions>;\n  tags?: Record<string, OperationOptions>;\n  mock?: OverrideMockOptions;\n  contentType?: OverrideOutputContentType;\n  header?: boolean | ((info: OpenApiInfoObject) => string[] | string);\n  formData?: boolean | Mutator | FormDataType<Mutator>;\n  formUrlEncoded?: boolean | Mutator;\n  paramsSerializer?: Mutator;\n  paramsSerializerOptions?: ParamsSerializerOptions;\n  paramsFilter?: Mutator;\n  namingConvention?: {\n    enum?: NamingConvention;\n  };\n  components?: {\n    schemas?: {\n      suffix?: string;\n      itemSuffix?: string;\n    };\n    responses?: {\n      suffix?: string;\n    };\n    parameters?: {\n      suffix?: string;\n    };\n    requestBodies?: {\n      suffix?: string;\n    };\n  };\n  hono?: HonoOptions;\n  mcp?: McpOptions;\n  query?: QueryOptions;\n  swr?: SwrOptions;\n  angular?: AngularOptions;\n  zod?: ZodOptions;\n  effect?: EffectOptions;\n  operationName?: (\n    operation: OpenApiOperationObject,\n    route: string,\n    verb: Verbs,\n  ) => string;\n  fetch?: FetchOptions;\n\n  requestOptions?: Record<string, unknown> | boolean;\n  useDates?: boolean;\n  useTypeOverInterfaces?: boolean;\n  useDeprecatedOperations?: boolean;\n  useBigInt?: boolean;\n  useNamedParameters?: boolean;\n  enumGenerationType?: EnumGeneration;\n  suppressReadonlyModifier?: boolean;\n  /**\n   * Controls how readonly properties are handled for generated request-body types.\n   *\n   * Prefer `strip` for most OpenAPI specs because `readOnly` fields are\n   * response-oriented. Use `preserve` only when your request DTOs are\n   * intentionally immutable and should remain readonly in generated types.\n   */\n  preserveReadonlyRequestBodies?: ReadonlyRequestBodiesMode;\n  /**\n   * When enabled, operations with multiple request body content-types\n   * (e.g. both `multipart/form-data` and `application/json`) will generate\n   * separate functions for each content type instead of a single function\n   * with a union type parameter.\n   *\n   * @default false\n   */\n  splitByContentType?: boolean;\n  jsDoc?: JsDocOptions;\n  aliasCombinedTypes?: boolean;\n  /**\n   * When enabled, optional properties will be typed as `T | null` instead of just `T`.\n   * @default false\n   */\n  useNullForOptional?: boolean;\n}\n\nexport interface JsDocOptions {\n  filter?: (\n    schema: Record<string, unknown>,\n  ) => { key: string; value: string }[];\n}\n\nexport interface NormalizedJsDocOptions {\n  filter?: (\n    schema: Record<string, unknown>,\n  ) => { key: string; value: string }[];\n}\n\nexport interface OverrideOutputContentType {\n  include?: string[];\n  exclude?: string[];\n}\n\n/**\n * Strategy controlling how an existing hono handler file is treated on\n * regeneration.\n *\n * - `smart` (default): non-destructively reconcile orval-owned imports and\n *   `zValidator` arguments and append handlers for new operations, preserving\n *   all user-authored imports, middleware, bodies, and top-level code.\n * - `skip`: leave an existing handler file byte-for-byte unchanged.\n * - `full`: rebuild the preamble and validator chain from the spec, splicing\n *   back only the handler body. Drops custom imports/middleware/helpers.\n */\nexport type HonoHandlerStrategy = 'smart' | 'skip' | 'full';\n\nexport interface NormalizedHonoOptions {\n  handlers?: string;\n  handlerGenerationStrategy: HonoHandlerStrategy;\n  compositeRoute: string;\n  validator: boolean | 'hono';\n  validatorOutputPath: string;\n}\n\nexport interface ZodDateTimeOptions {\n  offset?: boolean;\n  local?: boolean;\n  precision?: number;\n}\n\nexport interface ZodTimeOptions {\n  precision?: -1 | 0 | 1 | 2 | 3;\n}\n\nexport interface ZodOptions {\n  strict?: {\n    param?: boolean;\n    query?: boolean;\n    header?: boolean;\n    body?: boolean;\n    response?: boolean;\n  };\n  generate?: {\n    param?: boolean;\n    query?: boolean;\n    header?: boolean;\n    body?: boolean;\n    response?: boolean;\n  };\n  coerce?: {\n    param?: boolean | ZodCoerceType[];\n    query?: boolean | ZodCoerceType[];\n    header?: boolean | ZodCoerceType[];\n    body?: boolean | ZodCoerceType[];\n    response?: boolean | ZodCoerceType[];\n  };\n  preprocess?: {\n    param?: Mutator;\n    query?: Mutator;\n    header?: Mutator;\n    body?: Mutator;\n    response?: Mutator;\n  };\n  /**\n   * Mutator referencing a function called once per emitted validator at schema\n   * construction time. It receives codegen-time context (operation, location,\n   * schema name, field path, validator name) and returns a Zod `params` object\n   * (e.g. `{ error: ... }`) that is appended as the trailing argument.\n   *\n   * The plural name follows Zod's own term for the validator's second argument\n   * (`z.string(params)`) and is unrelated to the singular `param` key used by\n   * `generate` / `coerce` / `preprocess` above, which refers to the path-parameter\n   * location.\n   */\n  params?: Mutator;\n  dateTimeOptions?: ZodDateTimeOptions;\n  timeOptions?: ZodTimeOptions;\n  generateEachHttpStatus?: boolean;\n  useBrandedTypes?: boolean;\n  /**\n   * When true, emits one reusable Zod schema per `#/components/schemas/*` `$ref`\n   * (with `namingConvention` applied to the name) and references it everywhere\n   * instead of inlining. Default `false`. See `docs/superpowers/specs/2026-05-26-reusable-zod-schemas-design.md`.\n   */\n  generateReusableSchemas?: boolean;\n  /**\n   * When true (zod v4 only), attaches registry metadata to generated\n   * **component** schemas via `.meta({ id, description?, deprecated? })`: `id` is\n   * the schema name, plus `description`/`deprecated` when the OpenAPI schema\n   * provides them. On zod v3 (which has no `.meta()`) descriptions still emit\n   * via `.describe()`. Default `false`.\n   */\n  generateMeta?: boolean;\n}\n\nexport interface EffectOptions {\n  strict?: ZodOptions['strict'];\n  generate?: ZodOptions['generate'];\n  generateEachHttpStatus?: boolean;\n  useBrandedTypes?: boolean;\n}\n\nexport type ZodCoerceType = 'string' | 'number' | 'boolean' | 'bigint' | 'date';\n\nexport interface NormalizedZodOptions {\n  strict: {\n    param: boolean;\n    query: boolean;\n    header: boolean;\n    body: boolean;\n    response: boolean;\n  };\n  generate: {\n    param: boolean;\n    query: boolean;\n    header: boolean;\n    body: boolean;\n    response: boolean;\n  };\n  coerce: {\n    param: boolean | ZodCoerceType[];\n    query: boolean | ZodCoerceType[];\n    header: boolean | ZodCoerceType[];\n    body: boolean | ZodCoerceType[];\n    response: boolean | ZodCoerceType[];\n  };\n  preprocess?: {\n    param?: NormalizedMutator;\n    query?: NormalizedMutator;\n    header?: NormalizedMutator;\n    body?: NormalizedMutator;\n    response?: NormalizedMutator;\n  };\n  params?: NormalizedMutator;\n  generateEachHttpStatus: boolean;\n  useBrandedTypes: boolean;\n  generateReusableSchemas: boolean;\n  generateMeta: boolean;\n  dateTimeOptions: ZodDateTimeOptions;\n  timeOptions: ZodTimeOptions;\n}\n\nexport interface NormalizedEffectOptions {\n  strict: NormalizedZodOptions['strict'];\n  generate: NormalizedZodOptions['generate'];\n  generateEachHttpStatus: boolean;\n  useBrandedTypes: boolean;\n}\n\n/**\n * A single parameter value for `mutationInvalidates` params.\n *\n * - `string` – treated as a variable reference, e.g. `\"petId\"` → `variables.petId`\n * - `{ literal: string }` – emitted as a string literal, e.g. `{ literal: \"@me\" }` → `\"@me\"`\n */\nexport type InvalidateTargetParam = string | { literal: string };\n\nexport type InvalidateTarget =\n  | string\n  | {\n      query: string;\n      params?: InvalidateTargetParam[] | Record<string, InvalidateTargetParam>;\n      invalidateMode?: 'invalidate' | 'reset';\n      file?: string;\n    };\n\nexport interface MutationInvalidatesRule {\n  onMutations: string[];\n  invalidates: InvalidateTarget[];\n}\n\nexport type MutationInvalidatesConfig = MutationInvalidatesRule[];\n\nexport interface HonoOptions {\n  handlers?: string;\n  handlerGenerationStrategy?: HonoHandlerStrategy;\n  compositeRoute?: string;\n  validator?: boolean | 'hono';\n  validatorOutputPath?: string;\n}\n\nexport interface McpServerOptions {\n  path: string;\n  name?: string;\n  default?: boolean;\n}\n\nexport interface NormalizedMcpServerOptions {\n  path: string;\n  name?: string;\n  default: boolean;\n}\n\nexport interface McpOptions {\n  server?: McpServerOptions;\n}\n\nexport interface NormalizedMcpOptions {\n  server?: NormalizedMcpServerOptions;\n}\n\nexport interface NormalizedQueryOptions {\n  useQuery?: boolean;\n  useSuspenseQuery?: boolean;\n  useMutation?: boolean;\n  useInfinite?: boolean;\n  useSuspenseInfiniteQuery?: boolean;\n  useInfiniteQueryParam?: string;\n  usePrefetch?: boolean;\n  useInvalidate?: boolean;\n  useSetQueryData?: boolean;\n  useGetQueryData?: boolean;\n\n  options?: Record<string, unknown>;\n  queryKey?: NormalizedMutator;\n  queryOptions?: NormalizedMutator;\n  mutationOptions?: NormalizedMutator;\n  shouldExportMutatorHooks?: boolean;\n  shouldExportHttpClient?: boolean;\n  shouldExportQueryKey?: boolean;\n  shouldFilterQueryKey?: boolean;\n  queryKeyFilter?: string;\n  shouldSplitQueryKey?: boolean;\n  useOperationIdAsQueryKey?: boolean;\n  signal?: boolean;\n  version?: 3 | 4 | 5;\n  mutationInvalidates?: MutationInvalidatesConfig;\n  runtimeValidation?: boolean;\n}\n\nexport interface QueryOptions {\n  useQuery?: boolean;\n  useSuspenseQuery?: boolean;\n  useMutation?: boolean;\n  useInfinite?: boolean;\n  useSuspenseInfiniteQuery?: boolean;\n  useInfiniteQueryParam?: string;\n  usePrefetch?: boolean;\n  useInvalidate?: boolean;\n  useSetQueryData?: boolean;\n  useGetQueryData?: boolean;\n\n  options?: Record<string, unknown>;\n  queryKey?: Mutator;\n  queryOptions?: Mutator;\n  mutationOptions?: Mutator;\n  shouldExportMutatorHooks?: boolean;\n  shouldExportHttpClient?: boolean;\n  shouldExportQueryKey?: boolean;\n  shouldFilterQueryKey?: boolean;\n  queryKeyFilter?: string;\n  shouldSplitQueryKey?: boolean;\n  useOperationIdAsQueryKey?: boolean;\n  signal?: boolean;\n  version?: 3 | 4 | 5;\n  mutationInvalidates?: MutationInvalidatesConfig;\n  runtimeValidation?: boolean;\n}\n\nexport interface AngularOptions {\n  provideIn?: 'root' | 'any' | boolean;\n  /**\n   * Preferred name for configuring how retrieval-style operations are emitted.\n   *\n   * - `httpClient`: keep retrievals as service methods\n   * - `httpResource`: emit retrievals as Angular `httpResource` helpers\n   * - `both`: emit retrieval helpers and keep service methods where needed\n   *\n   * Mutation-style operations still use generated `HttpClient` service methods\n   * by default unless a per-operation override forces a different behavior.\n   */\n  retrievalClient?: 'httpClient' | 'httpResource' | 'both';\n  /**\n   * Backward-compatible alias for `retrievalClient`.\n   *\n   * Kept for compatibility with existing configs.\n   */\n  client?: 'httpClient' | 'httpResource' | 'both';\n  runtimeValidation?: boolean;\n  httpResource?: AngularHttpResourceOptions;\n}\n\nexport interface NormalizedAngularOptions {\n  provideIn: 'root' | 'any' | boolean;\n  client: 'httpClient' | 'httpResource' | 'both';\n  runtimeValidation: boolean;\n  httpResource?: AngularHttpResourceOptions;\n}\n\nexport interface AngularHttpResourceOptions {\n  /**\n   * Value to expose while the resource is idle/loading.\n   *\n   * Serialized as a literal into generated code.\n   */\n  defaultValue?: unknown;\n  /**\n   * Debug name shown in Angular DevTools.\n   */\n  debugName?: string;\n  /**\n   * Raw code expression for HttpResourceOptions.injector.\n   * Example: `inject(Injector)`.\n   */\n  injector?: string;\n  /**\n   * Raw code expression for HttpResourceOptions.equal.\n   * Example: `(a, b) => a.id === b.id`.\n   */\n  equal?: string;\n}\n\nexport interface SwrOptions {\n  useInfinite?: boolean;\n  useSWRMutationForGet?: boolean;\n  useSuspense?: boolean;\n  generateErrorTypes?: boolean;\n  swrOptions?: unknown;\n  swrMutationOptions?: unknown;\n  swrInfiniteOptions?: unknown;\n}\n\nexport interface NormalizedFetchOptions {\n  includeHttpResponseReturnType: boolean;\n  forceSuccessResponse: boolean;\n  jsonReviver?: Mutator;\n  runtimeValidation: boolean;\n  useRuntimeFetcher: boolean;\n}\n\nexport interface FetchOptions {\n  includeHttpResponseReturnType?: boolean;\n  forceSuccessResponse?: boolean;\n  jsonReviver?: Mutator;\n  runtimeValidation?: boolean;\n  useRuntimeFetcher?: boolean;\n}\n\nexport type InputTransformerFn = (\n  spec: OpenApiDocument,\n) => OpenApiDocument | Promise<OpenApiDocument>;\n\ntype InputTransformer = string | InputTransformerFn;\n\nexport interface OverrideInput {\n  transformer?: InputTransformer;\n}\n\nexport interface OperationOptions {\n  transformer?: OutputTransformer;\n  mutator?: Mutator;\n  mock?: {\n    data?: MockData;\n    properties?: MockProperties;\n  };\n  query?: QueryOptions;\n  angular?: AngularOptions;\n  swr?: SwrOptions;\n  zod?: ZodOptions;\n  effect?: EffectOptions;\n  operationName?: (\n    operation: OpenApiOperationObject,\n    route: string,\n    verb: Verbs,\n  ) => string;\n  fetch?: FetchOptions;\n  formData?: boolean | Mutator | FormDataType<Mutator>;\n  formUrlEncoded?: boolean | Mutator;\n  paramsSerializer?: Mutator;\n  paramsFilter?: Mutator;\n  requestOptions?: object | boolean;\n}\n\nexport type Hook = 'afterAllFilesWrite';\n\nexport type HookFunction<TArgs extends unknown[] = unknown[]> = (\n  ...args: TArgs\n) => void | Promise<void>;\n\nexport interface HookOption {\n  command: string | HookFunction;\n  injectGeneratedDirsAndFiles?: boolean;\n}\n\nexport type HookCommand =\n  | string\n  | HookFunction\n  | HookOption\n  | (string | HookFunction | HookOption)[];\n\nexport type NormalizedHookCommand = HookCommand[];\n\nexport type HooksOptions<T = HookCommand | NormalizedHookCommand> = Partial<\n  Record<Hook, T>\n>;\n\nexport type NormalizedHookOptions = HooksOptions<NormalizedHookCommand>;\n\nexport type Verbs = 'post' | 'put' | 'get' | 'patch' | 'delete' | 'head';\n\nexport const Verbs = {\n  POST: 'post' as Verbs,\n  PUT: 'put' as Verbs,\n  GET: 'get' as Verbs,\n  PATCH: 'patch' as Verbs,\n  DELETE: 'delete' as Verbs,\n  HEAD: 'head' as Verbs,\n};\n\n/**\n * Canonical tag name used for the generated bucket that collects untagged operations.\n */\nexport const DefaultTag = 'default' as const;\n\nexport interface ImportOpenApi {\n  spec: OpenApiDocument;\n  input: NormalizedInputOptions;\n  output: NormalizedOutputOptions;\n  target: string;\n  workspace: string;\n  projectName?: string;\n}\n\nexport interface ContextSpec {\n  projectName?: string;\n  target: string;\n  workspace: string;\n  spec: OpenApiDocument;\n  parents?: string[];\n  output: NormalizedOutputOptions;\n  /**\n   * Per-schema dynamic scope mapping `$dynamicAnchor` names to concrete schema\n   * entries or generic parameter placeholders. Populated by `buildDynamicScope`.\n   */\n  dynamicScope?: Partial<Record<string, DynamicScopeEntry>>;\n  /**\n   * Tracks array-item mock factory names already emitted per output file scope.\n   * Populated by `@orval/mock` when `arrayItems: true` so shared `$ref` item\n   * factories are not re-declared within the same file (single/split) or tag\n   * bucket (tags/tags-split). Scope keys include the active mock generator\n   * type so separate `.msw.ts` / `.faker.ts` files each get their own copy.\n   */\n  arrayItemMockFactories?: Map<string, Set<string>>;\n  /**\n   * Set by `@orval/mock` while generating per-operation mock output so\n   * file-scoped helpers (e.g. array-item factory dedup) can distinguish\n   * separate mock generator files.\n   */\n  activeMockOutputType?: OutputMockType;\n}\n\n/**\n * Maps a `$dynamicAnchor` name to its resolution target.\n *\n * Concrete entry (bound via `$ref`):\n *   - `name` — the generated TypeScript type name (e.g. `User`)\n *   - `schemaName` — the original key in `components.schemas` (e.g. `User`)\n *\n * Parameter entry (unbound `$defs` placeholder):\n *   - `isParameter` — `true`, signals this is a generic type parameter\n *   - `name` — the `$dynamicAnchor` name used as the type parameter (e.g. `itemType`)\n *   - `schemaName` — same as `name` for parameters\n */\nexport interface DynamicScopeEntry {\n  name: string;\n  schemaName: string;\n  isParameter?: boolean;\n}\n\nexport interface GlobalOptions {\n  watch?: boolean | string | string[];\n  verbose?: boolean;\n  clean?: boolean | string[];\n  formatter?: SupportedFormatter;\n  mock?: OutputMocksOption;\n  client?: OutputClient;\n  httpClient?: OutputHttpClient;\n  mode?: OutputMode;\n  tsconfig?: string | Tsconfig;\n  packageJson?: string;\n  input?: string | string[];\n  output?: string;\n  failOnWarnings?: boolean;\n}\n\nexport interface Tsconfig {\n  baseUrl?: string;\n  compilerOptions?: {\n    esModuleInterop?: boolean;\n    allowSyntheticDefaultImports?: boolean;\n    exactOptionalPropertyTypes?: boolean;\n    paths?: Record<string, string[]>;\n    target?: TsConfigTarget;\n    module?: TsConfigModule;\n    moduleResolution?: TsConfigModuleResolution;\n    allowImportingTsExtensions?: boolean;\n  };\n}\n\nexport type TsConfigTarget =\n  | 'es3'\n  | 'es5'\n  | 'es6'\n  | 'es2015'\n  | 'es2016'\n  | 'es2017'\n  | 'es2018'\n  | 'es2019'\n  | 'es2020'\n  | 'es2021'\n  | 'es2022'\n  | 'es2023'\n  | 'es2024'\n  | 'es2025'\n  | 'esnext'; // https://www.typescriptlang.org/tsconfig#target\n\n/** Accepts both the canonical casing and the all-lowercase variant of a string literal. */\ntype CaseInsensitive<T extends string> = T | Lowercase<T>;\n\n/**\n * Valid values for the TypeScript `compilerOptions.module` setting.\n *\n * Both title-case (e.g. `\"NodeNext\"`) and lower-case (e.g. `\"nodenext\"`) are\n * accepted, matching TypeScript's own case-insensitive parsing.\n *\n * @see {@link https://www.typescriptlang.org/tsconfig#module}\n */\nexport type TsConfigModule = CaseInsensitive<\n  | 'None'\n  | 'CommonJS'\n  | 'AMD'\n  | 'UMD'\n  | 'System'\n  | 'ES6'\n  | 'ES2015'\n  | 'ES2020'\n  | 'ES2022'\n  | 'ESNext'\n  | 'Node16'\n  | 'Node18'\n  | 'Node20'\n  | 'NodeNext'\n  | 'Preserve'\n>;\n\n/**\n * Valid values for the TypeScript `compilerOptions.moduleResolution` setting.\n *\n * Both title-case (e.g. `\"NodeNext\"`) and lower-case (e.g. `\"nodenext\"`) are\n * accepted, matching TypeScript's own case-insensitive parsing.\n *\n * @see https://www.typescriptlang.org/tsconfig#moduleResolution\n */\nexport type TsConfigModuleResolution = CaseInsensitive<\n  'Classic' | 'Node' | 'Node10' | 'Node16' | 'NodeNext' | 'Bundler'\n>;\n\nexport interface PackageJson {\n  dependencies?: Record<string, string>;\n  devDependencies?: Record<string, string>;\n  peerDependencies?: Record<string, string>;\n  catalog?: Record<string, string>;\n  catalogs?: Record<string, Record<string, string>>;\n  resolvedVersions?: Record<string, string>;\n}\n\nexport interface GeneratorSchema {\n  name: string;\n  model: string;\n  imports: GeneratorImport[];\n  dependencies?: string[];\n  schema?: OpenApiSchemaObject;\n  factory?: string;\n  factoryImports?: GeneratorImport[];\n  factoryMode?: FactoryMethodsMode;\n}\n\nexport interface GeneratorImport {\n  readonly name: string;\n  readonly schemaName?: string;\n  readonly isZodSchema?: boolean;\n  readonly isConstant?: boolean;\n  readonly alias?: string;\n  readonly default?: boolean;\n  readonly values?: boolean;\n  readonly syntheticDefaultImport?: boolean;\n  readonly namespaceImport?: boolean;\n  readonly importPath?: string;\n  // True when this import points at a generated schema-level faker factory\n  // (e.g. `getPetMock`). The mock-file writer routes it to\n  // `<schemas-dir>/index.faker` instead of `<schemas-dir>/<schemaName>`.\n  readonly schemaFactory?: boolean;\n}\n\nexport interface GeneratorDependency {\n  readonly exports: readonly GeneratorImport[];\n  readonly dependency: string;\n}\n\nexport interface GeneratorApiResponse {\n  operations: GeneratorOperations;\n  schemas: GeneratorSchema[];\n}\n\nexport type GeneratorOperations = Record<string, GeneratorOperation>;\n\n// A single generator's accumulated mock output, keyed by the generator's\n// `OutputMockType`. Writers iterate over `GeneratorTarget.mockOutputs` to\n// emit one file per entry (e.g. `<file>.msw.ts` and `<file>.faker.ts`).\nexport interface GeneratorMockOutput {\n  type: OutputMockType;\n  implementation: string;\n  imports: GeneratorImport[];\n  strictMockSchemaTypeNames?: string[];\n}\n\nexport interface GeneratorMockOutputFull {\n  type: OutputMockType;\n  implementation: {\n    function: string;\n    handler: string;\n    handlerName: string;\n  };\n  imports: GeneratorImport[];\n  strictMockSchemaTypeNames?: string[];\n}\n\nexport interface GeneratorTarget {\n  imports: GeneratorImport[];\n  implementation: string;\n  mockOutputs: GeneratorMockOutput[];\n  mutators?: GeneratorMutator[];\n  clientMutators?: GeneratorMutator[];\n  formData?: GeneratorMutator[];\n  formUrlEncoded?: GeneratorMutator[];\n  paramsSerializer?: GeneratorMutator[];\n  paramsFilter?: GeneratorMutator[];\n  fetchReviver?: GeneratorMutator[];\n}\n\nexport interface GeneratorTargetFull {\n  imports: GeneratorImport[];\n  implementation: string;\n  mockOutputs: GeneratorMockOutputFull[];\n  mutators?: GeneratorMutator[];\n  clientMutators?: GeneratorMutator[];\n  formData?: GeneratorMutator[];\n  formUrlEncoded?: GeneratorMutator[];\n  paramsSerializer?: GeneratorMutator[];\n  paramsFilter?: GeneratorMutator[];\n  fetchReviver?: GeneratorMutator[];\n}\n\nexport interface GeneratorOperation {\n  imports: GeneratorImport[];\n  implementation: string;\n  mockOutputs: GeneratorMockOutputFull[];\n  tags: string[];\n  mutator?: GeneratorMutator;\n  clientMutators?: GeneratorMutator[];\n  formData?: GeneratorMutator;\n  formUrlEncoded?: GeneratorMutator;\n  paramsSerializer?: GeneratorMutator;\n  paramsFilter?: GeneratorMutator;\n  fetchReviver?: GeneratorMutator;\n  operationName: string;\n  types?: {\n    result: (title?: string) => string;\n  };\n}\n\nexport interface GeneratorVerbOptions {\n  verb: Verbs;\n  route: string;\n  pathRoute: string;\n  summary?: string;\n  doc: string;\n  tags: string[];\n  operationId: string;\n  operationName: string;\n  response: GetterResponse;\n  body: GetterBody;\n  headers?: GetterQueryParam;\n  queryParams?: GetterQueryParam;\n  params: GetterParams;\n  props: GetterProps;\n  mutator?: GeneratorMutator;\n  formData?: GeneratorMutator;\n  formUrlEncoded?: GeneratorMutator;\n  paramsSerializer?: GeneratorMutator;\n  paramsFilter?: GeneratorMutator;\n  fetchReviver?: GeneratorMutator;\n  override: NormalizedOverrideOutput;\n  deprecated?: boolean;\n  originalOperation: OpenApiOperationObject;\n}\n\nexport type GeneratorVerbsOptions = GeneratorVerbOptions[];\n\nexport interface GeneratorOptions {\n  route: string;\n  pathRoute: string;\n  override: NormalizedOverrideOutput;\n  context: ContextSpec;\n  mock?: GlobalMockOptions | ClientMockBuilder;\n  output: string;\n}\n\nexport interface GeneratorClient {\n  implementation: string;\n  imports: GeneratorImport[];\n  mutators?: GeneratorMutator[];\n  /** When set, overrides the default verbOption.doc prepended to the implementation */\n  docComment?: string;\n}\n\nexport interface GeneratorMutatorParsingInfo {\n  numberOfParams: number;\n  returnNumberOfParams?: number;\n}\nexport interface GeneratorMutator {\n  name: string;\n  path: string;\n  default: boolean;\n  hasErrorType: boolean;\n  errorTypeName: string;\n  hasSecondArg: boolean;\n  hasThirdArg: boolean;\n  isHook: boolean;\n  bodyTypeName?: string;\n}\n\nexport type ClientBuilder = (\n  verbOptions: GeneratorVerbOptions,\n  options: GeneratorOptions,\n  outputClient: OutputClient | OutputClientFunc,\n  output?: NormalizedOutputOptions,\n) => GeneratorClient | Promise<GeneratorClient>;\n\nexport interface ClientFileBuilder {\n  path: string;\n  content: string;\n}\nexport type ClientExtraFilesBuilder = (\n  verbOptions: Record<string, GeneratorVerbOptions>,\n  output: NormalizedOutputOptions,\n  context: ContextSpec,\n) => Promise<ClientFileBuilder[]>;\n\nexport type ClientHeaderBuilder = (params: {\n  title: string;\n  isRequestOptions: boolean;\n  isMutator: boolean;\n  noFunction?: boolean;\n  isGlobalMutator: boolean;\n  provideIn: boolean | 'root' | 'any';\n  hasAwaitedType: boolean;\n  output: NormalizedOutputOptions;\n  verbOptions: Record<string, GeneratorVerbOptions>;\n  tag?: string;\n  isDefaultTagBucket?: boolean;\n  clientImplementation: string;\n}) => string;\n\nexport type ClientFooterBuilder = (params: {\n  noFunction?: boolean | undefined;\n  operationNames: string[];\n  title?: string;\n  hasAwaitedType: boolean;\n  hasMutator: boolean;\n}) => string;\n\nexport type ClientTitleBuilder = (title: string) => string;\n\nexport type ClientDependenciesBuilder = (\n  hasGlobalMutator: boolean,\n  hasParamsSerializerOptions: boolean,\n  packageJson?: PackageJson,\n  httpClient?: OutputHttpClient,\n  hasTagsMutator?: boolean,\n  override?: NormalizedOverrideOutput,\n) => GeneratorDependency[];\n\nexport interface ClientMockGeneratorImplementation {\n  function: string;\n  handlerName: string;\n  handler: string;\n}\n\nexport interface ClientMockGeneratorBuilder {\n  imports: GeneratorImport[];\n  implementation: ClientMockGeneratorImplementation;\n  strictMockSchemaTypeNames?: string[];\n}\n\nexport type ClientMockBuilder = (\n  verbOptions: GeneratorVerbOptions,\n  generatorOptions: GeneratorOptions,\n) => ClientMockGeneratorBuilder;\n\nexport interface ClientGeneratorsBuilder {\n  client: ClientBuilder;\n  header?: ClientHeaderBuilder;\n  dependencies?: ClientDependenciesBuilder;\n  footer?: ClientFooterBuilder;\n  title?: ClientTitleBuilder;\n  extraFiles?: ClientExtraFilesBuilder;\n}\n\nexport type GeneratorClients = Record<OutputClient, ClientGeneratorsBuilder>;\n\nexport interface GetterResponse {\n  imports: GeneratorImport[];\n  definition: {\n    success: string;\n    errors: string;\n  };\n  isBlob: boolean;\n  types: {\n    success: ResReqTypesValue[];\n    errors: ResReqTypesValue[];\n  };\n  contentTypes: string[];\n  schemas: GeneratorSchema[];\n\n  originalSchema?: OpenApiResponsesObject;\n}\n\nexport interface GetterBody {\n  originalSchema: OpenApiReferenceObject | OpenApiRequestBodyObject;\n  imports: GeneratorImport[];\n  definition: string;\n  implementation: string;\n  schemas: GeneratorSchema[];\n  formData?: string;\n  formUrlEncoded?: string;\n  contentType: string;\n  isOptional: boolean;\n}\n\nexport interface GetterParameters {\n  query: { parameter: OpenApiParameterObject; imports: GeneratorImport[] }[];\n  path: { parameter: OpenApiParameterObject; imports: GeneratorImport[] }[];\n  header: { parameter: OpenApiParameterObject; imports: GeneratorImport[] }[];\n}\n\nexport interface GetterParam {\n  name: string;\n  definition: string;\n  implementation: string;\n  default: unknown;\n  required: boolean;\n  imports: GeneratorImport[];\n}\n\nexport type GetterParams = GetterParam[];\nexport interface GetterQueryParam {\n  schema: GeneratorSchema;\n  deps: GeneratorSchema[];\n  isOptional: boolean;\n  paramNames?: string[];\n  originalSchema?: OpenApiSchemaObject;\n  requiredNullableKeys?: string[];\n  /**\n   * Names of query parameters whose declared schema is non-primitive\n   * (object, array of objects, or untyped). Used by Angular generators to\n   * preserve these values through the default `filterParams` helper instead\n   * of silently dropping them — the user's `paramsSerializer`, `mutator`, or\n   * `paramsFilter` is then responsible for handling them. See issue #3326.\n   */\n  nonPrimitiveKeys?: string[];\n}\n\nexport type GetterPropType =\n  | 'param'\n  | 'body'\n  | 'queryParam'\n  | 'header'\n  | 'namedPathParams';\n\nexport const GetterPropType = {\n  PARAM: 'param',\n  NAMED_PATH_PARAMS: 'namedPathParams',\n  BODY: 'body',\n  QUERY_PARAM: 'queryParam',\n  HEADER: 'header',\n} as const;\n\ninterface GetterPropBase {\n  name: string;\n  definition: string;\n  implementation: string;\n  default: unknown;\n  required: boolean;\n}\n\nexport type GetterProp = GetterPropBase &\n  (\n    | { type: 'namedPathParams'; destructured: string; schema: GeneratorSchema }\n    | { type: Exclude<GetterPropType, 'namedPathParams'> }\n  );\n\nexport type GetterProps = GetterProp[];\n\nexport type SchemaType =\n  | 'integer'\n  | 'number'\n  | 'string'\n  | 'boolean'\n  | 'object'\n  | 'null'\n  | 'array'\n  | 'enum'\n  | 'unknown';\n\nexport const SchemaType = {\n  integer: 'integer',\n  number: 'number',\n  string: 'string',\n  boolean: 'boolean',\n  object: 'object',\n  null: 'null',\n  array: 'array',\n  enum: 'enum',\n  unknown: 'unknown',\n};\n\nexport interface ScalarValue {\n  value: string;\n  useTypeAlias?: boolean;\n  isEnum: boolean;\n  hasReadonlyProps: boolean;\n  type: SchemaType;\n  imports: GeneratorImport[];\n  schemas: GeneratorSchema[];\n  isRef: boolean;\n  dependencies: string[];\n  example?: unknown;\n  examples?: Record<string, unknown> | unknown[];\n}\n\nexport type ResolverValue = ScalarValue & {\n  originalSchema: OpenApiSchemaObject;\n};\n\nexport type ResReqTypesValue = ScalarValue & {\n  formData?: string;\n  formUrlEncoded?: string;\n  isRef?: boolean;\n  hasReadonlyProps?: boolean;\n  key: string;\n  contentType: string;\n  originalSchema?: OpenApiSchemaObject;\n};\n\nexport interface FinalizeMockImplementationOptions {\n  mockOptions?: Pick<MockOptions, 'required' | 'nonNullable'>;\n  strictSchemaTypeNames?: readonly string[];\n}\n\nexport interface WriteSpecBuilder {\n  operations: GeneratorOperations;\n  verbOptions: Record<string, GeneratorVerbOptions>;\n  schemas: GeneratorSchema[];\n  title: GeneratorClientTitle;\n  header: GeneratorClientHeader;\n  footer: GeneratorClientFooter;\n  imports: GeneratorClientImports;\n  importsMock: GenerateMockImports;\n  /** Hoists shared strict-mock type aliases once per aggregated mock file. */\n  finalizeMockImplementation?: (\n    implementation: string,\n    options: FinalizeMockImplementationOptions,\n  ) => string;\n  extraFiles: ClientFileBuilder[];\n  info: OpenApiInfoObject;\n  target: string;\n  spec: OpenApiDocument;\n}\n\nexport interface WriteModeProps {\n  builder: WriteSpecBuilder;\n  output: NormalizedOutputOptions;\n  workspace: string;\n  projectName?: string;\n  header: string;\n  needSchema: boolean;\n  generateSchemasInline?: () => string;\n}\n\nexport interface GeneratorApiOperations {\n  verbOptions: Record<string, GeneratorVerbOptions>;\n  operations: GeneratorOperations;\n  schemas: GeneratorSchema[];\n}\n\nexport interface GeneratorClientExtra {\n  implementation: string;\n  implementationMock: string;\n}\n\nexport type GeneratorClientTitle = (data: {\n  outputClient?: OutputClient | OutputClientFunc;\n  title: string;\n  customTitleFunc?: (title: string) => string;\n  output: NormalizedOutputOptions;\n}) => GeneratorClientExtra;\n\nexport type GeneratorClientHeader = (data: {\n  outputClient?: OutputClient | OutputClientFunc;\n  isRequestOptions: boolean;\n  isMutator: boolean;\n  isGlobalMutator: boolean;\n  provideIn: boolean | 'root' | 'any';\n  hasAwaitedType: boolean;\n  titles: GeneratorClientExtra;\n  output: NormalizedOutputOptions;\n  verbOptions: Record<string, GeneratorVerbOptions>;\n  tag?: string;\n  isDefaultTagBucket?: boolean;\n  clientImplementation: string;\n}) => GeneratorClientExtra;\n\nexport type GeneratorClientFooter = (data: {\n  outputClient: OutputClient | OutputClientFunc;\n  operationNames: string[];\n  hasMutator: boolean;\n  hasAwaitedType: boolean;\n  titles: GeneratorClientExtra;\n  output: NormalizedOutputOptions;\n}) => GeneratorClientExtra;\n\nexport type GeneratorClientImports = (data: {\n  client: OutputClient | OutputClientFunc;\n  implementation: string;\n  imports: readonly GeneratorDependency[];\n  projectName?: string;\n  hasSchemaDir: boolean;\n  isAllowSyntheticDefaultImports: boolean;\n  hasGlobalMutator: boolean;\n  hasTagsMutator: boolean;\n  hasParamsSerializerOptions: boolean;\n  packageJson?: PackageJson;\n  output: NormalizedOutputOptions;\n}) => string;\n\nexport type GenerateMockImports = (data: {\n  implementation: string;\n  imports: readonly GeneratorDependency[];\n  projectName?: string;\n  hasSchemaDir: boolean;\n  isAllowSyntheticDefaultImports: boolean;\n  options?: GlobalMockOptions;\n}) => string;\n\nexport type GeneratorApiBuilder = GeneratorApiOperations & {\n  title: GeneratorClientTitle;\n  header: GeneratorClientHeader;\n  footer: GeneratorClientFooter;\n  imports: GeneratorClientImports;\n  importsMock: GenerateMockImports;\n  /** Hoists shared strict-mock type aliases once per aggregated mock file. */\n  finalizeMockImplementation?: (\n    implementation: string,\n    options: FinalizeMockImplementationOptions,\n  ) => string;\n  extraFiles: ClientFileBuilder[];\n};\n\nexport class ErrorWithTag extends Error {\n  tag: string;\n  constructor(message: string, tag: string, options?: ErrorOptions) {\n    super(message, options);\n    this.tag = tag;\n  }\n}\n\nexport type OpenApiSchemaObjectType =\n  | 'string'\n  | 'number'\n  | 'boolean'\n  | 'object'\n  | 'integer'\n  | 'null'\n  | 'array';\n\n// OpenAPI type aliases. Intended to make it easy to swap to OpenAPI v3.2 in the future\nexport type OpenApiDocument = OpenAPIV3_1.Document;\nexport type OpenApiSchemaObject = OpenAPIV3_1.SchemaObject;\nexport type OpenApiSchemasObject = Record<string, OpenApiSchemaObject>;\nexport type OpenApiReferenceObject = OpenAPIV3_1.ReferenceObject & {\n  // https://github.com/scalar/scalar/issues/7405\n  $ref?: string;\n};\nexport type OpenApiComponentsObject = OpenAPIV3_1.ComponentsObject;\nexport type OpenApiPathsObject = OpenAPIV3_1.PathsObject;\nexport type OpenApiPathItemObject = OpenAPIV3_1.PathItemObject;\nexport type OpenApiResponsesObject = OpenAPIV3_1.ResponsesObject;\nexport type OpenApiResponseObject = OpenAPIV3_1.ResponseObject;\nexport type OpenApiParameterObject = OpenAPIV3_1.ParameterObject;\nexport type OpenApiRequestBodyObject = OpenAPIV3_1.RequestBodyObject;\nexport type OpenApiInfoObject = OpenAPIV3_1.InfoObject;\nexport type OpenApiExampleObject = OpenAPIV3_1.ExampleObject;\nexport type OpenApiOperationObject = OpenAPIV3_1.OperationObject;\nexport type OpenApiMediaTypeObject = OpenAPIV3_1.MediaTypeObject;\nexport type OpenApiEncodingObject = OpenAPIV3_1.EncodingObject;\nexport type OpenApiServerObject = OpenAPIV3_1.ServerObject;\n","import { Verbs } from './types';\n\nexport const generalJSTypes = [\n  'number',\n  'string',\n  'null',\n  'unknown',\n  'undefined',\n  'object',\n  'blob',\n];\n\nexport const generalJSTypesWithArray = generalJSTypes.flatMap((type) => [\n  type,\n  `Array<${type}>`,\n  `${type}[]`,\n]);\n\nexport const VERBS_WITH_BODY = [\n  Verbs.POST,\n  Verbs.PUT,\n  Verbs.PATCH,\n  Verbs.DELETE,\n];\n\nexport const URL_REGEX =\n  /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w.-]+)+[\\w\\-._~:/?#[\\]@!$&'()*+,;=.]+$/;\n\nexport const TEMPLATE_TAG_REGEX = /\\${(.+?)}/g; // For replace of 'thing' ${thing}\n","import path from 'node:path';\n\nimport { isFunction, isNullish, isString } from 'remeda';\n\nimport {\n  type ClientMockBuilder,\n  type FakerMockOptions,\n  type GlobalMockOptions,\n  type MswMockOptions,\n  type OpenApiReferenceObject,\n  type OpenApiSchemaObject,\n  OutputMockType,\n  SchemaType,\n  Verbs,\n} from '../types';\n\n/**\n * Type guard for an OpenAPI {@link OpenApiReferenceObject}.\n *\n * Returns `true` when `obj` has a `$ref` property, indicating a static\n * JSON Pointer reference rather than an inline schema.\n *\n * @param obj - Value to test.\n */\nexport function isReference(obj: object): obj is OpenApiReferenceObject {\n  return !isNullish(obj) && Object.hasOwn(obj, '$ref');\n}\n\n/**\n * Represents an OpenAPI 3.1 schema object that contains a `$dynamicRef`\n * keyword, used for recursive or polymorphic schema references.\n *\n * @see https://json-schema.org/draft/2020-12/json-schema-core#section-8.2.4\n */\nexport interface OpenApiDynamicReferenceObject {\n  $dynamicRef: string;\n  [key: string]: unknown;\n}\n\n/**\n * Discriminator helper for {@link OpenApiDynamicReferenceObject}.\n *\n * Returns `true` when `obj` has a `$dynamicRef` string property,\n * indicating it is an OpenAPI 3.1 dynamic reference rather than a\n * static `$ref`.\n *\n * @param obj - Value to test.\n *\n * @see https://json-schema.org/draft/2020-12/json-schema-core#section-8.2.4\n */\nexport function isDynamicReference(\n  obj: object,\n): obj is OpenApiDynamicReferenceObject {\n  return (\n    !isNullish(obj) &&\n    Object.hasOwn(obj, '$dynamicRef') &&\n    typeof (obj as Record<string, unknown>).$dynamicRef === 'string'\n  );\n}\n\n/**\n * Returns `true` when `pathValue` has no file extension and is treated as a\n * directory path.\n *\n * @param pathValue - Path string to inspect.\n */\nexport function isDirectory(pathValue: string) {\n  return !path.extname(pathValue);\n}\n\n/**\n * Type guard for plain objects created with `{}` or `new Object()`.\n *\n * Excludes `null`, arrays, dates, and other non-plain object values.\n *\n * @param x - Value to test.\n */\nexport function isObject(x: unknown): x is Record<string, unknown> {\n  return Object.prototype.toString.call(x) === '[object Object]';\n}\n\n/**\n * Type guard for string primitives and `String` wrapper objects.\n *\n * @param val - Value to test.\n */\nexport function isStringLike(val: unknown): val is string {\n  if (isString(val)) {\n    return true;\n  }\n\n  return Object.prototype.toString.call(val) === '[object String]';\n}\n\n/**\n * Type guard for ES module namespace objects.\n *\n * @param x - Value to test.\n */\nexport function isModule(x: unknown): x is Record<string, unknown> {\n  return Object.prototype.toString.call(x) === '[object Module]';\n}\n\n/**\n * Type guard for integer numbers and numeric strings.\n *\n * Accepts finite integers (`42`) and strings that match `/^-?\\d+$/`\n * (`\"-1\"`, `\"0\"`). Rejects floats, empty strings, and non-numeric values.\n *\n * @param x - Value to test.\n */\nexport function isNumeric(x: unknown): x is number {\n  if (typeof x === 'number') return Number.isInteger(x);\n  return isString(x) && /^-?\\d+$/.test(x);\n}\n\n/**\n * Type guard for an inline OpenAPI {@link OpenApiSchemaObject}.\n *\n * Returns `true` when `x` looks like a schema definition: it has a known\n * `type`, composition keywords (`allOf`, `anyOf`, `oneOf`), or `properties`.\n * Does not match reference objects; use {@link isReference} for those.\n *\n * @param x - Value to test.\n */\nexport function isSchema(x: unknown): x is OpenApiSchemaObject {\n  if (!isObject(x)) {\n    return false;\n  }\n\n  if (isString(x.type) && Object.values(SchemaType).includes(x.type)) {\n    return true;\n  }\n\n  const combine = x.allOf ?? x.anyOf ?? x.oneOf;\n  if (Array.isArray(combine)) {\n    return true;\n  }\n\n  if (isObject(x.properties)) {\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * Type guard for HTTP methods defined in {@link Verbs}.\n *\n * @param verb - Method name to test (for example, `\"get\"`, `\"post\"`).\n */\nexport function isVerb(verb: string): verb is Verbs {\n  return Object.values(Verbs).includes(verb as Verbs);\n}\n\n/**\n * Returns `true` when `str` is a valid absolute URL with an `http:` or\n * `https:` protocol.\n *\n * Empty or whitespace-only strings are rejected.\n *\n * @param str - URL string to validate.\n */\nexport function isUrl(str: string) {\n  if (!str.trim()) return false;\n\n  try {\n    const url = new URL(str);\n    return ['http:', 'https:'].includes(url.protocol);\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Type guard for the MSW mock generator. Use to narrow a\n * `GlobalMockOptions | ClientMockBuilder` value to `MswMockOptions`.\n *\n * @param mock - Mock configuration or builder to test.\n */\nexport function isMswMock(\n  mock: GlobalMockOptions | ClientMockBuilder,\n): mock is MswMockOptions {\n  return !isFunction(mock) && mock.type === OutputMockType.MSW;\n}\n\n/**\n * Type guard for the Faker mock generator. Use to narrow a\n * `GlobalMockOptions | ClientMockBuilder` value to `FakerMockOptions`.\n *\n * @param mock - Mock configuration or builder to test.\n */\nexport function isFakerMock(\n  mock: GlobalMockOptions | ClientMockBuilder,\n): mock is FakerMockOptions {\n  return !isFunction(mock) && mock.type === OutputMockType.FAKER;\n}\n\n/** Re-exported Remeda type guards and predicates used alongside local assertions. */\nexport { isBoolean, isFunction, isNullish, isNumber, isString } from 'remeda';\n","import { isFunction } from './assertion';\n\nexport async function asyncReduce<IterationItem, AccValue>(\n  array: IterationItem[],\n  reducer: (\n    accumulate: AccValue,\n    current: IterationItem,\n  ) => AccValue | Promise<AccValue>,\n  initValue: AccValue,\n): Promise<AccValue> {\n  const shouldClone =\n    initValue === null ||\n    (initValue === Object(initValue) && !isFunction(initValue));\n  let accumulate: AccValue = shouldClone\n    ? (Object.create(initValue as unknown as object) as AccValue)\n    : initValue;\n\n  for (const item of array) {\n    accumulate = await reducer(accumulate, item);\n  }\n\n  return accumulate;\n}\n","import { NamingConvention } from '../types';\n\nconst unicodes = function (s: string, prefix = '') {\n  return s\n    .replaceAll(/(^|-)/g, String.raw`$1\\u` + prefix)\n    .replaceAll(',', String.raw`\\u` + prefix);\n};\n\nconst symbols = unicodes('20-26,28-2F,3A-40,5B-60,7B-7E,A0-BF,D7,F7', '00');\nconst lowers = 'a-z' + unicodes('DF-F6,F8-FF', '00');\nconst uppers = 'A-Z' + unicodes('C0-D6,D8-DE', '00');\nconst impropers = String.raw`A|An|And|As|At|But|By|En|For|If|In|Of|On|Or|The|To|Vs?\\.?|Via`;\n\nconst regexps = {\n  capitalize: new RegExp('(^|[' + symbols + '])([' + lowers + '])', 'g'),\n  pascal: new RegExp('(^|[' + symbols + '])+([' + lowers + uppers + '])', 'g'),\n  fill: new RegExp('[' + symbols + ']+(.|$)', 'g'),\n  sentence: new RegExp(\n    String.raw`(^\\s*|[\\?\\!\\.]+\"?\\s+\"?|,\\s+\")([` + lowers + '])',\n    'g',\n  ),\n  improper: new RegExp(String.raw`\\b(` + impropers + String.raw`)\\b`, 'g'),\n  relax: new RegExp(\n    '([^' +\n      uppers +\n      '])([' +\n      uppers +\n      ']*)([' +\n      uppers +\n      '])(?=[^' +\n      uppers +\n      ']|$)',\n    'g',\n  ),\n  upper: new RegExp('^[^' + lowers + ']+$'),\n  hole: /[^\\s]\\s[^\\s]/,\n  apostrophe: /'/g,\n  room: new RegExp('[' + symbols + ']'),\n};\n\nconst deapostrophe = (s: string) => {\n  return s.replace(regexps.apostrophe, '');\n};\n\nconst up = (s: string) => s.toUpperCase();\nconst low = (s: string) => s.toLowerCase();\n\nconst fill = (s: string, fillWith: string, isDeapostrophe = false) => {\n  s = s.replace(regexps.fill, function (m: string, next: string) {\n    return next ? fillWith + next : '';\n  });\n\n  if (isDeapostrophe) {\n    s = deapostrophe(s);\n  }\n  return s;\n};\n\nconst decap = (s: string, char = 0) => {\n  return low(s.charAt(char)) + s.slice(char + 1);\n};\n\nconst relax = (\n  m: string,\n  before: string,\n  acronym: string | undefined,\n  caps: string,\n) => {\n  return before + ' ' + (acronym ? acronym + ' ' : '') + caps;\n};\n\nconst prep = (s: string, isFill = false, isPascal = false, isUpper = false) => {\n  // s is already typed as string, no coercion needed\n  if (!isUpper && regexps.upper.test(s)) {\n    s = low(s);\n  }\n  if (!isFill && !regexps.hole.test(s)) {\n    // eslint-disable-next-line no-var\n    var holey = fill(s, ' ');\n    if (regexps.hole.test(holey)) {\n      s = holey;\n    }\n  }\n  if (!isPascal && !regexps.room.test(s)) {\n    s = s.replace(regexps.relax, relax);\n  }\n  return s;\n};\n\nconst lower = (s: string, fillWith: string, isDeapostrophe: boolean) => {\n  return fill(low(prep(s, !!fillWith)), fillWith, isDeapostrophe);\n};\n\n// Caches the previously converted strings to improve performance\nconst pascalMemory: Record<string, string> = {};\n\nexport function pascal(s = '') {\n  if (pascalMemory[s]) {\n    return pascalMemory[s];\n  }\n\n  const isStartWithUnderscore = s.startsWith('_');\n  const cacheKey = s;\n\n  if (regexps.upper.test(s)) {\n    s = low(s);\n  }\n\n  const pascalString = (s.match(/[a-zA-Z0-9\\u00C0-\\u017F]+/g) ?? [])\n    .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n    .join('');\n\n  const pascalWithUnderscore = isStartWithUnderscore\n    ? `_${pascalString}`\n    : pascalString;\n\n  pascalMemory[cacheKey] = pascalWithUnderscore;\n\n  return pascalWithUnderscore;\n}\n\nexport function camel(s = '') {\n  const isStartWithUnderscore = s.startsWith('_');\n  const camelString = decap(pascal(s), isStartWithUnderscore ? 1 : 0);\n  return isStartWithUnderscore ? `_${camelString}` : camelString;\n}\n\nexport function snake(s = '') {\n  return lower(s, '_', true);\n}\n\nexport function kebab(s = '') {\n  return lower(s, '-', true);\n}\n\nexport function upper(s: string, fillWith: string, isDeapostrophe?: boolean) {\n  return fill(up(prep(s, !!fillWith, false, true)), fillWith, isDeapostrophe);\n}\n\nexport function conventionName(name: string, convention: NamingConvention) {\n  let nameConventionTransform = camel;\n  switch (convention) {\n    case NamingConvention.PASCAL_CASE: {\n      nameConventionTransform = pascal;\n\n      break;\n    }\n    case NamingConvention.SNAKE_CASE: {\n      nameConventionTransform = snake;\n\n      break;\n    }\n    case NamingConvention.KEBAB_CASE: {\n      nameConventionTransform = kebab;\n\n      break;\n    }\n    // No default\n  }\n\n  return nameConventionTransform(name);\n}\n","import { compare, type CompareOperator } from 'compare-versions';\n\nexport function compareVersions(\n  firstVersion: string,\n  secondVersions: string,\n  operator: CompareOperator = '>=',\n) {\n  if (firstVersion === 'latest' || firstVersion === '*') {\n    return true;\n  }\n\n  // Handle workspace catalog references (pnpm/bun)\n  // catalog: or catalog:name format - assume latest version\n  if (firstVersion.startsWith('catalog:')) {\n    return true;\n  }\n\n  return compare(\n    firstVersion.replace(/(\\s(.*))/, ''),\n    secondVersions,\n    operator,\n  );\n}\n","import type { OpenApiSchemaObject } from '../types';\n\n// Known binary application/* types — add new entries here as needed\nconst binaryApplicationTypes = new Set([\n  'application/octet-stream',\n  'application/pdf',\n  'application/zip',\n]);\n\n/**\n * Determine if a content type is binary.\n * Only known binary types return true. Unknown types default to false (non-binary)\n * so that schema type information is preserved rather than being overridden with Blob.\n */\nexport function isBinaryContentType(contentType: string): boolean {\n  // Strip parameters (e.g., \"; charset=utf-8\") to get the base MIME type\n  const baseType = contentType.split(';')[0].trim();\n\n  if (baseType.startsWith('image/')) return true;\n  if (baseType.startsWith('audio/')) return true;\n  if (baseType.startsWith('video/')) return true;\n  if (baseType.startsWith('font/')) return true;\n\n  return binaryApplicationTypes.has(baseType);\n}\n\n/**\n * Determine if a form-data field should be treated as a file (binary or text).\n *\n * Precedence (per OAS 3.1): encoding.contentType > schema.contentMediaType\n *\n * Returns:\n * - 'binary': binary file (Blob)\n * - 'text': text file (Blob | string)\n * - undefined: not a file, use standard string resolution\n */\nexport function getFormDataFieldFileType(\n  resolvedSchema: OpenApiSchemaObject,\n  partContentType: string | undefined,\n): 'binary' | 'text' | undefined {\n  // Only override string fields - objects/arrays with encoding are just serialized\n  if (resolvedSchema.type !== 'string') {\n    return undefined;\n  }\n\n  // contentEncoding (e.g., base64) means the value is an encoded string, not a file\n  if (resolvedSchema.contentEncoding) {\n    return undefined;\n  }\n\n  const contentMediaType = resolvedSchema.contentMediaType as\n    | string\n    | undefined;\n  const effectiveContentType = partContentType ?? contentMediaType;\n\n  if (effectiveContentType) {\n    return isBinaryContentType(effectiveContentType) ? 'binary' : 'text';\n  }\n\n  return undefined;\n}\n\n/**\n * Filter configuration for content types\n */\nexport interface ContentTypeFilter {\n  include?: string[];\n  exclude?: string[];\n}\n\n/**\n * Filters items by content type based on include/exclude rules\n *\n * @param items - Array of items with contentType property\n * @param filter - Optional filter configuration\n * @returns Filtered array\n *\n * @example\n * ```ts\n * const types = [\n *   { contentType: 'application/json', value: '...' },\n *   { contentType: 'text/xml', value: '...' }\n * ];\n *\n * // Include only JSON\n * filterByContentType(types, { include: ['application/json'] });\n *\n * // Exclude XML\n * filterByContentType(types, { exclude: ['text/xml'] });\n * ```\n */\nexport function filterByContentType<T extends { contentType: string }>(\n  items: T[],\n  filter?: ContentTypeFilter,\n): T[] {\n  if (!filter) {\n    return items;\n  }\n\n  return items.filter((item) => {\n    const shouldInclude =\n      !filter.include || filter.include.includes(item.contentType);\n\n    const shouldExclude = filter.exclude?.includes(item.contentType) ?? false;\n\n    return shouldInclude && !shouldExclude;\n  });\n}\n","import debug from 'debug';\n\nimport { isString } from './assertion';\n\nconst filter = process.env.ORVAL_DEBUG_FILTER;\nconst DEBUG = process.env.DEBUG;\n\ninterface DebuggerOptions {\n  onlyWhenFocused?: boolean | string;\n}\n\nexport function createDebugger(\n  ns: string,\n  options: DebuggerOptions = {},\n): debug.Debugger['log'] {\n  const log = debug(ns);\n  const { onlyWhenFocused } = options;\n  const focus = isString(onlyWhenFocused) ? onlyWhenFocused : ns;\n  return (msg: string, ...args: unknown[]) => {\n    if (filter && !msg.includes(filter)) {\n      return;\n    }\n    if (onlyWhenFocused && !DEBUG?.includes(focus)) {\n      return;\n    }\n    log(msg, ...args);\n  };\n}\n","import type { ContextSpec } from '../types';\n\nconst search = String.raw`\\*/`; // Find '*/'\nconst replacement = String.raw`*\\/`; // Replace With '*\\/'\n\nconst regex = new RegExp(search, 'g');\n\ninterface JsDocSchema extends Record<string, unknown> {\n  description?: string[] | string;\n  deprecated?: boolean;\n  summary?: string;\n  minLength?: number;\n  maxLength?: number;\n  minimum?: number;\n  maximum?: number;\n  exclusiveMinimum?: number;\n  exclusiveMaximum?: number;\n  minItems?: number;\n  maxItems?: number;\n  type?: string | string[];\n  pattern?: string;\n  items?: JsDocSchema;\n}\n\ninterface JsDocEntry {\n  key: string;\n  value: boolean | number | string;\n}\n\nfunction trimTrailingEmptyLines(lines: string[]): string[] {\n  let lastLineIndex = lines.length - 1;\n\n  while (lastLineIndex >= 0 && lines[lastLineIndex]?.trim() === '') {\n    lastLineIndex--;\n  }\n\n  return lines.slice(0, lastLineIndex + 1);\n}\n\nfunction escapeJsDoc(value: string): string {\n  return value.replaceAll(regex, replacement);\n}\n\nfunction getDescriptionLines(description?: string[] | string): string[] {\n  const descriptionBlocks = Array.isArray(description)\n    ? description.filter((line) => !line.includes('eslint-disable'))\n    : [description ?? ''];\n\n  return trimTrailingEmptyLines(\n    descriptionBlocks.flatMap((block) =>\n      block.split(/\\r?\\n/).map((line) => escapeJsDoc(line)),\n    ),\n  );\n}\n\nfunction getEslintDisable(description?: string[] | string): string | undefined {\n  return Array.isArray(description)\n    ? description.find((line) => line.includes('eslint-disable'))\n    : undefined;\n}\n\nconst itemValidationKeys = [\n  'minLength',\n  'maxLength',\n  'minimum',\n  'maximum',\n  'exclusiveMinimum',\n  'exclusiveMaximum',\n  'minItems',\n  'maxItems',\n  'pattern',\n] as const satisfies readonly (keyof JsDocSchema)[];\n\nfunction getItemValidationDocEntries(\n  schema?: JsDocSchema,\n  prefix = 'items',\n  visited = new WeakSet<JsDocSchema>(),\n): JsDocEntry[] {\n  if (!schema) {\n    return [];\n  }\n  if (visited.has(schema)) {\n    return [];\n  }\n  visited.add(schema);\n\n  const entries = itemValidationKeys.flatMap((key) => {\n    const value = schema[key];\n\n    return value === undefined ? [] : [{ key: `${prefix}.${key}`, value }];\n  });\n\n  return [\n    ...entries,\n    ...getItemValidationDocEntries(schema.items, `${prefix}.items`, visited),\n  ];\n}\n\nfunction toJsDocEntry(\n  key: string,\n  value?: boolean | number | string,\n): JsDocEntry[] {\n  if (value === undefined || value === false || value === '') {\n    return [];\n  }\n\n  return [{ key, value }];\n}\n\nfunction getSchemaDocEntries(\n  schema: JsDocSchema,\n  itemValidationDocEntries: JsDocEntry[],\n  isNullable: boolean,\n): JsDocEntry[] {\n  const {\n    deprecated,\n    summary,\n    minLength,\n    maxLength,\n    minimum,\n    maximum,\n    exclusiveMinimum,\n    exclusiveMaximum,\n    minItems,\n    maxItems,\n    pattern,\n  } = schema;\n\n  return [\n    ...toJsDocEntry('deprecated', deprecated),\n    ...toJsDocEntry('summary', summary),\n    ...toJsDocEntry('minLength', minLength),\n    ...toJsDocEntry('maxLength', maxLength),\n    ...toJsDocEntry('minimum', minimum),\n    ...toJsDocEntry('maximum', maximum),\n    ...toJsDocEntry('exclusiveMinimum', exclusiveMinimum),\n    ...toJsDocEntry('exclusiveMaximum', exclusiveMaximum),\n    ...toJsDocEntry('minItems', minItems),\n    ...toJsDocEntry('maxItems', maxItems),\n    ...toJsDocEntry('nullable', isNullable),\n    ...toJsDocEntry('pattern', pattern),\n    ...itemValidationDocEntries.flatMap(({ key, value }) =>\n      toJsDocEntry(key, value),\n    ),\n  ];\n}\n\nfunction formatJsDocEntry({ key, value }: JsDocEntry): string {\n  if (value === true) {\n    return `@${key}`;\n  }\n\n  return `@${key} ${escapeJsDoc(value.toString())}`;\n}\n\nfunction renderJsDocBlock(lines: string[], tryOneLine = false): string {\n  if (lines.length === 0) {\n    return '';\n  }\n\n  if (lines.length === 1 && tryOneLine) {\n    return `/** ${lines[0]} */\\n`;\n  }\n\n  const linePrefix = `${tryOneLine ? '  ' : ''} *`;\n  const closingPrefix = ` ${tryOneLine ? '  ' : ''}`;\n\n  return `/**\\n${lines\n    .map((line) => `${linePrefix}${line ? ` ${line}` : ''}`)\n    .join('\\n')}\\n${closingPrefix}*/\\n`;\n}\n\nexport function jsDoc(\n  schema: object & JsDocSchema,\n  tryOneLine = false,\n  context?: ContextSpec,\n): string {\n  if (context?.output.override.jsDoc) {\n    const { filter } = context.output.override.jsDoc;\n    if (filter) {\n      return keyValuePairsToJsDoc(filter(schema));\n    }\n  }\n\n  const isNullable =\n    schema.type === 'null' ||\n    (Array.isArray(schema.type) && schema.type.includes('null'));\n  const itemValidationDocEntries = getItemValidationDocEntries(schema.items);\n  const lines = [\n    ...getDescriptionLines(schema.description),\n    ...getSchemaDocEntries(schema, itemValidationDocEntries, isNullable).map(\n      (entry) => formatJsDocEntry(entry),\n    ),\n  ];\n  const eslintDisable = getEslintDisable(schema.description);\n  const doc = renderJsDocBlock(lines, tryOneLine);\n\n  return `${eslintDisable ? `/* ${escapeJsDoc(eslintDisable)} */\\n` : ''}${doc}`;\n}\n\nexport function keyValuePairsToJsDoc(\n  keyValues: {\n    key: string;\n    value: string;\n  }[],\n) {\n  return renderJsDocBlock(\n    keyValues.map(({ key, value }) => `@${key} ${value}`),\n  );\n}\n","import path from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nimport { createJiti } from 'jiti';\n\nimport { isModule, isObject, isString } from './assertion';\n\nconst TS_MODULE_EXTENSIONS = new Set(['.ts', '.mts', '.cts', '.tsx', '.jsx']);\n\nexport async function dynamicImport<T>(\n  toImport: T | string,\n  from = process.cwd(),\n  takeDefault = true,\n): Promise<T> {\n  if (!toImport) {\n    return toImport as T;\n  }\n\n  try {\n    if (isString(toImport)) {\n      const filePath = path.resolve(from, toImport);\n      const extension = path.extname(filePath);\n\n      if (TS_MODULE_EXTENSIONS.has(extension)) {\n        const jiti = createJiti(from, {\n          interopDefault: true,\n        });\n        const data = await jiti.import(filePath);\n\n        if (takeDefault && (isObject(data) || isModule(data)) && data.default) {\n          return data.default as T;\n        }\n\n        return data as T;\n      }\n\n      // use pathToFileURL to solve issue #1332.\n      // https://github.com/nodejs/node/issues/31710\n      const fileUrl = pathToFileURL(filePath);\n      const isJson = extension === '.json';\n      const data = (\n        isJson\n          ? await import(fileUrl.href, { with: { type: 'json' } })\n          : await import(fileUrl.href)\n      ) as Record<string, unknown>;\n      if (takeDefault && (isObject(data) || isModule(data)) && data.default) {\n        return data.default as T;\n      }\n\n      return data as unknown as T;\n    }\n\n    return toImport as T;\n  } catch (error) {\n    throw new Error(\n      `Oups... 🍻. Path: ${String(toImport)} => ${String(error)}`,\n      { cause: error },\n    );\n  }\n}\n","export function getExtension(path: string) {\n  return path.toLowerCase().includes('.yaml') ||\n    path.toLowerCase().includes('.yml')\n    ? 'yaml'\n    : 'json';\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { glob } from 'tinyglobby';\n\nimport { isDirectory } from './assertion';\n\nexport function getFileInfo(\n  target = '',\n  {\n    backupFilename = 'filename',\n    extension = '.ts',\n  }: { backupFilename?: string; extension?: string } = {},\n) {\n  const isDir = isDirectory(target);\n  const filePath = isDir\n    ? path.join(target, backupFilename + extension)\n    : target;\n  const pathWithoutExtension = filePath.replace(/\\.[^/.]+$/, '');\n  const dir = path.dirname(filePath);\n  const filename = path.basename(\n    filePath,\n    extension.startsWith('.') ? extension : `.${extension}`,\n  );\n\n  return {\n    path: filePath,\n    pathWithoutExtension,\n    extension,\n    isDirectory: isDir,\n    dirname: dir,\n    filename,\n  };\n}\n\nexport async function removeFilesAndEmptyFolders(\n  patterns: string[],\n  dir: string,\n) {\n  const files = await glob(patterns, {\n    cwd: dir,\n    absolute: true,\n  });\n\n  // Remove files\n  await Promise.all(files.map((file) => fs.promises.unlink(file)));\n\n  // Find and remove empty directories\n  const directories = await glob(['**/*'], {\n    cwd: dir,\n    absolute: true,\n    onlyDirectories: true,\n  });\n\n  // Sort directories by depth (deepest first) to ensure we can remove nested empty folders\n  const sortedDirectories = directories.toSorted((a, b) => {\n    const depthA = a.split('/').length;\n    const depthB = b.split('/').length;\n    return depthB - depthA;\n  });\n\n  // Remove empty directories\n  for (const directory of sortedDirectories) {\n    try {\n      const contents = await fs.promises.readdir(directory);\n      if (contents.length === 0) {\n        await fs.promises.rmdir(directory);\n      }\n    } catch {\n      // Directory might have been removed already or doesn't exist\n      // Continue with next directory\n    }\n  }\n}\n","import {\n  type ClientMockBuilder,\n  type GlobalMockOptions,\n  OutputMockType,\n} from '../types';\nimport { isFunction } from './assertion';\n\n/**\n * Returns the filename suffix for a given mock entry's output file. For\n * example a `{ type: OutputMockType.MSW }` entry produces `<file>.msw.ts` and\n * a `{ type: OutputMockType.FAKER }` entry produces `<file>.faker.ts`.\n *\n * Custom `ClientMockBuilder` functions default to the `msw` suffix to preserve\n * the historical behavior.\n */\nexport function getMockFileExtensionByTypeName(\n  mock: GlobalMockOptions | ClientMockBuilder,\n): OutputMockType {\n  if (isFunction(mock)) {\n    return OutputMockType.MSW;\n  }\n  return mock.type;\n}\n","/**\n * Type safe way to get arbitrary property from an object.\n *\n * @param obj - The object from which to retrieve the property.\n * @param propertyName - The name of the property to retrieve.\n * @returns Object with `hasProperty: true` and `value` of the property if it exists; otherwise `hasProperty: false` and undefined.\n *\n * @remarks Until TypeScript adds type-narrowing for Object.hasOwn we have to use this workaround\n */\nexport function getPropertySafe<T extends object, K extends keyof T>(\n  obj: T,\n  propertyName: K | string,\n):\n  | { hasProperty: true; value: T[K] }\n  | { hasProperty: false; value: undefined } {\n  if (Object.hasOwn(obj, propertyName)) {\n    // safe to cast here because of the above check\n    return { hasProperty: true, value: obj[propertyName as K] };\n  }\n\n  return { hasProperty: false, value: undefined };\n}\n","import { VERBS_WITH_BODY } from '../constants';\nimport { Verbs } from '../types';\n\nexport function getIsBodyVerb(verb: Verbs) {\n  return VERBS_WITH_BODY.includes(verb);\n}\n","import readline from 'node:readline';\nimport { styleText } from 'node:util';\n\nimport { isString } from './assertion';\n\nexport const log = console.log;\n\nlet _warningCount = 0;\n\nexport function logWarning(message: string) {\n  _warningCount++;\n  log(styleText('yellow', message));\n}\n\nexport function getWarningCount(): number {\n  return _warningCount;\n}\n\nexport function resetWarnings(): void {\n  _warningCount = 0;\n}\n\nlet _verbose = false;\n\nexport function setVerbose(v: boolean) {\n  _verbose = v;\n}\n\nexport function isVerbose(): boolean {\n  return _verbose;\n}\n\nexport const logVerbose: typeof console.log = (...args) => {\n  if (_verbose) log(...args);\n};\n\nexport function startMessage({\n  name,\n  version,\n  description,\n}: {\n  name: string;\n  version: string;\n  description: string;\n}): string {\n  return `🍻 ${styleText(['cyan', 'bold'], name)} ${styleText('green', `v${version}`)}${\n    description ? ` - ${description}` : ''\n  }`;\n}\n\nexport function logError(err: unknown, tag?: string) {\n  let message;\n\n  if (err instanceof Error) {\n    message = (err.message || err.stack) ?? 'Unknown error';\n    if (err.cause) {\n      const causeMsg =\n        err.cause instanceof Error\n          ? err.cause.message\n          : isString(err.cause)\n            ? err.cause\n            : JSON.stringify(err.cause, undefined, 2);\n      message += `\\n  Cause: ${causeMsg}`;\n    }\n  } else {\n    message = String(err);\n  }\n\n  log(\n    styleText(\n      'red',\n      ['🛑', tag ? `${tag} -` : undefined, message].filter(Boolean).join(' '),\n    ),\n  );\n}\n\nexport function mismatchArgsMessage(mismatchArgs: string[]) {\n  logWarning(\n    `${mismatchArgs.join(', ')} ${\n      mismatchArgs.length === 1 ? 'is' : 'are'\n    } not defined in your configuration!`,\n  );\n}\n\nexport function createSuccessMessage(backend?: string) {\n  log(\n    `🎉 ${\n      backend ? `${styleText('green', backend)} - ` : ''\n    }Your OpenAPI spec has been converted into ready to use orval!`,\n  );\n}\n\nexport type LogType = 'error' | 'warn' | 'info';\nexport type LogLevel = LogType | 'silent';\nexport interface Logger {\n  info(msg: string, options?: LogOptions): void;\n  warn(msg: string, options?: LogOptions): void;\n  warnOnce(msg: string, options?: LogOptions): void;\n  error(msg: string, options?: LogOptions): void;\n  clearScreen(type: LogType): void;\n  hasWarned: boolean;\n}\n\nexport interface LogOptions {\n  clear?: boolean;\n  timestamp?: boolean;\n}\n\nexport const LogLevels: Record<LogLevel, number> = {\n  silent: 0,\n  error: 1,\n  warn: 2,\n  info: 3,\n};\n\nfunction clearScreen() {\n  const repeatCount = process.stdout.rows - 2;\n  const blank = repeatCount > 0 ? '\\n'.repeat(repeatCount) : '';\n  console.log(blank);\n  readline.cursorTo(process.stdout, 0, 0);\n  readline.clearScreenDown(process.stdout);\n}\n\nexport interface LoggerOptions {\n  prefix?: string;\n  allowClearScreen?: boolean;\n}\n\nexport function createLogger(\n  level: LogLevel = 'info',\n  options: LoggerOptions = {},\n): Logger {\n  const { prefix = '[vite]', allowClearScreen = true } = options;\n  let lastType: LogType | undefined;\n  let lastMsg: string | undefined;\n  let sameCount = 0;\n\n  const thresh = LogLevels[level];\n  const clear =\n    allowClearScreen && process.stdout.isTTY && !process.env.CI\n      ? clearScreen\n      : () => {\n          /* noop */\n        };\n\n  function output(type: LogType, msg: string, options: LogOptions = {}) {\n    if (thresh >= LogLevels[type]) {\n      const method = type === 'info' ? 'log' : type;\n      const format = () => {\n        if (options.timestamp) {\n          const tag =\n            type === 'info'\n              ? styleText(['cyan', 'bold'], prefix)\n              : type === 'warn'\n                ? styleText(['yellow', 'bold'], prefix)\n                : styleText(['red', 'bold'], prefix);\n          return `${styleText('dim', new Date().toLocaleTimeString())} ${tag} ${msg}`;\n        } else {\n          return msg;\n        }\n      };\n      if (type === lastType && msg === lastMsg) {\n        sameCount++;\n        clear();\n        console[method](format(), styleText('yellow', `(x${sameCount + 1})`));\n      } else {\n        sameCount = 0;\n        lastMsg = msg;\n        lastType = type;\n        if (options.clear) {\n          clear();\n        }\n        console[method](format());\n      }\n    }\n  }\n\n  const warnedMessages = new Set<string>();\n\n  const logger: Logger = {\n    hasWarned: false,\n    info(msg, opts) {\n      output('info', msg, opts);\n    },\n    warn(msg, opts) {\n      logger.hasWarned = true;\n      output('warn', msg, opts);\n    },\n    warnOnce(msg, opts) {\n      if (warnedMessages.has(msg)) return;\n      logger.hasWarned = true;\n      output('warn', msg, opts);\n      warnedMessages.add(msg);\n    },\n    error(msg, opts) {\n      logger.hasWarned = true;\n      output('error', msg, opts);\n    },\n    clearScreen(type) {\n      if (thresh >= LogLevels[type]) {\n        clear();\n      }\n    },\n  };\n\n  return logger;\n}\n","import { isObject } from './assertion';\n\nexport function mergeDeep<T extends object, U extends object>(\n  source: T,\n  target: U,\n): T & U {\n  if (!isObject(target) || !isObject(source)) {\n    return source as T & U;\n  }\n\n  const acc = Object.assign({}, source) as Record<string, unknown>;\n  for (const [key, value] of Object.entries(target)) {\n    const sourceValue = acc[key];\n\n    if (Array.isArray(sourceValue) && Array.isArray(value)) {\n      acc[key] = [...(sourceValue as unknown[]), ...(value as unknown[])];\n    } else if (isObject(sourceValue) && isObject(value)) {\n      acc[key] = mergeDeep(sourceValue, value);\n    } else {\n      acc[key] = value;\n    }\n  }\n  return acc as T & U;\n}\n","export function count(str = '', key: string) {\n  if (!str) {\n    return 0;\n  }\n\n  return (str.match(new RegExp(key, 'g')) ?? []).length;\n}\n","import basepath from 'node:path';\n\nimport { getExtension } from './extension';\n\nexport function isAbsolute(value: string): boolean {\n  return basepath.isAbsolute(value);\n}\n\nexport function resolve(...args: string[]): string {\n  return toUnix(basepath.resolve(...args));\n}\n\nexport function toUnix(value: string): string {\n  value = value.replaceAll('\\\\', '/');\n  value = value.replaceAll(/(?<!^)\\/+/g, '/'); // deduplicate except leading for UNC paths\n  return value;\n}\n\nexport function join(...args: string[]): string {\n  return toUnix(basepath.join(...args.map((a) => toUnix(a))));\n}\n\n/**\n * Behaves exactly like `path.relative(from, to)`, but keeps the first meaningful \"./\"\n */\nexport function relativeSafe(from: string, to: string) {\n  const normalizedRelativePath = toUnix(\n    basepath.relative(toUnix(from), toUnix(to)),\n  );\n  const relativePath = normalizeSafe(`.${separator}${normalizedRelativePath}`);\n  return relativePath;\n}\n\nexport function getSchemaFileName(path: string) {\n  return path\n    .replace(`.${getExtension(path)}`, '')\n    .slice(path.lastIndexOf('/') + 1);\n}\n\nexport const separator = '/';\n\nexport function normalizeSafe(value: string) {\n  let result;\n  value = toUnix(value);\n  result = toUnix(basepath.normalize(value));\n  if (\n    value.startsWith('./') &&\n    !result.startsWith('./') &&\n    !result.startsWith('..')\n  ) {\n    result = './' + result;\n  } else if (value.startsWith('//') && !result.startsWith('//')) {\n    result = value.startsWith('//./') ? '//.' + result : '/' + result;\n  }\n  return result;\n}\n\nexport function joinSafe(...values: string[]) {\n  let result = toUnix(basepath.join(...values.map((v) => toUnix(v))));\n\n  if (values.length > 0) {\n    const firstValue = toUnix(values[0]);\n    if (\n      firstValue.startsWith('./') &&\n      !result.startsWith('./') &&\n      !result.startsWith('..')\n    ) {\n      result = './' + result;\n    } else if (firstValue.startsWith('//') && !result.startsWith('//')) {\n      result = firstValue.startsWith('//./') ? '//.' + result : '/' + result;\n    }\n  }\n  return result;\n}\n\n/**\n * Given two absolute file paths, generates a valid ESM relative import path\n * from the 'importer' file to the 'exporter' file.\n *\n * @example\n * ```ts\n * getRelativeImportPath('/path/to/importer.ts', '/path/to/exporter.ts')\n * // => './exporter'\n * getRelativeImportPath('/path/to/importer.ts', '/path/to/sub/exporter.ts')\n * // => './sub/exporter'\n * getRelativeImportPath('/path/to/importer.ts', '/path/sibling/exporter.ts')\n * // => '../sibling/exporter'\n * ```\n *\n * This function handles path normalization, cross-platform separators, and\n * ensures the path is a valid ESM relative specifier (e.g., starts with './').\n *\n * @param importerFilePath - The absolute path of the file that will contain the import statement.\n * @param exporterFilePath - The absolute path of the file being imported.\n * @param [includeFileExtension=false] - Whether the import path should include the file extension, defaults to false.\n * @returns The relative import path string.\n */\nexport function getRelativeImportPath(\n  importerFilePath: string,\n  exporterFilePath: string,\n  includeFileExtension = false,\n): string {\n  if (!basepath.isAbsolute(importerFilePath))\n    throw new Error(\n      `'importerFilePath' is not an absolute path. \"${importerFilePath}\"`,\n    );\n  if (!basepath.isAbsolute(exporterFilePath))\n    throw new Error(\n      `'exporterFilePath' is not an absolute path. \"${exporterFilePath}\"`,\n    );\n\n  // Get the directory of the importer file.\n  const importerDir = basepath.dirname(importerFilePath);\n\n  // Calculate the relative path from the importer's directory to the exporter file.\n  const relativePath = basepath.relative(importerDir, exporterFilePath);\n\n  // Convert to posix path\n  let posixPath = basepath.posix.join(...relativePath.split(basepath.sep));\n\n  // Ensure the path starts with './' for same-directory imports.\n  // A relative specifier must start with './' or '../'.\n  if (!posixPath.startsWith('./') && !posixPath.startsWith('../')) {\n    posixPath = `./${posixPath}`;\n  }\n\n  if (!includeFileExtension) {\n    const ext = basepath.extname(posixPath);\n    if (ext && posixPath.endsWith(ext)) {\n      posixPath = posixPath.slice(0, -ext.length);\n    }\n  }\n\n  return posixPath;\n}\n","import { existsSync, readFileSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\n\nimport type { PackageJson } from '../types';\n\nexport function resolveInstalledVersion(\n  packageName: string,\n  fromDir: string,\n): string | undefined {\n  try {\n    const require = createRequire(path.join(fromDir, 'noop.js'));\n    try {\n      const pkg = require(`${packageName}/package.json`) as {\n        version?: string;\n      };\n      return pkg.version;\n    } catch (directError: unknown) {\n      if (\n        directError instanceof Error &&\n        'code' in directError &&\n        (directError as NodeJS.ErrnoException).code ===\n          'ERR_PACKAGE_PATH_NOT_EXPORTED'\n      ) {\n        const entryPath = require.resolve(packageName);\n        let dir = path.dirname(entryPath);\n        while (dir !== path.parse(dir).root) {\n          const pkgPath = path.join(dir, 'package.json');\n          if (existsSync(pkgPath)) {\n            const pkgData = JSON.parse(readFileSync(pkgPath, 'utf8')) as {\n              name?: string;\n              version?: string;\n            };\n            if (pkgData.name === packageName) {\n              return pkgData.version;\n            }\n          }\n          dir = path.dirname(dir);\n        }\n        return undefined;\n      }\n      throw directError;\n    }\n  } catch {\n    return undefined;\n  }\n}\n\nexport function resolveInstalledVersions(\n  packageJson: PackageJson,\n  fromDir: string,\n): Record<string, string> {\n  const resolved: Record<string, string> = {};\n  const allDeps = new Set([\n    ...Object.keys(packageJson.dependencies ?? {}),\n    ...Object.keys(packageJson.devDependencies ?? {}),\n    ...Object.keys(packageJson.peerDependencies ?? {}),\n  ]);\n  for (const pkgName of allDeps) {\n    const version = resolveInstalledVersion(pkgName, fromDir);\n    if (version) {\n      resolved[pkgName] = version;\n    }\n  }\n  return resolved;\n}\n","import type { NormalizedSchemaOptions } from '../types';\nimport { isObject } from './assertion';\n\nexport interface SchemaOptionLike {\n  importPath?: string;\n}\n\n/**\n * Extracts the custom package import specifier from a normalized `schemas`\n * config. Returns `undefined` when `schemas` is a plain string, `false`,\n * `undefined`, or when `importPath` is not set.\n */\nexport function getSchemasImportPath(\n  schemas?: string | NormalizedSchemaOptions | SchemaOptionLike | false | null,\n): string | undefined {\n  if (isObject(schemas)) {\n    return (schemas as SchemaOptionLike).importPath;\n  }\n  return undefined;\n}\n","export const sortByPriority = <T>(\n  arr: (T & { default?: unknown; required?: boolean })[],\n) =>\n  arr.toSorted((a, b) => {\n    if (a.default) {\n      return 1;\n    }\n\n    if (b.default) {\n      return -1;\n    }\n\n    if (a.required && b.required) {\n      return 0;\n    }\n\n    if (a.required) {\n      return -1;\n    }\n\n    if (b.required) {\n      return 1;\n    }\n    return 0;\n  });\n","import { keyword } from 'esutils';\n\nimport {\n  isBoolean,\n  isFunction,\n  isNumber,\n  isObject,\n  isString,\n} from './assertion';\n\n/**\n * Converts data to a string representation suitable for code generation.\n * Handles strings, numbers, booleans, functions, arrays, and objects.\n *\n * @param data - The data to stringify. Can be a string, array, object, number, boolean, function, null, or undefined.\n * @returns A string representation of the data, `null` for null, or undefined if data is undefined.\n * @example\n * stringify('hello') // returns \"'hello'\"\n * stringify(42) // returns \"42\"\n * stringify([1, 2, 3]) // returns \"[1, 2, 3]\"\n * stringify({ a: 1, b: 'test' }) // returns \"{ a: 1, b: 'test', }\"\n */\nexport function stringify(data?: unknown): string | undefined {\n  if (data === undefined) {\n    return;\n  }\n\n  if (data === null) {\n    return 'null';\n  }\n\n  if (isString(data)) {\n    return `'${data.replaceAll(\"'\", String.raw`\\'`)}'`;\n  }\n\n  if (isNumber(data) || isBoolean(data) || isFunction(data)) {\n    return String(data);\n  }\n\n  if (Array.isArray(data)) {\n    return `[${data.map((item: unknown) => stringify(item as string | unknown[] | Record<string, unknown>)).join(', ')}]`;\n  }\n\n  const entries = Object.entries(data);\n  let result = '';\n  for (const [index, [key, value]] of entries.entries()) {\n    const strValue = stringify(\n      value as string | unknown[] | Record<string, unknown>,\n    );\n    if (entries.length === 1) {\n      result = `{ ${key}: ${strValue}, }`;\n    } else if (!index) {\n      result = `{ ${key}: ${strValue}, `;\n    } else if (entries.length - 1 === index) {\n      result += `${key}: ${strValue}, }`;\n    } else {\n      result += `${key}: ${strValue}, `;\n    }\n  }\n  return result;\n}\n\n/**\n * Sanitizes a string value by removing or replacing special characters and ensuring\n * it conforms to JavaScript identifier naming rules if needed.\n *\n * @param value - The string value to sanitize.\n * @param options - Configuration options for sanitization:\n *   - `whitespace` - Replacement string for whitespace characters, or `true` to keep them.\n *   - `underscore` - Replacement string for underscores, or `true` to keep them.\n *   - `dot` - Replacement string for dots, or `true` to keep them.\n *   - `dash` - Replacement string for dashes, or `true` to keep them.\n *   - `es5keyword` - If true, prefixes the value with underscore if it's an ES5 keyword.\n *   - `es5IdentifierName` - If true, ensures the value is a valid ES5 identifier name.\n *   - `special` - If true, preserves special characters that would otherwise be removed.\n * @returns The sanitized string value.\n * @example\n * sanitize('hello-world', { dash: '_' }) // returns \"hello_world\"\n * sanitize('class', { es5keyword: true }) // returns \"_class\"\n * sanitize('123abc', { es5IdentifierName: true }) // returns \"N123abc\"\n */\nexport function sanitize(\n  value: string,\n  options?: {\n    whitespace?: string | true;\n    underscore?: string | true;\n    dot?: string | true;\n    dash?: string | true;\n    es5keyword?: boolean;\n    es5IdentifierName?: boolean;\n    special?: boolean;\n  },\n) {\n  const {\n    whitespace = '',\n    underscore = '',\n    dot = '',\n    dash = '',\n    es5keyword = false,\n    es5IdentifierName = false,\n    special = false,\n  } = options ?? {};\n  let newValue = value;\n\n  if (!special) {\n    newValue = newValue.replaceAll(/[!\"`'#%&,:;<>=@{}~$()*+/\\\\?[\\]^|]/g, '');\n  }\n\n  if (whitespace !== true) {\n    newValue = newValue.replaceAll(/[\\s]/g, whitespace);\n  }\n\n  if (underscore !== true) {\n    newValue = newValue.replaceAll(/['_']/g, underscore);\n  }\n\n  if (dot !== true) {\n    newValue = newValue.replaceAll(/[.]/g, dot);\n  }\n\n  if (dash !== true) {\n    newValue = newValue.replaceAll(/[-]/g, dash);\n  }\n\n  if (es5keyword) {\n    newValue = keyword.isKeywordES5(newValue, true) ? `_${newValue}` : newValue;\n  }\n\n  if (es5IdentifierName) {\n    if (/^[0-9]/.test(newValue)) {\n      newValue = `N${newValue}`;\n    } else {\n      newValue = keyword.isIdentifierNameES5(newValue)\n        ? newValue\n        : `_${newValue}`;\n    }\n  }\n\n  return newValue;\n}\n\n/**\n * Converts an array of objects to a comma-separated string representation.\n * Optionally extracts a nested property from each object using a dot-notation path.\n *\n * @param props - Array of objects to convert to string.\n * @param path - Optional dot-notation path to extract a property from each object (e.g., \"user.name\").\n * @returns A comma-separated string of values, with each value on a new line indented.\n * @example\n * toObjectString([{ name: 'John' }, { name: 'Jane' }], 'name')\n * // returns \"John,\\n    Jane,\"\n * toObjectString(['a', 'b', 'c'])\n * // returns \"a,\\n    b,\\n    c,\"\n */\nexport function toObjectString<T>(props: T[], path?: keyof T) {\n  if (props.length === 0) {\n    return '';\n  }\n\n  const arrayOfString = isString(path)\n    ? props.map((prop) => {\n        let obj: unknown = prop;\n        for (const key of path.split('.')) {\n          obj =\n            obj && (isObject(obj) || Array.isArray(obj))\n              ? (obj as Record<string, unknown>)[key]\n              : undefined;\n        }\n        return obj as string;\n      })\n    : props;\n\n  return arrayOfString.join(',\\n    ') + ',';\n}\n\nconst NUMBERS = {\n  '0': 'zero',\n  '1': 'one',\n  '2': 'two',\n  '3': 'three',\n  '4': 'four',\n  '5': 'five',\n  '6': 'six',\n  '7': 'seven',\n  '8': 'eight',\n  '9': 'nine',\n};\n\n/**\n * Converts a number to its word representation by translating each digit to its word form.\n *\n * @param num - The number to convert to words.\n * @returns A string containing the word representation of each digit concatenated together.\n * @example\n * getNumberWord(123) // returns \"onetwothree\"\n * getNumberWord(42) // returns \"fourtwo\"\n */\nexport function getNumberWord(num: number) {\n  // eslint-disable-next-line @typescript-eslint/no-misused-spread -- digits 0-9 only, no unicode concerns\n  const arrayOfNumber = [...num.toString()] as (keyof typeof NUMBERS)[];\n  return arrayOfNumber.reduce((acc, n) => acc + NUMBERS[n], '');\n}\n\n/**\n * Escapes a specific character in a string by prefixing all of its occurrences with a backslash.\n *\n * @param str - The string to escape, or null.\n * @param char - The character to escape. Defaults to single quote (').\n * @returns The escaped string, or null if the input is null.\n * @example\n * escape(\"don't\") // returns \"don\\'t\"\n * escape(\"it's John's\") // returns \"it\\'s John\\'s\"\n * escape('say \"hello\"', '\"') // returns 'say \\\\\"hello\\\\\"'\n * escape(\"a'''b\", \"'\") // returns \"a\\'\\'\\'b\"\n */\nexport function escape(str: string | null, char = \"'\") {\n  return str?.replaceAll(char, `\\\\${char}`);\n}\n\n/**\n * Escapes regular expression metacharacters in a string so it can be safely\n * embedded inside a RegExp pattern.\n *\n * @param value - The raw string value to escape for regex usage.\n * @returns The escaped string.\n * @example\n * escapeRegExp('foo$bar') // returns 'foo\\\\$bar'\n */\nexport function escapeRegExp(value: string) {\n  return value.replaceAll(/[.*+?^${}()|[\\]\\\\]/g, String.raw`\\$&`);\n}\n\n/**\n * Escape all characters not included in SingleStringCharacters and\n * DoubleStringCharacters on\n * http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4\n *\n * Based on https://github.com/joliss/js-string-escape/blob/master/index.js\n *\n * @param input String to escape\n */\nexport function jsStringEscape(input: string) {\n  return input.replaceAll(/[\"'\\\\\\n\\r\\u2028\\u2029/*]/g, (character) => {\n    switch (character) {\n      case '\"':\n      case \"'\":\n      case '\\\\':\n      case '/':\n      case '*': {\n        return '\\\\' + character;\n      }\n      // Four possible LineTerminator characters need to be escaped:\n      case '\\n': {\n        return String.raw`\\n`;\n      }\n      case '\\r': {\n        return String.raw`\\r`;\n      }\n      case '\\u2028': {\n        return String.raw`\\u2028`;\n      }\n      case '\\u2029': {\n        return String.raw`\\u2029`;\n      }\n      default: {\n        return '';\n      }\n    }\n  });\n}\n\n/**\n * Escape a string for embedding inside a single-quoted JS string literal.\n *\n * Unlike {@link jsStringEscape}, this escapes only what a string literal\n * actually needs: backslashes, single quotes, and line terminators. It\n * deliberately does NOT escape `/` or `*`, which are meaningless inside a\n * string literal, so escaping them produces \"useless escapes\" that round-trip\n * to the same value but trip ESLint's `no-useless-escape` in generated code\n * (e.g. RegExp pattern literals, see #3337).\n *\n * Use {@link jsStringEscape} instead when the value is embedded in a JS comment,\n * where the comment delimiters must be neutralized.\n *\n * @param input String to escape\n */\nexport function jsStringLiteralEscape(input: string) {\n  return input.replaceAll(/['\\\\\\n\\r\\u2028\\u2029]/g, (character) => {\n    switch (character) {\n      case \"'\":\n      case '\\\\': {\n        return '\\\\' + character;\n      }\n      case '\\n': {\n        return String.raw`\\n`;\n      }\n      case '\\r': {\n        return String.raw`\\r`;\n      }\n      case '\\u2028': {\n        return String.raw`\\u2028`;\n      }\n      case '\\u2029': {\n        return String.raw`\\u2029`;\n      }\n      default: {\n        return '';\n      }\n    }\n  });\n}\n\n/**\n * Deduplicates a TypeScript union type string.\n * Handles types like \"A | B | B\" → \"A | B\" and \"null | null\" → \"null\".\n * Only splits on top-level | (not inside {} () [] <> or string literals).\n */\nexport function dedupeUnionType(unionType: string): string {\n  const parts: string[] = [];\n  let current = '';\n  let depth = 0;\n  let quote = ''; // current open quote char, or '' if outside string\n  let escaped = false; // true if previous char was unescaped \\ inside string\n\n  for (const c of unionType) {\n    if (!escaped && (c === \"'\" || c === '\"')) {\n      if (!quote) quote = c;\n      else if (quote === c) quote = '';\n    }\n\n    if (!quote) {\n      if ('{([<'.includes(c)) depth++;\n      if ('})]>'.includes(c)) depth--;\n      if (c === '|' && depth === 0) {\n        parts.push(current.trim());\n        current = '';\n        continue;\n      }\n    }\n    current += c;\n    escaped = !!quote && !escaped && c === '\\\\';\n  }\n  if (current.trim()) parts.push(current.trim());\n\n  return [...new Set(parts)].join(' | ');\n}\n","import type { Tsconfig } from '../types';\n\nexport function isSyntheticDefaultImportsAllow(config?: Tsconfig) {\n  if (!config) {\n    return true;\n  }\n\n  return !!(\n    config.compilerOptions?.allowSyntheticDefaultImports ??\n    config.compilerOptions?.esModuleInterop\n  );\n}\n\nconst NODE_NEXT_MODULES = new Set(['nodenext', 'node16']);\n\nconst NODE_NEXT_EXTENSION_MAP: readonly (readonly [string, string])[] = [\n  ['.tsx', '.jsx'],\n  ['.mts', '.mjs'],\n  ['.cts', '.cjs'],\n  ['.ts', '.js'],\n];\n\nexport function getImportExtension(\n  fileExtension: string,\n  tsconfig?: Tsconfig,\n): string {\n  const compilerOptions = tsconfig?.compilerOptions;\n\n  if (compilerOptions?.allowImportingTsExtensions) {\n    return fileExtension;\n  }\n\n  const module = compilerOptions?.module?.toLowerCase();\n  const moduleResolution = compilerOptions?.moduleResolution?.toLowerCase();\n  if (\n    (module && NODE_NEXT_MODULES.has(module)) ||\n    (moduleResolution && NODE_NEXT_MODULES.has(moduleResolution))\n  ) {\n    for (const [from, to] of NODE_NEXT_EXTENSION_MAP) {\n      if (fileExtension.endsWith(from)) {\n        return `${fileExtension.slice(0, -from.length)}${to}`;\n      }\n    }\n    return fileExtension;\n  }\n\n  return fileExtension.replace(/\\.ts$/, '') || '';\n}\n","import { keyword } from 'esutils';\n\nimport {\n  EnumGeneration,\n  NamingConvention,\n  type OpenApiSchemaObject,\n} from '../types';\nimport {\n  conventionName,\n  isNumeric,\n  isString,\n  jsStringEscape,\n  jsStringLiteralEscape,\n  sanitize,\n} from '../utils';\n\n/** Bridge type for enum values from AnyOtherAttribute-infected schema extensions */\ntype SchemaEnumValue = string | number | boolean | null;\n\n/**\n * Map of special characters to semantic word replacements.\n *\n * Applied before naming convention transforms (PascalCase, camelCase, …) so\n * that characters which would otherwise be stripped still contribute a unique\n * segment to the generated key.  Without this, values like \"created_at\" and\n * \"-created_at\" both PascalCase to \"CreatedAt\", silently overwriting one\n * another in the generated const/enum object.\n *\n * Only characters that appear as leading/trailing modifiers in real-world\n * OpenAPI enums are mapped — the list is intentionally conservative to avoid\n * changing output for schemas that don't hit collisions.\n */\nconst ENUM_SPECIAL_CHARACTER_MAP: Record<string, string> = {\n  '-': 'minus',\n  '+': 'plus',\n};\n\n/**\n * Replace special characters with semantic words (plus an underscore separator)\n * so that naming convention transforms (PascalCase, etc.) produce unique keys.\n *\n * The trailing underscore acts as a word boundary so that PascalCase treats the\n * replacement as a separate word: \"-created_at\" → \"minus_created_at\" → \"MinusCreatedAt\".\n */\nfunction replaceSpecialCharacters(key: string): string {\n  let result = '';\n  for (const char of key) {\n    const replacement = ENUM_SPECIAL_CHARACTER_MAP[char];\n    result += replacement ? replacement + '_' : char;\n  }\n  return result;\n}\n\nexport function getEnumNames(schemaObject: OpenApiSchemaObject | undefined) {\n  const names = (schemaObject?.['x-enumNames'] ??\n    schemaObject?.['x-enumnames'] ??\n    schemaObject?.['x-enum-varnames']) as\n    | string[]\n    | Record<string, string>\n    | undefined;\n\n  if (!names) return;\n\n  if (Array.isArray(names)) {\n    return names.map((name: string) => jsStringEscape(name));\n  }\n\n  // Object/Map format: keys correspond to enum values, values are the names.\n  // Convert to an array ordered by the schema's enum values.\n  if (typeof names === 'object') {\n    const enumValues = (schemaObject?.enum ?? []) as SchemaEnumValue[];\n    return enumValues.map((enumVal) => {\n      const key = String(enumVal);\n      return key in names ? jsStringEscape(names[key]) : undefined;\n    });\n  }\n\n  return;\n}\n\nexport function getEnumDescriptions(\n  schemaObject: OpenApiSchemaObject | undefined,\n) {\n  const descriptions = (schemaObject?.['x-enumDescriptions'] ??\n    schemaObject?.['x-enumdescriptions'] ??\n    schemaObject?.['x-enum-descriptions']) as\n    | string[]\n    | Record<string, string>\n    | undefined;\n\n  if (!descriptions) return;\n\n  if (Array.isArray(descriptions)) {\n    return descriptions.map((description: string) =>\n      jsStringEscape(description),\n    );\n  }\n\n  // Object/Map format: keys correspond to enum values, values are the descriptions.\n  // Convert to an array ordered by the schema's enum values.\n  if (typeof descriptions === 'object') {\n    const enumValues = (schemaObject?.enum ?? []) as SchemaEnumValue[];\n    return enumValues.map((enumVal) => {\n      const key = String(enumVal);\n      return key in descriptions\n        ? jsStringEscape(descriptions[key])\n        : undefined;\n    });\n  }\n\n  return;\n}\n\nexport function getEnum(\n  value: string,\n  enumName: string,\n  names: (string | undefined)[] | undefined,\n  enumGenerationType: EnumGeneration,\n  descriptions?: (string | undefined)[],\n  enumNamingConvention?: NamingConvention,\n) {\n  if (enumGenerationType === EnumGeneration.CONST)\n    return getTypeConstEnum(\n      value,\n      enumName,\n      names,\n      descriptions,\n      enumNamingConvention,\n    );\n  if (enumGenerationType === EnumGeneration.ENUM)\n    return getNativeEnum(value, enumName, names, enumNamingConvention);\n  return getUnion(value, enumName);\n}\n\nconst getTypeConstEnum = (\n  value: string,\n  enumName: string,\n  names?: (string | undefined)[],\n  descriptions?: (string | undefined)[],\n  enumNamingConvention?: NamingConvention,\n) => {\n  let enumValue = `export type ${enumName} = typeof ${enumName}[keyof typeof ${enumName}]`;\n\n  if (value.endsWith(' | null')) {\n    value = value.replace(' | null', '');\n    enumValue += ' | null';\n  }\n\n  enumValue += ';\\n';\n\n  const implementation = getEnumImplementation(\n    value,\n    names,\n    descriptions,\n    enumNamingConvention,\n  );\n\n  enumValue += '\\n\\n';\n\n  enumValue += `export const ${enumName} = {\\n${implementation}} as const;\\n`;\n\n  return enumValue;\n};\n\n/**\n * Derive the object/enum key for a single enum value.\n *\n * Handles numeric prefixes, sanitization, and optional naming convention\n * transforms.  When `disambiguate` is true, special characters (-/+) are\n * replaced with semantic words before the convention transform to prevent\n * key collisions.\n */\nfunction deriveEnumKey(\n  val: string,\n  enumNamingConvention?: NamingConvention,\n  disambiguate = false,\n): string {\n  let key = val.startsWith(\"'\") ? val.slice(1, -1) : val;\n\n  if (isNumeric(key)) {\n    key = toNumberKey(key);\n  }\n\n  if (key.length > 1) {\n    key = sanitize(key, {\n      whitespace: '_',\n      underscore: true,\n      dash: true,\n      special: true,\n    });\n  }\n\n  if (enumNamingConvention) {\n    if (disambiguate) {\n      key = replaceSpecialCharacters(key);\n    }\n    key = conventionName(key, enumNamingConvention);\n  }\n\n  return key;\n}\n\nexport function getEnumImplementation(\n  value: string,\n  names?: (string | undefined)[],\n  descriptions?: (string | undefined)[],\n  enumNamingConvention?: NamingConvention,\n) {\n  // empty enum or null-only enum\n  if (value === '') return '';\n\n  const uniqueValues = [...new Set(value.split(' | '))];\n\n  // Check whether the naming convention produces duplicate keys.\n  // Only apply special-character disambiguation when it does,\n  // so that existing output is preserved for non-colliding enums.\n  const disambiguate =\n    !!enumNamingConvention &&\n    new Set(uniqueValues.map((v) => deriveEnumKey(v, enumNamingConvention)))\n      .size < uniqueValues.length;\n\n  let result = '';\n  for (const [index, val] of uniqueValues.entries()) {\n    const name = names?.[index];\n    const description = descriptions?.[index];\n    const comment = description ? `  /** ${description} */\\n` : '';\n\n    if (name) {\n      result +=\n        comment +\n        `  ${keyword.isIdentifierNameES5(name) ? name : `'${name}'`}: ${val},\\n`;\n      continue;\n    }\n\n    const key = deriveEnumKey(val, enumNamingConvention, disambiguate);\n\n    result +=\n      comment +\n      `  ${keyword.isIdentifierNameES5(key) ? key : `'${key}'`}: ${val},\\n`;\n  }\n  return result;\n}\n\nconst getNativeEnum = (\n  value: string,\n  enumName: string,\n  names?: (string | undefined)[],\n  enumNamingConvention?: NamingConvention,\n) => {\n  const enumItems = getNativeEnumItems(value, names, enumNamingConvention);\n  const enumValue = `export enum ${enumName} {\\n${enumItems}\\n}`;\n\n  return enumValue;\n};\n\nconst getNativeEnumItems = (\n  value: string,\n  names?: (string | undefined)[],\n  enumNamingConvention?: NamingConvention,\n) => {\n  if (value === '') return '';\n\n  const uniqueValues = [...new Set(value.split(' | '))];\n\n  const disambiguate =\n    !!enumNamingConvention &&\n    new Set(uniqueValues.map((v) => deriveEnumKey(v, enumNamingConvention)))\n      .size < uniqueValues.length;\n\n  let result = '';\n  for (const [index, val] of uniqueValues.entries()) {\n    const name = names?.[index];\n    if (name) {\n      result += `  ${keyword.isIdentifierNameES5(name) ? name : `'${name}'`}= ${val},\\n`;\n      continue;\n    }\n\n    const key = deriveEnumKey(val, enumNamingConvention, disambiguate);\n\n    result += `  ${keyword.isIdentifierNameES5(key) ? key : `'${key}'`}= ${val},\\n`;\n  }\n  return result;\n};\n\nconst toNumberKey = (value: string) => {\n  if (value.startsWith('-')) {\n    return `NUMBER_MINUS_${value.slice(1)}`;\n  }\n  if (value.startsWith('+')) {\n    return `NUMBER_PLUS_${value.slice(1)}`;\n  }\n  return `NUMBER_${value}`;\n};\n\nconst getUnion = (value: string, enumName: string) => {\n  return `export type ${enumName} = ${value};`;\n};\n\ninterface CombinedEnumInput {\n  value: string;\n  isRef: boolean;\n  schema: OpenApiSchemaObject | undefined;\n}\n\ninterface CombinedEnumValue {\n  value: string;\n  valueImports: string[];\n  hasNull: boolean;\n}\n\nexport function getEnumUnionFromSchema(\n  schema: OpenApiSchemaObject | undefined,\n) {\n  if (!schema?.enum) return '';\n  const schemaEnum = schema.enum as SchemaEnumValue[];\n  return schemaEnum\n    .filter((val): val is Exclude<SchemaEnumValue, null> => val !== null)\n    .map((val) =>\n      isString(val) ? `'${jsStringLiteralEscape(val)}'` : String(val),\n    )\n    .join(' | ');\n}\n\nconst stripNullUnion = (value: string) =>\n  value.replaceAll(/\\s*\\|\\s*null/g, '').trim();\n\nconst isSpreadableEnumRef = (\n  schema: OpenApiSchemaObject | undefined,\n  refName: string,\n) => {\n  if (!schema?.enum || !refName) return false;\n  if (!getEnumUnionFromSchema(schema)) return false;\n  const type = schema.type as string | string[] | undefined;\n  if (type === 'boolean' || (Array.isArray(type) && type.includes('boolean'))) {\n    return false;\n  }\n  return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(refName);\n};\n\nconst buildInlineEnum = (\n  schema: OpenApiSchemaObject | undefined,\n  enumValue?: string,\n) => {\n  const names = getEnumNames(schema);\n  const descriptions = getEnumDescriptions(schema);\n  const unionValue = enumValue ?? getEnumUnionFromSchema(schema);\n  return getEnumImplementation(unionValue, names, descriptions);\n};\n\nexport function getCombinedEnumValue(\n  inputs: CombinedEnumInput[],\n): CombinedEnumValue {\n  const valueImports: string[] = [];\n  const hasNull = inputs.some((input) => {\n    if (input.value.includes('| null')) return true;\n    const schema = input.schema;\n    if (!schema) return false;\n    if (schema.nullable === true) return true;\n    if (Array.isArray(schema.type) && schema.type.includes('null')) return true;\n    const schemaEnum = schema.enum as SchemaEnumValue[] | undefined;\n    // eslint-disable-next-line unicorn/no-null -- OpenAPI enum values include literal null\n    return schemaEnum?.includes(null) ?? false;\n  });\n\n  const addValueImport = (name: string) => {\n    if (!valueImports.includes(name)) {\n      valueImports.push(name);\n    }\n  };\n\n  if (inputs.length === 1) {\n    const input = inputs[0];\n    if (input.isRef) {\n      const refName = stripNullUnion(input.value);\n      if (isSpreadableEnumRef(input.schema, refName)) {\n        addValueImport(refName);\n        return { value: refName, valueImports, hasNull };\n      }\n      return {\n        value: `{${buildInlineEnum(input.schema)}} as const`,\n        valueImports,\n        hasNull,\n      };\n    }\n\n    return {\n      value: `{${buildInlineEnum(input.schema, stripNullUnion(input.value))}} as const`,\n      valueImports,\n      hasNull,\n    };\n  }\n\n  const enums = inputs\n    .map((input) => {\n      if (input.isRef) {\n        const refName = stripNullUnion(input.value);\n        if (isSpreadableEnumRef(input.schema, refName)) {\n          addValueImport(refName);\n          return `...${refName},`;\n        }\n        return buildInlineEnum(input.schema);\n      }\n\n      return buildInlineEnum(input.schema, stripNullUnion(input.value));\n    })\n    .join('');\n\n  return { value: `{${enums}} as const`, valueImports, hasNull };\n}\n","import type { ContextSpec, NormalizedOverrideOutput } from '../types';\nimport { pascal, sanitize, upath } from '../utils';\n\n/**\n * `$ref`s targeting these sections under `#/components/...` are emitted as\n * named TypeScript imports (e.g. `import type { Pet } from './model'`).\n * Refs to any other location — for example `#/paths/.../schema` produced by\n * JSON-Schema-Ref-Parser `bundle()` — have no corresponding `export type`\n * and must be inlined by the resolver. See issue #398.\n */\nexport const NAMED_COMPONENT_SECTIONS = [\n  'schemas',\n  'responses',\n  'parameters',\n  'requestBodies',\n] as const;\n\ntype RefComponent = (typeof NAMED_COMPONENT_SECTIONS)[number];\n\nexport const RefComponentSuffix: Record<RefComponent, string> = {\n  schemas: '',\n  responses: 'Response',\n  parameters: 'Parameter',\n  requestBodies: 'Body',\n};\n\nconst COMPONENT_REF_PATTERN = new RegExp(\n  String.raw`^#\\/components\\/(${NAMED_COMPONENT_SECTIONS.join('|')})\\/[^/]+$`,\n);\n\n/**\n * True iff `ref` targets a named slot eligible for emission as a TypeScript\n * import. Used by `resolveValue` to decide between named import vs inlining\n * the resolved schema.\n */\nexport function isComponentRef(ref: string): boolean {\n  return COMPONENT_REF_PATTERN.test(ref);\n}\n\nconst TILDE_1 = /~1/g;\nconst TILDE_0 = /~0/g;\n\nexport interface RefInfo {\n  name: string;\n  originalName: string;\n  refPaths?: string[];\n}\n/**\n * Return the output type from the $ref\n *\n * @param $ref\n */\nexport function getRefInfo($ref: string, context: ContextSpec): RefInfo {\n  const [pathname, ref] = $ref.split('#');\n\n  const refPaths = ref\n    .slice(1)\n    .split('/')\n    .map((part) =>\n      decodeURIComponent(part)\n        .replaceAll(TILDE_1, '/')\n        .replaceAll(TILDE_0, '~'),\n    );\n\n  const getOverrideSuffix = (\n    override: NormalizedOverrideOutput,\n    paths: string[],\n  ) => {\n    const firstLevel = override[paths[0] as keyof NormalizedOverrideOutput];\n    if (!firstLevel) return '';\n\n    const secondLevel = (\n      firstLevel as Record<string, { suffix?: string } | undefined>\n    )[paths[1]];\n    return secondLevel?.suffix ?? '';\n  };\n\n  const suffix = getOverrideSuffix(context.output.override, refPaths);\n\n  const originalName = ref\n    ? (refPaths.at(-1) ?? '')\n    : upath.getSchemaFileName(pathname);\n\n  if (!pathname) {\n    return {\n      name: sanitize(pascal(originalName) + suffix, {\n        es5keyword: true,\n        es5IdentifierName: true,\n        underscore: true,\n        dash: true,\n      }),\n      originalName,\n      refPaths,\n    };\n  }\n\n  return {\n    name: sanitize(pascal(originalName) + suffix, {\n      es5keyword: true,\n      es5IdentifierName: true,\n      underscore: true,\n      dash: true,\n    }),\n    originalName,\n    refPaths,\n  };\n}\n\n/**\n * Extracts the anchor name from a fragment-only `$dynamicRef` (e.g. `#category` → `category`).\n *\n * Returns `undefined` for external-document `$dynamicRef` values (e.g. `other.json#anchor`)\n * which are not supported.\n */\nexport function getDynamicAnchorName(dynamicRef: string): string | undefined {\n  if (!dynamicRef.startsWith('#') || dynamicRef.length <= 1) {\n    return undefined;\n  }\n  return dynamicRef.slice(1);\n}\n","import type { ContextSpec, GeneratorImport, ResolverValue } from '../types';\n\ninterface GetAliasedImportsOptions {\n  name?: string;\n  resolvedValue: ResolverValue;\n  context: ContextSpec;\n}\n\nexport function getAliasedImports({\n  name,\n  resolvedValue,\n  context,\n}: GetAliasedImportsOptions): GeneratorImport[] {\n  return context.output.schemas && resolvedValue.isRef\n    ? resolvedValue.imports.map((imp) => {\n        if (\n          !needCreateImportAlias({\n            name,\n            imp,\n          })\n        ) {\n          return imp;\n        }\n\n        return {\n          ...imp,\n          alias: `__${imp.name}`,\n        };\n      })\n    : resolvedValue.imports;\n}\n\ninterface NeedCreateImportAliasOptions {\n  name?: string;\n  imp: GeneratorImport;\n}\n\nexport function needCreateImportAlias({\n  imp,\n  name,\n}: NeedCreateImportAliasOptions): boolean {\n  return !imp.alias && imp.name === name;\n}\n\ninterface GetImportAliasForRefOrValueOptions {\n  resolvedValue: ResolverValue;\n  imports: GeneratorImport[];\n  context: ContextSpec;\n}\n\nexport function getImportAliasForRefOrValue({\n  context,\n  imports,\n  resolvedValue,\n}: GetImportAliasForRefOrValueOptions): string {\n  if (!context.output.schemas || !resolvedValue.isRef) {\n    return resolvedValue.value;\n  }\n  const importWithSameName = imports.find(\n    (imp) => imp.name === resolvedValue.value,\n  );\n  return importWithSameName?.alias ?? resolvedValue.value;\n}\n","import { isNullish, unique } from 'remeda';\n\nimport { resolveExampleRefs, resolveObject } from '../resolvers';\nimport {\n  type ContextSpec,\n  EnumGeneration,\n  type GeneratorImport,\n  type GeneratorSchema,\n  type OpenApiReferenceObject,\n  type OpenApiSchemaObject,\n  type ScalarValue,\n  SchemaType,\n} from '../types';\nimport { dedupeUnionType, getNumberWord, isSchema, pascal } from '../utils';\nimport { getCombinedEnumValue } from './enum';\nimport { getAliasedImports, getImportAliasForRefOrValue } from './imports';\nimport type { FormDataContext } from './object';\nimport { getScalar } from './scalar';\n\ninterface CombinedData {\n  imports: GeneratorImport[];\n  schemas: GeneratorSchema[];\n  originalSchema: (OpenApiSchemaObject | undefined)[];\n  values: string[];\n  isRef: boolean[];\n  isEnum: boolean[];\n  types: string[];\n  hasReadonlyProps: boolean;\n  dependencies: string[];\n  /**\n   * List of all properties in all subschemas\n   * - used to add missing properties in subschemas to avoid TS error described in @see https://github.com/orval-labs/orval/issues/935\n   */\n  allProperties: string[];\n  requiredProperties: string[];\n  example?: unknown;\n  examples?: Record<string, unknown> | unknown[];\n}\n\ntype Separator = 'allOf' | 'anyOf' | 'oneOf';\nconst mergeableAllOfKeys = new Set(['type', 'properties', 'required']);\n\nfunction isMergeableAllOfObject(schema: OpenApiSchemaObject): boolean {\n  // Must have properties to be worth merging\n  if (isNullish(schema.properties)) {\n    return false;\n  }\n\n  // Cannot merge if it contains nested composition\n  if (schema.allOf || schema.anyOf || schema.oneOf) {\n    return false;\n  }\n\n  // Only object types can be merged\n  if (!isNullish(schema.type) && schema.type !== 'object') {\n    return false;\n  }\n\n  // Only merge schemas with safe keys (type, properties, required)\n  return Object.keys(schema).every((key) => mergeableAllOfKeys.has(key));\n}\n\nfunction normalizeAllOfSchema(\n  schema: OpenApiSchemaObject,\n): OpenApiSchemaObject {\n  // Bridge assertions: AnyOtherAttribute infects all schema property access\n  const schemaAllOf = schema.allOf as\n    | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n    | undefined;\n  if (!schemaAllOf) {\n    return schema;\n  }\n\n  let didMerge = false;\n  const schemaProperties = schema.properties as\n    | Record<string, OpenApiSchemaObject | OpenApiReferenceObject>\n    | undefined;\n  const schemaRequired = schema.required as string[] | undefined;\n  const mergedProperties: Record<\n    string,\n    OpenApiSchemaObject | OpenApiReferenceObject\n  > = schemaProperties ? { ...schemaProperties } : {};\n  const mergedRequired = new Set(schemaRequired);\n  const remainingAllOf: (OpenApiSchemaObject | OpenApiReferenceObject)[] = [];\n\n  for (const subSchema of schemaAllOf) {\n    if (isSchema(subSchema) && isMergeableAllOfObject(subSchema)) {\n      didMerge = true;\n      if (subSchema.properties) {\n        Object.assign(mergedProperties, subSchema.properties);\n      }\n      const subRequired = subSchema.required as string[] | undefined;\n      if (subRequired) {\n        for (const prop of subRequired) {\n          mergedRequired.add(prop);\n        }\n      }\n      continue;\n    }\n\n    remainingAllOf.push(subSchema);\n  }\n\n  if (!didMerge || remainingAllOf.length === 0) {\n    return schema;\n  }\n\n  return {\n    ...(schema as Record<string, unknown>),\n    ...(Object.keys(mergedProperties).length > 0 && {\n      properties: mergedProperties,\n    }),\n    ...(mergedRequired.size > 0 && { required: [...mergedRequired] }),\n    ...(remainingAllOf.length > 0 && { allOf: remainingAllOf }),\n  } as OpenApiSchemaObject;\n}\n\ninterface CombineValuesOptions {\n  resolvedData: CombinedData;\n  resolvedValue?: ScalarValue;\n  separator: Separator;\n  context: ContextSpec;\n  parentSchema?: OpenApiSchemaObject;\n}\n\nfunction combineValues({\n  resolvedData,\n  resolvedValue,\n  separator,\n  context,\n  parentSchema,\n}: CombineValuesOptions) {\n  const isAllEnums = resolvedData.isEnum.every(Boolean);\n\n  if (isAllEnums) {\n    return `${resolvedData.values.join(` | `)}${\n      resolvedValue ? ` | ${resolvedValue.value}` : ''\n    }`;\n  }\n\n  if (separator === 'allOf') {\n    // Wrap values containing unions in parens to preserve precedence\n    // e.g. allOf: [A, oneOf: [B, C]] should be A & (B | C), not A & B | C\n    let resolvedDataValue = resolvedData.values\n      .map((v) => (v.includes(' | ') ? `(${v})` : v))\n      .join(` & `);\n    if (resolvedData.originalSchema.length > 0 && resolvedValue) {\n      // Bridge: discriminator is typed but AnyOtherAttribute infects access\n      interface Discriminator {\n        propertyName?: string;\n        mapping?: Record<string, string>;\n      }\n      const discriminatedPropertySchemas = resolvedData.originalSchema.filter(\n        (s) => {\n          const disc = s?.discriminator as Discriminator | undefined;\n          return disc && resolvedValue.value.includes(` ${disc.propertyName}:`);\n        },\n      ) as OpenApiSchemaObject[];\n      if (discriminatedPropertySchemas.length > 0) {\n        resolvedDataValue = `Omit<${resolvedDataValue}, '${discriminatedPropertySchemas.map((s) => (s.discriminator as Discriminator | undefined)?.propertyName).join(\"' | '\")}'>`;\n      }\n    }\n    // Also wrap resolvedValue if it contains union (sibling pattern: allOf + oneOf at same level)\n    const resolvedValueStr = resolvedValue?.value.includes(' | ')\n      ? `(${resolvedValue.value})`\n      : resolvedValue?.value;\n    const joined = `${resolvedDataValue}${\n      resolvedValue ? ` & ${resolvedValueStr}` : ''\n    }`;\n\n    // Parent object may have set required properties that only exist in child\n    // objects. Make sure the resulting object has these properties as required,\n    // but there is no need to override properties that are already required\n    const overrideRequiredProperties = resolvedData.requiredProperties.filter(\n      (prop) =>\n        !resolvedData.originalSchema.some((schema) => {\n          const props = schema?.properties as\n            | Record<string, unknown>\n            | undefined;\n          const req = schema?.required as string[] | undefined;\n          return props?.[prop] && req?.includes(prop);\n        }) &&\n        !((): boolean => {\n          const parentProps = parentSchema?.properties as\n            | Record<string, unknown>\n            | undefined;\n          const parentReq = parentSchema?.required as string[] | undefined;\n          return !!(parentProps?.[prop] && parentReq?.includes(prop));\n        })(),\n    );\n    if (overrideRequiredProperties.length > 0) {\n      return `${joined} & Required<Pick<${joined}, '${overrideRequiredProperties.join(\"' | '\")}'>>`;\n    }\n    return joined;\n  }\n\n  let values = resolvedData.values;\n  const hasObjectSubschemas = resolvedData.allProperties.length;\n  if (hasObjectSubschemas && context.output.unionAddMissingProperties) {\n    values = []; // the list of values will be rebuilt to add missing properties (if exist) in subschemas\n    for (let i = 0; i < resolvedData.values.length; i += 1) {\n      const subSchema = resolvedData.originalSchema[i];\n      if (subSchema?.type !== 'object' || !subSchema.properties) {\n        values.push(resolvedData.values[i]);\n        continue;\n      }\n\n      const subSchemaProps = subSchema.properties as Record<string, unknown>;\n      const missingProperties = unique(\n        resolvedData.allProperties.filter(\n          (p) => !Object.keys(subSchemaProps).includes(p),\n        ),\n      );\n      values.push(\n        `${resolvedData.values[i]}${\n          missingProperties.length > 0\n            ? ` & {${missingProperties.map((p) => `${p}?: never`).join('; ')}}`\n            : ''\n        }`,\n      );\n    }\n  }\n\n  if (resolvedValue) {\n    return `(${values.join(` & ${resolvedValue.value}) | (`)} & ${\n      resolvedValue.value\n    })`;\n  }\n\n  return values.join(' | ');\n}\n\nexport function combineSchemas({\n  name,\n  schema,\n  separator,\n  context,\n  nullable,\n  formDataContext,\n}: {\n  name?: string;\n  schema: OpenApiSchemaObject;\n  separator: Separator;\n  context: ContextSpec;\n  nullable: string;\n  formDataContext?: FormDataContext;\n}): ScalarValue {\n  // Normalize allOf schemas by merging inline objects into parent (fixes #2458)\n  // Only applies when: using allOf, not in v7 compat mode, no sibling oneOf/anyOf\n  const canMergeInlineAllOf =\n    separator === 'allOf' &&\n    !context.output.override.aliasCombinedTypes &&\n    !schema.oneOf &&\n    !schema.anyOf;\n\n  const normalizedSchema = canMergeInlineAllOf\n    ? normalizeAllOfSchema(schema)\n    : schema;\n\n  // Bridge assertions: AnyOtherAttribute infects all schema property access\n  const items = (normalizedSchema[separator] ?? []) as (\n    | OpenApiSchemaObject\n    | OpenApiReferenceObject\n  )[];\n\n  const resolvedData: CombinedData = {\n    values: [],\n    imports: [],\n    schemas: [],\n    isEnum: [], // check if only enums\n    isRef: [],\n    types: [],\n    dependencies: [],\n    originalSchema: [],\n    allProperties: [],\n    hasReadonlyProps: false,\n    example: schema.example as unknown,\n    examples: resolveExampleRefs(\n      schema.examples as\n        | Record<string, OpenApiReferenceObject | { value?: unknown }>\n        | undefined,\n      context,\n    ),\n    requiredProperties:\n      separator === 'allOf'\n        ? ((schema.required as string[] | undefined) ?? [])\n        : [],\n  };\n  for (const subSchema of items) {\n    // aliasCombinedTypes (v7 compat): create intermediate types like ResponseAnyOf\n    // v8 default: propName stays undefined so combined types are inlined directly\n    let propName: string | undefined;\n    if (context.output.override.aliasCombinedTypes) {\n      propName = name ? name + pascal(separator) : undefined;\n      if (propName && resolvedData.schemas.length > 0) {\n        propName =\n          propName + pascal(getNumberWord(resolvedData.schemas.length + 1));\n      }\n    }\n\n    if (separator === 'allOf' && isSchema(subSchema) && subSchema.required) {\n      resolvedData.requiredProperties.push(...(subSchema.required as string[]));\n    }\n\n    const resolvedValue = resolveObject({\n      schema: subSchema,\n      propName,\n      combined: true,\n      context,\n      formDataContext,\n    });\n\n    const aliasedImports = getAliasedImports({\n      context,\n      name,\n      resolvedValue,\n    });\n\n    const value = getImportAliasForRefOrValue({\n      context,\n      resolvedValue,\n      imports: aliasedImports,\n    });\n\n    resolvedData.values.push(value);\n    resolvedData.imports.push(...aliasedImports);\n    resolvedData.schemas.push(...resolvedValue.schemas);\n    resolvedData.dependencies.push(...resolvedValue.dependencies);\n    resolvedData.isEnum.push(resolvedValue.isEnum);\n    resolvedData.types.push(resolvedValue.type);\n    resolvedData.isRef.push(resolvedValue.isRef);\n    resolvedData.originalSchema.push(resolvedValue.originalSchema);\n    if (resolvedValue.hasReadonlyProps) {\n      resolvedData.hasReadonlyProps = true;\n    }\n\n    // Bridge: originalSchema.properties is infected by AnyOtherAttribute\n    const originalProps = resolvedValue.originalSchema.properties as\n      | Record<string, unknown>\n      | undefined;\n    if (resolvedValue.type === 'object' && originalProps) {\n      resolvedData.allProperties.push(...Object.keys(originalProps));\n    }\n  }\n\n  const isAllEnums = resolvedData.isEnum.every(Boolean);\n  // OAS 3.1 spells a nullable enum as `anyOf: [{enum: [...]}, {type: 'null'}]`.\n  // Without this, the {type: 'null'} variant flips `isEnum` to false and the\n  // enum gets inlined instead of extracted as a named type — the\n  // {type: ['string','null'], enum: [...]} spelling already extracts. Treat\n  // null-only variants as transparent so the caller's `isEnum && !isRef`\n  // branch (query-params, schema-definition, resolvers/object) extracts via\n  // getEnum, whose `stripNullUnion` handling already preserves the trailing\n  // ` | null`. See issue #2710.\n  //\n  // Guards:\n  // - `allOf` semantics are intersection, not union — `allOf: [{enum}, {null}]`\n  //   does not describe a nullable enum, so restrict to `anyOf`/`oneOf`.\n  // - Non-null branches must be inline enums (`!isRef`). For `$ref + null`\n  //   the existing referenced enum should be reused; routing through\n  //   `getEnum` would emit a parallel const that nests the original ref\n  //   (e.g. `{Status: Status}`) instead of spreading or aliasing it.\n  const isUnionLikeSeparator = separator === 'anyOf' || separator === 'oneOf';\n  const isNullableEnumComposition =\n    isUnionLikeSeparator &&\n    !isAllEnums &&\n    resolvedData.isEnum.some(Boolean) &&\n    resolvedData.isEnum.every(\n      (isEnum, index) =>\n        (isEnum && !resolvedData.isRef[index]) ||\n        resolvedData.types[index] === 'null',\n    );\n  const isAvailableToGenerateCombinedEnum =\n    isAllEnums &&\n    name &&\n    items.length > 1 &&\n    context.output.override.enumGenerationType !== EnumGeneration.UNION;\n\n  // Only generate a combined const when enum values exist at runtime.\n  if (isAvailableToGenerateCombinedEnum) {\n    const {\n      value: combinedEnumValue,\n      valueImports,\n      hasNull,\n    } = getCombinedEnumValue(\n      resolvedData.values.map((value, index) => ({\n        value,\n        isRef: resolvedData.isRef[index],\n        schema: resolvedData.originalSchema[index],\n      })),\n    );\n    const newEnum = `export const ${pascal(name)} = ${combinedEnumValue}`;\n    const valueImportSet = new Set(valueImports);\n    const enumNullSuffix =\n      hasNull && !nullable.includes('null') ? ' | null' : '';\n    const typeSuffix = `${nullable}${enumNullSuffix}`;\n\n    return {\n      value: `typeof ${pascal(name)}[keyof typeof ${pascal(name)}]${typeSuffix}`,\n      imports: [\n        {\n          name: pascal(name),\n        },\n      ],\n      schemas: [\n        ...resolvedData.schemas,\n        {\n          imports: resolvedData.imports\n            .filter((toImport) =>\n              valueImportSet.has(toImport.alias ?? toImport.name),\n            )\n            .map<GeneratorImport>((toImport) => ({\n              ...toImport,\n              values: true,\n            })),\n          model: newEnum,\n          name: name,\n        },\n      ],\n      isEnum: false,\n      type: 'object' as SchemaType,\n      isRef: false,\n      hasReadonlyProps: resolvedData.hasReadonlyProps,\n      dependencies: resolvedData.dependencies,\n      example: schema.example as unknown,\n      examples: resolveExampleRefs(\n        schema.examples as\n          | Record<string, OpenApiReferenceObject | { value?: unknown }>\n          | undefined,\n        context,\n      ),\n    };\n  }\n\n  let resolvedValue: ScalarValue | undefined;\n\n  const normalizedProperties = normalizedSchema.properties as\n    | Record<string, OpenApiSchemaObject | OpenApiReferenceObject>\n    | undefined;\n  const schemaOneOf = schema.oneOf as\n    | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n    | undefined;\n  const schemaAnyOf = schema.anyOf as\n    | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n    | undefined;\n\n  if (normalizedProperties) {\n    resolvedValue = getScalar({\n      item: Object.fromEntries(\n        Object.entries(normalizedSchema).filter(([key]) => key !== separator),\n      ),\n      name,\n      context,\n      formDataContext,\n    });\n  } else if (separator === 'allOf' && (schemaOneOf || schemaAnyOf)) {\n    // Handle sibling pattern: allOf + oneOf/anyOf at same level\n    // e.g. { allOf: [A], oneOf: [B, C] } should produce A & (B | C)\n    const siblingCombiner = schemaOneOf ? 'oneOf' : 'anyOf';\n    const siblingSchemas = schemaOneOf ?? schemaAnyOf;\n    resolvedValue = combineSchemas({\n      schema: { [siblingCombiner]: siblingSchemas },\n      name,\n      separator: siblingCombiner,\n      context,\n      nullable: '',\n    });\n  }\n\n  const value = combineValues({\n    resolvedData,\n    separator,\n    resolvedValue,\n    context,\n    parentSchema: normalizedSchema,\n  });\n\n  return {\n    value: dedupeUnionType(value + nullable),\n    imports: resolvedValue\n      ? [...resolvedData.imports, ...resolvedValue.imports]\n      : resolvedData.imports,\n    schemas: resolvedValue\n      ? [...resolvedData.schemas, ...resolvedValue.schemas]\n      : resolvedData.schemas,\n    dependencies: resolvedValue\n      ? [...resolvedData.dependencies, ...resolvedValue.dependencies]\n      : resolvedData.dependencies,\n    isEnum: isNullableEnumComposition,\n    type: 'object' as SchemaType,\n    isRef: false,\n    hasReadonlyProps:\n      resolvedData.hasReadonlyProps ||\n      (resolvedValue?.hasReadonlyProps ?? false),\n    example: schema.example as unknown,\n    examples: resolveExampleRefs(\n      schema.examples as\n        | Record<string, OpenApiReferenceObject | { value?: unknown }>\n        | undefined,\n      context,\n    ),\n  };\n}\n","import { keyword } from 'esutils';\n\nexport function getKey(key: string) {\n  return keyword.isIdentifierNameES5(key) ? key : `'${key}'`;\n}\n","import { resolveExampleRefs, resolveValue } from '../resolvers';\nimport { resolveObject } from '../resolvers/object';\nimport {\n  type ContextSpec,\n  type GeneratorImport,\n  type OpenApiReferenceObject,\n  type OpenApiSchemaObject,\n  PropertySortOrder,\n  type ScalarValue,\n  SchemaType,\n} from '../types';\nimport {\n  isReference,\n  isString,\n  jsDoc,\n  jsStringLiteralEscape,\n  pascal,\n} from '../utils';\nimport { combineSchemas } from './combine';\nimport { getAliasedImports, getImportAliasForRefOrValue } from './imports';\nimport { getKey } from './keys';\nimport { getRefInfo } from './ref';\n\ninterface PropertyNamesKeyType {\n  value: string;\n  imports: GeneratorImport[];\n  dependencies: string[];\n}\n\nfunction getPropertyNamesEnumKeyType(\n  item: OpenApiSchemaObject,\n): PropertyNamesKeyType | undefined {\n  if (!('propertyNames' in item) || !item.propertyNames) {\n    return undefined;\n  }\n\n  const propertyNames = item.propertyNames as {\n    enum?: unknown[];\n    const?: unknown;\n  };\n\n  if (Array.isArray(propertyNames.enum)) {\n    const enumValues = propertyNames.enum.filter((val): val is string =>\n      isString(val),\n    );\n\n    if (enumValues.length > 0) {\n      return {\n        value: enumValues\n          .map((val) => `'${jsStringLiteralEscape(val)}'`)\n          .join(' | '),\n        imports: [],\n        dependencies: [],\n      };\n    }\n  }\n\n  if (isString(propertyNames.const)) {\n    return {\n      value: `'${jsStringLiteralEscape(propertyNames.const)}'`,\n      imports: [],\n      dependencies: [],\n    };\n  }\n\n  return undefined;\n}\n\n/**\n * Resolve a narrowed key type from OpenAPI 3.1 propertyNames.\n * Supports inline enum/const and $ref string enums.\n */\nfunction getPropertyNamesKeyType(\n  item: OpenApiSchemaObject,\n  context: ContextSpec,\n): PropertyNamesKeyType | undefined {\n  const inlineKeyType = getPropertyNamesEnumKeyType(item);\n  if (inlineKeyType) {\n    return inlineKeyType;\n  }\n\n  const propertyNames = item.propertyNames as\n    | OpenApiSchemaObject\n    | OpenApiReferenceObject\n    | undefined;\n  if (!propertyNames || !isReference(propertyNames)) {\n    return undefined;\n  }\n\n  const resolvedValue = resolveValue({\n    schema: propertyNames,\n    context,\n  });\n\n  const resolvedConst = resolvedValue.originalSchema.const as unknown;\n  const isStringConst =\n    resolvedValue.type === 'string' && isString(resolvedConst);\n\n  if (!resolvedValue.isEnum && !isStringConst) {\n    return undefined;\n  }\n\n  return {\n    value: resolvedValue.value,\n    imports: resolvedValue.imports,\n    dependencies: resolvedValue.dependencies,\n  };\n}\n\n/**\n * Generate index signature key type based on propertyNames enum or const\n * Returns union type string like \"'foo' | 'bar'\", \"'x'\", or 'string' if neither\n */\nfunction getIndexSignatureKey(item: OpenApiSchemaObject): string {\n  return getPropertyNamesEnumKeyType(item)?.value ?? 'string';\n}\n\nfunction getPropertyNamesRecordType(\n  item: OpenApiSchemaObject,\n  valueType: string,\n  context: ContextSpec,\n): (PropertyNamesKeyType & { value: string }) | undefined {\n  const keyType = getPropertyNamesKeyType(item, context);\n  if (!keyType) {\n    return undefined;\n  }\n\n  return {\n    ...keyType,\n    value: `Partial<Record<${keyType.value}, ${valueType}>>`,\n  };\n}\n\n/**\n * Context for form request body (multipart/form-data and\n * application/x-www-form-urlencoded) type generation.\n * Discriminated union with two states:\n *\n * 1. `{ atPart: false, encoding }` - At form root, before property iteration\n *    - May traverse through allOf/anyOf/oneOf to reach properties\n *    - Carries encoding map so getObject can look up `encoding[key]`\n *\n * 2. `{ atPart: true, partContentType }` - At a multipart part (top-level property)\n *    - `partContentType` = Encoding Object's `contentType` for this part\n *    - Used by getScalar for file type detection (precedence over contentMediaType)\n *    - Arrays pass this through to items; combiners inside arrays also get context\n *\n * `urlEncoded` marks an application/x-www-form-urlencoded body. Such bodies are\n * built with URLSearchParams, whose values are always strings, so getScalar\n * keeps file/binary fields as `string` instead of `Blob` (#1624).\n *\n * `undefined` means not in form context (or nested inside plain object field = JSON)\n */\nexport type FormDataContext =\n  | {\n      atPart: false;\n      encoding: Record<string, { contentType?: string }>;\n      urlEncoded?: boolean;\n    }\n  | { atPart: true; partContentType?: string; urlEncoded?: boolean };\n\ninterface GetObjectOptions {\n  item: OpenApiSchemaObject;\n  name?: string;\n  context: ContextSpec;\n  nullable: string;\n  /**\n   * Multipart/form-data context for file type handling.\n   * @see FormDataContext\n   */\n  formDataContext?: FormDataContext;\n}\n\n/**\n * Return the output type from an object\n *\n * @param item item with type === \"object\"\n */\nexport function getObject({\n  item,\n  name,\n  context,\n  nullable,\n  formDataContext,\n}: GetObjectOptions): ScalarValue {\n  if (isReference(item)) {\n    const { name } = getRefInfo(item.$ref as string, context);\n    return {\n      value: name + nullable,\n      imports: [{ name }],\n      schemas: [],\n      isEnum: false,\n      type: 'object',\n      isRef: true,\n      hasReadonlyProps: (item.readOnly as boolean | undefined) ?? false,\n      dependencies: [name],\n      example: item.example as unknown,\n      examples: resolveExampleRefs(\n        item.examples as\n          | Record<string, OpenApiReferenceObject | { value?: unknown }>\n          | undefined,\n        context,\n      ),\n    };\n  }\n\n  const schemaItem = item as OpenApiSchemaObject & Record<string, unknown>;\n  const itemAllOf = schemaItem.allOf as\n    | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n    | undefined;\n  const itemOneOf = schemaItem.oneOf as\n    | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n    | undefined;\n  const itemAnyOf = schemaItem.anyOf as\n    | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n    | undefined;\n  const itemType = schemaItem.type as string | string[] | undefined;\n\n  if (itemAllOf || itemOneOf || itemAnyOf) {\n    const separator = itemAllOf ? 'allOf' : itemOneOf ? 'oneOf' : 'anyOf';\n\n    // A nullable object spelled as the explicit OAS 3.1 composition\n    // `anyOf|oneOf: [{ inline object with properties }, { type: 'null' }]` must\n    // keep its `name` so nested enum properties are extracted into named\n    // `as const` consts. Routing it through combineSchemas resolves the object\n    // member with `combined: true` and an undefined propName, which drops the\n    // name and inlines those enums. Divert the single object member to the\n    // property-iteration path instead — the same fix #3340 applied one level\n    // down for the `type: ['object', 'null']` shape. See issue #3563.\n    // Real unions, `$ref` object members, primitive members, and empty objects\n    // keep the combineSchemas behavior via the guard below.\n    //\n    // Read members from the active `separator` (not `itemAnyOf ?? itemOneOf`)\n    // so this check and the combineSchemas fallback below operate on the same\n    // composition. `allOf` is intersection, not a nullable union, so it yields\n    // no members here and always falls through to combineSchemas.\n    const members =\n      separator === 'anyOf'\n        ? itemAnyOf\n        : separator === 'oneOf'\n          ? itemOneOf\n          : undefined;\n    if (members) {\n      const isNullMember = (\n        member: OpenApiSchemaObject | OpenApiReferenceObject,\n      ): boolean => {\n        if (isReference(member)) {\n          return false;\n        }\n        const memberType = member.type as string | string[] | undefined;\n        return (\n          memberType === 'null' ||\n          (Array.isArray(memberType) &&\n            memberType.length === 1 &&\n            memberType[0] === 'null')\n        );\n      };\n\n      const nonNullMembers = members.filter((member) => !isNullMember(member));\n      const nonNullMember = nonNullMembers[0];\n      // Bridge assertion: AnyOtherAttribute infects member property access to\n      // `any`; cast to the documented shapes after excluding `$ref` members.\n      const nonNullMemberType =\n        nonNullMember && !isReference(nonNullMember)\n          ? (nonNullMember.type as string | string[] | undefined)\n          : undefined;\n      const nonNullMemberProperties =\n        nonNullMember && !isReference(nonNullMember)\n          ? (nonNullMember.properties as\n              | Record<string, OpenApiSchemaObject | OpenApiReferenceObject>\n              | undefined)\n          : undefined;\n\n      const isNullableObjectComposition =\n        members.some(isNullMember) &&\n        nonNullMembers.length === 1 &&\n        nonNullMember != null &&\n        !isReference(nonNullMember) &&\n        (nonNullMemberType === 'object' ||\n          (nonNullMemberType == null && nonNullMemberProperties != null)) &&\n        nonNullMemberProperties != null &&\n        Object.keys(nonNullMemberProperties).length > 0;\n\n      if (isNullableObjectComposition) {\n        // `nullable` is empty for the composition form (the null lives in a\n        // member, not on the parent), so synthesize ` | null`; the\n        // property-iteration path appends it to the rendered object.\n        return getObject({\n          item: nonNullMember as OpenApiSchemaObject,\n          name,\n          context,\n          nullable: nullable || ' | null',\n          formDataContext,\n        });\n      }\n    }\n\n    return combineSchemas({\n      schema: schemaItem,\n      name,\n      separator,\n      context,\n      nullable,\n      formDataContext,\n    });\n  }\n\n  if (Array.isArray(itemType)) {\n    const typeArray = itemType;\n    // A nullable object (`type: ['object', 'null']`, e.g. OAS 3.0 `nullable: true`\n    // after the @scalar upgrade) must stay on the object property-iteration path\n    // below so its `name` is preserved and nested enum properties keep being\n    // extracted into named consts. Routing it through combineSchemas resolves the\n    // object variant with an undefined propName, which drops the name and inlines\n    // those enums instead. See issue #3340. Real unions (e.g. `['string', 'number']`)\n    // keep the combineSchemas path.\n    const nonNullTypes = typeArray.filter((type) => type !== 'null');\n    // Bridge assertion: AnyOtherAttribute infects `properties` to `any`; cast to\n    // the documented property-map shape, matching the itemProperties cast below.\n    const typeArrayProperties = schemaItem.properties as\n      | Record<string, OpenApiSchemaObject | OpenApiReferenceObject>\n      | undefined;\n    // Only divert when there are properties to walk — an empty nullable object\n    // has no nested enums to extract, and routing it through the property path\n    // would render it as `unknown` instead of `{ [key: string]: unknown }`.\n    const isNullableObject =\n      nonNullTypes.length === 1 &&\n      nonNullTypes[0] === 'object' &&\n      typeArrayProperties != null &&\n      Object.keys(typeArrayProperties).length > 0;\n\n    if (!isNullableObject) {\n      // Bridge: item is OpenApiSchemaObject which includes AnyOtherAttribute index signature.\n      // Spreading it directly would carry `any` into the result. Cast to break the chain.\n      const baseItem = schemaItem as Record<string, unknown>;\n      return combineSchemas({\n        schema: {\n          anyOf: typeArray.map(\n            (type) => ({ ...baseItem, type }) as OpenApiSchemaObject,\n          ),\n        },\n        name,\n        separator: 'anyOf',\n        context,\n        nullable,\n      });\n    }\n    // Fall through to the property-iteration path; `nullable` already carries\n    // the ` | null` computed by getScalar for this type array.\n  }\n\n  // Bridge assertion: item.properties is typed as { [name: string]: ReferenceObject | SchemaObject }\n  // but AnyOtherAttribute index signature infects all property access to return `any`\n  const itemProperties = schemaItem.properties as\n    | Record<string, OpenApiSchemaObject | OpenApiReferenceObject>\n    | undefined;\n\n  if (itemProperties && Object.entries(itemProperties).length > 0) {\n    const entries = Object.entries(itemProperties);\n    if (context.output.propertySortOrder === PropertySortOrder.ALPHABETICAL) {\n      entries.sort((a, b) => {\n        return a[0].localeCompare(b[0], 'en', {\n          numeric: true,\n        });\n      });\n    }\n    const acc: ScalarValue = {\n      imports: [],\n      schemas: [],\n      value: '',\n      isEnum: false,\n      type: 'object' as SchemaType,\n      isRef: false,\n      hasReadonlyProps: false,\n      useTypeAlias: false,\n      dependencies: [],\n      example: schemaItem.example as unknown,\n      examples: resolveExampleRefs(\n        schemaItem.examples as\n          | Record<string, OpenApiReferenceObject | { value?: unknown }>\n          | undefined,\n        context,\n      ),\n    };\n    const itemRequired = schemaItem.required as string[] | undefined;\n    for (const [index, [key, schema]] of entries.entries()) {\n      const isRequired = (\n        Array.isArray(itemRequired) ? itemRequired : []\n      ).includes(key);\n\n      let propName = '';\n\n      if (name) {\n        const isKeyStartWithUnderscore = key.startsWith('_');\n\n        propName += pascal(\n          `${isKeyStartWithUnderscore ? '_' : ''}${name}_${key}`,\n        );\n      }\n\n      const allSpecSchemas = context.spec.components?.schemas ?? {};\n\n      const isNameAlreadyTaken = Object.keys(allSpecSchemas).some(\n        (schemaName) => pascal(schemaName) === propName,\n      );\n\n      if (isNameAlreadyTaken) {\n        propName = propName + 'Property';\n      }\n\n      // Transition form context: atPart: false → atPart: true\n      // Look up encoding[key].contentType and pass to property resolution.\n      // The urlEncoded flag is carried through so nested scalars stay strings.\n      const propertyFormDataContext: FormDataContext | undefined =\n        formDataContext && !formDataContext.atPart\n          ? {\n              atPart: true,\n              partContentType: formDataContext.encoding[key]?.contentType, // eslint-disable-line @typescript-eslint/no-unnecessary-condition -- Record index access can return undefined at runtime\n              urlEncoded: formDataContext.urlEncoded,\n            }\n          : undefined;\n\n      const resolvedValue = resolveObject({\n        schema,\n        propName,\n        context,\n        formDataContext: propertyFormDataContext,\n      });\n\n      const isReadOnly =\n        Boolean(schemaItem.readOnly) ||\n        Boolean((schema as OpenApiSchemaObject).readOnly);\n      if (!index) {\n        acc.value += '{';\n      }\n\n      const doc = jsDoc(schema, true, context);\n      const propertyDoc = doc\n        ? `${doc\n            .trimEnd()\n            .split('\\n')\n            .map((line) => `  ${line}`)\n            .join('\\n')}\\n`\n        : '';\n\n      // Propagate readonly state from nested schemas ($ref targets or inline\n      // objects), not just this property's own readOnly flag. Otherwise an\n      // object whose readonly props come solely from nested schemas is never\n      // wrapped in `NonReadonly<>`, leaking the readonly modifier into request\n      // body types. See issue #826.\n      if (isReadOnly || resolvedValue.hasReadonlyProps) {\n        acc.hasReadonlyProps = true;\n      }\n\n      const constValue =\n        'const' in schema ? (schema.const as unknown) : undefined;\n      const hasConst = constValue !== undefined;\n      let constLiteral: string | undefined;\n\n      if (!hasConst) {\n        constLiteral = undefined;\n      } else if (isString(constValue)) {\n        constLiteral = `'${jsStringLiteralEscape(constValue)}'`;\n      } else {\n        constLiteral = JSON.stringify(constValue);\n      }\n\n      const needsValueImport =\n        hasConst && (resolvedValue.isEnum || resolvedValue.type === 'enum');\n      const usedResolvedValue = !hasConst || needsValueImport;\n\n      const aliasedImports: GeneratorImport[] = needsValueImport\n        ? resolvedValue.imports.map((imp) => ({ ...imp, isConstant: true }))\n        : hasConst\n          ? []\n          : getAliasedImports({ name, context, resolvedValue });\n\n      if (aliasedImports.length > 0) {\n        acc.imports.push(...aliasedImports);\n      }\n\n      const alias = getImportAliasForRefOrValue({\n        context,\n        resolvedValue,\n        imports: aliasedImports,\n      });\n\n      const propValue = needsValueImport ? alias : (constLiteral ?? alias);\n\n      const finalPropValue = isRequired\n        ? propValue\n        : context.output.override.useNullForOptional === true\n          ? `${propValue} | null`\n          : propValue;\n\n      acc.value += `\\n${propertyDoc}${\n        isReadOnly && !context.output.override.suppressReadonlyModifier\n          ? '  readonly '\n          : '  '\n      }${getKey(key)}${isRequired ? '' : '?'}: ${finalPropValue};`;\n      if (usedResolvedValue) {\n        acc.schemas.push(...resolvedValue.schemas);\n        acc.dependencies.push(...resolvedValue.dependencies);\n      }\n\n      if (entries.length - 1 === index) {\n        // Bridge assertion: additionalProperties is boolean | ReferenceObject | SchemaObject\n        // but AnyOtherAttribute infects property access\n        const additionalProps = schemaItem.additionalProperties as\n          | boolean\n          | OpenApiSchemaObject\n          | OpenApiReferenceObject\n          | undefined;\n        if (additionalProps) {\n          if (additionalProps === true) {\n            const recordType = getPropertyNamesRecordType(\n              schemaItem,\n              'unknown',\n              context,\n            );\n            if (recordType) {\n              acc.value += '\\n}';\n              acc.value += ` & ${recordType.value}`;\n              acc.useTypeAlias = true;\n              acc.imports.push(...recordType.imports);\n              acc.dependencies.push(...recordType.dependencies);\n            } else {\n              const keyType = getIndexSignatureKey(schemaItem);\n              acc.value += `\\n  [key: ${keyType}]: unknown;\\n }`;\n            }\n          } else {\n            const resolvedValue = resolveValue({\n              schema: additionalProps as\n                | OpenApiSchemaObject\n                | OpenApiReferenceObject,\n              name,\n              context,\n            });\n            const recordType = getPropertyNamesRecordType(\n              schemaItem,\n              resolvedValue.value,\n              context,\n            );\n            if (recordType) {\n              // `propertyNames` constrains the keys to a literal union, so this\n              // emits `Partial<Record<'a' | 'b', T>>` — specific optional keys,\n              // not a string index signature. Named properties never collide\n              // with it, so keep the precise additionalProperties value type.\n              acc.value += '\\n}';\n              acc.value += ` & ${recordType.value}`;\n              acc.useTypeAlias = true;\n              acc.imports.push(...recordType.imports);\n              acc.dependencies.push(...recordType.dependencies);\n              acc.imports.push(...resolvedValue.imports);\n              acc.schemas.push(...resolvedValue.schemas);\n              acc.dependencies.push(...resolvedValue.dependencies);\n            } else {\n              // A bare `[key: string]: T` index signature also covers the named\n              // keys, so any named property whose type differs from T makes the\n              // object unrepresentable (TS2411) — or unconstructable if T is\n              // pushed into an intersection, since the index still constrains\n              // the named keys. Fall back to `unknown`, matching\n              // `additionalProperties: true`, so the generated type stays valid\n              // and assignable regardless of the named property types. The\n              // additionalProperties value type (and its imports) is dropped\n              // here, so it is intentionally not pushed. See issues #3321 / #3255.\n              const keyType = getIndexSignatureKey(schemaItem);\n              acc.value += `\\n  [key: ${keyType}]: unknown;\\n}`;\n            }\n          }\n        } else {\n          acc.value += '\\n}';\n        }\n\n        acc.value += nullable;\n      }\n    }\n    return acc;\n  }\n\n  // Bridge assertion: additionalProperties is boolean | ReferenceObject | SchemaObject\n  const outerAdditionalProps = schemaItem.additionalProperties as\n    | boolean\n    | OpenApiSchemaObject\n    | OpenApiReferenceObject\n    | undefined;\n  const readOnlyFlag = schemaItem.readOnly as boolean | undefined;\n  if (outerAdditionalProps) {\n    if (outerAdditionalProps === true) {\n      const recordType = getPropertyNamesRecordType(\n        schemaItem,\n        'unknown',\n        context,\n      );\n      if (recordType) {\n        return {\n          value: recordType.value + nullable,\n          imports: recordType.imports,\n          schemas: [],\n          isEnum: false,\n          type: 'object',\n          isRef: false,\n          hasReadonlyProps: readOnlyFlag ?? false,\n          useTypeAlias: true,\n          dependencies: recordType.dependencies,\n        };\n      }\n      const keyType = getIndexSignatureKey(schemaItem);\n      return {\n        value: `{ [key: ${keyType}]: unknown }` + nullable,\n        imports: [],\n        schemas: [],\n        isEnum: false,\n        type: 'object',\n        isRef: false,\n        hasReadonlyProps: readOnlyFlag ?? false,\n        useTypeAlias: false,\n        dependencies: [],\n      };\n    }\n    const resolvedValue = resolveValue({\n      schema: outerAdditionalProps as\n        | OpenApiSchemaObject\n        | OpenApiReferenceObject,\n      name,\n      context,\n    });\n    const recordType = getPropertyNamesRecordType(\n      schemaItem,\n      resolvedValue.value,\n      context,\n    );\n    if (recordType) {\n      return {\n        value: recordType.value + nullable,\n        imports: [...recordType.imports, ...resolvedValue.imports],\n        schemas: resolvedValue.schemas,\n        isEnum: false,\n        type: 'object',\n        isRef: false,\n        hasReadonlyProps: resolvedValue.hasReadonlyProps,\n        useTypeAlias: true,\n        dependencies: [\n          ...recordType.dependencies,\n          ...resolvedValue.dependencies,\n        ],\n      };\n    }\n    const keyType = getIndexSignatureKey(schemaItem);\n    return {\n      value: `{[key: ${keyType}]: ${resolvedValue.value}}` + nullable,\n      imports: resolvedValue.imports,\n      schemas: resolvedValue.schemas,\n      isEnum: false,\n      type: 'object',\n      isRef: false,\n      hasReadonlyProps: resolvedValue.hasReadonlyProps,\n      useTypeAlias: false,\n      dependencies: resolvedValue.dependencies,\n    };\n  }\n\n  const constValue = schemaItem.const as unknown;\n  if (constValue !== undefined) {\n    let type: SchemaType;\n    if (Array.isArray(constValue)) {\n      type = 'array';\n    } else if (constValue === null) {\n      type = 'null';\n    } else if (typeof constValue === 'string') {\n      type = 'string';\n    } else if (typeof constValue === 'number') {\n      type = 'number';\n    } else if (typeof constValue === 'boolean') {\n      type = 'boolean';\n    } else {\n      type = 'object';\n    }\n\n    return {\n      value:\n        typeof constValue === 'string'\n          ? `'${jsStringLiteralEscape(constValue)}'`\n          : JSON.stringify(constValue),\n      imports: [],\n      schemas: [],\n      isEnum: false,\n      type,\n      isRef: false,\n      hasReadonlyProps: readOnlyFlag ?? false,\n      dependencies: [],\n    };\n  }\n\n  const keyType =\n    itemType === 'object' ? getIndexSignatureKey(schemaItem) : 'string';\n  const recordType = getPropertyNamesRecordType(schemaItem, 'unknown', context);\n  if (itemType === 'object' && recordType) {\n    return {\n      value: recordType.value + nullable,\n      imports: recordType.imports,\n      schemas: [],\n      isEnum: false,\n      type: 'object',\n      isRef: false,\n      hasReadonlyProps: readOnlyFlag ?? false,\n      useTypeAlias: true,\n      dependencies: recordType.dependencies,\n    };\n  }\n  return {\n    value:\n      (itemType === 'object' ? `{ [key: ${keyType}]: unknown }` : 'unknown') +\n      nullable,\n    imports: [],\n    schemas: [],\n    isEnum: false,\n    type: 'object',\n    isRef: false,\n    hasReadonlyProps: readOnlyFlag ?? false,\n    useTypeAlias: false,\n    dependencies: [],\n  };\n}\n","import { isArray } from 'remeda';\n\nimport { resolveExampleRefs } from '../resolvers';\nimport type {\n  ContextSpec,\n  OpenApiSchemaObject,\n  OpenApiSchemaObjectType,\n  ScalarValue,\n} from '../types';\nimport { isString, jsStringLiteralEscape } from '../utils';\nimport { getFormDataFieldFileType } from '../utils/content-type';\nimport { getArray } from './array';\nimport { combineSchemas } from './combine';\nimport type { FormDataContext } from './object';\nimport { getObject } from './object';\n\n/** Bridge type for enum values extracted from OpenAPI schemas infected by AnyOtherAttribute */\ntype SchemaEnumValue = string | number | boolean | null;\n\n/**\n * Returns true when a schema describes a raw binary string scalar — i.e. one\n * that getScalar's `case 'string':` branch would coerce to `Blob` outside a\n * url-encoded context (see the formDataContext.urlEncoded gate below). Shared\n * with resolveValue so the component-`$ref` urlEncoded short-circuit and the\n * inline scalar path stay in lockstep when new binary shapes are added\n * (#1624 / #3395 / #2410).\n *\n * Accepts OAS 3.1 nullable unions (`type: ['string', 'null']`) since getScalar\n * normalizes those into `case 'string':` before invoking this predicate.\n */\nexport function isBinaryScalarSchema(schema: OpenApiSchemaObject): boolean {\n  const schemaType = schema.type as\n    | OpenApiSchemaObjectType\n    | OpenApiSchemaObjectType[]\n    | undefined;\n  const isStringLike =\n    schemaType === 'string' ||\n    (isArray(schemaType) &&\n      schemaType.includes('string') &&\n      schemaType.every((type) => type === 'string' || type === 'null'));\n  if (!isStringLike) {\n    return false;\n  }\n  if (schema.format === 'binary') {\n    return true;\n  }\n  // The @scalar/openapi-parser upgrader rewrites format: binary to\n  // contentMediaType: application/octet-stream during Swagger 2.0 / OAS 3.0 →\n  // OAS 3.1 upgrades; treat the upgraded shape the same. A non-empty\n  // contentEncoding signals an encoded string payload (e.g. base64), not raw\n  // binary.\n  const contentMediaType = schema.contentMediaType as string | undefined;\n  const contentEncoding = schema.contentEncoding as string | undefined;\n  return contentMediaType === 'application/octet-stream' && !contentEncoding;\n}\n\ninterface GetScalarOptions {\n  item: OpenApiSchemaObject;\n  name?: string;\n  context: ContextSpec;\n  formDataContext?: FormDataContext;\n}\n\n/**\n * Return the typescript equivalent of open-api data type\n *\n * @param item\n * @ref https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.1.md#data-types\n */\nexport function getScalar({\n  item,\n  name,\n  context,\n  formDataContext,\n}: GetScalarOptions): ScalarValue {\n  // Bridge assertions: extract typed values from AnyOtherAttribute-infected schema\n  const schemaEnum = item.enum as SchemaEnumValue[] | undefined;\n  const schemaType = item.type as\n    | OpenApiSchemaObjectType\n    | OpenApiSchemaObjectType[]\n    | undefined;\n  const schemaReadOnly = item.readOnly as boolean | undefined;\n  const schemaExample = item.example as unknown;\n  const schemaExamples = item.examples as Parameters<\n    typeof resolveExampleRefs\n  >[0];\n  const schemaConst = item.const as string | undefined;\n  const schemaFormat = item.format as string | undefined;\n  const schemaNullable = item.nullable as boolean | undefined;\n\n  const nullable =\n    (isArray(schemaType) && schemaType.includes('null')) ||\n    schemaNullable === true\n      ? ' | null'\n      : '';\n\n  const enumItems = schemaEnum?.filter(\n    (enumItem): enumItem is Exclude<SchemaEnumValue, null> => enumItem !== null,\n  );\n\n  let itemType:\n    | OpenApiSchemaObjectType\n    | OpenApiSchemaObjectType[]\n    | undefined = schemaType;\n  if (!itemType && item.items) {\n    item.type = 'array';\n    itemType = 'array';\n  }\n  if (isArray(schemaType) && schemaType.includes('null')) {\n    const typesWithoutNull = schemaType.filter(\n      (x): x is OpenApiSchemaObjectType => x !== 'null',\n    );\n    itemType =\n      typesWithoutNull.length === 1 ? typesWithoutNull[0] : typesWithoutNull;\n  }\n\n  switch (itemType) {\n    case 'number':\n    case 'integer': {\n      let value =\n        context.output.override.useBigInt &&\n        (schemaFormat === 'int64' || schemaFormat === 'uint64')\n          ? 'bigint'\n          : 'number';\n      let isEnum = false;\n\n      if (enumItems) {\n        value = enumItems.map((enumItem) => `${enumItem}`).join(' | ');\n        isEnum = true;\n      }\n\n      value += nullable;\n\n      if (schemaConst !== undefined) {\n        value = schemaConst;\n      }\n\n      return {\n        value,\n        isEnum,\n        type: 'number',\n        schemas: [],\n        imports: [],\n        isRef: false,\n        hasReadonlyProps: schemaReadOnly ?? false,\n        dependencies: [],\n        example: schemaExample,\n        examples: resolveExampleRefs(schemaExamples, context),\n      };\n    }\n\n    case 'boolean': {\n      let value = 'boolean';\n\n      if (\n        enumItems &&\n        !(enumItems.includes(true) && enumItems.includes(false))\n      ) {\n        value = enumItems.map((enumItem) => `${enumItem}`).join(' | ');\n      }\n\n      value += nullable;\n\n      if (schemaConst !== undefined) {\n        value = schemaConst;\n      }\n\n      return {\n        value: value,\n        type: 'boolean',\n        isEnum: false,\n        schemas: [],\n        imports: [],\n        isRef: false,\n        hasReadonlyProps: schemaReadOnly ?? false,\n        dependencies: [],\n        example: schemaExample,\n        examples: resolveExampleRefs(schemaExamples, context),\n      };\n    }\n\n    case 'array': {\n      const { value, ...rest } = getArray({\n        schema: item,\n        name,\n        context,\n        formDataContext,\n      });\n      return {\n        value: value + nullable,\n        ...rest,\n        dependencies: rest.dependencies,\n      };\n    }\n\n    case 'string': {\n      let value = 'string';\n      let isEnum = false;\n\n      if (enumItems) {\n        value = enumItems\n          .map((enumItem) =>\n            isString(enumItem)\n              ? `'${jsStringLiteralEscape(enumItem)}'`\n              : `${enumItem}`,\n          )\n          .filter(Boolean)\n          .join(` | `);\n\n        isEnum = true;\n      }\n\n      // application/x-www-form-urlencoded bodies are built with URLSearchParams,\n      // whose values are always strings. Skip Blob/file coercion so file/binary\n      // fields stay `string`; enum unions computed above are left intact (#1624).\n      if (!formDataContext?.urlEncoded) {\n        if (schemaFormat === 'binary') {\n          value = 'Blob';\n        } else if (formDataContext?.atPart) {\n          const fileType = getFormDataFieldFileType(\n            item,\n            formDataContext.partContentType,\n          );\n          if (fileType) {\n            value = fileType === 'binary' ? 'Blob' : 'Blob | string';\n          }\n        } else if (isBinaryScalarSchema(item)) {\n          // The previous arm caught format: binary directly; this matches the\n          // OAS 3.1 contentMediaType: application/octet-stream variant via the\n          // shared predicate so any future binary shapes added there flow\n          // through here too (#2410).\n          value = 'Blob';\n        }\n      }\n\n      if (\n        context.output.override.useDates &&\n        (schemaFormat === 'date' || schemaFormat === 'date-time')\n      ) {\n        value = 'Date';\n      }\n\n      value += nullable;\n\n      if (schemaConst) {\n        value = `'${jsStringLiteralEscape(schemaConst)}'`;\n      }\n\n      return {\n        value: value,\n        isEnum,\n        type: 'string',\n        imports: [],\n        schemas: [],\n        isRef: false,\n        hasReadonlyProps: schemaReadOnly ?? false,\n        dependencies: [],\n        example: schemaExample,\n        examples: resolveExampleRefs(schemaExamples, context),\n      };\n    }\n\n    case 'null': {\n      // Some OAS 3.1 generators emit a nullable composition in the\n      // non-canonical form `{ type: 'null', allOf|oneOf|anyOf: [...] }`\n      // (e.g. Swashbuckle with UseAllOfToExtendReferenceSchemas; passed\n      // through by @scalar/openapi-upgrader) rather than the canonical\n      // `{ anyOf: [...], type: 'null' }` member form. Treat the composition as\n      // the value and `null` as a union member so this yields `T | null`\n      // instead of collapsing to `null` and dropping the refs.\n      const itemAllOf = item.allOf as unknown[] | undefined;\n      const itemOneOf = item.oneOf as unknown[] | undefined;\n      const itemAnyOf = item.anyOf as unknown[] | undefined;\n      let separator: 'allOf' | 'oneOf' | 'anyOf' | undefined;\n      if (itemAllOf?.length) {\n        separator = 'allOf';\n      } else if (itemOneOf?.length) {\n        separator = 'oneOf';\n      } else if (itemAnyOf?.length) {\n        separator = 'anyOf';\n      }\n      if (separator) {\n        // Drop the consumed `type: 'null'` before delegating: its nullability\n        // is carried by `nullable` below, and leaving it on the schema makes\n        // combineSchemas' merged-properties recursion re-enter this `case` and\n        // collapse the object part back to `null`.\n        const schemaWithoutNull = Object.fromEntries(\n          Object.entries(item as Record<string, unknown>).filter(\n            ([key]) => key !== 'type',\n          ),\n        ) as OpenApiSchemaObject;\n        return combineSchemas({\n          schema: schemaWithoutNull,\n          name,\n          separator,\n          context,\n          nullable: nullable || ' | null',\n          formDataContext,\n        });\n      }\n\n      return {\n        value: 'null',\n        isEnum: false,\n        type: 'null',\n        imports: [],\n        schemas: [],\n        isRef: false,\n        hasReadonlyProps: schemaReadOnly ?? false,\n        dependencies: [],\n      };\n    }\n\n    default: {\n      if (isArray(itemType)) {\n        const anyOfVariants = itemType.map((type) =>\n          Object.assign({}, item, { type }),\n        ) as OpenApiSchemaObject[];\n        return combineSchemas({\n          schema: { anyOf: anyOfVariants } as OpenApiSchemaObject,\n          name,\n          separator: 'anyOf',\n          context,\n          nullable,\n        });\n      }\n\n      if (enumItems) {\n        const value = enumItems\n          .map((enumItem) =>\n            isString(enumItem)\n              ? `'${jsStringLiteralEscape(enumItem)}'`\n              : String(enumItem),\n          )\n          .filter(Boolean)\n          .join(` | `);\n\n        return {\n          value: value + nullable,\n          isEnum: true,\n          type: 'string',\n          imports: [],\n          schemas: [],\n          isRef: false,\n          hasReadonlyProps: schemaReadOnly ?? false,\n          dependencies: [],\n          example: schemaExample,\n          examples: resolveExampleRefs(schemaExamples, context),\n        };\n      }\n\n      // Determine if we should pass form-data context:\n      // - atPart: false -> always pass (navigating to properties)\n      // - atPart: true + combiner -> pass (combiner members are still the same part)\n      // - atPart: true + plain object -> don't pass (nested properties are JSON)\n      const hasCombiners = (item.allOf ?? item.anyOf ?? item.oneOf) as\n        | unknown[]\n        | undefined;\n      const shouldPassContext =\n        formDataContext?.atPart === false ||\n        (formDataContext?.atPart && hasCombiners);\n\n      const { value, ...rest } = getObject({\n        item,\n        name,\n        context,\n        nullable,\n        formDataContext: shouldPassContext ? formDataContext : undefined,\n      });\n      return { value: value, ...rest };\n    }\n  }\n}\n","import { isDereferenced } from '@scalar/openapi-types/helpers';\nimport { prop } from 'remeda';\n\nimport { getRefInfo, isComponentRef, type RefInfo } from '../getters/ref';\nimport type {\n  ContextSpec,\n  DynamicScopeEntry,\n  GeneratorImport,\n  OpenApiComponentsObject,\n  OpenApiExampleObject,\n  OpenApiReferenceObject,\n  OpenApiSchemaObject,\n} from '../types';\nimport { isObject, isReference, sanitize } from '../utils';\n\n/** Convert a `$dynamicAnchor` name to a valid TypeScript generic parameter identifier. */\nexport function dynamicAnchorToParamName(anchor: string): string {\n  return sanitize(anchor, {\n    underscore: '_',\n    whitespace: '_',\n    dash: '_',\n    es5keyword: true,\n    es5IdentifierName: true,\n  });\n}\n\nexport function dynamicAnchorsToUniqueParamNames(\n  anchors: string[],\n): Map<string, string> {\n  const result = new Map<string, string>();\n  const usedNames = new Map<string, number>();\n  for (const anchor of anchors) {\n    const base = dynamicAnchorToParamName(anchor);\n    const count = usedNames.get(base) ?? 0;\n    usedNames.set(base, count + 1);\n    const paramName = count === 0 ? base : `${base}${count + 1}`;\n    result.set(anchor, paramName);\n  }\n  return result;\n}\n\ntype Example = OpenApiExampleObject | OpenApiReferenceObject;\ntype ResolvedExample = unknown;\ntype Examples =\n  | Example[]\n  | Record<string, Example>\n  | ResolvedExample[]\n  | Record<string, ResolvedExample>\n  | undefined;\n\ninterface WithOptionalExamples {\n  examples?: Examples;\n}\n\nconst REF_NOT_FOUND_PREFIX = 'Oops... 🍻. Ref not found';\n\n/* eslint-disable @typescript-eslint/no-unnecessary-type-parameters -- TSchema constrains return type for callers (e.g. resolveRef<OpenApiExampleObject>) */\n\n/**\n * Recursively resolves a `$ref` in an OpenAPI document, following\n * nested schema refs and collecting imports along the way.\n *\n * Handles OpenAPI 3.0 `nullable` and 3.1 type-array hints on direct refs.\n *\n * @see https://spec.openapis.org/oas/v3.0.3#reference-object\n * @see https://spec.openapis.org/oas/v3.1.0#reference-object\n */\nexport function resolveRef<TSchema extends object = OpenApiComponentsObject>(\n  schema: OpenApiComponentsObject | OpenApiReferenceObject,\n  context: ContextSpec,\n  imports: GeneratorImport[] = [],\n): {\n  schema: TSchema;\n  imports: GeneratorImport[];\n} {\n  const refPath = '$ref' in schema ? schema.$ref : undefined;\n  const nestedSchema =\n    'schema' in schema ? (schema as { schema?: unknown }).schema : undefined;\n\n  // the schema is referring to another object\n  if (\n    isObject(nestedSchema) &&\n    isReference(nestedSchema) &&\n    typeof nestedSchema.$ref === 'string'\n  ) {\n    const resolvedRef = resolveRef<TSchema>(nestedSchema, context, imports);\n\n    if ('examples' in schema) {\n      const schemaWithExamples = schema as WithOptionalExamples;\n      schemaWithExamples.examples = resolveExampleRefs(\n        schemaWithExamples.examples,\n        context,\n      );\n    }\n\n    if ('examples' in resolvedRef.schema) {\n      const resolvedWithExamples = resolvedRef.schema as WithOptionalExamples;\n      resolvedWithExamples.examples = resolveExampleRefs(\n        resolvedWithExamples.examples,\n        context,\n      );\n    }\n\n    return {\n      schema: {\n        ...schema,\n        schema: resolvedRef.schema,\n      } as TSchema,\n      imports: resolvedRef.imports,\n    };\n  }\n\n  if (isDereferenced(schema)) {\n    if ('examples' in schema) {\n      const schemaWithExamples = schema as WithOptionalExamples;\n      schemaWithExamples.examples = resolveExampleRefs(\n        schemaWithExamples.examples,\n        context,\n      );\n    }\n    return { schema: schema as TSchema, imports };\n  }\n\n  if (!refPath) {\n    throw new Error(`${REF_NOT_FOUND_PREFIX}: missing $ref`);\n  }\n\n  const {\n    currentSchema,\n    refInfo: { name, originalName },\n  } = getSchema(schema, context);\n\n  if (!currentSchema) {\n    throw new Error(`${REF_NOT_FOUND_PREFIX}: ${refPath}`);\n  }\n\n  return resolveRef<TSchema>(currentSchema, { ...context }, [\n    ...imports,\n    { name, schemaName: originalName },\n  ]);\n}\n\n/**\n * Describes a resolved generic alias binding — the concrete type arguments\n * that fill the template's `$dynamicAnchor` slots for a given `$ref` with\n * `$defs` overrides.\n *\n * Produced by {@link extractBoundAliasInfo} and consumed by `resolveValue`\n * to emit instantiated generic type expressions (e.g. `Paginated<User>`).\n */\nexport interface BoundAliasInfo {\n  genericName: string;\n  genericParams: string[];\n  typeArgs: string[];\n  imports: { name: string; schemaName: string }[];\n  extraSchemas?: (OpenApiSchemaObject | OpenApiReferenceObject)[];\n}\n\n/** Check whether a schema reference has at least one `$defs` entry with both `$dynamicAnchor` and `$ref`. */\nfunction isBoundAlias(schema: OpenApiReferenceObject): boolean {\n  const defs = schema.$defs as Record<string, unknown> | undefined;\n  if (!defs || typeof defs !== 'object') return false;\n  for (const defSchema of Object.values(defs)) {\n    if (!defSchema || typeof defSchema !== 'object') continue;\n    const rec = defSchema as Record<string, unknown>;\n    if (\n      typeof rec.$dynamicAnchor === 'string' &&\n      typeof rec.$ref === 'string'\n    ) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Extract bound-alias information from a schema that references a generic template\n * and binds `$dynamicAnchor` entries to concrete types via `$defs`.\n */\nexport function extractBoundAliasInfo(\n  schema: OpenApiSchemaObject | OpenApiReferenceObject,\n  context: ContextSpec,\n): BoundAliasInfo | undefined {\n  let bindingElement: OpenApiReferenceObject | undefined;\n  let extraSchemas:\n    | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n    | undefined;\n\n  if (isReference(schema) && isBoundAlias(schema)) {\n    bindingElement = schema;\n  } else {\n    const allOf = (schema as { allOf?: unknown[] }).allOf;\n    if (Array.isArray(allOf)) {\n      for (let i = 0; i < allOf.length; i++) {\n        const element = allOf[i] as\n          | OpenApiSchemaObject\n          | OpenApiReferenceObject;\n        if (isReference(element) && isBoundAlias(element)) {\n          bindingElement = element;\n          extraSchemas = allOf.filter((_: unknown, j: number) => j !== i) as (\n            | OpenApiSchemaObject\n            | OpenApiReferenceObject\n          )[];\n          break;\n        }\n      }\n    }\n  }\n\n  if (!bindingElement) return undefined;\n\n  const bindingRecord = bindingElement as Record<string, unknown>;\n  const defs = bindingRecord.$defs as Record<string, unknown> | undefined;\n  if (!defs || typeof defs !== 'object') return undefined;\n\n  const bindingByAnchor = new Map<\n    string,\n    { typeName: string; originalName: string }\n  >();\n\n  for (const defSchema of Object.values(defs)) {\n    if (!defSchema || typeof defSchema !== 'object') continue;\n    const rec = defSchema as Record<string, unknown>;\n    if (rec.$dynamicAnchor === undefined) continue;\n\n    const ref = rec.$ref as string | undefined;\n    if (!ref || !isComponentRef(ref)) continue;\n\n    const anchor = rec.$dynamicAnchor as string;\n    const { name, originalName } = getRefInfo(ref, context);\n    bindingByAnchor.set(anchor, { typeName: name, originalName });\n  }\n\n  if (bindingByAnchor.size === 0) return undefined;\n\n  const refPath = bindingElement.$ref;\n  if (typeof refPath !== 'string') return undefined;\n\n  const { name: genericName, refPaths: templateRefPaths } = getRefInfo(\n    refPath,\n    context,\n  );\n\n  const templateSchema = templateRefPaths\n    ? (prop(\n        context.spec,\n        // @ts-expect-error: [ts2556] refPaths are not guaranteed to be valid keys of the spec\n        ...templateRefPaths,\n      ) as Record<string, unknown> | undefined)\n    : undefined;\n\n  const templateDefs = templateSchema?.$defs as\n    | Record<string, unknown>\n    | undefined;\n\n  const typeArgs: string[] = [];\n  const genericParams: string[] = [];\n  const imports: { name: string; schemaName: string }[] = [];\n\n  if (templateDefs && typeof templateDefs === 'object') {\n    const templateAnchors: string[] = [];\n    for (const defSchema of Object.values(templateDefs)) {\n      if (!defSchema || typeof defSchema !== 'object') continue;\n      const rec = defSchema as Record<string, unknown>;\n      if (rec.$dynamicAnchor === undefined || rec.$ref !== undefined) continue;\n      templateAnchors.push(rec.$dynamicAnchor as string);\n    }\n\n    const uniqueNames = dynamicAnchorsToUniqueParamNames(templateAnchors);\n    for (const anchor of templateAnchors) {\n      const binding = bindingByAnchor.get(anchor);\n      if (binding) {\n        typeArgs.push(binding.typeName);\n        imports.push({\n          name: binding.typeName,\n          schemaName: binding.originalName,\n        });\n      } else {\n        const paramName =\n          uniqueNames.get(anchor) ?? dynamicAnchorToParamName(anchor);\n        typeArgs.push(paramName);\n        genericParams.push(paramName);\n      }\n    }\n  }\n\n  if (typeArgs.length === 0) {\n    for (const { typeName, originalName } of bindingByAnchor.values()) {\n      typeArgs.push(typeName);\n      imports.push({ name: typeName, schemaName: originalName });\n    }\n  }\n\n  return { genericName, genericParams, typeArgs, imports, extraSchemas };\n}\n\nfunction getSchema<TSchema extends object = OpenApiComponentsObject>(\n  schema: OpenApiReferenceObject,\n  context: ContextSpec,\n): {\n  refInfo: RefInfo;\n  currentSchema: TSchema | undefined;\n} {\n  if (!schema.$ref) {\n    throw new Error(`${REF_NOT_FOUND_PREFIX}: missing $ref`);\n  }\n\n  const refInfo = getRefInfo(schema.$ref, context);\n\n  const { refPaths } = refInfo;\n\n  const schemaByRefPaths:\n    | OpenApiSchemaObject\n    | OpenApiReferenceObject\n    | undefined = Array.isArray(refPaths)\n    ? (prop(\n        context.spec,\n        // @ts-expect-error: [ts2556] refPaths are not guaranteed to be valid keys of the spec\n        ...refPaths,\n      ) as OpenApiSchemaObject | OpenApiReferenceObject | undefined)\n    : undefined;\n\n  if (isObject(schemaByRefPaths) && isReference(schemaByRefPaths)) {\n    return getSchema(schemaByRefPaths, context);\n  }\n\n  let currentSchema: OpenApiSchemaObject | OpenApiReferenceObject | undefined =\n    schemaByRefPaths;\n\n  // Handle OpenAPI 3.0 nullable property\n  // Bridge assertion: schema properties are `any` due to AnyOtherAttribute\n  if (isObject(currentSchema) && 'nullable' in schema) {\n    const nullable = schema.nullable as boolean | undefined;\n    const currentSchemaObject = currentSchema as Record<string, unknown>;\n    currentSchema = {\n      ...currentSchemaObject,\n      nullable,\n    } as OpenApiSchemaObject | OpenApiReferenceObject;\n  }\n\n  // Handle OpenAPI 3.1 type array (e.g., type: [\"object\", \"null\"])\n  // This preserves nullable information when using direct $ref with types array\n  if (\n    isObject(currentSchema) &&\n    'type' in schema &&\n    Array.isArray(schema.type)\n  ) {\n    const type = schema.type as string[];\n    const currentSchemaObject = currentSchema as Record<string, unknown>;\n    currentSchema = {\n      ...currentSchemaObject,\n      type,\n    } as OpenApiSchemaObject | OpenApiReferenceObject;\n  }\n\n  return {\n    currentSchema: currentSchema as TSchema | undefined,\n    refInfo,\n  };\n}\n\n/* eslint-enable @typescript-eslint/no-unnecessary-type-parameters */\n\nfunction encodeJsonPointerSegment(segment: string): string {\n  return segment.replaceAll('~', '~0').replaceAll('/', '~1');\n}\n\n/**\n * Build the dynamic scope for a schema: maps `$dynamicAnchor` names to concrete\n * type entries for self-referential resolution, `$defs` bindings, and sibling anchors.\n */\nexport function buildDynamicScope(\n  schemaName: string,\n  schema: OpenApiSchemaObject,\n  context: ContextSpec,\n): Record<string, DynamicScopeEntry> {\n  const scope: Record<string, DynamicScopeEntry> = {};\n\n  const getSchemaScopeEntry = (name: string): DynamicScopeEntry => {\n    const refInfo = getRefInfo(\n      `#/components/schemas/${encodeJsonPointerSegment(name)}`,\n      context,\n    );\n\n    return {\n      name: refInfo.name,\n      schemaName: refInfo.originalName,\n    };\n  };\n\n  const schemaRecord = schema as Record<string, unknown>;\n\n  if (typeof schemaRecord.$dynamicAnchor === 'string') {\n    scope[schemaRecord.$dynamicAnchor] = getSchemaScopeEntry(schemaName);\n  }\n\n  const defs = schemaRecord.$defs as\n    | Record<string, OpenApiSchemaObject | OpenApiReferenceObject>\n    | undefined;\n  if (defs && typeof defs === 'object') {\n    const unboundAnchors: string[] = [];\n    for (const [, defSchema] of Object.entries(defs)) {\n      if (!defSchema || typeof defSchema !== 'object') continue;\n      const defRecord = defSchema as Record<string, unknown>;\n      if (typeof defRecord.$dynamicAnchor === 'string') {\n        const anchorName = defRecord.$dynamicAnchor;\n        const refInDef = (defSchema as OpenApiReferenceObject).$ref;\n        if (refInDef?.startsWith('#/components/schemas/')) {\n          const { name, originalName } = getRefInfo(refInDef, context);\n          scope[anchorName] = { name, schemaName: originalName };\n        } else if (!refInDef) {\n          unboundAnchors.push(anchorName);\n        }\n      }\n    }\n    if (unboundAnchors.length > 0) {\n      const uniqueNames = dynamicAnchorsToUniqueParamNames(unboundAnchors);\n      for (const anchor of unboundAnchors) {\n        const paramName = uniqueNames.get(anchor);\n        if (paramName === undefined) continue;\n        scope[anchor] = {\n          name: paramName,\n          schemaName: paramName,\n          isParameter: true,\n        };\n      }\n    }\n  }\n\n  return scope;\n}\n\n/**\n * Resolve a `$dynamicRef` anchor to its concrete type using the current dynamic scope.\n * Returns `{ schema: {}, resolvedTypeName: 'unknown' }` when no scope override exists.\n */\nexport function resolveDynamicRef(\n  anchorName: string,\n  context: ContextSpec,\n  imports: GeneratorImport[] = [],\n): {\n  schema: OpenApiSchemaObject;\n  imports: GeneratorImport[];\n  resolvedTypeName: string;\n  schemaName: string | undefined;\n} {\n  const scope = context.dynamicScope ?? {};\n  let scopeEntry = scope[anchorName];\n\n  if (!scopeEntry) {\n    const schemas = (\n      (context.spec as Record<string, unknown>).components as\n        | Record<string, unknown>\n        | undefined\n    )?.schemas as Record<string, unknown> | undefined;\n\n    if (schemas && typeof schemas === 'object') {\n      const matches: string[] = [];\n      for (const [schemaName, schemaObj] of Object.entries(schemas)) {\n        if (!schemaObj || typeof schemaObj !== 'object') continue;\n        const rec = schemaObj as Record<string, unknown>;\n        if (rec.$dynamicAnchor === anchorName) {\n          matches.push(schemaName);\n        }\n      }\n      const match =\n        matches.length === 1\n          ? matches[0]\n          : matches.find((m) => m === anchorName);\n      if (match) {\n        const refInfo = getRefInfo(\n          `#/components/schemas/${encodeJsonPointerSegment(match)}`,\n          context,\n        );\n        scopeEntry = {\n          name: refInfo.name,\n          schemaName: refInfo.originalName,\n        };\n      }\n    }\n  }\n\n  if (!scopeEntry) {\n    return {\n      schema: {},\n      imports,\n      resolvedTypeName: 'unknown',\n      schemaName: undefined,\n    };\n  }\n\n  if (scopeEntry.isParameter) {\n    return {\n      schema: {},\n      imports,\n      resolvedTypeName: scopeEntry.name,\n      schemaName: undefined,\n    };\n  }\n\n  const resolvedTypeName = scopeEntry.name;\n  const schemaRef = `#/components/schemas/${encodeJsonPointerSegment(scopeEntry.schemaName)}`;\n\n  try {\n    const { schema: resolvedSchema, imports: resolvedImports } =\n      resolveRef<OpenApiSchemaObject>({ $ref: schemaRef }, context, imports);\n    return {\n      schema: resolvedSchema,\n      imports: resolvedImports,\n      resolvedTypeName,\n      schemaName: scopeEntry.schemaName,\n    };\n  } catch {\n    return {\n      schema: {},\n      imports,\n      resolvedTypeName: 'unknown',\n      schemaName: undefined,\n    };\n  }\n}\n\n/** Recursively resolves `$ref` entries in an examples array or record. */\nexport function resolveExampleRefs(\n  examples: Examples,\n  context: ContextSpec,\n): ResolvedExample[] | Record<string, ResolvedExample> | undefined {\n  if (!examples) {\n    return undefined;\n  }\n  return Array.isArray(examples)\n    ? examples.map((example) => {\n        if (isObject(example) && isReference(example)) {\n          const { schema }: { schema: OpenApiExampleObject } = resolveRef(\n            example,\n            context,\n          );\n          // Bridge assertion: ExampleObject.value is typed as `any`\n          return schema.value as ResolvedExample;\n        }\n        return example;\n      })\n    : (() => {\n        const result: Record<string, ResolvedExample> = {};\n        for (const [key, example] of Object.entries(examples)) {\n          // Bridge assertion: ExampleObject.value is typed as `any`\n          result[key] =\n            isObject(example) && isReference(example)\n              ? ((\n                  resolveRef(example, context) as {\n                    schema: OpenApiExampleObject;\n                  }\n                ).schema.value as ResolvedExample)\n              : example;\n        }\n        return result;\n      })();\n}\n","import { getScalar } from '../getters';\nimport type { FormDataContext } from '../getters/object';\nimport {\n  getDynamicAnchorName,\n  getRefInfo,\n  isComponentRef,\n} from '../getters/ref';\nimport { isBinaryScalarSchema } from '../getters/scalar';\nimport type {\n  ContextSpec,\n  GeneratorImport,\n  OpenApiReferenceObject,\n  OpenApiSchemaObject,\n  ResolverValue,\n  SchemaType,\n} from '../types';\nimport { isDynamicReference, isReference } from '../utils';\nimport { extractBoundAliasInfo, resolveDynamicRef, resolveRef } from './ref';\n\ninterface ResolveValueOptions {\n  schema: OpenApiSchemaObject | OpenApiReferenceObject;\n  name?: string;\n  context: ContextSpec;\n  formDataContext?: FormDataContext;\n}\n\nconst schemaArrayKeys = ['allOf', 'anyOf', 'oneOf', 'prefixItems'] as const;\nconst schemaObjectKeys = [\n  'additionalProperties',\n  'contains',\n  'else',\n  'if',\n  'items',\n  'not',\n  'propertyNames',\n  'then',\n  'unevaluatedItems',\n  'unevaluatedProperties',\n] as const;\nconst schemaMapKeys = [\n  '$defs',\n  'dependentSchemas',\n  'patternProperties',\n  'properties',\n] as const;\n\n/**\n * Recursively walks a schema value and returns `true` if any nested\n * `$dynamicRef` resolves — via the current `context.dynamicScope` — to a\n * schema *other* than `refName`.\n *\n * Used by `resolveValue` to decide whether a `$ref`'d schema must be\n * instantiated with its bound type arguments rather than referenced by name.\n *\n * @param value   - The schema node (or sub-node) to inspect.\n * @param context - Current resolution context, including the dynamic scope.\n * @param refName - The resolved name of the enclosing `$ref` schema; dynamic\n *                  refs that resolve to this same name are considered\n *                  self-references and do not count as \"scope-affected\".\n * @param seen    - Cycle-guard; tracks already-visited objects.\n */\nfunction hasScopeAffectedDynamicRef(\n  value: unknown,\n  context: ContextSpec,\n  refName: string,\n  seen = new WeakSet<object>(),\n): boolean {\n  if (!value || typeof value !== 'object') {\n    return false;\n  }\n\n  if (!context.dynamicScope || Object.keys(context.dynamicScope).length === 0) {\n    return false;\n  }\n\n  if (seen.has(value)) {\n    return false;\n  }\n  seen.add(value);\n\n  if (isDynamicReference(value) && value.$dynamicRef.startsWith('#')) {\n    const anchorName = getDynamicAnchorName(value.$dynamicRef);\n    if (anchorName) {\n      const scopeEntry = context.dynamicScope[anchorName];\n      if (scopeEntry && scopeEntry.name !== refName) {\n        return true;\n      }\n    }\n  }\n\n  const schema = value as Record<string, unknown>;\n\n  for (const key of schemaArrayKeys) {\n    const items = schema[key];\n    if (\n      Array.isArray(items) &&\n      items.some((item) =>\n        hasScopeAffectedDynamicRef(item, context, refName, seen),\n      )\n    ) {\n      return true;\n    }\n  }\n\n  for (const key of schemaObjectKeys) {\n    if (hasScopeAffectedDynamicRef(schema[key], context, refName, seen)) {\n      return true;\n    }\n  }\n\n  for (const key of schemaMapKeys) {\n    const schemaMap = schema[key];\n    if (\n      schemaMap &&\n      typeof schemaMap === 'object' &&\n      Object.values(schemaMap).some((item) =>\n        hasScopeAffectedDynamicRef(item, context, refName, seen),\n      )\n    ) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction makeUnknownValue(\n  originalSchema: OpenApiSchemaObject | OpenApiReferenceObject,\n): ResolverValue {\n  return {\n    value: 'unknown',\n    imports: [],\n    type: 'unknown',\n    isEnum: false,\n    schemas: [],\n    isRef: false,\n    hasReadonlyProps: false,\n    originalSchema,\n    dependencies: [],\n  };\n}\n\n/**\n * Resolves an OpenAPI schema or reference object to a {@link ResolverValue}\n * that carries the TypeScript type string, required imports, and metadata.\n *\n * Handles all schema forms in priority order:\n * 1. **Bound generic alias** — a `$ref` with `$defs` overrides; emits an\n *    instantiated generic expression such as `Paginated<User>`.\n * 2. **Component `$ref`** — a named `$ref` pointing to `#/components/…`;\n *    emits the schema name as a reference import.\n * 3. **Non-component `$ref`** — an anonymous or path-level ref; inlines the\n *    resolved schema via {@link getScalar} (cycle-safe).\n * 4. **`$dynamicRef`** — resolved via the active dynamic scope; falls back to\n *    `unknown` when the anchor is absent or the ref is a bare `#`.\n * 5. **Plain schema** — delegates to {@link getScalar} for all other cases\n *    (primitives, objects, arrays, enums, …).\n */\nexport function resolveValue({\n  schema,\n  name,\n  context,\n  formDataContext,\n}: ResolveValueOptions): ResolverValue {\n  if (isReference(schema)) {\n    const alias = extractBoundAliasInfo(schema, context);\n    if (alias) {\n      const value = `${alias.genericName}<${alias.typeArgs.join(', ')}>`;\n      const allImports: { name: string; schemaName: string }[] = [\n        { name: alias.genericName, schemaName: alias.genericName },\n        ...alias.imports,\n      ];\n      return {\n        value,\n        imports: allImports,\n        type: 'object',\n        schemas: [],\n        isEnum: false,\n        originalSchema: schema as OpenApiSchemaObject,\n        hasReadonlyProps: false,\n        isRef: true,\n        dependencies: allImports.map((i) => i.name),\n      };\n    }\n\n    const refValue = schema.$ref;\n    const {\n      schema: schemaObject,\n      imports,\n    }: {\n      schema: OpenApiSchemaObject;\n      imports: GeneratorImport[];\n    } = resolveRef(schema, context);\n\n    // Refs that don't target a named component slot (e.g. bundler-emitted\n    // `#/paths/.../schema`) have no corresponding `export type`, so emitting\n    // a named import would dangle. Inline the resolved schema instead.\n    // See issue #398.\n    if (refValue && !isComponentRef(refValue)) {\n      // Inlining walks nested $refs via getScalar -> resolveValue. A\n      // self-referential path-ref would recurse forever because the named-ref\n      // cycle guard below tracks `resolvedImport.name`, not the ref string.\n      // Fall back to `unknown` to break the chain — anonymous recursive types\n      // can't be expressed in TypeScript anyway.\n      if (context.parents?.includes(refValue)) {\n        return {\n          value: 'unknown',\n          imports: [],\n          schemas: [],\n          type: 'unknown',\n          isEnum: false,\n          originalSchema: schemaObject,\n          hasReadonlyProps: false,\n          isRef: false,\n          dependencies: [],\n        };\n      }\n      const scalar = getScalar({\n        item: schemaObject,\n        name,\n        context: {\n          ...context,\n          parents: [...(context.parents ?? []), refValue],\n        },\n        formDataContext,\n      });\n      return { ...scalar, originalSchema: schemaObject, isRef: false };\n    }\n\n    // application/x-www-form-urlencoded bodies are serialized via\n    // URLSearchParams.append(), which only accepts strings. Inline binary\n    // properties already skip the Blob coercion via formDataContext.urlEncoded\n    // inside scalar.ts (#1624 / #3395), but the component-$ref path below\n    // returns the imported type name unconditionally — so e.g. C#'s\n    // `IFormFile` (= Blob) leaks into the body type and fails to type-check.\n    // When the resolved component schema is a binary scalar that scalar.ts\n    // would coerce to Blob, fall back to the inlined scalar (which becomes\n    // `string` under formDataContext.urlEncoded) instead of the import.\n    // The standalone IFormFile model is intentionally left as Blob — it may\n    // still be referenced by a multipart/form-data endpoint where Blob is\n    // correct. Fixes #2410.\n    if (formDataContext?.urlEncoded && isBinaryScalarSchema(schemaObject)) {\n      // Pass the resolveValue input `name` (the property name) so this branch\n      // truly behaves like an inline property schema. Using the component\n      // import name here would leak component-based naming into downstream\n      // scalar paths (validators/docs/naming) even though the resulting type\n      // is plain `string`.\n      const scalar = getScalar({\n        item: schemaObject,\n        name,\n        context,\n        formDataContext,\n      });\n      return { ...scalar, originalSchema: schemaObject, isRef: false };\n    }\n\n    const resolvedImport = imports[0];\n\n    let hasReadonlyProps = false;\n\n    // Avoid infinite loop - use resolvedImport.name for tracking since name may be undefined\n    const refName = resolvedImport.name;\n\n    // Keep the dynamic scope from the original wrapper schema: its $defs\n    // provide the dynamic-anchor bindings, and scopedContext captured them\n    // before materialization. Resolving the wrapper $ref here gives us the\n    // concrete instantiation of the referenced template to generate.\n    let effectiveContext = context;\n\n    const schemaRecord = schemaObject as Record<string, unknown>;\n    const refAnchor = schemaRecord.$dynamicAnchor as string | undefined;\n\n    if (\n      typeof refAnchor === 'string' &&\n      context.dynamicScope?.[refAnchor] &&\n      context.dynamicScope[refAnchor].name !== refName &&\n      !context.dynamicScope[refAnchor].isParameter\n    ) {\n      const scopeEntry = context.dynamicScope[refAnchor];\n      const specSchemas = (\n        (context.spec as Record<string, unknown>).components as\n          | Record<string, unknown>\n          | undefined\n      )?.schemas as Record<string, unknown> | undefined;\n\n      const scopeSource = specSchemas?.[scopeEntry.schemaName] as\n        | Record<string, unknown>\n        | undefined;\n\n      const allOf = scopeSource?.allOf as unknown[] | undefined;\n\n      const isInAllOf =\n        Array.isArray(allOf) &&\n        allOf.some((el) => {\n          if (!el || typeof el !== 'object') return false;\n          const rec = el as Record<string, unknown>;\n          if (typeof rec.$ref !== 'string' || !isComponentRef(rec.$ref))\n            return false;\n          const { name } = getRefInfo(rec.$ref, context);\n          return name === refName;\n        });\n\n      if (!isInAllOf) {\n        const filteredScope = Object.fromEntries(\n          Object.entries(context.dynamicScope).filter(\n            ([key]) => key !== refAnchor,\n          ),\n        );\n        effectiveContext = { ...context, dynamicScope: filteredScope };\n      }\n    }\n\n    if (\n      !effectiveContext.parents?.includes(refName) &&\n      hasScopeAffectedDynamicRef(schemaObject, effectiveContext, refName)\n    ) {\n      const scalar = getScalar({\n        item: schemaObject,\n        name: name ?? refName,\n        context: {\n          ...effectiveContext,\n          parents: [...(effectiveContext.parents ?? []), refName],\n        },\n        formDataContext,\n      });\n\n      return {\n        ...scalar,\n        originalSchema: schemaObject,\n        isRef: false,\n      };\n    }\n\n    if (!effectiveContext.parents?.includes(refName)) {\n      const scalar = getScalar({\n        item: schemaObject,\n        name: refName,\n        context: {\n          ...effectiveContext,\n          parents: [...(effectiveContext.parents ?? []), refName],\n        },\n      });\n\n      hasReadonlyProps = scalar.hasReadonlyProps;\n    }\n\n    // Bridge assertion: schemaObject.anyOf is `any` due to AnyOtherAttribute\n    const anyOfItems = schemaObject.anyOf as\n      | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n      | undefined;\n    const isAnyOfNullable = anyOfItems?.some(\n      (anyOfItem) =>\n        !isReference(anyOfItem) &&\n        (anyOfItem.type === 'null' ||\n          (Array.isArray(anyOfItem.type) && anyOfItem.type.includes('null'))),\n    );\n\n    const schemaType = schemaObject.type as string | string[] | undefined;\n    const nullable =\n      (Array.isArray(schemaType) && schemaType.includes('null')) ||\n      schemaObject.nullable === true ||\n      isAnyOfNullable\n        ? ' | null'\n        : '';\n\n    return {\n      value: resolvedImport.name + nullable,\n      imports: [\n        {\n          name: resolvedImport.name,\n          schemaName: resolvedImport.schemaName,\n        },\n      ],\n      type: (schemaObject.type as SchemaType | undefined) ?? 'object',\n      schemas: [],\n      isEnum: !!schemaObject.enum,\n      originalSchema: schemaObject,\n      hasReadonlyProps,\n      isRef: true,\n      dependencies: [resolvedImport.name],\n    };\n  }\n\n  if (isDynamicReference(schema)) {\n    const dynamicRef = schema.$dynamicRef;\n\n    if (!dynamicRef.startsWith('#')) {\n      return makeUnknownValue(schema);\n    }\n\n    const anchorName = getDynamicAnchorName(dynamicRef);\n    if (!anchorName) {\n      return makeUnknownValue(schema);\n    }\n\n    const { imports: resolvedImports, resolvedTypeName } = resolveDynamicRef(\n      anchorName,\n      context,\n    );\n\n    if (resolvedTypeName === 'unknown') {\n      return makeUnknownValue(schema);\n    }\n\n    return {\n      value: resolvedTypeName,\n      imports: resolvedImports,\n      type: 'object',\n      isEnum: false,\n      schemas: [],\n      isRef: true,\n      hasReadonlyProps: false,\n      originalSchema: schema,\n      dependencies: [resolvedTypeName],\n    };\n  }\n\n  const scalar = getScalar({\n    item: schema,\n    name,\n    context,\n    formDataContext,\n  });\n\n  return {\n    ...scalar,\n    originalSchema: schema,\n    isRef: false,\n  };\n}\n","import { getEnum, getEnumDescriptions, getEnumNames } from '../getters/enum';\nimport type { FormDataContext } from '../getters/object';\nimport type {\n  ContextSpec,\n  OpenApiReferenceObject,\n  OpenApiSchemaObject,\n  ResolverValue,\n  ScalarValue,\n} from '../types';\nimport { jsDoc } from '../utils';\nimport { resolveValue } from './value';\n\ninterface ResolveOptions {\n  schema: OpenApiSchemaObject | OpenApiReferenceObject;\n  propName?: string;\n  combined?: boolean;\n  context: ContextSpec;\n  formDataContext?: FormDataContext;\n}\n\ninterface CreateTypeAliasOptions {\n  resolvedValue: ResolverValue;\n  propName: string | undefined;\n  context: ContextSpec;\n}\n\n/**\n * Wraps inline object type in a type alias.\n * E.g. `{ foo: string }` → value becomes `FooBody`, schema gets `export type FooBody = { foo: string };`\n */\nexport function createTypeAliasIfNeeded({\n  resolvedValue,\n  propName,\n  context,\n}: CreateTypeAliasOptions): ScalarValue | undefined {\n  if (!propName) {\n    return undefined;\n  }\n\n  if (resolvedValue.isEnum || resolvedValue.type !== 'object') {\n    return undefined;\n  }\n\n  // aliasCombinedTypes (v7 compat): match '|' and '&' so 'string | number' creates named type\n  // v8 default: only match '{' so combined primitives are inlined\n  const aliasPattern = context.output.override.aliasCombinedTypes\n    ? String.raw`{|&|\\|`\n    : '{';\n  if (!new RegExp(aliasPattern).test(resolvedValue.value)) {\n    return undefined;\n  }\n\n  const { originalSchema } = resolvedValue;\n  const doc = jsDoc(originalSchema);\n  const isConstant = 'const' in originalSchema;\n  const constantIsString =\n    'type' in originalSchema &&\n    (originalSchema.type === 'string' ||\n      (Array.isArray(originalSchema.type) &&\n        originalSchema.type.includes('string')));\n\n  const model = isConstant\n    ? `${doc}export const ${propName} = ${constantIsString ? `'${originalSchema.const}'` : originalSchema.const} as const;\\n`\n    : `${doc}export type ${propName} = ${resolvedValue.value};\\n`;\n\n  return {\n    value: propName,\n    imports: [{ name: propName, isConstant }],\n    schemas: [\n      ...resolvedValue.schemas,\n      {\n        name: propName,\n        model,\n        imports: resolvedValue.imports,\n        dependencies: resolvedValue.dependencies,\n      },\n    ],\n    isEnum: false,\n    type: 'object',\n    isRef: resolvedValue.isRef,\n    hasReadonlyProps: resolvedValue.hasReadonlyProps,\n    dependencies: resolvedValue.dependencies,\n  };\n}\n\nfunction resolveObjectOriginal({\n  schema,\n  propName,\n  combined = false,\n  context,\n  formDataContext,\n}: ResolveOptions): ResolverValue {\n  const resolvedValue = resolveValue({\n    schema,\n    name: propName,\n    context,\n    formDataContext,\n  });\n\n  // Try to create a type alias for object types\n  const aliased = createTypeAliasIfNeeded({\n    resolvedValue,\n    propName,\n    context,\n  });\n  if (aliased) {\n    return {\n      ...aliased,\n      originalSchema: resolvedValue.originalSchema,\n    };\n  }\n\n  if (propName && resolvedValue.isEnum && !combined && !resolvedValue.isRef) {\n    const doc = jsDoc(resolvedValue.originalSchema);\n    const enumValue = getEnum(\n      resolvedValue.value,\n      propName,\n      getEnumNames(resolvedValue.originalSchema),\n      context.output.override.enumGenerationType,\n      getEnumDescriptions(resolvedValue.originalSchema),\n      context.output.override.namingConvention.enum,\n    );\n\n    return {\n      value: propName,\n      imports: [{ name: propName }],\n      schemas: [\n        ...resolvedValue.schemas,\n        {\n          name: propName,\n          model: doc + enumValue,\n          imports: resolvedValue.imports,\n          dependencies: resolvedValue.dependencies,\n        },\n      ],\n      isEnum: false,\n      type: 'enum',\n      originalSchema: resolvedValue.originalSchema,\n      isRef: resolvedValue.isRef,\n      hasReadonlyProps: resolvedValue.hasReadonlyProps,\n      dependencies: [...resolvedValue.dependencies, propName],\n    };\n  }\n\n  return resolvedValue;\n}\n\nconst resolveObjectCacheMap = new Map<string, ResolverValue>();\n\nexport function resolveObject({\n  schema,\n  propName,\n  combined = false,\n  context,\n  formDataContext,\n}: ResolveOptions): ResolverValue {\n  const hashKey = JSON.stringify({\n    schema,\n    propName,\n    combined,\n    projectName: context.projectName ?? context.output.target,\n    formDataContext,\n    dynamicScope: context.dynamicScope,\n  });\n\n  if (resolveObjectCacheMap.has(hashKey)) {\n    // .has(...) guarantees existence\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return resolveObjectCacheMap.get(hashKey)!;\n  }\n\n  const result = resolveObjectOriginal({\n    schema,\n    propName,\n    combined,\n    context,\n    formDataContext,\n  });\n\n  resolveObjectCacheMap.set(hashKey, result);\n\n  return result;\n}\n","import { resolveExampleRefs } from '../resolvers';\nimport { resolveObject } from '../resolvers/object';\nimport type {\n  ContextSpec,\n  OpenApiReferenceObject,\n  OpenApiSchemaObject,\n  ResolverValue,\n  ScalarValue,\n} from '../types';\nimport { compareVersions } from '../utils';\nimport type { FormDataContext } from './object';\n\ninterface GetArrayOptions {\n  schema: OpenApiSchemaObject;\n  name?: string;\n  context: ContextSpec;\n  formDataContext?: FormDataContext;\n}\n\n/**\n * Return the output type from an array\n *\n * @param item item with type === \"array\"\n */\nexport function getArray({\n  schema,\n  name,\n  context,\n  formDataContext,\n}: GetArrayOptions): ScalarValue {\n  // Bridge assertions: extract typed values from AnyOtherAttribute-infected schema\n  const schemaPrefixItems = schema.prefixItems as\n    | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n    | undefined;\n  const schemaItems = schema.items as\n    | OpenApiSchemaObject\n    | OpenApiReferenceObject\n    | undefined;\n  const schemaExample = schema.example as unknown;\n  const schemaExamples = schema.examples as Parameters<\n    typeof resolveExampleRefs\n  >[0];\n\n  const itemSuffix = context.output.override.components.schemas.itemSuffix;\n  if (schemaPrefixItems) {\n    const resolvedObjects: ResolverValue[] = schemaPrefixItems.map(\n      (item, index) =>\n        resolveObject({\n          schema: item,\n          propName: name ? name + itemSuffix + String(index) : undefined,\n          context,\n        }),\n    );\n    if (schemaItems) {\n      const additional = resolveObject({\n        schema: schemaItems,\n        propName: name ? name + itemSuffix + 'Additional' : undefined,\n        context,\n      });\n      resolvedObjects.push({\n        ...additional,\n        value: `...${additional.value}[]`,\n      });\n    }\n    return {\n      type: 'array',\n      isEnum: false,\n      isRef: false,\n      value: `[${resolvedObjects.map((o) => o.value).join(', ')}]`,\n      imports: resolvedObjects.flatMap((o) => o.imports),\n      schemas: resolvedObjects.flatMap((o) => o.schemas),\n      dependencies: resolvedObjects.flatMap((o) => o.dependencies),\n      hasReadonlyProps: resolvedObjects.some((o) => o.hasReadonlyProps),\n      example: schemaExample,\n      examples: resolveExampleRefs(schemaExamples, context),\n    };\n  }\n  if (schemaItems) {\n    const resolvedObject = resolveObject({\n      schema: schemaItems,\n      propName: name ? name + itemSuffix : undefined,\n      context,\n      formDataContext,\n    });\n    return {\n      value: `${\n        schema.readOnly === true &&\n        !context.output.override.suppressReadonlyModifier\n          ? 'readonly '\n          : ''\n      }${\n        resolvedObject.value.includes('|') || resolvedObject.value.includes('&')\n          ? `(${resolvedObject.value})[]`\n          : `${resolvedObject.value}[]`\n      }`,\n      imports: resolvedObject.imports,\n      schemas: resolvedObject.schemas,\n      dependencies: resolvedObject.dependencies,\n      isEnum: false,\n      type: 'array',\n      isRef: false,\n      hasReadonlyProps: resolvedObject.hasReadonlyProps,\n      example: schemaExample,\n      examples: resolveExampleRefs(schemaExamples, context),\n    };\n  } else if (compareVersions(context.spec.openapi ?? '3.0.0', '3.1', '>=')) {\n    return {\n      value: 'unknown[]',\n      imports: [],\n      schemas: [],\n      dependencies: [],\n      isEnum: false,\n      type: 'array',\n      isRef: false,\n      hasReadonlyProps: false,\n    };\n  } else {\n    throw new Error(\n      `All arrays must have an \\`items\\` key defined (name=${name}, schema=${JSON.stringify(schema)})`,\n    );\n  }\n}\n","import { keyword } from 'esutils';\nimport { uniqueBy } from 'remeda';\n\nimport { resolveObject } from '../resolvers/object';\nimport { resolveExampleRefs, resolveRef } from '../resolvers/ref';\nimport {\n  type ContextSpec,\n  FormDataArrayHandling,\n  type GeneratorImport,\n  type GetterResponse,\n  type OpenApiEncodingObject,\n  type OpenApiMediaTypeObject,\n  type OpenApiReferenceObject,\n  type OpenApiRequestBodyObject,\n  type OpenApiResponseObject,\n  type OpenApiSchemaObject,\n  type ResReqTypesValue,\n} from '../types';\nimport { camel } from '../utils';\nimport { isReference } from '../utils/assertion';\nimport { pascal } from '../utils/case';\nimport {\n  getFormDataFieldFileType,\n  isBinaryContentType,\n} from '../utils/content-type';\nimport { getNumberWord } from '../utils/string';\nimport type { FormDataContext } from './object';\n\n// Bridge assertion helpers for AnyOtherAttribute-infected schema properties.\n// OpenAPI SchemaObject includes `[key: string]: any` which infects all property access.\n// These helpers centralize the cast so it appears once rather than at each access site.\nconst getSchemaType = (s: OpenApiSchemaObject) =>\n  s.type as string | string[] | undefined;\nconst getSchemaCombined = (s: OpenApiSchemaObject) =>\n  (s.oneOf ?? s.anyOf ?? s.allOf) as\n    | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n    | undefined;\nconst getSchemaOneOf = (s: OpenApiSchemaObject) =>\n  s.oneOf as (OpenApiSchemaObject | OpenApiReferenceObject)[] | undefined;\nconst getSchemaAnyOf = (s: OpenApiSchemaObject) =>\n  s.anyOf as (OpenApiSchemaObject | OpenApiReferenceObject)[] | undefined;\nconst getSchemaItems = (s: OpenApiSchemaObject) =>\n  s.items as OpenApiSchemaObject | OpenApiReferenceObject | undefined;\nconst getSchemaRequired = (s: OpenApiSchemaObject) =>\n  s.required as string[] | undefined;\nconst getSchemaProperties = (s: OpenApiSchemaObject) =>\n  s.properties as\n    | Record<string, OpenApiSchemaObject | OpenApiReferenceObject>\n    | undefined;\nconst resolveSchemaRef = (\n  schema: OpenApiSchemaObject | OpenApiReferenceObject,\n  context: ContextSpec,\n) =>\n  resolveRef(schema, context) as {\n    schema: OpenApiSchemaObject;\n    imports: GeneratorImport[];\n  };\nconst resolveResponseOrRequestRef = (\n  schema: OpenApiReferenceObject,\n  context: ContextSpec,\n) =>\n  resolveRef(schema, context) as {\n    schema: OpenApiResponseObject | OpenApiRequestBodyObject;\n    imports: GeneratorImport[];\n  };\n\nconst formDataContentTypes = new Set(['multipart/form-data']);\n\nconst formUrlEncodedContentTypes = new Set([\n  'application/x-www-form-urlencoded',\n]);\n\ninterface GetResReqContentTypesOptions {\n  mediaType: OpenApiMediaTypeObject;\n  propName?: string;\n  context: ContextSpec;\n  isFormData?: boolean;\n  contentType: string;\n}\n\nfunction getResReqContentTypes({\n  mediaType,\n  propName,\n  context,\n  isFormData,\n  contentType,\n}: GetResReqContentTypesOptions) {\n  if (!mediaType.schema) {\n    return;\n  }\n\n  // For form bodies, pass context that tracks encoding for file type\n  // detection. url-encoded bodies additionally flag `urlEncoded` so file/binary\n  // fields are typed as `string` rather than `Blob` (#1624).\n  const isFormUrlEncoded = formUrlEncodedContentTypes.has(contentType);\n  const formDataContext: FormDataContext | undefined = isFormData\n    ? { atPart: false, encoding: mediaType.encoding ?? {} }\n    : isFormUrlEncoded\n      ? { atPart: false, encoding: mediaType.encoding ?? {}, urlEncoded: true }\n      : undefined;\n\n  const resolvedObject = resolveObject({\n    schema: mediaType.schema,\n    propName,\n    context,\n    formDataContext,\n  });\n\n  // Known binary content type → Blob (overrides schema)\n  // This ensures correct responseType ('blob') even when schema lacks format: binary.\n  if (!isFormData && isBinaryContentType(contentType)) {\n    return {\n      ...resolvedObject,\n      value: 'Blob',\n    };\n  }\n\n  return resolvedObject;\n}\n\nexport function getResReqTypes(\n  responsesOrRequests: [\n    string,\n    OpenApiReferenceObject | OpenApiResponseObject | OpenApiRequestBodyObject,\n  ][],\n  name: string,\n  context: ContextSpec,\n  defaultType = 'unknown',\n  uniqueKey: (\n    item: ResReqTypesValue,\n    index: number,\n    data: ResReqTypesValue[],\n  ) => unknown = (item) => item.value,\n): ResReqTypesValue[] {\n  const typesArray = responsesOrRequests\n    .filter(([, res]) => Boolean(res))\n    .map(([key, res]) => {\n      if (isReference(res)) {\n        const {\n          schema: bodySchema,\n          imports: [{ name, schemaName }],\n        } = resolveResponseOrRequestRef(res, context);\n\n        const firstEntry = Object.entries(bodySchema.content ?? {}).at(0);\n\n        if (!firstEntry) {\n          return [\n            {\n              value: name,\n              imports: [{ name, schemaName }],\n              schemas: [],\n              type: 'unknown',\n              isEnum: false,\n              isRef: true,\n              hasReadonlyProps: false,\n              dependencies: [name],\n              originalSchema: undefined,\n              example: undefined,\n              examples: undefined,\n              key,\n              contentType: '',\n            },\n          ] as ResReqTypesValue[];\n        }\n\n        const [contentType, mediaType] = firstEntry;\n\n        const isFormData = formDataContentTypes.has(contentType);\n        const isFormUrlEncoded = formUrlEncodedContentTypes.has(contentType);\n\n        if ((!isFormData && !isFormUrlEncoded) || !mediaType.schema) {\n          return [\n            {\n              value: name,\n              imports: [{ name, schemaName }],\n              schemas: [],\n              type: 'unknown',\n              isEnum: false,\n              isRef: true,\n              hasReadonlyProps: false,\n              dependencies: [name],\n              originalSchema: mediaType.schema,\n              example: mediaType.example as unknown,\n              examples: resolveExampleRefs(\n                mediaType.examples as\n                  | Record<string, OpenApiReferenceObject | { value?: unknown }>\n                  | undefined,\n                context,\n              ),\n              key,\n              contentType,\n            },\n          ] as ResReqTypesValue[];\n        }\n\n        const formData = isFormData\n          ? getSchemaFormDataAndUrlEncoded({\n              name,\n              schemaObject: mediaType.schema,\n              context,\n              isRequestBodyOptional: bodySchema.required !== true,\n              isRef: true,\n              encoding: mediaType.encoding,\n            })\n          : undefined;\n\n        const formUrlEncoded = isFormUrlEncoded\n          ? getSchemaFormDataAndUrlEncoded({\n              name,\n              schemaObject: mediaType.schema,\n              context,\n              isRequestBodyOptional: bodySchema.required !== true,\n              isUrlEncoded: true,\n              isRef: true,\n              encoding: mediaType.encoding,\n            })\n          : undefined;\n\n        const additionalImports = getFormDataAdditionalImports({\n          schemaObject: mediaType.schema,\n          context,\n        });\n\n        return [\n          {\n            value: name,\n            imports: [{ name, schemaName }, ...additionalImports],\n            schemas: [],\n            type: 'unknown',\n            isEnum: false,\n            hasReadonlyProps: false,\n            dependencies: [name],\n            formData,\n            formUrlEncoded,\n            isRef: true,\n            originalSchema: mediaType.schema,\n            example: mediaType.example,\n            examples: resolveExampleRefs(mediaType.examples, context),\n            key,\n            contentType,\n          },\n        ] as ResReqTypesValue[];\n      }\n\n      if (res.content) {\n        const contents = Object.entries(res.content).map(\n          ([contentType, mediaType], index, arr) => {\n            let propName = key ? pascal(name) + pascal(key) : undefined;\n\n            if (propName && arr.length > 1) {\n              propName = propName + pascal(getNumberWord(index + 1));\n            }\n\n            const isFormData = formDataContentTypes.has(contentType);\n            const isFormUrlEncoded =\n              formUrlEncodedContentTypes.has(contentType);\n\n            // When schema is a $ref, use schema name for consistent param naming\n            let effectivePropName = propName;\n            if (mediaType.schema && isReference(mediaType.schema)) {\n              const { imports } = resolveSchemaRef(mediaType.schema, context);\n              if (imports[0]?.name) {\n                effectivePropName = imports[0].name;\n              }\n            } else if ((isFormData || isFormUrlEncoded) && mediaType.schema) {\n              // For form-data and url-encoded, the param name is also the\n              // runtime variable iterated by the FormData/URLSearchParams code.\n              // Derive it from the inner DTO names so it matches the function\n              // parameter (#3242). Scoped to these content types: forcing the\n              // schema name elsewhere aliases the import to `Foo as __Foo` in\n              // split mode and broke the MSW mock filter (#3269).\n              const combinedRefs =\n                getSchemaOneOf(mediaType.schema) ??\n                getSchemaAnyOf(mediaType.schema);\n              if (combinedRefs) {\n                const names: string[] = [];\n                for (const ref of combinedRefs) {\n                  if (!isReference(ref)) continue;\n                  const refName = resolveSchemaRef(ref, context).imports[0]\n                    ?.name;\n                  if (refName) {\n                    names.push(refName);\n                  }\n                }\n                if (names.length > 0) {\n                  effectivePropName = names.join('');\n                }\n              }\n            }\n\n            const resolvedValue = getResReqContentTypes({\n              mediaType,\n              propName: effectivePropName,\n              context,\n              isFormData,\n              contentType,\n            });\n\n            if (!resolvedValue) {\n              // openapi spec 3.1 allows describing binary responses with only a content type\n              if (isBinaryContentType(contentType)) {\n                return {\n                  value: 'Blob',\n                  imports: [],\n                  schemas: [],\n                  type: 'Blob',\n                  isEnum: false,\n                  key,\n                  isRef: false,\n                  hasReadonlyProps: false,\n                  contentType,\n                };\n              }\n\n              return;\n            }\n\n            if (\n              (!isFormData && !isFormUrlEncoded) ||\n              !effectivePropName ||\n              !mediaType.schema\n            ) {\n              return {\n                ...resolvedValue,\n                imports: resolvedValue.imports,\n                dependencies: resolvedValue.dependencies,\n                contentType,\n                example: mediaType.example,\n                examples: resolveExampleRefs(mediaType.examples, context),\n              };\n            }\n\n            const formData = isFormData\n              ? getSchemaFormDataAndUrlEncoded({\n                  name: effectivePropName,\n                  schemaObject: mediaType.schema,\n                  context,\n                  isRequestBodyOptional: res.required !== true,\n                  isRef: true,\n                  encoding: mediaType.encoding,\n                })\n              : undefined;\n\n            const formUrlEncoded = isFormUrlEncoded\n              ? getSchemaFormDataAndUrlEncoded({\n                  name: effectivePropName,\n                  schemaObject: mediaType.schema,\n                  context,\n                  isUrlEncoded: true,\n                  isRequestBodyOptional: res.required !== true,\n                  isRef: true,\n                  encoding: mediaType.encoding,\n                })\n              : undefined;\n\n            const additionalImports = getFormDataAdditionalImports({\n              schemaObject: mediaType.schema,\n              context,\n            });\n            return {\n              ...resolvedValue,\n              imports: [...resolvedValue.imports, ...additionalImports],\n              formData,\n              formUrlEncoded,\n              contentType,\n              example: mediaType.example as unknown,\n              examples: resolveExampleRefs(\n                mediaType.examples as\n                  | Record<string, OpenApiReferenceObject | { value?: unknown }>\n                  | undefined,\n                context,\n              ),\n            };\n          },\n        );\n\n        return contents\n          .filter(Boolean)\n          .map((x) => ({ ...x, key })) as ResReqTypesValue[];\n      }\n      const swaggerSchema =\n        'schema' in res\n          ? (\n              res as {\n                schema?: OpenApiSchemaObject | OpenApiReferenceObject;\n              }\n            ).schema\n          : undefined;\n\n      if (swaggerSchema) {\n        const propName = key ? pascal(name) + pascal(key) : undefined;\n        const resolvedValue = resolveObject({\n          schema: swaggerSchema,\n          propName,\n          context,\n        });\n\n        return [\n          {\n            ...resolvedValue,\n            contentType: 'application/json',\n            key,\n          },\n        ] as ResReqTypesValue[];\n      }\n\n      return [\n        {\n          value: defaultType,\n          imports: [],\n          schemas: [],\n          type: defaultType,\n          isEnum: false,\n          dependencies: [],\n          key,\n          isRef: false,\n          hasReadonlyProps: false,\n          contentType: 'application/json',\n        },\n      ] as ResReqTypesValue[];\n    });\n\n  return uniqueBy(typesArray.flat(), uniqueKey);\n}\n\n/**\n * Response type categories for HTTP client response parsing.\n * Maps to Angular HttpClient's responseType, Axios responseType, and Fetch response methods.\n */\nexport type ResponseTypeCategory = 'json' | 'text' | 'blob' | 'arraybuffer';\n\n/**\n * Determine the responseType option based on success content types only.\n * This avoids error-response content types influencing the responseType.\n */\nexport function getSuccessResponseType(\n  response: GetterResponse,\n): 'blob' | 'text' | undefined {\n  const successContentTypes = response.types.success\n    .map((t) => t.contentType)\n    .filter(Boolean);\n\n  if (response.isBlob) {\n    return 'blob' as const;\n  }\n\n  const hasJsonResponse = successContentTypes.some(\n    (contentType) =>\n      contentType.includes('json') || contentType.includes('+json'),\n  );\n  const hasTextResponse = successContentTypes.some(\n    (contentType) =>\n      contentType.startsWith('text/') || contentType.includes('xml'),\n  );\n\n  if (!hasJsonResponse && hasTextResponse) {\n    return 'text' as const;\n  }\n\n  return undefined;\n}\n\n/**\n * Determine the response type category for a given content type.\n * Used to set the correct responseType option in HTTP clients.\n *\n * @param contentType - The MIME content type (e.g., 'application/json', 'text/plain')\n * @returns The response type category to use for parsing\n */\nexport function getResponseTypeCategory(\n  contentType: string,\n): ResponseTypeCategory {\n  // Binary types → blob\n  if (isBinaryContentType(contentType)) {\n    return 'blob';\n  }\n\n  // JSON types\n  if (\n    contentType === 'application/json' ||\n    contentType.includes('+json') ||\n    contentType.includes('-json')\n  ) {\n    return 'json';\n  }\n\n  // Everything else is text (text/*, application/xml, etc.)\n  return 'text';\n}\n\n/**\n * Get the default content type from a list of content types.\n * Priority: application/json > any JSON-like type > first in list\n *\n * @param contentTypes - Array of content types from OpenAPI spec\n * @returns The default content type to use\n */\nexport function getDefaultContentType(contentTypes: string[]): string {\n  if (contentTypes.length === 0) {\n    return 'application/json';\n  }\n\n  // Prefer application/json\n  if (contentTypes.includes('application/json')) {\n    return 'application/json';\n  }\n\n  // Prefer any JSON-like type\n  const jsonType = contentTypes.find(\n    (ct) => ct.includes('+json') || ct.includes('-json'),\n  );\n  if (jsonType) {\n    return jsonType;\n  }\n\n  // Default to first\n  return contentTypes[0];\n}\n\ninterface GetFormDataAdditionalImportsOptions {\n  schemaObject: OpenApiSchemaObject | OpenApiReferenceObject;\n  context: ContextSpec;\n}\n\nfunction getFormDataAdditionalImports({\n  schemaObject,\n  context,\n}: GetFormDataAdditionalImportsOptions): GeneratorImport[] {\n  const { schema } = resolveSchemaRef(schemaObject, context);\n\n  if (schema.type !== 'object') {\n    return [];\n  }\n\n  const combinedSchemas = getSchemaOneOf(schema) ?? getSchemaAnyOf(schema);\n\n  if (!combinedSchemas) {\n    return [];\n  }\n\n  return combinedSchemas\n    .map((subSchema) => resolveSchemaRef(subSchema, context).imports[0])\n    .filter(Boolean);\n}\n\ninterface GetSchemaFormDataAndUrlEncodedOptions {\n  name: string;\n  schemaObject: OpenApiSchemaObject | OpenApiReferenceObject;\n  context: ContextSpec;\n  isRequestBodyOptional: boolean;\n  isUrlEncoded?: boolean;\n  isRef?: boolean;\n  encoding?: Record<string, OpenApiEncodingObject>;\n}\n\nfunction getSchemaFormDataAndUrlEncoded({\n  name,\n  schemaObject,\n  context,\n  isRequestBodyOptional,\n  isUrlEncoded,\n  isRef,\n  encoding,\n}: GetSchemaFormDataAndUrlEncodedOptions): string {\n  const { schema, imports } = resolveSchemaRef(schemaObject, context);\n  const propName = camel(\n    !isRef && isReference(schemaObject) ? imports[0].name : name,\n  );\n\n  const variableName = isUrlEncoded ? 'formUrlEncoded' : 'formData';\n  let form = isUrlEncoded\n    ? `const ${variableName} = new URLSearchParams();\\n`\n    : `const ${variableName} = new FormData();\\n`;\n\n  const combinedSchemas = getSchemaCombined(schema);\n  if (\n    schema.type === 'object' ||\n    (schema.type === undefined && combinedSchemas)\n  ) {\n    if (combinedSchemas) {\n      const shouldCast = !!getSchemaOneOf(schema) || !!getSchemaAnyOf(schema);\n\n      if (shouldCast) {\n        // If the outer schema also has direct properties, those are handled\n        // below by the dedicated properties branch. Skip them here to avoid\n        // appending the same key twice. Exclude readOnly direct properties\n        // so they can still flow through the runtime loop if a variant\n        // declares the same key as writable.\n        const directProperties = getSchemaProperties(schema);\n        const directKeys = directProperties\n          ? Object.entries(directProperties)\n              .filter(\n                ([, value]) =>\n                  !resolveSchemaRef(value, context).schema.readOnly,\n              )\n              .map(([key]) => key)\n          : [];\n        const skipLine =\n          directKeys.length > 0\n            ? `  if ([${directKeys.map((k) => JSON.stringify(k)).join(', ')}].includes(key)) return;\\n`\n            : '';\n\n        form += `Object.entries(${propName} ?? {}).forEach(([key, value]) => {\\n`;\n        form += skipLine;\n        form += `  if (value !== undefined && value !== null) {\\n`;\n        if (isUrlEncoded) {\n          // url-encoded: URLSearchParams holds strings only, so File/Blob/\n          // Buffer handling does not apply — coerce every value to string (#1624)\n          form += `    if (Array.isArray(value)) {\\n`;\n          form += `      value.forEach(v => {\\n`;\n          form += `        ${variableName}.append(key, typeof v === 'object' ? JSON.stringify(v) : String(v));\\n`;\n          form += `      });\\n`;\n          form += `    } else if (typeof value === 'object') {\\n`;\n          form += `      ${variableName}.append(key, JSON.stringify(value));\\n`;\n          form += `    } else {\\n`;\n          form += `      ${variableName}.append(key, String(value));\\n`;\n          form += `    }\\n`;\n        } else {\n          form += `    if ((typeof File !== 'undefined' && value instanceof File) || value instanceof Blob) {\\n`;\n          form += `      ${variableName}.append(key, value);\\n`;\n          form += `    } else if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {\\n`;\n          form += `      ${variableName}.append(key, new Blob([Uint8Array.from(value)]));\\n`;\n          form += `    } else if (Array.isArray(value)) {\\n`;\n          form += `      value.forEach(v => {\\n`;\n          form += `        if ((typeof File !== 'undefined' && v instanceof File) || v instanceof Blob) {\\n`;\n          form += `          ${variableName}.append(key, v);\\n`;\n          form += `        } else if (typeof Buffer !== 'undefined' && Buffer.isBuffer(v)) {\\n`;\n          form += `          ${variableName}.append(key, new Blob([Uint8Array.from(v)]));\\n`;\n          form += `        } else {\\n`;\n          form += `          ${variableName}.append(key, typeof v === 'object' ? JSON.stringify(v) : String(v));\\n`;\n          form += `        }\\n`;\n          form += `      });\\n`;\n          form += `    } else if (typeof value === 'object') {\\n`;\n          form += `      ${variableName}.append(key, JSON.stringify(value));\\n`;\n          form += `    } else {\\n`;\n          form += `      ${variableName}.append(key, String(value));\\n`;\n          form += `    }\\n`;\n        }\n        form += `  }\\n`;\n        form += `});\\n`;\n      } else {\n        const combinedSchemasFormData = combinedSchemas\n          .map((subSchema) => {\n            const { schema: combinedSchema } = resolveSchemaRef(\n              subSchema,\n              context,\n            );\n            return resolveSchemaPropertiesToFormData({\n              schema: combinedSchema,\n              variableName,\n              propName,\n              context,\n              isRequestBodyOptional,\n              encoding,\n            });\n          })\n          .filter(Boolean)\n          .join('\\n');\n\n        form += combinedSchemasFormData;\n      }\n    }\n\n    if (schema.properties) {\n      const formDataValues = resolveSchemaPropertiesToFormData({\n        schema,\n        variableName,\n        propName,\n        context,\n        isRequestBodyOptional,\n        encoding,\n      });\n\n      form += formDataValues;\n    }\n\n    return form;\n  }\n\n  if (schema.type === 'array') {\n    let valueStr = 'value';\n    const schemaItems = getSchemaItems(schema);\n    if (schemaItems) {\n      const { schema: itemSchema } = resolveSchemaRef(schemaItems, context);\n      if (itemSchema.type === 'object' || itemSchema.type === 'array') {\n        valueStr = 'JSON.stringify(value)';\n      } else if (\n        itemSchema.type === 'number' ||\n        itemSchema.type === 'integer' ||\n        itemSchema.type === 'boolean'\n      ) {\n        valueStr = 'value.toString()';\n      }\n    }\n\n    return `${form}${propName}.forEach(value => ${variableName}.append('data', ${valueStr}))\\n`;\n  }\n\n  if (\n    schema.type === 'number' ||\n    schema.type === 'integer' ||\n    schema.type === 'boolean'\n  ) {\n    return `${form}${variableName}.append('data', ${propName}.toString())\\n`;\n  }\n\n  return `${form}${variableName}.append('data', ${propName})\\n`;\n}\n\ninterface ResolveSchemaPropertiesToFormDataOptions {\n  schema: OpenApiSchemaObject;\n  variableName: string;\n  propName: string;\n  context: ContextSpec;\n  isRequestBodyOptional: boolean;\n  keyPrefix?: string;\n  depth?: number;\n  encoding?: Record<string, OpenApiEncodingObject>;\n}\n\nfunction resolveSchemaPropertiesToFormData({\n  schema,\n  variableName,\n  propName,\n  context,\n  isRequestBodyOptional,\n  keyPrefix = '',\n  depth = 0,\n  encoding,\n}: ResolveSchemaPropertiesToFormDataOptions): string {\n  let formDataValues = '';\n  // url-encoded bodies use URLSearchParams (string values only), so file/binary\n  // fields are appended as plain strings rather than wrapped in a Blob (#1624).\n  const isUrlEncoded = variableName === 'formUrlEncoded';\n  const schemaProps = getSchemaProperties(schema) ?? {};\n  for (const [key, value] of Object.entries(schemaProps)) {\n    const { schema: property } = resolveSchemaRef(value, context);\n\n    // Skip readOnly properties for formData\n    if (property.readOnly) {\n      continue;\n    }\n\n    let formDataValue = '';\n\n    // Get encoding.contentType for this field (only at top level, depth === 0)\n    const fieldEncoding = depth === 0 ? encoding?.[key] : undefined;\n    const partContentType = fieldEncoding?.contentType;\n\n    const formattedKeyPrefix = isRequestBodyOptional\n      ? keyword.isIdentifierNameES5(key)\n        ? '?'\n        : '?.'\n      : '';\n    const formattedKey = keyword.isIdentifierNameES5(key)\n      ? `.${key}`\n      : `['${key}']`;\n\n    const valueKey = `${propName}${formattedKeyPrefix}${formattedKey}`;\n    const nonOptionalValueKey = `${propName}${formattedKey}`;\n\n    // Use shared file type detection (same logic as type generation)\n    const fileType = getFormDataFieldFileType(property, partContentType);\n    const effectiveContentType =\n      partContentType ?? (property.contentMediaType as string | undefined);\n\n    if (isUrlEncoded && (fileType || property.format === 'binary')) {\n      // url-encoded: file/binary fields are plain strings (URLSearchParams)\n      formDataValue = `${variableName}.append(\\`${keyPrefix}${key}\\`, ${nonOptionalValueKey});\\n`;\n    } else if (fileType === 'binary' || property.format === 'binary') {\n      // Binary: append directly (value is Blob)\n      formDataValue = `${variableName}.append(\\`${keyPrefix}${key}\\`, ${nonOptionalValueKey});\\n`;\n    } else if (fileType === 'text') {\n      // Text file: value is Blob | string, check at runtime\n      formDataValue = `${variableName}.append(\\`${keyPrefix}${key}\\`, ${nonOptionalValueKey} instanceof Blob ? ${nonOptionalValueKey} : new Blob([${nonOptionalValueKey}], { type: '${effectiveContentType}' }));\\n`;\n    } else if (\n      property.type === 'object' ||\n      (Array.isArray(property.type) && property.type.includes('object'))\n    ) {\n      formDataValue =\n        context.output.override.formData.arrayHandling ===\n        FormDataArrayHandling.EXPLODE\n          ? resolveSchemaPropertiesToFormData({\n              schema: property,\n              variableName,\n              propName: nonOptionalValueKey,\n              context,\n              isRequestBodyOptional,\n              keyPrefix: `${keyPrefix}${key}.`,\n              depth: depth + 1,\n              encoding,\n            })\n          : `${variableName}.append(\\`${keyPrefix}${key}\\`, JSON.stringify(${nonOptionalValueKey}));\\n`;\n    } else if (\n      property.type === 'array' ||\n      (Array.isArray(property.type) && property.type.includes('array'))\n    ) {\n      let valueStr = 'value';\n      let hasNonPrimitiveChild = false;\n      const propertyItems = getSchemaItems(property);\n      if (propertyItems) {\n        const { schema: itemSchema } = resolveSchemaRef(propertyItems, context);\n        if (itemSchema.type === 'object' || itemSchema.type === 'array') {\n          if (\n            context.output.override.formData.arrayHandling ===\n            FormDataArrayHandling.EXPLODE\n          ) {\n            hasNonPrimitiveChild = true;\n            const resolvedValue = resolveSchemaPropertiesToFormData({\n              schema: itemSchema,\n              variableName,\n              propName: 'value',\n              context,\n              isRequestBodyOptional,\n              keyPrefix: `${keyPrefix}${key}[\\${index${depth > 0 ? depth : ''}}].`,\n              depth: depth + 1,\n            });\n            formDataValue = `${valueKey}.forEach((value, index${depth > 0 ? depth : ''}) => {\n    ${resolvedValue}});\\n`;\n          } else {\n            valueStr = 'JSON.stringify(value)';\n          }\n        } else {\n          const itemType = getSchemaType(itemSchema);\n          if (\n            itemType === 'number' ||\n            (Array.isArray(itemType) && itemType.includes('number')) ||\n            itemType === 'integer' ||\n            (Array.isArray(itemType) && itemType.includes('integer')) ||\n            itemType === 'boolean' ||\n            (Array.isArray(itemType) && itemType.includes('boolean'))\n          ) {\n            valueStr = 'value.toString()';\n          }\n        }\n      }\n      if (\n        context.output.override.formData.arrayHandling ===\n        FormDataArrayHandling.EXPLODE\n      ) {\n        if (!hasNonPrimitiveChild) {\n          formDataValue = `${valueKey}.forEach((value, index${depth > 0 ? depth : ''}) => ${variableName}.append(\\`${keyPrefix}${key}[\\${index${depth > 0 ? depth : ''}}]\\`, ${valueStr}));\\n`;\n        }\n      } else {\n        formDataValue = `${valueKey}.forEach(value => ${variableName}.append(\\`${keyPrefix}${key}${context.output.override.formData.arrayHandling === FormDataArrayHandling.SERIALIZE_WITH_BRACKETS ? '[]' : ''}\\`, ${valueStr}));\\n`;\n      }\n    } else if (\n      (() => {\n        const propType = getSchemaType(property);\n        return (\n          propType === 'number' ||\n          (Array.isArray(propType) && propType.includes('number')) ||\n          propType === 'integer' ||\n          (Array.isArray(propType) && propType.includes('integer')) ||\n          propType === 'boolean' ||\n          (Array.isArray(propType) && propType.includes('boolean'))\n        );\n      })()\n    ) {\n      formDataValue = `${variableName}.append(\\`${keyPrefix}${key}\\`, ${nonOptionalValueKey}.toString())\\n`;\n    } else {\n      formDataValue = `${variableName}.append(\\`${keyPrefix}${key}\\`, ${nonOptionalValueKey});\\n`;\n    }\n\n    let existSubSchemaNullable = false;\n    const combine = getSchemaCombined(property);\n    if (combine) {\n      const subSchemas = combine.map((c) =>\n        resolveObject({ schema: c, combined: true, context: context }),\n      );\n      if (\n        subSchemas.some((subSchema) => {\n          return ['number', 'integer', 'boolean'].includes(subSchema.type);\n        })\n      ) {\n        formDataValue = `${variableName}.append(\\`${key}\\`, ${nonOptionalValueKey}.toString())\\n`;\n      }\n\n      if (\n        subSchemas.some((subSchema) => {\n          return subSchema.type === 'null';\n        })\n      ) {\n        existSubSchemaNullable = true;\n      }\n    }\n\n    const schemaRequired = getSchemaRequired(schema);\n    const isRequired = schemaRequired?.includes(key) && !isRequestBodyOptional;\n\n    const propType = getSchemaType(property);\n    if (\n      property.nullable ||\n      (Array.isArray(propType) && propType.includes('null')) ||\n      existSubSchemaNullable\n    ) {\n      if (isRequired) {\n        formDataValues += `if(${valueKey} !== null) {\\n ${formDataValue} }\\n`;\n        continue;\n      }\n\n      formDataValues += `if(${valueKey} !== undefined && ${nonOptionalValueKey} !== null) {\\n ${formDataValue} }\\n`;\n      continue;\n    }\n\n    if (isRequired) {\n      formDataValues += formDataValue;\n      continue;\n    }\n\n    formDataValues += `if(${valueKey} !== undefined) {\\n ${formDataValue} }\\n`;\n  }\n\n  return formDataValues;\n}\n","import { generalJSTypesWithArray } from '../constants';\nimport { resolveRef } from '../resolvers';\nimport type {\n  ContextSpec,\n  GetterBody,\n  OpenApiReferenceObject,\n  OpenApiRequestBodyObject,\n  OverrideOutputContentType,\n  ResReqTypesValue,\n} from '../types';\nimport { camel, filterByContentType, isReference, sanitize } from '../utils';\nimport { getResReqTypes } from './res-req-types';\n\ninterface GetBodyOptions {\n  requestBody: OpenApiReferenceObject | OpenApiRequestBodyObject;\n  operationName: string;\n  context: ContextSpec;\n  contentType?: OverrideOutputContentType;\n}\n\nfunction buildBody(\n  filteredBodyTypes: ResReqTypesValue[],\n  requestBody: OpenApiReferenceObject | OpenApiRequestBodyObject,\n  operationName: string,\n  context: ContextSpec,\n): GetterBody {\n  const imports = filteredBodyTypes.flatMap(({ imports }) => imports);\n  const schemas = filteredBodyTypes.flatMap(({ schemas }) => schemas);\n\n  const definition = filteredBodyTypes.map(({ value }) => value).join(' | ');\n  const hasReadonlyProps = filteredBodyTypes.some((x) => x.hasReadonlyProps);\n  const nonReadonlyDefinition =\n    hasReadonlyProps &&\n    definition &&\n    context.output.override.preserveReadonlyRequestBodies !== 'preserve'\n      ? `NonReadonly<${definition}>`\n      : definition;\n\n  let implementation =\n    generalJSTypesWithArray.includes(definition.toLowerCase()) ||\n    filteredBodyTypes.length > 1\n      ? camel(operationName) +\n        context.output.override.components.requestBodies.suffix\n      : camel(definition);\n\n  const overrideName = getRequestBodyExtensionName(requestBody, context);\n  if (overrideName) {\n    implementation = camel(overrideName);\n  }\n\n  let isOptional = false;\n  if (implementation) {\n    implementation = sanitize(implementation, {\n      underscore: '_',\n      whitespace: '_',\n      dash: true,\n      es5keyword: true,\n      es5IdentifierName: true,\n    });\n    if (isReference(requestBody)) {\n      const { schema: bodySchema }: { schema: OpenApiRequestBodyObject } =\n        resolveRef(requestBody, context);\n      isOptional = bodySchema.required !== true;\n    } else {\n      isOptional = requestBody.required !== true;\n    }\n  }\n\n  return {\n    originalSchema: requestBody,\n    definition: nonReadonlyDefinition,\n    implementation,\n    imports,\n    schemas,\n    isOptional,\n    ...(filteredBodyTypes.length === 1\n      ? {\n          formData: filteredBodyTypes[0].formData,\n          formUrlEncoded: filteredBodyTypes[0].formUrlEncoded,\n          contentType: filteredBodyTypes[0].contentType,\n        }\n      : {\n          formData: '',\n          formUrlEncoded: '',\n          contentType: '',\n        }),\n  };\n}\n\nexport function getBody({\n  requestBody,\n  operationName,\n  context,\n  contentType,\n}: GetBodyOptions): GetterBody {\n  const allBodyTypes = getResReqTypes(\n    [[context.output.override.components.requestBodies.suffix, requestBody]],\n    operationName,\n    context,\n  );\n\n  const filteredBodyTypes = filterByContentType(allBodyTypes, contentType);\n\n  return buildBody(filteredBodyTypes, requestBody, operationName, context);\n}\n\n/**\n * Returns per-content-type bodies when `splitByContentType` is enabled.\n * Each entry includes a `contentTypeSuffix` for generating distinct function names.\n */\nexport function getBodiesByContentType({\n  requestBody,\n  operationName,\n  context,\n  contentType,\n}: GetBodyOptions): (GetterBody & { contentTypeSuffix: string })[] {\n  const allBodyTypes = getResReqTypes(\n    [[context.output.override.components.requestBodies.suffix, requestBody]],\n    operationName,\n    context,\n    undefined,\n    (item) => `${item.value}::${item.contentType}`,\n  );\n\n  const filteredBodyTypes = filterByContentType(allBodyTypes, contentType);\n\n  // If there's only one content type, no need to split\n  if (filteredBodyTypes.length <= 1) {\n    return [\n      {\n        ...buildBody(filteredBodyTypes, requestBody, operationName, context),\n        contentTypeSuffix: '',\n      },\n    ];\n  }\n\n  return filteredBodyTypes.map((bodyType) => {\n    const suffix = getContentTypeSuffix(bodyType.contentType);\n    const body = buildBody([bodyType], requestBody, operationName, context);\n    return {\n      ...body,\n      contentTypeSuffix: suffix,\n    };\n  });\n}\n\nfunction getRequestBodyExtensionName(\n  requestBody: OpenApiReferenceObject | OpenApiRequestBodyObject,\n  context: ContextSpec,\n): string | undefined {\n  let value: unknown;\n  if (isReference(requestBody)) {\n    const { schema } = resolveRef(requestBody, context);\n    value = (schema as Record<string, unknown>)?.[\n      'x-codegen-request-body-name'\n    ];\n  } else {\n    value = (requestBody as Record<string, unknown>)?.[\n      'x-codegen-request-body-name'\n    ];\n  }\n  return typeof value === 'string' ? value : undefined;\n}\n\nconst CONTENT_TYPE_SUFFIX_MAP: Record<string, string> = {\n  'application/json': 'Json',\n  'multipart/form-data': 'FormData',\n  'application/x-www-form-urlencoded': 'UrlEncoded',\n  'text/plain': 'Text',\n  'application/xml': 'Xml',\n  'text/xml': 'Xml',\n  'application/octet-stream': 'Blob',\n};\n\nfunction getContentTypeSuffix(contentType: string): string {\n  if (CONTENT_TYPE_SUFFIX_MAP[contentType]) {\n    return CONTENT_TYPE_SUFFIX_MAP[contentType];\n  }\n  // For unknown content types, derive a PascalCase suffix from the subtype\n  const subtype = contentType.split('/')[1] ?? contentType;\n  return subtype\n    .split(/[-+.]/)\n    .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n    .join('');\n}\n","import { isArray, isBoolean } from 'remeda';\n\nimport type {\n  ContextSpec,\n  OpenApiReferenceObject,\n  OpenApiSchemaObject,\n  OpenApiSchemasObject,\n} from '../types';\nimport { getPropertySafe, isReference, pascal } from '../utils';\nimport { getRefInfo } from './ref';\n\nexport function resolveDiscriminators(\n  schemas: OpenApiSchemasObject,\n  context: ContextSpec,\n): OpenApiSchemasObject {\n  const transformedSchemas = schemas;\n  for (const schema of Object.values(transformedSchemas)) {\n    if (isBoolean(schema)) {\n      continue; // skip boolean schemas as we can't do anything meaningful with them\n    }\n\n    // Some specs incorrectly nest `oneOf` under `discriminator`.\n    // hoist it to the schema level so union generation still works.\n    const discriminator = schema.discriminator as\n      | { oneOf?: OpenApiSchemasObject[string][] }\n      | undefined;\n\n    if (!schema.oneOf && isArray(discriminator?.oneOf)) {\n      schema.oneOf = discriminator.oneOf;\n    }\n\n    if (schema.discriminator?.mapping) {\n      const { mapping, propertyName } = schema.discriminator;\n\n      for (const [mappingKey, mappingValue] of Object.entries(mapping)) {\n        let subTypeSchema;\n\n        try {\n          const { originalName } = getRefInfo(mappingValue, context);\n          // name from getRefInfo may contain a suffix, which we don't want\n          const name = pascal(originalName);\n          subTypeSchema =\n            transformedSchemas[name] ?? transformedSchemas[originalName];\n        } catch {\n          subTypeSchema = transformedSchemas[mappingValue];\n        }\n\n        // The mapped subtype may be missing from the schema set — e.g. a\n        // subtype removed by `filters.tags`, or absent in a malformed spec — in\n        // which case indexing yields `undefined` at runtime. `!subTypeSchema`\n        // skips that (and the `false` boolean-schema case) before we dereference\n        // it; an explicit `=== undefined` check isn't possible here because the\n        // project does not enable `noUncheckedIndexedAccess`, so indexed access\n        // is typed as always-present. This mirrors the `!variantSchema` guard in\n        // the second loop below.\n        if (\n          !subTypeSchema ||\n          isBoolean(subTypeSchema) ||\n          propertyName === undefined\n        ) {\n          continue;\n        }\n\n        const property = subTypeSchema.properties?.[propertyName];\n        if (isBoolean(property)) {\n          continue;\n        }\n\n        const schemaProperty =\n          property && !isReference(property) ? property : undefined;\n\n        const enumProperty = schemaProperty\n          ? getPropertySafe(schemaProperty, 'enum')\n          : { hasProperty: false as const, value: undefined };\n\n        const enumValues: unknown[] | undefined =\n          enumProperty.hasProperty && Array.isArray(enumProperty.value)\n            ? enumProperty.value\n            : undefined;\n\n        const propertyType =\n          (schemaProperty?.type as string | undefined) ?? 'string';\n\n        let typedMappingKey: string | number | boolean = mappingKey;\n        if (propertyType === 'boolean') {\n          typedMappingKey = mappingKey === 'true';\n        } else if (propertyType === 'number' || propertyType === 'integer') {\n          const parsed = Number(mappingKey);\n          if (!Number.isNaN(parsed)) {\n            typedMappingKey = parsed;\n          }\n        }\n\n        const mergedEnumValues = [\n          ...(enumValues ?? []).filter((value) => value !== typedMappingKey),\n          typedMappingKey,\n        ];\n\n        // @see https://github.com/orval-labs/orval/issues/3139\n        const mergedProperty = {\n          ...schemaProperty,\n          type: propertyType,\n          enum: mergedEnumValues,\n        };\n        delete (mergedProperty as Record<string, unknown>).const;\n\n        subTypeSchema.properties = {\n          ...subTypeSchema.properties,\n          [propertyName]: mergedProperty,\n        };\n        subTypeSchema.required = [\n          ...new Set([...(subTypeSchema.required ?? []), propertyName]),\n        ];\n      }\n    }\n  }\n\n  // Break the circular type-alias that forms when a discriminator parent has\n  // top-level `oneOf` listing variants that inherit via `allOf: [$ref: parent, ...]`.\n  // The parent emits as `type Parent = (Variant1 & {...}) | ...` and each variant\n  // would emit as `type VariantN = Omit<Parent, key> & {...}`, producing TS2456.\n  // Rewrite each variant's `$ref` back to the parent by inlining the parent's\n  // non-discriminator properties (or dropping the entry entirely when the parent\n  // contributes nothing beyond the discriminator key). See issue #3432.\n  for (const [parentName, parentSchema] of Object.entries(transformedSchemas)) {\n    if (isBoolean(parentSchema)) {\n      continue;\n    }\n    const variants = parentSchema.oneOf ?? parentSchema.anyOf;\n    if (!variants || !parentSchema.discriminator) {\n      continue;\n    }\n    const { propertyName, mapping } = parentSchema.discriminator;\n    if (!propertyName) {\n      continue;\n    }\n    const mappedRefs = mapping ? Object.values(mapping) : [];\n    const variantArrayRefs = variants\n      .filter(\n        (item): item is OpenApiReferenceObject & { $ref: string } =>\n          isReference(item) && typeof item.$ref === 'string',\n      )\n      .map((item) => item.$ref);\n    const variantRefs = [...new Set([...mappedRefs, ...variantArrayRefs])];\n\n    const parentProperties = parentSchema.properties as\n      | Record<string, OpenApiSchemaObject | OpenApiReferenceObject>\n      | undefined;\n    const parentRequired = parentSchema.required;\n    const inheritableProps: Record<\n      string,\n      OpenApiSchemaObject | OpenApiReferenceObject\n    > = {};\n    if (parentProperties) {\n      for (const [key, value] of Object.entries(parentProperties)) {\n        if (key !== propertyName) {\n          inheritableProps[key] = value;\n        }\n      }\n    }\n    const inheritableRequired = parentRequired?.filter(\n      (key) => key !== propertyName,\n    );\n    const hasInheritableProps = Object.keys(inheritableProps).length > 0;\n\n    for (const mappingValue of variantRefs) {\n      let variantSchema;\n      try {\n        const { originalName } = getRefInfo(mappingValue, context);\n        const name = pascal(originalName);\n        variantSchema =\n          transformedSchemas[name] ?? transformedSchemas[originalName];\n      } catch {\n        variantSchema = transformedSchemas[mappingValue];\n      }\n      if (!variantSchema || isBoolean(variantSchema)) {\n        continue;\n      }\n      const variantAllOf = variantSchema.allOf as\n        | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n        | undefined;\n      if (!variantAllOf) {\n        continue;\n      }\n\n      const rewritten: (OpenApiSchemaObject | OpenApiReferenceObject)[] = [];\n      for (const item of variantAllOf) {\n        if (!isReference(item) || !item.$ref) {\n          rewritten.push(item);\n          continue;\n        }\n        let refOriginalName: string | undefined;\n        try {\n          refOriginalName = getRefInfo(item.$ref, context).originalName;\n        } catch {\n          refOriginalName = undefined;\n        }\n        const refMatchesParent =\n          refOriginalName === parentName ||\n          (refOriginalName !== undefined &&\n            pascal(refOriginalName) === pascal(parentName));\n        if (!refMatchesParent) {\n          rewritten.push(item);\n          continue;\n        }\n        // Preserve the parent's other object-level constraints\n        // (additionalProperties, minProperties, description, etc.) by shallow-\n        // cloning the parent and only stripping the parts that would re-create\n        // the cycle or are now meaningless on the variant.\n        const inlinedParent = {\n          ...(parentSchema as Record<string, unknown>),\n        } as OpenApiSchemaObject;\n        delete (inlinedParent as Record<string, unknown>).oneOf;\n        delete (inlinedParent as Record<string, unknown>).discriminator;\n        delete (inlinedParent as Record<string, unknown>).allOf;\n        delete (inlinedParent as Record<string, unknown>).anyOf;\n\n        if (hasInheritableProps) {\n          // Fresh per-variant clone so downstream in-place mutations on one\n          // variant don't leak across siblings.\n          inlinedParent.properties = { ...inheritableProps };\n        } else {\n          delete (inlinedParent as Record<string, unknown>).properties;\n        }\n        if (inheritableRequired && inheritableRequired.length > 0) {\n          inlinedParent.required = [...inheritableRequired];\n        } else {\n          delete (inlinedParent as Record<string, unknown>).required;\n        }\n\n        // Drop the entry entirely when the parent contributed nothing beyond\n        // a bare `type: 'object'` — the second allOf member (the variant's\n        // own inline object) already asserts object-ness.\n        const meaningfulKeys = Object.keys(\n          inlinedParent as Record<string, unknown>,\n        ).filter((key) => key !== 'type');\n        if (meaningfulKeys.length > 0) {\n          rewritten.push(inlinedParent);\n        }\n      }\n\n      if (rewritten.length === 0) {\n        delete (variantSchema as Record<string, unknown>).allOf;\n      } else {\n        variantSchema.allOf = rewritten;\n      }\n    }\n  }\n\n  return transformedSchemas;\n}\n","import { type OpenApiOperationObject, Verbs } from '../types';\nimport { isString, pascal, sanitize } from '../utils';\n\nexport function getOperationId(\n  operation: OpenApiOperationObject,\n  route: string,\n  verb: Verbs,\n): string {\n  if (isString(operation.operationId)) {\n    return operation.operationId;\n  }\n\n  return pascal(\n    [\n      verb,\n      ...route.split('/').map((p) =>\n        sanitize(p, {\n          dash: true,\n          underscore: '-',\n          dot: '-',\n          whitespace: '-',\n        }),\n      ),\n    ].join('-'),\n  );\n}\n","import { resolveRef } from '../resolvers/ref';\nimport type {\n  ContextSpec,\n  GetterParameters,\n  OpenApiParameterObject,\n  OpenApiReferenceObject,\n} from '../types';\nimport { isReference } from '../utils';\nimport { isComponentRef } from './ref';\n\ninterface GetParametersOptions {\n  parameters: (OpenApiReferenceObject | OpenApiParameterObject)[];\n  context: ContextSpec;\n}\n\nexport function getParameters({\n  parameters,\n  context,\n}: GetParametersOptions): GetterParameters {\n  const result: GetterParameters = { path: [], query: [], header: [] };\n  for (const p of parameters) {\n    if (isReference(p)) {\n      const { schema, imports } = resolveRef(p, context);\n      const parameter = schema as OpenApiParameterObject;\n\n      const location = parameter.in;\n      if (\n        location === 'path' ||\n        location === 'query' ||\n        location === 'header'\n      ) {\n        // Refs that don't target a named component slot (e.g. bundler-emitted\n        // `#/paths/.../parameters/0`) have no corresponding `export type` from\n        // `generateParameterDefinition`, so emitting a named import would\n        // dangle. Inline the resolved parameter's schema instead. Mirrors the\n        // #398 fix in `resolvers/value.ts`. See issue #1879.\n        const safeImports = p.$ref && isComponentRef(p.$ref) ? imports : [];\n        result[location].push({ parameter, imports: safeImports });\n      }\n    } else {\n      if (p.in === 'query' || p.in === 'path' || p.in === 'header') {\n        result[p.in].push({ parameter: p, imports: [] });\n      }\n    }\n  }\n  return result;\n}\n","import { resolveValue } from '../resolvers';\nimport type {\n  ContextSpec,\n  GetterParameters,\n  GetterParams,\n  NormalizedOutputOptions,\n} from '../types';\nimport { camel, sanitize, stringify } from '../utils';\n\n/**\n * Return every params in a path\n *\n * @example\n * ```\n * getParamsInPath(\"/pet/{category}/{name}/\");\n * // => [\"category\", \"name\"]\n * ```\n * @param path\n */\nexport function getParamsInPath(path: string) {\n  let n;\n  const output = [];\n  const templatePathRegex = /\\{(.*?)\\}/g;\n  while ((n = templatePathRegex.exec(path)) !== null) {\n    output.push(n[1]);\n  }\n\n  return output;\n}\n\ninterface GetParamsOptions {\n  route: string;\n  pathParams?: GetterParameters['query'];\n  operationId: string;\n  context: ContextSpec;\n  output: NormalizedOutputOptions;\n}\n\nexport function getParams({\n  route,\n  pathParams = [],\n  operationId,\n  context,\n  output,\n}: GetParamsOptions): GetterParams {\n  const params = getParamsInPath(route);\n  return params.map((p) => {\n    const pathParam = pathParams.find(\n      ({ parameter }) =>\n        sanitize(camel(parameter.name), {\n          es5keyword: true,\n          underscore: true,\n          dash: true,\n        }) === p,\n    );\n\n    if (!pathParam) {\n      throw new Error(\n        `The path params ${p} can't be found in parameters (${operationId})`,\n      );\n    }\n\n    const {\n      name: nameWithoutSanitize,\n      required = false,\n      schema,\n    } = pathParam.parameter;\n\n    const name = sanitize(camel(nameWithoutSanitize), { es5keyword: true });\n\n    if (!schema) {\n      return {\n        name,\n        definition: `${name}${required ? '' : '?'}: unknown`,\n        implementation: `${name}${required ? '' : '?'}: unknown`,\n        default: false,\n        required,\n        imports: [],\n      };\n    }\n\n    const resolvedValue = resolveValue({\n      schema,\n      context,\n    });\n\n    const originalSchema = resolvedValue.originalSchema;\n\n    // Bridge assertion: .default returns any due to AnyOtherAttribute on OpenApiSchemaObject\n    const schemaDefault = originalSchema.default as\n      | string\n      | Record<string, unknown>\n      | unknown[]\n      | undefined;\n\n    let paramType = resolvedValue.value;\n    if (output.allParamsOptional) {\n      paramType = `${paramType} | undefined | null`; // TODO: maybe check that `paramType` isn't already undefined or null\n    }\n\n    const definition = `${name}${\n      !required || schemaDefault ? '?' : ''\n    }: ${paramType}`;\n\n    const implementation = `${name}${!required && !schemaDefault ? '?' : ''}${\n      schemaDefault\n        ? `: ${paramType} = ${stringify(schemaDefault)}`\n        : `: ${paramType}`\n    }`; // FIXME: in Vue if we have `version: MaybeRef<number | undefined | null> = 1` and we don't pass version, the unref(version) will be `undefined` and not `1`, so we need to handle default value somewhere in implementation and not in the definition\n\n    return {\n      name,\n      definition,\n      implementation,\n      default: schemaDefault,\n      required,\n      imports: resolvedValue.imports,\n      originalSchema,\n    };\n  });\n}\n","import {\n  type ContextSpec,\n  type GetterBody,\n  type GetterParams,\n  type GetterProps,\n  GetterPropType,\n  type GetterQueryParam,\n} from '../types';\nimport { isNullish, pascal, sortByPriority, stringify } from '../utils';\n\ninterface GetPropsOptions {\n  body: GetterBody;\n  queryParams?: GetterQueryParam;\n  params: GetterParams;\n  operationName: string;\n  headers?: GetterQueryParam;\n  context: ContextSpec;\n}\n\nexport function getProps({\n  body,\n  queryParams,\n  params,\n  operationName,\n  headers,\n  context,\n}: GetPropsOptions): GetterProps {\n  const bodyProp = {\n    name: body.implementation,\n    definition: `${body.implementation}${body.isOptional && !context.output.optionsParamRequired ? '?' : ''}: ${body.definition}`,\n    implementation: `${body.implementation}${body.isOptional && !context.output.optionsParamRequired ? '?' : ''}: ${body.definition}`,\n    default: false,\n    required: !body.isOptional || context.output.optionsParamRequired,\n    type: GetterPropType.BODY,\n  };\n\n  const queryParamsProp = {\n    name: 'params',\n    definition: getQueryParamDefinition(queryParams, context),\n    implementation: getQueryParamDefinition(queryParams, context),\n    default: false,\n    required: isNullish(queryParams?.isOptional)\n      ? !context.output.allParamsOptional || context.output.optionsParamRequired\n      : (!queryParams.isOptional && !context.output.allParamsOptional) ||\n        context.output.optionsParamRequired,\n    type: GetterPropType.QUERY_PARAM,\n  };\n\n  const headersProp = {\n    name: 'headers',\n    definition: `headers${headers?.isOptional && !context.output.optionsParamRequired ? '?' : ''}: ${\n      headers?.schema.name\n    }`,\n    implementation: `headers${headers?.isOptional && !context.output.optionsParamRequired ? '?' : ''}: ${\n      headers?.schema.name\n    }`,\n    default: false,\n    required: isNullish(headers?.isOptional)\n      ? false\n      : !headers.isOptional || context.output.optionsParamRequired,\n    type: GetterPropType.HEADER,\n  };\n\n  let paramGetterProps: GetterProps;\n  if (context.output.override.useNamedParameters && params.length > 0) {\n    const parameterTypeName = `${pascal(operationName)}PathParameters`;\n\n    const name = 'pathParams';\n\n    // needs a special model\n    const namedParametersTypeDefinition = `export type ${parameterTypeName} = {\\n ${params\n      .map((property) => property.definition)\n      .join(',\\n    ')},\\n }`;\n\n    const isOptional =\n      context.output.optionsParamRequired ||\n      params.every((param) => param.default !== undefined);\n\n    const implementation = `{ ${params\n      .map(\n        (property) =>\n          property.default === undefined\n            ? property.name\n            : `${property.name} = ${stringify(property.default)}`, // if we use property.implementation, we will get `{ version: number = 1 }: ListPetsPathParameters = {}` which isn't valid\n      )\n      .join(', ')} }: ${parameterTypeName}${isOptional ? ' = {}' : ''}`;\n\n    const destructured = `{ ${params\n      .map((property) => property.name)\n      .join(', ')} }`;\n\n    paramGetterProps = [\n      {\n        type: GetterPropType.NAMED_PATH_PARAMS,\n        name,\n        definition: `${name}: ${parameterTypeName}`,\n        implementation,\n        default: false,\n        destructured,\n        required: true,\n        schema: {\n          name: parameterTypeName,\n          model: namedParametersTypeDefinition,\n          imports: params.flatMap((property) => property.imports),\n        },\n      },\n    ];\n  } else {\n    paramGetterProps = params.map((param) => ({\n      ...param,\n      type: GetterPropType.PARAM,\n    }));\n  }\n\n  const props = [\n    ...paramGetterProps,\n    ...(body.definition ? [bodyProp] : []),\n    ...(queryParams ? [queryParamsProp] : []),\n    ...(headers ? [headersProp] : []),\n  ];\n\n  const sortedProps = sortByPriority(props);\n\n  return sortedProps;\n}\n\nfunction getQueryParamDefinition(\n  queryParams: GetterQueryParam | undefined,\n  context: ContextSpec,\n): string {\n  const paramType = queryParams?.schema.name;\n  return `params${(queryParams?.isOptional || context.output.allParamsOptional) && !context.output.optionsParamRequired ? '?' : ''}: ${paramType}`;\n}\n","import { resolveValue } from '../resolvers';\nimport type {\n  ContextSpec,\n  GeneratorImport,\n  GeneratorSchema,\n  GetterParameters,\n  GetterQueryParam,\n  OpenApiParameterObject,\n  OpenApiSchemaObject,\n} from '../types';\nimport { jsDoc, pascal, sanitize } from '../utils';\nimport { getEnum, getEnumDescriptions, getEnumNames } from './enum';\nimport { getKey } from './keys';\n\ninterface QueryParamsType {\n  name: string;\n  required: boolean;\n  definition: string;\n  imports: GeneratorImport[];\n  schemas: GeneratorSchema[];\n  originalSchema: OpenApiSchemaObject;\n}\n\nconst isOpenApiSchemaObject = (\n  value: unknown,\n): value is OpenApiSchemaObject => {\n  if (!value || typeof value !== 'object') {\n    return false;\n  }\n\n  return !('$ref' in value);\n};\n\n/**\n * A `$ref` schema object (e.g. array `items` or a oneOf/anyOf/allOf variant\n * pointing at a component). We don't resolve the reference here, but a query\n * parameter behind a `$ref` is virtually always a complex (object-like) type,\n * so it must be treated as non-primitive. Over-flagging is harmless: the only\n * consumer (the Angular `nonPrimitiveKeys` passthrough) is gated on a\n * configured `paramsSerializer`, which is precisely what handles raw values.\n */\nconst isRefObject = (value: unknown): boolean =>\n  !!value && typeof value === 'object' && '$ref' in value;\n\nconst getSchemaType = (\n  schema: OpenApiSchemaObject,\n): string | string[] | undefined => {\n  const type = (schema as { type?: unknown }).type;\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  if (\n    Array.isArray(type) &&\n    type.every((variant): variant is string => typeof variant === 'string')\n  ) {\n    return type;\n  }\n\n  return undefined;\n};\n/**\n * Detects whether a query parameter's resolved schema is non-primitive — i.e.\n * an object, an array of objects, or a composition (oneOf/anyOf/allOf) that\n * resolves to a non-primitive shape.\n *\n * Used by Angular generators so the default `filterParams` helper preserves\n * such values instead of silently dropping them. Angular's `HttpParams` only\n * accepts primitives, but a user-provided `paramsSerializer`, `mutator`, or\n * `paramsFilter` may need the raw object to flatten or stringify it.\n */\nconst isSchemaNonPrimitive = (schema: OpenApiSchemaObject): boolean => {\n  const schemaType = getSchemaType(schema);\n  const type = Array.isArray(schemaType)\n    ? schemaType.filter((variant) => variant !== 'null')\n    : schemaType;\n  const additionalProperties = (schema as { additionalProperties?: unknown })\n    .additionalProperties;\n\n  if (type === 'object') {\n    return true;\n  }\n  if (Array.isArray(type) && type.includes('object')) {\n    return true;\n  }\n  if (type === 'array' || (Array.isArray(type) && type.includes('array'))) {\n    const items = (schema as { items?: unknown }).items;\n    if (isOpenApiSchemaObject(items)) {\n      return isSchemaNonPrimitive(items);\n    }\n    // Arrays with missing/unknown `items` are still non-primitive for our\n    // Angular passthrough purposes: without a serializer/filter, HttpParams\n    // cannot safely represent them. `$ref` items also land here because\n    // isOpenApiSchemaObject rejects references.\n    return true;\n  }\n\n  const compositions = [\n    ...(Array.isArray(schema.oneOf) ? (schema.oneOf as unknown[]) : []),\n    ...(Array.isArray(schema.anyOf) ? (schema.anyOf as unknown[]) : []),\n    ...(Array.isArray(schema.allOf) ? (schema.allOf as unknown[]) : []),\n  ];\n  if (compositions.length > 0) {\n    return compositions.some((variant) =>\n      isOpenApiSchemaObject(variant)\n        ? isSchemaNonPrimitive(variant)\n        : isRefObject(variant),\n    );\n  }\n\n  if (\n    !type &&\n    ((schema as { properties?: unknown }).properties !== undefined ||\n      (additionalProperties !== undefined && additionalProperties !== false))\n  ) {\n    return true;\n  }\n  return false;\n};\n\nconst isSchemaNullable = (schema: OpenApiSchemaObject): boolean => {\n  if (schema.nullable === true) {\n    return true;\n  }\n\n  if (schema.type === 'null') {\n    return true;\n  }\n\n  if (Array.isArray(schema.type) && schema.type.includes('null')) {\n    return true;\n  }\n\n  const oneOfVariants = Array.isArray(schema.oneOf)\n    ? (schema.oneOf as unknown[])\n    : [];\n  const anyOfVariants = Array.isArray(schema.anyOf)\n    ? (schema.anyOf as unknown[])\n    : [];\n  const variants = [...oneOfVariants, ...anyOfVariants];\n\n  return variants.some((variant) => {\n    if (!isOpenApiSchemaObject(variant)) {\n      return false;\n    }\n\n    return isSchemaNullable(variant);\n  });\n};\n\nfunction getQueryParamsTypes(\n  queryParams: GetterParameters['query'],\n  operationName: string,\n  context: ContextSpec,\n): QueryParamsType[] {\n  return queryParams.map(({ parameter, imports: parameterImports }) => {\n    const {\n      name,\n      required,\n      schema: schemaParam,\n      content,\n    } = parameter as {\n      name: string;\n      required: boolean;\n      schema: OpenApiSchemaObject | undefined;\n      content: OpenApiParameterObject['content'];\n    };\n\n    const queryName = sanitize(`${pascal(operationName)}${pascal(name)}`, {\n      underscore: '_',\n      whitespace: '_',\n      dash: true,\n      es5keyword: true,\n      es5IdentifierName: true,\n    });\n\n    const schema = schemaParam ?? content?.['application/json']?.schema;\n    if (!schema) {\n      throw new Error(\n        `Query parameter \"${name}\" has no schema or content definition`,\n      );\n    }\n\n    const resolvedValue = resolveValue({\n      schema,\n      context,\n      name: queryName,\n    });\n\n    const key = getKey(name);\n    // Bridge assertion: cast schema to jsDoc's expected parameter shape\n    // to avoid AnyOtherAttribute spreading error type\n    const schemaForDoc = schema as {\n      description?: string | string[];\n      deprecated?: boolean;\n      summary?: string;\n      minLength?: number;\n      maxLength?: number;\n      minimum?: number;\n      maximum?: number;\n      exclusiveMinimum?: number;\n      exclusiveMaximum?: number;\n      minItems?: number;\n      maxItems?: number;\n      type?: string | string[];\n      pattern?: string;\n    };\n    const doc = jsDoc(\n      {\n        description: parameter.description,\n        ...schemaForDoc,\n      },\n      void 0,\n      context,\n    );\n\n    if (parameterImports.length > 0) {\n      return {\n        name,\n        required,\n        definition: `${doc}${key}${!required || schema.default ? '?' : ''}: ${\n          parameterImports[0].name\n        };`,\n        imports: parameterImports,\n        schemas: [],\n        originalSchema: resolvedValue.originalSchema,\n      };\n    }\n\n    if (resolvedValue.isEnum && !resolvedValue.isRef) {\n      const enumName = queryName;\n      // Vendor extensions like `x-enum-varnames` may live on the parameter\n      // itself rather than inside `schema` — notably after a Swagger 2 → OAS 3\n      // upgrade, which moves standard schema fields into `schema` but leaves\n      // vendor extensions at the parameter level.\n      const parameterAsSchema = parameter as OpenApiSchemaObject;\n      const enumValue = getEnum(\n        resolvedValue.value,\n        enumName,\n        getEnumNames(resolvedValue.originalSchema) ??\n          getEnumNames(parameterAsSchema),\n        context.output.override.enumGenerationType,\n        getEnumDescriptions(resolvedValue.originalSchema) ??\n          getEnumDescriptions(parameterAsSchema),\n        context.output.override.namingConvention.enum,\n      );\n\n      return {\n        name,\n        required,\n        definition: `${doc}${key}${\n          !required || schema.default ? '?' : ''\n        }: ${enumName};`,\n        imports: [{ name: enumName }],\n        schemas: [\n          ...resolvedValue.schemas,\n          { name: enumName, model: enumValue, imports: resolvedValue.imports },\n        ],\n        originalSchema: resolvedValue.originalSchema,\n      };\n    }\n\n    const definition = `${doc}${key}${\n      !required || schema.default ? '?' : ''\n    }: ${resolvedValue.value};`;\n\n    return {\n      name,\n      required,\n      definition,\n      imports: resolvedValue.imports,\n      schemas: resolvedValue.schemas,\n      originalSchema: resolvedValue.originalSchema,\n    };\n  });\n}\n\ninterface GetQueryParamsOptions {\n  queryParams: GetterParameters['query'];\n  operationName: string;\n  context: ContextSpec;\n  suffix?: string;\n}\n\nexport function getQueryParams({\n  queryParams,\n  operationName,\n  context,\n  suffix = 'params',\n}: GetQueryParamsOptions): GetterQueryParam | undefined {\n  if (queryParams.length === 0) {\n    return;\n  }\n  const types = getQueryParamsTypes(queryParams, operationName, context);\n  const imports = types.flatMap(({ imports }) => imports);\n  const schemas = types.flatMap(({ schemas }) => schemas);\n  const name = `${pascal(operationName)}${pascal(suffix)}`;\n\n  const type = types.map(({ definition }) => definition).join('\\n');\n  const allOptional = queryParams.every(({ parameter }) => !parameter.required);\n  const requiredNullableKeys = types\n    .filter(\n      ({ required, originalSchema }) =>\n        required && isSchemaNullable(originalSchema),\n    )\n    .map(({ name }) => name);\n  const nonPrimitiveKeys = types\n    .filter(({ originalSchema }) => isSchemaNonPrimitive(originalSchema))\n    .map(({ name }) => name);\n\n  const schema = {\n    name,\n    model: `export type ${name} = {\\n${type}\\n};\\n`,\n    imports,\n  };\n\n  return {\n    schema,\n    deps: schemas,\n    isOptional: allOptional,\n    paramNames: types.map(({ name }) => name),\n    requiredNullableKeys,\n    ...(nonPrimitiveKeys.length > 0 ? { nonPrimitiveKeys } : {}),\n  };\n}\n","import type {\n  ContextSpec,\n  GetterResponse,\n  OpenApiResponsesObject,\n  OverrideOutputContentType,\n  ResReqTypesValue,\n} from '../types';\nimport {\n  dedupeUnionType,\n  filterByContentType,\n  isBinaryContentType,\n} from '../utils';\nimport { getResReqTypes } from './res-req-types';\n\ninterface GetResponseOptions {\n  responses: OpenApiResponsesObject;\n  operationName: string;\n  context: ContextSpec;\n  contentType?: OverrideOutputContentType;\n}\n\nexport function getResponse({\n  responses,\n  operationName,\n  context,\n  contentType,\n}: GetResponseOptions): GetterResponse {\n  const types = getResReqTypes(\n    Object.entries(responses),\n    operationName,\n    context,\n    'void',\n    (type) => `${type.key}-${type.value}-${type.contentType}`,\n  );\n\n  const filteredTypes = filterByContentType(types, contentType);\n\n  const imports = filteredTypes.flatMap(({ imports }) => imports);\n  const schemas = filteredTypes.flatMap(({ schemas }) => schemas);\n\n  const contentTypes = [\n    ...new Set(filteredTypes.map(({ contentType }) => contentType)),\n  ];\n\n  const groupedByStatus: {\n    success: ResReqTypesValue[];\n    errors: ResReqTypesValue[];\n  } = { success: [], errors: [] };\n  for (const type of filteredTypes) {\n    if (type.key.startsWith('2')) {\n      groupedByStatus.success.push(type);\n    } else {\n      groupedByStatus.errors.push(type);\n    }\n  }\n\n  const success = dedupeUnionType(\n    groupedByStatus.success\n      .map(({ value, formData }) => (formData ? 'Blob' : value))\n      .join(' | '),\n  );\n  const errors = dedupeUnionType(\n    groupedByStatus.errors.map(({ value }) => value).join(' | '),\n  );\n\n  const defaultType = filteredTypes.find(({ key }) => key === 'default')?.value;\n\n  return {\n    imports,\n    definition: {\n      success: success || (defaultType ?? 'unknown'),\n      errors: errors || (defaultType ?? 'unknown'),\n    },\n    isBlob: groupedByStatus.success.some(\n      (t) =>\n        (!!t.contentType && isBinaryContentType(t.contentType)) ||\n        t.originalSchema?.format === 'binary' ||\n        (t.originalSchema?.contentMediaType === 'application/octet-stream' &&\n          !t.originalSchema.contentEncoding),\n    ),\n    types: groupedByStatus,\n    contentTypes,\n    schemas,\n    originalSchema: responses,\n  };\n}\n","import { TEMPLATE_TAG_REGEX } from '../constants';\nimport type {\n  BaseUrlFromConstant,\n  BaseUrlFromSpec,\n  BaseUrlRuntime,\n  GeneratorImport,\n  NormalizedOutputOptions,\n  OpenApiServerObject,\n} from '../types';\nimport { camel, isObject, isString, sanitize } from '../utils';\n\nfunction isBaseUrlRuntime(\n  baseUrl: string | BaseUrlFromConstant | BaseUrlFromSpec | BaseUrlRuntime,\n): baseUrl is BaseUrlRuntime {\n  return (\n    isObject(baseUrl) &&\n    'runtime' in baseUrl &&\n    typeof baseUrl.runtime === 'string'\n  );\n}\n\n/**\n * Wraps a runtime expression for generated URL template literals.\n * Pass the expression only (e.g. `process.env.API_BASE_URL`), not a `${...}` fragment.\n */\nfunction runtimeExpressionToUrlPrefix(expression: string): string {\n  const t = expression.trim();\n  if (!t) return '';\n  return '${' + t + '}';\n}\n\nconst hasParam = (path: string): boolean => /[^{]*{[\\w*_-]*}.*/.test(path);\n\nconst getRoutePath = (path: string): string => {\n  const matches = /([^{]*){?([\\w*_-]*)}?(.*)/.exec(path);\n  if (!matches?.length) return path; // impossible due to regexp grouping here, but for TS\n\n  const prev = matches[1];\n  const rawParam = matches[2];\n  const rest = matches[3];\n  const param = sanitize(camel(rawParam), {\n    es5keyword: true,\n    underscore: true,\n    dash: true,\n    dot: true,\n  });\n  const next = hasParam(rest) ? getRoutePath(rest) : rest;\n\n  return hasParam(path)\n    ? `${prev}\\${${param}}${next}`\n    : `${prev}${param}${next}`;\n};\n\nexport function getRoute(route: string) {\n  const splittedRoute = route.split('/');\n\n  let result = '';\n  for (const [i, path] of splittedRoute.entries()) {\n    if (!path && !i) {\n      continue;\n    }\n\n    result += path.includes('{') ? `/${getRoutePath(path)}` : `/${path}`;\n  }\n  return result;\n}\n\nexport function getFullRoute(\n  route: string,\n  servers: OpenApiServerObject[] | undefined,\n  baseUrl:\n    | string\n    | BaseUrlFromConstant\n    | BaseUrlFromSpec\n    | BaseUrlRuntime\n    | undefined,\n): string {\n  const getBaseUrl = (): string => {\n    if (!baseUrl) return '';\n    if (isString(baseUrl)) return baseUrl;\n    if (isBaseUrlRuntime(baseUrl)) {\n      return runtimeExpressionToUrlPrefix(baseUrl.runtime);\n    }\n    if (baseUrl.getBaseUrlFromSpecification) {\n      if (!servers) {\n        throw new Error(\n          \"Orval is configured to use baseUrl from the specifications 'servers' field, but there exist no servers in the specification.\",\n        );\n      }\n      const server = servers.at(\n        Math.min(baseUrl.index ?? 0, servers.length - 1),\n      );\n      if (!server) return '';\n      const serverUrl = server.url ?? '';\n      if (!server.variables) return serverUrl;\n\n      let url = serverUrl;\n      const variables = baseUrl.variables;\n      for (const variableKey of Object.keys(server.variables)) {\n        const variable = server.variables[variableKey];\n        if (variables?.[variableKey]) {\n          if (\n            variable.enum &&\n            !variable.enum.some((e) => e == variables[variableKey])\n          ) {\n            throw new Error(\n              `Invalid variable value '${variables[variableKey]}' for variable '${variableKey}' when resolving ${serverUrl}. Valid values are: ${variable.enum.join(', ')}.`,\n            );\n          }\n          url = url.replaceAll(`{${variableKey}}`, variables[variableKey]);\n        } else {\n          url = url.replaceAll(`{${variableKey}}`, String(variable.default));\n        }\n      }\n      return url;\n    }\n    return baseUrl.baseUrl;\n  };\n\n  let fullRoute = route;\n  const base = getBaseUrl();\n  if (base) {\n    if (base.endsWith('/') && route.startsWith('/')) {\n      fullRoute = route.slice(1);\n    }\n    fullRoute = `${base}${fullRoute}`;\n  }\n  return fullRoute;\n}\n\n/**\n * Returns `GeneratorImport` entries for {@link BaseUrlRuntime.imports} when `baseUrl` is a runtime config.\n *\n * Defaults `values` to true so symbols in `runtime` emit as value imports in the\n * generated client. Set `values: false` explicitly only for unusual cases (e.g.\n * type-only symbols referenced from the expression).\n */\nexport function getBaseUrlRuntimeImports(\n  baseUrl?: NormalizedOutputOptions['baseUrl'],\n): GeneratorImport[] {\n  if (!baseUrl) return [];\n  if (!isBaseUrlRuntime(baseUrl)) return [];\n  return (baseUrl.imports ?? []).map((imp) => ({\n    ...imp,\n    values: imp.values ?? true,\n  }));\n}\n\n// Emits a codegen string: wraps each `${param}` segment of a template-literal\n// route so the generated client encodes path parameters at request time.\nexport const wrapRouteParameters = (\n  route: string,\n  prepend: string,\n  append: string,\n): string => route.replaceAll(TEMPLATE_TAG_REGEX, `\\${${prepend}$1${append}}`);\n\nexport const makeRouteSafe = (route: string): string =>\n  wrapRouteParameters(route, 'encodeURIComponent(String(', '))');\n\n// Creates a mixed use array with path variables and string from template string route\nexport function getRouteAsArray(route: string): string {\n  return route\n    .split('/')\n    .filter((i) => i !== '')\n    .flatMap((segment) => {\n      if (!segment.includes('${')) {\n        return [`'${segment}'`];\n      }\n      // Split by template tags, keeping the delimiters\n      return segment\n        .split(/(\\$\\{.+?\\})/g)\n        .filter(Boolean)\n        .map((part) => {\n          const match = /^\\$\\{(.+?)\\}$/.exec(part);\n          return match ? match[1] : `'${part}'`;\n        });\n    })\n    .join(',');\n}\n","import { entries, isEmptyish } from 'remeda';\n\nimport { getResReqTypes } from '../getters';\nimport type {\n  ContextSpec,\n  GeneratorSchema,\n  OpenApiComponentsObject,\n} from '../types';\nimport { jsDoc, pascal, sanitize } from '../utils';\n\nexport function generateComponentDefinition(\n  responses:\n    | OpenApiComponentsObject['responses']\n    | OpenApiComponentsObject['requestBodies'] = {},\n  context: ContextSpec,\n  suffix: string,\n): GeneratorSchema[] {\n  if (isEmptyish(responses)) {\n    return [];\n  }\n\n  const generatorSchemas: GeneratorSchema[] = [];\n  for (const [name, response] of entries(responses)) {\n    const allResponseTypes = getResReqTypes(\n      [[suffix, response]],\n      name,\n      context,\n      'void',\n    );\n\n    const imports = allResponseTypes.flatMap(({ imports }) => imports);\n    const schemas = allResponseTypes.flatMap(({ schemas }) => schemas);\n\n    const type = allResponseTypes.map(({ value }) => value).join(' | ');\n\n    const modelName = sanitize(`${pascal(name)}${suffix}`, {\n      underscore: '_',\n      whitespace: '_',\n      dash: true,\n      es5keyword: true,\n      es5IdentifierName: true,\n    });\n    const doc = jsDoc(response);\n    const model = `${doc}export type ${modelName} = ${type || 'unknown'};\\n`;\n\n    generatorSchemas.push(...schemas);\n\n    if (modelName !== type) {\n      generatorSchemas.push({\n        name: modelName,\n        model,\n        imports,\n      });\n    }\n  }\n\n  return generatorSchemas;\n}\n","import { resolveRef } from '../resolvers/ref';\nimport type {\n  ContextSpec,\n  GeneratorImport,\n  OpenApiReferenceObject,\n  OpenApiSchemaObject,\n} from '../types';\nimport { PropertySortOrder } from '../types';\nimport {\n  conventionName,\n  getFileInfo,\n  getSchemasImportPath,\n  isString,\n  logWarning,\n  pascal,\n  upath,\n} from '../utils';\n\nconst circularRefCache = new WeakMap<ContextSpec, Map<string, boolean>>();\n\nfunction getSchemasPath(context: ContextSpec): string {\n  const { schemas, target } = context.output;\n  if (schemas) {\n    const schemasPath = isString(schemas) ? schemas : schemas.path;\n    return upath.normalizeSafe(schemasPath);\n  }\n  const { dirname, filename } = getFileInfo(target);\n  return upath.joinSafe(dirname, filename + '.schemas');\n}\n\nfunction getSchemaImportPath(\n  refName: string,\n  context: ContextSpec,\n): string | undefined {\n  if (context.output.factoryMethods?.mode === 'single') {\n    return undefined;\n  }\n\n  const importPathBase = getSchemasImportPath(context.output.schemas);\n  if (importPathBase) {\n    const baseName = conventionName(refName, context.output.namingConvention);\n    return upath.joinSafe(importPathBase, baseName);\n  }\n\n  let outputDir = context.output.factoryMethods?.outputDirectory;\n  let schemasPath = getSchemasPath(context);\n\n  if (context.output.workspace) {\n    if (outputDir && !upath.isAbsolute(outputDir)) {\n      outputDir = upath.resolve(context.output.workspace, outputDir);\n    }\n    if (schemasPath && !upath.isAbsolute(schemasPath)) {\n      schemasPath = upath.resolve(context.output.workspace, schemasPath);\n    }\n  }\n\n  const relativePath = outputDir\n    ? upath.relativeSafe(outputDir, schemasPath)\n    : './';\n  const baseName = conventionName(refName, context.output.namingConvention);\n  return upath.joinSafe(relativePath, baseName);\n}\n\ntype SchemaArray = (OpenApiSchemaObject | OpenApiReferenceObject)[];\n\ninterface ResolvedRef {\n  imports: GeneratorImport[];\n  schema: OpenApiSchemaObject;\n}\n\nfunction isReference(\n  schema: OpenApiSchemaObject | OpenApiReferenceObject,\n): schema is OpenApiReferenceObject {\n  return '$ref' in schema;\n}\n\nfunction getResolvedRef(\n  schema: OpenApiReferenceObject,\n  context: ContextSpec,\n): ResolvedRef {\n  return resolveRef(schema, context) as ResolvedRef;\n}\n\nfunction getProperties(\n  schema: OpenApiSchemaObject,\n): Record<string, OpenApiSchemaObject | OpenApiReferenceObject> {\n  return (\n    (schema.properties as\n      | Record<string, OpenApiSchemaObject | OpenApiReferenceObject>\n      | undefined) ?? {}\n  );\n}\n\nfunction getItems(\n  schema: OpenApiSchemaObject,\n): OpenApiSchemaObject | OpenApiReferenceObject | undefined {\n  return schema.items as\n    | OpenApiSchemaObject\n    | OpenApiReferenceObject\n    | undefined;\n}\n\nfunction getAdditionalProperties(\n  schema: OpenApiSchemaObject,\n): OpenApiSchemaObject | OpenApiReferenceObject | boolean | undefined {\n  return schema.additionalProperties as\n    | OpenApiSchemaObject\n    | OpenApiReferenceObject\n    | boolean\n    | undefined;\n}\n\nfunction getSchemas(schemas: unknown): SchemaArray | undefined {\n  return schemas as SchemaArray | undefined;\n}\n\nfunction getExtendedProps(schema: OpenApiSchemaObject): {\n  constValue: unknown;\n  prefixItems: SchemaArray | undefined;\n  minItems: number | undefined;\n} {\n  const extended = schema as OpenApiSchemaObject & {\n    const?: unknown;\n    prefixItems?: SchemaArray;\n    minItems?: number;\n  };\n  return {\n    constValue: extended.const,\n    prefixItems: extended.prefixItems,\n    minItems: extended.minItems,\n  };\n}\n\nexport function generateFactory(\n  schema: OpenApiSchemaObject,\n  name: string,\n  context: ContextSpec,\n): { model: string; imports: GeneratorImport[] } | undefined {\n  if (!canGenerateSchema(schema) || !context.output.factoryMethods)\n    return undefined;\n\n  const { functionNamePrefix, mode } = context.output.factoryMethods;\n  const factoryName = `${functionNamePrefix}${pascal(name)}`;\n  const imports: GeneratorImport[] = [];\n  const payload = buildPayload(schema, context, [name], imports);\n\n  if (mode !== 'single') {\n    const schemaImportPath = getSchemaImportPath(name, context);\n    imports.push({ name, importPath: schemaImportPath });\n  }\n\n  return {\n    model: `export function ${factoryName}(): ${name} {\\n  return ${payload};\\n}\\n`,\n    imports,\n  };\n}\n\nfunction canGenerateSchema(schema: OpenApiSchemaObject): boolean {\n  return (\n    schema.type === 'object' ||\n    schema.type === 'array' ||\n    !!schema.properties ||\n    !!schema.allOf ||\n    !!schema.oneOf ||\n    !!schema.anyOf ||\n    !!schema.items ||\n    !!schema.enum\n  );\n}\n\nfunction hasCircularReference(\n  target: OpenApiSchemaObject | OpenApiReferenceObject,\n  sourceName: string,\n  context: ContextSpec,\n  visited = new Set<string>(),\n): boolean {\n  if (isReference(target)) {\n    const { imports, schema } = getResolvedRef(target, context);\n    const refName = imports[0]?.name;\n    if (refName === sourceName) return true;\n    if (refName && visited.has(refName)) return false;\n    if (refName) visited.add(refName);\n\n    let cache = circularRefCache.get(context);\n    if (!cache) {\n      cache = new Map<string, boolean>();\n      circularRefCache.set(context, cache);\n    }\n    const cacheKey = refName ? `${sourceName}::${refName}` : undefined;\n    if (cacheKey) {\n      const cached = cache.get(cacheKey);\n      if (cached !== undefined) {\n        return cached;\n      }\n    }\n\n    const result = hasCircularReference(schema, sourceName, context, visited);\n\n    if (cacheKey) {\n      cache.set(cacheKey, result);\n    }\n    return result;\n  }\n\n  const check = (schemas?: SchemaArray): boolean =>\n    schemas?.some((s) =>\n      hasCircularReference(s, sourceName, context, visited),\n    ) ?? false;\n\n  const items = getItems(target);\n  const additionalProperties = getAdditionalProperties(target);\n\n  return (\n    check(getSchemas(target.allOf)) ||\n    check(getSchemas(target.oneOf)) ||\n    check(getSchemas(target.anyOf)) ||\n    Object.values(getProperties(target)).some((s) =>\n      hasCircularReference(s, sourceName, context, visited),\n    ) ||\n    (!!items && hasCircularReference(items, sourceName, context, visited)) ||\n    (typeof additionalProperties === 'object' &&\n      hasCircularReference(additionalProperties, sourceName, context, visited))\n  );\n}\n\nfunction buildPayload(\n  target: OpenApiSchemaObject | OpenApiReferenceObject,\n  context: ContextSpec,\n  parents: string[],\n  imports: GeneratorImport[],\n): string {\n  if (isReference(target)) {\n    return buildRefPayload(target, context, parents, imports);\n  }\n\n  const schema = target;\n  const payloads: string[] = [];\n\n  if (schema.allOf) {\n    payloads.push(\n      buildAllOfPayload(\n        getSchemas(schema.allOf) ?? [],\n        context,\n        parents,\n        imports,\n      ),\n    );\n  } else if (schema.oneOf) {\n    payloads.push(\n      buildFirstOfPayload(\n        getSchemas(schema.oneOf) ?? [],\n        context,\n        parents,\n        imports,\n      ),\n    );\n  } else if (schema.anyOf) {\n    payloads.push(\n      buildFirstOfPayload(\n        getSchemas(schema.anyOf) ?? [],\n        context,\n        parents,\n        imports,\n      ),\n    );\n  }\n\n  if (Object.keys(getProperties(schema)).length > 0) {\n    payloads.push(buildObjectPayload(schema, context, parents, imports));\n  }\n\n  if (payloads.length > 0) {\n    return payloads.length === 1\n      ? payloads[0]\n      : `Object.assign({}, ${payloads.join(', ')})`;\n  }\n\n  const { constValue } = getExtendedProps(schema);\n  if (constValue !== undefined) return formatValue(constValue);\n  if (schema.default !== undefined) return buildDefaultPayload(schema, context);\n\n  const schemaType = inferSchemaType(schema);\n\n  if (schemaType === 'object') return '{}';\n  if (schemaType === 'array')\n    return buildArrayPayload(schema, context, parents, imports);\n\n  return buildPrimitivePayload(schema, schemaType, context);\n}\n\nfunction buildRefPayload(\n  schema: OpenApiReferenceObject,\n  context: ContextSpec,\n  parents: string[],\n  imports: GeneratorImport[],\n): string {\n  const { schema: resolved, imports: refImports } = getResolvedRef(\n    schema,\n    context,\n  );\n  const refName = refImports[0]?.name;\n\n  if (!refName) return '{}';\n\n  if (\n    parents.includes(refName) ||\n    hasCircularReference(resolved, parents[0], context)\n  ) {\n    imports.push({\n      name: refName,\n      importPath: getSchemaImportPath(refName, context),\n    });\n    return `{} as ${refName}`;\n  }\n\n  const { functionNamePrefix = 'create', mode = 'single' } =\n    context.output.factoryMethods ?? {};\n  const refFactoryName = `${functionNamePrefix}${pascal(refName)}`;\n\n  if (mode !== 'single-split') {\n    const importPath = resolveImportPath(mode, refName, context);\n    imports.push({ name: refFactoryName, importPath, isConstant: true });\n  }\n\n  imports.push({\n    name: refName,\n    importPath: getSchemaImportPath(refName, context),\n  });\n\n  return `${refFactoryName}()`;\n}\n\nfunction resolveImportPath(\n  mode: string,\n  refName: string,\n  context: ContextSpec,\n): string | undefined {\n  const baseName = conventionName(refName, context.output.namingConvention);\n  const pkgBase = getSchemasImportPath(context.output.schemas);\n\n  switch (mode) {\n    case 'split': {\n      return pkgBase\n        ? upath.joinSafe(pkgBase, `${baseName}.factory`)\n        : `./${baseName}.factory`;\n    }\n    case 'single-split': {\n      return pkgBase\n        ? upath.joinSafe(\n            pkgBase,\n            conventionName('factoryMethods', context.output.namingConvention),\n          )\n        : `./${conventionName('factoryMethods', context.output.namingConvention)}`;\n    }\n    case 'single': {\n      return pkgBase ? upath.joinSafe(pkgBase, baseName) : `./${baseName}`;\n    }\n  }\n}\n\nfunction buildAllOfPayload(\n  allOf: SchemaArray,\n  context: ContextSpec,\n  parents: string[],\n  imports: GeneratorImport[],\n): string {\n  const payloads = allOf.map((s) => buildPayload(s, context, parents, imports));\n  return payloads.length > 0\n    ? `Object.assign({}, ${payloads.join(', ')})`\n    : '{}';\n}\n\nfunction buildFirstOfPayload(\n  schemas: SchemaArray,\n  context: ContextSpec,\n  parents: string[],\n  imports: GeneratorImport[],\n): string {\n  const first = schemas[0];\n  return first ? buildPayload(first, context, parents, imports) : '{}';\n}\n\nfunction buildObjectPayload(\n  schema: OpenApiSchemaObject,\n  context: ContextSpec,\n  parents: string[],\n  imports: GeneratorImport[],\n): string {\n  const { includeOptionalProperty = false } =\n    context.output.factoryMethods ?? {};\n  const props = getProperties(schema);\n  const requiredProps: string[] =\n    (schema.required as string[] | undefined) ?? [];\n  const entries = Object.entries(props);\n\n  if (context.output.propertySortOrder === PropertySortOrder.ALPHABETICAL) {\n    entries.sort(([a], [b]) => a.localeCompare(b));\n  }\n\n  const includeOptional = includeOptionalProperty;\n  const lines: string[] = [];\n\n  for (const [key, prop] of entries) {\n    const isRequired = requiredProps.includes(key);\n    const resolved = isReference(prop)\n      ? getResolvedRef(prop, context).schema\n      : prop;\n\n    const isReadOnly =\n      !!(prop as OpenApiSchemaObject).readOnly || !!resolved.readOnly;\n    const isWriteOnly =\n      !!(prop as OpenApiSchemaObject).writeOnly || !!resolved.writeOnly;\n\n    if (!isRequired) {\n      if (isReadOnly) continue;\n      if (!isWriteOnly && !includeOptional) continue;\n    }\n\n    const payload = buildPayload(prop, context, parents, imports);\n    const safeKey = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)\n      ? key\n      : JSON.stringify(key);\n    lines.push(`${safeKey}: ${payload}`);\n  }\n\n  return `{\\n    ${lines.join(',\\n    ')}\\n  }`;\n}\n\nfunction buildArrayPayload(\n  schema: OpenApiSchemaObject,\n  context: ContextSpec,\n  parents: string[],\n  imports: GeneratorImport[],\n): string {\n  const { prefixItems, minItems } = getExtendedProps(schema);\n  const items = getItems(schema);\n\n  if (prefixItems && prefixItems.length > 0) {\n    const payloads = prefixItems.map((item) =>\n      buildPayload(item, context, parents, imports),\n    );\n    return `[${payloads.join(', ')}]`;\n  }\n\n  if (minItems && items) {\n    const MAX_MIN_ITEMS = 50;\n    if (minItems > MAX_MIN_ITEMS) {\n      logWarning(\n        `Warning: minItems is ${minItems}, capping at ${MAX_MIN_ITEMS} to prevent massive payload.`,\n      );\n    }\n    const count = Math.min(minItems, MAX_MIN_ITEMS);\n    const itemPayload = buildPayload(items, context, parents, imports);\n    return `[${Array.from<string>({ length: count })\n      .fill(itemPayload)\n      .join(', ')}]`;\n  }\n\n  return '[]';\n}\n\nfunction inferSchemaType(schema: OpenApiSchemaObject): string | undefined {\n  let type = schema.type as string | string[] | undefined;\n\n  if (Array.isArray(type)) {\n    const nonNull = type.filter((t) => t !== 'null');\n    type = nonNull.length > 0 ? nonNull[0] : 'null';\n  }\n\n  if (!type && schema.items) return 'array';\n\n  if (!type && schema.enum) {\n    const first = (schema.enum as unknown[])[0];\n    if (typeof first === 'number') return 'number';\n    if (typeof first === 'boolean') return 'boolean';\n    return 'string';\n  }\n\n  return type;\n}\n\nfunction buildDefaultPayload(\n  schema: OpenApiSchemaObject,\n  context: ContextSpec,\n): string {\n  if (\n    context.output.override.useDates &&\n    typeof schema.default === 'string' &&\n    (schema.format === 'date' || schema.format === 'date-time')\n  ) {\n    return `new Date('${schema.default}')`;\n  }\n  return formatValue(schema.default);\n}\n\nfunction buildPrimitivePayload(\n  schema: OpenApiSchemaObject,\n  schemaType: string | undefined,\n  context: ContextSpec,\n): string {\n  if (schemaType === 'null') return 'null';\n\n  const enumValues = schema.enum as unknown[] | undefined;\n\n  if (schemaType === 'boolean') {\n    return enumValues && enumValues.length > 0\n      ? String(enumValues[0])\n      : 'false';\n  }\n\n  if (schemaType === 'number' || schemaType === 'integer') {\n    return enumValues && enumValues.length > 0 ? String(enumValues[0]) : '0';\n  }\n\n  if (schemaType === 'string') {\n    if (enumValues && enumValues.length > 0) {\n      const first = enumValues[0];\n      return typeof first === 'string' ? JSON.stringify(first) : String(first);\n    }\n    if (schema.format === 'date' || schema.format === 'date-time') {\n      return context.output.override.useDates\n        ? 'new Date(0)'\n        : `'${new Date(0).toISOString()}'`;\n    }\n    return \"''\";\n  }\n\n  return 'undefined as unknown';\n}\n\nfunction formatValue(val: unknown): string {\n  if (val === null) return 'null';\n  if (typeof val === 'string') return JSON.stringify(val);\n  if (typeof val === 'object') return JSON.stringify(val);\n  return String(val as number | boolean);\n}\n","import { groupBy, unique, uniqueWith } from 'remeda';\n\nimport {\n  type GeneratorImport,\n  type GeneratorMutator,\n  type GeneratorVerbOptions,\n  GetterPropType,\n  NamingConvention,\n} from '../types';\nimport { conventionName } from '../utils';\nimport { escapeRegExp } from '../utils/string';\n\ninterface GenerateImportsOptions {\n  imports: readonly GeneratorImport[];\n  namingConvention?: NamingConvention;\n  importExtension?: string;\n}\n\nexport function generateImports({\n  imports,\n  namingConvention = NamingConvention.CAMEL_CASE,\n  importExtension = '',\n}: GenerateImportsOptions) {\n  if (imports.length === 0) {\n    return '';\n  }\n\n  const normalized = uniqueWith(\n    imports,\n    (a, b) =>\n      a.name === b.name &&\n      a.default === b.default &&\n      a.alias === b.alias &&\n      a.values === b.values &&\n      a.isConstant === b.isConstant &&\n      a.namespaceImport === b.namespaceImport &&\n      a.syntheticDefaultImport === b.syntheticDefaultImport &&\n      a.importPath === b.importPath,\n  ).map((imp) => ({\n    ...imp,\n    importPath:\n      imp.importPath ??\n      `./${conventionName(imp.name, namingConvention)}${importExtension}`,\n  }));\n\n  const grouped = groupBy(normalized, (imp) =>\n    !imp.default &&\n    !imp.namespaceImport &&\n    !imp.syntheticDefaultImport &&\n    !imp.values &&\n    !imp.isConstant\n      ? `aggregate|${imp.importPath}`\n      : `single|${imp.importPath}|${imp.name}|${imp.alias ?? ''}|${String(\n          imp.default,\n        )}|${String(imp.namespaceImport)}|${String(imp.syntheticDefaultImport)}|${String(\n          imp.values,\n        )}|${String(imp.isConstant)}`,\n  );\n\n  return Object.entries(grouped)\n    .toSorted(([a], [b]) => a.localeCompare(b, 'en', { numeric: true }))\n    .map(([, group]) => {\n      const sample = group[0];\n      const canAggregate =\n        !sample.default &&\n        !sample.namespaceImport &&\n        !sample.syntheticDefaultImport &&\n        !sample.values &&\n        !sample.isConstant;\n\n      if (canAggregate) {\n        const names = [\n          ...new Set(\n            group.map(\n              ({ name, alias }) => `${name}${alias ? ` as ${alias}` : ''}`,\n            ),\n          ),\n        ]\n          .toSorted()\n          .join(', ');\n\n        return `import type { ${names} } from '${sample.importPath}';`;\n      }\n\n      const { name, values, alias, isConstant, importPath } = sample;\n      return `import ${!values && !isConstant ? 'type ' : ''}{ ${name}${\n        alias ? ` as ${alias}` : ''\n      } } from '${importPath}';`;\n    })\n    .join('\\n');\n}\n\ninterface GenerateMutatorImportsOptions {\n  mutators: GeneratorMutator[];\n  implementation?: string;\n  oneMore?: boolean;\n}\n\nexport function generateMutatorImports({\n  mutators,\n  implementation,\n  oneMore,\n}: GenerateMutatorImportsOptions) {\n  let imports = '';\n  for (const mutator of uniqueWith(\n    mutators,\n    (a, b) => a.name === b.name && a.default === b.default,\n  )) {\n    // Relative mutator paths are written relative to the output root, so in\n    // tags-split mode (`oneMore`) they need an extra `../` to reach the file\n    // from the deeper per-tag directory. Bare specifiers (e.g. `@scope/axios`)\n    // and absolute paths do not depend on the importer's location and must be\n    // left untouched.\n    const isRelativeImport = mutator.path.startsWith('.');\n    const path = `${oneMore && isRelativeImport ? '../' : ''}${mutator.path}`;\n    const importDefault = mutator.default\n      ? mutator.name\n      : `{ ${mutator.name} }`;\n\n    imports += `import ${importDefault} from '${path}';`;\n    imports += '\\n';\n\n    if (implementation && (mutator.hasErrorType || mutator.bodyTypeName)) {\n      let errorImportName = '';\n      const targetErrorImportName = mutator.default\n        ? `ErrorType as ${mutator.errorTypeName}`\n        : mutator.errorTypeName;\n      if (\n        mutator.hasErrorType &&\n        implementation.includes(mutator.errorTypeName) &&\n        !imports.includes(`{ ${targetErrorImportName} `)\n      ) {\n        errorImportName = targetErrorImportName;\n      }\n\n      let bodyImportName = '';\n      const targetBodyImportName = mutator.default\n        ? `BodyType as ${mutator.bodyTypeName}`\n        : mutator.bodyTypeName;\n      if (\n        mutator.bodyTypeName &&\n        implementation.includes(mutator.bodyTypeName) &&\n        !imports.includes(` ${targetBodyImportName} }`)\n      ) {\n        bodyImportName = targetBodyImportName ?? '';\n      }\n\n      if (bodyImportName || errorImportName) {\n        imports += `import type { ${errorImportName}${\n          errorImportName && bodyImportName ? ' , ' : ''\n        }${bodyImportName} } from '${path}';`;\n        imports += '\\n';\n      }\n    }\n  }\n\n  return imports;\n}\n\ninterface GenerateDependencyOptions {\n  key: string;\n  deps: readonly GeneratorImport[];\n  dependency: string;\n  projectName?: string;\n  isAllowSyntheticDefaultImports: boolean;\n  onlyTypes: boolean;\n}\n\nfunction generateDependency({\n  deps,\n  isAllowSyntheticDefaultImports,\n  dependency,\n  projectName,\n  key,\n  onlyTypes,\n}: GenerateDependencyOptions) {\n  // find default import if dependency either is not a synthetic import or synthetic imports are allowed\n  const defaultDep = deps.find(\n    (e) =>\n      e.default &&\n      (isAllowSyntheticDefaultImports || !e.syntheticDefaultImport),\n  );\n\n  // if default dependency could not be created, check for namespace import or a synthetic import that is not allowed\n  const namespaceImportDep = defaultDep\n    ? undefined\n    : deps.find(\n        (e) =>\n          !!e.namespaceImport ||\n          (!isAllowSyntheticDefaultImports && e.syntheticDefaultImport),\n      );\n\n  // find all named imports\n  const depsString = unique(\n    deps\n      .filter(\n        (e) => !e.default && !e.syntheticDefaultImport && !e.namespaceImport,\n      )\n      .map(({ name, alias }) => (alias ? `${name} as ${alias}` : name)),\n  )\n    .toSorted()\n    .join(',\\n  ');\n\n  let importString = '';\n\n  // generate namespace import string\n  const namespaceImportString = namespaceImportDep\n    ? `import * as ${namespaceImportDep.name} from '${dependency}';`\n    : '';\n\n  if (namespaceImportString) {\n    if (deps.length === 1) {\n      // only namespace import, return it directly\n      return namespaceImportString;\n    }\n    importString += `${namespaceImportString}\\n`;\n  }\n\n  importString += `import ${onlyTypes ? 'type ' : ''}${\n    defaultDep ? `${defaultDep.name}${depsString ? ',' : ''}` : ''\n  }${depsString ? `{\\n  ${depsString}\\n}` : ''} from '${dependency}${\n    key !== 'default' && projectName ? `/${projectName}` : ''\n  }';`;\n\n  return importString;\n}\n\ninterface AddDependencyOptions {\n  implementation: string;\n  exports: readonly GeneratorImport[];\n  dependency: string;\n  projectName?: string;\n  hasSchemaDir: boolean;\n  isAllowSyntheticDefaultImports: boolean;\n}\n\nexport function addDependency({\n  implementation,\n  exports,\n  dependency,\n  projectName,\n  isAllowSyntheticDefaultImports,\n}: AddDependencyOptions) {\n  const toAdds = exports.filter((e) => {\n    const searchWords = [e.alias, e.name]\n      .filter((p): p is string => Boolean(p?.length))\n      .map((part) => escapeRegExp(part))\n      .join('|');\n\n    if (!searchWords) {\n      return false;\n    }\n\n    const pattern = new RegExp(String.raw`\\b(${searchWords})\\b`, 'g');\n\n    return implementation.match(pattern);\n  });\n\n  if (toAdds.length === 0) {\n    return;\n  }\n\n  const groupedBySpecKey: Record<\n    string,\n    { types: GeneratorImport[]; values: GeneratorImport[] }\n  > = { default: { types: [], values: [] } };\n  for (const dep of toAdds) {\n    const key = 'default';\n\n    if (\n      dep.values &&\n      (isAllowSyntheticDefaultImports || !dep.syntheticDefaultImport)\n    ) {\n      groupedBySpecKey[key].values.push(dep);\n    } else {\n      groupedBySpecKey[key].types.push(dep);\n    }\n  }\n\n  return (\n    Object.entries(groupedBySpecKey)\n      .map(([key, { values, types }]) => {\n        let dep = '';\n\n        if (values.length > 0) {\n          dep += generateDependency({\n            deps: values,\n            isAllowSyntheticDefaultImports,\n            dependency,\n            projectName,\n            key,\n            onlyTypes: false,\n          });\n        }\n\n        if (types.length > 0) {\n          let uniqueTypes = types;\n          if (values.length > 0) {\n            uniqueTypes = types.filter(\n              (t) =>\n                !values.some(\n                  (v) =>\n                    v.name === t.name && (v.alias ?? '') === (t.alias ?? ''),\n                ),\n            );\n          }\n          if (uniqueTypes.length > 0) {\n            if (values.length > 0) {\n              dep += '\\n';\n            }\n            dep += generateDependency({\n              deps: uniqueTypes,\n              isAllowSyntheticDefaultImports,\n              dependency,\n              projectName,\n              key,\n              onlyTypes: true,\n            });\n          }\n        }\n\n        return dep;\n      })\n      .join('\\n') + '\\n'\n  );\n}\n\nfunction getLibName(code: string) {\n  const splitString = code.split(' from ');\n  return (splitString.at(-1) ?? '').split(';')[0].trim();\n}\n\nexport function generateDependencyImports(\n  implementation: string,\n  imports: {\n    exports: readonly GeneratorImport[];\n    dependency: string;\n  }[],\n  projectName: string | undefined,\n  hasSchemaDir: boolean,\n  isAllowSyntheticDefaultImports: boolean,\n): string {\n  const dependencies = imports\n    .map((dep) =>\n      addDependency({\n        ...dep,\n        implementation,\n        projectName,\n        hasSchemaDir,\n        isAllowSyntheticDefaultImports,\n      }),\n    )\n    // eslint-disable-next-line unicorn/prefer-native-coercion-functions -- type predicate (x is string) required for narrowing\n    .filter((x): x is string => Boolean(x))\n    .toSorted((a, b) => {\n      const aLib = getLibName(a);\n      const bLib = getLibName(b);\n\n      if (aLib === bLib) {\n        return 0;\n      }\n\n      if (aLib.startsWith(\"'.\") && !bLib.startsWith(\"'.\")) {\n        return 1;\n      }\n      return aLib < bLib ? -1 : 1;\n    })\n    .join('\\n');\n\n  return dependencies ? dependencies + '\\n' : '';\n}\n\nexport function generateVerbImports({\n  response,\n  body,\n  queryParams,\n  props,\n  headers,\n  params,\n}: GeneratorVerbOptions): GeneratorImport[] {\n  const imports: GeneratorImport[] = [\n    ...response.imports,\n    ...body.imports,\n    ...props.flatMap((prop) =>\n      prop.type === GetterPropType.NAMED_PATH_PARAMS\n        ? [{ name: prop.schema.name }]\n        : [],\n    ),\n    ...(queryParams ? [{ name: queryParams.schema.name }] : []),\n    ...(headers ? [{ name: headers.schema.name }] : []),\n    ...params.flatMap<GeneratorImport>(({ imports }) => imports),\n  ];\n\n  // Zod schema named `Error` is a common collision with the global `Error` value.\n  // If we need it as a runtime value (e.g. `.parse()`), alias the value import to\n  // `ErrorSchema` while keeping the `Error` type available.\n  return imports.flatMap((imp) => {\n    if (imp.name !== 'Error' || !imp.values || imp.alias) {\n      return [imp];\n    }\n\n    return [\n      // Type-only import keeps `Error` usable as a type.\n      { ...imp, values: undefined },\n      // Value import is aliased to avoid shadowing `globalThis.Error`.\n      { ...imp, alias: 'ErrorSchema', values: true },\n    ];\n  });\n}\n","import type {\n  InputFiltersOptions,\n  NormalizedInputOptions,\n  OpenApiDocument,\n  OpenApiOperationObject,\n  OpenApiPathItemObject,\n} from '../types';\n\nconst COMPONENT_TYPES = [\n  'schemas',\n  'responses',\n  'parameters',\n  'requestBodies',\n] as const;\n\ntype ComponentType = (typeof COMPONENT_TYPES)[number];\n\nexport function filteredVerbs(\n  verbs: OpenApiPathItemObject,\n  filters: NormalizedInputOptions['filters'],\n) {\n  if (filters?.tags === undefined) {\n    return Object.entries(verbs);\n  }\n\n  const filterTags = filters.tags;\n  const filterMode = filters.mode ?? 'include';\n\n  return Object.entries(verbs).filter(\n    ([, operation]: [string, OpenApiOperationObject]) => {\n      // Bridge assertion: operation.tags is `any` due to AnyOtherAttribute\n      const operationTags = (operation.tags ?? []) as string[];\n\n      const isMatch = operationTags.some((tag) =>\n        filterTags.some((filterTag) =>\n          filterTag instanceof RegExp ? filterTag.test(tag) : filterTag === tag,\n        ),\n      );\n\n      return filterMode === 'exclude' ? !isMatch : isMatch;\n    },\n  );\n}\n\nfunction findRefs(value: unknown): string[] {\n  if (!value || typeof value !== 'object') return [];\n  if (Array.isArray(value)) return value.flatMap((item) => findRefs(item));\n\n  const obj = value as Record<string, unknown>;\n\n  const refs: string[] = [];\n  if (typeof obj.$ref === 'string') {\n    refs.push(obj.$ref);\n  }\n  return refs.concat(Object.values(obj).flatMap((val) => findRefs(val)));\n}\n\nfunction parseComponentRef(\n  ref: string,\n): { type: ComponentType; name: string } | undefined {\n  const parts = ref.split('/');\n\n  if (parts[0] !== '#' || parts[1] !== 'components' || parts.length < 4) {\n    return undefined;\n  }\n\n  const type = parts[2];\n  const name = parts[3];\n\n  if (!COMPONENT_TYPES.includes(type as ComponentType)) {\n    return undefined;\n  }\n\n  return { type: type as ComponentType, name };\n}\n\nfunction getComponentNames(\n  refs: string[],\n  spec: OpenApiDocument,\n): { type: ComponentType; name: string }[] {\n  return refs\n    .map((ref) => parseComponentRef(ref))\n    .filter(\n      (parsed): parsed is { type: ComponentType; name: string } =>\n        !!parsed && !!spec.components?.[parsed.type]?.[parsed.name],\n    );\n}\n\nfunction resolveReferencedComponents(\n  refs: string[],\n  spec: OpenApiDocument,\n  resolved: Record<ComponentType, string[]>,\n): Record<ComponentType, string[]> {\n  const newComponents = getComponentNames(refs, spec).filter(\n    ({ type, name }) => !resolved[type].includes(name),\n  );\n\n  if (newComponents.length === 0) return resolved;\n\n  const nextResolved: Record<ComponentType, string[]> = {\n    schemas: [...resolved.schemas],\n    responses: [...resolved.responses],\n    parameters: [...resolved.parameters],\n    requestBodies: [...resolved.requestBodies],\n  };\n\n  for (const { type, name } of newComponents) {\n    nextResolved[type].push(name);\n  }\n\n  const nextRefs = newComponents.flatMap(({ type, name }) =>\n    findRefs(spec.components?.[type]?.[name]),\n  );\n\n  return resolveReferencedComponents(nextRefs, spec, nextResolved);\n}\n\nexport const collectReferencedComponents = (\n  spec: OpenApiDocument,\n  tags: (string | RegExp)[],\n  mode: InputFiltersOptions['mode'],\n): Record<ComponentType, string[]> => {\n  const filters = { tags, mode };\n  const refs = Object.values(spec.paths ?? {})\n    .filter((pathItem): pathItem is OpenApiPathItemObject => !!pathItem)\n    .flatMap((pathItem) => {\n      const verbs = filteredVerbs(pathItem, filters);\n      return [\n        ...verbs.flatMap(([, operation]) => findRefs(operation)),\n        ...findRefs(pathItem.parameters),\n      ];\n    });\n\n  return resolveReferencedComponents(refs, spec, {\n    schemas: [],\n    responses: [],\n    parameters: [],\n    requestBodies: [],\n  });\n};\n","import type { GeneratorSchema } from '../types';\n\nexport function generateModelInline(acc: string, model: string): string {\n  return acc + `${model}\\n`;\n}\n\nexport function generateModelsInline(\n  obj: Record<string, GeneratorSchema[]> | GeneratorSchema[],\n): string {\n  const schemas = Array.isArray(obj) ? obj : Object.values(obj).flat();\n\n  let result = '';\n  for (const { model } of schemas) {\n    result = generateModelInline(result, model);\n  }\n  return result;\n}\n","import { Parser, type Program } from 'acorn';\nimport { build, type BuildOptions } from 'esbuild';\nimport { isArray } from 'remeda';\n\nimport type { GeneratorMutatorParsingInfo, Tsconfig } from '../types';\n\nexport async function getMutatorInfo(\n  filePath: string,\n  options?: {\n    root?: string;\n    namedExport?: string;\n    alias?: Record<string, string>;\n    external?: string[];\n    tsconfig?: Tsconfig;\n  },\n): Promise<GeneratorMutatorParsingInfo | undefined> {\n  const {\n    root = process.cwd(),\n    namedExport = 'default',\n    alias,\n    external,\n    tsconfig,\n  } = options ?? {};\n\n  const code = await bundleFile(\n    root,\n    filePath,\n    alias,\n    external,\n    tsconfig?.compilerOptions,\n  );\n\n  return parseFile(code, namedExport);\n}\n\nasync function bundleFile(\n  root: string,\n  fileName: string,\n  alias?: Record<string, string>,\n  external?: string[],\n  compilerOptions?: Tsconfig['compilerOptions'],\n): Promise<string> {\n  const result = await build({\n    absWorkingDir: root,\n    entryPoints: [fileName],\n    write: false,\n    platform: 'node',\n    bundle: true,\n    format: 'esm',\n    metafile: false,\n    target: compilerOptions?.target ?? 'es6',\n    minify: false,\n    minifyIdentifiers: false,\n    minifySyntax: false,\n    minifyWhitespace: false,\n    treeShaking: false,\n    keepNames: false,\n    alias,\n    external: external ?? ['*'],\n  } satisfies BuildOptions);\n  const { text } = result.outputFiles[0];\n\n  return text;\n}\n\nfunction parseFile(\n  file: string,\n  name: string,\n): GeneratorMutatorParsingInfo | undefined {\n  try {\n    // `file` is esbuild's bundled output, not the user's source. esbuild may\n    // emit any modern syntax (notably dynamic `import()`, which it preserves\n    // even when targeting es6 in ESM mode), so we parse with the latest\n    // ecmaVersion to avoid spurious SyntaxErrors that would mask the export\n    // we are looking for. See https://github.com/orval-labs/orval/issues/1634.\n    const ast = Parser.parse(file, {\n      ecmaVersion: 'latest',\n      sourceType: 'module',\n    });\n\n    const foundExport = ast.body\n      .filter((x) => x.type === 'ExportNamedDeclaration')\n      .map((declaration) => ({\n        declaration,\n        specifier: declaration.specifiers.find(\n          (specifier) =>\n            specifier.exported.type === 'Identifier' &&\n            specifier.exported.name === name &&\n            specifier.local.type === 'Identifier',\n        ),\n      }))\n      .find((item) => item.specifier);\n\n    const foundSpecifier = foundExport?.specifier;\n\n    if (foundExport && foundSpecifier && 'name' in foundSpecifier.local) {\n      const exportedFuncName = foundSpecifier.local.name;\n\n      const mutatorInfo = parseFunction(ast, exportedFuncName);\n      if (mutatorInfo) {\n        return mutatorInfo;\n      }\n\n      if (\n        foundExport.declaration.source ||\n        isImportedBinding(ast, exportedFuncName)\n      ) {\n        return standardMutatorInfo();\n      }\n    }\n  } catch {\n    return;\n  }\n}\n\nfunction isImportedBinding(ast: Program, name: string): boolean {\n  return ast.body.some((node) => {\n    if (node.type !== 'ImportDeclaration') {\n      return false;\n    }\n\n    return node.specifiers.some(\n      (specifier) => 'name' in specifier.local && specifier.local.name === name,\n    );\n  });\n}\n\n// Default for mutator exports where arity cannot be inspected:\n// factory-pattern CallExpression initializers (e.g. `axios.create({...})`)\n// and external re-exports. In both cases, the AST cannot reveal the returned\n// callable's arity, so we assume the orval standard contract:\n// a single-arg mutator invoked as `customInstance({ url, method, data, ... })`.\n// See https://github.com/orval-labs/orval/issues/3402 and\n// https://github.com/orval-labs/orval/issues/2342.\nfunction standardMutatorInfo(): GeneratorMutatorParsingInfo {\n  return { numberOfParams: 1 };\n}\n\nfunction parseFunction(\n  ast: Program,\n  funcName: string,\n): GeneratorMutatorParsingInfo | undefined {\n  const node = ast.body.find((childNode) => {\n    if (childNode.type === 'VariableDeclaration') {\n      return childNode.declarations.find(\n        (d) => d.id.type === 'Identifier' && d.id.name === funcName,\n      );\n    }\n    if (\n      childNode.type === 'FunctionDeclaration' &&\n      childNode.id.name === funcName\n    ) {\n      return childNode;\n    }\n  });\n\n  if (!node) {\n    return;\n  }\n\n  if (node.type === 'FunctionDeclaration') {\n    const returnStatement = node.body.body.find(\n      (b) => b.type === 'ReturnStatement',\n    );\n\n    // If the function directly returns an arrow function\n    if (returnStatement?.argument && 'params' in returnStatement.argument) {\n      return {\n        numberOfParams: node.params.length,\n        returnNumberOfParams: returnStatement.argument.params.length,\n      };\n      // If the function returns a CallExpression (e.g., return useCallback(...))\n    } else if (returnStatement?.argument?.type === 'CallExpression') {\n      const arrowFn = returnStatement.argument.arguments.at(0);\n      if (arrowFn?.type === 'ArrowFunctionExpression') {\n        return {\n          numberOfParams: node.params.length,\n          returnNumberOfParams: arrowFn.params.length,\n        };\n      }\n    }\n    return {\n      numberOfParams: node.params.length,\n    };\n  }\n\n  const declaration =\n    'declarations' in node\n      ? node.declarations.find(\n          (d) => d.id.type === 'Identifier' && d.id.name === funcName,\n        )\n      : undefined;\n\n  if (declaration?.init) {\n    if ('name' in declaration.init) {\n      return parseFunction(ast, declaration.init.name);\n    }\n\n    // Init is a factory CallExpression — see standardMutatorInfo() above.\n    if (declaration.init.type === 'CallExpression') {\n      return standardMutatorInfo();\n    }\n\n    if (\n      'body' in declaration.init &&\n      'params' in declaration.init &&\n      declaration.init.body.type === 'ArrowFunctionExpression'\n    ) {\n      return {\n        numberOfParams: declaration.init.params.length,\n        returnNumberOfParams: declaration.init.body.params.length,\n      };\n    }\n\n    const returnStatement =\n      'body' in declaration.init &&\n      'body' in declaration.init.body &&\n      isArray(declaration.init.body.body)\n        ? declaration.init.body.body.find((b) => b.type === 'ReturnStatement')\n        : undefined;\n\n    if ('params' in declaration.init) {\n      if (returnStatement?.argument && 'params' in returnStatement.argument) {\n        return {\n          numberOfParams: declaration.init.params.length,\n          returnNumberOfParams: returnStatement.argument.params.length,\n        };\n      } else if (\n        returnStatement?.argument?.type === 'CallExpression' &&\n        returnStatement.argument.arguments[0]?.type ===\n          'ArrowFunctionExpression'\n      ) {\n        const arrowFn = returnStatement.argument.arguments[0];\n        return {\n          numberOfParams: declaration.init.params.length,\n          returnNumberOfParams: arrowFn.params.length,\n        };\n      }\n\n      return {\n        numberOfParams: declaration.init.params.length,\n      };\n    }\n  }\n}\n","import { styleText } from 'node:util';\n\nimport fs from 'fs-extra';\n\nimport type { GeneratorMutator, NormalizedMutator, Tsconfig } from '../types';\nimport { getFileInfo, pascal, upath } from '../utils';\nimport { getMutatorInfo } from './mutator-info';\n\nexport const BODY_TYPE_NAME = 'BodyType';\n\nconst getImport = (output: string, mutator: NormalizedMutator) => {\n  const outputFile = getFileInfo(output).path;\n  return `${upath.getRelativeImportPath(outputFile, mutator.path)}${mutator.extension ?? ''}`;\n};\n\ninterface GenerateMutatorOptions {\n  output?: string;\n  mutator?: NormalizedMutator;\n  name: string;\n  workspace: string;\n  tsconfig?: Tsconfig;\n}\n\nexport async function generateMutator({\n  output,\n  mutator,\n  name,\n  workspace,\n  tsconfig,\n}: GenerateMutatorOptions): Promise<GeneratorMutator | undefined> {\n  if (!mutator || !output) {\n    return;\n  }\n  const isDefault = mutator.default;\n  const importName = mutator.name ?? `${name}Mutator`;\n  const importPath = mutator.path;\n  const mutatorInfoName = isDefault ? 'default' : mutator.name;\n\n  if (mutatorInfoName === undefined) {\n    throw new Error(\n      styleText(\n        'red',\n        `Mutator ${importPath} must have a named or default export.`,\n      ),\n    );\n  }\n\n  let rawFile = await fs.readFile(importPath, 'utf8');\n  rawFile = removeComments(rawFile);\n\n  const hasErrorType =\n    rawFile.includes('export type ErrorType') ||\n    rawFile.includes('export interface ErrorType');\n\n  const hasBodyType =\n    rawFile.includes(`export type ${BODY_TYPE_NAME}`) ||\n    rawFile.includes(`export interface ${BODY_TYPE_NAME}`);\n\n  const errorTypeName = mutator.default\n    ? `${pascal(name)}ErrorType`\n    : 'ErrorType';\n\n  const bodyTypeName = mutator.default\n    ? `${pascal(name)}${BODY_TYPE_NAME}`\n    : BODY_TYPE_NAME;\n\n  const mutatorInfo = await getMutatorInfo(importPath, {\n    root: workspace,\n    namedExport: mutatorInfoName,\n    alias: mutator.alias,\n    external: mutator.external,\n    tsconfig,\n  });\n\n  if (!mutatorInfo) {\n    throw new Error(\n      styleText(\n        'red',\n        `Your mutator file doesn't have the ${mutatorInfoName} exported function`,\n      ),\n    );\n  }\n\n  const importStatementPath = getImport(output, mutator);\n\n  const isHook = mutator.name\n    ? mutator.name.startsWith('use') && !mutatorInfo.numberOfParams\n    : !mutatorInfo.numberOfParams;\n\n  return {\n    name: mutator.name || !isHook ? importName : `use${pascal(importName)}`,\n    path: importStatementPath,\n    default: isDefault,\n    hasErrorType,\n    errorTypeName,\n    hasSecondArg: isHook\n      ? (mutatorInfo.returnNumberOfParams ?? 0) > 1\n      : mutatorInfo.numberOfParams > 1,\n    hasThirdArg: mutatorInfo.numberOfParams > 2,\n    isHook,\n    ...(hasBodyType ? { bodyTypeName } : {}),\n  };\n}\n\nfunction removeComments(file: string) {\n  // Regular expression to match single-line and multi-line comments\n  const commentRegex = /\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//g;\n\n  // Remove comments from the rawFile string\n  const cleanedFile = file.replaceAll(commentRegex, '');\n\n  return cleanedFile;\n}\n","import { getSuccessResponseType } from '../getters/res-req-types';\nimport {\n  type GeneratorMutator,\n  type GeneratorSchema,\n  type GetterBody,\n  type GetterQueryParam,\n  type GetterResponse,\n  type ParamsSerializerOptions,\n  Verbs,\n} from '../types';\nimport { getIsBodyVerb, isObject, stringify } from '../utils';\n\n/**\n * Filters query params for Angular's HttpClient.\n *\n * Why: Angular's HttpParams / HttpClient `params` type does not accept `null` or\n * `undefined` values, and arrays must only contain string/number/boolean.\n * Orval models often include nullable query params, so we remove nullish values\n * (including nulls inside arrays) before passing params to HttpClient or a\n * paramsSerializer to avoid runtime and type issues.\n *\n * Returns an inline IIFE expression. For paths that benefit from a shared helper\n * (e.g. observe-mode branches), prefer getAngularFilteredParamsCallExpression +\n * getAngularFilteredParamsHelperBody instead.\n */\nexport const getAngularFilteredParamsExpression = (\n  paramsExpression: string,\n  requiredNullableParamKeys: string[] = [],\n  preserveRequiredNullables = false,\n  nonPrimitiveKeys: string[] = [],\n): string => {\n  const hasPassthrough = nonPrimitiveKeys.length > 0;\n  const filteredParamValueType = hasPassthrough\n    ? 'unknown'\n    : `string | number | boolean${preserveRequiredNullables ? ' | null' : ''} | Array<string | number | boolean>`;\n  const passthroughBranch = hasPassthrough\n    ? `    if (passthroughKeys.has(key)) {\n      if (value !== undefined) {\n        filteredParams[key] = value;\n      }\n      continue;\n    }\n`\n    : '';\n  const preserveNullableBranch = preserveRequiredNullables\n    ? `    } else if (value === null && requiredNullableParamKeys.has(key)) {\n      filteredParams[key] = null;\n`\n    : '';\n  const scalarBranch = `    } else if (\n      value != null &&\n      (typeof value === 'string' ||\n        typeof value === 'number' ||\n        typeof value === 'boolean')\n    ) {\n      filteredParams[key] = value;\n    }\n`;\n  const passthroughDecl = hasPassthrough\n    ? `  const passthroughKeys = new Set<string>(${JSON.stringify(nonPrimitiveKeys)});\\n`\n    : '';\n\n  return `(() => {\n${passthroughDecl}  const requiredNullableParamKeys = new Set<string>(${JSON.stringify(requiredNullableParamKeys)});\n  const filteredParams: Record<string, ${filteredParamValueType}> = {};\n  for (const [key, value] of Object.entries(${paramsExpression})) {\n${passthroughBranch}    if (Array.isArray(value)) {\n      const filtered = value.filter(\n        (item) =>\n          item != null &&\n          (typeof item === 'string' ||\n            typeof item === 'number' ||\n            typeof item === 'boolean'),\n      ) as Array<string | number | boolean>;\n      if (filtered.length) {\n        filteredParams[key] = filtered;\n      }\n${preserveNullableBranch}${scalarBranch}  }\n  return filteredParams;\n})()`;\n};\n\n/**\n * Returns the body of a standalone `filterParams` helper function\n * to be emitted once in the generated file header, replacing the\n * inline IIFE that was previously duplicated in every method.\n */\nexport const getAngularFilteredParamsHelperBody = (): string =>\n  `type AngularHttpParamValue = string | number | boolean | Array<string | number | boolean>;\ntype AngularHttpParamValueWithNullable = AngularHttpParamValue | null;\n\nfunction filterParams(\n  params: Record<string, unknown>,\n  requiredNullableKeys?: ReadonlySet<string>,\n  preserveRequiredNullables?: false,\n  passthroughKeys?: undefined,\n): Record<string, AngularHttpParamValue>;\nfunction filterParams(\n  params: Record<string, unknown>,\n  requiredNullableKeys: ReadonlySet<string> | undefined,\n  preserveRequiredNullables: true,\n  passthroughKeys?: undefined,\n): Record<string, AngularHttpParamValueWithNullable>;\nfunction filterParams(\n  params: Record<string, unknown>,\n  requiredNullableKeys: ReadonlySet<string> | undefined,\n  preserveRequiredNullables: boolean | undefined,\n  passthroughKeys: ReadonlySet<string>,\n): Record<string, unknown>;\nfunction filterParams(\n  params: Record<string, unknown>,\n  requiredNullableKeys: ReadonlySet<string> = new Set(),\n  preserveRequiredNullables = false,\n  passthroughKeys: ReadonlySet<string> = new Set(),\n): Record<string, unknown> {\n  const filteredParams: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(params)) {\n    if (passthroughKeys.has(key)) {\n      if (value !== undefined) {\n        filteredParams[key] = value;\n      }\n      continue;\n    }\n    if (Array.isArray(value)) {\n      const filtered = value.filter(\n        (item) =>\n          item != null &&\n          (typeof item === 'string' ||\n            typeof item === 'number' ||\n            typeof item === 'boolean'),\n      ) as Array<string | number | boolean>;\n      if (filtered.length) {\n        filteredParams[key] = filtered;\n      }\n    } else if (\n      preserveRequiredNullables &&\n      value === null &&\n      requiredNullableKeys.has(key)\n    ) {\n      filteredParams[key] = null;\n    } else if (\n      value != null &&\n      (typeof value === 'string' ||\n        typeof value === 'number' ||\n        typeof value === 'boolean')\n    ) {\n      filteredParams[key] = value;\n    }\n  }\n  return filteredParams;\n}`;\n\n/**\n * Returns a call expression to the `filterParams` helper function.\n */\nexport const getAngularFilteredParamsCallExpression = (\n  paramsExpression: string,\n  requiredNullableParamKeys: string[] = [],\n  preserveRequiredNullables = false,\n  nonPrimitiveKeys: string[] = [],\n): string => {\n  const baseArgs = `${paramsExpression}, new Set<string>(${JSON.stringify(requiredNullableParamKeys)})`;\n  if (nonPrimitiveKeys.length > 0) {\n    return `filterParams(${baseArgs}, ${preserveRequiredNullables}, new Set<string>(${JSON.stringify(nonPrimitiveKeys)}))`;\n  }\n  return `filterParams(${baseArgs}${preserveRequiredNullables ? ', true' : ''})`;\n};\n\n/**\n * Returns the filter call/IIFE used to massage query params before passing\n * them to Angular's HttpParams. When the user supplied a `paramsFilter`\n * mutator, the built-in `filterParams` is bypassed entirely and the user's\n * function is called with the raw params — they own nullish-stripping and\n * any object/array handling. Otherwise the built-in filter is used (either\n * the shared helper or an inline IIFE), and callers should only pass\n * `nonPrimitiveKeys` when a downstream serializer or custom consumer can\n * legally handle raw object/array values.\n */\nexport const buildAngularParamsFilterExpression = ({\n  paramsExpression,\n  requiredNullableParamKeys = [],\n  preserveRequiredNullables = false,\n  nonPrimitiveKeys = [],\n  paramsFilter,\n  useSharedHelper,\n}: {\n  paramsExpression: string;\n  requiredNullableParamKeys?: string[];\n  preserveRequiredNullables?: boolean;\n  nonPrimitiveKeys?: string[];\n  paramsFilter?: GeneratorMutator;\n  useSharedHelper: boolean;\n}): string => {\n  if (paramsFilter) {\n    return `${paramsFilter.name}(${paramsExpression})`;\n  }\n  if (useSharedHelper) {\n    return getAngularFilteredParamsCallExpression(\n      paramsExpression,\n      requiredNullableParamKeys,\n      preserveRequiredNullables,\n      nonPrimitiveKeys,\n    );\n  }\n  return getAngularFilteredParamsExpression(\n    paramsExpression,\n    requiredNullableParamKeys,\n    preserveRequiredNullables,\n    nonPrimitiveKeys,\n  );\n};\n\ninterface GenerateFormDataAndUrlEncodedFunctionOptions {\n  body: GetterBody;\n  formData?: GeneratorMutator;\n  formUrlEncoded?: GeneratorMutator;\n  isFormData: boolean;\n  isFormUrlEncoded: boolean;\n}\n\nexport function generateBodyOptions(\n  body: GetterBody,\n  isFormData: boolean,\n  isFormUrlEncoded: boolean,\n): string | undefined {\n  if (isFormData && body.formData) {\n    return 'formData';\n  }\n\n  if (isFormUrlEncoded && body.formUrlEncoded) {\n    return 'formUrlEncoded';\n  }\n\n  if (body.implementation) {\n    return body.implementation;\n  }\n\n  return undefined;\n}\n\ninterface GenerateAxiosOptions {\n  response: GetterResponse;\n  isExactOptionalPropertyTypes: boolean;\n  angularObserve?: 'body' | 'events' | 'response';\n  angularParamsRef?: string;\n  requiredNullableQueryParamKeys?: string[];\n  nonPrimitiveQueryParamKeys?: string[];\n  queryParams?: GeneratorSchema;\n  headers?: GeneratorSchema;\n  requestOptions?: object | boolean;\n  hasSignal: boolean;\n  hasSignalParam?: boolean;\n  isVue: boolean;\n  isAngular: boolean;\n  paramsSerializer?: GeneratorMutator;\n  paramsSerializerOptions?: ParamsSerializerOptions;\n  paramsFilter?: GeneratorMutator;\n}\n\nexport function generateAxiosOptions({\n  response,\n  isExactOptionalPropertyTypes,\n  angularObserve,\n  angularParamsRef,\n  requiredNullableQueryParamKeys,\n  nonPrimitiveQueryParamKeys,\n  queryParams,\n  headers,\n  requestOptions,\n  hasSignal,\n  hasSignalParam = false,\n  isVue,\n  isAngular,\n  paramsSerializer,\n  paramsSerializerOptions,\n  paramsFilter,\n}: GenerateAxiosOptions) {\n  const isRequestOptions = requestOptions !== false;\n  const angularPassthroughQueryParamKeys = paramsSerializer\n    ? nonPrimitiveQueryParamKeys\n    : [];\n  // Use querySignal if API has a param named \"signal\" to avoid conflict\n  const signalVar = hasSignalParam ? 'querySignal' : 'signal';\n  const signalProp = hasSignalParam ? `signal: ${signalVar}` : 'signal';\n\n  if (\n    !queryParams &&\n    !headers &&\n    !response.isBlob &&\n    response.definition.success !== 'string'\n  ) {\n    if (isRequestOptions) {\n      return isAngular\n        ? angularObserve\n          ? `{\n        ...(options as Omit<NonNullable<typeof options>, 'observe'>),\n        observe: '${angularObserve}',\n      }`\n          : \"(options as Omit<NonNullable<typeof options>, 'observe'>)\"\n        : 'options';\n    }\n    if (hasSignal) {\n      return isExactOptionalPropertyTypes\n        ? `...(${signalVar} ? { ${signalProp} } : {})`\n        : signalProp;\n    }\n    return '';\n  }\n\n  let value = '';\n\n  if (!isRequestOptions) {\n    if (queryParams) {\n      if (isAngular) {\n        const iifeExpr = buildAngularParamsFilterExpression({\n          paramsExpression: 'params ?? {}',\n          requiredNullableParamKeys: requiredNullableQueryParamKeys,\n          preserveRequiredNullables: !!paramsSerializer,\n          nonPrimitiveKeys: angularPassthroughQueryParamKeys,\n          paramsFilter,\n          useSharedHelper: false,\n        });\n        value += paramsSerializer\n          ? `\\n        params: ${paramsSerializer.name}(${iifeExpr}),`\n          : `\\n        params: ${iifeExpr},`;\n      } else {\n        value += '\\n        params,';\n      }\n    }\n\n    if (headers) {\n      value += '\\n        headers,';\n    }\n\n    if (hasSignal) {\n      value += isExactOptionalPropertyTypes\n        ? `\\n        ...(${signalVar} ? { ${signalProp} } : {}),`\n        : `\\n        ${signalProp},`;\n    }\n  }\n\n  if (\n    !isObject(requestOptions) ||\n    !Object.hasOwn(requestOptions, 'responseType')\n  ) {\n    const successResponseType = getSuccessResponseType(response);\n    if (successResponseType) {\n      value += `\\n        responseType: '${successResponseType}',`;\n    }\n  }\n\n  if (isObject(requestOptions)) {\n    value += `\\n ${stringify(requestOptions)?.slice(1, -1)}`;\n  }\n\n  if (isRequestOptions) {\n    value += isAngular\n      ? \"\\n    ...(options as Omit<NonNullable<typeof options>, 'observe'>),\"\n      : '\\n    ...options,';\n\n    if (isAngular && angularObserve) {\n      value += `\\n        observe: '${angularObserve}',`;\n    }\n\n    if (queryParams) {\n      if (isVue) {\n        value += '\\n        params: {...unref(params), ...options?.params},';\n      } else if (isAngular && angularParamsRef) {\n        value += `\\n        params: ${angularParamsRef},`;\n      } else if (isAngular && paramsSerializer) {\n        const callExpr = buildAngularParamsFilterExpression({\n          paramsExpression: '{...params, ...options?.params}',\n          requiredNullableParamKeys: requiredNullableQueryParamKeys,\n          preserveRequiredNullables: true,\n          nonPrimitiveKeys: angularPassthroughQueryParamKeys,\n          paramsFilter,\n          useSharedHelper: true,\n        });\n        value += `\\n        params: ${paramsSerializer.name}(${callExpr}),`;\n      } else if (isAngular) {\n        const callExpr = buildAngularParamsFilterExpression({\n          paramsExpression: '{...params, ...options?.params}',\n          requiredNullableParamKeys: requiredNullableQueryParamKeys,\n          nonPrimitiveKeys: angularPassthroughQueryParamKeys,\n          paramsFilter,\n          useSharedHelper: true,\n        });\n        value += `\\n        params: ${callExpr},`;\n      } else {\n        value += '\\n        params: {...params, ...options?.params},';\n      }\n    }\n\n    if (headers) {\n      value += '\\n        headers: {...headers, ...options?.headers},';\n    }\n  }\n\n  if (\n    !isAngular &&\n    queryParams &&\n    (paramsSerializer || paramsSerializerOptions?.qs)\n  ) {\n    const qsOptions = paramsSerializerOptions?.qs;\n    value += paramsSerializer\n      ? `\\n        paramsSerializer: ${paramsSerializer.name},`\n      : `\\n        paramsSerializer: (params) => qs.stringify(params, ${JSON.stringify(\n          qsOptions,\n        )}),`;\n  }\n\n  return value;\n}\n\ninterface GenerateOptionsOptions {\n  route: string;\n  body: GetterBody;\n  angularObserve?: 'body' | 'events' | 'response';\n  angularParamsRef?: string;\n  headers?: GetterQueryParam;\n  queryParams?: GetterQueryParam;\n  response: GetterResponse;\n  verb: Verbs;\n  requestOptions?: object | boolean;\n  isFormData: boolean;\n  isFormUrlEncoded: boolean;\n  isAngular?: boolean;\n  isExactOptionalPropertyTypes: boolean;\n  hasSignal: boolean;\n  hasSignalParam?: boolean;\n  isVue?: boolean;\n  paramsSerializer?: GeneratorMutator;\n  paramsSerializerOptions?: ParamsSerializerOptions;\n  paramsFilter?: GeneratorMutator;\n}\n\nexport function generateOptions({\n  route,\n  body,\n  angularObserve,\n  angularParamsRef,\n  headers,\n  queryParams,\n  response,\n  verb,\n  requestOptions,\n  isFormData,\n  isFormUrlEncoded,\n  isAngular,\n  isExactOptionalPropertyTypes,\n  hasSignal,\n  hasSignalParam,\n  isVue,\n  paramsSerializer,\n  paramsSerializerOptions,\n  paramsFilter,\n}: GenerateOptionsOptions) {\n  const bodyIdentifier = getIsBodyVerb(verb)\n    ? generateBodyOptions(body, isFormData, isFormUrlEncoded)\n    : undefined;\n\n  const axiosOptions = generateAxiosOptions({\n    response,\n    angularObserve,\n    angularParamsRef,\n    requiredNullableQueryParamKeys: queryParams?.requiredNullableKeys,\n    nonPrimitiveQueryParamKeys: queryParams?.nonPrimitiveKeys,\n    queryParams: queryParams?.schema,\n    headers: headers?.schema,\n    requestOptions,\n    isExactOptionalPropertyTypes,\n    hasSignal,\n    hasSignalParam,\n    isVue: isVue ?? false,\n    isAngular: isAngular ?? false,\n    paramsSerializer,\n    paramsSerializerOptions,\n    paramsFilter,\n  });\n\n  const trimmedAxiosOptions = axiosOptions.trim();\n  const isRawOptionsArgument =\n    trimmedAxiosOptions === 'options' ||\n    (trimmedAxiosOptions.startsWith('(') &&\n      trimmedAxiosOptions.endsWith(')')) ||\n    (trimmedAxiosOptions.startsWith('{') && trimmedAxiosOptions.endsWith('}'));\n\n  const optionsArgument = axiosOptions\n    ? isRawOptionsArgument\n      ? axiosOptions\n      : `{${axiosOptions}}`\n    : '';\n\n  if (verb === Verbs.DELETE) {\n    if (!bodyIdentifier) {\n      return `\\n      \\`${route}\\`${optionsArgument ? `,${optionsArgument}` : ''}\\n    `;\n    }\n\n    const deleteBodyOptions = isRawOptionsArgument\n      ? `...${optionsArgument}`\n      : axiosOptions;\n    const deleteBodyField = `${isAngular ? 'body' : 'data'}: ${bodyIdentifier}`;\n\n    return `\\n      \\`${route}\\`,{${deleteBodyField}${axiosOptions ? `,${deleteBodyOptions}` : ''}}\\n    `;\n  }\n\n  const bodyOrOptions = getIsBodyVerb(verb)\n    ? `\\n      ${bodyIdentifier ?? 'undefined'},`\n    : '';\n  const separator = bodyOrOptions || optionsArgument ? ',' : '';\n\n  return `\\n      \\`${route}\\`${separator}${bodyOrOptions}${optionsArgument}\\n    `;\n}\n\nexport function generateBodyMutatorConfig(\n  body: GetterBody,\n  isFormData: boolean,\n  isFormUrlEncoded: boolean,\n) {\n  if (isFormData && body.formData) {\n    return ',\\n       data: formData';\n  }\n\n  if (isFormUrlEncoded && body.formUrlEncoded) {\n    return ',\\n       data: formUrlEncoded';\n  }\n\n  if (body.implementation) {\n    return `,\\n      data: ${body.implementation}`;\n  }\n\n  return '';\n}\n\nexport function generateQueryParamsAxiosConfig(\n  response: GetterResponse,\n  isVue: boolean,\n  isAngular: boolean,\n  requiredNullableQueryParamKeys?: string[],\n  queryParams?: GetterQueryParam,\n  paramsFilter?: GeneratorMutator,\n) {\n  if (!queryParams && !response.isBlob) {\n    return '';\n  }\n\n  let value = '';\n\n  if (queryParams) {\n    if (isVue) {\n      value += ',\\n        params: unref(params)';\n    } else if (isAngular) {\n      const paramsExpr = buildAngularParamsFilterExpression({\n        paramsExpression: 'params ?? {}',\n        requiredNullableParamKeys: requiredNullableQueryParamKeys,\n        nonPrimitiveKeys: queryParams.nonPrimitiveKeys,\n        paramsFilter,\n        useSharedHelper: false,\n      });\n      value += `,\\n        params: ${paramsExpr}`;\n    } else {\n      value += ',\\n        params';\n    }\n  }\n\n  if (response.isBlob) {\n    value += `,\\n        responseType: 'blob'`;\n  }\n\n  return value;\n}\n\ninterface GenerateMutatorConfigOptions {\n  route: string;\n  body: GetterBody;\n  headers?: GetterQueryParam;\n  queryParams?: GetterQueryParam;\n  response: GetterResponse;\n  verb: Verbs;\n  isFormData: boolean;\n  isFormUrlEncoded: boolean;\n  hasSignal: boolean;\n  hasSignalParam?: boolean;\n  isExactOptionalPropertyTypes: boolean;\n  isVue?: boolean;\n  isAngular?: boolean;\n  paramsFilter?: GeneratorMutator;\n}\n\nexport function generateMutatorConfig({\n  route,\n  body,\n  headers,\n  queryParams,\n  response,\n  verb,\n  isFormData,\n  isFormUrlEncoded,\n  hasSignal,\n  hasSignalParam = false,\n  isExactOptionalPropertyTypes,\n  isVue,\n  isAngular,\n  paramsFilter,\n}: GenerateMutatorConfigOptions) {\n  const bodyOptions = getIsBodyVerb(verb)\n    ? generateBodyMutatorConfig(body, isFormData, isFormUrlEncoded)\n    : '';\n\n  const queryParamsOptions = generateQueryParamsAxiosConfig(\n    response,\n    isVue ?? false,\n    isAngular ?? false,\n    queryParams?.requiredNullableKeys,\n    queryParams,\n    paramsFilter,\n  );\n\n  const ignoreContentTypes = isAngular ? ['multipart/form-data'] : [];\n  const shouldSetContentType =\n    body.contentType && !ignoreContentTypes.includes(body.contentType);\n\n  const headerOptions = shouldSetContentType\n    ? `,\\n      headers: {'Content-Type': '${body.contentType}', ${\n        headers ? '...headers' : ''\n      }}`\n    : headers\n      ? ',\\n      headers'\n      : '';\n\n  // Use querySignal if API has a param named \"signal\" to avoid conflict\n  const signalVar = hasSignalParam ? 'querySignal' : 'signal';\n  const signalProp = hasSignalParam ? `signal: ${signalVar}` : 'signal';\n\n  return `{url: \\`${route}\\`, method: '${verb.toUpperCase()}'${headerOptions}${bodyOptions}${queryParamsOptions}${\n    hasSignal\n      ? `, ${\n          isExactOptionalPropertyTypes\n            ? `...(${signalVar} ? { ${signalProp} }: {})`\n            : signalProp\n        }`\n      : ''\n  }\\n    }`;\n}\n\nexport function generateMutatorRequestOptions(\n  requestOptions: boolean | object | undefined,\n  hasSecondArgument: boolean,\n) {\n  if (!hasSecondArgument) {\n    return isObject(requestOptions)\n      ? `{${stringify(requestOptions)?.slice(1, -1)}}`\n      : '';\n  }\n\n  if (isObject(requestOptions)) {\n    return `{${stringify(requestOptions)?.slice(1, -1)} ...options}`;\n  }\n\n  return 'options';\n}\n\nexport function generateFormDataAndUrlEncodedFunction({\n  body,\n  formData,\n  formUrlEncoded,\n  isFormData,\n  isFormUrlEncoded,\n}: GenerateFormDataAndUrlEncodedFunctionOptions) {\n  if (isFormData && body.formData) {\n    if (formData) {\n      return `const formData = ${formData.name}(${body.implementation})`;\n    }\n\n    return body.formData;\n  }\n\n  if (isFormUrlEncoded && body.formUrlEncoded) {\n    if (formUrlEncoded) {\n      return `const formUrlEncoded = ${formUrlEncoded.name}(${body.implementation})`;\n    }\n\n    return body.formUrlEncoded;\n  }\n\n  return '';\n}\n","import { entries, isEmptyish } from 'remeda';\n\nimport { resolveObject, resolveRef } from '../resolvers';\nimport type {\n  ContextSpec,\n  GeneratorImport,\n  GeneratorSchema,\n  OpenApiComponentsObject,\n  OpenApiParameterObject,\n  OpenApiReferenceObject,\n  OpenApiSchemaObject,\n} from '../types';\nimport { jsDoc, pascal, sanitize } from '../utils';\n\nexport function generateParameterDefinition(\n  parameters: OpenApiComponentsObject['parameters'] = {},\n  context: ContextSpec,\n  suffix: string,\n): GeneratorSchema[] {\n  if (isEmptyish(parameters)) {\n    return [];\n  }\n\n  const generatorSchemas: GeneratorSchema[] = [];\n  for (const [parameterName, parameter] of entries(parameters)) {\n    const modelName = sanitize(`${pascal(parameterName)}${suffix}`, {\n      underscore: '_',\n      whitespace: '_',\n      dash: true,\n      es5keyword: true,\n      es5IdentifierName: true,\n    });\n    const {\n      schema,\n      imports,\n    }: {\n      schema: OpenApiParameterObject;\n      imports: GeneratorImport[];\n    } = resolveRef(parameter, context);\n\n    if (schema.in !== 'query' && schema.in !== 'header') {\n      continue;\n    }\n\n    if (!schema.schema || imports.length > 0) {\n      generatorSchemas.push({\n        name: modelName,\n        imports:\n          imports.length > 0\n            ? [\n                {\n                  name: imports[0].name,\n                  schemaName: imports[0].schemaName,\n                },\n              ]\n            : [],\n        model: `export type ${modelName} = ${\n          imports.length > 0 ? imports[0].name : 'unknown'\n        };\\n`,\n        dependencies: imports.length > 0 ? [imports[0].name] : [],\n      });\n\n      continue;\n    }\n\n    const resolvedObject = resolveObject({\n      schema: schema.schema as OpenApiSchemaObject | OpenApiReferenceObject,\n      propName: modelName,\n      context,\n    });\n\n    const doc = jsDoc(schema);\n\n    const model = `${doc}export type ${modelName} = ${\n      resolvedObject.value || 'unknown'\n    };\\n`;\n\n    generatorSchemas.push(...resolvedObject.schemas);\n\n    if (modelName !== resolvedObject.value) {\n      generatorSchemas.push({\n        name: modelName,\n        model,\n        imports: resolvedObject.imports,\n        dependencies: resolvedObject.dependencies,\n      });\n    }\n  }\n\n  return generatorSchemas;\n}\n","import { getScalar } from '../getters';\nimport type {\n  ContextSpec,\n  OpenApiReferenceObject,\n  OpenApiSchemaObject,\n} from '../types';\nimport { jsDoc } from '../utils';\n\ninterface GenerateInterfaceOptions {\n  name: string;\n  schema: OpenApiSchemaObject;\n  context: ContextSpec;\n  genericParams?: string[];\n}\n\n/**\n * Generate the interface string\n * An eslint comment is insert if the resulted object is empty\n *\n * @param name interface name\n * @param schema\n */\nexport function generateInterface({\n  name,\n  schema,\n  context,\n  genericParams,\n}: GenerateInterfaceOptions) {\n  const scalar = getScalar({\n    item: schema,\n    name,\n    context,\n  });\n  const isEmptyObject = scalar.value === '{}';\n  const shouldUseTypeAlias =\n    context.output.override.useTypeOverInterfaces ?? scalar.useTypeAlias;\n  const genericSuffix =\n    genericParams && genericParams.length > 0\n      ? `<${genericParams.join(', ')}>`\n      : '';\n\n  let model = '';\n\n  model += jsDoc(schema);\n\n  if (isEmptyObject) {\n    model +=\n      '// eslint-disable-next-line @typescript-eslint/no-empty-interface\\n';\n  }\n\n  if (scalar.type === 'object' && !shouldUseTypeAlias) {\n    // Bridge assertion: schema.properties is `any` due to AnyOtherAttribute\n    const properties = schema.properties as\n      | Record<string, OpenApiSchemaObject | OpenApiReferenceObject>\n      | undefined;\n    if (\n      properties &&\n      Object.values(properties).length > 0 &&\n      Object.values(properties).every((item) => 'const' in item)\n    ) {\n      const mappedScalarValue = scalar.value\n        .replaceAll(';', ',')\n        .replaceAll('?:', ':');\n\n      model += `export const ${name}Value = ${mappedScalarValue} as const;\\nexport type ${name}${genericSuffix} = typeof ${name}Value;\\n`;\n    } else {\n      const blankInterfaceValue =\n        scalar.value === 'unknown' ? '{}' : scalar.value;\n\n      model += `export interface ${name}${genericSuffix} ${blankInterfaceValue}\\n`;\n    }\n  } else {\n    model += `export type ${name}${genericSuffix} = ${scalar.value};\\n`;\n  }\n\n  // Filter out imports that refer to the type defined in current file (OpenAPI recursive schema definitions)\n  const externalModulesImportsOnly = scalar.imports.filter((importName) =>\n    importName.alias ? importName.alias !== name : importName.name !== name,\n  );\n\n  return [\n    ...scalar.schemas,\n    {\n      name,\n      model,\n      imports: externalModulesImportsOnly,\n      dependencies: scalar.dependencies,\n      schema,\n    },\n  ];\n}\n","import { isDereferenced } from '@scalar/openapi-types/helpers';\nimport { isArray, isEmptyish } from 'remeda';\n\nimport {\n  getEnum,\n  getEnumDescriptions,\n  getEnumNames,\n  resolveDiscriminators,\n} from '../getters';\nimport {\n  buildDynamicScope,\n  dynamicAnchorsToUniqueParamNames,\n  dynamicAnchorToParamName,\n  extractBoundAliasInfo,\n  resolveRef,\n  resolveValue,\n} from '../resolvers';\nimport type {\n  ContextSpec,\n  GeneratorSchema,\n  InputFiltersOptions,\n  OpenApiReferenceObject,\n  OpenApiSchemaObject,\n  OpenApiSchemasObject,\n} from '../types';\nimport {\n  conventionName,\n  isBoolean,\n  isString,\n  jsDoc,\n  pascal,\n  sanitize,\n} from '../utils';\nimport { generateFactory } from './factory';\nimport { generateInterface } from './interface';\n\n/**\n * Extract all types from #/components/schemas\n */\nexport function generateSchemasDefinition(\n  schemas: OpenApiSchemasObject = {},\n  context: ContextSpec,\n  suffix: string,\n  filters?: InputFiltersOptions,\n): GeneratorSchema[] {\n  if (isEmptyish(schemas)) {\n    return [];\n  }\n\n  const transformedSchemas = resolveDiscriminators(schemas, context);\n\n  let generateSchemas = Object.entries(transformedSchemas);\n  if (filters?.schemas) {\n    const schemasFilters = filters.schemas;\n    const mode = filters.mode ?? 'include';\n\n    generateSchemas = generateSchemas.filter(([schemaName]) => {\n      const isMatch = schemasFilters.some((filter) =>\n        isString(filter) ? filter === schemaName : filter.test(schemaName),\n      );\n\n      return mode === 'include' ? isMatch : !isMatch;\n    });\n  }\n\n  const models = generateSchemas.flatMap(([schemaName, schema]) =>\n    generateSchemaDefinitions(schemaName, schema, context, suffix),\n  );\n\n  // Deduplicate schemas by normalized name to prevent duplicate exports\n  // This handles cases where different source schemas produce the same normalized name\n  const seenNames = new Set<string>();\n  const deduplicatedModels: GeneratorSchema[] = [];\n  for (const schema of models) {\n    const normalizedName = conventionName(\n      schema.name,\n      context.output.namingConvention,\n    );\n    if (!seenNames.has(normalizedName)) {\n      seenNames.add(normalizedName);\n\n      if (context.output.factoryMethods && schema.schema) {\n        const factoryData = generateFactory(\n          schema.schema,\n          schema.name,\n          context,\n        );\n        if (factoryData) {\n          if (context.output.factoryMethods.mode === 'single') {\n            schema.model += `\\n${factoryData.model}`;\n            for (const imp of factoryData.imports) {\n              if (\n                !schema.imports.some((existing) => existing.name === imp.name)\n              ) {\n                schema.imports.push(imp);\n              }\n            }\n          } else {\n            schema.factory = factoryData.model;\n            schema.factoryImports = factoryData.imports;\n            schema.factoryMode = context.output.factoryMethods.mode;\n          }\n        }\n      }\n\n      deduplicatedModels.push(schema);\n    }\n  }\n\n  return sortSchemasByDependencies(deduplicatedModels);\n}\n\nfunction sortSchemasByDependencies(\n  schemas: GeneratorSchema[],\n): GeneratorSchema[] {\n  if (schemas.length === 0) {\n    return schemas;\n  }\n\n  const schemaNames = new Set(schemas.map((schema) => schema.name));\n  const dependencyMap = new Map<string, Set<string>>();\n\n  for (const schema of schemas) {\n    const dependencies = new Set<string>();\n\n    if (schema.dependencies)\n      for (const dependencyName of schema.dependencies) {\n        if (dependencyName && schemaNames.has(dependencyName)) {\n          dependencies.add(dependencyName);\n        }\n      }\n\n    for (const imp of schema.imports) {\n      const dependencyName = imp.alias ?? imp.name;\n      if (dependencyName && schemaNames.has(dependencyName)) {\n        dependencies.add(dependencyName);\n      }\n    }\n\n    dependencyMap.set(schema.name, dependencies);\n  }\n\n  const sorted: GeneratorSchema[] = [];\n  const temporary = new Set<string>();\n  const permanent = new Set<string>();\n  const schemaMap = new Map(schemas.map((schema) => [schema.name, schema]));\n\n  const visit = (name: string) => {\n    if (permanent.has(name)) {\n      return;\n    }\n\n    if (temporary.has(name)) {\n      // Circular dependency detected; retain current DFS order for this cycle\n      return;\n    }\n\n    temporary.add(name);\n\n    const dependencies = dependencyMap.get(name);\n    if (dependencies)\n      for (const dep of dependencies) {\n        if (dep !== name) {\n          visit(dep);\n        }\n      }\n\n    temporary.delete(name);\n    permanent.add(name);\n\n    const schema = schemaMap.get(name);\n    if (schema) {\n      sorted.push(schema);\n    }\n  };\n\n  for (const schema of schemas) visit(schema.name);\n\n  return sorted;\n}\n\nfunction shouldCreateInterface(schema: OpenApiSchemaObject) {\n  const isNullable = isArray(schema.type) && schema.type.includes('null');\n\n  return (\n    (!schema.type || schema.type === 'object') &&\n    !schema.allOf &&\n    !schema.oneOf &&\n    !schema.anyOf &&\n    isDereferenced(schema) &&\n    !schema.enum &&\n    !isNullable\n  );\n}\n\nfunction collectGenericParams(\n  schema: OpenApiSchemaObject | OpenApiReferenceObject,\n): { anchorName: string; paramName: string }[] {\n  const defs = (schema as Record<string, unknown>).$defs as\n    | Record<string, OpenApiSchemaObject>\n    | undefined;\n  if (!defs || typeof defs !== 'object') return [];\n  const anchors: string[] = [];\n  for (const defSchema of Object.values(defs)) {\n    if (!defSchema || typeof defSchema !== 'object') {\n      continue;\n    }\n    const rec = defSchema as Record<string, unknown>;\n    if (rec.$dynamicAnchor !== undefined && rec.$ref === undefined) {\n      anchors.push(rec.$dynamicAnchor as string);\n    }\n  }\n  const uniqueNames = dynamicAnchorsToUniqueParamNames(anchors);\n  return anchors.map((anchor) => ({\n    anchorName: anchor,\n    paramName: uniqueNames.get(anchor) ?? dynamicAnchorToParamName(anchor),\n  }));\n}\n\nfunction generateSchemaDefinitions(\n  schemaName: string,\n  schema: OpenApiSchemaObject,\n  context: ContextSpec,\n  suffix: string,\n): GeneratorSchema[] {\n  const sanitizedSchemaName = sanitize(`${pascal(schemaName)}${suffix}`, {\n    underscore: '_',\n    whitespace: '_',\n    dash: true,\n    es5keyword: true,\n    es5IdentifierName: true,\n  });\n\n  if (isBoolean(schema)) {\n    return [\n      {\n        name: sanitizedSchemaName,\n        model: `export type ${sanitizedSchemaName} = ${schema ? 'any' : 'never'};\\n`,\n        imports: [],\n        schema: schema as OpenApiSchemaObject,\n      },\n    ];\n  }\n\n  const alias = extractBoundAliasInfo(schema, context);\n  if (alias) {\n    const genericParams = alias.genericParams.map((paramName) => ({\n      anchorName: paramName,\n      paramName,\n    }));\n    const genericSuffix =\n      genericParams.length > 0\n        ? `<${genericParams.map((p) => p.paramName).join(', ')}>`\n        : '';\n\n    const typeArgsStr = alias.typeArgs.join(', ');\n    const genericPart = `${alias.genericName}<${typeArgsStr}>`;\n\n    const schemaType = schema.type as string | string[] | undefined;\n    const nullable =\n      (Array.isArray(schemaType) && schemaType.includes('null')) ||\n      schema.nullable === true\n        ? ' | null'\n        : '';\n\n    let model: string;\n    const allImports: { name: string; schemaName: string }[] = [\n      { name: alias.genericName, schemaName: alias.genericName },\n      ...alias.imports,\n    ];\n\n    if (alias.extraSchemas && alias.extraSchemas.length > 0) {\n      const aliasScopedContext = {\n        ...context,\n        dynamicScope: buildDynamicScope(schemaName, schema, context),\n      };\n      const subSchemas: GeneratorSchema[] = [];\n      const extraParts = alias.extraSchemas.map((extraSchema) => {\n        const resolved = resolveValue({\n          schema: extraSchema,\n          name: sanitizedSchemaName,\n          context: aliasScopedContext,\n        });\n        for (const imp of resolved.imports) {\n          const impSchemaName = imp.schemaName ?? imp.name;\n          if (\n            !allImports.some(\n              (a) => a.name === imp.name && a.schemaName === impSchemaName,\n            )\n          ) {\n            allImports.push({ name: imp.name, schemaName: impSchemaName });\n          }\n        }\n        for (const sub of resolved.schemas) {\n          if (sub.name !== sanitizedSchemaName) {\n            subSchemas.push(sub);\n          }\n        }\n        return resolved.value;\n      });\n      model = `export type ${sanitizedSchemaName}${genericSuffix} = (${[genericPart, ...extraParts].join(' & ')})${nullable};\\n`;\n      return [\n        ...subSchemas,\n        {\n          name: sanitizedSchemaName,\n          model,\n          imports: allImports,\n          dependencies: allImports.map((i) => i.name),\n          schema,\n        },\n      ];\n    } else {\n      model = `export type ${sanitizedSchemaName}${genericSuffix} = ${genericPart}${nullable};\\n`;\n    }\n\n    return [\n      {\n        name: sanitizedSchemaName,\n        model,\n        imports: allImports,\n        dependencies: allImports.map((i) => i.name),\n        schema,\n      },\n    ];\n  }\n\n  const scopedContext = isBoolean(schema)\n    ? context\n    : {\n        ...context,\n        dynamicScope: buildDynamicScope(schemaName, schema, context),\n      };\n\n  const genericParams = collectGenericParams(schema);\n\n  if (shouldCreateInterface(schema)) {\n    return generateInterface({\n      name: sanitizedSchemaName,\n      schema,\n      context: scopedContext,\n      genericParams:\n        genericParams.length > 0\n          ? genericParams.map((p) => p.paramName)\n          : undefined,\n    });\n  }\n\n  const resolvedValue = resolveValue({\n    schema,\n    name: sanitizedSchemaName,\n    context: scopedContext,\n  });\n\n  let output = '';\n\n  let imports = resolvedValue.imports;\n\n  output += jsDoc(schema);\n\n  if (resolvedValue.isEnum && !resolvedValue.isRef) {\n    output += getEnum(\n      resolvedValue.value,\n      sanitizedSchemaName,\n      getEnumNames(resolvedValue.originalSchema),\n      context.output.override.enumGenerationType,\n      getEnumDescriptions(resolvedValue.originalSchema),\n      context.output.override.namingConvention.enum,\n    );\n  } else if (\n    sanitizedSchemaName === resolvedValue.value &&\n    resolvedValue.isRef\n  ) {\n    // Don't add type if schema has same name and the referred schema will be an interface\n    const { schema: referredSchema } = resolveRef(schema, scopedContext);\n    if (!shouldCreateInterface(referredSchema as OpenApiSchemaObject)) {\n      const imp = resolvedValue.imports.find(\n        (imp) => imp.name === sanitizedSchemaName,\n      );\n\n      if (imp) {\n        const alias = `${resolvedValue.value}Bis`;\n\n        output += `export type ${sanitizedSchemaName} = ${alias};\\n`;\n\n        imports = imports.map((imp) =>\n          imp.name === sanitizedSchemaName ? { ...imp, alias } : imp,\n        );\n        resolvedValue.dependencies = [imp.name];\n      } else {\n        output += `export type ${sanitizedSchemaName} = ${resolvedValue.value};\\n`;\n      }\n    }\n  } else {\n    resolvedValue.schemas = resolvedValue.schemas.filter((schema) => {\n      if (schema.name !== sanitizedSchemaName) {\n        return true;\n      }\n\n      output += `${schema.model}\\n`;\n      imports = [...imports, ...schema.imports];\n      resolvedValue.dependencies.push(...(schema.dependencies ?? []));\n\n      return false;\n    });\n    const genericSuffix =\n      genericParams.length > 0\n        ? `<${genericParams.map((p) => p.paramName).join(', ')}>`\n        : '';\n    output += `export type ${sanitizedSchemaName}${genericSuffix} = ${resolvedValue.value};\\n`;\n  }\n\n  return [\n    ...resolvedValue.schemas,\n    {\n      name: sanitizedSchemaName,\n      model: output,\n      imports,\n      dependencies: resolvedValue.dependencies,\n      schema,\n    },\n  ];\n}\n","import {\n  getBodiesByContentType,\n  getBody,\n  getOperationId,\n  getParameters,\n  getParams,\n  getProps,\n  getQueryParams,\n  getResponse,\n} from '../getters';\nimport type {\n  ContextSpec,\n  GeneratorVerbOptions,\n  GeneratorVerbsOptions,\n  GetterBody,\n  NormalizedInputOptions,\n  NormalizedMutator,\n  NormalizedOperationOptions,\n  NormalizedOutputOptions,\n  NormalizedOverrideOutput,\n  OpenApiComponentsObject,\n  OpenApiOperationObject,\n  OpenApiPathItemObject,\n  OpenApiRequestBodyObject,\n  Verbs,\n} from '../types';\nimport {\n  asyncReduce,\n  camel,\n  dynamicImport,\n  isObject,\n  isString,\n  isVerb,\n  jsDoc,\n  mergeDeep,\n  sanitize,\n} from '../utils';\nimport { filteredVerbs } from './input-filters';\nimport { generateMutator } from './mutator';\n\nexport interface GenerateVerbOptionsParams {\n  verb: Verbs;\n  output: NormalizedOutputOptions;\n  operation: OpenApiOperationObject;\n  route: string;\n  pathRoute: string;\n  verbParameters?: OpenApiPathItemObject['parameters'];\n  components?: OpenApiComponentsObject;\n  context: ContextSpec;\n}\n\nasync function buildVerbOption({\n  verb,\n  output,\n  operation,\n  route,\n  pathRoute,\n  verbParameters = [],\n  context,\n  body,\n  operationName,\n  operationId,\n  override,\n  tags,\n  deprecated,\n  description,\n  summary,\n}: {\n  verb: Verbs;\n  output: NormalizedOutputOptions;\n  operation: OpenApiOperationObject;\n  route: string;\n  pathRoute: string;\n  verbParameters: OpenApiPathItemObject['parameters'];\n  context: ContextSpec;\n  body: GetterBody;\n  operationName: string;\n  operationId: string;\n  override: NormalizedOverrideOutput;\n  tags: string[];\n  deprecated: boolean | undefined;\n  description: string | undefined;\n  summary: string | undefined;\n}): Promise<GeneratorVerbOptions> {\n  const response = getResponse({\n    responses: operation.responses ?? {},\n    operationName,\n    context,\n    contentType: override.contentType,\n  });\n\n  const parameters = getParameters({\n    parameters: [...verbParameters, ...(operation.parameters ?? [])],\n    context,\n  });\n\n  const queryParams = getQueryParams({\n    queryParams: parameters.query,\n    operationName,\n    context,\n  });\n\n  const headers = output.headers\n    ? getQueryParams({\n        queryParams: parameters.header,\n        operationName,\n        context,\n        suffix: 'headers',\n      })\n    : undefined;\n\n  const params = getParams({\n    route,\n    pathParams: parameters.path,\n    operationId,\n    context,\n    output,\n  });\n\n  const props = getProps({\n    body,\n    queryParams,\n    params,\n    headers,\n    operationName,\n    context,\n  });\n\n  const mutator = await generateMutator({\n    output: output.target,\n    name: operationName,\n    mutator: override.mutator,\n    workspace: context.workspace,\n    tsconfig: context.output.tsconfig,\n  });\n\n  const formData =\n    !override.formData.disabled && body.formData\n      ? await generateMutator({\n          output: output.target,\n          name: operationName,\n          mutator: override.formData.mutator,\n          workspace: context.workspace,\n          tsconfig: context.output.tsconfig,\n        })\n      : undefined;\n\n  const formUrlEncoded =\n    isString(override.formUrlEncoded) || isObject(override.formUrlEncoded)\n      ? await generateMutator({\n          output: output.target,\n          name: operationName,\n          mutator: override.formUrlEncoded as NormalizedMutator,\n          workspace: context.workspace,\n          tsconfig: context.output.tsconfig,\n        })\n      : undefined;\n\n  const paramsSerializer =\n    isString(override.paramsSerializer) || isObject(override.paramsSerializer)\n      ? await generateMutator({\n          output: output.target,\n          name: 'paramsSerializer',\n          mutator: override.paramsSerializer as NormalizedMutator,\n          workspace: context.workspace,\n          tsconfig: context.output.tsconfig,\n        })\n      : undefined;\n\n  const paramsFilter =\n    isString(override.paramsFilter) || isObject(override.paramsFilter)\n      ? await generateMutator({\n          output: output.target,\n          name: 'paramsFilter',\n          mutator: override.paramsFilter as NormalizedMutator,\n          workspace: context.workspace,\n          tsconfig: context.output.tsconfig,\n        })\n      : undefined;\n\n  const fetchReviver =\n    isString(override.fetch.jsonReviver) || isObject(override.fetch.jsonReviver)\n      ? await generateMutator({\n          output: output.target,\n          name: 'fetchReviver',\n          mutator: override.fetch.jsonReviver as NormalizedMutator,\n          workspace: context.workspace,\n          tsconfig: context.output.tsconfig,\n        })\n      : undefined;\n  const doc = jsDoc({ description, deprecated, summary });\n\n  const verbOption: GeneratorVerbOptions = {\n    verb,\n    tags,\n    route,\n    pathRoute,\n    summary,\n    operationId,\n    operationName,\n    response,\n    body,\n    headers,\n    queryParams,\n    params,\n    props,\n    mutator,\n    formData,\n    formUrlEncoded,\n    paramsSerializer,\n    paramsFilter,\n    fetchReviver,\n    override,\n    doc,\n    deprecated,\n    originalOperation: operation,\n  };\n\n  const transformer = await dynamicImport(\n    override.transformer,\n    context.workspace,\n  );\n\n  return transformer ? transformer(verbOption) : verbOption;\n}\n\nexport async function generateVerbOptions({\n  verb,\n  output,\n  operation,\n  route,\n  pathRoute,\n  verbParameters = [],\n  context,\n}: GenerateVerbOptionsParams): Promise<GeneratorVerbOptions[]> {\n  const {\n    requestBody,\n    tags: rawTags,\n    deprecated: rawDeprecated,\n    description: rawDescription,\n    summary: rawSummary,\n  } = operation;\n\n  // Bridge assertions: OpenApiOperationObject has AnyOtherAttribute index signature\n  // which makes all destructured properties `any`. Assert to their declared types.\n  const tags = (rawTags ?? []) as string[];\n  const deprecated = rawDeprecated as boolean | undefined;\n  const description = rawDescription as string | undefined;\n  const summary = rawSummary as string | undefined;\n  const operationId = getOperationId(operation, route, verb);\n  const overrideOperation = output.override.operations[operationId];\n  let overrideTag: NormalizedOperationOptions = {};\n  for (const [tag, options] of Object.entries(output.override.tags)) {\n    if (tags.includes(tag) && options) {\n      overrideTag = mergeDeep(overrideTag, options);\n    }\n  }\n\n  const override = mergeDeep(\n    mergeDeep(output.override, overrideTag),\n    overrideOperation ?? {},\n  ) as NormalizedOverrideOutput;\n\n  const overrideOperationName =\n    overrideOperation?.operationName ?? output.override.operationName;\n  const operationName = overrideOperationName\n    ? overrideOperationName(operation, route, verb)\n    : sanitize(camel(operationId), { es5keyword: true });\n\n  const splitByContentType = override.splitByContentType;\n\n  if (splitByContentType && requestBody) {\n    const bodies = getBodiesByContentType({\n      requestBody,\n      operationName,\n      context,\n      contentType: override.contentType,\n    });\n\n    const results: GeneratorVerbOptions[] = [];\n    for (const bodyEntry of bodies) {\n      const { contentTypeSuffix, ...body } = bodyEntry;\n      const suffixedName = contentTypeSuffix\n        ? `${operationName}With${contentTypeSuffix}`\n        : operationName;\n\n      const verbOption = await buildVerbOption({\n        verb,\n        output,\n        operation,\n        route,\n        pathRoute,\n        verbParameters,\n        context,\n        body,\n        operationName: suffixedName,\n        operationId,\n        override,\n        tags,\n        deprecated,\n        description,\n        summary,\n      });\n      results.push(verbOption);\n    }\n    return results;\n  }\n\n  const body = requestBody\n    ? getBody({\n        requestBody,\n        operationName,\n        context,\n        contentType: override.contentType,\n      })\n    : {\n        originalSchema: {} as OpenApiRequestBodyObject,\n        definition: '',\n        implementation: '',\n        imports: [],\n        schemas: [],\n        formData: '',\n        formUrlEncoded: '',\n        contentType: '',\n        isOptional: false,\n      };\n\n  const verbOption = await buildVerbOption({\n    verb,\n    output,\n    operation,\n    route,\n    pathRoute,\n    verbParameters,\n    context,\n    body,\n    operationName,\n    operationId,\n    override,\n    tags,\n    deprecated,\n    description,\n    summary,\n  });\n\n  return [verbOption];\n}\n\nexport interface GenerateVerbsOptionsParams {\n  verbs: OpenApiPathItemObject;\n  input: NormalizedInputOptions;\n  output: NormalizedOutputOptions;\n  route: string;\n  pathRoute: string;\n  context: ContextSpec;\n}\n\nexport function generateVerbsOptions({\n  verbs,\n  input,\n  output,\n  route,\n  pathRoute,\n  context,\n}: GenerateVerbsOptionsParams): Promise<GeneratorVerbsOptions> {\n  return asyncReduce(\n    filteredVerbs(verbs, input.filters),\n    async (acc, [verb, operation]: [string, OpenApiOperationObject]) => {\n      if (isVerb(verb)) {\n        const verbOptions = await generateVerbOptions({\n          verb,\n          output,\n          verbParameters: verbs.parameters,\n          route,\n          pathRoute,\n          operation,\n          context,\n        });\n\n        acc.push(...verbOptions);\n      }\n\n      return acc;\n    },\n    [] as GeneratorVerbsOptions,\n  );\n}\n","import fs from 'fs-extra';\n\nconst TRAILING_WHITESPACE_RE = /[^\\S\\r\\n]+$/gm;\n\n/**\n * Write generated code to a file, stripping trailing whitespace from each line.\n *\n * Template literals in code generators can produce lines with only whitespace\n * when conditional expressions evaluate to empty strings. This function\n * ensures the output is always clean regardless of generator implementation.\n */\nexport async function writeGeneratedFile(\n  filePath: string,\n  content: string,\n): Promise<void> {\n  await fs.outputFile(filePath, content.replaceAll(TRAILING_WHITESPACE_RE, ''));\n}\n","import nodePath from 'node:path';\n\nimport fs from 'fs-extra';\nimport { groupBy } from 'remeda';\n\nimport { generateImports } from '../generators';\nimport {\n  type GeneratorImport,\n  type GeneratorSchema,\n  NamingConvention,\n  type Tsconfig,\n} from '../types';\nimport { conventionName, getImportExtension, upath } from '../utils';\nimport { writeGeneratedFile } from './file';\n\ntype CanonicalInfo = Pick<GeneratorImport, 'importPath' | 'name'>;\n\n/**\n * Patterns to detect operation-derived types (params, bodies, responses).\n * These types are auto-generated from OpenAPI operations, not from component schemas.\n */\nconst OPERATION_TYPE_PATTERNS = [\n  /Params$/i, // GetUserParams, ListUsersParams\n  /Body$/, // CreateUserBody, UpdatePostBody (case-sensitive to avoid \"Antibody\")\n  /Body(One|Two|Three|Four|Five|Item)$/, // BodyOne, BodyTwo (union body types)\n  /Parameter$/i, // PageParameter, LimitParameter\n  /Query$/i, // GetUserQuery\n  /Header$/i, // AuthHeader\n  /Response\\d*$/i, // GetUser200Response, NotFoundResponse\n  /^[1-5]\\d{2}$/, // 200, 201, 404 (valid HTTP status codes: 1xx-5xx)\n  /\\d{3}(One|Two|Three|Four|Five|Item)$/i, // 200One, 200Two (union response types)\n  /^(get|post|put|patch|delete|head|options)[A-Z].*\\d{3}$/, // operation types with status codes (get...200, post...404)\n];\n\n/**\n * Check if a schema name matches operation type patterns.\n */\nfunction isOperationType(schemaName: string): boolean {\n  return OPERATION_TYPE_PATTERNS.some((pattern) => pattern.test(schemaName));\n}\n\n/**\n * Split schemas into regular and operation types.\n */\nexport function splitSchemasByType(schemas: GeneratorSchema[]): {\n  regularSchemas: GeneratorSchema[];\n  operationSchemas: GeneratorSchema[];\n} {\n  const regularSchemas: GeneratorSchema[] = [];\n  const operationSchemas: GeneratorSchema[] = [];\n\n  for (const schema of schemas) {\n    if (isOperationType(schema.name)) {\n      operationSchemas.push(schema);\n    } else {\n      regularSchemas.push(schema);\n    }\n  }\n\n  return { regularSchemas, operationSchemas };\n}\n\n/**\n * Fix cross-directory imports when schemas reference other schemas in a different directory.\n * Updates import paths to use correct relative paths between directories.\n */\nfunction fixSchemaImports(\n  schemas: GeneratorSchema[],\n  targetSchemaNames: Set<string>,\n  fromPath: string,\n  toPath: string,\n  namingConvention: NamingConvention,\n  fileExtension: string,\n  tsconfig?: Tsconfig,\n): void {\n  const relativePath = upath.relativeSafe(fromPath, toPath);\n  const importExtension = getImportExtension(fileExtension, tsconfig);\n\n  for (const schema of schemas) {\n    schema.imports = schema.imports.map((imp) => {\n      if (targetSchemaNames.has(imp.name)) {\n        const fileName = conventionName(imp.name, namingConvention);\n        return {\n          ...imp,\n          importPath: upath.joinSafe(relativePath, fileName) + importExtension,\n        };\n      }\n      return imp;\n    });\n  }\n}\n\n/**\n * Fix imports in operation schemas that reference regular schemas.\n */\nexport function fixCrossDirectoryImports(\n  operationSchemas: GeneratorSchema[],\n  regularSchemaNames: Set<string>,\n  schemaPath: string,\n  operationSchemaPath: string,\n  namingConvention: NamingConvention,\n  fileExtension: string,\n  tsconfig?: Tsconfig,\n): void {\n  fixSchemaImports(\n    operationSchemas,\n    regularSchemaNames,\n    operationSchemaPath,\n    schemaPath,\n    namingConvention,\n    fileExtension,\n    tsconfig,\n  );\n}\n\n/**\n * Fix imports in regular schemas that reference operation schemas.\n */\nexport function fixRegularSchemaImports(\n  regularSchemas: GeneratorSchema[],\n  operationSchemaNames: Set<string>,\n  schemaPath: string,\n  operationSchemaPath: string,\n  namingConvention: NamingConvention,\n  fileExtension: string,\n  tsconfig?: Tsconfig,\n): void {\n  fixSchemaImports(\n    regularSchemas,\n    operationSchemaNames,\n    schemaPath,\n    operationSchemaPath,\n    namingConvention,\n    fileExtension,\n    tsconfig,\n  );\n}\n\nfunction getSchemaKey(\n  schemaPath: string,\n  schemaName: string,\n  namingConvention: NamingConvention,\n  fileExtension: string,\n) {\n  return getPath(\n    schemaPath,\n    conventionName(schemaName, namingConvention),\n    fileExtension,\n  )\n    .toLowerCase()\n    .replaceAll('\\\\', '/');\n}\n\nfunction getSchemaGroups(\n  schemaPath: string,\n  schemas: GeneratorSchema[],\n  namingConvention: NamingConvention,\n  fileExtension: string,\n) {\n  return groupBy(schemas, (schema) =>\n    getSchemaKey(schemaPath, schema.name, namingConvention, fileExtension),\n  );\n}\n\nfunction getCanonicalMap(\n  schemaGroups: Record<string, GeneratorSchema[]>,\n  schemaPath: string,\n  namingConvention: NamingConvention,\n  fileExtension: string,\n) {\n  const canonicalPathMap = new Map<string, CanonicalInfo>();\n  const canonicalNameMap = new Map<string, CanonicalInfo>();\n\n  for (const [key, groupSchemas] of Object.entries(schemaGroups)) {\n    const canonicalPath = getPath(\n      schemaPath,\n      conventionName(groupSchemas[0].name, namingConvention),\n      fileExtension,\n    );\n\n    const canonicalInfo = {\n      importPath: canonicalPath,\n      name: groupSchemas[0].name,\n    };\n\n    canonicalPathMap.set(key, canonicalInfo);\n    for (const schema of groupSchemas) {\n      canonicalNameMap.set(schema.name, canonicalInfo);\n    }\n  }\n\n  return {\n    canonicalPathMap,\n    canonicalNameMap,\n  };\n}\n\nfunction normalizeCanonicalImportPaths(\n  schemas: GeneratorSchema[],\n  canonicalPathMap: Map<string, CanonicalInfo>,\n  canonicalNameMap: Map<string, CanonicalInfo>,\n  schemaPath: string,\n  namingConvention: NamingConvention,\n  fileExtension: string,\n  tsconfig?: Tsconfig,\n  factoryOutputDirectory?: string,\n) {\n  const importExtension = getImportExtension(fileExtension, tsconfig);\n  const factoryDir = factoryOutputDirectory ?? schemaPath;\n\n  for (const schema of schemas) {\n    schema.imports = schema.imports.map((imp) => {\n      const canonicalByName = canonicalNameMap.get(imp.name);\n\n      const resolvedImportKey = resolveImportKey(\n        schemaPath,\n        imp.importPath ?? `./${conventionName(imp.name, namingConvention)}`,\n        fileExtension,\n      );\n      const canonicalByPath = canonicalPathMap.get(resolvedImportKey);\n      const canonical = canonicalByName ?? canonicalByPath;\n      if (!canonical?.importPath) return imp;\n\n      const relative = upath.relativeSafe(\n        schemaPath,\n        canonical.importPath.replaceAll('\\\\', '/'),\n      );\n      // `relative` derives from canonical.importPath (built via getPath) so it\n      // normally ends with `fileExtension`; the `.ts$` branch is a defensive\n      // fallback for legacy/hardcoded `.ts` paths that don't match the\n      // configured fileExtension (e.g. `.gen.ts`).\n      const withoutFileExtension = relative.endsWith(fileExtension)\n        ? relative.slice(0, -fileExtension.length)\n        : relative.replace(/\\.ts$/, '');\n      const importPath = `${withoutFileExtension}${importExtension}`;\n\n      return { ...imp, importPath };\n    });\n\n    if (schema.factoryImports) {\n      schema.factoryImports = schema.factoryImports.map((imp) => {\n        const canonicalByName = canonicalNameMap.get(imp.name);\n\n        const resolvedImportKey = resolveImportKey(\n          factoryDir,\n          imp.importPath ?? `./${conventionName(imp.name, namingConvention)}`,\n          fileExtension,\n        );\n        const canonicalByPath = canonicalPathMap.get(resolvedImportKey);\n        const canonical = canonicalByName ?? canonicalByPath;\n        if (!canonical?.importPath) return imp;\n\n        const relative = upath.relativeSafe(\n          factoryDir,\n          canonical.importPath.replaceAll('\\\\', '/'),\n        );\n        const withoutFileExtension = relative.endsWith(fileExtension)\n          ? relative.slice(0, -fileExtension.length)\n          : relative.replace(/\\.ts$/, '');\n        const importPath = `${withoutFileExtension}${importExtension}`;\n\n        return { ...imp, importPath };\n      });\n    }\n  }\n}\n\nfunction mergeSchemaGroup(schemas: GeneratorSchema[]): GeneratorSchema {\n  const baseSchemaName = schemas[0].name;\n  const baseSchema = schemas[0].schema;\n  const mergedImports = [\n    ...new Map(\n      schemas\n        .flatMap((schema) => schema.imports)\n        .map((imp) => [JSON.stringify(imp), imp]),\n    ).values(),\n  ];\n  const mergedDependencies = [\n    ...new Set(schemas.flatMap((schema) => schema.dependencies ?? [])),\n  ];\n\n  const mergedFactory = schemas\n    .map((s) => s.factory)\n    .filter(Boolean)\n    .join('\\n');\n  const mergedFactoryImports = [\n    ...new Map(\n      schemas\n        .flatMap((schema) => schema.factoryImports ?? [])\n        .map((imp) => [JSON.stringify(imp), imp] as [string, GeneratorImport]),\n    ).values(),\n  ];\n\n  return {\n    name: baseSchemaName,\n    schema: baseSchema,\n    model: schemas.map((schema) => schema.model).join('\\n'),\n    imports: mergedImports,\n    dependencies: mergedDependencies,\n    factory: mergedFactory || undefined,\n    factoryImports: mergedFactoryImports,\n    factoryMode: schemas[0].factoryMode,\n  };\n}\n\nfunction resolveImportKey(\n  schemaPath: string,\n  importPath: string,\n  fileExtension: string,\n) {\n  return upath\n    .join(schemaPath, `${importPath}${fileExtension}`)\n    .toLowerCase()\n    .replaceAll('\\\\', '/');\n}\n\ninterface GetSchemaOptions {\n  schema: GeneratorSchema;\n  target: string;\n  header: string;\n  namingConvention?: NamingConvention;\n  importExtension?: string;\n}\n\nfunction getSchema({\n  schema: { imports, model },\n  header,\n  namingConvention = NamingConvention.CAMEL_CASE,\n  importExtension,\n}: GetSchemaOptions): string {\n  let file = header;\n  file += generateImports({\n    imports: imports.filter(\n      (imp) =>\n        !model.includes(`type ${imp.alias ?? imp.name} =`) &&\n        !model.includes(`interface ${imp.alias ?? imp.name} {`),\n    ),\n    namingConvention,\n    importExtension,\n  });\n  file += imports.length > 0 ? '\\n\\n' : '\\n';\n  file += model;\n  return file;\n}\n\nfunction getPath(path: string, name: string, fileExtension: string): string {\n  return nodePath.join(path, `${name}${fileExtension}`);\n}\n\nexport function writeModelInline(acc: string, model: string): string {\n  return acc + `${model}\\n`;\n}\n\nexport function writeModelsInline(array: GeneratorSchema[]): string {\n  let acc = '';\n  for (const { model } of array) {\n    acc = writeModelInline(acc, model);\n  }\n  return acc;\n}\n\ninterface WriteSchemaOptions {\n  path: string;\n  schema: GeneratorSchema;\n  target: string;\n  namingConvention: NamingConvention;\n  fileExtension: string;\n  header: string;\n  tsconfig?: Tsconfig;\n}\n\nexport async function writeSchema({\n  path,\n  schema,\n  target,\n  namingConvention,\n  fileExtension,\n  header,\n  tsconfig,\n}: WriteSchemaOptions) {\n  const name = conventionName(schema.name, namingConvention);\n\n  try {\n    await writeGeneratedFile(\n      getPath(path, name, fileExtension),\n      getSchema({\n        schema,\n        target,\n        header,\n        namingConvention,\n        importExtension: getImportExtension(fileExtension, tsconfig),\n      }),\n    );\n  } catch (error) {\n    throw new Error(\n      `Oups... 🍻. An Error occurred while writing schema ${name} => ${String(error)}`,\n      { cause: error },\n    );\n  }\n}\n\ninterface WriteSchemasOptions {\n  schemaPath: string;\n  schemas: GeneratorSchema[];\n  target: string;\n  namingConvention: NamingConvention;\n  fileExtension: string;\n  header: string;\n  indexFiles: boolean;\n  tsconfig?: Tsconfig;\n  factoryOutputDirectory?: string;\n}\n\nasync function emitFactoryForSchema(\n  schema: GeneratorSchema,\n  namingConvention: NamingConvention,\n  header: string,\n  factoryDir: string,\n  fileExtension: string,\n  helpers: {\n    separateFactoryNames: string[];\n    combinedFactoryContent: { value: string };\n    combinedFactoryImports: GeneratorImport[];\n    isCombined: { value: boolean };\n  },\n) {\n  if (schema.factory && schema.factoryMode) {\n    const mode = schema.factoryMode;\n    if (mode === 'split') {\n      const baseName = conventionName(schema.name, namingConvention);\n      const factoryName = `${baseName}.factory`;\n      helpers.separateFactoryNames.push(factoryName);\n      const factoryImportsStr = generateImports({\n        imports: schema.factoryImports ?? [],\n        namingConvention,\n      });\n      const factoryFile = `${header}\\n${factoryImportsStr}\\n\\n${schema.factory}`;\n      await writeGeneratedFile(\n        getPath(factoryDir, factoryName, fileExtension),\n        factoryFile,\n      );\n    } else if (mode === 'single-split') {\n      helpers.isCombined.value = true;\n      helpers.combinedFactoryContent.value += `${schema.factory}\\n`;\n      helpers.combinedFactoryImports.push(...(schema.factoryImports ?? []));\n    }\n  }\n}\n\nexport async function writeSchemas({\n  schemaPath,\n  schemas,\n  target,\n  namingConvention,\n  fileExtension,\n  header,\n  indexFiles,\n  tsconfig,\n  factoryOutputDirectory,\n}: WriteSchemasOptions) {\n  const schemaGroups = getSchemaGroups(\n    schemaPath,\n    schemas,\n    namingConvention,\n    fileExtension,\n  );\n\n  const { canonicalPathMap, canonicalNameMap } = getCanonicalMap(\n    schemaGroups,\n    schemaPath,\n    namingConvention,\n    fileExtension,\n  );\n\n  normalizeCanonicalImportPaths(\n    schemas,\n    canonicalPathMap,\n    canonicalNameMap,\n    schemaPath,\n    namingConvention,\n    fileExtension,\n    tsconfig,\n    factoryOutputDirectory,\n  );\n\n  const factoryDir = factoryOutputDirectory ?? schemaPath;\n\n  const combinedFactoryContent = { value: '' };\n  const combinedFactoryImports: GeneratorImport[] = [];\n  const isCombined = { value: false };\n  const separateFactoryNames: string[] = [];\n\n  const factoryHelpers = {\n    separateFactoryNames,\n    combinedFactoryContent,\n    combinedFactoryImports,\n    isCombined,\n  };\n\n  for (const groupSchemas of Object.values(schemaGroups)) {\n    if (groupSchemas.length === 1) {\n      await writeSchema({\n        path: schemaPath,\n        schema: groupSchemas[0],\n        target,\n        namingConvention,\n        fileExtension,\n        header,\n        tsconfig,\n      });\n\n      const singleSchema = groupSchemas[0];\n      await emitFactoryForSchema(\n        singleSchema,\n        namingConvention,\n        header,\n        factoryDir,\n        fileExtension,\n        factoryHelpers,\n      );\n      continue;\n    }\n\n    const mergedSchema = mergeSchemaGroup(groupSchemas);\n\n    await writeSchema({\n      path: schemaPath,\n      schema: mergedSchema,\n      target,\n      namingConvention,\n      fileExtension,\n      header,\n      tsconfig,\n    });\n\n    await emitFactoryForSchema(\n      mergedSchema,\n      namingConvention,\n      header,\n      factoryDir,\n      fileExtension,\n      factoryHelpers,\n    );\n  }\n\n  if (isCombined.value) {\n    const factoryFileName = conventionName('factoryMethods', namingConvention);\n    const factoryFileImports = generateImports({\n      imports: combinedFactoryImports,\n      namingConvention,\n    });\n    const factoryFile = `${header}\\n${factoryFileImports}\\n\\n${combinedFactoryContent.value}`;\n    await writeGeneratedFile(\n      getPath(factoryDir, factoryFileName, fileExtension),\n      factoryFile,\n    );\n  }\n\n  if (indexFiles) {\n    const schemaFilePath = nodePath.join(schemaPath, `index.ts`);\n    await fs.ensureFile(schemaFilePath);\n\n    // Ensure separate files are used for parallel schema writing.\n    // Throw an exception if duplicates are detected (using convention names)\n    const ext = getImportExtension(fileExtension, tsconfig);\n    const conventionNamesSet = new Set(\n      Object.values(schemaGroups).map((group) =>\n        conventionName(group[0].name, namingConvention),\n      ),\n    );\n\n    try {\n      // Create unique export statements from schemas (deduplicate by schema name)\n      const uniqueSchemaNames = [...conventionNamesSet];\n\n      // Create export statements\n      const currentExports = uniqueSchemaNames.map(\n        (schemaName) => `export * from './${schemaName}${ext}';`,\n      );\n\n      if (\n        factoryOutputDirectory &&\n        upath.normalizeSafe(factoryOutputDirectory) !==\n          upath.normalizeSafe(schemaPath) &&\n        (isCombined.value || separateFactoryNames.length > 0)\n      ) {\n        const factoryIndexFilePath = nodePath.join(\n          factoryOutputDirectory,\n          `index.ts`,\n        );\n        await fs.ensureFile(factoryIndexFilePath);\n        const factoryExports: string[] = [];\n        if (isCombined.value) {\n          const factoryFileName = conventionName(\n            'factoryMethods',\n            namingConvention,\n          );\n          factoryExports.push(`export * from './${factoryFileName}${ext}';`);\n        }\n        for (const fName of separateFactoryNames) {\n          factoryExports.push(`export * from './${fName}${ext}';`);\n        }\n        const content = `${header}\\n${factoryExports.join('\\n')}\\n`;\n        await writeGeneratedFile(factoryIndexFilePath, content);\n      } else {\n        if (isCombined.value) {\n          const factoryFileName = conventionName(\n            'factoryMethods',\n            namingConvention,\n          );\n          currentExports.push(`export * from './${factoryFileName}${ext}';`);\n        }\n        for (const fName of separateFactoryNames) {\n          currentExports.push(`export * from './${fName}${ext}';`);\n        }\n      }\n\n      const exports = [...new Set(currentExports)]\n        .toSorted((a, b) => a.localeCompare(b, 'en', { numeric: true }))\n        .join('\\n');\n\n      const fileContent = `${header}\\n${exports}\\n`;\n\n      await writeGeneratedFile(schemaFilePath, fileContent);\n    } catch (error) {\n      throw new Error(\n        `Oups... 🍻. An Error occurred while writing schema index file ${schemaFilePath} => ${String(error)}`,\n        { cause: error },\n      );\n    }\n  }\n}\n","import type {\n  FinalizeMockImplementationOptions,\n  GeneratorMockOutput,\n  NormalizedOutputOptions,\n} from '../types';\n\ntype MockOutputWithStrictNames = Pick<\n  GeneratorMockOutput,\n  'strictMockSchemaTypeNames'\n>;\n\nexport function getFinalizeMockImplementationOptions(\n  output: NormalizedOutputOptions,\n  mockOutputs: MockOutputWithStrictNames | readonly MockOutputWithStrictNames[],\n): FinalizeMockImplementationOptions {\n  const outputs: readonly MockOutputWithStrictNames[] = Array.isArray(\n    mockOutputs,\n  )\n    ? mockOutputs\n    : [mockOutputs];\n  const strictSchemaTypeNames = [\n    ...new Set(\n      outputs.flatMap(\n        (mockOutput) => mockOutput.strictMockSchemaTypeNames ?? [],\n      ),\n    ),\n  ];\n\n  return {\n    mockOptions: output.override.mock,\n    strictSchemaTypeNames:\n      strictSchemaTypeNames.length > 0 ? strictSchemaTypeNames : undefined,\n  };\n}\n","import { uniqueBy } from 'remeda';\n\nimport type {\n  GeneratorDependency,\n  GeneratorImport,\n  NormalizedOutputOptions,\n} from '../types';\nimport { conventionName, getImportExtension, isObject, upath } from '../utils';\n\nexport function generateImportsForBuilder(\n  output: NormalizedOutputOptions,\n  imports: readonly GeneratorImport[],\n  relativeSchemasPath: string,\n): GeneratorDependency[] {\n  const isPackageImport =\n    isObject(output.schemas) && !!output.schemas.importPath;\n\n  const isZodSchemaOutput =\n    isObject(output.schemas) && output.schemas.type === 'zod';\n\n  // Schema-factory imports (`getPetMock` and friends) always resolve to the\n  // consolidated `<schemas-dir>/index.faker` file emitted by the faker\n  // schemas option. They bypass the per-schema convention naming below.\n  // Append `getImportExtension` so NodeNext / Node16 module resolution\n  // gets the required local-file extension (e.g. `.js`).\n  const schemaFactoryImports = imports.filter((i) => i.schemaFactory);\n  const schemaFactoryImportExtension = isPackageImport\n    ? ''\n    : getImportExtension(output.fileExtension, output.tsconfig);\n  const schemaFactoryDeps: GeneratorDependency[] =\n    schemaFactoryImports.length > 0\n      ? [\n          {\n            exports: uniqueBy(\n              schemaFactoryImports,\n              (entry) => `${entry.name}|${entry.alias ?? ''}`,\n            ),\n            dependency: upath.joinSafe(\n              relativeSchemasPath,\n              `index.faker${schemaFactoryImportExtension}`,\n            ),\n          },\n        ]\n      : [];\n\n  // The rest of the schema-import bucket is for types emitted alongside\n  // each schema (`Pet`, `PetWithTag`, ...). They're routed below.\n  imports = imports.filter((i) => !i.schemaFactory);\n\n  let schemaImports: GeneratorDependency[];\n  if (output.indexFiles) {\n    schemaImports = isZodSchemaOutput\n      ? [\n          {\n            exports: imports.filter((i) => !i.importPath),\n            dependency: relativeSchemasPath,\n          },\n        ]\n      : [\n          {\n            exports: imports.filter((i) => !i.importPath),\n            dependency: relativeSchemasPath,\n          },\n        ];\n  } else {\n    const importsByDependency = new Map<string, GeneratorImport[]>();\n\n    for (const schemaImport of imports.filter((i) => !i.importPath)) {\n      const baseName = isZodSchemaOutput\n        ? schemaImport.name\n        : (schemaImport.schemaName ?? schemaImport.name);\n      const normalizedName = conventionName(baseName, output.namingConvention);\n      const suffix = isZodSchemaOutput ? '.zod' : '';\n      const importExtension = isPackageImport\n        ? ''\n        : getImportExtension(output.fileExtension, output.tsconfig);\n      const dependency = upath.joinSafe(\n        relativeSchemasPath,\n        `${normalizedName}${suffix}${importExtension}`,\n      );\n\n      if (!importsByDependency.has(dependency)) {\n        importsByDependency.set(dependency, []);\n      }\n      importsByDependency.get(dependency)?.push(schemaImport);\n    }\n\n    schemaImports = [...importsByDependency.entries()].map(\n      ([dependency, dependencyImports]) => ({\n        dependency,\n        exports: uniqueBy(\n          dependencyImports,\n          (entry) =>\n            `${entry.name}|${entry.alias ?? ''}|${String(entry.values)}|${String(\n              entry.default,\n            )}`,\n        ),\n      }),\n    );\n  }\n\n  const otherImports = uniqueBy(\n    imports.filter(\n      (i): i is GeneratorImport & { importPath: string } => !!i.importPath,\n    ),\n    (x) => x.name + x.importPath,\n  ).map<GeneratorDependency>((i) => {\n    return {\n      exports: [i],\n      dependency: i.importPath,\n    };\n  });\n\n  return [...schemaImports, ...schemaFactoryDeps, ...otherImports];\n}\n","import {\n  type GeneratorMockOutput,\n  type GeneratorMockOutputFull,\n  OutputMockType,\n} from '../types';\n\n/**\n * Collapses the per-generator mock outputs for \"inline\" writer modes\n * (`single`, `tags`) where every mock generator's content is concatenated\n * into the implementation file. The MSW generator already emits the\n * response-factory functions (`get<Op>ResponseMock`) that Faker would emit,\n * so when both generators are configured we keep MSW and drop Faker to\n * avoid duplicate function declarations and re-imported faker bindings.\n */\nexport function collapseInlineMockOutputs<\n  T extends GeneratorMockOutput | GeneratorMockOutputFull,\n>(mockOutputs: T[]): T[] {\n  const hasMsw = mockOutputs.some((m) => m.type === OutputMockType.MSW);\n  if (!hasMsw) return mockOutputs;\n  return mockOutputs.filter((m) => m.type !== OutputMockType.FAKER);\n}\n","import basepath from 'node:path';\n\nimport type {\n  ClientMockBuilder,\n  GlobalMockOptions,\n  WriteModeProps,\n} from '../types';\nimport { isFunction, upath } from '../utils';\n\nexport function getMockDir(\n  entry: GlobalMockOptions | ClientMockBuilder,\n  mockConfig: WriteModeProps['output']['mock'],\n): string | undefined {\n  if (!isFunction(entry) && entry.path) {\n    return entry.path;\n  }\n  return mockConfig.path;\n}\n\nexport function hasAnyMockPath(\n  mockConfig: WriteModeProps['output']['mock'],\n): boolean {\n  if (mockConfig.path) return true;\n  return mockConfig.generators.some((g) => !isFunction(g) && !!g.path);\n}\n\nexport function resolveMockSchemasPath(\n  mockFilePath: string,\n  schemasTarget: string,\n): string {\n  // `upath.getRelativeImportPath` strips `basepath.extname`, which would\n  // treat a trailing `.schemas` on `schemasTarget` (e.g. the implicit\n  // `<filename>.schemas` path used when `output.schemas` is unset) as a\n  // file extension and drop it. Treat `.schemas` as a logical marker\n  // (not a real extension) and always end up with a real source-file\n  // extension on the target.\n  const ext = basepath.extname(mockFilePath);\n  const targetExt = basepath.extname(schemasTarget);\n  const targetWithExt =\n    targetExt === '.schemas'\n      ? schemasTarget + ext\n      : targetExt\n        ? schemasTarget\n        : schemasTarget + ext;\n  return upath.getRelativeImportPath(mockFilePath, targetWithExt);\n}\n","import {\n  type GeneratorMockOutput,\n  type GeneratorMockOutputFull,\n  type GeneratorTarget,\n  type GeneratorTargetFull,\n  type NormalizedOutputOptions,\n  OutputClient,\n  type WriteSpecBuilder,\n} from '../types';\nimport { compareVersions, pascal } from '../utils';\n\nfunction emptyMockOutputFull(\n  type: GeneratorMockOutputFull['type'],\n): GeneratorMockOutputFull {\n  return {\n    type,\n    implementation: { function: '', handler: '', handlerName: '' },\n    imports: [],\n  };\n}\n\nfunction flattenMockOutput(full: GeneratorMockOutputFull): GeneratorMockOutput {\n  return {\n    type: full.type,\n    implementation: full.implementation.function + full.implementation.handler,\n    imports: full.imports,\n    strictMockSchemaTypeNames: full.strictMockSchemaTypeNames,\n  };\n}\n\nexport function generateTarget(\n  builder: WriteSpecBuilder,\n  options: NormalizedOutputOptions,\n): GeneratorTarget {\n  const operationNames = Object.values(builder.operations).map(\n    ({ operationName }) => operationName,\n  );\n  const isAngularClient = options.client === OutputClient.ANGULAR;\n\n  const titles = builder.title({\n    outputClient: options.client,\n    title: pascal(builder.info.title),\n    customTitleFunc: options.override.title,\n    output: options,\n  });\n\n  const target: Required<Omit<GeneratorTargetFull, 'mockOutputs'>> & {\n    mockOutputs: GeneratorMockOutputFull[];\n  } = {\n    imports: [],\n    implementation: '',\n    mockOutputs: [],\n    mutators: [],\n    clientMutators: [],\n    formData: [],\n    formUrlEncoded: [],\n    paramsSerializer: [],\n    paramsFilter: [],\n    fetchReviver: [],\n  };\n  const operations = Object.values(builder.operations);\n  for (const [index, operation] of operations.entries()) {\n    target.imports.push(...operation.imports);\n    target.implementation += operation.implementation + '\\n';\n\n    // Merge per-mock-type outputs from this operation into the accumulator.\n    for (const opMock of operation.mockOutputs) {\n      let acc = target.mockOutputs.find((m) => m.type === opMock.type);\n      if (!acc) {\n        acc = emptyMockOutputFull(opMock.type);\n        target.mockOutputs.push(acc);\n      }\n      acc.imports.push(...opMock.imports);\n      if (opMock.strictMockSchemaTypeNames?.length) {\n        acc.strictMockSchemaTypeNames = [\n          ...new Set([\n            ...(acc.strictMockSchemaTypeNames ?? []),\n            ...opMock.strictMockSchemaTypeNames,\n          ]),\n        ];\n      }\n      acc.implementation.function += opMock.implementation.function;\n      acc.implementation.handler += opMock.implementation.handler;\n      if (opMock.implementation.handlerName) {\n        const separator =\n          acc.implementation.handlerName.length > 0 ? ',\\n  ' : '  ';\n        acc.implementation.handlerName +=\n          separator + opMock.implementation.handlerName + '()';\n      }\n    }\n\n    if (operation.mutator) {\n      target.mutators.push(operation.mutator);\n    }\n\n    if (operation.formData) {\n      target.formData.push(operation.formData);\n    }\n    if (operation.formUrlEncoded) {\n      target.formUrlEncoded.push(operation.formUrlEncoded);\n    }\n    if (operation.paramsSerializer) {\n      target.paramsSerializer.push(operation.paramsSerializer);\n    }\n    if (operation.paramsFilter) {\n      target.paramsFilter.push(operation.paramsFilter);\n    }\n\n    if (operation.clientMutators) {\n      target.clientMutators.push(...operation.clientMutators);\n    }\n\n    if (operation.fetchReviver) {\n      target.fetchReviver.push(operation.fetchReviver);\n    }\n\n    if (index === operations.length - 1) {\n      const isMutator = target.mutators.some((mutator) =>\n        isAngularClient ? mutator.hasThirdArg : mutator.hasSecondArg,\n      );\n\n      const typescriptVersion =\n        options.packageJson?.dependencies?.typescript ??\n        options.packageJson?.devDependencies?.typescript ??\n        '4.4.0';\n\n      const hasAwaitedType = compareVersions(typescriptVersion, '4.5.0');\n\n      const header = builder.header({\n        outputClient: options.client,\n        isRequestOptions: options.override.requestOptions !== false,\n        isMutator,\n        isGlobalMutator: !!options.override.mutator,\n        provideIn: options.override.angular.provideIn,\n        hasAwaitedType,\n        titles,\n        output: options,\n        verbOptions: builder.verbOptions,\n        clientImplementation: target.implementation,\n      });\n\n      target.implementation = header.implementation + target.implementation;\n\n      const footer = builder.footer({\n        outputClient: options.client,\n        operationNames,\n        hasMutator: target.mutators.length > 0,\n        hasAwaitedType,\n        titles,\n        output: options,\n      });\n      target.implementation += footer.implementation;\n\n      // Append the aggregated handler array (header + footer wrap) to every\n      // mock output that has at least one handler. Faker-only outputs (no\n      // handlerName) do not get the wrapper.\n      for (const acc of target.mockOutputs) {\n        if (acc.implementation.handlerName) {\n          acc.implementation.handler =\n            acc.implementation.handler +\n            header.implementationMock +\n            acc.implementation.handlerName +\n            footer.implementationMock;\n        }\n      }\n    }\n  }\n\n  return {\n    imports: target.imports,\n    implementation: target.implementation,\n    mockOutputs: target.mockOutputs.map((m) => flattenMockOutput(m)),\n    mutators: target.mutators,\n    clientMutators: target.clientMutators,\n    formData: target.formData,\n    formUrlEncoded: target.formUrlEncoded,\n    paramsSerializer: target.paramsSerializer,\n    paramsFilter: target.paramsFilter,\n    fetchReviver: target.fetchReviver,\n  };\n}\n","export function getOrvalGeneratedTypes() {\n  return `\n// https://stackoverflow.com/questions/49579094/typescript-conditional-types-filter-out-readonly-properties-pick-only-requir/49579497#49579497\ntype IfEquals<X, Y, A = X, B = never> = (<T>() => T extends X ? 1 : 2) extends <\nT,\n>() => T extends Y ? 1 : 2\n? A\n: B;\n\ntype WritableKeys<T> = {\n[P in keyof T]-?: IfEquals<\n  { [Q in P]: T[P] },\n  { -readonly [Q in P]: T[P] },\n  P\n>;\n}[keyof T];\n\ntype UnionToIntersection<U> =\n  (U extends any ? (k: U)=>void : never) extends ((k: infer I)=>void) ? I : never;\ntype DistributeReadOnlyOverUnions<T> = T extends any ? NonReadonly<T> : never;\n\ntype Writable<T> = Pick<T, WritableKeys<T>>;\ntype NonReadonly<T> = [T] extends [UnionToIntersection<T>] ? {\n  [P in keyof Writable<T>]: T[P] extends object\n    ? NonReadonly<NonNullable<T[P]>>\n    : T[P];\n} : DistributeReadOnlyOverUnions<T>;\n`;\n}\n\nexport function getTypedResponse() {\n  return `\ninterface TypedResponse<T> extends Response {\n  json(): Promise<T>;\n}\n`;\n}\n","import path from 'node:path';\n\nimport { generateModelsInline, generateMutatorImports } from '../generators';\nimport { OutputMockType, type WriteModeProps } from '../types';\nimport {\n  conventionName,\n  getFileInfo,\n  getImportExtension,\n  getSchemasImportPath,\n  isFunction,\n  isString,\n  isSyntheticDefaultImportsAllow,\n  upath,\n} from '../utils';\nimport { getMockFileExtensionByTypeName } from '../utils/file-extensions';\nimport { escapeRegExp } from '../utils/string';\nimport { writeGeneratedFile } from './file';\nimport { getFinalizeMockImplementationOptions } from './finalize-mock-implementation';\nimport { generateImportsForBuilder } from './generate-imports-for-builder';\nimport { collapseInlineMockOutputs } from './mock-outputs';\nimport {\n  getMockDir,\n  hasAnyMockPath,\n  resolveMockSchemasPath,\n} from './mock-utils';\nimport { generateTarget } from './target';\nimport { getOrvalGeneratedTypes, getTypedResponse } from './types';\n\nexport async function writeSingleMode({\n  builder,\n  output,\n  projectName,\n  header,\n  needSchema,\n  generateSchemasInline,\n}: WriteModeProps): Promise<string[]> {\n  try {\n    const {\n      path: targetPath,\n      filename,\n      dirname,\n      extension,\n    } = getFileInfo(output.target, {\n      backupFilename: conventionName(\n        builder.info.title ?? 'filename',\n        output.namingConvention,\n      ),\n      extension: output.fileExtension,\n    });\n\n    const {\n      imports,\n      mockOutputs: rawMockOutputs,\n      implementation,\n      mutators,\n      clientMutators,\n      formData,\n      formUrlEncoded,\n      paramsSerializer,\n      paramsFilter,\n      fetchReviver,\n    } = generateTarget(builder, output);\n\n    const isAllowSyntheticDefaultImports = isSyntheticDefaultImportsAllow(\n      output.tsconfig,\n    );\n\n    const shouldDeinlineMocks = hasAnyMockPath(output.mock);\n\n    const schemaCustomImportPath = getSchemasImportPath(output.schemas);\n    const schemasPath = output.schemas\n      ? (schemaCustomImportPath ??\n        upath.getRelativeImportPath(\n          targetPath,\n          getFileInfo(\n            isString(output.schemas) ? output.schemas : output.schemas.path,\n            { extension: output.fileExtension },\n          ).dirname,\n        ))\n      : undefined;\n\n    const relativeSchemasPath =\n      schemasPath ??\n      './' + filename + '.schemas' + extension.replace(/\\.ts$/, '');\n\n    const schemasTarget = output.schemas\n      ? getFileInfo(\n          isString(output.schemas) ? output.schemas : output.schemas.path,\n          { extension: output.fileExtension },\n        ).dirname\n      : targetPath;\n\n    const implementationImports = imports.filter((imp) => {\n      const searchWords = [imp.alias, imp.name]\n        .filter((part): part is string => Boolean(part?.length))\n        .map((part) => escapeRegExp(part))\n        .join('|');\n      if (!searchWords) {\n        return false;\n      }\n\n      return new RegExp(String.raw`\\b(${searchWords})\\b`, 'g').test(\n        implementation,\n      );\n    });\n\n    const normalizedImports = implementationImports.map((imp) => ({ ...imp }));\n\n    const collapsedMockOutputs = shouldDeinlineMocks\n      ? []\n      : collapseInlineMockOutputs(rawMockOutputs);\n\n    if (!shouldDeinlineMocks) {\n      const importsMock = collapsedMockOutputs.flatMap((m) => m.imports);\n\n      for (const mockImport of importsMock) {\n        const matchingImport = normalizedImports.find(\n          (imp) =>\n            imp.name === mockImport.name &&\n            (imp.alias ?? '') === (mockImport.alias ?? ''),\n        );\n        if (!matchingImport) continue;\n\n        const mockNeedsRuntimeValue =\n          !!mockImport.values ||\n          !!mockImport.isConstant ||\n          !!mockImport.default ||\n          !!mockImport.namespaceImport ||\n          !!mockImport.syntheticDefaultImport;\n        if (mockNeedsRuntimeValue) {\n          matchingImport.values = true;\n        }\n      }\n    }\n\n    let data = header;\n\n    const importsForBuilder = schemasPath\n      ? generateImportsForBuilder(\n          output,\n          normalizedImports,\n          relativeSchemasPath,\n        )\n      : generateImportsForBuilder(\n          output,\n          normalizedImports.filter((imp) => !!imp.importPath),\n          '.',\n        );\n\n    data += builder.imports({\n      client: output.client,\n      implementation,\n      imports: importsForBuilder,\n      projectName,\n      hasSchemaDir: !!output.schemas,\n      isAllowSyntheticDefaultImports,\n      hasGlobalMutator: !!output.override.mutator,\n      hasTagsMutator: Object.values(output.override.tags).some(\n        (tag) => !!tag?.mutator,\n      ),\n      hasParamsSerializerOptions: !!output.override.paramsSerializerOptions,\n      packageJson: output.packageJson,\n      output,\n    });\n\n    if (!shouldDeinlineMocks) {\n      for (const mockOutput of collapsedMockOutputs) {\n        const entry = output.mock.generators.find(\n          (g) => !isFunction(g) && g.type === mockOutput.type,\n        );\n        const filteredMockImports = mockOutput.imports.filter(\n          (impMock) =>\n            !normalizedImports.some(\n              (imp) =>\n                imp.name === impMock.name &&\n                (imp.alias ?? '') === (impMock.alias ?? ''),\n            ),\n        );\n        const importsMockForBuilder = schemasPath\n          ? generateImportsForBuilder(\n              output,\n              filteredMockImports,\n              relativeSchemasPath,\n            )\n          : generateImportsForBuilder(\n              output,\n              filteredMockImports.filter((imp) => !!imp.importPath),\n              '.',\n            );\n        data += builder.importsMock({\n          implementation: mockOutput.implementation,\n          imports: importsMockForBuilder,\n          projectName,\n          hasSchemaDir: !!output.schemas,\n          isAllowSyntheticDefaultImports,\n          options: entry && !isFunction(entry) ? entry : undefined,\n        });\n      }\n    }\n\n    if (mutators) {\n      data += generateMutatorImports({ mutators, implementation });\n    }\n\n    if (clientMutators) {\n      data += generateMutatorImports({ mutators: clientMutators });\n    }\n\n    if (formData) {\n      data += generateMutatorImports({ mutators: formData });\n    }\n\n    if (formUrlEncoded) {\n      data += generateMutatorImports({ mutators: formUrlEncoded });\n    }\n\n    if (paramsSerializer) {\n      data += generateMutatorImports({ mutators: paramsSerializer });\n    }\n\n    if (paramsFilter) {\n      data += generateMutatorImports({ mutators: paramsFilter });\n    }\n\n    if (fetchReviver) {\n      data += generateMutatorImports({ mutators: fetchReviver });\n    }\n\n    if (implementation.includes('NonReadonly<')) {\n      data += getOrvalGeneratedTypes();\n      data += '\\n';\n    }\n\n    if (implementation.includes('TypedResponse<')) {\n      data += getTypedResponse();\n      data += '\\n';\n    }\n\n    if (!output.schemas && needSchema) {\n      data += generateSchemasInline\n        ? generateSchemasInline()\n        : generateModelsInline(builder.schemas);\n    }\n\n    data += `${implementation.trim()}\\n`;\n\n    if (!shouldDeinlineMocks) {\n      const implementationMock = collapsedMockOutputs\n        .map((m) => m.implementation)\n        .join('\\n\\n');\n      const finalizedImplementationMock = builder.finalizeMockImplementation\n        ? builder.finalizeMockImplementation(\n            implementationMock,\n            getFinalizeMockImplementationOptions(output, collapsedMockOutputs),\n          )\n        : implementationMock;\n\n      if (collapsedMockOutputs.length > 0) {\n        data += '\\n\\n';\n        data += finalizedImplementationMock;\n      }\n    }\n\n    await writeGeneratedFile(targetPath, data);\n\n    const extraPaths: string[] = [];\n\n    if (shouldDeinlineMocks) {\n      const seenMockIndexKeys = new Set<string>();\n      const writtenMockEntries: {\n        extension: OutputMockType;\n        mockDir: string;\n      }[] = [];\n\n      for (const mockOutput of rawMockOutputs) {\n        const rawEntry = output.mock.generators.find((g) => {\n          if (isFunction(g)) return mockOutput.type === OutputMockType.MSW;\n          return g.type === mockOutput.type;\n        });\n        if (!rawEntry) continue;\n\n        const mockExtension = isFunction(rawEntry)\n          ? OutputMockType.MSW\n          : getMockFileExtensionByTypeName(rawEntry);\n        const mockDir = getMockDir(rawEntry, output.mock) ?? dirname;\n\n        const mockFilePath = path.join(\n          mockDir,\n          filename + '.' + mockExtension + extension,\n        );\n\n        const mockRelativeSchemasPath =\n          schemaCustomImportPath ??\n          resolveMockSchemasPath(mockFilePath, schemasTarget);\n\n        const importsMockForBuilder =\n          schemasPath || mockDir !== dirname\n            ? generateImportsForBuilder(\n                output,\n                mockOutput.imports,\n                mockRelativeSchemasPath,\n              )\n            : generateImportsForBuilder(\n                output,\n                mockOutput.imports.filter((imp) => !!imp.importPath),\n                '.',\n              );\n\n        let mockData = header;\n        const finalizedMockImplementation = builder.finalizeMockImplementation\n          ? builder.finalizeMockImplementation(\n              mockOutput.implementation,\n              getFinalizeMockImplementationOptions(output, mockOutput),\n            )\n          : mockOutput.implementation;\n        mockData += builder.importsMock({\n          implementation: finalizedMockImplementation,\n          imports: importsMockForBuilder,\n          projectName,\n          hasSchemaDir: !!output.schemas,\n          isAllowSyntheticDefaultImports,\n          options: isFunction(rawEntry) ? undefined : rawEntry,\n        });\n        mockData += `\\n${finalizedMockImplementation}`;\n\n        await writeGeneratedFile(mockFilePath, mockData);\n        extraPaths.push(mockFilePath);\n\n        const indexKey = `${mockExtension}::${mockDir}`;\n        if (!seenMockIndexKeys.has(indexKey)) {\n          seenMockIndexKeys.add(indexKey);\n          writtenMockEntries.push({ extension: mockExtension, mockDir });\n        }\n      }\n\n      if (output.mock.indexMockFiles) {\n        const importExtension = getImportExtension(\n          output.fileExtension,\n          output.tsconfig,\n        );\n        for (const { extension: mockExt, mockDir } of writtenMockEntries) {\n          const indexMockPath = path.join(\n            mockDir,\n            `index.${mockExt}${extension}`,\n          );\n          await writeGeneratedFile(\n            indexMockPath,\n            `export * from './${filename}.${mockExt}${importExtension}'\\n`,\n          );\n          extraPaths.push(indexMockPath);\n        }\n      }\n    }\n\n    return [targetPath, ...extraPaths];\n  } catch (error) {\n    const errorMsg = error instanceof Error ? error.message : 'unknown error';\n    throw new Error(\n      `Oups... 🍻. An Error occurred while writing file => ${errorMsg}`,\n      { cause: error },\n    );\n  }\n}\n","import path from 'node:path';\n\nimport { generateModelsInline, generateMutatorImports } from '../generators';\nimport { OutputClient, OutputMockType, type WriteModeProps } from '../types';\nimport {\n  conventionName,\n  getFileInfo,\n  getImportExtension,\n  getSchemasImportPath,\n  isFunction,\n  isString,\n  isSyntheticDefaultImportsAllow,\n  upath,\n} from '../utils';\nimport { getMockFileExtensionByTypeName } from '../utils/file-extensions';\nimport { writeGeneratedFile } from './file';\nimport { getFinalizeMockImplementationOptions } from './finalize-mock-implementation';\nimport { generateImportsForBuilder } from './generate-imports-for-builder';\nimport { getMockDir, resolveMockSchemasPath } from './mock-utils';\nimport { generateTarget } from './target';\nimport { getOrvalGeneratedTypes, getTypedResponse } from './types';\n\nexport async function writeSplitMode({\n  builder,\n  output,\n  projectName,\n  header,\n  needSchema,\n  generateSchemasInline,\n}: WriteModeProps): Promise<string[]> {\n  try {\n    const {\n      path: targetPath,\n      filename,\n      dirname,\n      extension,\n    } = getFileInfo(output.target, {\n      backupFilename: conventionName(\n        builder.info.title ?? 'filename',\n        output.namingConvention,\n      ),\n      extension: output.fileExtension,\n    });\n\n    const {\n      imports,\n      implementation,\n      mockOutputs,\n      mutators,\n      clientMutators,\n      formData,\n      formUrlEncoded,\n      paramsSerializer,\n      paramsFilter,\n      fetchReviver,\n    } = generateTarget(builder, output);\n\n    let implementationData = header;\n\n    const schemaCustomImportPath = getSchemasImportPath(output.schemas);\n    const relativeSchemasPath = output.schemas\n      ? (schemaCustomImportPath ??\n        upath.getRelativeImportPath(\n          targetPath,\n          getFileInfo(\n            isString(output.schemas) ? output.schemas : output.schemas.path,\n            { extension: output.fileExtension },\n          ).dirname,\n        ))\n      : './' + filename + '.schemas' + extension.replace(/\\.ts$/, '');\n\n    const schemasTarget = output.schemas\n      ? getFileInfo(\n          isString(output.schemas) ? output.schemas : output.schemas.path,\n          { extension: output.fileExtension },\n        ).dirname\n      : path.join(\n          dirname,\n          filename + '.schemas' + extension.replace(/\\.ts$/, ''),\n        );\n\n    const isAllowSyntheticDefaultImports = isSyntheticDefaultImportsAllow(\n      output.tsconfig,\n    );\n\n    const importsForBuilder = generateImportsForBuilder(\n      output,\n      imports,\n      relativeSchemasPath,\n    );\n\n    implementationData += builder.imports({\n      client: output.client,\n      implementation,\n      imports: importsForBuilder,\n      projectName,\n      hasSchemaDir: !!output.schemas,\n      isAllowSyntheticDefaultImports,\n      hasGlobalMutator: !!output.override.mutator,\n      hasTagsMutator: Object.values(output.override.tags).some(\n        (tag) => !!tag?.mutator,\n      ),\n      hasParamsSerializerOptions: !!output.override.paramsSerializerOptions,\n      packageJson: output.packageJson,\n      output,\n    });\n\n    const schemasPath =\n      !output.schemas && needSchema\n        ? path.join(dirname, filename + '.schemas' + extension)\n        : undefined;\n\n    if (schemasPath) {\n      const schemasData = generateSchemasInline\n        ? header + generateSchemasInline()\n        : header + generateModelsInline(builder.schemas);\n\n      await writeGeneratedFile(schemasPath, schemasData);\n    }\n\n    if (mutators) {\n      implementationData += generateMutatorImports({\n        mutators,\n        implementation,\n      });\n    }\n\n    if (clientMutators) {\n      implementationData += generateMutatorImports({\n        mutators: clientMutators,\n      });\n    }\n\n    if (formData) {\n      implementationData += generateMutatorImports({ mutators: formData });\n    }\n\n    if (formUrlEncoded) {\n      implementationData += generateMutatorImports({\n        mutators: formUrlEncoded,\n      });\n    }\n\n    if (paramsSerializer) {\n      implementationData += generateMutatorImports({\n        mutators: paramsSerializer,\n      });\n    }\n\n    if (paramsFilter) {\n      implementationData += generateMutatorImports({\n        mutators: paramsFilter,\n      });\n    }\n\n    if (fetchReviver) {\n      implementationData += generateMutatorImports({\n        mutators: fetchReviver,\n      });\n    }\n\n    if (implementation.includes('NonReadonly<')) {\n      implementationData += getOrvalGeneratedTypes();\n      implementationData += '\\n';\n    }\n\n    if (implementation.includes('TypedResponse<')) {\n      implementationData += getTypedResponse();\n      implementationData += '\\n';\n    }\n\n    implementationData += `\\n${implementation}`;\n\n    const implementationFilename =\n      filename +\n      (OutputClient.ANGULAR === output.client ? '.service' : '') +\n      extension;\n\n    const implementationPath = path.join(dirname, implementationFilename);\n    await writeGeneratedFile(implementationPath, implementationData);\n\n    const mockPaths: string[] = [];\n    const seenMockIndexKeys = new Set<string>();\n    const writtenMockEntries: {\n      extension: OutputMockType;\n      mockDir: string;\n    }[] = [];\n    for (const mockOutput of mockOutputs) {\n      const rawEntry = output.mock.generators.find((g) => {\n        if (isFunction(g)) return mockOutput.type === OutputMockType.MSW;\n        return g.type === mockOutput.type;\n      });\n      if (!rawEntry) continue;\n\n      const mockExtension = isFunction(rawEntry)\n        ? OutputMockType.MSW\n        : getMockFileExtensionByTypeName(rawEntry);\n      const mockDir = getMockDir(rawEntry, output.mock) ?? dirname;\n\n      const mockFilePath = path.join(\n        mockDir,\n        filename + '.' + mockExtension + extension,\n      );\n\n      const mockRelativeSchemasPath =\n        schemaCustomImportPath ??\n        resolveMockSchemasPath(mockFilePath, schemasTarget);\n\n      const importsMockForBuilder = generateImportsForBuilder(\n        output,\n        mockOutput.imports,\n        mockRelativeSchemasPath,\n      );\n      let mockData = header;\n      const finalizedMockImplementation = builder.finalizeMockImplementation\n        ? builder.finalizeMockImplementation(\n            mockOutput.implementation,\n            getFinalizeMockImplementationOptions(output, mockOutput),\n          )\n        : mockOutput.implementation;\n      mockData += builder.importsMock({\n        implementation: finalizedMockImplementation,\n        imports: importsMockForBuilder,\n        projectName,\n        hasSchemaDir: !!output.schemas,\n        isAllowSyntheticDefaultImports,\n        options: isFunction(rawEntry) ? undefined : rawEntry,\n      });\n      mockData += `\\n${finalizedMockImplementation}`;\n\n      await writeGeneratedFile(mockFilePath, mockData);\n      mockPaths.push(mockFilePath);\n\n      const indexKey = `${mockExtension}::${mockDir}`;\n      if (!seenMockIndexKeys.has(indexKey)) {\n        seenMockIndexKeys.add(indexKey);\n        writtenMockEntries.push({ extension: mockExtension, mockDir });\n      }\n    }\n\n    const indexMockPaths: string[] = [];\n    if (output.mock.indexMockFiles) {\n      const importExtension = getImportExtension(\n        output.fileExtension,\n        output.tsconfig,\n      );\n      for (const { extension: mockExt, mockDir } of writtenMockEntries) {\n        const indexMockPath = path.join(\n          mockDir,\n          `index.${mockExt}${extension}`,\n        );\n        await writeGeneratedFile(\n          indexMockPath,\n          `export * from './${filename}.${mockExt}${importExtension}'\\n`,\n        );\n        indexMockPaths.push(indexMockPath);\n      }\n    }\n\n    return [\n      implementationPath,\n      ...(schemasPath ? [schemasPath] : []),\n      ...mockPaths,\n      ...indexMockPaths,\n    ];\n  } catch (error) {\n    throw new Error(\n      `Oups... 🍻. An Error occurred while splitting => ${String(error)}`,\n      { cause: error },\n    );\n  }\n}\n","import {\n  DefaultTag,\n  type GeneratorMockOutput,\n  type GeneratorMockOutputFull,\n  type GeneratorOperation,\n  type GeneratorTarget,\n  type GeneratorTargetFull,\n  type NormalizedOutputOptions,\n  OutputClient,\n  type WriteSpecBuilder,\n} from '../types';\nimport { compareVersions, kebab, pascal } from '../utils';\n\n/**\n * Ensures every operation has at least one tag by falling back to the\n * {@link DefaultTag} constant for untagged operations, so the tag-routing\n * logic in {@link generateTargetTags} always has a bucket to assign the\n * operation to.\n */\nfunction addDefaultTagIfEmpty(operation: GeneratorOperation) {\n  return {\n    ...operation,\n    tags: operation.tags.length > 0 ? operation.tags : [DefaultTag],\n  };\n}\n\nfunction emptyMockOutputFull(\n  type: GeneratorMockOutputFull['type'],\n): GeneratorMockOutputFull {\n  return {\n    type,\n    implementation: { function: '', handler: '', handlerName: '' },\n    imports: [],\n  };\n}\n\nfunction flattenMockOutput(full: GeneratorMockOutputFull): GeneratorMockOutput {\n  return {\n    type: full.type,\n    implementation: full.implementation.function + full.implementation.handler,\n    imports: full.imports,\n    strictMockSchemaTypeNames: full.strictMockSchemaTypeNames,\n  };\n}\n\nfunction mergeOperationMockOutputs(\n  accMockOutputs: GeneratorMockOutputFull[],\n  opMockOutputs: GeneratorMockOutputFull[],\n): GeneratorMockOutputFull[] {\n  const result: GeneratorMockOutputFull[] = accMockOutputs.map((m) => ({\n    type: m.type,\n    implementation: { ...m.implementation },\n    imports: [...m.imports],\n    strictMockSchemaTypeNames: m.strictMockSchemaTypeNames\n      ? [...m.strictMockSchemaTypeNames]\n      : undefined,\n  }));\n  for (const op of opMockOutputs) {\n    let acc = result.find((m) => m.type === op.type);\n    if (!acc) {\n      acc = emptyMockOutputFull(op.type);\n      result.push(acc);\n    }\n    acc.imports.push(...op.imports);\n    if (op.strictMockSchemaTypeNames?.length) {\n      acc.strictMockSchemaTypeNames = [\n        ...new Set([\n          ...(acc.strictMockSchemaTypeNames ?? []),\n          ...op.strictMockSchemaTypeNames,\n        ]),\n      ];\n    }\n    acc.implementation.function += op.implementation.function;\n    acc.implementation.handler += op.implementation.handler;\n    if (op.implementation.handlerName) {\n      const separator =\n        acc.implementation.handlerName.length > 0 ? ',\\n  ' : '  ';\n      acc.implementation.handlerName +=\n        separator + op.implementation.handlerName + '()';\n    }\n  }\n  return result;\n}\n\nfunction initialMockOutputsForOperation(\n  op: GeneratorOperation,\n): GeneratorMockOutputFull[] {\n  return op.mockOutputs.map((m) => ({\n    type: m.type,\n    implementation: {\n      function: m.implementation.function,\n      handler: m.implementation.handler,\n      handlerName: m.implementation.handlerName\n        ? '  ' + m.implementation.handlerName + '()'\n        : '',\n    },\n    imports: [...m.imports],\n    strictMockSchemaTypeNames: m.strictMockSchemaTypeNames\n      ? [...m.strictMockSchemaTypeNames]\n      : undefined,\n  }));\n}\n\nfunction generateTargetTags(\n  currentAcc: Record<string, GeneratorTargetFull>,\n  operation: GeneratorOperation,\n): Record<string, GeneratorTargetFull> {\n  const tag = kebab(operation.tags[0]);\n\n  if (!(tag in currentAcc)) {\n    currentAcc[tag] = {\n      imports: operation.imports,\n      mockOutputs: initialMockOutputsForOperation(operation),\n      mutators: operation.mutator ? [operation.mutator] : [],\n      clientMutators: operation.clientMutators ?? [],\n      formData: operation.formData ? [operation.formData] : [],\n      formUrlEncoded: operation.formUrlEncoded\n        ? [operation.formUrlEncoded]\n        : [],\n      paramsSerializer: operation.paramsSerializer\n        ? [operation.paramsSerializer]\n        : [],\n      paramsFilter: operation.paramsFilter ? [operation.paramsFilter] : [],\n      fetchReviver: operation.fetchReviver ? [operation.fetchReviver] : [],\n      implementation: operation.implementation,\n    };\n\n    return currentAcc;\n  }\n\n  const currentOperation = currentAcc[tag];\n  currentAcc[tag] = {\n    implementation: currentOperation.implementation + operation.implementation,\n    imports: [...currentOperation.imports, ...operation.imports],\n    mockOutputs: mergeOperationMockOutputs(\n      currentOperation.mockOutputs,\n      operation.mockOutputs,\n    ),\n    mutators: operation.mutator\n      ? [...(currentOperation.mutators ?? []), operation.mutator]\n      : currentOperation.mutators,\n    clientMutators: operation.clientMutators\n      ? [\n          ...(currentOperation.clientMutators ?? []),\n          ...operation.clientMutators,\n        ]\n      : currentOperation.clientMutators,\n    formData: operation.formData\n      ? [...(currentOperation.formData ?? []), operation.formData]\n      : currentOperation.formData,\n    formUrlEncoded: operation.formUrlEncoded\n      ? [...(currentOperation.formUrlEncoded ?? []), operation.formUrlEncoded]\n      : currentOperation.formUrlEncoded,\n    paramsSerializer: operation.paramsSerializer\n      ? [\n          ...(currentOperation.paramsSerializer ?? []),\n          operation.paramsSerializer,\n        ]\n      : currentOperation.paramsSerializer,\n    paramsFilter: operation.paramsFilter\n      ? [...(currentOperation.paramsFilter ?? []), operation.paramsFilter]\n      : currentOperation.paramsFilter,\n    fetchReviver: operation.fetchReviver\n      ? [...(currentOperation.fetchReviver ?? []), operation.fetchReviver]\n      : currentOperation.fetchReviver,\n  };\n  return currentAcc;\n}\n\nexport function generateTargetForTags(\n  builder: WriteSpecBuilder,\n  options: NormalizedOutputOptions,\n) {\n  const isAngularClient = options.client === OutputClient.ANGULAR;\n\n  const operations = Object.values(builder.operations).map((operation) =>\n    addDefaultTagIfEmpty(operation),\n  );\n  let allTargetTags: Record<string, GeneratorTargetFull> = {};\n  for (const [index, operation] of operations.entries()) {\n    allTargetTags = generateTargetTags(allTargetTags, operation);\n\n    if (index === operations.length - 1) {\n      const transformed: Record<string, GeneratorTargetFull> = {};\n      for (const [tag, target] of Object.entries(allTargetTags)) {\n        const isMutator = !!target.mutators?.some((mutator) =>\n          isAngularClient ? mutator.hasThirdArg : mutator.hasSecondArg,\n        );\n        const operationNames = Object.values(builder.operations)\n          // Operations can have multiple tags, but they are grouped by the first\n          // tag, therefore we only want to handle the case where the tag\n          // is the first in the list of tags.\n          .filter(\n            ({ tags }) =>\n              tags.map((tag) => kebab(tag)).indexOf(kebab(tag)) === 0,\n          )\n          .map(({ operationName }) => operationName);\n\n        const typescriptVersion =\n          options.packageJson?.dependencies?.typescript ??\n          options.packageJson?.devDependencies?.typescript ??\n          '4.4.0';\n\n        const hasAwaitedType = compareVersions(typescriptVersion, '4.5.0');\n\n        const titles = builder.title({\n          outputClient: options.client,\n          title: pascal(tag),\n          customTitleFunc: options.override.title,\n          output: options,\n        });\n\n        const footer = builder.footer({\n          outputClient: options.client,\n          operationNames,\n          hasMutator: !!target.mutators?.length,\n          hasAwaitedType,\n          titles,\n          output: options,\n        });\n\n        const header = builder.header({\n          outputClient: options.client,\n          isRequestOptions: options.override.requestOptions !== false,\n          isMutator,\n          isGlobalMutator: !!options.override.mutator,\n          provideIn: options.override.angular.provideIn,\n          hasAwaitedType,\n          titles,\n          output: options,\n          verbOptions: builder.verbOptions,\n          tag,\n          isDefaultTagBucket:\n            tag === 'default' &&\n            Object.values(builder.operations).some(\n              (operation) => operation.tags.length === 0,\n            ),\n          clientImplementation: target.implementation,\n        });\n\n        // Apply the per-tag header/footer wrap to each mock output that has\n        // accumulated handler entries. Mock outputs without a handler (faker\n        // only) skip the wrap.\n        const wrappedMockOutputs: GeneratorMockOutputFull[] =\n          target.mockOutputs.map((m) => ({\n            type: m.type,\n            implementation: {\n              function: m.implementation.function,\n              handler: m.implementation.handlerName\n                ? m.implementation.handler +\n                  header.implementationMock +\n                  m.implementation.handlerName +\n                  footer.implementationMock\n                : m.implementation.handler,\n              handlerName: m.implementation.handlerName,\n            },\n            imports: m.imports,\n            strictMockSchemaTypeNames: m.strictMockSchemaTypeNames,\n          }));\n\n        transformed[tag] = {\n          implementation:\n            header.implementation +\n            target.implementation +\n            footer.implementation,\n          mockOutputs: wrappedMockOutputs,\n          imports: target.imports,\n          mutators: target.mutators,\n          clientMutators: target.clientMutators,\n          formData: target.formData,\n          formUrlEncoded: target.formUrlEncoded,\n          paramsSerializer: target.paramsSerializer,\n          paramsFilter: target.paramsFilter,\n          fetchReviver: target.fetchReviver,\n        };\n      }\n      allTargetTags = transformed;\n    }\n  }\n\n  const result: Record<string, GeneratorTarget> = {};\n  for (const [tag, target] of Object.entries(allTargetTags)) {\n    result[tag] = {\n      ...target,\n      mockOutputs: target.mockOutputs.map((m) => flattenMockOutput(m)),\n    };\n  }\n  return result;\n}\n","import path from 'node:path';\n\nimport { generateModelsInline, generateMutatorImports } from '../generators';\nimport { OutputClient, OutputMockType, type WriteModeProps } from '../types';\nimport {\n  conventionName,\n  getFileInfo,\n  getSchemasImportPath,\n  isFunction,\n  isString,\n  isSyntheticDefaultImportsAllow,\n  pascal,\n  upath,\n} from '../utils';\nimport { getMockFileExtensionByTypeName } from '../utils/file-extensions';\nimport { writeGeneratedFile } from './file';\nimport { getFinalizeMockImplementationOptions } from './finalize-mock-implementation';\nimport { generateImportsForBuilder } from './generate-imports-for-builder';\nimport { getMockDir, resolveMockSchemasPath } from './mock-utils';\nimport { generateTargetForTags } from './target-tags';\nimport { getOrvalGeneratedTypes, getTypedResponse } from './types';\n\nexport async function writeSplitTagsMode({\n  builder,\n  output,\n  projectName,\n  header,\n  needSchema,\n  generateSchemasInline,\n}: WriteModeProps): Promise<string[]> {\n  const { filename, dirname, extension } = getFileInfo(output.target, {\n    backupFilename: conventionName(\n      builder.info.title ?? 'filename',\n      output.namingConvention,\n    ),\n    extension: output.fileExtension,\n  });\n\n  const target = generateTargetForTags(builder, output);\n\n  const isAllowSyntheticDefaultImports = isSyntheticDefaultImportsAllow(\n    output.tsconfig,\n  );\n\n  interface MockIndexEntry {\n    ext: OutputMockType;\n    mockDir: string;\n    tags: string[];\n  }\n  const mockIndexEntries: MockIndexEntry[] = [];\n  const seenMockIndexKeys = new Set<string>();\n\n  const schemasTarget = output.schemas\n    ? getFileInfo(\n        isString(output.schemas) ? output.schemas : output.schemas.path,\n        { extension: output.fileExtension },\n      ).dirname\n    : path.join(\n        dirname,\n        filename + '.schemas' + extension.replace(/\\.ts$/, ''),\n      );\n\n  const tagEntries = Object.entries(target).toSorted(([a], [b]) =>\n    a.localeCompare(b),\n  );\n\n  const generatedFilePathsArray = await Promise.all(\n    tagEntries.map(async ([tag, target]) => {\n      try {\n        const {\n          imports,\n          implementation,\n          mockOutputs,\n          mutators,\n          clientMutators,\n          formData,\n          fetchReviver,\n          formUrlEncoded,\n          paramsSerializer,\n          paramsFilter,\n        } = target;\n\n        let implementationData = header;\n\n        const importerPath = path.join(dirname, tag, tag + extension);\n        const schemaCustomImportPath = getSchemasImportPath(output.schemas);\n        const relativeSchemasPath = output.schemas\n          ? (schemaCustomImportPath ??\n            upath.getRelativeImportPath(\n              importerPath,\n              getFileInfo(\n                isString(output.schemas) ? output.schemas : output.schemas.path,\n                { extension: output.fileExtension },\n              ).dirname,\n            ))\n          : '../' + filename + '.schemas' + extension.replace(/\\.ts$/, '');\n\n        const tagNames = new Set(tagEntries.map(([t]) => t));\n        const serviceSuffix =\n          OutputClient.ANGULAR === output.client ? '.service' : '';\n\n        const adjustedImports = imports.map((imp) => {\n          if (!imp.importPath) return imp;\n\n          if (!imp.importPath.startsWith('.')) return imp;\n\n          const resolvedPath = path.resolve(dirname, imp.importPath);\n          const targetBasename = path.basename(resolvedPath);\n\n          let targetFile: string;\n          if (tagNames.has(targetBasename)) {\n            const tagFilename = targetBasename + serviceSuffix + extension;\n            targetFile = path.join(resolvedPath, tagFilename);\n          } else {\n            targetFile = resolvedPath + extension;\n          }\n\n          const adjustedPath = upath.getRelativeImportPath(\n            importerPath,\n            targetFile,\n          );\n\n          return { ...imp, importPath: adjustedPath };\n        });\n\n        const importsForBuilder = generateImportsForBuilder(\n          output,\n          adjustedImports,\n          relativeSchemasPath,\n        );\n\n        implementationData += builder.imports({\n          client: output.client,\n          implementation,\n          imports: importsForBuilder,\n          projectName,\n          hasSchemaDir: !!output.schemas,\n          isAllowSyntheticDefaultImports,\n          hasGlobalMutator: !!output.override.mutator,\n          hasTagsMutator: Object.values(output.override.tags).some(\n            (tag) => !!tag?.mutator,\n          ),\n          hasParamsSerializerOptions: !!output.override.paramsSerializerOptions,\n          packageJson: output.packageJson,\n          output,\n        });\n\n        const schemasPath =\n          !output.schemas && needSchema\n            ? path.join(dirname, filename + '.schemas' + extension)\n            : undefined;\n\n        if (schemasPath) {\n          const schemasData = generateSchemasInline\n            ? header + generateSchemasInline()\n            : header + generateModelsInline(builder.schemas);\n\n          await writeGeneratedFile(schemasPath, schemasData);\n        }\n\n        if (mutators) {\n          implementationData += generateMutatorImports({\n            mutators,\n            implementation,\n            oneMore: true,\n          });\n        }\n\n        if (clientMutators) {\n          implementationData += generateMutatorImports({\n            mutators: clientMutators,\n            oneMore: true,\n          });\n        }\n\n        if (formData) {\n          implementationData += generateMutatorImports({\n            mutators: formData,\n            oneMore: true,\n          });\n        }\n        if (formUrlEncoded) {\n          implementationData += generateMutatorImports({\n            mutators: formUrlEncoded,\n            oneMore: true,\n          });\n        }\n        if (paramsSerializer) {\n          implementationData += generateMutatorImports({\n            mutators: paramsSerializer,\n            oneMore: true,\n          });\n        }\n        if (paramsFilter) {\n          implementationData += generateMutatorImports({\n            mutators: paramsFilter,\n            oneMore: true,\n          });\n        }\n\n        if (fetchReviver) {\n          implementationData += generateMutatorImports({\n            mutators: fetchReviver,\n            oneMore: true,\n          });\n        }\n\n        if (implementation.includes('NonReadonly<')) {\n          implementationData += getOrvalGeneratedTypes();\n          implementationData += '\\n';\n        }\n\n        if (implementation.includes('TypedResponse<')) {\n          implementationData += getTypedResponse();\n          implementationData += '\\n';\n        }\n\n        implementationData += `\\n${implementation}`;\n\n        const implementationFilename =\n          tag +\n          (OutputClient.ANGULAR === output.client ? '.service' : '') +\n          extension;\n\n        const implementationPath = path.join(\n          dirname,\n          tag,\n          implementationFilename,\n        );\n        await writeGeneratedFile(implementationPath, implementationData);\n\n        const mockPaths: string[] = [];\n\n        for (const mockOutput of mockOutputs) {\n          const rawEntry = output.mock.generators.find((g) => {\n            if (isFunction(g)) return mockOutput.type === OutputMockType.MSW;\n            return g.type === mockOutput.type;\n          });\n          if (!rawEntry) continue;\n\n          const mockExtension = isFunction(rawEntry)\n            ? OutputMockType.MSW\n            : getMockFileExtensionByTypeName(rawEntry);\n          const mockDir = getMockDir(rawEntry, output.mock) ?? dirname;\n\n          const mockFilePath = path.join(\n            mockDir,\n            tag,\n            tag + '.' + mockExtension + extension,\n          );\n\n          const mockRelativeSchemasPath =\n            schemaCustomImportPath ??\n            resolveMockSchemasPath(mockFilePath, schemasTarget);\n\n          const importsMockForBuilder = generateImportsForBuilder(\n            output,\n            mockOutput.imports,\n            mockRelativeSchemasPath,\n          );\n\n          const finalizedMockImplementation = builder.finalizeMockImplementation\n            ? builder.finalizeMockImplementation(\n                mockOutput.implementation,\n                getFinalizeMockImplementationOptions(output, mockOutput),\n              )\n            : mockOutput.implementation;\n          let mockData = header;\n          mockData += builder.importsMock({\n            implementation: finalizedMockImplementation,\n            imports: importsMockForBuilder,\n            projectName,\n            hasSchemaDir: !!output.schemas,\n            isAllowSyntheticDefaultImports,\n            options: isFunction(rawEntry) ? undefined : rawEntry,\n          });\n          mockData += `\\n${finalizedMockImplementation}`;\n\n          await writeGeneratedFile(mockFilePath, mockData);\n          mockPaths.push(mockFilePath);\n\n          const indexKey = `${mockExtension}::${mockDir}`;\n          let indexEntry = mockIndexEntries.find(\n            (e) => e.ext === mockExtension && e.mockDir === mockDir,\n          );\n          if (!indexEntry) {\n            indexEntry = { ext: mockExtension, mockDir, tags: [] };\n            mockIndexEntries.push(indexEntry);\n            seenMockIndexKeys.add(indexKey);\n          }\n          if (!indexEntry.tags.includes(tag)) {\n            indexEntry.tags.push(tag);\n          }\n        }\n\n        return [\n          implementationPath,\n          ...(schemasPath ? [schemasPath] : []),\n          ...mockPaths,\n        ];\n      } catch (error) {\n        throw new Error(\n          `Oups... 🍻. An Error occurred while splitting tag ${tag} => ${String(error)}`,\n          { cause: error },\n        );\n      }\n    }),\n  );\n\n  if (output.mock.indexMockFiles) {\n    for (const { ext, mockDir, tags } of mockIndexEntries) {\n      const indexPath = path.join(mockDir, `index.${ext}${extension}`);\n      const indexContent = tags\n        .toSorted((a, b) => a.localeCompare(b))\n        .map((tag) => {\n          const localMockPath = upath.joinSafe('./', tag, tag + '.' + ext);\n          return ext === OutputMockType.MSW\n            ? `export { get${pascal(tag)}Mock } from '${localMockPath}'\\n`\n            : `export * from '${localMockPath}'\\n`;\n        })\n        .join('');\n      await writeGeneratedFile(indexPath, indexContent);\n    }\n  }\n\n  return [\n    ...new Set([\n      ...(output.mock.indexMockFiles\n        ? mockIndexEntries.map(({ mockDir, ext }) =>\n            path.join(mockDir, `index.${ext}${extension}`),\n          )\n        : []),\n      ...generatedFilePathsArray.flat(),\n    ]),\n  ];\n}\n","import path from 'node:path';\n\nimport { generateModelsInline, generateMutatorImports } from '../generators';\nimport { OutputMockType, type WriteModeProps } from '../types';\nimport {\n  conventionName,\n  getFileInfo,\n  getSchemasImportPath,\n  isFunction,\n  isString,\n  isSyntheticDefaultImportsAllow,\n  kebab,\n  pascal,\n  upath,\n} from '../utils';\nimport { getMockFileExtensionByTypeName } from '../utils/file-extensions';\nimport { escapeRegExp } from '../utils/string';\nimport { writeGeneratedFile } from './file';\nimport { getFinalizeMockImplementationOptions } from './finalize-mock-implementation';\nimport { generateImportsForBuilder } from './generate-imports-for-builder';\nimport { collapseInlineMockOutputs } from './mock-outputs';\nimport {\n  getMockDir,\n  hasAnyMockPath,\n  resolveMockSchemasPath,\n} from './mock-utils';\nimport { generateTargetForTags } from './target-tags';\nimport { getOrvalGeneratedTypes, getTypedResponse } from './types';\n\nexport async function writeTagsMode({\n  builder,\n  output,\n  projectName,\n  header,\n  needSchema,\n  generateSchemasInline,\n}: WriteModeProps): Promise<string[]> {\n  const {\n    path: targetPath,\n    filename,\n    dirname,\n    extension,\n  } = getFileInfo(output.target, {\n    backupFilename: conventionName(\n      builder.info.title ?? 'filename',\n      output.namingConvention,\n    ),\n    extension: output.fileExtension,\n  });\n\n  const target = generateTargetForTags(builder, output);\n\n  const isAllowSyntheticDefaultImports = isSyntheticDefaultImportsAllow(\n    output.tsconfig,\n  );\n\n  const shouldDeinlineMocks = hasAnyMockPath(output.mock);\n\n  interface MockIndexEntry {\n    ext: OutputMockType;\n    mockDir: string;\n    tags: string[];\n  }\n  const mockIndexEntries: MockIndexEntry[] = [];\n  const seenMockIndexKeys = new Set<string>();\n\n  const schemaCustomImportPath = getSchemasImportPath(output.schemas);\n  const schemasPathRelative = output.schemas\n    ? (schemaCustomImportPath ??\n      upath.getRelativeImportPath(\n        targetPath,\n        getFileInfo(\n          isString(output.schemas) ? output.schemas : output.schemas.path,\n          { extension: output.fileExtension },\n        ).dirname,\n      ))\n    : './' + filename + '.schemas' + extension.replace(/\\.ts$/, '');\n\n  const schemasTarget = output.schemas\n    ? getFileInfo(\n        isString(output.schemas) ? output.schemas : output.schemas.path,\n        { extension: output.fileExtension },\n      ).dirname\n    : path.join(\n        dirname,\n        filename + '.schemas' + extension.replace(/\\.ts$/, ''),\n      );\n\n  const tagEntries = Object.entries(target).toSorted(([a], [b]) =>\n    a.localeCompare(b),\n  );\n\n  const generatedFilePathsArray = await Promise.all(\n    tagEntries.map(async ([tag, target]) => {\n      try {\n        const {\n          imports,\n          implementation,\n          mockOutputs: rawMockOutputs,\n          mutators,\n          clientMutators,\n          formData,\n          formUrlEncoded,\n          fetchReviver,\n          paramsSerializer,\n          paramsFilter,\n        } = target;\n\n        const implementationImports = imports.filter((imp) => {\n          const searchWords = [imp.alias, imp.name]\n            .filter((part): part is string => Boolean(part?.length))\n            .map((part) => escapeRegExp(part))\n            .join('|');\n          if (!searchWords) {\n            return false;\n          }\n\n          return new RegExp(String.raw`\\b(${searchWords})\\b`, 'g').test(\n            implementation,\n          );\n        });\n\n        const normalizedImports = implementationImports.map((imp) => ({\n          ...imp,\n        }));\n\n        const collapsedMockOutputs = shouldDeinlineMocks\n          ? []\n          : collapseInlineMockOutputs(rawMockOutputs);\n\n        let data = header;\n\n        if (!shouldDeinlineMocks) {\n          const importsMock = collapsedMockOutputs.flatMap((m) => m.imports);\n\n          for (const mockImport of importsMock) {\n            const matchingImport = normalizedImports.find(\n              (imp) =>\n                imp.name === mockImport.name &&\n                (imp.alias ?? '') === (mockImport.alias ?? ''),\n            );\n            if (!matchingImport) continue;\n\n            const mockNeedsRuntimeValue =\n              !!mockImport.values ||\n              !!mockImport.isConstant ||\n              !!mockImport.default ||\n              !!mockImport.namespaceImport ||\n              !!mockImport.syntheticDefaultImport;\n            if (mockNeedsRuntimeValue) {\n              matchingImport.values = true;\n            }\n          }\n        }\n\n        const importsForBuilder = generateImportsForBuilder(\n          output,\n          normalizedImports,\n          schemasPathRelative,\n        );\n\n        data += builder.imports({\n          client: output.client,\n          implementation,\n          imports: importsForBuilder,\n          projectName,\n          hasSchemaDir: !!output.schemas,\n          isAllowSyntheticDefaultImports,\n          hasGlobalMutator: !!output.override.mutator,\n          hasTagsMutator: Object.values(output.override.tags).some(\n            (tag) => !!tag?.mutator,\n          ),\n          hasParamsSerializerOptions: !!output.override.paramsSerializerOptions,\n          packageJson: output.packageJson,\n          output,\n        });\n\n        if (!shouldDeinlineMocks) {\n          for (const mockOutput of collapsedMockOutputs) {\n            const entry = output.mock.generators.find(\n              (g) => !isFunction(g) && g.type === mockOutput.type,\n            );\n            const importsMockForBuilder = generateImportsForBuilder(\n              output,\n              mockOutput.imports.filter(\n                (impMock) =>\n                  !normalizedImports.some(\n                    (imp) =>\n                      imp.name === impMock.name &&\n                      (imp.alias ?? '') === (impMock.alias ?? ''),\n                  ),\n              ),\n              schemasPathRelative,\n            );\n\n            data += builder.importsMock({\n              implementation: mockOutput.implementation,\n              imports: importsMockForBuilder,\n              projectName,\n              hasSchemaDir: !!output.schemas,\n              isAllowSyntheticDefaultImports,\n              options: entry && !isFunction(entry) ? entry : undefined,\n            });\n          }\n        }\n\n        const schemasPath =\n          !output.schemas && needSchema\n            ? path.join(dirname, filename + '.schemas' + extension)\n            : undefined;\n\n        if (schemasPath) {\n          const schemasData = generateSchemasInline\n            ? header + generateSchemasInline()\n            : header + generateModelsInline(builder.schemas);\n\n          await writeGeneratedFile(schemasPath, schemasData);\n        }\n\n        if (mutators) {\n          data += generateMutatorImports({ mutators, implementation });\n        }\n\n        if (clientMutators) {\n          data += generateMutatorImports({\n            mutators: clientMutators,\n          });\n        }\n\n        if (formData) {\n          data += generateMutatorImports({ mutators: formData });\n        }\n\n        if (formUrlEncoded) {\n          data += generateMutatorImports({ mutators: formUrlEncoded });\n        }\n\n        if (paramsSerializer) {\n          data += generateMutatorImports({ mutators: paramsSerializer });\n        }\n\n        if (paramsFilter) {\n          data += generateMutatorImports({ mutators: paramsFilter });\n        }\n\n        if (fetchReviver) {\n          data += generateMutatorImports({ mutators: fetchReviver });\n        }\n\n        data += '\\n\\n';\n\n        if (implementation.includes('NonReadonly<')) {\n          data += getOrvalGeneratedTypes();\n          data += '\\n';\n        }\n\n        if (implementation.includes('TypedResponse<')) {\n          data += getTypedResponse();\n          data += '\\n';\n        }\n\n        data += implementation;\n\n        if (!shouldDeinlineMocks) {\n          const implementationMock = collapsedMockOutputs\n            .map((m) => m.implementation)\n            .join('\\n\\n');\n          const finalizedImplementationMock = builder.finalizeMockImplementation\n            ? builder.finalizeMockImplementation(\n                implementationMock,\n                getFinalizeMockImplementationOptions(\n                  output,\n                  collapsedMockOutputs,\n                ),\n              )\n            : implementationMock;\n\n          if (collapsedMockOutputs.length > 0) {\n            data += '\\n\\n';\n            data += finalizedImplementationMock;\n          }\n        }\n\n        const kebabTag = kebab(tag);\n        const implementationPath = path.join(\n          dirname,\n          `${kebabTag}${extension}`,\n        );\n        await writeGeneratedFile(implementationPath, data);\n\n        const extraPaths: string[] = [];\n\n        if (shouldDeinlineMocks) {\n          for (const mockOutput of rawMockOutputs) {\n            const rawEntry = output.mock.generators.find((g) => {\n              if (isFunction(g)) return mockOutput.type === OutputMockType.MSW;\n              return g.type === mockOutput.type;\n            });\n            if (!rawEntry) continue;\n\n            const mockExtension = isFunction(rawEntry)\n              ? OutputMockType.MSW\n              : getMockFileExtensionByTypeName(rawEntry);\n            const mockDir = getMockDir(rawEntry, output.mock) ?? dirname;\n\n            const mockFilePath = path.join(\n              mockDir,\n              kebabTag,\n              kebabTag + '.' + mockExtension + extension,\n            );\n\n            const mockRelativeSchemasPath =\n              schemaCustomImportPath ??\n              resolveMockSchemasPath(mockFilePath, schemasTarget);\n\n            const importsMockForBuilder = generateImportsForBuilder(\n              output,\n              mockOutput.imports,\n              mockRelativeSchemasPath,\n            );\n\n            let mockData = header;\n            const finalizedMockImplementation =\n              builder.finalizeMockImplementation\n                ? builder.finalizeMockImplementation(\n                    mockOutput.implementation,\n                    getFinalizeMockImplementationOptions(output, mockOutput),\n                  )\n                : mockOutput.implementation;\n            mockData += builder.importsMock({\n              implementation: finalizedMockImplementation,\n              imports: importsMockForBuilder,\n              projectName,\n              hasSchemaDir: !!output.schemas,\n              isAllowSyntheticDefaultImports,\n              options: isFunction(rawEntry) ? undefined : rawEntry,\n            });\n            mockData += `\\n${finalizedMockImplementation}`;\n\n            await writeGeneratedFile(mockFilePath, mockData);\n            extraPaths.push(mockFilePath);\n\n            const indexKey = `${mockExtension}::${mockDir}`;\n            let indexEntry = mockIndexEntries.find(\n              (e) => e.ext === mockExtension && e.mockDir === mockDir,\n            );\n            if (!indexEntry) {\n              indexEntry = { ext: mockExtension, mockDir, tags: [] };\n              mockIndexEntries.push(indexEntry);\n              seenMockIndexKeys.add(indexKey);\n            }\n            if (!indexEntry.tags.includes(kebabTag)) {\n              indexEntry.tags.push(kebabTag);\n            }\n          }\n        }\n\n        return [\n          implementationPath,\n          ...(schemasPath ? [schemasPath] : []),\n          ...extraPaths,\n        ];\n      } catch (error) {\n        throw new Error(\n          `Oups... 🍻. An Error occurred while writing tag ${tag} => ${String(error)}`,\n          { cause: error },\n        );\n      }\n    }),\n  );\n\n  if (shouldDeinlineMocks && output.mock.indexMockFiles) {\n    for (const { ext, mockDir, tags } of mockIndexEntries) {\n      const indexPath = path.join(mockDir, `index.${ext}${extension}`);\n      const indexContent = tags\n        .toSorted((a, b) => a.localeCompare(b))\n        .map((kebabTag) => {\n          const localMockPath = upath.joinSafe(\n            './',\n            kebabTag,\n            kebabTag + '.' + ext,\n          );\n          return ext === OutputMockType.MSW\n            ? `export { get${pascal(kebabTag)}Mock } from '${localMockPath}'\\n`\n            : `export * from '${localMockPath}'\\n`;\n        })\n        .join('');\n      await writeGeneratedFile(indexPath, indexContent);\n      generatedFilePathsArray.push([indexPath]);\n    }\n  }\n\n  return generatedFilePathsArray.flat();\n}\n"],"mappings":"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"}