{"version":3,"sources":["../../custom/src/index.ts","../../dio/src/index.ts","../src/index.ts","../src/parser/index.ts","../src/parser/openapi-parser.ts","../src/parser/models.ts","../src/parser/endpoints.ts","../src/parser/references.ts","../src/utils/file.ts","../src/utils/type-mapper.ts","../src/utils/assertion.ts","../src/templates/template-manager.ts","../src/generators/model-generator.ts","../src/resolvers/schema-resolver.ts","../src/resolvers/reference-resolver.ts","../src/getters/combine.ts","../src/getters/object.ts","../src/generators/models.ts","../src/generators/client.ts","../src/generators/endpoint-generator.ts","../src/generators/params-generator.ts","../src/generators/headers-generator.ts","../src/generators/service-generator.ts","../src/generators/services.ts","../src/generators/index.ts"],"sourcesContent":["import {\n  ClientBuilder,\n  ClientGeneratorBuilder,\n  ClientHeaderBuilder,\n  ClientDependenciesBuilder,\n  ClientFooterBuilder,\n  GeneratorVerbOptions,\n  GeneratorOptions,\n  GeneratorDependency,\n} from '@dorval/core';\n\n/**\n * Generate enhanced custom client implementation\n * This creates a client with service registration pattern like Supabase/Firebase\n */\nconst generateCustomImplementation = (\n  {\n    verb,\n    route,\n    operationName,\n    response,\n    body,\n    headers,\n    queryParams,\n    pathParams,\n    props,\n    mutator,\n    override,\n  }: GeneratorVerbOptions,\n  { output }: GeneratorOptions,\n): string => {\n  const httpMethod = verb.toLowerCase();\n  const hasBody = ['post', 'put', 'patch'].includes(httpMethod) && body;\n  const hasQueryParams = !!queryParams;\n  const hasHeaders = !!headers;\n  const hasPathParams = pathParams && pathParams.length > 0;\n  \n  // Build path with parameters\n  let pathConstruction = hasPathParams\n    ? `final path = '${route}'${pathParams.map((p: any) => `.replaceAll('{${p.name}}', ${p.dartName}.toString())`).join('')};`\n    : `const path = '${route}';`;\n  \n  // Build query parameters\n  let queryParamsConstruction = '';\n  if (hasQueryParams) {\n    queryParamsConstruction = `\n    final queryParameters = <String, dynamic>{\n      ${queryParams.map((q: any) => `if (${q.dartName} != null) '${q.name}': ${q.dartName},`).join('\\n      ')}\n    };`;\n  }\n  \n  // Build headers\n  let headersConstruction = '';\n  if (hasHeaders) {\n    headersConstruction = `\n    final requestHeaders = <String, String>{\n      ${headers.map((h: any) => `if (${h.dartName} != null) '${h.name}': ${h.dartName}.toString(),`).join('\\n      ')}\n    };`;\n  }\n  \n  // Build response handling\n  let responseHandling = '';\n  if (response.isVoid) {\n    responseHandling = 'return;';\n  } else if (response.isList) {\n    responseHandling = `\n      return (response.data as List<dynamic>)\n          .map((item) => ${response.itemType}.fromJson(item as Map<String, dynamic>))\n          .toList();`;\n  } else if (response.isModel) {\n    responseHandling = `\n      return ${response.type}.fromJson(response.data as Map<String, dynamic>);`;\n  } else if (response.isPrimitive) {\n    responseHandling = `\n      return response.data as ${response.type};`;\n  } else {\n    responseHandling = `\n      return response.data;`;\n  }\n  \n  // Build complete implementation using the enhanced client\n  return `\n  Future<${response.dartType}> ${operationName}(${props.map((p: any) => `${p.type} ${p.name}`).join(', ')}) async {\n    ${pathConstruction}\n    ${queryParamsConstruction}\n    ${headersConstruction}\n    \n    try {\n      final response = await client.${httpMethod}(\n        path,${hasBody ? `\n        data: ${body.dartName}${body.isModel ? '.toJson()' : ''},` : ''}${hasQueryParams ? `\n        queryParameters: queryParameters,` : ''}${hasHeaders ? `\n        options: Options(headers: requestHeaders),` : ''}\n      );\n      \n      ${responseHandling}\n    } on DioException catch (e) {\n      throw ApiException(\n        statusCode: e.response?.statusCode,\n        message: e.message ?? 'Unknown error occurred',\n        error: e,\n      );\n    }\n  }`;\n};\n\n/**\n * Generate custom client builder with service registration\n */\nexport const generateCustomClient: ClientBuilder = (\n  verbOptions: GeneratorVerbOptions,\n  options: GeneratorOptions,\n) => {\n  const implementation = generateCustomImplementation(verbOptions, options);\n  \n  const imports = [\n    \"import 'package:dio/dio.dart';\",\n    \"import '../api_client.dart';\",\n    \"import 'api_exception.dart';\",\n    \"import '../models/index.dart';\",\n  ];\n  \n  return { implementation, imports };\n};\n\n/**\n * Generate enhanced custom client header\n */\nexport const generateCustomHeader: ClientHeaderBuilder = ({ title, isMutator }) => {\n  return `\n/// ${title ? `${title} - ` : ''}Service with enhanced custom client\n/// This service uses the enhanced API client with service registration pattern\n`;\n};\n\n/**\n * Get custom client dependencies\n */\nexport const getCustomDependencies: ClientDependenciesBuilder = () => {\n  return [];  // Dependencies are managed by the user's custom client\n};\n\n/**\n * Generate custom client footer\n */\nexport const generateCustomFooter: ClientFooterBuilder = () => {\n  return '';\n};\n\n\n/**\n * Custom client builder configuration\n */\nconst customClientBuilder: ClientGeneratorBuilder = {\n  client: generateCustomClient,\n  header: generateCustomHeader,\n  dependencies: getCustomDependencies,\n  footer: generateCustomFooter,\n};\n\n/**\n * Builder factory function (following Orval pattern)\n */\nexport const builder = () => () => customClientBuilder;\n\nexport default builder;","import {\n  ClientBuilder,\n  ClientGeneratorBuilder,\n  ClientHeaderBuilder,\n  ClientDependenciesBuilder,\n  ClientFooterBuilder,\n  GeneratorVerbOptions,\n  GeneratorOptions,\n  GeneratorDependency,\n} from '@dorval/core';\n\nconst DIO_DEPENDENCIES: GeneratorDependency[] = [\n  {\n    exports: [\n      { name: 'Dio', default: false, values: false },\n      { name: 'Options', default: false, values: false },\n      { name: 'DioException', default: false, values: false },\n      { name: 'Response', default: false, values: false },\n    ],\n    dependency: 'dio',\n  },\n];\n\n/**\n * Generate Dio client implementation for a service method\n */\nconst generateDioImplementation = (\n  {\n    verb,\n    route,\n    operationName,\n    response,\n    body,\n    headers,\n    queryParams,\n    pathParams,\n    props,\n    override,\n    formData,\n    formUrlEncoded,\n  }: GeneratorVerbOptions,\n  { output }: GeneratorOptions,\n): string => {\n  const httpMethod = verb.toLowerCase();\n  const hasBody = ['post', 'put', 'patch'].includes(httpMethod) && body;\n  const hasQueryParams = !!queryParams;\n  const hasHeaders = !!headers;\n  const hasPathParams = pathParams && pathParams.length > 0;\n  \n  // Build path with parameters\n  let pathConstruction = hasPathParams\n    ? `final path = '${route}'${pathParams.map((p: any) => `.replaceAll('{${p.name}}', ${p.dartName}.toString())`).join('')};`\n    : `const path = '${route}';`;\n  \n  // Build query parameters\n  let queryParamsConstruction = '';\n  if (hasQueryParams) {\n    queryParamsConstruction = `\n    final queryParameters = <String, dynamic>{\n      ${queryParams.map((q: any) => `if (${q.dartName} != null) '${q.name}': ${q.dartName},`).join('\\n      ')}\n    };`;\n  }\n  \n  // Build headers\n  let headersConstruction = '';\n  if (hasHeaders) {\n    headersConstruction = `\n    final requestHeaders = <String, String>{\n      ${headers.map((h: any) => `if (${h.dartName} != null) '${h.name}': ${h.dartName}.toString(),`).join('\\n      ')}\n    };`;\n  }\n  \n  // Build method call\n  let methodCall = `await client.${httpMethod}(\n      path,`;\n  \n  if (hasBody) {\n    methodCall += `\n      data: ${body.dartName}${body.isModel ? '.toJson()' : ''},`;\n  }\n  \n  if (hasQueryParams) {\n    methodCall += `\n      queryParameters: queryParameters,`;\n  }\n  \n  if (hasHeaders) {\n    methodCall += `\n      options: Options(headers: requestHeaders),`;\n  }\n  \n  methodCall += `\n    )`;\n  \n  // Build response handling\n  let responseHandling = '';\n  if (response.isVoid) {\n    responseHandling = 'return;';\n  } else if (response.isList) {\n    responseHandling = `\n    return (response.data as List<dynamic>)\n        .map((item) => ${response.itemType}.fromJson(item as Map<String, dynamic>))\n        .toList();`;\n  } else if (response.isModel) {\n    responseHandling = `\n    return ${response.type}.fromJson(response.data as Map<String, dynamic>);`;\n  } else if (response.isPrimitive) {\n    responseHandling = `\n    return response.data as ${response.type};`;\n  } else {\n    responseHandling = `\n    return response.data;`;\n  }\n  \n  // Build complete implementation\n  return `\n  Future<${response.dartType}> ${operationName}(${props.map((p: any) => `${p.type} ${p.name}`).join(', ')}) async {\n    ${pathConstruction}\n    ${queryParamsConstruction}\n    ${headersConstruction}\n    \n    try {\n      final response = ${methodCall};\n      ${responseHandling}\n    } on DioException catch (e) {\n      throw ApiException(\n        statusCode: e.response?.statusCode,\n        message: e.message ?? 'Unknown error occurred',\n        error: e,\n      );\n    }\n  }`;\n};\n\n/**\n * Generate Dio client builder\n */\nexport const generateDioClient: ClientBuilder = (\n  verbOptions: GeneratorVerbOptions,\n  options: GeneratorOptions,\n) => {\n  const implementation = generateDioImplementation(verbOptions, options);\n  \n  const imports = [\n    \"import 'package:dio/dio.dart';\",\n    \"import '../api_client.dart';\",\n    \"import '../api_exception.dart';\",\n  ];\n  \n  // Add model imports if needed\n  if (verbOptions.response?.isModel) {\n    imports.push(`import '../models/${verbOptions.response.fileName}.dart';`);\n  }\n  \n  if (verbOptions.body?.isModel) {\n    imports.push(`import '../models/${verbOptions.body.fileName}.dart';`);\n  }\n  \n  return { implementation, imports };\n};\n\n/**\n * Generate Dio header\n */\nexport const generateDioHeader: ClientHeaderBuilder = ({ title }) => {\n  return `\n/// ${title ? `${title} - ` : ''}Generated Dio client service\n/// This service uses Dio for HTTP requests\n`;\n};\n\n/**\n * Get Dio dependencies\n */\nexport const getDioDependencies: ClientDependenciesBuilder = (\n  hasGlobalMutator: boolean,\n) => {\n  if (hasGlobalMutator) {\n    return []; // Don't include Dio dependencies if using custom mutator\n  }\n  return DIO_DEPENDENCIES;\n};\n\n/**\n * Generate Dio footer\n */\nexport const generateDioFooter: ClientFooterBuilder = ({ operationNames }) => {\n  return ''; // No special footer needed for Dio\n};\n\n/**\n * Dio client builder configuration\n */\nconst dioClientBuilder: ClientGeneratorBuilder = {\n  client: generateDioClient,\n  header: generateDioHeader,\n  dependencies: getDioDependencies,\n  footer: generateDioFooter,\n};\n\n/**\n * Builder factory function (following Orval pattern)\n */\nexport const builder = () => () => dioClientBuilder;\n\nexport default builder;","/**\n * @dorval/core\n * Core library for generating Dart code from OpenAPI specifications\n */\n\nexport * from './parser';\nexport * from './generators';\nexport * from './utils';\nexport * from './resolvers';\n\n// Main generation function\nexport { generateDartCode } from './generators';\n\n// Type definitions\nexport type {\n  DartGeneratorOptions,\n  DartOutputMode,\n  DartClientType,\n  GeneratedFile,\n  DartConfig,\n  DartConfigExport,\n  ClientGeneratorBuilder,\n  ClientBuilder,\n  ClientHeaderBuilder,\n  ClientDependenciesBuilder,\n  ClientFooterBuilder,\n  GeneratorVerbOptions,\n  GeneratorOptions,\n  GeneratorDependency\n} from './types';\n\n// Import types for use in defineConfig\nimport type { DartConfig } from './types';\n\n// Configuration helper\nexport function defineConfig(config: DartConfig): DartConfig {\n  return config;\n}","/**\n * OpenAPI specification parser\n * Converts OpenAPI/Swagger specs to internal representation\n */\n\nimport SwaggerParser from '@apidevtools/swagger-parser';\nimport { OpenAPIObject } from '../types';\nimport * as fs from 'fs/promises';\nimport * as fsSync from 'fs';\nimport * as path from 'path';\n\nexport async function parseOpenAPISpec(input: string | OpenAPIObject): Promise<OpenAPIObject> {\n  if (typeof input === 'string') {\n    // Check if it's a file path\n    if (fsSync.existsSync(input)) {\n      // Read the file directly to preserve $refs\n      const ext = path.extname(input).toLowerCase();\n      if (ext === '.json') {\n        const content = await fs.readFile(input, 'utf-8');\n        return JSON.parse(content) as OpenAPIObject;\n      } else if (ext === '.yaml' || ext === '.yml') {\n        // For YAML files, we need to use SwaggerParser but only for parsing, not validation\n        const api = await SwaggerParser.parse(input);\n        return api as OpenAPIObject;\n      }\n    }\n    // For URLs or other cases, use SwaggerParser\n    const api = await SwaggerParser.parse(input);\n    return api as OpenAPIObject;\n  }\n  \n  // Already parsed object - return as-is to preserve $refs\n  return input;\n}\n\nexport { OpenAPIParser } from './openapi-parser';\nexport { extractModels } from './models';\nexport { extractEndpoints } from './endpoints';\nexport { resolveReferences } from './references';","/**\n * OpenAPI specification parser with enhanced functionality\n */\n\nimport SwaggerParser from '@apidevtools/swagger-parser';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport { OpenAPIObject, DartModel, DartEndpoint } from '../types';\nimport { extractModels } from './models';\nimport { extractEndpoints } from './endpoints';\n\nexport class OpenAPIParser {\n  private spec!: OpenAPIObject;\n  private resolved: boolean = false;\n\n  /**\n   * Parse and validate OpenAPI specification\n   */\n  async parse(input: string | OpenAPIObject): Promise<this> {\n    try {\n      // Parse the spec first\n      if (typeof input === 'string') {\n        this.spec = await SwaggerParser.parse(input) as OpenAPIObject;\n      } else {\n        this.spec = input;\n      }\n      \n      // Normalize oneOf patterns with null before validation\n      this.normalizeNullableOneOf(this.spec);\n      \n      // Now validate the normalized spec\n      this.spec = await SwaggerParser.validate(this.spec) as OpenAPIObject;\n      \n      // Dereference all $refs\n      this.spec = await SwaggerParser.dereference(this.spec) as OpenAPIObject;\n      this.resolved = true;\n      \n      return this;\n    } catch (error) {\n      throw new Error(`Failed to parse OpenAPI spec: ${error instanceof Error ? error.message : String(error)}`);\n    }\n  }\n\n  /**\n   * Parse without dereferencing to preserve $refs\n   */\n  async parseWithoutDereference(input: string | OpenAPIObject): Promise<this> {\n    try {\n      // Store the original spec without dereferencing to preserve $refs\n      if (typeof input === 'string') {\n        this.spec = await SwaggerParser.parse(input) as OpenAPIObject;\n      } else {\n        this.spec = input;\n      }\n      this.resolved = false;\n      \n      // Skip validation to preserve $refs\n      // await SwaggerParser.validate(this.spec);\n      \n      return this;\n    } catch (error) {\n      throw new Error(`Failed to parse OpenAPI spec: ${error instanceof Error ? error.message : String(error)}`);\n    }\n  }\n\n  /**\n   * Get the parsed specification\n   */\n  getSpec(): OpenAPIObject {\n    this.ensureParsed();\n    return this.spec;\n  }\n\n  /**\n   * Get API info\n   */\n  getInfo(): OpenAPIV3.InfoObject {\n    this.ensureParsed();\n    return this.spec.info;\n  }\n\n  /**\n   * Get servers\n   */\n  getServers(): OpenAPIV3.ServerObject[] {\n    this.ensureParsed();\n    return this.spec.servers || [];\n  }\n\n  /**\n   * Get base URL from first server\n   */\n  getBaseUrl(): string {\n    const servers = this.getServers();\n    if (servers.length > 0) {\n      // Replace variables with default values\n      let url = servers[0].url;\n      if (servers[0].variables) {\n        Object.entries(servers[0].variables).forEach(([key, variable]) => {\n          url = url.replace(`{${key}}`, variable.default);\n        });\n      }\n      return url;\n    }\n    return '';\n  }\n\n  /**\n   * Get all paths\n   */\n  getPaths(): OpenAPIV3.PathsObject {\n    this.ensureParsed();\n    return this.spec.paths || {};\n  }\n\n  /**\n   * Get components\n   */\n  getComponents(): OpenAPIV3.ComponentsObject | undefined {\n    this.ensureParsed();\n    return this.spec.components;\n  }\n\n  /**\n   * Get all schemas\n   */\n  getSchemas(): Record<string, OpenAPIV3.SchemaObject> {\n    const components = this.getComponents();\n    if (!components || !components.schemas) {\n      return {};\n    }\n    \n    // Filter out reference objects\n    const schemas: Record<string, OpenAPIV3.SchemaObject> = {};\n    Object.entries(components.schemas).forEach(([name, schema]) => {\n      if (!('$ref' in schema)) {\n        schemas[name] = schema as OpenAPIV3.SchemaObject;\n      }\n    });\n    \n    return schemas;\n  }\n\n  /**\n   * Get all tags\n   */\n  getTags(): OpenAPIV3.TagObject[] {\n    this.ensureParsed();\n    return this.spec.tags || [];\n  }\n\n  /**\n   * Normalize oneOf patterns with null to use nullable: true instead\n   * This converts oneOf: [{type: \"string\"}, {type: \"null\"}] to {type: \"string\", nullable: true}\n   */\n  private normalizeNullableOneOf(obj: any): void {\n    if (!obj || typeof obj !== 'object') {\n      return;\n    }\n\n    // Handle arrays\n    if (Array.isArray(obj)) {\n      obj.forEach(item => this.normalizeNullableOneOf(item));\n      return;\n    }\n\n    // Check if this object has a nullable oneOf pattern\n    if (obj.oneOf && Array.isArray(obj.oneOf) && obj.oneOf.length === 2) {\n      const hasNull = obj.oneOf.some((s: any) => s && s.type === 'null');\n      const nonNullSchema = obj.oneOf.find((s: any) => s && s.type !== 'null');\n      \n      if (hasNull && nonNullSchema) {\n        // Convert to nullable pattern\n        delete obj.oneOf;\n        \n        // Copy properties from non-null schema\n        Object.assign(obj, nonNullSchema);\n        \n        // Add nullable flag\n        obj.nullable = true;\n      }\n    }\n    \n    // Also handle anyOf with null pattern\n    if (obj.anyOf && Array.isArray(obj.anyOf) && obj.anyOf.length === 2) {\n      const hasNull = obj.anyOf.some((s: any) => s && s.type === 'null');\n      const nonNullSchema = obj.anyOf.find((s: any) => s && s.type !== 'null');\n      \n      if (hasNull && nonNullSchema) {\n        // Convert to nullable pattern\n        delete obj.anyOf;\n        \n        // Copy properties from non-null schema\n        Object.assign(obj, nonNullSchema);\n        \n        // Add nullable flag\n        obj.nullable = true;\n      }\n    }\n\n    // Recursively process all properties\n    Object.keys(obj).forEach(key => {\n      if (key !== 'oneOf') { // Skip if we just processed oneOf\n        this.normalizeNullableOneOf(obj[key]);\n      }\n    });\n  }\n\n  /**\n   * Extract Dart models from the spec\n   */\n  extractModels(): DartModel[] {\n    this.ensureParsed();\n    return extractModels(this.spec);\n  }\n\n  /**\n   * Extract Dart endpoints from the spec\n   */\n  extractEndpoints(): DartEndpoint[] {\n    this.ensureParsed();\n    return extractEndpoints(this.spec);\n  }\n\n  /**\n   * Get endpoints grouped by tag\n   */\n  getEndpointsByTag(): Map<string, DartEndpoint[]> {\n    const endpoints = this.extractEndpoints();\n    const grouped = new Map<string, DartEndpoint[]>();\n    \n    endpoints.forEach(endpoint => {\n      const tags = endpoint.tags || ['default'];\n      tags.forEach(tag => {\n        if (!grouped.has(tag)) {\n          grouped.set(tag, []);\n        }\n        grouped.get(tag)!.push(endpoint);\n      });\n    });\n    \n    return grouped;\n  }\n\n  /**\n   * Check if spec has been parsed\n   */\n  private ensureParsed(): void {\n    if (!this.spec) {\n      throw new Error('OpenAPI spec has not been parsed yet. Call parse() first.');\n    }\n  }\n\n  /**\n   * Get operation by operationId\n   */\n  getOperationById(operationId: string): OpenAPIV3.OperationObject | null {\n    this.ensureParsed();\n    \n    const paths = this.getPaths();\n    for (const [_path, pathItem] of Object.entries(paths)) {\n      if (!pathItem) continue;\n      \n      const methods = ['get', 'post', 'put', 'delete', 'patch', 'options', 'head'] as const;\n      for (const method of methods) {\n        const operation = (pathItem as any)[method] as OpenAPIV3.OperationObject;\n        if (operation && operation.operationId === operationId) {\n          return operation;\n        }\n      }\n    }\n    \n    return null;\n  }\n\n  /**\n   * Get all security schemes\n   */\n  getSecuritySchemes(): Record<string, OpenAPIV3.SecuritySchemeObject> {\n    const components = this.getComponents();\n    if (!components || !components.securitySchemes) {\n      return {};\n    }\n    \n    const schemes: Record<string, OpenAPIV3.SecuritySchemeObject> = {};\n    Object.entries(components.securitySchemes).forEach(([name, scheme]) => {\n      if (!('$ref' in scheme)) {\n        schemes[name] = scheme as OpenAPIV3.SecuritySchemeObject;\n      }\n    });\n    \n    return schemes;\n  }\n\n  /**\n   * Check if API requires authentication\n   */\n  hasAuthentication(): boolean {\n    return this.spec.security !== undefined && this.spec.security.length > 0;\n  }\n\n  /**\n   * Get global parameters\n   */\n  getGlobalParameters(): OpenAPIV3.ParameterObject[] {\n    const components = this.getComponents();\n    if (!components || !components.parameters) {\n      return [];\n    }\n    \n    const params: OpenAPIV3.ParameterObject[] = [];\n    Object.values(components.parameters).forEach(param => {\n      if (!('$ref' in param)) {\n        params.push(param as OpenAPIV3.ParameterObject);\n      }\n    });\n    \n    return params;\n  }\n}","/**\n * Extract and parse model definitions from OpenAPI spec\n */\n\nimport type { OpenAPIV3 } from 'openapi-types';\nimport { OpenAPIObject } from '../types';\nimport { DartModel } from '../types';\n\nexport function extractModels(spec: OpenAPIObject): DartModel[] {\n  const models: DartModel[] = [];\n  \n  // Extract from components.schemas\n  if (spec.components?.schemas) {\n    Object.entries(spec.components.schemas).forEach(([name, schema]) => {\n      const model = schemaToModel(name, schema as OpenAPIV3.SchemaObject);\n      if (model) {\n        models.push(model);\n      }\n    });\n  }\n  \n  return models;\n}\n\nfunction schemaToModel(name: string, schema: OpenAPIV3.SchemaObject): DartModel | null {\n  // TODO: Implement schema to Dart model conversion\n  return {\n    name,\n    properties: [],\n    imports: [],\n    description: schema.description\n  };\n}","/**\n * Extract endpoint definitions from OpenAPI spec\n */\n\nimport { OpenAPIObject } from '../types';\nimport { DartEndpoint } from '../types';\n\nexport function extractEndpoints(spec: OpenAPIObject): DartEndpoint[] {\n  const endpoints: DartEndpoint[] = [];\n  \n  // Extract from paths\n  if (spec.paths) {\n    Object.entries(spec.paths).forEach(([path, pathItem]) => {\n      if (!pathItem) return;\n      \n      // Process each HTTP method\n      const methods = ['get', 'post', 'put', 'delete', 'patch', 'options', 'head'] as const;\n      \n      methods.forEach(method => {\n        const operation = (pathItem as any)[method];\n        if (operation) {\n          endpoints.push({\n            name: operation.operationId || `${method}${path}`,\n            method: method.toUpperCase(),\n            path,\n            parameters: [],\n            responses: [],\n            description: operation.description,\n            deprecated: operation.deprecated,\n            tags: operation.tags\n          });\n        }\n      });\n    });\n  }\n  \n  return endpoints;\n}","/**\n * Resolve $ref references in OpenAPI spec\n */\n\nimport { OpenAPIObject } from '../types';\n\n/**\n * Check if an object is a reference (has $ref property)\n */\nexport function isReference(obj: any): boolean {\n  return !!(obj && typeof obj === 'object' && '$ref' in obj);\n}\n\n/**\n * Extract the name from a reference path\n * e.g., \"#/components/schemas/User\" -> \"User\"\n */\nexport function extractRefName(ref: string): string {\n  if (!ref || typeof ref !== 'string') {\n    return '';\n  }\n  \n  // Handle external references\n  let actualRef = ref;\n  if (ref.includes('#')) {\n    actualRef = ref.substring(ref.indexOf('#'));\n  }\n  \n  // Check if it's a valid reference path\n  if (!actualRef.startsWith('#/')) {\n    return '';\n  }\n  \n  const parts = actualRef.split('/');\n  \n  // Must have at least 3 parts: #, components/definitions, name\n  if (parts.length < 3) {\n    return '';\n  }\n  \n  // Check for valid component types\n  const validComponents = ['components', 'definitions'];\n  const validSubComponents = ['schemas', 'parameters', 'responses', 'examples', 'requestBodies', 'headers', 'securitySchemes', 'links', 'callbacks'];\n  \n  if (parts[1] === 'components' && !validSubComponents.includes(parts[2])) {\n    return '';\n  }\n  \n  if (!validComponents.includes(parts[1]) && parts[1] !== 'definitions') {\n    return '';\n  }\n  \n  return parts[parts.length - 1] || '';\n}\n\n/**\n * Resolve a reference in the OpenAPI spec\n */\nexport function resolveReference(ref: string, spec: any): any {\n  if (!ref || !spec) {\n    return undefined;\n  }\n  \n  // Handle external references gracefully\n  if (!ref.startsWith('#/')) {\n    return undefined;\n  }\n  \n  const parts = ref.substring(2).split('/'); // Remove \"#/\" and split\n  let current = spec;\n  \n  for (const part of parts) {\n    if (!current || typeof current !== 'object') {\n      return undefined;\n    }\n    current = current[part];\n  }\n  \n  return current;\n}\n\nexport function resolveReferences(spec: OpenAPIObject): OpenAPIObject {\n  // TODO: Implement reference resolution\n  // This will handle $ref pointers throughout the spec\n  return spec;\n}","/**\n * File system utilities\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { GeneratedFile } from '../types';\n\nexport async function writeToDisk(\n  files: GeneratedFile[],\n  targetDir: string\n): Promise<void> {\n  // Ensure target directory exists\n  await fs.mkdir(targetDir, { recursive: true });\n  \n  // Write each file\n  for (const file of files) {\n    const filePath = path.join(targetDir, file.path);\n    const dir = path.dirname(filePath);\n    \n    // Ensure directory exists\n    await fs.mkdir(dir, { recursive: true });\n    \n    // Write file\n    if (file.overwrite !== false || !(await fileExists(filePath))) {\n      // Ensure file ends with a newline\n      const content = file.content.endsWith('\\n') ? file.content : file.content + '\\n';\n      await fs.writeFile(filePath, content, 'utf-8');\n    }\n  }\n}\n\n// Core file operations\nexport async function ensureDir(dirPath: string): Promise<void> {\n  await fs.mkdir(dirPath, { recursive: true });\n}\n\nexport async function writeFile(\n  filePath: string, \n  content: string | Buffer, \n  encoding: BufferEncoding = 'utf-8'\n): Promise<void> {\n  return fs.writeFile(filePath, content, encoding);\n}\n\nexport async function readFile(\n  filePath: string,\n  encoding: BufferEncoding = 'utf-8'\n): Promise<string> {\n  return fs.readFile(filePath, encoding);\n}\n\nexport async function exists(filePath: string): Promise<boolean> {\n  try {\n    await fs.access(filePath);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport async function copyFile(src: string, dest: string): Promise<void> {\n  return fs.copyFile(src, dest);\n}\n\nexport async function removeFile(filePath: string): Promise<void> {\n  return fs.rm(filePath, { recursive: true, force: true });\n}\n\nexport async function getFiles(\n  dirPath: string,\n  extension?: string\n): Promise<string[]> {\n  const files = await fs.readdir(dirPath);\n  if (extension) {\n    return files.filter(file => file.endsWith(extension));\n  }\n  return files;\n}\n\n// Path utilities\nexport function getFileExtension(filePath: string): string {\n  const ext = path.extname(filePath);\n  return ext.startsWith('.') ? ext.slice(1) : ext;\n}\n\nexport function getFileName(filePath: string): string {\n  return path.basename(filePath);\n}\n\nexport function getFileNameWithoutExtension(filePath: string): string {\n  const name = path.basename(filePath);\n  const ext = path.extname(filePath);\n  return ext ? name.slice(0, -ext.length) : name;\n}\n\nexport function joinPath(...segments: string[]): string {\n  return path.join(...segments);\n}\n\nexport function resolvePath(...segments: string[]): string {\n  return path.resolve(...segments);\n}\n\nexport function isAbsolutePath(filePath: string): boolean {\n  return path.isAbsolute(filePath);\n}\n\nexport function normalizeFilePath(filePath: string): string {\n  return path.normalize(filePath).replace(/\\\\/g, '/').replace(/\\/$/, '');\n}\n\n// Temp directory utilities\nlet tempDirs: string[] = [];\n\nexport async function createTempDir(prefix: string = 'dorval-'): Promise<string> {\n  const tempDir = path.join(os.tmpdir(), `${prefix}${Date.now()}`);\n  await fs.mkdir(tempDir, { recursive: true });\n  tempDirs.push(tempDir);\n  return tempDir;\n}\n\nexport async function cleanupTempDir(tempDir: string): Promise<void> {\n  try {\n    await fs.rm(tempDir, { recursive: true, force: true });\n    tempDirs = tempDirs.filter(dir => dir !== tempDir);\n  } catch {\n    // Ignore cleanup errors\n  }\n}\n\n// Legacy compatibility\nexport async function fileExists(filePath: string): Promise<boolean> {\n  try {\n    await fs.access(filePath);\n    return true;\n  } catch {\n    return false;\n  }\n}","/**\n * OpenAPI to Dart type mapping utilities\n */\n\nimport type { OpenAPIV3 } from 'openapi-types';\n\ntype SchemaObject = OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject;\n\n/**\n * Basic type mapping from OpenAPI to Dart\n */\nexport const TYPE_MAP: Record<string, string> = {\n  // Basic types\n  'string': 'String',\n  'integer': 'int',\n  'number': 'double',\n  'boolean': 'bool',\n  'array': 'List',\n  'object': 'Map<String, dynamic>',\n  \n  // Format specific mappings\n  'string:date': 'DateTime',\n  'string:date-time': 'DateTime',\n  'string:byte': 'String', // Base64 encoded\n  'string:binary': 'Uint8List',\n  'string:email': 'String',\n  'string:uuid': 'String',\n  'string:uri': 'String',\n  'string:hostname': 'String',\n  'string:ipv4': 'String',\n  'string:ipv6': 'String',\n  'integer:int32': 'int',\n  'integer:int64': 'int',\n  'number:float': 'double',\n  'number:double': 'double',\n};\n\nexport class TypeMapper {\n  /**\n   * Map OpenAPI type to Dart type\n   */\n  static mapType(schema: SchemaObject): string {\n    if (!schema) {\n      return 'dynamic';\n    }\n\n    // Handle $ref\n    if ('$ref' in schema && schema.$ref) {\n      const refName = this.extractTypeFromRef(schema.$ref);\n      return this.toDartClassName(refName);\n    }\n\n    // Cast to non-reference schema for property access\n    const nonRefSchema = schema as OpenAPIV3.SchemaObject;\n    \n    // Handle OpenAPI 3.1 type arrays (e.g., type: [\"string\", \"null\"])\n    if (Array.isArray(nonRefSchema.type)) {\n      const types = nonRefSchema.type as string[];\n      const nonNullTypes = types.filter(t => t !== 'null');\n      \n      if (nonNullTypes.length === 1) {\n        // Single type plus null - map the non-null type\n        const baseSchema: OpenAPIV3.SchemaObject = { \n          ...nonRefSchema, \n          type: nonNullTypes[0] as any\n        };\n        return this.mapType(baseSchema);\n      } else if (nonNullTypes.length > 1) {\n        // Multiple types - return dynamic\n        return 'dynamic';\n      }\n    }\n    \n    // Handle oneOf with nullable pattern\n    if (nonRefSchema.oneOf && this.isNullableOneOf(nonRefSchema)) {\n      const nonNullType = this.getNonNullTypeFromOneOf(nonRefSchema);\n      return this.mapType(nonNullType);\n    }\n    \n    // Handle arrays\n    if (nonRefSchema.type === 'array') {\n      const itemType = nonRefSchema.items ? this.mapType(nonRefSchema.items as SchemaObject) : 'dynamic';\n      return `List<${itemType}>`;\n    }\n\n    // Handle objects with additionalProperties (Map)\n    if (nonRefSchema.type === 'object' && nonRefSchema.additionalProperties) {\n      const valueType = typeof nonRefSchema.additionalProperties === 'object'\n        ? this.mapType(nonRefSchema.additionalProperties as SchemaObject)\n        : 'dynamic';\n      return `Map<String, ${valueType}>`;\n    }\n\n    // Handle objects with properties (custom class)\n    if (nonRefSchema.type === 'object' && nonRefSchema.properties) {\n      // This will be a custom model class name\n      return nonRefSchema.title || 'Map<String, dynamic>';\n    }\n\n    // Handle enums\n    if (nonRefSchema.enum && nonRefSchema.enum.length > 0) {\n      return nonRefSchema.title || 'String';\n    }\n\n    // Handle oneOf/anyOf/allOf\n    if (nonRefSchema.oneOf || nonRefSchema.anyOf) {\n      return 'dynamic'; // Will be handled as union types later\n    }\n\n    if (nonRefSchema.allOf) {\n      // Will be handled as composed model later\n      return 'dynamic';\n    }\n\n    // Handle format-specific types\n    const type = nonRefSchema.type as string;\n    const format = nonRefSchema.format;\n    \n    if (format) {\n      const key = `${type}:${format}`;\n      if (TYPE_MAP[key]) {\n        return TYPE_MAP[key];\n      }\n    }\n\n    // Basic type mapping\n    return TYPE_MAP[type] || 'dynamic';\n  }\n\n  /**\n   * Map OpenAPI type to Dart type with null safety\n   */\n  static mapTypeWithNullability(schema: SchemaObject, required: boolean = true): string {\n    const baseType = this.mapType(schema);\n    \n    // In Dart, add ? for nullable types\n    if (!required && baseType !== 'dynamic') {\n      return `${baseType}?`;\n    }\n    \n    return baseType;\n  }\n\n  /**\n   * Extract type name from $ref\n   */\n  static extractTypeFromRef(ref: string): string {\n    if (!ref || typeof ref !== 'string') {\n      return '';\n    }\n    \n    // Handle external references (e.g., 'external.yaml#/components/schemas/User')\n    let actualRef = ref;\n    if (ref.includes('#')) {\n      actualRef = ref.substring(ref.indexOf('#'));\n    }\n    \n    // Check if it's a valid reference path\n    if (!actualRef.startsWith('#/')) {\n      return '';\n    }\n    \n    // Must have a valid path structure\n    const parts = actualRef.split('/');\n    if (parts.length < 3) {\n      return '';\n    }\n    \n    // Validate that it's a proper reference path\n    const _validPaths = ['components', 'definitions'];\n    const validSubPaths = ['schemas', 'parameters', 'responses', 'examples', 'requestBodies', 'headers', 'securitySchemes', 'links', 'callbacks'];\n    \n    // Check if it's a valid component reference\n    if (parts[1] === 'components') {\n      if (!validSubPaths.includes(parts[2])) {\n        return '';\n      }\n    } else if (parts[1] !== 'definitions') {\n      // If not components or definitions, it's invalid\n      return '';\n    }\n    \n    // #/components/schemas/Pet -> Pet\n    // #/definitions/BaseEntity -> BaseEntity\n    return parts[parts.length - 1] || '';\n  }\n\n  /**\n   * Convert OpenAPI property name to Dart property name\n   */\n  static toDartPropertyName(name: string): string {\n    // Special case: preserve names starting with $ (e.g., $if, $switch, $match)\n    // These are valid Dart identifiers even if the part after $ is a keyword\n    // because $ makes them different from the keyword itself\n    if (name.startsWith('$')) {\n      return name;  // Return as-is (e.g., $if, $switch, $else)\n    }\n\n    // Handle all uppercase with underscores first (USER_NAME -> userName)\n    if (name === name.toUpperCase() && name.includes('_')) {\n      const parts = name.toLowerCase().split('_');\n      return parts[0] + parts.slice(1).map(p => p.charAt(0).toUpperCase() + p.slice(1)).join('');\n    }\n\n    // First, replace invalid characters with separators\n    // Replace common separators and special characters with hyphens temporarily\n    let result = name\n      .replace(/[^\\w.-]/g, '-')  // Replace all non-word chars (except .-) with hyphens\n      .replace(/[-_]([a-zA-Z])/g, (_, letter) => letter.toUpperCase())  // Convert to camelCase\n      .replace(/\\.([a-zA-Z])/g, (_, letter) => letter.toUpperCase());   // Handle dots\n\n    // Remove any remaining special characters\n    result = result.replace(/[^\\w]/g, '');\n\n    // If the result is all uppercase (and not a single char), convert to lowercase\n    if (result === result.toUpperCase() && result.length > 1) {\n      result = result.toLowerCase();\n    }\n\n    // Ensure first character is lowercase for camelCase\n    if (result.length > 0) {\n      result = result.charAt(0).toLowerCase() + result.slice(1);\n    }\n\n    // If name starts with a number, prefix with underscore\n    if (result.length > 0 && /^\\d/.test(result)) {\n      result = `$${result}`;\n    }\n\n    // If result is empty or invalid, use a default name\n    if (!result || result.length === 0) {\n      result = 'property';\n    }\n\n    // Escape reserved keywords by adding underscore suffix\n    if (this.isDartReservedKeyword(result)) {\n      result = `${result}_`;\n    }\n\n    return result;\n  }\n  \n  /**\n   * List of Dart reserved keywords\n   */\n  private static readonly DART_RESERVED_KEYWORDS = new Set([\n    'abstract', 'as', 'assert', 'async', 'await', 'break', 'case', 'catch',\n    'class', 'const', 'continue', 'covariant', 'default', 'deferred', 'do',\n    'dynamic', 'else', 'enum', 'export', 'extends', 'extension', 'external',\n    'factory', 'false', 'final', 'finally', 'for', 'Function', 'get', 'hide',\n    'if', 'implements', 'import', 'in', 'interface', 'is', 'late', 'library',\n    'mixin', 'new', 'null', 'on', 'operator', 'part', 'required', 'rethrow',\n    'return', 'sealed', 'set', 'show', 'static', 'super', 'switch', 'sync',\n    'this', 'throw', 'true', 'try', 'typedef', 'var', 'void', 'when', 'while',\n    'with', 'yield'\n  ]);\n\n  /**\n   * Check if a name is a Dart reserved keyword\n   */\n  static isDartReservedKeyword(name: string): boolean {\n    return this.DART_RESERVED_KEYWORDS.has(name);\n  }\n\n  /**\n   * Extract inner type from List<T> or Map<K,V>\n   */\n  static extractInnerType(type: string): string {\n    // Remove nullable marker if present for pattern matching\n    const cleanType = type.endsWith('?') ? type.slice(0, -1) : type;\n\n    // Match List<Type>\n    const listMatch = cleanType.match(/^List<(.+)>$/);\n    if (listMatch) {\n      return listMatch[1];\n    }\n\n    // Match Map<String, Type>\n    const mapMatch = cleanType.match(/^Map<String,\\s*(.+)>$/);\n    if (mapMatch) {\n      return mapMatch[1];\n    }\n\n    return type;\n  }\n\n  /**\n   * Convert to camelCase (specifically for parameter names)\n   */\n  static toCamelCase(name: string): string {\n    // Handle special cases for headers (x-api-key -> xApiKey)\n    let result = name.replace(/[-_]([a-z])/gi, (_, letter) => letter.toUpperCase());\n    \n    // Ensure first letter is lowercase\n    if (result.length > 0) {\n      result = result.charAt(0).toLowerCase() + result.slice(1);\n    }\n    \n    // Escape reserved keywords by adding underscore suffix\n    if (this.isDartReservedKeyword(result)) {\n      result = `${result}_`;\n    }\n    \n    return result;\n  }\n\n  /**\n   * Convert to Dart class name (PascalCase)\n   */\n  static toDartClassName(name: string): string {\n    // Handle all-caps acronyms (APIResponse -> ApiResponse)\n    let result = name.replace(/([A-Z])([A-Z]+)([A-Z][a-z]|$)/g, (match, p1, p2, p3) => {\n      if (p3) {\n        // APIResponse -> Api + Response\n        return p1 + p2.toLowerCase() + p3;\n      } else {\n        // End of string, e.g. API -> Api\n        return p1 + p2.toLowerCase();\n      }\n    });\n    \n    // If already in PascalCase after acronym handling, return\n    if (/^[A-Z][a-zA-Z0-9]*$/.test(result) && !result.includes('_') && !result.includes(' ')) {\n      return result;\n    }\n    \n    // Replace non-word characters (except underscore) with spaces\n    const normalized = result.replace(/[^\\w_]+/g, ' ');\n    \n    // Split by spaces and underscores\n    const words = normalized.split(/[\\s_]+/).filter(word => word.length > 0);\n    \n    // Capitalize first letter of each word and join\n    return words.map(word => {\n      // If the word is already mixed case, keep its casing\n      if (/[a-z]/.test(word) && /[A-Z]/.test(word)) {\n        return word.charAt(0).toUpperCase() + word.slice(1);\n      }\n      // Otherwise capitalize first letter, rest lowercase\n      return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n    }).join('');\n  }\n\n  /**\n   * Convert to snake_case for file names\n   */\n  static toSnakeCase(str: string): string {\n    // Handle camelCase and PascalCase by inserting underscores\n    let result = str\n      // Special handling for V2Dto, V2Meta patterns - add underscore before Dto/Meta that follows V2\n      .replace(/V2(Dto|Meta)/g, 'V2_$1')\n      // Insert underscore before uppercase letters that follow lowercase letters\n      .replace(/([a-z])([A-Z])/g, '$1_$2')\n      // Insert underscore before uppercase letters that follow numbers\n      .replace(/([0-9])([A-Z])/g, '$1_$2')\n      // Handle sequences of uppercase letters followed by lowercase (e.g., XMLHttp -> XML_Http)\n      .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2');\n    \n    // Convert to lowercase and clean up\n    return result\n      .toLowerCase()\n      .replace(/\\s+/g, '_')  // Replace spaces with underscores\n      .replace(/[^\\w]+/g, '_')  // Replace non-word characters with underscores\n      .replace(/^_+/, '')  // Remove leading underscores\n      .replace(/_+/g, '_')  // Replace multiple underscores with single\n      .replace(/_+$/, '');  // Remove trailing underscores\n  }\n\n  /**\n   * Convert to PascalCase\n   */\n  static toPascalCase(str: string): string {\n    return str\n      .replace(/[-_\\s]+(.)?/g, (_, char) => char ? char.toUpperCase() : '')\n      .replace(/^(.)/, (_, char) => char.toUpperCase());\n  }\n\n  /**\n   * Get Dart imports needed for a type\n   */\n  static getImportsForType(type: string): string[] {\n    const imports: string[] = [];\n\n    if (type.includes('DateTime')) {\n      // DateTime is built-in, no import needed\n    }\n\n    if (type.includes('Uint8List')) {\n      imports.push('dart:typed_data');\n    }\n\n    return imports;\n  }\n\n  /**\n   * Check if type needs JSON serialization annotation\n   */\n  static needsJsonAnnotation(schema: SchemaObject, propertyName: string): boolean {\n    // Check if property name differs from JSON key\n    const dartName = this.toDartPropertyName(propertyName);\n    \n    // Need annotation if names are different or if it's a DateTime\n    if (dartName !== propertyName) {\n      return true;\n    }\n\n    const type = this.mapType(schema);\n    if (type === 'DateTime') {\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Generate JsonKey annotation\n   */\n  static generateJsonKeyAnnotation(schema: SchemaObject, propertyName: string): string | null {\n    if (!this.needsJsonAnnotation(schema, propertyName)) {\n      return null;\n    }\n\n    const annotations: string[] = [];\n    const dartName = this.toDartPropertyName(propertyName);\n\n    // Add name annotation if different\n    if (dartName !== propertyName) {\n      annotations.push(`name: '${propertyName}'`);\n    }\n\n    // Add fromJson/toJson for DateTime\n    const type = this.mapType(schema);\n    if (type === 'DateTime') {\n      annotations.push('fromJson: _dateTimeFromJson, toJson: _dateTimeToJson');\n    }\n\n    if (annotations.length > 0) {\n      return `@JsonKey(${annotations.join(', ')})`;\n    }\n\n    return null;\n  }\n\n  /**\n   * Generate default value for a type\n   */\n  static getDefaultValue(schema: SchemaObject): string | null {\n    if ('$ref' in schema) {\n      return null;\n    }\n    \n    const nonRefSchema = schema as OpenAPIV3.SchemaObject;\n    \n    if (nonRefSchema.default !== undefined) {\n      const type = this.mapType(schema);\n      \n      if (type === 'String') {\n        return `'${nonRefSchema.default}'`;\n      }\n      \n      if (type === 'int' || type === 'double') {\n        return String(nonRefSchema.default);\n      }\n      \n      if (type === 'bool') {\n        return String(nonRefSchema.default);\n      }\n\n      if (type.startsWith('List')) {\n        return 'const []';\n      }\n\n      if (type.startsWith('Map')) {\n        return 'const {}';\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Check if a schema is using oneOf pattern for nullable types\n   * Both patterns are valid in OpenAPI 3.0:\n   * 1. nullable: true (recommended in OpenAPI 3.0.x)\n   * 2. oneOf: [{type: \"string\"}, {type: \"null\"}] (valid, especially for complex nullable unions)\n   */\n  static isNullableOneOf(schema: OpenAPIV3.SchemaObject): boolean {\n    if (!schema.oneOf || !Array.isArray(schema.oneOf) || schema.oneOf.length !== 2) {\n      return false;\n    }\n    \n    // Check if one of the schemas is null type\n    const hasNull = schema.oneOf.some((s: any) => \n      s && typeof s === 'object' && s.type === 'null'\n    );\n    \n    // Check if the other schema is a non-null type\n    const hasNonNull = schema.oneOf.some((s: any) => \n      s && typeof s === 'object' && (\n        (s.type && s.type !== 'null') || \n        s.$ref\n      )\n    );\n    \n    return hasNull && hasNonNull;\n  }\n\n  /**\n   * Extract the non-null type from a nullable oneOf pattern\n   */\n  static getNonNullTypeFromOneOf(schema: OpenAPIV3.SchemaObject): SchemaObject {\n    if (!schema.oneOf || !this.isNullableOneOf(schema)) {\n      return schema;\n    }\n\n    // Find the non-null schema (could be a type or a $ref)\n    // We want schemas that either have a $ref OR have a type that's not 'null'\n    const nonNullSchema = schema.oneOf.find((s: any) =>\n      s && typeof s === 'object' && (s.$ref || (s.type && s.type !== 'null'))\n    );\n\n    return nonNullSchema || { type: 'string' };\n  }\n\n  /**\n   * Check if a schema is nullable (either via nullable: true or oneOf pattern)\n   */\n  static isNullable(schema: SchemaObject): boolean {\n    if (!schema || typeof schema !== 'object') {\n      return true; // Treat null/undefined as nullable\n    }\n    if ('$ref' in schema) {\n      return false;\n    }\n    \n    const nonRefSchema = schema as OpenAPIV3.SchemaObject;\n    \n    // Check OpenAPI 3.0 nullable property\n    if (nonRefSchema.nullable === true) {\n      return true;\n    }\n    \n    // Check OpenAPI 3.1 type array pattern (e.g., type: [\"string\", \"null\"])\n    if (Array.isArray(nonRefSchema.type)) {\n      const types = nonRefSchema.type as string[];\n      return types.includes('null');\n    }\n    \n    // Check oneOf pattern for nullable\n    if (this.isNullableOneOf(nonRefSchema)) {\n      return true;\n    }\n    \n    // Check anyOf pattern for nullable\n    if (nonRefSchema.anyOf && Array.isArray(nonRefSchema.anyOf)) {\n      return nonRefSchema.anyOf.some((s: any) => s && s.type === 'null');\n    }\n    \n    return false;\n  }\n\n  /**\n   * Get base type from nullable schema\n   */\n  static getBaseTypeFromNullable(schema: SchemaObject): SchemaObject {\n    if ('$ref' in schema) {\n      return schema;\n    }\n    \n    const nonRefSchema = schema as OpenAPIV3.SchemaObject;\n    \n    // If using oneOf nullable pattern, extract the non-null type\n    if (this.isNullableOneOf(nonRefSchema)) {\n      return this.getNonNullTypeFromOneOf(nonRefSchema);\n    }\n    \n    // Otherwise return the schema as-is (nullable flag will be handled separately)\n    return schema;\n  }\n}","/**\n * Schema type assertions - aligned with Orval structure\n * This file mirrors orval/packages/core/src/utils/assertion.ts\n */\n\nimport { OpenAPIV3 } from 'openapi-types';\n\n/**\n * Check if value is a schema object (not a reference)\n */\nexport function isSchema(x: any): x is OpenAPIV3.SchemaObject {\n  if (!x || typeof x !== 'object') {\n    return false;\n  }\n\n  // References are not schemas\n  if ('$ref' in x) {\n    return false;\n  }\n\n  // Check for schema-specific properties\n  if ('type' in x || 'properties' in x || 'items' in x) {\n    return true;\n  }\n\n  // Check for composition\n  const combine = x.allOf || x.anyOf || x.oneOf;\n  if (Array.isArray(combine)) {\n    return true;\n  }\n\n  // Check for other schema properties\n  if ('enum' in x || 'const' in x || 'nullable' in x) {\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * Check if value is a reference object\n */\nexport function isReference(x: any): x is OpenAPIV3.ReferenceObject {\n  return x && typeof x === 'object' && '$ref' in x;\n}\n\n/**\n * Check if schema has composition (allOf, oneOf, anyOf)\n */\nexport function hasComposition(schema: any): boolean {\n  return !!(schema.allOf || schema.oneOf || schema.anyOf);\n}\n\n/**\n * Check if schema is an enum\n */\nexport function isEnum(schema: any): boolean {\n  return schema && Array.isArray(schema.enum) && schema.enum.length > 0;\n}\n\n/**\n * Check if schema is an object type\n */\nexport function isObject(schema: any): boolean {\n  if (!isSchema(schema)) return false;\n  \n  return schema.type === 'object' || \n         Boolean(schema.properties && Object.keys(schema.properties).length > 0);\n}\n\n/**\n * Check if schema is an array type\n */\nexport function isArray(schema: any): boolean {\n  if (!isSchema(schema)) return false;\n  \n  return schema.type === 'array';\n}\n\n/**\n * Check if schema is a primitive type\n */\nexport function isPrimitive(schema: any): boolean {\n  if (!isSchema(schema)) return false;\n  \n  const primitiveTypes = ['string', 'number', 'integer', 'boolean', 'null'];\n  \n  if (typeof schema.type === 'string') {\n    return primitiveTypes.includes(schema.type);\n  }\n  \n  // OpenAPI 3.1 type arrays\n  if (Array.isArray(schema.type)) {\n    return (schema.type as string[]).every((t: string) => primitiveTypes.includes(t));\n  }\n  \n  return false;\n}\n\n/**\n * Check if schema has discriminator\n */\nexport function hasDiscriminator(schema: any): boolean {\n  return !!(schema.discriminator);\n}\n\n/**\n * Check if schema has discriminated union pattern\n * (property with enum + property with oneOf/anyOf)\n */\nexport function hasDiscriminatedUnion(schema: any): boolean {\n  if (!schema.properties) {\n    return false;\n  }\n\n  // Check if this is an object type (explicit or implicit)\n  if (schema.type && schema.type !== 'object') {\n    return false;\n  }\n\n  let hasEnumProperty = false;\n  let hasValidUnionProperty = false;\n\n  for (const propSchema of Object.values(schema.properties)) {\n    const prop = propSchema as any;\n    \n    if (prop.enum && Array.isArray(prop.enum)) {\n      hasEnumProperty = true;\n    }\n    \n    if (prop.oneOf || prop.anyOf) {\n      const unionSchemas = prop.oneOf || prop.anyOf;\n      // Only consider it a valid union for discriminated pattern if:\n      // 1. There are multiple schemas in the union\n      // 2. Or there's a single schema that is a reference (not a primitive type)\n      if (unionSchemas.length > 1 || \n          (unionSchemas.length === 1 && unionSchemas[0].$ref)) {\n        hasValidUnionProperty = true;\n      }\n    }\n  }\n\n  return hasEnumProperty && hasValidUnionProperty;\n}\n\n/**\n * Get composition type\n */\nexport function getCompositionType(schema: any): 'allOf' | 'oneOf' | 'anyOf' | null {\n  if (schema.allOf) return 'allOf';\n  if (schema.oneOf) return 'oneOf';\n  if (schema.anyOf) return 'anyOf';\n  return null;\n}\n\n/**\n * Check if schema is nullable\n */\nexport function isNullable(schema: any): boolean {\n  // Direct nullable flag (OpenAPI 3.0)\n  if (schema.nullable === true) return true;\n  \n  // Type array with null (OpenAPI 3.1)\n  if (Array.isArray(schema.type) && schema.type.includes('null')) return true;\n  \n  // oneOf/anyOf with null\n  const composition = schema.oneOf || schema.anyOf;\n  if (composition && Array.isArray(composition) && composition.length === 2) {\n    return composition.some((s: any) => s.type === 'null');\n  }\n  \n  return false;\n}\n\n/**\n * Check if schema is required\n */\nexport function isRequired(propertyName: string, parentSchema: any): boolean {\n  return parentSchema.required && \n         Array.isArray(parentSchema.required) && \n         parentSchema.required.includes(propertyName);\n}\n\n/**\n * Check if schema should create an interface (vs type alias)\n */\nexport function shouldCreateInterface(schema: OpenAPIV3.SchemaObject): boolean {\n  return (\n    (!schema.type || schema.type === 'object') &&\n    !schema.allOf &&\n    !schema.oneOf &&\n    !schema.anyOf &&\n    !isReference(schema) &&\n    !schema.nullable &&\n    !schema.enum\n  );\n}\n\n/**\n * Check if schema is empty (no meaningful content)\n */\nexport function isEmpty(schema: any): boolean {\n  if (!isSchema(schema)) return true;\n  \n  // Has type or composition\n  if (schema.type || hasComposition(schema)) return false;\n  \n  // Has properties\n  if (schema.properties && Object.keys(schema.properties).length > 0) return false;\n  \n  // Has enum\n  if (schema.enum && schema.enum.length > 0) return false;\n  \n  // Has const\n  if ('const' in schema) return false;\n  \n  return true;\n}","/**\n * Template manager for loading and compiling Handlebars templates\n */\n\nimport Handlebars from 'handlebars';\nimport * as fs from 'fs/promises';\nimport * as fsSync from 'fs';\nimport * as path from 'path';\nimport { fileURLToPath } from 'url';\n\n// Get __dirname that works in both CJS and ESM\ndeclare const __dirname: string | undefined;\nlet dirName: string;\nif (typeof import.meta !== 'undefined' && import.meta.url) {\n  // ESM\n  const __filename = fileURLToPath(import.meta.url);\n  dirName = path.dirname(__filename);\n} else if (typeof __dirname !== 'undefined') {\n  // CJS - __dirname is available\n  dirName = __dirname;\n} else {\n  // Fallback - calculate from cwd\n  dirName = path.join(process.cwd(), 'dorval/packages/core/dist');\n}\n\nexport class TemplateManager {\n  private templates: Map<string, HandlebarsTemplateDelegate> = new Map();\n  private handlebars: typeof Handlebars;\n\n  constructor() {\n    this.handlebars = Handlebars.create();\n    this.registerHelpers();\n  }\n\n  /**\n   * Register custom Handlebars helpers\n   */\n  private registerHelpers(): void {\n    // Helper to check if a value is not something\n    this.handlebars.registerHelper('not', (value: any) => {\n      return !value;\n    });\n\n    // Helper for logical OR\n    this.handlebars.registerHelper('or', (...args: any[]) => {\n      // Remove the last argument (Handlebars options object)\n      const values = args.slice(0, -1);\n      return values.some(v => v);\n    });\n\n    // Helper for logical AND\n    this.handlebars.registerHelper('and', (...args: any[]) => {\n      // Remove the last argument (Handlebars options object)\n      const values = args.slice(0, -1);\n      return values.every(v => v);\n    });\n\n    // Helper to check equality\n    this.handlebars.registerHelper('eq', (a: any, b: any) => {\n      return a === b;\n    });\n\n    // Helper to check inequality\n    this.handlebars.registerHelper('neq', (a: any, b: any) => {\n      return a !== b;\n    });\n\n    // Helper to decode HTML entities\n    this.handlebars.registerHelper('decodeHtml', (text: string) => {\n      if (!text) return '';\n      \n      // Decode common HTML entities\n      return text\n        .replace(/&#x27;/g, \"'\")\n        .replace(/&#39;/g, \"'\")\n        .replace(/&quot;/g, '\"')\n        .replace(/&lt;/g, '<')\n        .replace(/&gt;/g, '>')\n        .replace(/&amp;/g, '&');\n    });\n\n    // Helper to format Dart documentation comments\n    this.handlebars.registerHelper('dartDoc', (text: string, options?: any) => {\n      if (!text) return '';\n      \n      // Decode HTML entities first\n      text = text\n        .replace(/&#x27;/g, \"'\")\n        .replace(/&#39;/g, \"'\")\n        .replace(/&quot;/g, '\"')\n        .replace(/&lt;/g, '<')\n        .replace(/&gt;/g, '>')\n        .replace(/&amp;/g, '&');\n      \n      // Check if indentLevel is passed as a hash parameter\n      const indentLevel = options?.hash?.indent ?? 2;\n      const indentStr = ' '.repeat(indentLevel);\n      \n      // Normalize line endings and split by newlines\n      const normalizedText = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n      const lines = normalizedText.split('\\n');\n      \n      // Filter out empty lines at the beginning and end\n      while (lines.length > 0 && lines[0].trim() === '') {\n        lines.shift();\n      }\n      while (lines.length > 0 && lines[lines.length - 1].trim() === '') {\n        lines.pop();\n      }\n      \n      // Format each line with /// prefix, all with same indentation\n      // Skip empty lines to avoid /// with no content\n      const formattedLines = lines\n        .filter(line => line.trim() !== '') // Skip empty lines\n        .map((line) => {\n          const trimmed = line.trim();\n          return `${indentStr}/// ${trimmed}`;\n        });\n      \n      const result = formattedLines.join('\\n');\n      \n      // Use Handlebars.SafeString to prevent escaping\n      return new this.handlebars.SafeString(result);\n    });\n\n    // Helper to convert to camelCase\n    this.handlebars.registerHelper('camelCase', (str: string) => {\n      return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n    });\n\n    // Helper to convert to PascalCase\n    this.handlebars.registerHelper('pascalCase', (str: string) => {\n      const camel = str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n      return camel.charAt(0).toUpperCase() + camel.slice(1);\n    });\n\n    // Helper to convert to snake_case\n    this.handlebars.registerHelper('snakeCase', (str: string) => {\n      return str\n        .replace(/([A-Z])/g, '_$1')\n        .toLowerCase()\n        .replace(/^_/, '');\n    });\n\n    // Helper to add indentation\n    this.handlebars.registerHelper('indent', (text: string, spaces: number) => {\n      const indent = ' '.repeat(spaces);\n      return text.split('\\n').map(line => indent + line).join('\\n');\n    });\n\n    // Helper to join array with separator\n    this.handlebars.registerHelper('join', (array: any[], separator: string) => {\n      if (!Array.isArray(array)) return '';\n      return array.join(separator);\n    });\n\n    // Helper to wrap string in quotes, using raw string (r'...') if it contains $\n    // This prevents Dart from trying to parse string interpolation\n    this.handlebars.registerHelper('jsonKeyQuote', (str: string) => {\n      if (!str) return \"''\";\n      // If string contains $ (e.g., $if, $switch), use raw string literal\n      if (str.includes('$')) {\n        return `r'${str}'`;\n      }\n      // Otherwise use regular string\n      return `'${str}'`;\n    });\n  }\n\n  /**\n   * Load and compile a template\n   */\n  async loadTemplate(templateName: string): Promise<HandlebarsTemplateDelegate> {\n    // Check cache first\n    if (this.templates.has(templateName)) {\n      return this.templates.get(templateName)!;\n    }\n\n    // Load template file - check both templates dir and direct path\n    let templatePath = path.join(dirName, 'templates', `${templateName}.hbs`);\n    if (!fsSync.existsSync(templatePath)) {\n      templatePath = path.join(dirName, `${templateName}.hbs`);\n    }\n    const templateContent = await fs.readFile(templatePath, 'utf-8');\n\n    // Compile template\n    const compiled = this.handlebars.compile(templateContent, {\n      noEscape: false,\n      strict: false\n    });\n\n    // Cache for future use\n    this.templates.set(templateName, compiled);\n\n    return compiled;\n  }\n\n  /**\n   * Load template synchronously\n   */\n  loadTemplateSync(templateName: string): HandlebarsTemplateDelegate {\n    // Check cache first\n    if (this.templates.has(templateName)) {\n      return this.templates.get(templateName)!;\n    }\n\n    // Load template file - check both templates dir and direct path\n    let templatePath = path.join(dirName, 'templates', `${templateName}.hbs`);\n    if (!fsSync.existsSync(templatePath)) {\n      templatePath = path.join(dirName, `${templateName}.hbs`);\n    }\n    const templateContent = fsSync.readFileSync(templatePath, 'utf-8');\n\n    // Compile template\n    const compiled = this.handlebars.compile(templateContent, {\n      noEscape: false,\n      strict: false\n    });\n\n    // Cache for future use\n    this.templates.set(templateName, compiled);\n\n    return compiled;\n  }\n\n  /**\n   * Render a template with data\n   */\n  render(templateName: string, data: any): string {\n    const template = this.loadTemplateSync(templateName);\n    const result = template(data);\n    \n    return result;\n  }\n\n  /**\n   * Register a partial template\n   */\n  registerPartial(name: string, content: string): void {\n    this.handlebars.registerPartial(name, content);\n  }\n\n  /**\n   * Clear template cache\n   */\n  clearCache(): void {\n    this.templates.clear();\n  }\n}","/**\n * Dart model generator using Freezed\n */\n\nimport type { OpenAPIV3 } from 'openapi-types';\nimport { DartModel, DartProperty, GeneratedFile } from '../types';\nimport { TypeMapper } from '../utils';\nimport { ReferenceResolver } from '../resolvers';\nimport { TemplateManager } from '../templates/template-manager';\n\nexport class ModelGenerator {\n  private templateManager: TemplateManager;\n  private refResolver?: ReferenceResolver;\n\n  constructor() {\n    this.templateManager = new TemplateManager();\n  }\n  \n  /**\n   * Set the reference resolver for this generator\n   */\n  setReferenceResolver(refResolver: ReferenceResolver): void {\n    this.refResolver = refResolver;\n  }\n\n  /**\n   * Generate a Freezed model from OpenAPI schema\n   */\n  generateModel(name: string, schema: OpenAPIV3.SchemaObject): GeneratedFile {\n    // Check if this is an empty object schema\n    if (this.isEmptyObject(schema)) {\n      return this.generateTypedef(name, schema);\n    }\n\n    const dartModel = this.schemaToModel(name, schema);\n    const content = this.renderModel(dartModel);\n\n    return {\n      path: `models/${TypeMapper.toSnakeCase(name)}.f.dart`,\n      content\n    };\n  }\n\n  /**\n   * Check if a schema represents an empty object\n   * Empty objects are defined as:\n   * - type: \"object\" with no properties\n   * - type: \"object\" with additionalProperties but no properties\n   */\n  private isEmptyObject(schema: OpenAPIV3.SchemaObject): boolean {\n    // Must be an object type\n    if (schema.type !== 'object') {\n      return false;\n    }\n\n    // Check if has allOf - if so, need to check merged properties\n    if (schema.allOf && schema.allOf.length > 0) {\n      let hasAnyProperties = false;\n      for (const subSchema of schema.allOf) {\n        let resolved: OpenAPIV3.SchemaObject;\n        if ('$ref' in subSchema && this.refResolver) {\n          resolved = this.refResolver.resolveReference(subSchema.$ref) as OpenAPIV3.SchemaObject;\n        } else {\n          resolved = subSchema as OpenAPIV3.SchemaObject;\n        }\n        if (resolved && resolved.properties && Object.keys(resolved.properties).length > 0) {\n          hasAnyProperties = true;\n          break;\n        }\n      }\n      if (hasAnyProperties) {\n        return false;\n      }\n    }\n\n    // Check if properties is undefined, null, or empty object\n    if (!schema.properties || Object.keys(schema.properties).length === 0) {\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Generate a typedef for empty object schemas\n   */\n  private generateTypedef(name: string, schema: OpenAPIV3.SchemaObject): GeneratedFile {\n    const className = TypeMapper.toDartClassName(name);\n    const fileName = TypeMapper.toSnakeCase(name);\n\n    const content = `// Generated typedef for empty object schema\n${schema.description ? `/// ${schema.description}\\n` : ''}typedef ${className} = Map<String, dynamic>;\n`;\n\n    return {\n      path: `models/${fileName}.f.dart`,\n      content\n    };\n  }\n\n  /**\n   * Convert OpenAPI schema to DartModel\n   */\n  private schemaToModel(name: string, schema: OpenAPIV3.SchemaObject): DartModel {\n    const properties: DartProperty[] = [];\n    const imports: Set<string> = new Set();\n    \n    // Handle allOf composition - merge all schemas\n    let mergedProperties: Record<string, any> = {};\n    let mergedRequired: string[] = [];\n    \n    if (schema.allOf) {\n      for (const subSchema of schema.allOf) {\n        let resolved: OpenAPIV3.SchemaObject;\n        \n        // Resolve references in allOf\n        if ('$ref' in subSchema && this.refResolver) {\n          resolved = this.refResolver.resolveReference(subSchema.$ref) as OpenAPIV3.SchemaObject;\n        } else {\n          resolved = subSchema as OpenAPIV3.SchemaObject;\n        }\n        \n        if (resolved && resolved.properties) {\n          mergedProperties = { ...mergedProperties, ...resolved.properties };\n        }\n        \n        if (resolved && resolved.required) {\n          mergedRequired = [...mergedRequired, ...resolved.required];\n        }\n      }\n    }\n    \n    // Use merged properties if we had allOf, otherwise use schema.properties\n    const finalProperties = Object.keys(mergedProperties).length > 0 ? mergedProperties : (schema.properties || {});\n    const finalRequired = mergedRequired.length > 0 ? [...new Set(mergedRequired)] : (schema.required || []);\n    \n    // Process properties\n    if (finalProperties && Object.keys(finalProperties).length > 0) {\n      const requiredFields = new Set(finalRequired);\n      \n      Object.entries(finalProperties).forEach(([propName, propSchema]) => {\n        const dartName = TypeMapper.toDartPropertyName(propName);\n        const isRequired = requiredFields.has(propName);\n\n        // Use ReferenceResolver to handle both direct references and regular schemas\n        let dartType: string;\n        if (this.refResolver) {\n          const resolved = this.refResolver.resolvePropertyType(propSchema, isRequired);\n          dartType = resolved.type;  // ReferenceResolver already handles nullable\n          resolved.imports.forEach(imp => imports.add(imp));\n        } else if ('$ref' in propSchema) {\n          // Handle reference without ReferenceResolver\n          const modelName = TypeMapper.extractTypeFromRef(propSchema.$ref);\n          const baseType = TypeMapper.toDartClassName(modelName);\n          const fileName = TypeMapper.toSnakeCase(modelName);\n          imports.add(`${fileName}.f.dart`);\n          \n          // Check if needs nullable for references\n          const propDetails = {} as OpenAPIV3.SchemaObject;\n          const hasDefault = propDetails.default !== undefined;\n          const needsNullable = !isRequired && !hasDefault;\n          dartType = needsNullable && !baseType.endsWith('?') ? `${baseType}?` : baseType;\n        } else {\n          const prop = propSchema as OpenAPIV3.SchemaObject;\n          \n          // Check if this property uses nullable patterns\n          const isNullable = TypeMapper.isNullable(prop);\n          const baseSchema = TypeMapper.getBaseTypeFromNullable(prop);\n          const baseType = TypeMapper.mapType(baseSchema);\n          const typeImports = TypeMapper.getImportsForType(baseType);\n          typeImports.forEach(imp => imports.add(imp));\n          \n          // Determine if type should be nullable\n          const hasDefault = prop.default !== undefined;\n          const needsNullable = (!isRequired && !hasDefault) || isNullable;\n          dartType = needsNullable && !baseType.endsWith('?') ? `${baseType}?` : baseType;\n        }\n        \n        // Get property details from the schema\n        const propDetails = '$ref' in propSchema ? {} : propSchema as OpenAPIV3.SchemaObject;\n        \n        properties.push({\n          name: dartName,\n          type: dartType,\n          required: isRequired,\n          nullable: !isRequired || propDetails.nullable === true,\n          description: propDetails.description,\n          defaultValue: propDetails.default,\n          // Always add jsonKey if names differ OR if propName contains $ (for raw string handling)\n          jsonKey: (dartName !== propName || propName.includes('$')) ? propName : undefined\n        });\n      });\n    }\n    \n    return {\n      name: TypeMapper.toDartClassName(name),\n      properties,\n      imports: Array.from(imports),\n      description: schema.description,\n      isEnum: false\n    };\n  }\n\n  /**\n   * Render a DartModel to Dart code\n   */\n  private renderModel(model: DartModel): string {\n    const fileName = TypeMapper.toSnakeCase(model.name);\n    \n    // Check for special types\n    const hasDateTime = model.properties.some(p => p.type.includes('DateTime'));\n    const hasUint8List = model.properties.some(p => p.type.includes('Uint8List'));\n    // DateTime converters are not needed - Freezed/json_serializable handle DateTime automatically\n    const hasDateTimeConverter = false;\n    \n    // Check if we need custom JSON serialization\n    const hasCustomJson = model.properties.some(p => p.jsonKey);\n    const hasFieldRename = false; // We handle field names individually\n    \n    // Prepare template data\n    const templateData = {\n      className: model.name,\n      fileName,\n      description: model.description,\n      deprecated: false,\n      properties: model.properties.map(prop => ({\n        name: prop.name,\n        type: prop.type,\n        // If a field has a default value, it should not be marked as required in Freezed\n        required: prop.required && !prop.defaultValue,\n        nullable: prop.nullable,\n        description: prop.description,\n        jsonKey: prop.jsonKey,\n        isDateTime: prop.type === 'DateTime',\n        defaultValue: this.formatDefaultValue(prop),\n        deprecated: false\n      })),\n      hasDateTime,\n      hasUint8List,\n      hasDateTimeConverter,\n      hasCustomJson,\n      hasFieldRename,\n      additionalImports: model.imports.filter(imp =>\n        !imp.includes('dart:') &&\n        !imp.includes('freezed') &&\n        !imp.includes('json_annotation')\n      ),\n      hasCustomMethods: false,\n      customMethods: []\n    };\n\n    return this.templateManager.render('freezed-model', templateData);\n  }\n\n  /**\n   * Format default value for template\n   */\n  private formatDefaultValue(prop: DartProperty): string | null {\n    if (prop.defaultValue === undefined || prop.defaultValue === null) {\n      return null;\n    }\n    \n    // Format based on type\n    if (prop.type === 'String') {\n      return `'${prop.defaultValue}'`;\n    }\n    \n    if (prop.type === 'int' || prop.type === 'double') {\n      return String(prop.defaultValue);\n    }\n    \n    if (prop.type === 'bool') {\n      return String(prop.defaultValue);\n    }\n    \n    if (prop.type.startsWith('List')) {\n      return 'const []';\n    }\n    \n    if (prop.type.startsWith('Map')) {\n      return 'const {}';\n    }\n    \n    return null;\n  }\n\n  /**\n   * Generate enum from schema\n   */\n  generateEnum(name: string, values: string[], description?: string): GeneratedFile {\n    const enumName = TypeMapper.toDartClassName(name);\n    const fileName = TypeMapper.toSnakeCase(enumName);\n    \n    // Convert enum values to valid Dart enum names\n    const enumValues = values.map(value => {\n      // Handle null values\n      if (value === null || value === 'null') {\n        return {\n          name: 'nullValue',\n          value: 'null',\n          description: 'Null value'\n        };\n      }\n      \n      // Handle empty string\n      if (value === '') {\n        return {\n          name: 'empty',\n          value: '',\n          description: 'Empty string'\n        };\n      }\n      \n      // Start with the original value\n      let dartName = String(value);\n      \n      // Handle numeric-only values or values starting with numbers\n      if (/^\\d/.test(dartName)) {\n        dartName = `value${dartName.charAt(0).toUpperCase() + dartName.slice(1)}`;\n      }\n      \n      // Replace special characters with underscores\n      dartName = dartName\n        .replace(/[^a-zA-Z0-9_]/g, '_')  // Replace non-alphanumeric with underscore\n        .replace(/_+/g, '_')              // Replace multiple underscores with single\n        .replace(/^_+|_+$/g, '');         // Remove leading/trailing underscores\n      \n      // Convert to camelCase for Dart enum convention\n      // Split by underscore and capitalize each part except first\n      const parts = dartName.split('_');\n      dartName = parts[0].toLowerCase() + parts.slice(1).map(p => \n        p.charAt(0).toUpperCase() + p.slice(1).toLowerCase()\n      ).join('');\n      \n      // Ensure it doesn't start with uppercase\n      if (dartName.charAt(0).match(/[A-Z]/)) {\n        dartName = dartName.charAt(0).toLowerCase() + dartName.slice(1);\n      }\n      \n      return {\n        name: dartName,\n        value: value,\n        description: undefined\n      };\n    });\n    \n    const templateData = {\n      enumName,\n      description,\n      values: enumValues\n    };\n    \n    const content = this.templateManager.render('freezed-enum', templateData);\n    \n    return {\n      path: `models/${fileName}.f.dart`,\n      content\n    };\n  }\n}","/**\n * Schema resolver for handling complex OpenAPI schema structures\n */\n\n\nexport interface ResolvedSchema {\n  type: 'object' | 'array' | 'primitive' | 'enum' | 'composition' | 'reference';\n  dartType: string;\n  imports: string[];\n  nullable?: boolean;\n  description?: string;\n  properties?: Map<string, ResolvedProperty>;\n  required?: string[];\n  composition?: {\n    type: 'oneOf' | 'anyOf' | 'allOf';\n    schemas: any[];\n    discriminator?: any;\n  };\n}\n\nexport interface ResolvedProperty {\n  name: string;\n  dartType: string;\n  required: boolean;\n  nullable: boolean;\n  description?: string;\n  defaultValue?: any;\n  jsonKey?: string;\n}\n\nexport class SchemaResolver {\n  private schemas: Record<string, any>;\n  private resolvedCache: Map<string, ResolvedSchema> = new Map();\n  private resolvingStack: Set<string> = new Set(); // For circular reference detection\n\n  constructor(schemas: Record<string, any>) {\n    this.schemas = schemas;\n  }\n\n  /**\n   * Resolve a schema to its Dart representation\n   */\n  resolve(schema: any, name?: string): ResolvedSchema {\n    // Check cache first\n    const cacheKey = name || JSON.stringify(schema);\n    if (this.resolvedCache.has(cacheKey)) {\n      return this.resolvedCache.get(cacheKey)!;\n    }\n\n    // Check for circular reference\n    if (name && this.resolvingStack.has(name)) {\n      return {\n        type: 'reference',\n        dartType: name,\n        imports: [],\n        description: 'Circular reference'\n      };\n    }\n\n    if (name) {\n      this.resolvingStack.add(name);\n    }\n\n    try {\n      const resolved = this.resolveSchema(schema, name);\n      this.resolvedCache.set(cacheKey, resolved);\n      return resolved;\n    } finally {\n      if (name) {\n        this.resolvingStack.delete(name);\n      }\n    }\n  }\n\n  /**\n   * Internal schema resolution\n   */\n  private resolveSchema(schema: any, name?: string): ResolvedSchema {\n    // Handle $ref\n    if (schema.$ref) {\n      return this.resolveReference(schema.$ref);\n    }\n\n    // Handle composition (oneOf, anyOf, allOf)\n    if (schema.oneOf || schema.anyOf || schema.allOf) {\n      return this.resolveComposition(schema, name);\n    }\n\n    // Handle enum\n    if (schema.enum) {\n      return this.resolveEnum(schema, name);\n    }\n\n    // Handle array\n    if (schema.type === 'array') {\n      return this.resolveArray(schema);\n    }\n\n    // Handle object\n    if (schema.type === 'object' || schema.properties) {\n      return this.resolveObject(schema, name);\n    }\n\n    // Handle primitives\n    return this.resolvePrimitive(schema);\n  }\n\n  /**\n   * Resolve a $ref reference\n   */\n  private resolveReference(ref: string): ResolvedSchema {\n    const parts = ref.split('/');\n    const schemaName = parts[parts.length - 1];\n    \n    // Look up the referenced schema\n    const referencedSchema = this.schemas[schemaName];\n    if (!referencedSchema) {\n      return {\n        type: 'reference',\n        dartType: this.toDartClassName(schemaName),\n        imports: [`${this.toSnakeCase(schemaName)}.dart`]\n      };\n    }\n\n    // Resolve the referenced schema\n    const resolved = this.resolve(referencedSchema, schemaName);\n    \n    // Override the dart type to use the reference name\n    return {\n      ...resolved,\n      dartType: this.toDartClassName(schemaName),\n      imports: [`${this.toSnakeCase(schemaName)}.dart`]\n    };\n  }\n\n  /**\n   * Resolve composition schemas (oneOf, anyOf, allOf)\n   */\n  private resolveComposition(schema: any, name?: string): ResolvedSchema {\n    const compositionType = schema.oneOf ? 'oneOf' : \n                           schema.anyOf ? 'anyOf' : 'allOf';\n    \n    const schemas = schema[compositionType];\n    const discriminator = schema.discriminator;\n    \n    return {\n      type: 'composition',\n      dartType: name ? this.toDartClassName(name) : 'dynamic',\n      imports: [],\n      composition: {\n        type: compositionType,\n        schemas,\n        discriminator\n      }\n    };\n  }\n\n  /**\n   * Resolve enum schema\n   */\n  private resolveEnum(schema: any, name?: string): ResolvedSchema {\n    const enumName = name ? this.toDartClassName(name) : 'DynamicEnum';\n    \n    return {\n      type: 'enum',\n      dartType: enumName,\n      imports: name ? [`${this.toSnakeCase(name)}.dart`] : [],\n      description: schema.description\n    };\n  }\n\n  /**\n   * Resolve array schema\n   */\n  private resolveArray(schema: any): ResolvedSchema {\n    if (!schema.items) {\n      return {\n        type: 'array',\n        dartType: 'List<dynamic>',\n        imports: []\n      };\n    }\n\n    const itemResolved = this.resolve(schema.items);\n    return {\n      type: 'array',\n      dartType: `List<${itemResolved.dartType}>`,\n      imports: itemResolved.imports,\n      nullable: schema.nullable\n    };\n  }\n\n  /**\n   * Resolve object schema\n   */\n  private resolveObject(schema: any, name?: string): ResolvedSchema {\n    const properties = new Map<string, ResolvedProperty>();\n    const imports: string[] = [];\n    \n    if (schema.properties) {\n      Object.entries(schema.properties).forEach(([propName, propSchema]: [string, any]) => {\n        const resolved = this.resolve(propSchema);\n        const isRequired = schema.required?.includes(propName) || false;\n        \n        properties.set(propName, {\n          name: this.toDartPropertyName(propName),\n          dartType: resolved.dartType,\n          required: isRequired,\n          nullable: !isRequired || propSchema.nullable || false,\n          description: propSchema.description,\n          defaultValue: propSchema.default,\n          jsonKey: propName !== this.toDartPropertyName(propName) ? propName : undefined\n        });\n        \n        imports.push(...resolved.imports);\n      });\n    }\n    \n    return {\n      type: 'object',\n      dartType: name ? this.toDartClassName(name) : 'Map<String, dynamic>',\n      imports: [...new Set(imports)],\n      properties,\n      required: schema.required,\n      description: schema.description\n    };\n  }\n\n  /**\n   * Resolve primitive types\n   */\n  private resolvePrimitive(schema: any): ResolvedSchema {\n    let dartType = 'dynamic';\n    \n    switch (schema.type) {\n      case 'string':\n        if (schema.format === 'date-time') {\n          dartType = 'DateTime';\n        } else if (schema.format === 'binary') {\n          dartType = 'Uint8List';\n        } else {\n          dartType = 'String';\n        }\n        break;\n      case 'integer':\n        dartType = 'int';\n        break;\n      case 'number':\n        dartType = 'double';\n        break;\n      case 'boolean':\n        dartType = 'bool';\n        break;\n      case 'null':\n        dartType = 'void';\n        break;\n    }\n    \n    // Handle nullable\n    if (schema.nullable && !dartType.endsWith('?')) {\n      dartType += '?';\n    }\n    \n    return {\n      type: 'primitive',\n      dartType,\n      imports: [],\n      nullable: schema.nullable,\n      description: schema.description\n    };\n  }\n\n  /**\n   * Check if a schema has composition\n   */\n  hasComposition(schema: any): boolean {\n    return !!(schema.oneOf || schema.anyOf || schema.allOf);\n  }\n\n  /**\n   * Check if a schema is nullable\n   */\n  isNullable(schema: any): boolean {\n    // Direct nullable flag\n    if (schema.nullable === true) return true;\n    \n    // OpenAPI 3.1 type array with null\n    if (Array.isArray(schema.type) && schema.type.includes('null')) return true;\n    \n    // oneOf/anyOf with null type\n    const composition = schema.oneOf || schema.anyOf;\n    if (composition && Array.isArray(composition)) {\n      return composition.some((s: any) => s.type === 'null');\n    }\n    \n    return false;\n  }\n\n  /**\n   * Convert to Dart class name (PascalCase)\n   */\n  private toDartClassName(name: string): string {\n    return name\n      .replace(/[-_](.)/g, (_, char) => char.toUpperCase())\n      .replace(/^(.)/, (_, char) => char.toUpperCase());\n  }\n\n  /**\n   * Convert to Dart property name (camelCase)\n   */\n  private toDartPropertyName(name: string): string {\n    return name\n      .replace(/[-_](.)/g, (_, char) => char.toUpperCase())\n      .replace(/^(.)/, (_, char) => char.toLowerCase());\n  }\n\n  /**\n   * Convert to snake_case for file names\n   */\n  private toSnakeCase(str: string): string {\n    return str\n      .replace(/([a-z])([A-Z])/g, '$1_$2')\n      .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n      .toLowerCase()\n      .replace(/^_+/, '');\n  }\n}","/**\n * Utility for resolving $ref references in OpenAPI specifications\n */\n\nimport type { OpenAPIV3 } from 'openapi-types';\nimport { TypeMapper } from '../utils';\n\nexport class ReferenceResolver {\n  private readonly spec: OpenAPIV3.Document;\n  \n  constructor(spec: OpenAPIV3.Document) {\n    this.spec = spec;\n  }\n  \n  /**\n   * Extract model name from a $ref string\n   * Example: \"#/components/schemas/LocationSettingsResponseDto\" -> \"LocationSettingsResponseDto\"\n   */\n  static extractModelNameFromRef(ref: string): string {\n    const parts = ref.split('/');\n    const modelName = parts[parts.length - 1];\n    return TypeMapper.toDartClassName(modelName);\n  }\n  \n  /**\n   * Check if a schema is a reference\n   */\n  static isReference(schema: any): schema is OpenAPIV3.ReferenceObject {\n    return schema && typeof schema === 'object' && '$ref' in schema;\n  }\n  \n  /**\n   * Resolve a reference to its actual schema\n   */\n  resolveReference(ref: string): OpenAPIV3.SchemaObject | null {\n    // Parse the reference path\n    // Format: #/components/schemas/ModelName\n    if (!ref.startsWith('#/')) {\n      console.warn(`External references not supported: ${ref}`);\n      return null;\n    }\n    \n    const parts = ref.substring(2).split('/'); // Remove '#/' and split\n    let current: any = this.spec;\n    \n    for (const part of parts) {\n      if (!current || typeof current !== 'object') {\n        return null;\n      }\n      current = current[part];\n    }\n    \n    // If the resolved value is itself a reference, resolve it recursively\n    if (ReferenceResolver.isReference(current)) {\n      return this.resolveReference(current.$ref);\n    }\n    \n    return current as OpenAPIV3.SchemaObject;\n  }\n  \n  /**\n   * Get the Dart type for a schema (handles both direct schemas and references)\n   */\n  getDartType(schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject): string {\n    if (ReferenceResolver.isReference(schema)) {\n      // This is a reference to a model\n      return ReferenceResolver.extractModelNameFromRef(schema.$ref);\n    }\n    \n    // Direct schema - use TypeMapper\n    const schemaObj = schema as OpenAPIV3.SchemaObject;\n    \n    // Handle arrays\n    if (schemaObj.type === 'array' && schemaObj.items) {\n      const itemType = this.getDartType(schemaObj.items);\n      return `List<${itemType}>`;\n    }\n    \n    // Handle objects with title (models)\n    if (schemaObj.type === 'object' && schemaObj.title) {\n      return TypeMapper.toDartClassName(schemaObj.title);\n    }\n    \n    // Use TypeMapper for primitive types\n    return TypeMapper.mapType(schemaObj);\n  }\n  \n  // TODO: These methods may be needed for future functionality\n  // Keeping them commented out to avoid unused warnings\n  /*\n  /**\n   * Get response type from an operation\n   * @internal May be used by other modules\n   */\n  /*\n  _getResponseType(operation: OpenAPIV3.OperationObject): string {\n    const responses = operation.responses;\n    if (!responses) {\n      return 'void';\n    }\n    \n    // Check for successful response codes\n    const successCodes = ['200', '201', '202', '204'];\n    for (const code of successCodes) {\n      const response = responses[code];\n      if (!response) continue;\n      \n      // Handle reference responses\n      if (ReferenceResolver.isReference(response)) {\n        const resolved = this.resolveReference(response.$ref);\n        if (resolved && (resolved as any).content?.['application/json']?.schema) {\n          return this.getDartType((resolved as any).content['application/json'].schema);\n        }\n        continue;\n      }\n      \n      // Handle direct response objects\n      const responseObj = response as OpenAPIV3.ResponseObject;\n      if (responseObj.content?.['application/json']?.schema) {\n        return this.getDartType(responseObj.content['application/json'].schema);\n      }\n    }\n    \n    // Check default response\n    if (responses.default) {\n      if (ReferenceResolver.isReference(responses.default)) {\n        const resolved = this.resolveReference(responses.default.$ref);\n        if (resolved && (resolved as any).content?.['application/json']?.schema) {\n          return this.getDartType((resolved as any).content['application/json'].schema);\n        }\n      } else {\n        const defaultResponse = responses.default as OpenAPIV3.ResponseObject;\n        if (defaultResponse.content?.['application/json']?.schema) {\n          return this.getDartType(defaultResponse.content['application/json'].schema);\n        }\n      }\n    }\n    \n    return 'dynamic';\n  }\n  */\n  \n  /**\n   * Get request body type from an operation\n   * @internal May be used by other modules\n   */\n  /*\n  _getRequestBodyType(operation: OpenAPIV3.OperationObject): string | null {\n    if (!operation.requestBody) {\n      return null;\n    }\n    \n    let requestBody: OpenAPIV3.RequestBodyObject;\n    \n    if (ReferenceResolver.isReference(operation.requestBody)) {\n      const resolved = this.resolveReference(operation.requestBody.$ref);\n      if (!resolved) {\n        return null;\n      }\n      requestBody = resolved as unknown as OpenAPIV3.RequestBodyObject;\n    } else {\n      requestBody = operation.requestBody as OpenAPIV3.RequestBodyObject;\n    }\n    \n    // Check for JSON content\n    if (requestBody.content?.['application/json']?.schema) {\n      return this.getDartType(requestBody.content['application/json'].schema);\n    }\n    \n    // Check for form data\n    if (requestBody.content?.['multipart/form-data']?.schema) {\n      return 'FormData';\n    }\n    \n    // Check for URL encoded\n    if (requestBody.content?.['application/x-www-form-urlencoded']?.schema) {\n      return 'FormData';\n    }\n    \n    return null;\n  }\n  */\n  \n  /**\n   * Generic resolve method that resolves any $ref in the spec\n   */\n  resolve(obj: any): any {\n    if (!obj || typeof obj !== 'object') {\n      return obj;\n    }\n    \n    if (ReferenceResolver.isReference(obj)) {\n      const resolved = this.resolveReference(obj.$ref);\n      // Always return the original object if reference can't be resolved\n      return resolved || obj;\n    }\n    \n    return obj;\n  }\n  \n  /**\n   * Deep resolve that handles nested references\n   */\n  resolveDeep(obj: any, visited: Set<string> = new Set()): any {\n    if (!obj || typeof obj !== 'object') {\n      return obj;\n    }\n    \n    if (ReferenceResolver.isReference(obj)) {\n      if (visited.has(obj.$ref)) {\n        // Circular reference detected\n        return { $ref: obj.$ref };\n      }\n      visited.add(obj.$ref);\n      const resolved = this.resolveReference(obj.$ref);\n      return resolved ? this.resolveDeep(resolved, visited) : null;\n    }\n    \n    if (Array.isArray(obj)) {\n      return obj.map(item => this.resolveDeep(item, visited));\n    }\n    \n    const result: any = {};\n    for (const [key, value] of Object.entries(obj)) {\n      if (key === 'allOf' && Array.isArray(value)) {\n        // Special handling for allOf - merge the schemas\n        const merged = this.mergeAllOf(value);\n        Object.assign(result, this.resolveDeep(merged, visited));\n      } else {\n        result[key] = this.resolveDeep(value, visited);\n      }\n    }\n    return result;\n  }\n  \n  /**\n   * Get model type from a schema\n   */\n  getModelType(schema: any, nullable: boolean = true): string {\n    const type = this.getDartType(schema);\n    return !nullable && type !== 'dynamic' ? `${type}?` : type;\n  }\n  \n  /**\n   * Get imports needed for a schema\n   */\n  getImports(schema: any): string[] {\n    const imports: Set<string> = new Set();\n    \n    const addImportsForType = (s: any) => {\n      if (!s || typeof s !== 'object') {\n        return;\n      }\n      \n      if (ReferenceResolver.isReference(s)) {\n        const modelName = ReferenceResolver.extractModelNameFromRef(s.$ref);\n        const fileName = TypeMapper.toSnakeCase(modelName);\n        \n        // Check if it's an enum\n        const resolved = this.resolveReference(s.$ref);\n        if (resolved && (resolved as OpenAPIV3.SchemaObject).enum) {\n          imports.add(`${fileName}.dart`);\n        } else {\n          imports.add(`${fileName}.f.dart`);\n        }\n      } else if ((s as OpenAPIV3.SchemaObject)?.type === 'array' && (s as OpenAPIV3.ArraySchemaObject).items) {\n        addImportsForType((s as OpenAPIV3.ArraySchemaObject).items);\n      } else if ((s as OpenAPIV3.SchemaObject)?.type === 'string' && (s as OpenAPIV3.SchemaObject).format === 'binary') {\n        imports.add('dart:typed_data');\n      } else if ((s as OpenAPIV3.SchemaObject)?.type === 'object' && (s as OpenAPIV3.SchemaObject).properties) {\n        // Check properties for imports\n        for (const prop of Object.values((s as OpenAPIV3.SchemaObject).properties!)) {\n          addImportsForType(prop);\n        }\n      }\n    };\n    \n    if (Array.isArray(schema)) {\n      schema.forEach(addImportsForType);\n    } else {\n      addImportsForType(schema);\n    }\n    \n    return Array.from(imports);\n  }\n  \n  /**\n   * Check if a reference creates a circular dependency\n   */\n  isCircularReference(ref: string, path: string[] = []): boolean {\n    // Simple check: if the reference is already in the path, it's circular\n    return path.includes(ref);\n  }\n  \n  /**\n   * Merge allOf schemas into a single schema\n   */\n  mergeAllOf(schemaOrArray: any): OpenAPIV3.SchemaObject {\n    // Handle both array and object with allOf property\n    const schemas = Array.isArray(schemaOrArray) ? schemaOrArray : (schemaOrArray?.allOf || []);\n    \n    const merged: OpenAPIV3.SchemaObject = {\n      type: 'object',\n      properties: {},\n      required: []\n    };\n    \n    for (const schema of schemas) {\n      let resolved: OpenAPIV3.SchemaObject;\n      \n      if (ReferenceResolver.isReference(schema)) {\n        const r = this.resolveReference(schema.$ref);\n        if (!r) continue;\n        resolved = r;\n      } else {\n        resolved = schema;\n      }\n      \n      // Merge properties\n      if (resolved.properties) {\n        merged.properties = { ...merged.properties, ...resolved.properties };\n      }\n      \n      // Merge required arrays\n      if (resolved.required) {\n        merged.required = [...new Set([...(merged.required || []), ...resolved.required])];\n      }\n      \n      // Merge other properties\n      if (resolved.description && !merged.description) {\n        merged.description = resolved.description;\n      }\n    }\n    \n    return merged;\n  }\n  \n  /**\n   * Get schema name from a reference\n   */\n  getSchemaName(ref: any): string | null {\n    if (!ref || typeof ref !== 'string') {\n      if (ReferenceResolver.isReference(ref)) {\n        return this.getSchemaName(ref.$ref);\n      }\n      return null;\n    }\n    \n    if (!ref.startsWith('#/components/schemas/')) {\n      return null;\n    }\n    \n    const parts = ref.split('/');\n    return parts[parts.length - 1] || null;\n  }\n\n  /**\n   * Helper method to recursively collect imports from a schema\n   * This handles nested arrays (List<List<Model>>) and complex types\n   */\n  private collectImportsFromSchema(schema: any, imports: string[]): void {\n    if (!schema || typeof schema !== 'object') {\n      return;\n    }\n\n    // Handle $ref - add import for the referenced model\n    if (ReferenceResolver.isReference(schema)) {\n      const modelName = this.getSchemaName(schema.$ref);\n      if (modelName) {\n        const fileName = TypeMapper.toSnakeCase(modelName);\n        const importPath = `${fileName}.f.dart`;\n        // Only add if not already present\n        if (!imports.includes(importPath)) {\n          imports.push(importPath);\n        }\n      }\n      return;\n    }\n\n    const schemaObj = schema as OpenAPIV3.SchemaObject;\n\n    // Handle array types - recursively process items\n    if (schemaObj.type === 'array' && schemaObj.items) {\n      this.collectImportsFromSchema(schemaObj.items, imports);\n      return;\n    }\n\n    // Handle object with additionalProperties (Map<String, T>)\n    if (schemaObj.type === 'object' && schemaObj.additionalProperties) {\n      if (typeof schemaObj.additionalProperties === 'object') {\n        this.collectImportsFromSchema(schemaObj.additionalProperties, imports);\n      }\n      return;\n    }\n\n    // Handle oneOf/anyOf - collect imports from all branches\n    if (schemaObj.oneOf) {\n      for (const subSchema of schemaObj.oneOf) {\n        this.collectImportsFromSchema(subSchema, imports);\n      }\n      return;\n    }\n\n    if (schemaObj.anyOf) {\n      for (const subSchema of schemaObj.anyOf) {\n        this.collectImportsFromSchema(subSchema, imports);\n      }\n      return;\n    }\n\n    // Handle allOf - collect imports from all branches\n    if (schemaObj.allOf) {\n      for (const subSchema of schemaObj.allOf) {\n        this.collectImportsFromSchema(subSchema, imports);\n      }\n      return;\n    }\n  }\n\n  /**\n   * Resolve property type and its imports\n   */\n  resolvePropertyType(propSchema: any, isRequired: boolean): { type: string; imports: string[] } {\n    const imports: string[] = [];\n    let type: string;\n    \n    // Handle allOf composition in property\n    if (propSchema && propSchema.allOf) {\n      // If allOf has a single $ref, treat it as a direct reference\n      if (propSchema.allOf.length === 1 && propSchema.allOf[0].$ref) {\n        const modelName = this.getSchemaName(propSchema.allOf[0].$ref);\n        if (modelName) {\n          const className = TypeMapper.toDartClassName(modelName);\n          const fileName = TypeMapper.toSnakeCase(modelName);\n          imports.push(`${fileName}.f.dart`);\n          type = className;\n          \n          // Add nullable if not required\n          if (!isRequired) {\n            type = `${type}?`;\n          }\n        } else {\n          type = 'dynamic';\n        }\n      } else {\n        // Complex allOf - for now use dynamic\n        // TODO: Implement proper allOf merging\n        type = 'dynamic';\n      }\n    }\n    // Handle oneOf/anyOf composition in property\n    else if (propSchema && (propSchema.oneOf || propSchema.anyOf)) {\n      const schemas = propSchema.oneOf || propSchema.anyOf;\n      \n      // Check if this is a nullable pattern (oneOf with type and null)\n      if (schemas.length === 2) {\n        const hasNull = schemas.some((s: any) => s.type === 'null');\n        const nonNullSchema = schemas.find((s: any) => s.type !== 'null');\n        \n        if (hasNull && nonNullSchema) {\n          // This is a nullable type pattern\n          if (nonNullSchema.$ref) {\n            const modelName = this.getSchemaName(nonNullSchema.$ref);\n            if (modelName) {\n              const className = TypeMapper.toDartClassName(modelName);\n              const fileName = TypeMapper.toSnakeCase(modelName);\n              imports.push(`${fileName}.f.dart`);\n              type = `${className}?`; // Already nullable due to oneOf with null\n            } else {\n              type = 'dynamic';\n            }\n          } else {\n            // Regular schema that's nullable\n            type = TypeMapper.mapType(nonNullSchema);\n            if (!type.endsWith('?')) {\n              type = `${type}?`;\n            }\n          }\n        } else {\n          // Complex oneOf/anyOf - use dynamic for now\n          type = 'dynamic';\n        }\n      } else if (schemas.length === 1 && schemas[0].$ref) {\n        // Single ref in oneOf/anyOf\n        const modelName = this.getSchemaName(schemas[0].$ref);\n        if (modelName) {\n          const className = TypeMapper.toDartClassName(modelName);\n          const fileName = TypeMapper.toSnakeCase(modelName);\n          imports.push(`${fileName}.f.dart`);\n          type = className;\n          \n          // Add nullable if not required\n          if (!isRequired) {\n            type = `${type}?`;\n          }\n        } else {\n          type = 'dynamic';\n        }\n      } else {\n        // Complex oneOf/anyOf - use dynamic for now\n        type = 'dynamic';\n      }\n    }\n    else if (ReferenceResolver.isReference(propSchema)) {\n      // Handle direct $ref\n      const modelName = this.getSchemaName(propSchema.$ref);\n      if (modelName) {\n        const className = TypeMapper.toDartClassName(modelName);\n        const fileName = TypeMapper.toSnakeCase(modelName);\n        imports.push(`${fileName}.f.dart`);\n        type = className;\n        \n        // Add nullable if not required\n        if (!isRequired) {\n          type = `${type}?`;\n        }\n      } else {\n        type = 'dynamic';\n      }\n    } else {\n      // Handle regular schema\n      const schema = propSchema as OpenAPIV3.SchemaObject;\n      type = TypeMapper.mapType(schema);\n\n      // Check if needs nullable\n      const isNullable = TypeMapper.isNullable(schema);\n      const hasDefault = schema && schema.default !== undefined;\n      const needsNullable = (!isRequired && !hasDefault) || isNullable;\n\n      if (needsNullable && !type.endsWith('?')) {\n        type = `${type}?`;\n      }\n\n      // Check for special imports\n      if (type.includes('Uint8List')) {\n        imports.push('dart:typed_data');\n      }\n\n      // Handle array types - recursively process items\n      if (schema.type === 'array' && schema.items) {\n        this.collectImportsFromSchema(schema.items, imports);\n      }\n    }\n    \n    return { type, imports };\n  }\n}","/**\n * Handles schema composition (allOf, oneOf, anyOf) - aligned with Orval structure\n * This file mirrors orval/packages/core/src/getters/combine.ts\n */\n\nimport { TemplateManager } from '../templates/template-manager';\n\n// Separator type matching Orval\ntype Separator = 'allOf' | 'anyOf' | 'oneOf';\n\nexport interface CombineOptions {\n  separator: Separator;\n  discriminatorProperty?: string;\n  discriminatorValues?: string[];\n  nullable?: boolean;\n}\n\nexport interface CombineResult {\n  type: string;\n  imports: string[];\n  isSealed?: boolean;\n  definition?: string;\n}\n\n/**\n * Main function to combine schemas - mirrors Orval's combineSchemas\n */\nexport function combineSchemas(\n  schema: any,\n  name: string,\n  separator: Separator,\n  context?: any\n): CombineResult {\n  // Get the schemas to combine\n  const schemas = schema[separator];\n  if (!schemas || !Array.isArray(schemas)) {\n    return {\n      type: 'dynamic',\n      imports: []\n    };\n  }\n\n  // Check for nullable pattern (oneOf/anyOf with null)\n  if (isNullablePattern(separator, schemas)) {\n    return handleNullablePattern(schemas);\n  }\n\n  // Check for discriminator - prefer context discriminator over schema discriminator\n  const discriminator = context?.discriminator || extractDiscriminator(schema);\n  \n  // Handle based on separator type\n  switch (separator) {\n    case 'allOf':\n      return combineAllOf(name, schemas, context);\n    case 'oneOf':\n      return combineOneOf(name, schemas, discriminator, context);\n    case 'anyOf':\n      return combineAnyOf(name, schemas, discriminator, context);\n    default:\n      return {\n        type: 'dynamic',\n        imports: []\n      };\n  }\n}\n\n/**\n * Combine allOf schemas - intersection type behavior\n */\nfunction combineAllOf(\n  name: string,\n  schemas: any[],\n  context?: any\n): CombineResult {\n  const imports: string[] = [];\n  const properties = new Map<string, any>();\n  const required = new Set<string>();\n  \n  // Merge all properties from all schemas\n  schemas.forEach(schema => {\n    if (schema.$ref) {\n      const typeName = extractTypeFromRef(schema.$ref);\n      imports.push(`${toSnakeCase(typeName)}.f.dart`);\n      \n      // Use refResolver if available to properly resolve the reference\n      if (context?.refResolver) {\n        const resolved = context.refResolver.resolveReference(schema.$ref);\n        if (resolved) {\n          // Recursively handle allOf in the referenced schema\n          if (resolved.allOf) {\n            const nestedResult = combineAllOf(typeName, resolved.allOf, context);\n            // Merge nested properties\n            nestedResult.imports.forEach(imp => imports.push(imp));\n            // Get the properties from the resolved schema\n            if (context?.schemas && context.schemas[typeName]) {\n              const referencedSchema = context.schemas[typeName];\n              if (referencedSchema.properties) {\n                Object.entries(referencedSchema.properties).forEach(([key, value]) => {\n                  properties.set(key, value);\n                });\n              }\n              if (referencedSchema.required) {\n                referencedSchema.required.forEach((req: string) => required.add(req));\n              }\n            }\n          } else {\n            // Regular reference without allOf\n            if (resolved.properties) {\n              Object.entries(resolved.properties).forEach(([key, value]) => {\n                properties.set(key, value);\n              });\n            }\n            if (resolved.required) {\n              resolved.required.forEach((req: string) => required.add(req));\n            }\n          }\n        }\n      } else if (context?.schemas && context.schemas[typeName]) {\n        // Fallback to using context.schemas if refResolver not available\n        const referencedSchema = context.schemas[typeName];\n        if (referencedSchema.properties) {\n          Object.entries(referencedSchema.properties).forEach(([key, value]) => {\n            properties.set(key, value);\n          });\n        }\n        if (referencedSchema.required) {\n          referencedSchema.required.forEach((req: string) => required.add(req));\n        }\n      }\n    } else if (schema.properties) {\n      Object.entries(schema.properties).forEach(([key, value]) => {\n        properties.set(key, value);\n      });\n      if (schema.required) {\n        schema.required.forEach((req: string) => required.add(req));\n      }\n    }\n  });\n\n  // Generate Freezed class with all combined properties\n  const definition = generateFreezedClass(name, properties, required, imports);\n  \n  return {\n    type: name,\n    imports,\n    definition\n  };\n}\n\n/**\n * Combine oneOf schemas - union type with exactly one match\n */\nfunction combineOneOf(\n  name: string,\n  schemas: any[],\n  discriminator?: any,\n  _context?: any\n): CombineResult {\n  const imports: string[] = [];\n  \n  // If we have a discriminator, generate sealed class\n  if (discriminator) {\n    return generateSealedClass(name, schemas, discriminator, imports);\n  }\n  \n  // Without discriminator, generate wrapper\n  return generateUnionWrapper(name, schemas, imports);\n}\n\n/**\n * Combine anyOf schemas - union type with multiple possible matches\n */\nfunction combineAnyOf(\n  name: string,\n  schemas: any[],\n  discriminator?: any,\n  context?: any\n): CombineResult {\n  // Similar to oneOf but allows multiple matches\n  // For Dart, we handle this similarly with sealed classes\n  return combineOneOf(name, schemas, discriminator, context);\n}\n\n/**\n * Check if this is a nullable pattern\n */\nfunction isNullablePattern(separator: Separator, schemas: any[]): boolean {\n  if ((separator === 'oneOf' || separator === 'anyOf') && schemas.length === 2) {\n    const hasNull = schemas.some(s => s.type === 'null');\n    const hasNonNull = schemas.some(s => s.type !== 'null');\n    return hasNull && hasNonNull;\n  }\n  return false;\n}\n\n/**\n * Handle nullable pattern - returns nullable type\n */\nfunction handleNullablePattern(schemas: any[]): CombineResult {\n  const nonNullSchema = schemas.find(s => s.type !== 'null');\n  if (!nonNullSchema) {\n    return { type: 'dynamic', imports: [] };\n  }\n  \n  const baseType = extractType(nonNullSchema);\n  const imports: string[] = [];\n  \n  if (!isPrimitiveType(baseType)) {\n    imports.push(`${toSnakeCase(baseType)}.dart`);\n  }\n  \n  return {\n    type: `${baseType}?`,\n    imports\n  };\n}\n\n/**\n * Extract discriminator from schema\n */\nfunction extractDiscriminator(schema: any): any {\n  if (schema.discriminator) {\n    if (typeof schema.discriminator === 'string') {\n      return { propertyName: schema.discriminator };\n    }\n    return schema.discriminator;\n  }\n  \n  // Check for discriminated union pattern in properties\n  if (schema.properties) {\n    for (const [propName, propSchema] of Object.entries(schema.properties)) {\n      const prop = propSchema as any;\n      if (prop.enum && Array.isArray(prop.enum)) {\n        // This might be a discriminator\n        for (const [otherPropName, otherPropSchema] of Object.entries(schema.properties)) {\n          const otherProp = otherPropSchema as any;\n          if (otherProp.oneOf || otherProp.anyOf) {\n            const unionSchemas = otherProp.oneOf || otherProp.anyOf;\n            \n            // Only consider it a discriminated union if:\n            // 1. There are multiple schemas in the union\n            // 2. Or there's a single schema that is a reference (not a primitive type)\n            if (unionSchemas.length > 1 || \n                (unionSchemas.length === 1 && unionSchemas[0].$ref)) {\n              return {\n                propertyName: propName,\n                values: prop.enum,\n                unionProperty: otherPropName,\n                unionSchemas: unionSchemas\n              };\n            }\n          }\n        }\n      }\n    }\n  }\n  \n  return null;\n}\n\n/**\n * Generate sealed class for discriminated union\n */\nfunction generateSealedClass(\n  name: string,\n  schemas: any[],\n  discriminator: any,\n  imports: string[]\n): CombineResult {\n  const templateManager = new TemplateManager();\n  const discriminatorProperty = discriminator.propertyName || discriminator.discriminatorProperty || 'itemType';\n  const discriminatorValues = discriminator.values || ['shift', 'time_off_request'];\n  const unionProperty = discriminator.unionProperty || 'item';\n  \n  // Handle schemas from discriminated union pattern\n  const unionSchemas = discriminator.unionSchemas || schemas;\n  \n  // Build union data for template\n  const unions = unionSchemas.map((schema: any, index: number) => {\n    const typeName = extractType(schema);\n    if (typeName && typeName !== 'dynamic') {\n      // Handle List types - extract the inner type for imports\n      if (typeName.startsWith('List<')) {\n        const innerType = typeName.match(/List<(.+)>/)?.[1];\n        if (innerType && !isPrimitiveType(innerType) && innerType !== 'Map<String, dynamic>') {\n          imports.push(`${toSnakeCase(innerType)}.f.dart`);\n        }\n      } else if (!isPrimitiveType(typeName)) {\n        imports.push(`${toSnakeCase(typeName)}.f.dart`);\n      }\n      \n      const discriminatorValue = discriminatorValues?.[index] || \n                                 getDiscriminatorValue(schema, discriminatorProperty, index);\n      const factoryName = toCamelCase(discriminatorValue);\n      \n      return {\n        factoryName,\n        pascalFactoryName: toPascalCase(factoryName),\n        discriminatorProperty,\n        discriminatorValue,\n        unionProperty,\n        type: typeName,\n        properties: [\n          {\n            name: unionProperty,\n            type: typeName,\n            required: true\n          }\n        ]\n      };\n    }\n    return null;\n  }).filter(Boolean);\n\n  // Remove duplicates from imports\n  const uniqueImports = [...new Set(imports.filter(imp => imp))];\n  \n  // Prepare template data\n  const templateData = {\n    className: name,\n    fileName: toSnakeCase(name),\n    imports: uniqueImports,\n    unions,\n    discriminatorProperty,\n    unionProperty,\n    customFromJson: false // Set to true if you want custom fromJson\n  };\n  \n  // Render using template\n  const definition = templateManager.render('freezed-union', templateData);\n\n  return {\n    type: name,\n    imports,\n    isSealed: true,\n    definition\n  };\n}\n\n/**\n * Generate union wrapper for non-discriminated unions\n */\nfunction generateUnionWrapper(\n  name: string,\n  schemas: any[],\n  imports: string[]\n): CombineResult {\n  const types: string[] = [];\n  \n  schemas.forEach(schema => {\n    const typeName = extractType(schema);\n    if (typeName && typeName !== 'dynamic') {\n      types.push(typeName);\n      if (!isPrimitiveType(typeName)) {\n        imports.push(`${toSnakeCase(typeName)}.f.dart`);\n      }\n    }\n  });\n\n  const fileName = toSnakeCase(name);\n  // Remove duplicates from imports\n  const uniqueImports = [...new Set(imports.filter(imp => imp))];\n  \n  const definition = `import 'package:freezed_annotation/freezed_annotation.dart';\n${uniqueImports.map(imp => `import '${imp}';`).join('\\n')}\n\npart '${fileName}.f.freezed.dart';\npart '${fileName}.f.g.dart';\n\n@freezed\nsealed class ${name} with _\\$${name} {\n  const ${name}._();\n  \n  const factory ${name}({\n    required dynamic value, // Can be: ${types.join(', ')}\n\n  }) = _${name};\n\n  factory ${name}.fromJson(Map<String, dynamic> json) {\n    // Try to parse as each type\n${generateTryParsing(types)}\n    \n    throw Exception('Could not parse ${name} from JSON');\n  }\n  \n  // Type-safe getters\n${generateTypeGetters(types)}\n}\n`;\n\n  return {\n    type: name,\n    imports,\n    definition\n  };\n}\n\n/**\n * Generate Freezed class definition using template\n */\nfunction generateFreezedClass(\n  name: string,\n  properties: Map<string, any>,\n  required: Set<string>,\n  imports: string[]\n): string {\n  const templateManager = new TemplateManager();\n  const fileName = toSnakeCase(name);\n  \n  // Convert properties map to array for template\n  const templateProperties = Array.from(properties.entries()).map(([propName, propSchema]) => {\n    const dartName = toCamelCase(propName);\n    let dartType = extractType(propSchema);\n    const isRequired = required.has(propName);\n    const nullable = !isRequired || propSchema.nullable;\n    \n    // Add imports for referenced types\n    if (propSchema.$ref) {\n      const refType = extractTypeFromRef(propSchema.$ref);\n      const importFile = `${toSnakeCase(refType)}.f.dart`;\n      if (!imports.includes(importFile)) {\n        imports.push(importFile);\n      }\n      dartType = refType;\n    }\n    \n    return {\n      name: dartName,\n      type: dartType + (nullable && !dartType.endsWith('?') ? '?' : ''),\n      required: isRequired,\n      nullable,\n      description: propSchema.description,\n      jsonKey: dartName !== propName ? propName : undefined,\n      defaultValue: propSchema.default ? formatDefaultValue(propSchema.default, dartType) : undefined\n    };\n  });\n\n  // Remove duplicates from imports\n  const uniqueImports = [...new Set(imports.filter(imp => imp))];\n  \n  // Check for special imports\n  const hasUint8List = templateProperties.some(p => p.type.includes('Uint8List'));\n  \n  // Prepare template data\n  const templateData = {\n    className: name,\n    fileName,\n    description: undefined,\n    hasUint8List,\n    additionalImports: uniqueImports.filter(imp => \n      !imp.includes('dart:') && \n      !imp.includes('freezed') && \n      !imp.includes('json_annotation')\n    ),\n    properties: templateProperties\n  };\n\n  // Render using the regular model template\n  return templateManager.render('freezed-model', templateData);\n}\n\n/**\n * Format default value for template\n */\nfunction formatDefaultValue(value: any, type: string): string | null {\n  if (value === undefined || value === null) {\n    return null;\n  }\n  \n  if (type === 'String') {\n    return `'${value}'`;\n  }\n  \n  if (type === 'int' || type === 'double') {\n    return String(value);\n  }\n  \n  if (type === 'bool') {\n    return String(value);\n  }\n  \n  if (type.startsWith('List')) {\n    return 'const []';\n  }\n  \n  if (type.startsWith('Map')) {\n    return 'const {}';\n  }\n  \n  return null;\n}\n\n// Helper functions\n\nfunction extractType(schema: any): string {\n  if (schema.$ref) {\n    return extractTypeFromRef(schema.$ref);\n  }\n  \n  switch (schema.type) {\n    case 'string':\n      return schema.format === 'date-time' ? 'DateTime' : 'String';\n    case 'integer':\n      return 'int';\n    case 'number':\n      return 'double';\n    case 'boolean':\n      return 'bool';\n    case 'array':\n      return schema.items ? `List<${extractType(schema.items)}>` : 'List<dynamic>';\n    case 'object':\n      return 'Map<String, dynamic>';\n    default:\n      return 'dynamic';\n  }\n}\n\nfunction extractTypeFromRef(ref: string): string {\n  const parts = ref.split('/');\n  return parts[parts.length - 1];\n}\n\nfunction isPrimitiveType(type: string): boolean {\n  return ['String', 'int', 'double', 'bool', 'dynamic', 'DateTime'].includes(type) ||\n         type.startsWith('List') || type.startsWith('Map');\n}\n\nfunction toSnakeCase(str: string): string {\n  return str\n    .replace(/([a-z])([A-Z])/g, '$1_$2')\n    .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n    .toLowerCase();\n}\n\nfunction toCamelCase(str: string): string {\n  if (str.includes('_')) {\n    const parts = str.split('_');\n    return parts[0] + parts.slice(1).map(p => \n      p.charAt(0).toUpperCase() + p.slice(1)\n    ).join('');\n  }\n  return str.charAt(0).toLowerCase() + str.slice(1);\n}\n\nfunction toPascalCase(str: string): string {\n  if (str.includes('_')) {\n    return str.split('_').map(word => \n      word.charAt(0).toUpperCase() + word.slice(1)\n    ).join('');\n  }\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction getDiscriminatorValue(schema: any, discriminatorProperty: string, index: number): string {\n  if (schema.properties && schema.properties[discriminatorProperty]) {\n    const prop = schema.properties[discriminatorProperty];\n    if (prop.const) return prop.const;\n    if (prop.enum && prop.enum.length > 0) return prop.enum[0];\n  }\n  \n  const typeName = extractType(schema);\n  return typeName ? toSnakeCase(typeName) : `type_${index}`;\n}\n\nfunction generateTryParsing(types: string[]): string {\n  return types.map(type => `    try {\n      return ${type}.fromJson(json);\n    } catch (_) {}`).join('\\n');\n}\n\nfunction generateTypeGetters(types: string[]): string {\n  return types.map(type => {\n    const _getterName = toCamelCase(type);\n    return `  ${type}? get as${type} => value is ${type} ? value as ${type} : null;`;\n  }).join('\\n');\n}","/**\n * Handles object schema processing - aligned with Orval structure\n * This file mirrors orval/packages/core/src/getters/object.ts\n */\n\nimport { OpenAPIV3 } from 'openapi-types';\nimport { combineSchemas } from './combine';\nimport { TypeMapper } from '../utils';\nimport { TemplateManager } from '../templates/template-manager';\nimport { DartProperty } from '../types';\n\nexport interface ObjectResult {\n  type: string;\n  imports: string[];\n  properties?: Map<string, PropertyInfo>;\n  required?: string[];\n  definition?: string;\n}\n\nexport interface PropertyInfo {\n  name: string;\n  type: string;\n  required: boolean;\n  nullable: boolean;\n  description?: string;\n  defaultValue?: any;\n  jsonKey?: string;\n}\n\n/**\n * Process object schema - mirrors Orval's getObject\n */\nexport function getObject(\n  item: OpenAPIV3.SchemaObject,\n  name: string,\n  context?: any\n): ObjectResult {\n  // Check for composition first (allOf, oneOf, anyOf)\n  if (item.allOf || item.oneOf || item.anyOf) {\n    const separator = item.allOf ? 'allOf' : item.oneOf ? 'oneOf' : 'anyOf';\n    \n    return combineSchemas(\n      item,\n      name,\n      separator,\n      context\n    );\n  }\n\n  // Handle regular object with properties\n  const importsSet: Set<string> = new Set();\n  const properties = new Map<string, PropertyInfo>();\n  const required = item.required || [];\n  \n  if (item.properties) {\n    Object.entries(item.properties).forEach(([propName, propSchema]) => {\n      const propInfo = processProperty(propName, propSchema, required.includes(propName), importsSet, context?.inlineTypes, context?.inlineEnums);\n      properties.set(propName, propInfo);\n    });\n  }\n\n  // Generate Freezed model\n  const imports = Array.from(importsSet);\n  const definition = generateObjectModel(name, properties, imports);\n\n  return {\n    type: TypeMapper.toDartClassName(name),\n    imports,\n    properties,\n    required,\n    definition\n  };\n}\n\n/**\n * Process a single property\n */\nfunction processProperty(\n  propName: string,\n  propSchema: any,\n  isRequired: boolean,\n  importsSet: Set<string>,\n  inlineTypes?: Map<string, string>,\n  inlineEnums?: Map<string, string>\n): PropertyInfo {\n  const dartName = TypeMapper.toDartPropertyName(propName);\n  let dartType = 'dynamic';\n\n  // Check if this property has an inline enum mapping\n  if (inlineEnums?.has(propName)) {\n    const enumTypeName = inlineEnums.get(propName)!;\n    dartType = TypeMapper.toDartClassName(enumTypeName);\n    importsSet.add(`${TypeMapper.toSnakeCase(enumTypeName)}.f.dart`);\n  }\n  // Check if this property has an inline type mapping\n  else if (inlineTypes?.has(propName)) {\n    const nestedTypeName = inlineTypes.get(propName)!;\n    dartType = TypeMapper.toDartClassName(nestedTypeName);\n    importsSet.add(`${TypeMapper.toSnakeCase(nestedTypeName)}.f.dart`);\n  }\n  // Handle $ref\n  else if (propSchema.$ref) {\n    const typeName = TypeMapper.extractTypeFromRef(propSchema.$ref);\n    dartType = TypeMapper.toDartClassName(typeName);\n    importsSet.add(`${TypeMapper.toSnakeCase(typeName)}.f.dart`);\n  }\n  // Handle allOf composition in property\n  else if (propSchema.allOf) {\n    // If allOf has a single $ref, treat it as a direct reference\n    if (propSchema.allOf.length === 1 && propSchema.allOf[0].$ref) {\n      const typeName = TypeMapper.extractTypeFromRef(propSchema.allOf[0].$ref);\n      dartType = TypeMapper.toDartClassName(typeName);\n      const importPath = `${TypeMapper.toSnakeCase(typeName)}.f.dart`;\n      importsSet.add(importPath);\n    } else {\n      // Complex allOf at property level - for now use dynamic\n      // TODO: Implement property-level allOf merging (root-level allOf is already working in model-generator.ts)\n      // \n      // Example that currently returns 'dynamic' but should merge schemas:\n      // UserProfile:\n      //   properties:\n      //     address:\n      //       allOf:\n      //         - $ref: '#/components/schemas/BaseAddress'  # has: street, city, country\n      //         - type: object\n      //           properties:\n      //             postalCode:\n      //               type: string\n      //             apartmentNumber:\n      //               type: integer\n      // \n      // Expected: address should be a type with all properties from BaseAddress + postalCode + apartmentNumber\n      // Current: address becomes 'dynamic'\n      dartType = 'dynamic';\n    }\n  }\n  // Handle composition in property\n  else if (propSchema.oneOf || propSchema.anyOf) {\n    // Check if this is a nullable pattern (oneOf with string and null)\n    const schemas = propSchema.oneOf || propSchema.anyOf;\n    \n    // Handle single type in oneOf/anyOf (common in poorly structured OpenAPI specs)\n    if (schemas.length === 1) {\n      const singleSchema = schemas[0];\n      if (singleSchema.$ref) {\n        const typeName = TypeMapper.extractTypeFromRef(singleSchema.$ref);\n        dartType = TypeMapper.toDartClassName(typeName);\n        importsSet.add(`${TypeMapper.toSnakeCase(typeName)}.f.dart`);\n      } else {\n        dartType = getScalarType(singleSchema);\n        // Add imports if needed for complex types\n        if (dartType.startsWith('List<') && !dartType.includes('Map<String, dynamic>')) {\n          const innerType = TypeMapper.extractInnerType(dartType);\n          if (!isPrimitiveType(innerType) && innerType !== 'Map<String, dynamic>') {\n            importsSet.add(`${TypeMapper.toSnakeCase(innerType)}.f.dart`);\n          }\n        }\n      }\n    }\n    else if (schemas.length === 2) {\n      const hasNull = schemas.some((s: any) => s.type === 'null');\n      const nonNullSchema = schemas.find((s: any) => s.type !== 'null');\n      \n      if (hasNull && nonNullSchema) {\n        // This is a nullable type pattern - type is inherently nullable\n        // Check if nonNullSchema is a reference\n        if (nonNullSchema.$ref) {\n          const typeName = TypeMapper.extractTypeFromRef(nonNullSchema.$ref);\n          dartType = TypeMapper.toDartClassName(typeName) + '?';\n          importsSet.add(`${TypeMapper.toSnakeCase(typeName)}.f.dart`);\n        } else {\n          dartType = getScalarType(nonNullSchema);\n          // For oneOf/anyOf with null, the type is already nullable\n          if (!dartType.endsWith('?')) {\n            dartType += '?';\n          }\n          // Add imports if needed\n          if (dartType.startsWith('List<') && !dartType.includes('Map<String, dynamic>')) {\n            const innerType = TypeMapper.extractInnerType(dartType);\n            if (!isPrimitiveType(innerType) && innerType !== 'Map<String, dynamic>') {\n              importsSet.add(`${TypeMapper.toSnakeCase(innerType)}.f.dart`);\n            }\n          }\n        }\n      } else {\n        // Complex union type - use dynamic for now\n        dartType = 'dynamic';\n      }\n    } else {\n      // Complex union type - use dynamic for now\n      dartType = 'dynamic';\n    }\n  }\n  // Handle basic types\n  else {\n    dartType = getScalarType(propSchema);\n    \n    // Add imports for complex types\n    if (dartType.startsWith('List<') && !dartType.includes('Map<String, dynamic>')) {\n      const innerType = TypeMapper.extractInnerType(dartType);\n      if (!isPrimitiveType(innerType) && innerType !== 'Map<String, dynamic>') {\n        importsSet.add(`${TypeMapper.toSnakeCase(innerType)}.f.dart`);\n      }\n    }\n    \n    // Check if this is a Map with reference types that need imports\n    if (propSchema.type === 'object' && propSchema.additionalProperties) {\n      extractReferencesFromSchema(propSchema.additionalProperties, importsSet);\n    }\n    \n    // Check if this is an array with reference types (not already handled above)\n    if (propSchema.type === 'array' && propSchema.items?.$ref && \n        !dartType.includes('Map<String, dynamic>')) {\n      const typeName = TypeMapper.extractTypeFromRef(propSchema.items.$ref);\n      // Only add if not already added (Set handles deduplication automatically)\n      const importPath = `${TypeMapper.toSnakeCase(typeName)}.f.dart`;\n      importsSet.add(importPath);\n    }\n  }\n  \n  // Handle nullable (unless already handled by oneOf/anyOf with null)\n  const isOneOfNullable = (propSchema.oneOf || propSchema.anyOf) && dartType.endsWith('?');\n  const nullable = !isRequired || propSchema.nullable === true || isOneOfNullable;\n  // Only add ? if not already nullable and should be nullable\n  if (nullable && !dartType.endsWith('?') && !isOneOfNullable) {\n    dartType += '?';\n  }\n  \n  return {\n    name: dartName,\n    type: dartType,\n    required: isRequired,\n    nullable,\n    description: propSchema.description,\n    defaultValue: propSchema.default,\n    // Always add jsonKey if names differ OR if propName contains $ (for raw string handling)\n    jsonKey: (dartName !== propName || propName.includes('$')) ? propName : undefined\n  };\n}\n\n/**\n * Generate Freezed model for object using template system\n */\nfunction generateObjectModel(\n  name: string,\n  properties: Map<string, PropertyInfo>,\n  imports: string[]\n): string {\n  // Create a TemplateManager instance to render the template\n  const templateManager = new TemplateManager();\n  \n  // Convert PropertyInfo map to DartProperty array\n  const dartProperties: DartProperty[] = Array.from(properties.values()).map(prop => ({\n    name: prop.name,\n    type: prop.type,\n    required: prop.required,\n    nullable: prop.nullable,\n    description: prop.description,\n    defaultValue: prop.defaultValue,\n    jsonKey: prop.jsonKey\n  }));\n  \n  const fileName = TypeMapper.toSnakeCase(name);\n  const className = TypeMapper.toDartClassName(name);\n  \n  // Check for special imports\n  const hasUint8List = dartProperties.some(p => p.type.includes('Uint8List'));\n  \n  // Prepare template data - matching what ModelGenerator.renderModel does\n  const templateData = {\n    className,\n    fileName,\n    description: undefined,\n    hasUint8List,\n    additionalImports: imports.filter(imp => \n      !imp.includes('dart:') && \n      !imp.includes('freezed') && \n      !imp.includes('json_annotation')\n    ),\n    properties: dartProperties.map(prop => ({\n      name: prop.name,\n      type: prop.type,\n      required: prop.required && !prop.defaultValue,\n      nullable: prop.nullable,\n      description: prop.description,\n      jsonKey: prop.jsonKey,\n      defaultValue: formatDefaultValueForTemplate(prop.defaultValue, prop.type)\n    }))\n  };\n  \n  // Use TemplateManager to render the freezed-model template\n  return templateManager.render('freezed-model', templateData);\n}\n\n/**\n * Format default value for template (matching ModelGenerator's formatDefaultValue)\n */\nfunction formatDefaultValueForTemplate(value: any, type: string): string | null {\n  if (value === undefined || value === null) {\n    return null;\n  }\n  \n  // Format based on type\n  if (type === 'String' || type === 'String?') {\n    return `'${value}'`;\n  }\n  \n  if (type === 'int' || type === 'double' || \n      type === 'int?' || type === 'double?') {\n    return String(value);\n  }\n  \n  if (type === 'bool' || type === 'bool?') {\n    return String(value);\n  }\n  \n  if (type.startsWith('List')) {\n    return 'const []';\n  }\n  \n  if (type.startsWith('Map')) {\n    return 'const {}';\n  }\n  \n  return null;\n}\n\n/**\n * Get scalar type from schema\n */\nfunction getScalarType(schema: any): string {\n  switch (schema.type) {\n    case 'string':\n      if (schema.format === 'date-time') return 'DateTime';\n      if (schema.format === 'date') return 'DateTime';\n      if (schema.format === 'binary') return 'Uint8List';\n      return 'String';\n    case 'integer':\n      return 'int';\n    case 'number':\n      return 'double';\n    case 'boolean':\n      return 'bool';\n    case 'array':\n      if (schema.items) {\n        // Check if items have a $ref\n        if (schema.items.$ref) {\n          const typeName = TypeMapper.extractTypeFromRef(schema.items.$ref);\n          return `List<${TypeMapper.toDartClassName(typeName)}>`;\n        }\n        // Recursively handle nested arrays\n        const itemType = getScalarType(schema.items);\n        return `List<${itemType}>`;\n      }\n      return 'List<dynamic>';\n    case 'object':\n      if (schema.additionalProperties) {\n        // Check if additionalProperties has a $ref\n        if (schema.additionalProperties.$ref) {\n          const typeName = TypeMapper.extractTypeFromRef(schema.additionalProperties.$ref);\n          return `Map<String, ${TypeMapper.toDartClassName(typeName)}>`;\n        }\n        // Check if additionalProperties is an array with $ref items\n        if (schema.additionalProperties.type === 'array' && schema.additionalProperties.items?.$ref) {\n          const typeName = TypeMapper.extractTypeFromRef(schema.additionalProperties.items.$ref);\n          return `Map<String, List<${TypeMapper.toDartClassName(typeName)}>>`;\n        }\n        const valueType = getScalarType(schema.additionalProperties);\n        return `Map<String, ${valueType}>`;\n      }\n      // Check if description hints at a more specific type\n      if (schema.description) {\n        const descLower = schema.description.toLowerCase();\n        \n        // Check if description suggests it's a boolean (common API spec mistake)\n        if (descLower.includes('if true') || descLower.includes('boolean') || \n            descLower.includes('true/false') || descLower.includes('true or false') ||\n            descLower.includes('whether')) {\n          return 'bool';\n        }\n        \n        // Skip status field inference - too ambiguous\n        \n        // Check for job/primary job (likely a complex object, but check if there's a JobDto)\n        if (descLower.includes('primary job') || descLower === 'primary job') {\n          // TODO: Could check if JobResponseDto exists and use that\n          return 'JobResponseDto';\n        }\n      }\n      // Check example to infer type\n      if (schema.example) {\n        // If example is a string that looks like a time/date/ID, this shouldn't be a Map\n        if (typeof schema.example === 'string') {\n          // Check for time pattern (HH:mm:ss)\n          if (/^\\d{2}:\\d{2}:\\d{2}$/.test(schema.example)) {\n            return 'String';\n          }\n          // Check for date/datetime pattern\n          if (/^\\d{4}-\\d{2}-\\d{2}/.test(schema.example)) {\n            return 'DateTime';\n          }\n          // Check for UUID pattern\n          if (/^[a-f0-9-]+$/.test(schema.example) && schema.example.includes('-')) {\n            return 'String';\n          }\n          // General string\n          return 'String';\n        }\n        // If example is a number\n        if (typeof schema.example === 'number') {\n          return Number.isInteger(schema.example) ? 'int' : 'double';\n        }\n      }\n      return 'Map<String, dynamic>';\n    default:\n      return 'dynamic';\n  }\n}\n\n/**\n * Format default value for Dart\n */\nfunction _formatDefaultValue(value: any, _type: string): string {\n  if (value === null) return 'null';\n  if (typeof value === 'string') return `'${value}'`;\n  if (typeof value === 'boolean') return value.toString();\n  if (typeof value === 'number') return value.toString();\n  if (Array.isArray(value)) return 'const []';\n  if (typeof value === 'object') return 'const {}';\n  return 'null';\n}\n\n// Helper functions\n\nfunction _extractTypeFromRef(ref: string): string {\n  const parts = ref.split('/');\n  return parts[parts.length - 1];\n}\n\n// TypeMapper helper not available, implementing locally\nfunction _extractInnerType(type: string): string {\n  const match = type.match(/^(?:List|Map)<(.+)>$/);\n  return match ? match[1] : type;\n}\n\nfunction isPrimitiveType(type: string): boolean {\n  // Remove nullable markers for checking\n  const cleanType = type.replace(/\\?$/, '');\n\n  // Basic primitive types\n  const basicPrimitives = ['String', 'int', 'double', 'bool', 'dynamic', 'DateTime', 'Uint8List'];\n  if (basicPrimitives.includes(cleanType)) {\n    return true;\n  }\n\n  // Map types (any Map<String, ...> is considered primitive for import purposes)\n  if (cleanType === 'Map<String, dynamic>' || cleanType.startsWith('Map<String, ')) {\n    return true;\n  }\n\n  // List types - recursively check if it's a list of primitives\n  if (cleanType.startsWith('List<')) {\n    // Extract inner type (e.g., List<List<int>> -> List<int>)\n    const innerMatch = cleanType.match(/^List<(.+)>$/);\n    if (innerMatch) {\n      const innerType = innerMatch[1];\n      // Recursively check if inner type is primitive\n      return isPrimitiveType(innerType);\n    }\n  }\n\n  return false;\n}\n\nfunction _toSnakeCase(str: string): string {\n  return str\n    .replace(/([a-z])([A-Z])/g, '$1_$2')\n    .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n    .toLowerCase();\n}\n\nfunction _toCamelCase(str: string): string {\n  // Handle kebab-case and snake_case\n  return str\n    .replace(/[-_](.)/g, (_, char) => char.toUpperCase())\n    .replace(/^(.)/, (_, char) => char.toLowerCase());\n}\n\nfunction _toPascalCase(str: string): string {\n  // Handle kebab-case and snake_case\n  return str\n    .replace(/[-_](.)/g, (_, char) => char.toUpperCase())\n    .replace(/^(.)/, (_, char) => char.toUpperCase());\n}\n\n/**\n * Recursively extract references from schema for imports\n */\nfunction extractReferencesFromSchema(schema: any, importsSet: Set<string>): void {\n  if (!schema) return;\n\n  // Handle direct $ref\n  if (schema.$ref) {\n    const typeName = TypeMapper.extractTypeFromRef(schema.$ref);\n    const importPath = `${TypeMapper.toSnakeCase(typeName)}.f.dart`;\n    importsSet.add(importPath);\n  }\n\n  // Handle arrays with $ref items\n  if (schema.type === 'array' && schema.items) {\n    extractReferencesFromSchema(schema.items, importsSet);\n  }\n\n  // Handle objects with additionalProperties\n  if (schema.type === 'object' && schema.additionalProperties) {\n    extractReferencesFromSchema(schema.additionalProperties, importsSet);\n  }\n\n  // Handle composition (allOf, oneOf, anyOf)\n  ['allOf', 'oneOf', 'anyOf'].forEach(key => {\n    if (schema[key] && Array.isArray(schema[key])) {\n      schema[key].forEach((subSchema: any) => {\n        extractReferencesFromSchema(subSchema, importsSet);\n      });\n    }\n  });\n}","/**\n * Generate Dart model files using Freezed\n */\n\nimport { OpenAPIObject } from '../types';\nimport { DartGeneratorOptions, GeneratedFile } from '../types';\nimport { ModelGenerator } from './model-generator';\nimport { OpenAPIParser } from '../parser/openapi-parser';\nimport { ReferenceResolver } from '../resolvers';\nimport { combineSchemas } from '../getters/combine';\nimport { getObject } from '../getters/object';\nimport { hasComposition, hasDiscriminatedUnion, isEnum, isEmpty } from '../utils/assertion';\nimport { TypeMapper } from '../utils';\n\n// Helper functions\n// Use TypeMapper.toSnakeCase for consistent V2Meta/V2Dto handling\nconst toSnakeCase = (str: string): string => TypeMapper.toSnakeCase(str);\n\nfunction extractDiscriminatorInfo(schema: any): any {\n  if (!schema.properties) return null;\n\n  let discriminatorProperty: string | undefined;\n  let unionProperty: string | undefined;\n  let discriminatorValues: string[] | undefined;\n  let unionSchemas: any[] | undefined;\n  let compositionType: 'oneOf' | 'anyOf' = 'oneOf';\n\n  for (const [propName, propSchema] of Object.entries(schema.properties)) {\n    const prop = propSchema as any;\n    \n    if (prop.enum && Array.isArray(prop.enum)) {\n      discriminatorProperty = propName;\n      discriminatorValues = prop.enum;\n    }\n    \n    if (prop.oneOf) {\n      unionProperty = propName;\n      unionSchemas = prop.oneOf;\n      compositionType = 'oneOf';\n    } else if (prop.anyOf) {\n      unionProperty = propName;\n      unionSchemas = prop.anyOf;\n      compositionType = 'anyOf';\n    }\n  }\n\n  if (discriminatorProperty && unionProperty && unionSchemas) {\n    return {\n      propertyName: discriminatorProperty,\n      discriminatorProperty,\n      values: discriminatorValues,\n      unionSchemas,\n      compositionType\n    };\n  }\n\n  return null;\n}\n\n\n/**\n * Extract and generate nested classes for inline object properties\n */\nfunction extractInlineObjects(\n  parentName: string,\n  schema: any,\n  schemas: Record<string, any>,\n  files: GeneratedFile[],\n  refResolver: ReferenceResolver,\n  processedTypes: Set<string> = new Set()\n): Map<string, string> {\n  const inlineTypes = new Map<string, string>();\n  \n  if (!schema.properties || processedTypes.has(parentName)) return inlineTypes;\n  processedTypes.add(parentName);\n  \n  Object.entries(schema.properties).forEach(([propName, propSchema]: [string, any]) => {\n    // Check if this is an inline object (has properties but no $ref)\n    if (propSchema.type === 'object' && propSchema.properties && !propSchema.$ref) {\n      // Generate a name for the nested type\n      const nestedTypeName = `${parentName}${propName.charAt(0).toUpperCase()}${propName.slice(1)}`;\n      \n      // Add to schemas so it gets processed\n      schemas[nestedTypeName] = propSchema;\n      \n      // Map the property name to the nested type name\n      inlineTypes.set(propName, nestedTypeName);\n      \n      // Recursively extract nested inline objects\n      extractInlineObjects(nestedTypeName, propSchema, schemas, files, refResolver, processedTypes);\n    }\n  });\n  \n  return inlineTypes;\n}\n\n/**\n * Extract and generate enum types for inline enum properties\n */\nfunction extractInlineEnums(\n  parentName: string,\n  schema: any,\n  schemas: Record<string, any>,\n  processedEnums: Set<string> = new Set()\n): Map<string, string> {\n  const inlineEnums = new Map<string, string>();\n\n  if (processedEnums.has(parentName)) return inlineEnums;\n  processedEnums.add(parentName);\n\n  // Handle allOf composition\n  if (schema.allOf && Array.isArray(schema.allOf)) {\n    schema.allOf.forEach((subSchema: any) => {\n      if (subSchema.properties) {\n        Object.entries(subSchema.properties).forEach(([propName, propSchema]: [string, any]) => {\n          // Check if this is an inline enum (has enum array but no $ref)\n          if (propSchema.enum && Array.isArray(propSchema.enum) && !propSchema.$ref) {\n            // Generate a name for the enum type\n            const enumTypeName = `${parentName}${propName.charAt(0).toUpperCase()}${propName.slice(1)}Enum`;\n\n            // Add to schemas as an enum schema\n            schemas[enumTypeName] = {\n              type: 'string',\n              enum: propSchema.enum,\n              description: propSchema.description || `Enum for ${propName}`\n            };\n\n            // Map the property name to the enum type name\n            inlineEnums.set(propName, enumTypeName);\n          }\n        });\n      }\n    });\n  }\n\n  // Handle direct properties\n  if (schema.properties) {\n    Object.entries(schema.properties).forEach(([propName, propSchema]: [string, any]) => {\n      // Check if this is an inline enum (has enum array but no $ref)\n      if (propSchema.enum && Array.isArray(propSchema.enum) && !propSchema.$ref) {\n        // Generate a name for the enum type\n        const enumTypeName = `${parentName}${propName.charAt(0).toUpperCase()}${propName.slice(1)}Enum`;\n\n        // Add to schemas as an enum schema\n        schemas[enumTypeName] = {\n          type: 'string',\n          enum: propSchema.enum,\n          description: propSchema.description || `Enum for ${propName}`\n        };\n\n        // Map the property name to the enum type name\n        inlineEnums.set(propName, enumTypeName);\n      }\n    });\n  }\n\n  return inlineEnums;\n}\n\n/**\n * Extract inline enums from path parameters (query, header, path, etc.)\n */\nfunction extractParameterInlineEnums(\n  spec: OpenAPIObject,\n  schemas: Record<string, any>\n): void {\n  if (!spec.paths) return;\n\n  Object.entries(spec.paths).forEach(([pathKey, pathItem]) => {\n    if (!pathItem) return;\n\n    // Process path-level parameters\n    if (pathItem.parameters) {\n      processParametersForEnums(pathItem.parameters, pathKey, schemas);\n    }\n\n    // Process operation-level parameters\n    const operations = ['get', 'post', 'put', 'patch', 'delete', 'options', 'head', 'trace'];\n    operations.forEach(method => {\n      const operation = (pathItem as any)[method];\n      if (operation && operation.parameters) {\n        processParametersForEnums(operation.parameters, `${pathKey}_${method}`, schemas);\n      }\n    });\n  });\n}\n\n/**\n * Process a list of parameters and extract inline enums\n *\n * Always generates context-specific enum names to avoid conflicts\n * Format: {Method}{PathContext}{ParamName}Enum\n * Example: GetV1LaborTargetsTypeEnum (for GET /v1/labor-targets with type parameter)\n */\nfunction processParametersForEnums(\n  parameters: any[],\n  contextName: string,\n  schemas: Record<string, any>\n): void {\n  parameters.forEach((param) => {\n    // Skip references - they should already be in components/parameters\n    if ('$ref' in param) return;\n\n    const paramObj = param as any;\n    if (!paramObj.schema) return;\n\n    const schema = paramObj.schema;\n\n    // Generate unique enum name for this parameter\n    const contextParts = contextName.split('_');\n    const method = contextParts.pop() || ''; // Extract method (last part)\n    const pathContext = contextParts\n      .join('_')\n      .split('/')\n      .filter(p => p)\n      .join('_')\n      .replace(/-/g, '_');\n\n    const methodPrefix = TypeMapper.toDartClassName(method);\n    const pathPart = TypeMapper.toDartClassName(pathContext);\n    const paramName = TypeMapper.toDartClassName(paramObj.name);\n\n    // Format: {Method}{PathContext}{ParamName}Enum\n    const uniqueEnumTypeName = `${methodPrefix}${pathPart}${paramName}Enum`;\n\n    // Check if this parameter has an inline enum (not a reference)\n    if (schema.enum && Array.isArray(schema.enum) && !('$ref' in schema)) {\n      // Check if this exact enum already exists\n      if (schemas[uniqueEnumTypeName]) {\n        const existing = schemas[uniqueEnumTypeName];\n        if (JSON.stringify(existing.enum) === JSON.stringify(schema.enum)) {\n          // Exact same enum already exists, skip\n          return;\n        }\n        // Different enum values but same name+context - this shouldn't happen\n        // but if it does, log a warning\n        console.warn(`Enum name conflict: ${uniqueEnumTypeName} with different values`);\n        return;\n      }\n\n      // Add to schemas with context-specific name\n      schemas[uniqueEnumTypeName] = {\n        type: schema.type || 'string',\n        enum: schema.enum,\n        description: paramObj.description || `Enum for ${paramObj.name} parameter`\n      };\n    }\n\n    // Check if this parameter is an array with enum items\n    // Example: { type: 'array', items: { type: 'string', enum: ['started', 'ended'] } }\n    if (schema.type === 'array' && schema.items &&\n        schema.items.enum && Array.isArray(schema.items.enum) &&\n        !('$ref' in schema.items)) {\n      // Check if this exact enum already exists\n      if (schemas[uniqueEnumTypeName]) {\n        const existing = schemas[uniqueEnumTypeName];\n        if (JSON.stringify(existing.enum) === JSON.stringify(schema.items.enum)) {\n          // Exact same enum already exists, skip\n          return;\n        }\n        // Different enum values but same name+context - this shouldn't happen\n        // but if it does, log a warning\n        console.warn(`Enum name conflict: ${uniqueEnumTypeName} with different values`);\n        return;\n      }\n\n      // Add to schemas with context-specific name (for the items enum)\n      schemas[uniqueEnumTypeName] = {\n        type: schema.items.type || 'string',\n        enum: schema.items.enum,\n        description: paramObj.description || `Enum for ${paramObj.name} parameter items`\n      };\n    }\n  });\n}\n\nexport async function generateModels(\n  spec: OpenAPIObject,\n  _options: DartGeneratorOptions\n): Promise<GeneratedFile[]> {\n  const files: GeneratedFile[] = [];\n  const generator = new ModelGenerator();\n  \n  // Parse spec to get schemas - don't dereference yet to preserve $refs\n  const parser = new OpenAPIParser();\n  await parser.parseWithoutDereference(spec);\n  const schemas = parser.getSchemas();\n  \n  // Create ReferenceResolver with the full spec\n  const refResolver = new ReferenceResolver(spec);\n  generator.setReferenceResolver(refResolver);\n\n  // Extract inline enums from path parameters BEFORE processing schemas\n  // This ensures parameter enums are added to schemas and processed like any other enum\n  extractParameterInlineEnums(spec, schemas);\n\n  // First pass: extract inline objects and enums and add them as schemas\n  const inlineObjectMappings = new Map<string, Map<string, string>>();\n  const inlineEnumMappings = new Map<string, Map<string, string>>();\n  const schemasToProcess = [...Object.entries(schemas)];\n  const processedSchemas = new Set<string>();\n  const processedEnums = new Set<string>();\n  \n  // Keep processing until no new schemas are added\n  while (schemasToProcess.length > 0) {\n    const [name, schema] = schemasToProcess.shift()!;\n    if (processedSchemas.has(name)) continue;\n    processedSchemas.add(name);\n    \n    // Extract inline objects\n    const inlineTypes = extractInlineObjects(name, schema, schemas, files, refResolver);\n    if (inlineTypes.size > 0) {\n      inlineObjectMappings.set(name, inlineTypes);\n      // Add newly created schemas to the processing queue\n      inlineTypes.forEach((typeName) => {\n        if (schemas[typeName] && !processedSchemas.has(typeName)) {\n          schemasToProcess.push([typeName, schemas[typeName]]);\n        }\n      });\n    }\n    \n    // Extract inline enums\n    const inlineEnums = extractInlineEnums(name, schema, schemas, processedEnums);\n    if (inlineEnums.size > 0) {\n      inlineEnumMappings.set(name, inlineEnums);\n      // Add newly created enum schemas to the processing queue\n      inlineEnums.forEach((enumName) => {\n        if (schemas[enumName] && !processedSchemas.has(enumName)) {\n          schemasToProcess.push([enumName, schemas[enumName]]);\n        }\n      });\n    }\n  }\n  \n  // Generate model for each schema\n  Object.entries(schemas).forEach(([name, schema]) => {\n    // Skip completely empty schemas (no type, no properties, no composition)\n    if (isEmpty(schema)) {\n      console.log(`Skipping empty model: ${name}`);\n      return;\n    }\n\n    // Note: Empty objects (type: \"object\" with no properties) are now handled by ModelGenerator\n    // which generates typedef = Map<String, dynamic> for them\n\n    // Check if it's an enum\n    if (isEnum(schema)) {\n      const enumFile = generator.generateEnum(\n        name,\n        schema.enum as string[],\n        schema.description\n      );\n      files.push(enumFile);\n      return;\n    }\n\n    // Skip root-level array types\n    if (schema.type === 'array') {\n      // These should be handled as List<Model> in the usage context\n      return;\n    }\n\n    // Check for discriminated union pattern (property with enum + property with oneOf/anyOf)\n    if (hasDiscriminatedUnion(schema)) {\n      // Extract discriminator info\n      const discriminatorInfo = extractDiscriminatorInfo(schema);\n      if (discriminatorInfo) {\n        const result = combineSchemas(\n          { [discriminatorInfo.compositionType]: discriminatorInfo.unionSchemas },\n          name,\n          discriminatorInfo.compositionType,\n          { discriminator: discriminatorInfo }\n        );\n        \n        if (result.definition) {\n          files.push({\n            path: `models/${toSnakeCase(name)}.f.dart`,\n            content: result.definition\n          });\n          return;\n        }\n      }\n    }\n\n    // Check for top-level composition (oneOf/anyOf/allOf)\n    if (hasComposition(schema)) {\n      const compositionType = schema.allOf ? 'allOf' : schema.oneOf ? 'oneOf' : 'anyOf';\n      const result = combineSchemas(schema, name, compositionType, { schemas, refResolver });\n      \n      if (result.definition) {\n        files.push({\n          path: `models/${toSnakeCase(name)}.f.dart`,\n          content: result.definition\n        });\n        return;\n      }\n    }\n\n    // Handle regular object schemas (including empty objects)\n    // First check if it's an empty object - ModelGenerator will handle it\n    const isEmptyObject = schema.type === 'object' &&\n                         (!schema.properties || Object.keys(schema.properties).length === 0) &&\n                         !schema.allOf && !schema.oneOf && !schema.anyOf;\n\n    if (isEmptyObject) {\n      // Empty object - let ModelGenerator create a typedef\n      const file = generator.generateModel(name, schema);\n      files.push(file);\n    } else {\n      // Regular object with properties\n      const inlineTypes = inlineObjectMappings.get(name);\n      const inlineEnums = inlineEnumMappings.get(name);\n      const objectResult = getObject(schema, name, { schemas, refResolver, inlineTypes, inlineEnums });\n      if (objectResult.definition) {\n        files.push({\n          path: `models/${toSnakeCase(name)}.f.dart`,\n          content: objectResult.definition\n        });\n      }\n    }\n  });\n  \n  // Generate index file that exports all models\n  const indexContent = generateIndexFile(files);\n  files.push({\n    path: 'models/index.dart',\n    content: indexContent\n  });\n  \n  return files;\n}\n\n/**\n * Generate index file that exports all models\n */\nfunction generateIndexFile(files: GeneratedFile[]): string {\n  const exports = files\n    .filter(f => f.path !== 'models/index.dart')\n    .map(f => {\n      const fileName = f.path.replace('models/', '').replace('enums/', '').replace('.dart', '');\n      return `export '${fileName}.dart';`;\n    })\n    .join('\\n');\n\n  // Always try to export params/index.dart and headers/index.dart\n  // The actual Dart files will only exist if params/headers were generated\n  // Dart will handle the missing imports at compile time\n  let indexContent = `// Generated index file for models\n${exports}`;\n\n  // For now, we don't export params and headers since they're generated separately\n  // and we can't know at this point if they'll exist\n  // This will be fixed in a future version with better orchestration\n\n  return indexContent + '\\n';\n}","/**\n * Generate Dio API client\n */\n\nimport { OpenAPIObject } from '../types';\nimport { DartGeneratorOptions, GeneratedFile } from '../types';\nimport { TemplateManager } from '../templates/template-manager';\nimport { OpenAPIParser } from '../parser/openapi-parser';\n\nexport async function generateClient(\n  spec: OpenAPIObject,\n  options: DartGeneratorOptions\n): Promise<GeneratedFile[]> {\n  const files: GeneratedFile[] = [];\n  const templateManager = new TemplateManager();\n  \n  // Parse spec for info\n  const parser = new OpenAPIParser();\n  await parser.parse(spec);\n  \n  // Generate base API client\n  const clientContent = generateDioClient(parser, options, templateManager);\n  \n  files.push({\n    path: 'api_client.dart',\n    content: clientContent\n  });\n  \n  return files;\n}\n\nfunction generateDioClient(\n  parser: OpenAPIParser,\n  options: DartGeneratorOptions,\n  templateManager: TemplateManager\n): string {\n  const info = parser.getInfo();\n  const baseUrl = options.output.override?.dio?.baseUrl || parser.getBaseUrl();\n  const hasAuth = parser.hasAuthentication();\n  const securitySchemes = parser.getSecuritySchemes();\n  \n  // Check for Bearer auth\n  const hasBearerAuth = Object.values(securitySchemes).some(\n    scheme => scheme.type === 'http' && scheme.scheme === 'bearer'\n  );\n  \n  const templateData = {\n    apiTitle: info.title,\n    apiVersion: info.version || '1.0',\n    apiDescription: info.description || '',\n    baseUrl: baseUrl,\n    defaultBaseUrl: baseUrl || 'https://api.example.com',\n    hasAuth: hasAuth || hasBearerAuth,\n    hasInterceptors: (options.output.override?.dio?.interceptors?.length ?? 0) > 0,\n    hasErrorInterceptor: true,\n    enableLogging: 'const bool.fromEnvironment(\\'DEBUG\\', defaultValue: false)', // Dart debug flag\n    connectTimeout: 30,\n    receiveTimeout: 30,\n    defaultHeaders: {\n      'X-API-Version': info.version,\n    }\n  };\n  \n  return templateManager.render('dio-client', templateData);\n}\n\nfunction _generateApiConfig(\n  parser: OpenAPIParser,\n  options: DartGeneratorOptions\n): string {\n  const info = parser.getInfo();\n  const baseUrl = options.output.override?.dio?.baseUrl || parser.getBaseUrl();\n  \n  return `/// API Configuration\nclass ApiConfig {\n  static const String apiVersion = '${info.version}';\n  static const String apiTitle = '${info.title}';\n  ${info.description ? `static const String apiDescription = '${info.description.replace(/'/g, \"\\\\'\")}';` : ''}\n  \n  static const String defaultBaseUrl = '${baseUrl}';\n  \n  // Environment-specific base URLs\n  static String get baseUrl {\n    // You can implement environment detection here\n    // For example, using Flutter's kDebugMode or environment variables\n    return defaultBaseUrl;\n  }\n  \n  // API endpoints\n  static const String basePath = '/api/v1';\n  \n  // Timeouts\n  static const Duration connectTimeout = Duration(seconds: 30);\n  static const Duration receiveTimeout = Duration(seconds: 30);\n  \n  // Headers\n  static Map<String, String> get defaultHeaders => {\n    'X-API-Version': apiVersion,\n    'Accept': 'application/json',\n    'Content-Type': 'application/json',\n  };\n}\n`;\n}","/**\n * Generate Dart API endpoint methods\n */\n\nimport type { OpenAPIV3 } from 'openapi-types';\nimport { TypeMapper } from '../utils';\nimport { ReferenceResolver } from '../resolvers';\n\nexport interface EndpointMethod {\n  methodName: string;\n  httpMethod: string;\n  path: string;\n  description?: string;\n  summary?: string;\n  deprecated?: boolean;\n  deprecationMessage?: string;\n  hasParameters: boolean;\n  parameters: MethodParameter[];\n  pathParams: PathParameter[];\n  queryParams: QueryParameter[];\n  headers: HeaderParameter[];\n  hasPathParams: boolean;\n  hasQueryParams: boolean;\n  hasHeaders: boolean;\n  hasBody: boolean;\n  bodyParam?: string;\n  bodyType?: string;\n  returnType: string;\n  responseDataType?: string;      // Non-nullable data type (for use with fromJson)\n  returnsVoid: boolean;\n  returnsNullable: boolean;       // Whether return type is nullable (ends with ?)\n  returnsList: boolean;\n  returnsModel: boolean;\n  returnsPrimitive: boolean;\n  isGenericResponse: boolean;\n  itemType?: string;\n  hasErrorHandling: boolean;\n  errorResponses: ErrorResponse[];\n  contentType?: string;\n  responseType?: string;\n  hasCancelToken: boolean;\n  hasProgressCallback: boolean;\n  hasSpecialOptions: boolean;\n  queryParamsModelName?: string;  // Name of the query params model class\n  headersModelName?: string;       // Name of the headers model class\n  needsParamsModel: boolean;       // Whether to generate params model\n  needsHeadersModel: boolean;      // Whether to generate headers model\n  hasComplexNestedQueryParams?: boolean; // Whether query params contain complex nested types\n}\n\nexport interface MethodParameter {\n  name: string;\n  type: string;\n  required: boolean;\n  description?: string;\n}\n\nexport interface PathParameter {\n  name: string;\n  dartName: string;\n  originalName: string;\n}\n\nexport interface QueryParameter {\n  dartName: string;\n  originalName: string;\n  required: boolean;\n  type?: string;\n  description?: string;\n}\n\nexport interface HeaderParameter {\n  dartName: string;\n  originalName: string;\n  paramName?: string; // Optional for backward compatibility\n  required: boolean;\n  type?: string;\n  description?: string;\n}\n\nexport interface ErrorResponse {\n  statusCode: number;\n  description: string;\n  hasErrorModel: boolean;\n  errorModel?: string;\n}\n\nexport class EndpointGenerator {\n  private schemas: Record<string, any> = {};\n  private originalSpec: OpenAPIV3.Document | null = null;\n  private referenceResolver: ReferenceResolver | null = null;\n  private methodNaming: 'operationId' | 'methodPath' = 'operationId';\n  \n  /**\n   * Set schemas for reference resolution\n   */\n  setSchemas(schemas: Record<string, any>): void {\n    this.schemas = schemas;\n  }\n  \n  /**\n   * Set original spec for reference resolution\n   */\n  setOriginalSpec(spec: OpenAPIV3.Document): void {\n    this.originalSpec = spec;\n    this.referenceResolver = new ReferenceResolver(spec);\n  }\n  \n  /**\n   * Set method naming strategy\n   */\n  setMethodNaming(naming: 'operationId' | 'methodPath'): void {\n    this.methodNaming = naming;\n  }\n  \n  \n  /**\n   * Generate method data for a GET endpoint\n   */\n  generateGetMethod(\n    operationId: string,\n    path: string,\n    operation: OpenAPIV3.OperationObject,\n    pathItem?: OpenAPIV3.PathItemObject\n  ): EndpointMethod {\n    const methodName = this.getMethodName(operationId, 'get', path);\n    const parameters = this.extractParameters(operation, pathItem, path, 'get');\n    \n    // Always try to get original response from spec to preserve $ref\n    const response = this.getOriginalResponse('get', path) || this.getSuccessResponse(operation);\n    const returnType = this.getReturnType(response);\n    \n    // Generate model names for params and headers if needed\n    const needsParamsModel = parameters.query.length > 0;\n    const needsHeadersModel = parameters.header.length > 0 && \n                             parameters.header.some(h => h.originalName !== 'Authorization'); // Skip if only auth header\n    \n    const queryParamsModelName = needsParamsModel ? \n      TypeMapper.toDartClassName(methodName + 'Params') : undefined;\n    const headersModelName = needsHeadersModel ? \n      TypeMapper.toDartClassName(methodName + 'Headers') : undefined;\n    \n    // Check if query params contain complex types or arrays\n    const hasComplexNestedQueryParams = needsParamsModel && parameters.query.some(param => {\n      const type = param.type || 'String';\n      // Check for arrays - arrays need special query parameter formatting\n      if (type.startsWith('List<')) {\n        return true;\n      }\n      // Check for non-primitive types\n      if (!this.isBuiltInType(type)) {\n        return true;\n      }\n      // Check for nullable non-primitive types\n      if (type.endsWith('?')) {\n        const baseType = type.slice(0, -1);\n        // Check if nullable type is an array\n        if (baseType.startsWith('List<')) {\n          return true;\n        }\n        if (!this.isBuiltInType(baseType)) {\n          return true;\n        }\n      }\n      return false;\n    });\n    \n    return {\n      methodName,\n      httpMethod: 'get',\n      path: this.normalizePath(path),\n      description: operation.description,\n      summary: operation.summary,\n      deprecated: operation.deprecated,\n      deprecationMessage: operation.deprecated ? 'This endpoint is deprecated' : undefined,\n      hasParameters: parameters.all.length > 0,\n      parameters: parameters.all,\n      pathParams: parameters.path,\n      queryParams: parameters.query,\n      headers: parameters.header,\n      hasPathParams: parameters.path.length > 0,\n      hasQueryParams: parameters.query.length > 0,\n      hasHeaders: parameters.header.length > 0,\n      hasBody: false,\n      returnType: returnType.type,\n      responseDataType: returnType.dataType,\n      returnsVoid: returnType.isVoid,\n      returnsNullable: returnType.isNullable,\n      returnsList: returnType.isList,\n      returnsModel: returnType.isModel,\n      returnsPrimitive: returnType.isPrimitive,\n      isGenericResponse: returnType.isModel || returnType.isList,\n      itemType: returnType.itemType,\n      hasErrorHandling: false,\n      errorResponses: [],\n      hasCancelToken: false,\n      hasProgressCallback: false,\n      hasSpecialOptions: false,\n      queryParamsModelName,\n      headersModelName,\n      needsParamsModel,\n      needsHeadersModel,\n      hasComplexNestedQueryParams,\n    };\n  }\n\n  /**\n   * Generate method data for POST/PUT/PATCH endpoint\n   */\n  generateMutationMethod(\n    method: string,\n    operationId: string,\n    path: string,\n    operation: OpenAPIV3.OperationObject,\n    pathItem?: OpenAPIV3.PathItemObject\n  ): EndpointMethod {\n    const methodName = this.getMethodName(operationId, method, path);\n    const parameters = this.extractParameters(operation, pathItem, path, method);\n    const requestBody = this.extractRequestBody(operation);\n    \n    // Try to get original response from spec to preserve $ref\n    let response = this.getOriginalResponse(method, path);\n    if (!response) {\n      response = this.getSuccessResponse(operation);\n    }\n    const returnType = this.getReturnType(response);\n    \n    // Combine all parameters\n    const allParams = [...parameters.all];\n    if (requestBody) {\n      allParams.push(requestBody.parameter);\n    }\n    \n    // Generate model names for params and headers if needed\n    const needsParamsModel = parameters.query.length > 0;\n    const needsHeadersModel = parameters.header.length > 0 && \n                             parameters.header.some(h => h.originalName !== 'Authorization');\n    \n    const queryParamsModelName = needsParamsModel ? \n      TypeMapper.toDartClassName(methodName + 'Params') : undefined;\n    const headersModelName = needsHeadersModel ? \n      TypeMapper.toDartClassName(methodName + 'Headers') : undefined;\n    \n    // Check if query params contain complex types or arrays\n    const hasComplexNestedQueryParams = needsParamsModel && parameters.query.some(param => {\n      const type = param.type || 'String';\n      // Check for arrays - arrays need special query parameter formatting\n      if (type.startsWith('List<')) {\n        return true;\n      }\n      // Check for non-primitive types\n      if (!this.isBuiltInType(type)) {\n        return true;\n      }\n      // Check for nullable non-primitive types\n      if (type.endsWith('?')) {\n        const baseType = type.slice(0, -1);\n        // Check if nullable type is an array\n        if (baseType.startsWith('List<')) {\n          return true;\n        }\n        if (!this.isBuiltInType(baseType)) {\n          return true;\n        }\n      }\n      return false;\n    });\n    \n    return {\n      methodName,\n      httpMethod: method.toLowerCase(),\n      path: this.normalizePath(path),\n      description: operation.description,\n      summary: operation.summary,\n      deprecated: operation.deprecated,\n      deprecationMessage: operation.deprecated ? 'This endpoint is deprecated' : undefined,\n      hasParameters: allParams.length > 0,\n      parameters: allParams,\n      pathParams: parameters.path,\n      queryParams: parameters.query,\n      headers: parameters.header,\n      hasPathParams: parameters.path.length > 0,\n      hasQueryParams: parameters.query.length > 0,\n      hasHeaders: parameters.header.length > 0,\n      hasBody: !!requestBody,\n      bodyParam: requestBody?.paramName,\n      bodyType: requestBody?.parameter.type,\n      returnType: returnType.type,\n      responseDataType: returnType.dataType,\n      returnsVoid: returnType.isVoid,\n      returnsNullable: returnType.isNullable,\n      returnsList: returnType.isList,\n      returnsModel: returnType.isModel,\n      returnsPrimitive: returnType.isPrimitive,\n      isGenericResponse: returnType.isModel || returnType.isList,\n      itemType: returnType.itemType,\n      hasErrorHandling: false,\n      errorResponses: [],\n      contentType: requestBody?.contentType,\n      hasCancelToken: false,\n      hasProgressCallback: method === 'post' && !!requestBody?.isFormData,\n      hasSpecialOptions: !!requestBody?.contentType,\n      queryParamsModelName,\n      headersModelName,\n      needsParamsModel,\n      needsHeadersModel,\n      hasComplexNestedQueryParams,\n    };\n  }\n\n  /**\n   * Check if a type is a built-in Dart type\n   */\n  private isBuiltInType(type: string): boolean {\n    const builtInTypes = [\n      'String', 'int', 'double', 'bool', 'num', 'dynamic', \n      'DateTime', 'Map', 'List', 'void', 'Uint8List'\n    ];\n    // Check base type (without generics)\n    const baseType = type.replace(/<.*>/, '').replace(/\\?$/, '');\n    // Note: 'Object' is intentionally not included here\n    // Object type query params need special handling since they can contain anything\n    return builtInTypes.includes(baseType);\n  }\n\n  /**\n   * Generate method data for DELETE endpoint\n   */\n  generateDeleteMethod(\n    operationId: string,\n    path: string,\n    operation: OpenAPIV3.OperationObject,\n    pathItem?: OpenAPIV3.PathItemObject\n  ): EndpointMethod {\n    const method = this.generateMutationMethod('delete', operationId, path, operation, pathItem);\n    // DELETE typically returns void\n    if (!operation.responses?.['200'] && !operation.responses?.['201']) {\n      method.returnType = 'void';\n      method.returnsVoid = true;\n      method.returnsModel = false;\n      method.returnsList = false;\n    }\n    return method;\n  }\n\n  /**\n   * Extract parameters from operation\n   */\n  private extractParameters(\n    operation: OpenAPIV3.OperationObject,\n    pathItem: OpenAPIV3.PathItemObject | undefined,\n    endpointPath: string,\n    httpMethod: string\n  ): {\n    all: MethodParameter[];\n    path: PathParameter[];\n    query: QueryParameter[];\n    header: HeaderParameter[];\n  } {\n    const all: MethodParameter[] = [];\n    const path: PathParameter[] = [];\n    const query: QueryParameter[] = [];\n    const header: HeaderParameter[] = [];\n\n    // Combine operation and path-level parameters\n    const parameters = [\n      ...(pathItem?.parameters || []),\n      ...(operation.parameters || [])\n    ];\n\n    parameters.forEach(param => {\n      let p: OpenAPIV3.ParameterObject;\n\n      if ('$ref' in param) {\n        // Resolve the reference\n        const ref = (param as OpenAPIV3.ReferenceObject).$ref;\n        const resolved = this.resolveParameterRef(ref);\n        if (!resolved) {\n          console.warn(`Failed to resolve parameter reference: ${ref}`);\n          return;\n        }\n        p = resolved;\n      } else {\n        p = param as OpenAPIV3.ParameterObject;\n      }\n      // Use camelCase for all parameter names\n      const dartName = TypeMapper.toCamelCase(p.name);\n      const dartType = this.getParameterType(p, endpointPath, httpMethod);\n      \n      const methodParam: MethodParameter = {\n        name: dartName,\n        type: dartType,\n        required: p.required || false,\n        description: p.description\n      };\n      \n      all.push(methodParam);\n      \n      switch (p.in) {\n        case 'path':\n          path.push({\n            name: p.name,\n            dartName,\n            originalName: `{${p.name}}`  // Include curly braces for path params\n          });\n          break;\n        case 'query':\n          query.push({\n            dartName,\n            originalName: p.name,\n            required: p.required || false,\n            type: dartType,\n            description: p.description\n          });\n          break;\n        case 'header':\n          header.push({\n            dartName,\n            originalName: p.name,\n            required: p.required || false,\n            type: dartType,\n            description: p.description\n          });\n          break;\n      }\n    });\n    \n    return { all, path, query, header };\n  }\n\n  /**\n   * Extract request body information\n   */\n  private extractRequestBody(operation: OpenAPIV3.OperationObject): {\n    parameter: MethodParameter;\n    paramName: string;\n    contentType?: string;\n    isFormData: boolean;\n  } | null {\n    if (!operation.requestBody) {\n      return null;\n    }\n    \n    const requestBody = operation.requestBody as OpenAPIV3.RequestBodyObject;\n    const content = requestBody.content;\n    \n    if (!content) {\n      return null;\n    }\n    \n    // Determine content type and schema\n    let contentType = 'application/json';\n    let schema: OpenAPIV3.SchemaObject | undefined;\n    let isFormData = false;\n    \n    if (content['application/json']) {\n      schema = content['application/json'].schema as OpenAPIV3.SchemaObject;\n    } else if (content['multipart/form-data']) {\n      contentType = 'multipart/form-data';\n      schema = content['multipart/form-data'].schema as OpenAPIV3.SchemaObject;\n      isFormData = true;\n    } else if (content['application/x-www-form-urlencoded']) {\n      contentType = 'application/x-www-form-urlencoded';\n      schema = content['application/x-www-form-urlencoded'].schema as OpenAPIV3.SchemaObject;\n      isFormData = true;\n    }\n    \n    if (!schema) {\n      return null;\n    }\n    \n    const dartType = TypeMapper.mapType(schema);\n    const paramName = isFormData ? 'formData' : 'body';\n    \n    return {\n      parameter: {\n        name: paramName,\n        type: isFormData ? 'FormData' : dartType,\n        required: requestBody.required || false,\n        description: requestBody.description\n      },\n      paramName,\n      contentType: contentType !== 'application/json' ? contentType : undefined,\n      isFormData\n    };\n  }\n\n  /**\n   * Get successful response schema\n   */\n  private getSuccessResponse(operation: OpenAPIV3.OperationObject): OpenAPIV3.ResponseObject | null {\n    const responses = operation.responses;\n    if (!responses) return null;\n    \n    // Check for success status codes\n    const successCodes = ['200', '201', '202', '204'];\n    for (const code of successCodes) {\n      if (responses[code]) {\n        const response = responses[code];\n        if ('$ref' in response) continue;\n        return response as OpenAPIV3.ResponseObject;\n      }\n    }\n    \n    // Check for default response\n    if (responses.default && !('$ref' in responses.default)) {\n      return responses.default as OpenAPIV3.ResponseObject;\n    }\n    \n    return null;\n  }\n\n  /**\n   * Determine return type from response\n   */\n  private getReturnType(response: OpenAPIV3.ResponseObject | null): {\n    type: string;\n    dataType?: string;\n    isVoid: boolean;\n    isNullable: boolean;\n    isList: boolean;\n    isModel: boolean;\n    isPrimitive: boolean;\n    itemType?: string;\n  } {\n    if (!response || !response.content) {\n      return {\n        type: 'void',\n        isVoid: true,\n        isNullable: false,\n        isList: false,\n        isModel: false,\n        isPrimitive: false\n      };\n    }\n\n    const content = response.content['application/json'];\n    if (!content || !content.schema) {\n      return {\n        type: 'dynamic',\n        isVoid: false,\n        isNullable: false,\n        isList: false,\n        isModel: false,\n        isPrimitive: false\n      };\n    }\n\n    const schema = content.schema;\n\n    // Cast to non-reference schema\n    const schemaObj = schema as OpenAPIV3.SchemaObject;\n\n    // Check if schema is nullable (handles both nullable: true and oneOf patterns)\n    const isNullable = schemaObj.nullable === true || TypeMapper.isNullable(schemaObj);\n\n    // Check for oneOf nullable pattern FIRST (before other checks)\n    if (schemaObj.oneOf && TypeMapper.isNullableOneOf(schemaObj)) {\n      const nonNullSchema = TypeMapper.getNonNullTypeFromOneOf(schemaObj);\n      // Recursively process the non-null schema\n      const baseResult = this.getReturnType({\n        ...response,\n        content: {\n          'application/json': {\n            schema: nonNullSchema\n          }\n        }\n      });\n      // Add nullable marker to the type and set isNullable flag\n      return {\n        ...baseResult,\n        type: baseResult.type.endsWith('?') ? baseResult.type : `${baseResult.type}?`,\n        isNullable: true\n      };\n    }\n\n    // Check for anyOf nullable pattern\n    if (schemaObj.anyOf && Array.isArray(schemaObj.anyOf) && schemaObj.anyOf.length === 2) {\n      const hasNull = schemaObj.anyOf.some((s: any) => s && typeof s === 'object' && s.type === 'null');\n      const nonNullSchema = schemaObj.anyOf.find((s: any) => s && typeof s === 'object' && s.type !== 'null');\n\n      if (hasNull && nonNullSchema) {\n        const baseResult = this.getReturnType({\n          ...response,\n          content: {\n            'application/json': {\n              schema: nonNullSchema as any\n            }\n          }\n        });\n        return {\n          ...baseResult,\n          type: baseResult.type.endsWith('?') ? baseResult.type : `${baseResult.type}?`,\n          isNullable: true\n        };\n      }\n    }\n\n    // Check for single-element oneOf (extract the single schema)\n    if (schemaObj.oneOf && Array.isArray(schemaObj.oneOf) && schemaObj.oneOf.length === 1) {\n      const singleSchema = schemaObj.oneOf[0];\n      const baseResult = this.getReturnType({\n        ...response,\n        content: {\n          'application/json': {\n            schema: singleSchema as any\n          }\n        }\n      });\n      // If the original schema was marked as nullable (e.g., from 204 response),\n      // preserve the nullable flag\n      if (isNullable && !baseResult.type.endsWith('?')) {\n        return {\n          ...baseResult,\n          type: `${baseResult.type}?`,\n          isNullable: true\n        };\n      }\n      return baseResult;\n    }\n\n    // Use ReferenceResolver if available\n    if (this.referenceResolver && ReferenceResolver.isReference(schema)) {\n      const modelName = ReferenceResolver.extractModelNameFromRef(schema.$ref);\n\n      // Check if the referenced schema is an empty object (which becomes a typedef)\n      // Empty objects are typedefs to Map<String, dynamic>, not Freezed models\n      const referencedSchema = this.referenceResolver.resolveReference(schema.$ref);\n      const isEmptyObject = referencedSchema &&\n                           referencedSchema.type === 'object' &&\n                           (!referencedSchema.properties || Object.keys(referencedSchema.properties).length === 0) &&\n                           !referencedSchema.allOf && !referencedSchema.oneOf && !referencedSchema.anyOf;\n\n      if (isEmptyObject) {\n        // This is a typedef to Map<String, dynamic>, not a model with fromJson\n        const dartType = 'Map<String, dynamic>';\n        const type = isNullable ? `${dartType}?` : dartType;\n        return {\n          type,\n          dataType: undefined,\n          isVoid: false,\n          isNullable,\n          isList: false,\n          isModel: false,  // Not a Freezed model, just a typedef\n          isPrimitive: false\n        };\n      }\n\n      // Normal model reference\n      const type = isNullable ? `${modelName}?` : modelName;\n      return {\n        type,\n        dataType: modelName, // Always use non-nullable for fromJson\n        isVoid: false,\n        isNullable,\n        isList: false,\n        isModel: true,\n        isPrimitive: false\n      };\n    }\n\n    // Legacy fallback: Check if schema has a reference to a model\n    if (schema && '$ref' in schema) {\n      const modelName = this.getModelNameFromRef((schema as any).$ref);\n\n      // Check if the referenced schema is an empty object (without ReferenceResolver)\n      const refName = (schema as any).$ref.split('/').pop();\n      const referencedSchema = this.schemas[refName];\n      const isEmptyObject = referencedSchema &&\n                           referencedSchema.type === 'object' &&\n                           (!referencedSchema.properties || Object.keys(referencedSchema.properties).length === 0) &&\n                           !referencedSchema.allOf && !referencedSchema.oneOf && !referencedSchema.anyOf;\n\n      if (isEmptyObject) {\n        // This is a typedef to Map<String, dynamic>, not a model with fromJson\n        const dartType = 'Map<String, dynamic>';\n        const type = isNullable ? `${dartType}?` : dartType;\n        return {\n          type,\n          dataType: undefined,\n          isVoid: false,\n          isNullable,\n          isList: false,\n          isModel: false,  // Not a Freezed model, just a typedef\n          isPrimitive: false\n        };\n      }\n\n      // Normal model reference\n      const type = isNullable ? `${modelName}?` : modelName;\n      return {\n        type,\n        dataType: modelName, // Always use non-nullable for fromJson\n        isVoid: false,\n        isNullable,\n        isList: false,\n        isModel: true,\n        isPrimitive: false\n      };\n    }\n\n    // Check if it's a list\n    const isList = schemaObj.type === 'array';\n    let itemType: string | undefined;\n    let dataType: string | undefined;\n\n    if (isList && schemaObj.items) {\n      const items = schemaObj.items as OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject;\n      if ('$ref' in items) {\n        itemType = this.getModelNameFromRef(items.$ref);\n        dataType = `List<${itemType}>`;\n      } else {\n        // Try to match item schema with a model\n        const itemSchema = items as OpenAPIV3.SchemaObject;\n        if (itemSchema.type === 'object' && itemSchema.properties) {\n          // Try to find matching schema\n          const matchedModelName = this.findMatchingSchemaName(itemSchema);\n          if (matchedModelName) {\n            itemType = matchedModelName;\n          } else {\n            itemType = TypeMapper.mapType(itemSchema);\n          }\n        } else {\n          itemType = TypeMapper.mapType(itemSchema);\n        }\n        dataType = `List<${itemType}>`;\n      }\n\n      const type = isNullable ? `${dataType}?` : dataType;\n      return {\n        type,\n        dataType,  // Non-nullable data type for processing\n        isVoid: false,\n        isNullable,\n        isList: true,\n        isModel: false,\n        isPrimitive: false,\n        itemType\n      };\n    }\n\n    // Check if it's a model (custom class)\n    const isModel = !isList &&\n                    schemaObj.type === 'object' &&\n                    schemaObj.properties !== undefined;\n\n    if (isModel) {\n      // Try to find matching model in schemas\n      let modelName: string | null = null;\n\n      if (schemaObj.title) {\n        modelName = TypeMapper.toDartClassName(schemaObj.title);\n      } else if (this.schemas && schemaObj.required && schemaObj.properties) {\n        // Look for a matching schema by comparing properties and required fields\n        modelName = this.findMatchingSchemaName(schemaObj);\n      }\n\n      if (modelName) {\n        const type = isNullable ? `${modelName}?` : modelName;\n        return {\n          type,\n          dataType: modelName,  // Always use non-nullable for fromJson\n          isVoid: false,\n          isNullable,\n          isList: false,\n          isModel: true,\n          isPrimitive: false\n        };\n      }\n    }\n\n    // For plain objects without title, check if it's a Map\n    if (schemaObj.type === 'object' && !schemaObj.properties) {\n      // This is likely a Map<String, dynamic>\n      const dartType = 'Map<String, dynamic>';\n      const type = isNullable ? `${dartType}?` : dartType;\n      return {\n        type,\n        dataType: undefined,\n        isVoid: false,\n        isNullable,\n        isList: false,\n        isModel: false,\n        isPrimitive: false\n      };\n    }\n\n    const dartType = TypeMapper.mapType(schemaObj);\n    const type = isNullable ? `${dartType}?` : dartType;\n\n    // Check if it's a primitive\n    const primitiveTypes = ['String', 'int', 'double', 'bool', 'num'];\n    const isPrimitive = primitiveTypes.includes(dartType);\n\n    return {\n      type,\n      dataType: isModel || isList ? dartType : undefined,\n      isVoid: false,\n      isNullable,\n      isList,\n      isModel,\n      isPrimitive,\n      itemType\n    };\n  }\n  \n  /**\n   * Extract model name from $ref\n   */\n  private getModelNameFromRef(ref: string): string {\n    // Extract name from reference like \"#/components/schemas/ModelName\"\n    const parts = ref.split('/');\n    const name = parts[parts.length - 1];\n    return TypeMapper.toDartClassName(name);\n  }\n\n  /**\n   * Find matching schema name by comparing properties and required fields\n   * This helps identify schemas that have been dereferenced by the OpenAPI parser\n   */\n  private findMatchingSchemaName(schema: OpenAPIV3.SchemaObject): string | null {\n    if (!this.schemas) {\n      return null;\n    }\n\n    const schemaProps = Object.keys(schema.properties || {}).sort();\n    const schemaRequired = (schema.required || []).sort();\n\n    // Search through all schemas to find a match\n    for (const [schemaName, schemaObj] of Object.entries(this.schemas)) {\n      if (schemaObj && typeof schemaObj === 'object' && schemaObj.type === 'object') {\n        const candidateProps = Object.keys(schemaObj.properties || {}).sort();\n        const candidateRequired = (schemaObj.required || []).sort();\n\n        // Compare properties and required fields\n        if (\n          JSON.stringify(schemaProps) === JSON.stringify(candidateProps) &&\n          JSON.stringify(schemaRequired) === JSON.stringify(candidateRequired)\n        ) {\n          return TypeMapper.toDartClassName(schemaName);\n        }\n      }\n    }\n\n    return null;\n  }\n  \n  /**\n   * Get original response from spec to preserve $ref\n   * Also checks if 204 No Content is present\n   */\n  private getOriginalResponse(method: string, path: string): OpenAPIV3.ResponseObject | null {\n    if (!this.originalSpec) {\n      return null;\n    }\n\n    const pathItem = this.originalSpec.paths?.[path];\n    if (!pathItem) {\n      return null;\n    }\n\n    const operation = (pathItem as any)[method] as OpenAPIV3.OperationObject;\n    if (!operation || !operation.responses) {\n      return null;\n    }\n\n    // Check if 204 No Content is defined\n    const has204Response = operation.responses['204'] !== undefined;\n\n    // Check for success status codes (prioritize 200, 201, 202 over 204)\n    const successCodes = ['200', '201', '202'];\n    for (const code of successCodes) {\n      if (operation.responses[code]) {\n        const response = operation.responses[code];\n        if ('$ref' in response) continue;\n\n        // If 204 is also present, mark the response as nullable\n        const responseObj = response as OpenAPIV3.ResponseObject;\n        if (has204Response && responseObj.content) {\n          // Add nullable marker to the schema\n          const content = responseObj.content['application/json'];\n          if (content && content.schema) {\n            const schema = content.schema as any;\n            schema.nullable = true;\n          }\n        }\n\n        return responseObj;\n      }\n    }\n\n    // If only 204 is present, return void response\n    if (has204Response) {\n      return operation.responses['204'] as OpenAPIV3.ResponseObject;\n    }\n\n    return null;\n  }\n\n  /**\n   * Get parameter type\n   *\n   * IMPORTANT: This must match the enum naming logic in models.ts processParametersForEnums()\n   * Format: {Method}{PathContext}{ParamName}Enum\n   */\n  private getParameterType(\n    param: OpenAPIV3.ParameterObject,\n    endpointPath: string,\n    httpMethod: string\n  ): string {\n    if (!param.schema) {\n      return 'String';\n    }\n\n    const schema = param.schema as OpenAPIV3.SchemaObject;\n\n    // Generate enum type name (used for both direct enums and array item enums)\n    const pathContext = endpointPath\n      .split('/')\n      .filter(p => p)\n      .join('_')\n      .replace(/-/g, '_');\n\n    const methodPrefix = TypeMapper.toDartClassName(httpMethod);\n    const pathPart = TypeMapper.toDartClassName(pathContext);\n    const paramName = TypeMapper.toDartClassName(param.name);\n\n    // Format: {Method}{PathContext}{ParamName}Enum\n    const uniqueEnumTypeName = `${methodPrefix}${pathPart}${paramName}Enum`;\n\n    // Check if this parameter has an inline enum\n    // If so, return the enum type name that was generated in models.ts\n    if (schema.enum && Array.isArray(schema.enum) && !('$ref' in schema)) {\n      return uniqueEnumTypeName;\n    }\n\n    // Check if this parameter is an array with enum items\n    // Example: { type: 'array', items: { type: 'string', enum: ['started', 'ended'] } }\n    if (schema.type === 'array' && schema.items &&\n        (schema.items as any).enum && Array.isArray((schema.items as any).enum) &&\n        !('$ref' in schema.items)) {\n      // Return List<EnumType> for array parameters with enum items\n      return `List<${uniqueEnumTypeName}>`;\n    }\n\n    return TypeMapper.mapType(schema);\n  }\n\n  /**\n   * Generate method name from operation\n   */\n  private getMethodName(operationId: string | undefined, method: string, path: string): string {\n    // Use methodPath naming if specified or if operationId is not available\n    if (this.methodNaming === 'methodPath' || !operationId) {\n      // Generate name from method and path, including path parameters\n      const pathParts = path\n        .split('/')\n        .filter(p => p) // Remove empty parts\n        .map(p => {\n          if (p.startsWith('{') && p.endsWith('}')) {\n            // Include path parameter name directly: {id} -> Id, {locationId} -> LocationId\n            const paramName = p.slice(1, -1); // Remove { and }\n            return TypeMapper.toDartClassName(paramName);\n          }\n          return TypeMapper.toDartClassName(p);\n        });\n      \n      // Create method name like: getV1RolesId, putV1LocationsLocationIdSettings, etc.\n      const methodName = method + pathParts.join('');\n      return TypeMapper.toDartPropertyName(methodName);\n    }\n    \n    // Use operationId if available and methodNaming is 'operationId'\n    return TypeMapper.toDartPropertyName(operationId);\n  }\n\n  /**\n   * Normalize path for Dart string\n   */\n  private normalizePath(path: string): string {\n    // Convert {param} to $param for Dart string interpolation\n    return path;\n  }\n  \n  /**\n   * Resolve a parameter reference\n   */\n  private resolveParameterRef(ref: string): OpenAPIV3.ParameterObject | null {\n    // Expected format: #/components/parameters/ParameterName\n    if (!ref.startsWith('#/components/parameters/')) {\n      console.warn(`Unexpected parameter reference format: ${ref}`);\n      return null;\n    }\n    \n    const paramName = ref.split('/').pop();\n    if (!paramName) {\n      return null;\n    }\n    \n    // Try to get from original spec\n    if (this.originalSpec?.components?.parameters) {\n      const param = this.originalSpec.components.parameters[paramName];\n      if (param && !('$ref' in param)) {\n        return param as OpenAPIV3.ParameterObject;\n      }\n    }\n    \n    return null;\n  }\n}","/**\n * Generate Dart parameter models using Freezed\n */\n\nimport { GeneratedFile } from '../types';\nimport { TypeMapper } from '../utils';\nimport { TemplateManager } from '../templates/template-manager';\nimport { QueryParameter, HeaderParameter } from './endpoint-generator';\n\nexport interface ParameterModel {\n  className: string;\n  fileName: string;\n  description?: string;\n  properties: ParameterProperty[];\n  imports?: string[];\n  hasComplexNestedQueryParams?: boolean;\n}\n\nexport interface ParameterProperty {\n  name: string;\n  type: string;\n  required: boolean;\n  description?: string;\n  jsonKey?: string; // Original name if different from dart name\n}\n\nexport class ParamsGenerator {\n  private templateManager: TemplateManager;\n\n  constructor() {\n    this.templateManager = new TemplateManager();\n  }\n\n  /**\n   * Generate a query parameters model\n   */\n  generateQueryParamsModel(\n    methodName: string,\n    queryParams: QueryParameter[]\n  ): GeneratedFile | null {\n    if (queryParams.length === 0) {\n      return null;\n    }\n\n    const className = TypeMapper.toDartClassName(methodName + 'Params');\n    const fileName = TypeMapper.toSnakeCase(className);\n    \n    // Collect imports from parameter types\n    const imports = new Set<string>();\n    \n    const properties: ParameterProperty[] = queryParams.map(param => {\n      // Check if the dartName was escaped (ends with underscore due to keyword)\n      const needsJsonKey = param.dartName !== param.originalName ||\n                           param.dartName.endsWith('_');\n\n      // Check if the type needs an import (custom model types)\n      const paramType = param.type || 'String';\n\n      // Extract base type from List<Type>?, Map<K,V>?, etc.\n      let baseType = this.extractBaseType(paramType);\n\n      // For types like List<EnumType>?, we need to extract the inner type again\n      // extractBaseType('List<EnumType>?') returns 'List<EnumType>'\n      // extractBaseType('List<EnumType>') returns 'EnumType'\n      if (baseType.startsWith('List<') || baseType.startsWith('Map<')) {\n        baseType = this.extractBaseType(baseType);\n      }\n\n      // Check if the base type needs an import\n      // Object is a built-in Dart type, don't import it\n      if (baseType !== 'Object' && !this.isBuiltInType(baseType)) {\n        const fileName = TypeMapper.toSnakeCase(baseType) + '.f.dart';\n        imports.add(fileName);\n      }\n\n      return {\n        name: param.dartName,\n        type: paramType,\n        required: param.required,\n        description: param.description,\n        jsonKey: needsJsonKey ? param.originalName : undefined\n      };\n    });\n\n    // Check if any property is a complex type that needs special query param handling\n    const hasComplexNestedQueryParams = properties.some(prop => {\n      const type = prop.type;\n      // Check for arrays - arrays need special query parameter formatting\n      if (type.startsWith('List<')) {\n        return true;\n      }\n      // Check for model types (not built-in types)\n      if (!this.isBuiltInType(type) && !type.endsWith('?')) {\n        return true;\n      }\n      // Check for nullable model types\n      if (type.endsWith('?')) {\n        const baseType = type.slice(0, -1);\n        // Check if nullable type is an array\n        if (baseType.startsWith('List<')) {\n          return true;\n        }\n        if (!this.isBuiltInType(baseType)) {\n          return true;\n        }\n      }\n      return false;\n    });\n\n    const model: ParameterModel = {\n      className,\n      fileName,\n      description: `Query parameters for ${methodName}`,\n      properties,\n      imports: Array.from(imports),\n      hasComplexNestedQueryParams\n    };\n\n    const content = this.renderParamsModel(model);\n    \n    return {\n      path: `models/params/${fileName}.f.dart`,\n      content\n    };\n  }\n\n  /**\n   * Generate a headers model\n   */\n  generateHeadersModel(\n    methodName: string,\n    headers: HeaderParameter[]\n  ): GeneratedFile | null {\n    // Don't filter headers - if they're defined in OpenAPI, they should be included\n    // The OpenAPI spec author knows what headers are needed\n    if (headers.length === 0) {\n      return null;\n    }\n\n    const className = TypeMapper.toDartClassName(methodName + 'Headers');\n    const fileName = TypeMapper.toSnakeCase(className);\n    \n    // Collect imports from header types\n    const imports = new Set<string>();\n    \n    const properties: ParameterProperty[] = headers.map(header => {\n      const headerType = header.type || 'String';\n      \n      // Check if the type needs an import\n      if (!this.isBuiltInType(headerType)) {\n        const baseType = this.extractBaseType(headerType);\n        if (!this.isBuiltInType(baseType)) {\n          const fileName = TypeMapper.toSnakeCase(baseType) + '.f.dart';\n          imports.add(fileName);\n        }\n      }\n      \n      return {\n        name: header.dartName,\n        type: headerType,\n        required: header.required,\n        description: header.description,\n        jsonKey: header.dartName !== header.originalName ? header.originalName : undefined\n      };\n    });\n\n    const model: ParameterModel = {\n      className,\n      fileName,\n      description: `Headers for ${methodName}`,\n      properties,\n      imports: Array.from(imports)\n    };\n\n    const content = this.renderHeadersModel(model);\n    \n    return {\n      path: `models/headers/${fileName}.f.dart`,\n      content\n    };\n  }\n\n  /**\n   * Render a parameter model using the template\n   */\n  private renderParamsModel(model: ParameterModel): string {\n    // Use the template manager to get access to the dartDoc helper\n    const template = this.templateManager.loadTemplateSync('freezed-params-model');\n    return template(model);\n  }\n  \n  /**\n   * Render a headers model using the template\n   */\n  private renderHeadersModel(model: ParameterModel): string {\n    // Use the template manager to get access to the dartDoc helper\n    const template = this.templateManager.loadTemplateSync('freezed-headers-model');\n    return template(model);\n  }\n  \n  /**\n   * Check if a type is a built-in Dart type\n   */\n  private isBuiltInType(type: string): boolean {\n    const builtInTypes = [\n      'String', 'int', 'double', 'bool', 'num', 'dynamic', 'void',\n      'DateTime', 'Uint8List', 'Map', 'List', 'Set'\n      // Note: 'Object' is intentionally not included here\n      // Object type query params need special handling since they can contain anything\n    ];\n    \n    // Check if it's a generic type like List<X> or Map<X,Y>\n    if (type.includes('<')) {\n      const baseType = type.substring(0, type.indexOf('<'));\n      return builtInTypes.includes(baseType);\n    }\n    \n    return builtInTypes.includes(type);\n  }\n  \n  /**\n   * Extract base type from generic types like List<Type> or Map<K,V>\n   */\n  private extractBaseType(type: string): string {\n    // Handle List<Type>\n    const listMatch = type.match(/^List<(.+)>$/);\n    if (listMatch) {\n      return listMatch[1];\n    }\n    \n    // Handle Map<K,V> - we don't need to import for Map\n    if (type.startsWith('Map<')) {\n      return 'Map';\n    }\n    \n    // Handle nullable types\n    if (type.endsWith('?')) {\n      return type.slice(0, -1);\n    }\n    \n    return type;\n  }\n}","/**\n * Unified Headers Generator\n * Handles generation of header models for API endpoints with support for:\n * - Custom header configurations\n * - Smart matching strategies\n * - Header consolidation\n * - Reporting and analytics\n */\n\nimport { GeneratedFile } from '../types';\nimport { TypeMapper } from '../utils';\nimport { TemplateManager } from '../templates/template-manager';\nimport { HeaderParameter } from './endpoint-generator';\n\n/**\n * Header definition configuration\n */\nexport interface HeaderDefinition {\n  fields: string[] | { [fieldName: string]: any };\n  required?: string[];\n  description?: string;\n}\n\n/**\n * Headers generator configuration\n */\nexport interface HeadersConfig {\n  // Define reusable header classes\n  definitions?: { [className: string]: HeaderDefinition };\n\n  // Matching strategy for finding appropriate header classes\n  matchStrategy?: 'exact' | 'subset' | 'fuzzy';\n\n  // Enable custom matching\n  customMatch?: boolean;\n\n  // Enable automatic consolidation\n  customConsolidate?: boolean;\n\n  // Minimum number of endpoints to trigger consolidation\n  consolidationThreshold?: number;\n}\n\n/**\n * Internal model representation\n */\ninterface HeaderModel {\n  className: string;\n  fileName: string;\n  headers: HeaderParameter[];\n  isShared: boolean;\n  usageCount?: number;\n  endpoints?: string[];\n}\n\n/**\n * Unified Headers Generator\n */\nexport class HeadersGenerator {\n  private templateManager: TemplateManager;\n  private config: HeadersConfig;\n  private headerModels: Map<string, HeaderModel> = new Map();\n  private matchCache: Map<string, string | null> = new Map();\n  private endpointToModelMap: Map<string, string> = new Map();\n\n  constructor(config?: HeadersConfig) {\n    this.templateManager = new TemplateManager();\n    this.config = config || {};\n  }\n\n  /**\n   * Get or create header model name for an endpoint\n   */\n  getHeaderModelName(methodName: string, headers: HeaderParameter[]): string | null {\n    if (headers.length === 0) {\n      return null;\n    }\n\n    // Try to find matching configured header class\n    if (this.config.customMatch && this.config.definitions) {\n      const matchedClass = this.findMatchingHeaderClass(methodName, headers);\n      if (matchedClass) {\n        this.registerHeaderUsage(matchedClass, methodName, headers, true);\n        return matchedClass;\n      }\n    }\n\n    // Create unique model name\n    const uniqueClassName = TypeMapper.toDartClassName(methodName + 'Headers');\n    this.registerHeaderUsage(uniqueClassName, methodName, headers, false);\n\n    return uniqueClassName;\n  }\n\n  /**\n   * Generate header model file for a specific endpoint\n   */\n  generateHeaderModel(methodName: string, headers: HeaderParameter[]): GeneratedFile | null {\n    if (headers.length === 0) {\n      return null;\n    }\n\n    const modelName = this.getHeaderModelName(methodName, headers);\n    if (!modelName) {\n      return null;\n    }\n\n    const model = this.headerModels.get(modelName);\n    if (!model) {\n      return null;\n    }\n\n    // Don't generate file for shared models here, they are generated in generateAllHeaderFiles\n    if (model.isShared) {\n      return null;\n    }\n\n    // Generate file for unique models\n    return this.createHeaderFile(model);\n  }\n\n  /**\n   * Generate all header files (both shared and unique)\n   */\n  generateAllHeaderFiles(): GeneratedFile[] {\n    const files: GeneratedFile[] = [];\n\n    // Apply consolidation if enabled\n    if (this.config.customConsolidate) {\n      this.consolidateHeaders();\n    }\n\n    // Generate files for all models\n    for (const model of this.headerModels.values()) {\n      const file = this.createHeaderFile(model);\n      if (file) {\n        files.push(file);\n      }\n    }\n\n    return files;\n  }\n\n  /**\n   * Generate configured header files from definitions\n   */\n  generateConfiguredHeaderFiles(): GeneratedFile[] {\n    if (!this.config.definitions) {\n      return [];\n    }\n\n    const files: GeneratedFile[] = [];\n    const generatedSignatures = new Set<string>();\n\n    for (const [className, definition] of Object.entries(this.config.definitions)) {\n      const fields = this.parseHeaderFields(definition);\n\n      // Create signature to avoid duplicates\n      const signature = this.createFieldSignature(fields);\n\n      if (!generatedSignatures.has(signature)) {\n        generatedSignatures.add(signature);\n\n        const headersClassName = className.endsWith('Headers') ? className : className + 'Headers';\n        const fileName = TypeMapper.toSnakeCase(className);\n\n        const properties = fields.map(f => ({\n          name: TypeMapper.toCamelCase(f.name.replace(/-/g, '_')),\n          type: f.type || 'String',\n          required: f.required,\n          description: f.description || '',\n          jsonKey: f.name\n        }));\n\n        const content = this.templateManager.render('freezed-headers-model', {\n          className: headersClassName,\n          fileName,\n          description: definition.description || `Headers for ${className}`,\n          properties,\n          hasJsonKey: true,\n          hasDescription: properties.some(p => p.description)\n        });\n\n        files.push({\n          path: `models/headers/${fileName}.f.dart`,\n          content\n        });\n      }\n    }\n\n    return files;\n  }\n\n  /**\n   * Consolidate headers based on similarity\n   */\n  private consolidateHeaders(): void {\n    const threshold = this.config.consolidationThreshold || 3;\n    const signatureMap = new Map<string, string[]>();\n\n    // Group models by signature\n    for (const [modelName, model] of this.headerModels.entries()) {\n      if (!model.isShared) {\n        const signature = this.createHeaderSignature(model.headers);\n        const models = signatureMap.get(signature) || [];\n        models.push(modelName);\n        signatureMap.set(signature, models);\n      }\n    }\n\n    // Consolidate groups that meet threshold\n    for (const [signature, modelNames] of signatureMap.entries()) {\n      if (modelNames.length >= threshold) {\n        // Create consolidated model name\n        const consolidatedName = this.generateConsolidatedName(modelNames);\n\n        // Get headers from first model\n        const firstModel = this.headerModels.get(modelNames[0]);\n        if (!firstModel) continue;\n\n        // Create consolidated model\n        const consolidatedModel: HeaderModel = {\n          className: consolidatedName,\n          fileName: TypeMapper.toSnakeCase(consolidatedName),\n          headers: firstModel.headers,\n          isShared: true,\n          usageCount: modelNames.length,\n          endpoints: modelNames\n        };\n\n        // Replace individual models with consolidated one\n        this.headerModels.set(consolidatedName, consolidatedModel);\n\n        // Update references\n        for (const oldName of modelNames) {\n          this.headerModels.delete(oldName);\n          // Update endpoint mappings\n          for (const [endpoint, model] of this.endpointToModelMap.entries()) {\n            if (model === oldName) {\n              this.endpointToModelMap.set(endpoint, consolidatedName);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Find matching header class from configuration\n   */\n  findMatchingHeaderClass(endpoint: string, headers: HeaderParameter[]): string | null {\n    if (!this.config.definitions || headers.length === 0) {\n      return null;\n    }\n\n    // Check cache first\n    const signature = this.createHeaderSignature(headers);\n    if (this.matchCache.has(signature)) {\n      return this.matchCache.get(signature)!;\n    }\n\n    // Find best match based on strategy\n    const matchedClass = this.findBestMatch(headers);\n\n    // Cache the result\n    this.matchCache.set(signature, matchedClass);\n\n    return matchedClass;\n  }\n\n  /**\n   * Find the best matching header definition\n   */\n  private findBestMatch(headers: HeaderParameter[]): string | null {\n    if (!this.config.definitions) {\n      return null;\n    }\n\n    const strategy = this.config.matchStrategy || 'exact';\n    const headerNames = headers.map(h => h.originalName).sort();\n    const requiredHeaders = headers.filter(h => h.required).map(h => h.originalName).sort();\n\n    let bestMatch: { className: string; score: number } | null = null;\n\n    for (const [className, definition] of Object.entries(this.config.definitions)) {\n      const defFields = this.getFieldNames(definition);\n      const defRequired = definition.required || defFields;\n\n      if (strategy === 'exact') {\n        // Exact match: same fields and same required status\n        if (this.arraysEqual(headerNames, defFields) &&\n            this.arraysEqual(requiredHeaders, [...defRequired].sort())) {\n          return className;\n        }\n      } else if (strategy === 'subset') {\n        // Subset match: endpoint headers are subset of definition\n        if (this.isSubset(headerNames, defFields)) {\n          const score = this.calculateMatchScore(headers, definition);\n          if (!bestMatch || score > bestMatch.score) {\n            bestMatch = { className, score };\n          }\n        }\n      } else if (strategy === 'fuzzy') {\n        // Fuzzy match: find best overlap\n        const score = this.calculateFuzzyScore(headers, definition);\n        if (score > 0 && (!bestMatch || score > bestMatch.score)) {\n          bestMatch = { className, score };\n        }\n      }\n    }\n\n    return bestMatch?.className || null;\n  }\n\n  /**\n   * Register header usage\n   */\n  private registerHeaderUsage(\n    modelName: string,\n    endpoint: string,\n    headers: HeaderParameter[],\n    isShared: boolean\n  ): void {\n    this.endpointToModelMap.set(endpoint, modelName);\n\n    if (!this.headerModels.has(modelName)) {\n      this.headerModels.set(modelName, {\n        className: modelName,\n        fileName: TypeMapper.toSnakeCase(modelName),\n        headers,\n        isShared,\n        usageCount: 1,\n        endpoints: [endpoint]\n      });\n    } else {\n      const model = this.headerModels.get(modelName)!;\n      model.usageCount = (model.usageCount || 0) + 1;\n      if (!model.endpoints) {\n        model.endpoints = [];\n      }\n      model.endpoints.push(endpoint);\n    }\n  }\n\n  /**\n   * Create header file from model\n   */\n  private createHeaderFile(model: HeaderModel): GeneratedFile | null {\n    const properties = model.headers.map(header => ({\n      name: header.dartName,\n      type: header.type || 'String',\n      required: header.required,\n      description: header.description,\n      jsonKey: header.dartName !== header.originalName ? header.originalName : undefined\n    }));\n\n    const content = this.templateManager.render('freezed-headers-model', {\n      className: model.className,\n      fileName: model.fileName,\n      description: model.isShared\n        ? `Shared headers used by ${model.usageCount || 1} endpoints`\n        : `Headers for ${model.className.replace(/Headers$/, '')}`,\n      properties,\n      hasJsonKey: properties.some(p => p.jsonKey),\n      hasDescription: properties.some(p => p.description)\n    });\n\n    return {\n      path: `models/headers/${model.fileName}.f.dart`,\n      content\n    };\n  }\n\n  /**\n   * Generate matching report\n   */\n  generateReport(): string {\n    let report = '# Header Generation Report\\n\\n';\n\n    // Statistics\n    const totalModels = this.headerModels.size;\n    const sharedModels = Array.from(this.headerModels.values()).filter(m => m.isShared).length;\n    const uniqueModels = totalModels - sharedModels;\n\n    report += `## Statistics\\n`;\n    report += `- Total header models: ${totalModels}\\n`;\n    report += `- Shared models: ${sharedModels}\\n`;\n    report += `- Unique models: ${uniqueModels}\\n`;\n    report += `- Total endpoints: ${this.endpointToModelMap.size}\\n\\n`;\n\n    // Shared model usage\n    if (sharedModels > 0) {\n      report += `## Shared Model Usage\\n`;\n      for (const model of this.headerModels.values()) {\n        if (model.isShared) {\n          report += `- ${model.className}: ${model.usageCount || 1} endpoints\\n`;\n        }\n      }\n      report += '\\n';\n    }\n\n    // Consolidation results\n    if (this.config.customConsolidate) {\n      const consolidatedCount = Array.from(this.headerModels.values())\n        .filter(m => m.isShared && (m.usageCount || 0) >= (this.config.consolidationThreshold || 3))\n        .length;\n\n      if (consolidatedCount > 0) {\n        report += `## Consolidation Results\\n`;\n        report += `- ${consolidatedCount} header classes were consolidated\\n`;\n        report += `- Threshold: ${this.config.consolidationThreshold || 3} endpoints\\n\\n`;\n      }\n    }\n\n    return report;\n  }\n\n  /**\n   * Parse header fields from definition\n   */\n  private parseHeaderFields(definition: HeaderDefinition): Array<{\n    name: string;\n    type: string;\n    required: boolean;\n    description?: string;\n  }> {\n    if (Array.isArray(definition.fields)) {\n      return definition.fields.map(name => ({\n        name,\n        type: 'String',\n        required: definition.required?.includes(name) ?? true,\n        description: undefined\n      }));\n    } else {\n      return Object.entries(definition.fields).map(([name, info]) => ({\n        name,\n        type: typeof info === 'object' && info !== null && 'type' in info ?\n          (info as any).type : 'String',\n        required: typeof info === 'object' && info !== null && 'required' in info ?\n          (info as any).required : (definition.required?.includes(name) ?? true),\n        description: typeof info === 'object' && info !== null && 'description' in info ?\n          (info as any).description : undefined\n      }));\n    }\n  }\n\n  /**\n   * Helper methods\n   */\n\n  private createHeaderSignature(headers: HeaderParameter[]): string {\n    return headers\n      .map(h => `${h.originalName}:${h.required ? 'R' : 'O'}`)\n      .sort()\n      .join('|');\n  }\n\n  private createFieldSignature(fields: Array<{ name: string; required: boolean }>): string {\n    return fields\n      .map(f => `${f.name}:${f.required ? 'R' : 'O'}`)\n      .sort()\n      .join('|');\n  }\n\n  private getFieldNames(definition: HeaderDefinition): string[] {\n    if (Array.isArray(definition.fields)) {\n      return [...definition.fields].sort();\n    }\n    return Object.keys(definition.fields).sort();\n  }\n\n  private generateConsolidatedName(modelNames: string[]): string {\n    // Extract common parts from model names\n    const commonParts = modelNames[0]\n      .replace(/Headers$/, '')\n      .split(/(?=[A-Z])/)\n      .filter(part =>\n        modelNames.every(name => name.includes(part))\n      );\n\n    if (commonParts.length > 0) {\n      return commonParts.join('') + 'Headers';\n    }\n\n    return 'SharedHeaders' + Math.random().toString(36).substr(2, 5);\n  }\n\n  private calculateMatchScore(\n    headers: HeaderParameter[],\n    definition: HeaderDefinition\n  ): number {\n    let score = 0;\n    const defFields = this.getFieldNames(definition);\n    const defRequired = definition.required || defFields;\n\n    headers.forEach(header => {\n      if (defFields.includes(header.originalName)) {\n        score += 1;\n        // Bonus points if required status matches\n        const shouldBeRequired = defRequired.includes(header.originalName);\n        if (header.required === shouldBeRequired) {\n          score += 0.5;\n        }\n      }\n    });\n\n    // Penalty for extra fields in definition\n    const extraFields = defFields.length - headers.length;\n    score -= extraFields * 0.25;\n\n    return score;\n  }\n\n  private calculateFuzzyScore(\n    headers: HeaderParameter[],\n    definition: HeaderDefinition\n  ): number {\n    const headerNames = headers.map(h => h.originalName);\n    const defFields = this.getFieldNames(definition);\n\n    // Calculate Jaccard similarity\n    const intersection = headerNames.filter(h => defFields.includes(h));\n    const union = new Set([...headerNames, ...defFields]);\n\n    if (union.size === 0) return 0;\n\n    return intersection.length / union.size;\n  }\n\n  private arraysEqual(a: string[], b: string[]): boolean {\n    if (a.length !== b.length) return false;\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n\n  private isSubset(a: string[], b: string[]): boolean {\n    return a.every(item => b.includes(item));\n  }\n\n  /**\n   * Clear all models (for testing)\n   */\n  clear(): void {\n    this.headerModels.clear();\n    this.matchCache.clear();\n    this.endpointToModelMap.clear();\n  }\n\n  /**\n   * Get statistics\n   */\n  getStatistics(): {\n    totalModels: number;\n    sharedModels: number;\n    uniqueModels: number;\n    totalEndpoints: number;\n    averageReuse: number;\n  } {\n    const models = Array.from(this.headerModels.values());\n    const sharedModels = models.filter(m => m.isShared);\n\n    const totalReuse = sharedModels.reduce((sum, m) => sum + (m.usageCount || 1), 0);\n    const averageReuse = sharedModels.length > 0 ? totalReuse / sharedModels.length : 0;\n\n    return {\n      totalModels: models.length,\n      sharedModels: sharedModels.length,\n      uniqueModels: models.length - sharedModels.length,\n      totalEndpoints: this.endpointToModelMap.size,\n      averageReuse: Math.round(averageReuse * 100) / 100\n    };\n  }\n}","/**\n * Generate Dart service classes\n */\n\nimport type { OpenAPIV3 } from 'openapi-types';\nimport { OpenAPIObject, DartGeneratorOptions, GeneratedFile, ClientGeneratorBuilder } from '../types';\nimport { EndpointGenerator, EndpointMethod } from './endpoint-generator';\nimport { TemplateManager } from '../templates/template-manager';\nimport { TypeMapper } from '../utils';\nimport { ParamsGenerator } from './params-generator';\nimport { HeadersGenerator } from './headers-generator';\nimport * as fsSync from 'fs';\nimport * as path from 'path';\nimport { fileURLToPath } from 'url';\n\n// Get __dirname that works in both CJS and ESM\ndeclare const __dirname: string | undefined;\nlet dirName: string;\nif (typeof import.meta !== 'undefined' && import.meta.url) {\n  // ESM\n  const __filename = fileURLToPath(import.meta.url);\n  dirName = path.dirname(__filename);\n} else if (typeof __dirname !== 'undefined') {\n  // CJS - __dirname is available\n  dirName = __dirname;\n} else {\n  // Fallback - calculate from cwd\n  dirName = path.join(process.cwd(), 'dorval/packages/core/dist');\n}\n\nexport interface ServiceClass {\n  serviceName: string;\n  description?: string;\n  methods: EndpointMethod[];\n  imports: string[];\n  hasApiException: boolean;\n}\n\nexport class ServiceGenerator {\n  private endpointGenerator: EndpointGenerator;\n  private templateManager: TemplateManager;\n  private paramsGenerator: ParamsGenerator;\n  private headersGenerator: HeadersGenerator | null = null;\n  private schemas: Record<string, any> = {};\n  private originalSpec: OpenAPIObject | null = null;\n  private options: DartGeneratorOptions | null = null;\n  private clientBuilder: ClientGeneratorBuilder | null = null;\n\n  constructor() {\n    this.endpointGenerator = new EndpointGenerator();\n    this.templateManager = new TemplateManager();\n    this.paramsGenerator = new ParamsGenerator();\n    \n    // Register the service-method partial\n    // Need to read the template content directly, not the compiled function\n    let methodTemplatePath = path.join(dirName, 'templates', 'service-method.hbs');\n    if (!fsSync.existsSync(methodTemplatePath)) {\n      methodTemplatePath = path.join(dirName, '../templates/service-method.hbs');\n    }\n    if (!fsSync.existsSync(methodTemplatePath)) {\n      methodTemplatePath = path.join(dirName, 'service-method.hbs');\n    }\n    \n    // Final fallback - look in various possible locations\n    if (!fsSync.existsSync(methodTemplatePath)) {\n      const possiblePaths = [\n        path.join(process.cwd(), 'packages/core/dist/templates/service-method.hbs'),\n        path.join(process.cwd(), 'dorval/packages/core/dist/templates/service-method.hbs'),\n        path.join(process.cwd(), 'dist/templates/service-method.hbs')\n      ];\n      \n      for (const p of possiblePaths) {\n        if (fsSync.existsSync(p)) {\n          methodTemplatePath = p;\n          break;\n        }\n      }\n    }\n    \n    try {\n      const methodTemplateContent = fsSync.readFileSync(methodTemplatePath, 'utf-8');\n      this.templateManager.registerPartial('service-method', methodTemplateContent);\n    } catch (error) {\n      console.error(`Failed to load service-method template from ${methodTemplatePath}`);\n      throw error;\n    }\n  }\n\n  /**\n   * Load the appropriate client builder based on configuration\n   */\n  private loadClientBuilder(options: DartGeneratorOptions): void {\n    const clientType = options.output.client || 'dio';\n    \n    try {\n      if (clientType === 'custom' || options.output.override?.mutator) {\n        // Try to load custom client builder\n        try {\n          // eslint-disable-next-line @typescript-eslint/no-require-imports\n          const customBuilder = require('@dorval/custom');\n          this.clientBuilder = customBuilder.builder()();\n        } catch {\n          // Try relative path\n          // eslint-disable-next-line @typescript-eslint/no-require-imports\n          const customBuilder = require('../../custom/dist');\n          this.clientBuilder = customBuilder.builder()();\n        }\n      } else if (clientType === 'dio') {\n        // Try to load Dio client builder\n        try {\n          // eslint-disable-next-line @typescript-eslint/no-require-imports\n          const dioBuilder = require('@dorval/dio');\n          this.clientBuilder = dioBuilder.builder()();\n        } catch {\n          // Try relative path\n          // eslint-disable-next-line @typescript-eslint/no-require-imports\n          const dioBuilder = require('../../dio/dist');\n          this.clientBuilder = dioBuilder.builder()();\n        }\n      } else {\n        // Default to Dio\n        try {\n          // eslint-disable-next-line @typescript-eslint/no-require-imports\n          const dioBuilder = require('@dorval/dio');\n          this.clientBuilder = dioBuilder.builder()();\n        } catch {\n          // eslint-disable-next-line @typescript-eslint/no-require-imports\n          const dioBuilder = require('../../dio/dist');\n          this.clientBuilder = dioBuilder.builder()();\n        }\n      }\n    } catch (error: any) {\n      console.warn(`Failed to load ${clientType} client builder, falling back to default templates:`, error?.message || error);\n      // Fall back to existing template-based approach\n      this.clientBuilder = null;\n    }\n  }\n\n  /**\n   * Generate service classes from OpenAPI spec\n   */\n  async generateServices(\n    spec: OpenAPIObject,\n    options: DartGeneratorOptions\n  ): Promise<GeneratedFile[]> {\n    const files: GeneratedFile[] = [];\n    const paramFiles: GeneratedFile[] = [];\n    const headerFiles: GeneratedFile[] = [];\n    \n    // Store options\n    this.options = options;\n    \n    // Load client builder based on configuration\n    this.loadClientBuilder(options);\n    \n    // Initialize header generators based on configuration\n    if (options.output.override?.headers && options.output.override.headers.definitions) {\n      // New headers configuration with custom-matching\n      this.headersGenerator = new HeadersGenerator(options.output.override.headers as any);\n    } else if (options.output.override?.sharedHeaders) {\n      // Legacy shared headers configuration - convert to new format\n      const convertedDefinitions: { [className: string]: any } = {};\n      for (const [className, fields] of Object.entries(options.output.override.sharedHeaders)) {\n        convertedDefinitions[className] = {\n          fields: fields,\n          required: fields // All fields are required in legacy format\n        };\n      }\n      const convertedConfig = {\n        definitions: convertedDefinitions,\n        customMatch: true,\n        matchStrategy: 'exact' as const\n      };\n      this.headersGenerator = new HeadersGenerator(convertedConfig);\n    }\n    \n    // Store the original spec - it should already have $refs preserved from parseOpenAPISpec\n    this.originalSpec = spec;\n    \n    // Store schemas for reference resolution\n    this.schemas = spec.components?.schemas || {};\n    this.endpointGenerator.setSchemas(this.schemas);\n    if (this.originalSpec) {\n      this.endpointGenerator.setOriginalSpec(this.originalSpec);\n    }\n    \n    // Set method naming strategy\n    const methodNaming = options.output.override?.methodNaming || 'operationId';\n    this.endpointGenerator.setMethodNaming(methodNaming);\n    \n    // Get endpoints grouped by tag\n    const endpointsByTag = this.getEndpointsByTag();\n    \n    // Generate a service class for each tag\n    for (const [tag, endpoints] of endpointsByTag.entries()) {\n      const service = this.createServiceClass(tag, endpoints, paramFiles, headerFiles);\n      const content = this.renderService(service);\n      \n      const fileName = TypeMapper.toSnakeCase(service.serviceName);\n      files.push({\n        path: `services/${fileName}.dart`,\n        content\n      });\n    }\n    \n    // Add parameter model files to the main files list\n    files.push(...paramFiles);\n    \n    // Add header model files\n    if (this.headersGenerator) {\n      // Generate consolidated header files from headers generator\n      const consolidatedHeaderFiles = this.headersGenerator.generateConfiguredHeaderFiles();\n      files.push(...consolidatedHeaderFiles);\n      files.push(...headerFiles); // Add any non-matched header files\n      \n      // Generate index for all header files\n      const allHeaderFiles = [...consolidatedHeaderFiles, ...headerFiles];\n      if (allHeaderFiles.length > 0) {\n        const headersIndexContent = this.generateHeadersIndex(allHeaderFiles);\n        files.push({\n          path: 'models/headers/index.dart',\n          content: headersIndexContent\n        });\n      }\n      \n      // Print matching report\n      const report = this.headersGenerator.generateReport();\n      console.log('\\n' + report);\n      console.log(`\\nTotal header files generated: ${allHeaderFiles.length} (${consolidatedHeaderFiles.length} consolidated, ${headerFiles.length} endpoint-specific)`);\n    } else {\n      // Original behavior\n      files.push(...headerFiles);\n      if (headerFiles.length > 0) {\n        const headersIndexContent = this.generateHeadersIndex(headerFiles);\n        files.push({\n          path: 'models/headers/index.dart',\n          content: headersIndexContent\n        });\n      }\n    }\n    \n    // Generate index file for parameter models if any were created\n    if (paramFiles.length > 0) {\n      const paramsIndexContent = this.generateParamsIndex(paramFiles);\n      files.push({\n        path: 'models/params/index.dart',\n        content: paramsIndexContent\n      });\n    }\n    \n    // Generate ApiException file\n    const apiExceptionFile = this.generateApiException();\n    files.push(apiExceptionFile);\n    \n    // Generate an index file for services only\n    const serviceFiles = files.filter(f => f.path.startsWith('services/') && f.path.endsWith('_service.dart'));\n    const indexContent = this.generateServicesIndex(serviceFiles);\n    files.push({\n      path: 'services/index.dart',\n      content: indexContent\n    });\n    \n    return files;\n  }\n\n  /**\n   * Get endpoints grouped by tag\n   */\n  private getEndpointsByTag(): Map<string, EndpointInfo[]> {\n    const grouped = new Map<string, EndpointInfo[]>();\n    // Use the original spec paths to preserve $ref\n    const paths = this.originalSpec?.paths || {};\n    \n    Object.entries(paths).forEach(([path, pathItem]) => {\n      if (!pathItem) return;\n      \n      const methods = ['get', 'post', 'put', 'delete', 'patch'] as const;\n      \n      methods.forEach(method => {\n        const operation = (pathItem as any)[method] as OpenAPIV3.OperationObject;\n        if (!operation) return;\n        \n        const tags = operation.tags || ['default'];\n        // Deduplicate tags to prevent duplicate method generation\n        const uniqueTags = [...new Set(tags)];\n        \n        uniqueTags.forEach(tag => {\n          if (!grouped.has(tag)) {\n            grouped.set(tag, []);\n          }\n          \n          grouped.get(tag)!.push({\n            method,\n            path,\n            operation,\n            pathItem\n          });\n        });\n      });\n    });\n    \n    return grouped;\n  }\n\n  /**\n   * Create a service class from endpoints\n   */\n  private createServiceClass(\n    tag: string,\n    endpoints: EndpointInfo[],\n    paramFiles: GeneratedFile[],\n    headerFiles: GeneratedFile[]\n  ): ServiceClass {\n    const serviceName = TypeMapper.toDartClassName(tag) + 'Service';\n    const methods: EndpointMethod[] = [];\n    const imports = new Set<string>();\n    const generatedParamModels = new Set<string>(); // Track generated models to avoid duplicates\n    \n    // Add base imports\n    imports.add('../models/index.dart');\n    \n    // Generate methods for each endpoint\n    endpoints.forEach(({ method, path, operation, pathItem }) => {\n      let endpointMethod: EndpointMethod;\n      \n      switch (method) {\n        case 'get':\n          endpointMethod = this.endpointGenerator.generateGetMethod(\n            operation.operationId || `${method}_${path}`,\n            path,\n            operation,\n            pathItem\n          );\n          break;\n        case 'post':\n        case 'put':\n        case 'patch':\n          endpointMethod = this.endpointGenerator.generateMutationMethod(\n            method,\n            operation.operationId || `${method}_${path}`,\n            path,\n            operation,\n            pathItem\n          );\n          break;\n        case 'delete':\n          endpointMethod = this.endpointGenerator.generateDeleteMethod(\n            operation.operationId || `${method}_${path}`,\n            path,\n            operation,\n            pathItem\n          );\n          break;\n        default:\n          return;\n      }\n      \n      methods.push(endpointMethod);\n      \n      // Generate parameter models if needed\n      if (endpointMethod.needsParamsModel && endpointMethod.queryParamsModelName && \n          !generatedParamModels.has(endpointMethod.queryParamsModelName)) {\n        const paramsModel = this.paramsGenerator.generateQueryParamsModel(\n          endpointMethod.methodName,\n          endpointMethod.queryParams\n        );\n        if (paramsModel) {\n          paramFiles.push(paramsModel);\n          generatedParamModels.add(endpointMethod.queryParamsModelName);\n        }\n      }\n      \n      if (endpointMethod.needsHeadersModel && endpointMethod.headers.length > 0) {\n        // Use custom header matcher if available\n        if (this.headersGenerator) {\n          const matchedClassName = this.headersGenerator.findMatchingHeaderClass(\n            path,\n            endpointMethod.headers\n          );\n          \n          if (matchedClassName) {\n            // Found a match - use the consolidated header class\n            endpointMethod.headersModelName = matchedClassName;\n          } else {\n            // No match - generate endpoint-specific header class\n            if (endpointMethod.headersModelName && !generatedParamModels.has(endpointMethod.headersModelName)) {\n              const headersModel = this.paramsGenerator.generateHeadersModel(\n                endpointMethod.methodName,\n                endpointMethod.headers\n              );\n              if (headersModel) {\n                headerFiles.push(headersModel);\n                generatedParamModels.add(endpointMethod.headersModelName);\n              }\n            }\n          }\n        } else {\n          // Fallback to original behavior\n          if (endpointMethod.headersModelName && !generatedParamModels.has(endpointMethod.headersModelName)) {\n            const headersModel = this.paramsGenerator.generateHeadersModel(\n              endpointMethod.methodName,\n              endpointMethod.headers\n            );\n            if (headersModel) {\n              headerFiles.push(headersModel);\n              generatedParamModels.add(endpointMethod.headersModelName);\n            }\n          }\n        }\n      }\n      \n      // Collect imports for return types and parameters\n      if (endpointMethod.returnType && !this.isPrimitiveType(endpointMethod.returnType)) {\n        // Model imports are handled by the index file\n      }\n      \n      endpointMethod.parameters.forEach(param => {\n        const typeImports = TypeMapper.getImportsForType(param.type);\n        typeImports.forEach(imp => imports.add(imp));\n      });\n    });\n    \n    // No need to add separate imports for params and headers\n    // They are already exported from models/index.dart\n    \n    // Get tag description if available from the spec\n    const tagInfo = this.originalSpec?.tags?.find(t => t.name === tag);\n    \n    return {\n      serviceName,\n      description: tagInfo?.description,\n      methods,\n      imports: Array.from(imports),\n      hasApiException: true // Always include for error handling\n    };\n  }\n\n  /**\n   * Render a service class\n   */\n  private renderService(service: ServiceClass): string {\n    return this.templateManager.render('service', service);\n  }\n\n  /**\n   * Generate index file for services\n   */\n  private generateServicesIndex(files: GeneratedFile[]): string {\n    const exports = files\n      .map(f => {\n        const fileName = f.path.replace('services/', '');\n        return `export '${fileName}';`;\n      })\n      .join('\\n');\n    \n    return `// Generated index file for services\n${exports}\nexport 'api_exception.dart';\n`;\n  }\n\n  /**\n   * Check if a type is primitive\n   */\n  private isPrimitiveType(type: string): boolean {\n    const primitives = ['String', 'int', 'double', 'bool', 'num', 'void', 'dynamic'];\n    return primitives.includes(type) || type.startsWith('List<') || type.startsWith('Map<');\n  }\n  \n  /**\n   * Generate ApiException file\n   */\n  private generateApiException(): GeneratedFile {\n    const content = `/// Custom exception for API errors\nclass ApiException implements Exception {\n  final int? statusCode;\n  final String message;\n  final dynamic error;\n  \n  ApiException({\n    this.statusCode,\n    required this.message,\n    this.error,\n  });\n  \n  @override\n  String toString() {\n    return 'ApiException: [\\$statusCode] \\$message';\n  }\n}\n`;\n    \n    return {\n      path: 'services/api_exception.dart',\n      content\n    };\n  }\n  \n  /**\n   * Generate index file for parameter models\n   */\n  private generateParamsIndex(files: GeneratedFile[]): string {\n    const exports = files\n      .filter(f => f.path.startsWith('models/params/'))\n      .map(f => {\n        const fileName = f.path.replace('models/params/', '').replace('.dart', '');\n        return `export '${fileName}.dart';`;\n      })\n      .join('\\n');\n    \n    return `// Generated index file for parameter models\n${exports}\n`;\n  }\n  \n  /**\n   * Generate index file for header models\n   */\n  private generateHeadersIndex(files: GeneratedFile[]): string {\n    const exports = files\n      .filter(f => f.path.startsWith('models/headers/'))\n      .map(f => {\n        const fileName = f.path.replace('models/headers/', '').replace('.dart', '');\n        return `export '${fileName}.dart';`;\n      })\n      .join('\\n');\n    \n    return `// Generated index file for header models\n${exports}\n`;\n  }\n}\n\ninterface EndpointInfo {\n  method: string;\n  path: string;\n  operation: OpenAPIV3.OperationObject;\n  pathItem?: OpenAPIV3.PathItemObject;\n}","/**\n * Generate API service classes\n */\n\nimport { OpenAPIObject } from '../types';\nimport { DartGeneratorOptions, GeneratedFile } from '../types';\nimport { ServiceGenerator } from './service-generator';\n\nexport async function generateServices(\n  spec: OpenAPIObject,\n  options: DartGeneratorOptions\n): Promise<GeneratedFile[]> {\n  const generator = new ServiceGenerator();\n  return generator.generateServices(spec, options);\n}","/**\n * Main generator orchestrator\n */\n\nimport { DartGeneratorOptions, GeneratedFile } from '../types';\nimport { parseOpenAPISpec } from '../parser';\nimport { generateModels } from './models';\nimport { generateClient } from './client';\nimport { generateServices } from './services';\nimport { writeToDisk } from '../utils';\n\nexport async function generateDartCode(options: DartGeneratorOptions): Promise<GeneratedFile[]> {\n  // Parse OpenAPI specification\n  const spec = await parseOpenAPISpec(options.input);\n\n  const files: GeneratedFile[] = [];\n\n  // Generate models\n  const models = await generateModels(spec, options);\n  files.push(...models);\n\n  // Generate API client\n  const client = await generateClient(spec, options);\n  files.push(...client);\n\n  // Generate services - create a deep copy to preserve $refs\n  const freshSpec = typeof options.input === 'object'\n    ? JSON.parse(JSON.stringify(options.input))\n    : await parseOpenAPISpec(options.input);\n  const services = await generateServices(freshSpec, options);\n  files.push(...services);\n\n  // Update models/index.dart to include params and headers exports if they exist\n  const modelsIndexFile = files.find(f => f.path === 'models/index.dart');\n  if (modelsIndexFile) {\n    const hasParams = files.some(f => f.path.startsWith('models/params/') && f.path !== 'models/params/index.dart');\n    const hasHeaders = files.some(f => f.path.startsWith('models/headers/') && f.path !== 'models/headers/index.dart');\n\n    if (hasParams || hasHeaders) {\n      let additionalExports = '\\n\\n// Export params and headers if they exist';\n      if (hasParams) {\n        additionalExports += \"\\nexport 'params/index.dart';\";\n      }\n      if (hasHeaders) {\n        additionalExports += \"\\nexport 'headers/index.dart';\";\n      }\n      modelsIndexFile.content = modelsIndexFile.content.trimEnd() + additionalExports + '\\n';\n    }\n  }\n\n  // Write files to disk\n  if (options.output.target) {\n    await writeToDisk(files, options.output.target);\n  }\n\n  return files;\n}\n\nexport { generateModels } from './models';\nexport { generateClient } from './client';\nexport { generateServices } from './services';\n\n// Export internal classes for advanced usage\nexport { ModelGenerator } from './model-generator';\nexport { ServiceGenerator } from './service-generator';\nexport { EndpointGenerator } from './endpoint-generator';"],"mappings":"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","names":["src_exports","builder","src_default","generateDioClient","init_src","copyFile","readFile","writeFile","import_swagger_parser","path","SwaggerParser","api","SwaggerParser","fs","path","writeFile","readFile","copyFile","fs","fsSync","path","Handlebars","isRequired","propDetails","isNullable","isRequired","path","isRequired","isNullable","isRequired","isRequired","isPrimitiveType","isPrimitiveType","toSnakeCase","exports","path","isNullable","dartType","type","isPrimitive","fileName","fsSync","path","import_url","import_meta","dirName","exports"]}