{"version":3,"file":"digiphilo-opencage-angular.mjs","sources":["../../../projects/opencage-angular/src/lib/models/opencage-types.ts","../../../projects/opencage-angular/src/lib/models/opencage-error.ts","../../../projects/opencage-angular/src/lib/services/opencage-config.service.ts","../../../projects/opencage-angular/src/lib/services/opencage-cache.service.ts","../../../projects/opencage-angular/src/lib/services/opencage-rate-limiter.service.ts","../../../projects/opencage-angular/src/lib/services/opencage.service.ts","../../../projects/opencage-angular/src/lib/interceptors/opencage.interceptor.ts","../../../projects/opencage-angular/src/lib/pipes/coordinate-format.pipe.ts","../../../projects/opencage-angular/src/lib/pipes/address-format.pipe.ts","../../../projects/opencage-angular/src/lib/directives/geocode-input.directive.ts","../../../projects/opencage-angular/src/lib/directives/coordinate-validator.directive.ts","../../../projects/opencage-angular/src/lib/opencage-angular.module.ts","../../../projects/opencage-angular/src/lib/models/index.ts","../../../projects/opencage-angular/src/lib/pipes/index.ts","../../../projects/opencage-angular/src/lib/directives/index.ts","../../../projects/opencage-angular/src/lib/interceptors/index.ts","../../../projects/opencage-angular/src/public-api.ts","../../../projects/opencage-angular/src/digiphilo-opencage-angular.ts"],"sourcesContent":["/**\n * Core TypeScript interfaces and types for OpenCage Geocoding API\n * Provides comprehensive typing for all API responses and requests\n */\n\n/**\n * Coordinate pair representing latitude and longitude\n */\nexport interface Coordinates {\n  /** Latitude in decimal degrees */\n  lat: number;\n  /** Longitude in decimal degrees */\n  lng: number;\n}\n\n/**\n * Bounding box coordinates\n */\nexport interface BoundingBox {\n  /** Southwest corner coordinates */\n  southwest: Coordinates;\n  /** Northeast corner coordinates */\n  northeast: Coordinates;\n}\n\n/**\n * Geometry information from geocoding response\n */\nexport interface Geometry {\n  /** Latitude in decimal degrees */\n  lat: number;\n  /** Longitude in decimal degrees */\n  lng: number;\n}\n\n/**\n * Component parts of an address\n */\nexport interface AddressComponents {\n  /** ISO 3166-1 alpha-2 country code */\n  'ISO_3166-1_alpha-2'?: string;\n  /** ISO 3166-1 alpha-3 country code */\n  'ISO_3166-1_alpha-3'?: string;\n  /** ISO 3166-2 subdivision code */\n  'ISO_3166-2'?: string[];\n  /** Building name */\n  building?: string;\n  /** City name */\n  city?: string;\n  /** City district */\n  city_district?: string;\n  /** Continent name */\n  continent?: string;\n  /** Country name */\n  country?: string;\n  /** Country code (2-letter) */\n  country_code?: string;\n  /** County name */\n  county?: string;\n  /** House number */\n  house_number?: string;\n  /** Neighbourhood */\n  neighbourhood?: string;\n  /** Political entity */\n  political_union?: string;\n  /** Postal code */\n  postcode?: string;\n  /** Road/street name */\n  road?: string;\n  /** State name */\n  state?: string;\n  /** State code */\n  state_code?: string;\n  /** State district */\n  state_district?: string;\n  /** Suburb */\n  suburb?: string;\n  /** Village */\n  village?: string;\n  /** Town */\n  town?: string;\n  /** Region */\n  region?: string;\n  /** Partial postcode */\n  partial_postcode?: string;\n  [key: string]: string | string[] | undefined;\n}\n\n/**\n * Annotation data with additional information\n */\nexport interface Annotations {\n  /** DMS (Degrees, Minutes, Seconds) coordinates */\n  DMS?: {\n    lat: string;\n    lng: string;\n  };\n  /** MGRS (Military Grid Reference System) */\n  MGRS?: string;\n  /** Maidenhead locator */\n  Maidenhead?: string;\n  /** Mercator projection coordinates */\n  Mercator?: {\n    x: number;\n    y: number;\n  };\n  /** Open Street Map data */\n  OSM?: {\n    edit_url?: string;\n    note_url?: string;\n    url?: string;\n  };\n  /** UN M.49 codes */\n  'UN_M49'?: {\n    regions?: {\n      [key: string]: string;\n    };\n    statistical_groupings?: string[];\n  };\n  /** Calling code */\n  callingcode?: number;\n  /** Currency information */\n  currency?: {\n    alternate_symbols?: string[];\n    decimal_mark?: string;\n    disambiguate_symbol?: string;\n    html_entity?: string;\n    iso_code?: string;\n    iso_numeric?: string;\n    name?: string;\n    smallest_denomination?: number;\n    subunit?: string;\n    subunit_to_unit?: number;\n    symbol?: string;\n    symbol_first?: number;\n    thousands_separator?: string;\n  };\n  /** Flag emoji */\n  flag?: string;\n  /** Geohash */\n  geohash?: string;\n  /** QIBLA direction */\n  qibla?: number;\n  /** Roadinfo */\n  roadinfo?: {\n    drive_on?: string;\n    road?: string;\n    speed_in?: string;\n  };\n  /** Sun information */\n  sun?: {\n    rise?: {\n      apparent?: number;\n      astronomical?: number;\n      civil?: number;\n      nautical?: number;\n    };\n    set?: {\n      apparent?: number;\n      astronomical?: number;\n      civil?: number;\n      nautical?: number;\n    };\n  };\n  /** Timezone information */\n  timezone?: {\n    name?: string;\n    now_in_dst?: number;\n    offset_sec?: number;\n    offset_string?: string;\n    short_name?: string;\n  };\n  /** What3Words */\n  what3words?: {\n    words?: string;\n  };\n  /** Wikidata ID */\n  wikidata?: string;\n}\n\n/**\n * Individual geocoding result\n */\nexport interface GeocodingResult {\n  /** Address components */\n  components: AddressComponents;\n  /** Confidence score (0-10) */\n  confidence: number;\n  /** Formatted address string */\n  formatted: string;\n  /** Geographic coordinates */\n  geometry: Geometry;\n  /** Additional annotations */\n  annotations?: Annotations;\n  /** Bounding box */\n  bounds?: BoundingBox;\n}\n\n/**\n * Rate limit information\n */\nexport interface RateLimit {\n  /** Maximum requests allowed */\n  limit: number;\n  /** Remaining requests */\n  remaining: number;\n  /** Reset timestamp */\n  reset: number;\n}\n\n/**\n * Request status information\n */\nexport interface Status {\n  /** Status code */\n  code: number;\n  /** Status message */\n  message: string;\n}\n\n/**\n * Full geocoding API response\n */\nexport interface GeocodingResponse {\n  /** Documentation URL */\n  documentation: string;\n  /** Array of results */\n  results: GeocodingResult[];\n  /** Request status */\n  status: Status;\n  /** Stay updated information */\n  stay_updated: string;\n  /** Thanks message */\n  thanks: string;\n  /** Timestamp of request */\n  timestamp: {\n    created_http: string;\n    created_unix: number;\n  };\n  /** Total number of results */\n  total_results: number;\n  /** We're hiring message */\n  we_are_hiring?: string;\n  /** Rate limit information */\n  rate?: RateLimit;\n  /** Licenses information */\n  licenses?: Array<{\n    name: string;\n    url: string;\n  }>;\n}\n\n/**\n * Batch geocoding request item\n */\nexport interface BatchGeocodingRequest {\n  /** Query string */\n  query: string;\n  /** Optional parameters for this specific request */\n  options?: Partial<GeocodingRequestOptions>;\n}\n\n/**\n * Batch geocoding response\n */\nexport interface BatchGeocodingResponse {\n  /** Array of responses */\n  responses: GeocodingResponse[];\n  /** Request metadata */\n  metadata: {\n    /** Total requests processed */\n    total_requests: number;\n    /** Processing time in milliseconds */\n    processing_time: number;\n  };\n}\n\n/**\n * Forward geocoding request options\n */\nexport interface ForwardGeocodingOptions {\n  /** Restrict to specific country codes */\n  countrycode?: string | string[];\n  /** Language for results */\n  language?: string;\n  /** Maximum number of results */\n  limit?: number;\n  /** Minimum confidence level */\n  min_confidence?: number;\n  /** No annotations flag */\n  no_annotations?: boolean;\n  /** No deduplication flag */\n  no_dedupe?: boolean;\n  /** No records flag */\n  no_record?: boolean;\n  /** Pretty print flag */\n  pretty?: boolean;\n  /** Restrict to bounds */\n  bounds?: string;\n  /** Proximity bias */\n  proximity?: string;\n  /** Roadinfo flag */\n  roadinfo?: boolean;\n  /** Add request flag */\n  add_request?: boolean;\n  /** Use abbreviated address format */\n  abbrv?: boolean;\n}\n\n/**\n * Reverse geocoding request options\n */\nexport interface ReverseGeocodingOptions {\n  /** Language for results */\n  language?: string;\n  /** No annotations flag */\n  no_annotations?: boolean;\n  /** No record flag */\n  no_record?: boolean;\n  /** Pretty print flag */\n  pretty?: boolean;\n  /** Roadinfo flag */\n  roadinfo?: boolean;\n  /** Add request flag */\n  add_request?: boolean;\n  /** Use abbreviated address format */\n  abbrv?: boolean;\n}\n\n/**\n * General geocoding request options\n */\nexport type GeocodingRequestOptions = ForwardGeocodingOptions | ReverseGeocodingOptions;\n\n/**\n * OpenCage SDK Configuration\n */\nexport interface OpenCageConfig {\n  /** API key for OpenCage service */\n  apiKey: string;\n  /** Base API URL */\n  baseUrl?: string;\n  /** Default language */\n  defaultLanguage?: string;\n  /** Enable caching */\n  enableCaching?: boolean;\n  /** Cache TTL in milliseconds */\n  cacheTtl?: number;\n  /** Enable rate limiting */\n  enableRateLimit?: boolean;\n  /** Requests per second limit */\n  rateLimit?: number;\n  /** Timeout in milliseconds */\n  timeout?: number;\n  /** Retry attempts */\n  retryAttempts?: number;\n  /** Retry delay in milliseconds */\n  retryDelay?: number;\n  /** Enable debug mode */\n  debug?: boolean;\n}\n\n/**\n * Cache entry structure\n */\nexport interface CacheEntry<T> {\n  /** Cached data */\n  data: T;\n  /** Timestamp when cached */\n  timestamp: number;\n  /** TTL in milliseconds */\n  ttl: number;\n}\n\n/**\n * Error types from OpenCage API\n */\nexport enum OpenCageErrorType {\n  /** Network or connection error */\n  NETWORK_ERROR = 'NETWORK_ERROR',\n  /** Authentication failed */\n  AUTH_ERROR = 'AUTH_ERROR',\n  /** Rate limit exceeded */\n  RATE_LIMIT_ERROR = 'RATE_LIMIT_ERROR',\n  /** Invalid request */\n  REQUEST_ERROR = 'REQUEST_ERROR',\n  /** Server error */\n  SERVER_ERROR = 'SERVER_ERROR',\n  /** Timeout error */\n  TIMEOUT_ERROR = 'TIMEOUT_ERROR',\n  /** No results found */\n  NO_RESULTS = 'NO_RESULTS',\n  /** Invalid API key */\n  INVALID_API_KEY = 'INVALID_API_KEY',\n  /** Quota exceeded */\n  QUOTA_EXCEEDED = 'QUOTA_EXCEEDED',\n  /** Unknown error */\n  UNKNOWN_ERROR = 'UNKNOWN_ERROR'\n}\n\n/**\n * OpenCage specific error details\n */\nexport interface OpenCageErrorDetails {\n  /** Error type */\n  type: OpenCageErrorType;\n  /** Error message */\n  message: string;\n  /** HTTP status code */\n  statusCode?: number;\n  /** API response status */\n  apiStatus?: Status;\n  /** Rate limit information if applicable */\n  rateLimit?: RateLimit;\n  /** Original error object */\n  originalError?: any;\n  /** Request that caused the error */\n  request?: {\n    query: string;\n    options?: any;\n  };\n}","/**\n * Custom error classes for OpenCage SDK\n * Provides detailed error information and proper error handling\n */\n\nimport { OpenCageErrorType, OpenCageErrorDetails, Status, RateLimit } from './opencage-types';\n\n/**\n * Base error class for all OpenCage SDK errors\n */\nexport class OpenCageError extends Error {\n  public readonly type: OpenCageErrorType;\n  public readonly statusCode?: number;\n  public readonly apiStatus?: Status;\n  public readonly rateLimit?: RateLimit;\n  public readonly originalError?: any;\n  public readonly request?: {\n    query: string;\n    options?: any;\n  };\n  public readonly timestamp: Date;\n\n  constructor(details: OpenCageErrorDetails) {\n    super(details.message);\n    \n    this.name = 'OpenCageError';\n    this.type = details.type;\n    this.statusCode = details.statusCode;\n    this.apiStatus = details.apiStatus;\n    this.rateLimit = details.rateLimit;\n    this.originalError = details.originalError;\n    this.request = details.request;\n    this.timestamp = new Date();\n\n    // Maintain proper stack trace for debugging\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, OpenCageError);\n    }\n  }\n\n  /**\n   * Get detailed error information\n   */\n  public getDetails(): OpenCageErrorDetails {\n    return {\n      type: this.type,\n      message: this.message,\n      statusCode: this.statusCode,\n      apiStatus: this.apiStatus,\n      rateLimit: this.rateLimit,\n      originalError: this.originalError,\n      request: this.request\n    };\n  }\n\n  /**\n   * Check if error is retryable\n   */\n  public isRetryable(): boolean {\n    return this.type === OpenCageErrorType.NETWORK_ERROR ||\n           this.type === OpenCageErrorType.TIMEOUT_ERROR ||\n           this.type === OpenCageErrorType.SERVER_ERROR ||\n           (this.type === OpenCageErrorType.RATE_LIMIT_ERROR && this.rateLimit?.reset !== undefined);\n  }\n\n  /**\n   * Get retry delay in milliseconds\n   */\n  public getRetryDelay(): number {\n    if (this.type === OpenCageErrorType.RATE_LIMIT_ERROR && this.rateLimit?.reset) {\n      const resetTime = this.rateLimit.reset * 1000; // Convert to milliseconds\n      const now = Date.now();\n      return Math.max(0, resetTime - now);\n    }\n    return 1000; // Default 1 second delay\n  }\n\n  /**\n   * Convert error to JSON for logging\n   */\n  public toJSON(): object {\n    return {\n      name: this.name,\n      type: this.type,\n      message: this.message,\n      statusCode: this.statusCode,\n      apiStatus: this.apiStatus,\n      rateLimit: this.rateLimit,\n      request: this.request,\n      timestamp: this.timestamp.toISOString(),\n      stack: this.stack\n    };\n  }\n}\n\n/**\n * Network-related error\n */\nexport class OpenCageNetworkError extends OpenCageError {\n  constructor(message: string, originalError?: any, request?: any) {\n    super({\n      type: OpenCageErrorType.NETWORK_ERROR,\n      message: `Network error: ${message}`,\n      originalError,\n      request\n    });\n    this.name = 'OpenCageNetworkError';\n  }\n}\n\n/**\n * Authentication-related error\n */\nexport class OpenCageAuthError extends OpenCageError {\n  constructor(message: string = 'Authentication failed', statusCode?: number, request?: any) {\n    super({\n      type: OpenCageErrorType.AUTH_ERROR,\n      message: `Authentication error: ${message}`,\n      statusCode,\n      request\n    });\n    this.name = 'OpenCageAuthError';\n  }\n}\n\n/**\n * Rate limit exceeded error\n */\nexport class OpenCageRateLimitError extends OpenCageError {\n  constructor(message: string, rateLimit?: RateLimit, statusCode?: number, request?: any) {\n    super({\n      type: OpenCageErrorType.RATE_LIMIT_ERROR,\n      message: `Rate limit exceeded: ${message}`,\n      statusCode,\n      rateLimit,\n      request\n    });\n    this.name = 'OpenCageRateLimitError';\n  }\n}\n\n/**\n * Request validation error\n */\nexport class OpenCageRequestError extends OpenCageError {\n  constructor(message: string, statusCode?: number, request?: any) {\n    super({\n      type: OpenCageErrorType.REQUEST_ERROR,\n      message: `Request error: ${message}`,\n      statusCode,\n      request\n    });\n    this.name = 'OpenCageRequestError';\n  }\n}\n\n/**\n * Server error\n */\nexport class OpenCageServerError extends OpenCageError {\n  constructor(message: string, statusCode?: number, apiStatus?: Status, request?: any) {\n    super({\n      type: OpenCageErrorType.SERVER_ERROR,\n      message: `Server error: ${message}`,\n      statusCode,\n      apiStatus,\n      request\n    });\n    this.name = 'OpenCageServerError';\n  }\n}\n\n/**\n * Timeout error\n */\nexport class OpenCageTimeoutError extends OpenCageError {\n  constructor(timeout: number, request?: any) {\n    super({\n      type: OpenCageErrorType.TIMEOUT_ERROR,\n      message: `Request timeout after ${timeout}ms`,\n      request\n    });\n    this.name = 'OpenCageTimeoutError';\n  }\n}\n\n/**\n * No results found error\n */\nexport class OpenCageNoResultsError extends OpenCageError {\n  constructor(query: string, request?: any) {\n    super({\n      type: OpenCageErrorType.NO_RESULTS,\n      message: `No results found for query: ${query}`,\n      request\n    });\n    this.name = 'OpenCageNoResultsError';\n  }\n}\n\n/**\n * Invalid API key error\n */\nexport class OpenCageInvalidApiKeyError extends OpenCageError {\n  constructor(request?: any) {\n    super({\n      type: OpenCageErrorType.INVALID_API_KEY,\n      message: 'Invalid API key provided',\n      statusCode: 401,\n      request\n    });\n    this.name = 'OpenCageInvalidApiKeyError';\n  }\n}\n\n/**\n * Quota exceeded error\n */\nexport class OpenCageQuotaExceededError extends OpenCageError {\n  constructor(rateLimit?: RateLimit, request?: any) {\n    super({\n      type: OpenCageErrorType.QUOTA_EXCEEDED,\n      message: 'API quota exceeded',\n      statusCode: 402,\n      rateLimit,\n      request\n    });\n    this.name = 'OpenCageQuotaExceededError';\n  }\n}\n\n/**\n * Factory function to create appropriate error from HTTP response\n */\nexport function createOpenCageError(\n  statusCode: number,\n  message: string,\n  apiStatus?: Status,\n  rateLimit?: RateLimit,\n  request?: any,\n  originalError?: any\n): OpenCageError {\n  switch (statusCode) {\n    case 400:\n      return new OpenCageRequestError(message || 'Bad request', statusCode, request);\n    case 401:\n      return new OpenCageInvalidApiKeyError(request);\n    case 402:\n      return new OpenCageQuotaExceededError(rateLimit, request);\n    case 403:\n      return new OpenCageAuthError(message || 'Forbidden', statusCode, request);\n    case 429:\n      return new OpenCageRateLimitError(message || 'Too many requests', rateLimit, statusCode, request);\n    case 408:\n      return new OpenCageTimeoutError(30000, request); // Default 30s timeout\n    default:\n      if (statusCode >= 500) {\n        return new OpenCageServerError(message || 'Internal server error', statusCode, apiStatus, request);\n      } else if (statusCode >= 400) {\n        return new OpenCageRequestError(message || 'Client error', statusCode, request);\n      } else {\n        return new OpenCageError({\n          type: OpenCageErrorType.UNKNOWN_ERROR,\n          message: message || 'Unknown error occurred',\n          statusCode,\n          apiStatus,\n          rateLimit,\n          originalError,\n          request\n        });\n      }\n  }\n}\n\n/**\n * Type guard to check if error is OpenCageError\n */\nexport function isOpenCageError(error: any): error is OpenCageError {\n  return error instanceof OpenCageError || \n         (error && error.name && error.name.startsWith('OpenCage') && error.type);\n}\n\n/**\n * Error handler utility functions\n */\nexport class OpenCageErrorHandler {\n  /**\n   * Log error with appropriate level\n   */\n  static logError(error: OpenCageError, logger?: Console): void {\n    const logLevel = this.getLogLevel(error.type);\n    const logFn = logger?.[logLevel] || console[logLevel];\n    \n    if (logFn) {\n      logFn.call(logger || console, `[OpenCage ${error.type}]`, error.message, error.getDetails());\n    }\n  }\n\n  /**\n   * Get appropriate log level for error type\n   */\n  private static getLogLevel(errorType: OpenCageErrorType): 'error' | 'warn' | 'info' {\n    switch (errorType) {\n      case OpenCageErrorType.NO_RESULTS:\n        return 'info';\n      case OpenCageErrorType.RATE_LIMIT_ERROR:\n      case OpenCageErrorType.TIMEOUT_ERROR:\n        return 'warn';\n      default:\n        return 'error';\n    }\n  }\n\n  /**\n   * Get user-friendly error message\n   */\n  static getUserFriendlyMessage(error: OpenCageError): string {\n    switch (error.type) {\n      case OpenCageErrorType.NETWORK_ERROR:\n        return 'Unable to connect to the geocoding service. Please check your internet connection.';\n      case OpenCageErrorType.AUTH_ERROR:\n      case OpenCageErrorType.INVALID_API_KEY:\n        return 'Invalid API credentials. Please check your API key.';\n      case OpenCageErrorType.RATE_LIMIT_ERROR:\n        return 'Too many requests. Please wait a moment before trying again.';\n      case OpenCageErrorType.QUOTA_EXCEEDED:\n        return 'API quota exceeded. Please upgrade your plan or wait for the quota to reset.';\n      case OpenCageErrorType.NO_RESULTS:\n        return 'No results found for your search query.';\n      case OpenCageErrorType.TIMEOUT_ERROR:\n        return 'Request timed out. Please try again.';\n      case OpenCageErrorType.REQUEST_ERROR:\n        return 'Invalid request. Please check your search parameters.';\n      case OpenCageErrorType.SERVER_ERROR:\n        return 'Service temporarily unavailable. Please try again later.';\n      default:\n        return 'An unexpected error occurred. Please try again.';\n    }\n  }\n}","/**\n * Configuration service for OpenCage Angular SDK\n * Handles API key, base URL, and other configuration options\n */\n\nimport { Injectable, InjectionToken, Optional, Inject } from '@angular/core';\nimport { OpenCageConfig } from '../models/opencage-types';\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_OPENCAGE_CONFIG: Partial<OpenCageConfig> = {\n  baseUrl: 'https://api.opencagedata.com/geocode/v1',\n  defaultLanguage: 'en',\n  enableCaching: true,\n  cacheTtl: 300000, // 5 minutes\n  enableRateLimit: true,\n  rateLimit: 10, // 10 requests per second\n  timeout: 10000, // 10 seconds\n  retryAttempts: 3,\n  retryDelay: 1000, // 1 second\n  debug: false\n};\n\n/**\n * Injection token for OpenCage configuration\n */\nexport const OPENCAGE_CONFIG_TOKEN = new InjectionToken<Partial<OpenCageConfig>>('OPENCAGE_CONFIG');\n\n/**\n * OpenCage configuration service\n * Manages SDK configuration and provides access to settings\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class OpenCageConfigService {\n  private config: OpenCageConfig;\n\n  constructor(\n    @Optional() @Inject(OPENCAGE_CONFIG_TOKEN) injectedConfig?: Partial<OpenCageConfig>\n  ) {\n    this.config = this.mergeConfigs(DEFAULT_OPENCAGE_CONFIG, injectedConfig || {});\n  }\n\n  /**\n   * Get current configuration\n   */\n  public getConfig(): OpenCageConfig {\n    return { ...this.config };\n  }\n\n  /**\n   * Update configuration\n   */\n  public updateConfig(newConfig: Partial<OpenCageConfig>): void {\n    this.config = this.mergeConfigs(this.config, newConfig);\n  }\n\n  /**\n   * Get API key\n   */\n  public getApiKey(): string {\n    if (!this.config.apiKey) {\n      throw new Error('OpenCage API key is required. Please provide it in configuration.');\n    }\n    return this.config.apiKey;\n  }\n\n  /**\n   * Set API key\n   */\n  public setApiKey(apiKey: string): void {\n    this.config.apiKey = apiKey;\n  }\n\n  /**\n   * Get base URL\n   */\n  public getBaseUrl(): string {\n    return this.config.baseUrl || DEFAULT_OPENCAGE_CONFIG.baseUrl!;\n  }\n\n  /**\n   * Get default language\n   */\n  public getDefaultLanguage(): string {\n    return this.config.defaultLanguage || DEFAULT_OPENCAGE_CONFIG.defaultLanguage!;\n  }\n\n  /**\n   * Check if caching is enabled\n   */\n  public isCachingEnabled(): boolean {\n    return this.config.enableCaching ?? DEFAULT_OPENCAGE_CONFIG.enableCaching!;\n  }\n\n  /**\n   * Get cache TTL\n   */\n  public getCacheTtl(): number {\n    return this.config.cacheTtl ?? DEFAULT_OPENCAGE_CONFIG.cacheTtl!;\n  }\n\n  /**\n   * Check if rate limiting is enabled\n   */\n  public isRateLimitEnabled(): boolean {\n    return this.config.enableRateLimit ?? DEFAULT_OPENCAGE_CONFIG.enableRateLimit!;\n  }\n\n  /**\n   * Get rate limit\n   */\n  public getRateLimit(): number {\n    return this.config.rateLimit ?? DEFAULT_OPENCAGE_CONFIG.rateLimit!;\n  }\n\n  /**\n   * Get timeout value\n   */\n  public getTimeout(): number {\n    return this.config.timeout ?? DEFAULT_OPENCAGE_CONFIG.timeout!;\n  }\n\n  /**\n   * Get retry attempts\n   */\n  public getRetryAttempts(): number {\n    return this.config.retryAttempts ?? DEFAULT_OPENCAGE_CONFIG.retryAttempts!;\n  }\n\n  /**\n   * Get retry delay\n   */\n  public getRetryDelay(): number {\n    return this.config.retryDelay ?? DEFAULT_OPENCAGE_CONFIG.retryDelay!;\n  }\n\n  /**\n   * Check if debug mode is enabled\n   */\n  public isDebugEnabled(): boolean {\n    return this.config.debug ?? DEFAULT_OPENCAGE_CONFIG.debug!;\n  }\n\n  /**\n   * Validate configuration\n   */\n  public validateConfig(): { valid: boolean; errors: string[] } {\n    const errors: string[] = [];\n\n    if (!this.config.apiKey) {\n      errors.push('API key is required');\n    }\n\n    if (this.config.apiKey && typeof this.config.apiKey !== 'string') {\n      errors.push('API key must be a string');\n    }\n\n    if (this.config.baseUrl && typeof this.config.baseUrl !== 'string') {\n      errors.push('Base URL must be a string');\n    }\n\n    if (this.config.timeout && (typeof this.config.timeout !== 'number' || this.config.timeout <= 0)) {\n      errors.push('Timeout must be a positive number');\n    }\n\n    if (this.config.rateLimit && (typeof this.config.rateLimit !== 'number' || this.config.rateLimit <= 0)) {\n      errors.push('Rate limit must be a positive number');\n    }\n\n    if (this.config.cacheTtl && (typeof this.config.cacheTtl !== 'number' || this.config.cacheTtl <= 0)) {\n      errors.push('Cache TTL must be a positive number');\n    }\n\n    if (this.config.retryAttempts && (typeof this.config.retryAttempts !== 'number' || this.config.retryAttempts < 0)) {\n      errors.push('Retry attempts must be a non-negative number');\n    }\n\n    if (this.config.retryDelay && (typeof this.config.retryDelay !== 'number' || this.config.retryDelay < 0)) {\n      errors.push('Retry delay must be a non-negative number');\n    }\n\n    return {\n      valid: errors.length === 0,\n      errors\n    };\n  }\n\n  /**\n   * Create URL with query parameters\n   */\n  public buildUrl(endpoint: string, params: Record<string, any> = {}): string {\n    const baseUrl = this.getBaseUrl();\n    const url = new URL(`${baseUrl}/${endpoint}`);\n    \n    // Add API key\n    url.searchParams.set('key', this.getApiKey());\n    \n    // Add other parameters\n    Object.entries(params).forEach(([key, value]) => {\n      if (value !== undefined && value !== null) {\n        if (Array.isArray(value)) {\n          url.searchParams.set(key, value.join(','));\n        } else {\n          url.searchParams.set(key, String(value));\n        }\n      }\n    });\n\n    return url.toString();\n  }\n\n  /**\n   * Get HTTP headers\n   */\n  public getHeaders(): Record<string, string> {\n    const headers: Record<string, string> = {\n      'Content-Type': 'application/json',\n      'User-Agent': `OpenCage-Angular-SDK/1.0.0`\n    };\n\n    return headers;\n  }\n\n  /**\n   * Create configuration for environment\n   */\n  public static forEnvironment(environment: 'development' | 'production' | 'test'): Partial<OpenCageConfig> {\n    const baseConfig = { ...DEFAULT_OPENCAGE_CONFIG };\n\n    switch (environment) {\n      case 'development':\n        return {\n          ...baseConfig,\n          debug: true,\n          timeout: 15000,\n          retryAttempts: 1\n        };\n      case 'production':\n        return {\n          ...baseConfig,\n          debug: false,\n          timeout: 5000,\n          retryAttempts: 3\n        };\n      case 'test':\n        return {\n          ...baseConfig,\n          debug: true,\n          enableCaching: false,\n          timeout: 1000,\n          retryAttempts: 0\n        };\n      default:\n        return baseConfig;\n    }\n  }\n\n  /**\n   * Merge configuration objects\n   */\n  private mergeConfigs(...configs: Partial<OpenCageConfig>[]): OpenCageConfig {\n    const merged: any = {};\n    \n    configs.forEach(config => {\n      if (config) {\n        Object.keys(config).forEach(key => {\n          if (config[key as keyof OpenCageConfig] !== undefined) {\n            merged[key] = config[key as keyof OpenCageConfig];\n          }\n        });\n      }\n    });\n\n    return merged as OpenCageConfig;\n  }\n}\n\n/**\n * Provider factory for OpenCage configuration\n */\nexport function provideOpenCageConfig(config: Partial<OpenCageConfig>) {\n  return {\n    provide: OPENCAGE_CONFIG_TOKEN,\n    useValue: config\n  };\n}","/**\n * Caching service for OpenCage Angular SDK\n * Provides in-memory caching with TTL support and LRU eviction\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { CacheEntry } from '../models/opencage-types';\n\n/**\n * Cache service for geocoding responses\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class OpenCageCacheService {\n  private cache = new Map<string, CacheEntry<any>>();\n  private accessOrder = new Map<string, number>();\n  private maxSize = 1000; // Maximum number of cache entries\n  private accessCounter = 0;\n\n  /**\n   * Get item from cache\n   */\n  public get<T>(key: string): T | null {\n    const entry = this.cache.get(key);\n    \n    if (!entry) {\n      return null;\n    }\n\n    // Check if entry has expired\n    const now = Date.now();\n    if (now - entry.timestamp > entry.ttl) {\n      this.delete(key);\n      return null;\n    }\n\n    // Update access order for LRU\n    this.accessOrder.set(key, ++this.accessCounter);\n    \n    return entry.data;\n  }\n\n  /**\n   * Set item in cache\n   */\n  public set<T>(key: string, data: T, ttl: number): void {\n    // Ensure cache size doesn't exceed maximum\n    if (this.cache.size >= this.maxSize) {\n      this.evictLRU();\n    }\n\n    const entry: CacheEntry<T> = {\n      data,\n      timestamp: Date.now(),\n      ttl\n    };\n\n    this.cache.set(key, entry);\n    this.accessOrder.set(key, ++this.accessCounter);\n  }\n\n  /**\n   * Delete item from cache\n   */\n  public delete(key: string): boolean {\n    this.accessOrder.delete(key);\n    return this.cache.delete(key);\n  }\n\n  /**\n   * Clear all cache entries\n   */\n  public clear(): void {\n    this.cache.clear();\n    this.accessOrder.clear();\n    this.accessCounter = 0;\n  }\n\n  /**\n   * Check if key exists in cache (and is not expired)\n   */\n  public has(key: string): boolean {\n    return this.get(key) !== null;\n  }\n\n  /**\n   * Get cache statistics\n   */\n  public getStats(): {\n    size: number;\n    maxSize: number;\n    hitRate: number;\n    memoryUsage: number;\n  } {\n    return {\n      size: this.cache.size,\n      maxSize: this.maxSize,\n      hitRate: this.calculateHitRate(),\n      memoryUsage: this.estimateMemoryUsage()\n    };\n  }\n\n  /**\n   * Clean expired entries\n   */\n  public cleanup(): number {\n    const now = Date.now();\n    let cleanedCount = 0;\n\n    for (const [key, entry] of this.cache.entries()) {\n      if (now - entry.timestamp > entry.ttl) {\n        this.cache.delete(key);\n        this.accessOrder.delete(key);\n        cleanedCount++;\n      }\n    }\n\n    return cleanedCount;\n  }\n\n  /**\n   * Set maximum cache size\n   */\n  public setMaxSize(size: number): void {\n    this.maxSize = Math.max(1, size);\n    \n    // Evict entries if current size exceeds new max size\n    while (this.cache.size > this.maxSize) {\n      this.evictLRU();\n    }\n  }\n\n  /**\n   * Get or set with observable support\n   */\n  public getOrSet<T>(\n    key: string, \n    factory: () => Observable<T>, \n    ttl: number\n  ): Observable<T> {\n    const cached = this.get<T>(key);\n    \n    if (cached !== null) {\n      return of(cached);\n    }\n\n    return factory().pipe(\n      tap(data => this.set(key, data, ttl))\n    );\n  }\n\n  /**\n   * Create cache key for geocoding requests\n   */\n  public createKey(query: string, options: any = {}): string {\n    const normalizedQuery = query.trim().toLowerCase();\n    const sortedOptions = this.sortObject(options);\n    return `geocode:${normalizedQuery}:${JSON.stringify(sortedOptions)}`;\n  }\n\n  /**\n   * Create cache key for reverse geocoding requests\n   */\n  public createReverseKey(lat: number, lng: number, options: any = {}): string {\n    const coords = `${lat.toFixed(6)},${lng.toFixed(6)}`;\n    const sortedOptions = this.sortObject(options);\n    return `reverse:${coords}:${JSON.stringify(sortedOptions)}`;\n  }\n\n  /**\n   * Evict least recently used entry\n   */\n  private evictLRU(): void {\n    if (this.accessOrder.size === 0) {\n      return;\n    }\n\n    let lruKey = '';\n    let lruAccess = Number.MAX_SAFE_INTEGER;\n\n    for (const [key, access] of this.accessOrder.entries()) {\n      if (access < lruAccess) {\n        lruAccess = access;\n        lruKey = key;\n      }\n    }\n\n    if (lruKey) {\n      this.delete(lruKey);\n    }\n  }\n\n  /**\n   * Calculate cache hit rate (simplified)\n   */\n  private calculateHitRate(): number {\n    // This is a simplified calculation\n    // In a real implementation, you'd track hits/misses\n    return this.cache.size > 0 ? 0.8 : 0;\n  }\n\n  /**\n   * Estimate memory usage (simplified)\n   */\n  private estimateMemoryUsage(): number {\n    // Simplified memory estimation\n    let totalSize = 0;\n    \n    for (const [key, entry] of this.cache.entries()) {\n      totalSize += key.length * 2; // UTF-16 encoding\n      totalSize += JSON.stringify(entry).length * 2;\n    }\n\n    return totalSize;\n  }\n\n  /**\n   * Sort object keys for consistent cache keys\n   */\n  private sortObject(obj: any): any {\n    if (obj === null || typeof obj !== 'object') {\n      return obj;\n    }\n\n    if (Array.isArray(obj)) {\n      return obj.map(item => this.sortObject(item));\n    }\n\n    const sortedObj: any = {};\n    const keys = Object.keys(obj).sort();\n    \n    keys.forEach(key => {\n      sortedObj[key] = this.sortObject(obj[key]);\n    });\n\n    return sortedObj;\n  }\n\n  /**\n   * Periodic cleanup task\n   */\n  public startPeriodicCleanup(intervalMs: number = 300000): void {\n    setInterval(() => {\n      this.cleanup();\n    }, intervalMs);\n  }\n}","/**\n * Rate limiting service for OpenCage Angular SDK\n * Implements token bucket algorithm with backoff strategies\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject, timer, defer } from 'rxjs';\nimport { delay, mergeMap, tap } from 'rxjs/operators';\n\n/**\n * Rate limiter configuration\n */\nexport interface RateLimiterConfig {\n  /** Requests per second */\n  rps: number;\n  /** Burst capacity */\n  burst?: number;\n  /** Backoff strategy */\n  backoffStrategy?: 'linear' | 'exponential' | 'fixed';\n  /** Initial backoff delay in milliseconds */\n  initialDelay?: number;\n  /** Maximum backoff delay in milliseconds */\n  maxDelay?: number;\n  /** Backoff multiplier for exponential strategy */\n  backoffMultiplier?: number;\n}\n\n/**\n * Token bucket for rate limiting\n */\nclass TokenBucket {\n  private tokens: number;\n  private lastRefill: number;\n  private readonly capacity: number;\n  private readonly refillRate: number; // tokens per millisecond\n\n  constructor(capacity: number, refillRate: number) {\n    this.capacity = capacity;\n    this.refillRate = refillRate;\n    this.tokens = capacity;\n    this.lastRefill = Date.now();\n  }\n\n  /**\n   * Try to consume a token\n   */\n  public consume(): boolean {\n    this.refill();\n    \n    if (this.tokens >= 1) {\n      this.tokens -= 1;\n      return true;\n    }\n    \n    return false;\n  }\n\n  /**\n   * Get available tokens\n   */\n  public getAvailableTokens(): number {\n    this.refill();\n    return Math.floor(this.tokens);\n  }\n\n  /**\n   * Get time until next token is available\n   */\n  public getTimeUntilToken(): number {\n    this.refill();\n    \n    if (this.tokens >= 1) {\n      return 0;\n    }\n    \n    return Math.ceil((1 - this.tokens) / this.refillRate);\n  }\n\n  /**\n   * Refill tokens based on elapsed time\n   */\n  private refill(): void {\n    const now = Date.now();\n    const elapsed = now - this.lastRefill;\n    const tokensToAdd = elapsed * this.refillRate;\n    \n    this.tokens = Math.min(this.capacity, this.tokens + tokensToAdd);\n    this.lastRefill = now;\n  }\n}\n\n/**\n * Rate limiting service\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class OpenCageRateLimiterService {\n  private tokenBucket: TokenBucket;\n  private config: Required<RateLimiterConfig>;\n  private requestQueue: Array<() => void> = [];\n  private isProcessingQueue = false;\n\n  constructor() {\n    // Default configuration\n    this.config = {\n      rps: 10,\n      burst: 10,\n      backoffStrategy: 'exponential',\n      initialDelay: 1000,\n      maxDelay: 30000,\n      backoffMultiplier: 2\n    };\n\n    this.tokenBucket = new TokenBucket(\n      this.config.burst,\n      this.config.rps / 1000 // Convert to tokens per millisecond\n    );\n  }\n\n  /**\n   * Configure rate limiter\n   */\n  public configure(config: Partial<RateLimiterConfig>): void {\n    this.config = { ...this.config, ...config };\n    \n    // Create new token bucket with updated configuration\n    this.tokenBucket = new TokenBucket(\n      this.config.burst,\n      this.config.rps / 1000\n    );\n  }\n\n  /**\n   * Execute request with rate limiting\n   */\n  public execute<T>(requestFn: () => Observable<T>): Observable<T> {\n    return defer(() => {\n      if (this.tokenBucket.consume()) {\n        // Token available, execute immediately\n        return requestFn();\n      } else {\n        // No token available, queue the request\n        return this.queueRequest(requestFn);\n      }\n    });\n  }\n\n  /**\n   * Get rate limiter statistics\n   */\n  public getStats(): {\n    availableTokens: number;\n    queueLength: number;\n    timeUntilToken: number;\n    requestsPerSecond: number;\n  } {\n    return {\n      availableTokens: this.tokenBucket.getAvailableTokens(),\n      queueLength: this.requestQueue.length,\n      timeUntilToken: this.tokenBucket.getTimeUntilToken(),\n      requestsPerSecond: this.config.rps\n    };\n  }\n\n  /**\n   * Reset rate limiter\n   */\n  public reset(): void {\n    this.tokenBucket = new TokenBucket(\n      this.config.burst,\n      this.config.rps / 1000\n    );\n    this.requestQueue = [];\n    this.isProcessingQueue = false;\n  }\n\n  /**\n   * Handle rate limit error with backoff\n   */\n  public handleRateLimit<T>(\n    requestFn: () => Observable<T>,\n    attempt: number = 0\n  ): Observable<T> {\n    const backoffDelay = this.calculateBackoffDelay(attempt);\n    \n    return timer(backoffDelay).pipe(\n      mergeMap(() => {\n        if (this.tokenBucket.consume()) {\n          return requestFn();\n        } else {\n          // Still rate limited, try again with increased backoff\n          return this.handleRateLimit(requestFn, attempt + 1);\n        }\n      })\n    );\n  }\n\n  /**\n   * Queue request for later execution\n   */\n  private queueRequest<T>(requestFn: () => Observable<T>): Observable<T> {\n    return new Observable<T>(subscriber => {\n      const queueItem = () => {\n        requestFn().subscribe({\n          next: value => subscriber.next(value),\n          error: error => subscriber.error(error),\n          complete: () => subscriber.complete()\n        });\n      };\n\n      this.requestQueue.push(queueItem);\n      this.processQueue();\n\n      // Return unsubscribe function\n      return () => {\n        const index = this.requestQueue.indexOf(queueItem);\n        if (index > -1) {\n          this.requestQueue.splice(index, 1);\n        }\n      };\n    });\n  }\n\n  /**\n   * Process queued requests\n   */\n  private processQueue(): void {\n    if (this.isProcessingQueue || this.requestQueue.length === 0) {\n      return;\n    }\n\n    this.isProcessingQueue = true;\n\n    const processNext = () => {\n      if (this.requestQueue.length === 0) {\n        this.isProcessingQueue = false;\n        return;\n      }\n\n      if (this.tokenBucket.consume()) {\n        const requestFn = this.requestQueue.shift();\n        if (requestFn) {\n          requestFn();\n        }\n        // Process next request immediately if tokens are available\n        setTimeout(processNext, 0);\n      } else {\n        // Wait for token to become available\n        const waitTime = this.tokenBucket.getTimeUntilToken();\n        setTimeout(processNext, waitTime);\n      }\n    };\n\n    processNext();\n  }\n\n  /**\n   * Calculate backoff delay based on strategy\n   */\n  private calculateBackoffDelay(attempt: number): number {\n    let delay: number;\n\n    switch (this.config.backoffStrategy) {\n      case 'linear':\n        delay = this.config.initialDelay + (attempt * this.config.initialDelay);\n        break;\n      case 'exponential':\n        delay = this.config.initialDelay * Math.pow(this.config.backoffMultiplier, attempt);\n        break;\n      case 'fixed':\n      default:\n        delay = this.config.initialDelay;\n        break;\n    }\n\n    // Add jitter to prevent thundering herd\n    const jitter = Math.random() * 0.1 * delay;\n    delay += jitter;\n\n    return Math.min(delay, this.config.maxDelay);\n  }\n}\n\n/**\n * Rate limiter decorator for methods\n */\nexport function RateLimit(rps: number = 10) {\n  return function (target: any, propertyName: string, descriptor: PropertyDescriptor) {\n    const method = descriptor.value;\n\n    descriptor.value = function (...args: any[]) {\n      const rateLimiter = new OpenCageRateLimiterService();\n      rateLimiter.configure({ rps });\n\n      return rateLimiter.execute(() => method.apply(this, args));\n    };\n  };\n}\n\n/**\n * Rate limiter operator for observables\n */\nexport function rateLimit<T>(rps: number = 10) {\n  return (source: Observable<T>): Observable<T> => {\n    const rateLimiter = new OpenCageRateLimiterService();\n    rateLimiter.configure({ rps });\n\n    return defer(() => rateLimiter.execute(() => source));\n  };\n}","/**\n * Main OpenCage Geocoding Service\n * Provides forward and reverse geocoding with comprehensive error handling,\n * caching, rate limiting, and reactive programming support\n */\n\nimport { Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Observable, throwError, timer, EMPTY, defer, from } from 'rxjs';\nimport { \n  map, \n  catchError, \n  retry, \n  timeout, \n  tap, \n  shareReplay,\n  mergeMap,\n  concatMap,\n  switchMap,\n  reduce\n} from 'rxjs/operators';\n\nimport {\n  GeocodingResponse,\n  GeocodingResult,\n  ForwardGeocodingOptions,\n  ReverseGeocodingOptions,\n  BatchGeocodingRequest,\n  BatchGeocodingResponse,\n  Coordinates,\n  OpenCageConfig\n} from '../models/opencage-types';\n\nimport {\n  OpenCageError,\n  createOpenCageError,\n  OpenCageNetworkError,\n  OpenCageTimeoutError,\n  OpenCageNoResultsError,\n  isOpenCageError\n} from '../models/opencage-error';\n\nimport { OpenCageConfigService } from './opencage-config.service';\nimport { OpenCageCacheService } from './opencage-cache.service';\nimport { OpenCageRateLimiterService } from './opencage-rate-limiter.service';\n\n/**\n * Main OpenCage Geocoding Service\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class OpenCageService {\n  \n  constructor(\n    private http: HttpClient,\n    private configService: OpenCageConfigService,\n    private cacheService: OpenCageCacheService,\n    private rateLimiter: OpenCageRateLimiterService\n  ) {\n    // Configure rate limiter based on config\n    const config = this.configService.getConfig();\n    if (config.enableRateLimit) {\n      this.rateLimiter.configure({\n        rps: config.rateLimit || 10,\n        backoffStrategy: 'exponential'\n      });\n    }\n  }\n\n  /**\n   * Forward geocoding - convert address to coordinates\n   */\n  public geocode(\n    query: string, \n    options: ForwardGeocodingOptions = {}\n  ): Observable<GeocodingResponse> {\n    if (!query || query.trim().length === 0) {\n      return throwError(() => new OpenCageError({\n        type: 'REQUEST_ERROR' as any,\n        message: 'Query string cannot be empty'\n      }));\n    }\n\n    const normalizedQuery = query.trim();\n    const mergedOptions = this.mergeWithDefaults(options);\n    \n    // Check cache first\n    if (this.configService.isCachingEnabled()) {\n      const cacheKey = this.cacheService.createKey(normalizedQuery, mergedOptions);\n      const cached = this.cacheService.get<GeocodingResponse>(cacheKey);\n      \n      if (cached) {\n        return new Observable(subscriber => {\n          subscriber.next(cached);\n          subscriber.complete();\n        });\n      }\n    }\n\n    return this.executeRequest('json', normalizedQuery, mergedOptions)\n      .pipe(\n        tap(response => {\n          // Cache the response\n          if (this.configService.isCachingEnabled()) {\n            const cacheKey = this.cacheService.createKey(normalizedQuery, mergedOptions);\n            this.cacheService.set(cacheKey, response, this.configService.getCacheTtl());\n          }\n        }),\n        shareReplay(1)\n      );\n  }\n\n  /**\n   * Reverse geocoding - convert coordinates to address\n   */\n  public reverseGeocode(\n    coordinates: Coordinates,\n    options: ReverseGeocodingOptions = {}\n  ): Observable<GeocodingResponse> {\n    this.validateCoordinates(coordinates);\n\n    const { lat, lng } = coordinates;\n    const query = `${lat},${lng}`;\n    const mergedOptions = this.mergeWithDefaults(options);\n\n    // Check cache first\n    if (this.configService.isCachingEnabled()) {\n      const cacheKey = this.cacheService.createReverseKey(lat, lng, mergedOptions);\n      const cached = this.cacheService.get<GeocodingResponse>(cacheKey);\n      \n      if (cached) {\n        return new Observable(subscriber => {\n          subscriber.next(cached);\n          subscriber.complete();\n        });\n      }\n    }\n\n    return this.executeRequest('json', query, mergedOptions)\n      .pipe(\n        tap(response => {\n          // Cache the response\n          if (this.configService.isCachingEnabled()) {\n            const cacheKey = this.cacheService.createReverseKey(lat, lng, mergedOptions);\n            this.cacheService.set(cacheKey, response, this.configService.getCacheTtl());\n          }\n        }),\n        shareReplay(1)\n      );\n  }\n\n  /**\n   * Get first result from geocoding\n   */\n  public geocodeFirst(\n    query: string,\n    options: ForwardGeocodingOptions = {}\n  ): Observable<GeocodingResult | null> {\n    return this.geocode(query, { ...options, limit: 1 })\n      .pipe(\n        map(response => response.results.length > 0 ? response.results[0] : null)\n      );\n  }\n\n  /**\n   * Get first result from reverse geocoding\n   */\n  public reverseGeocodeFirst(\n    coordinates: Coordinates,\n    options: ReverseGeocodingOptions = {}\n  ): Observable<GeocodingResult | null> {\n    return this.reverseGeocode(coordinates, options)\n      .pipe(\n        map(response => response.results.length > 0 ? response.results[0] : null)\n      );\n  }\n\n  /**\n   * Batch geocoding with sequential processing\n   */\n  public batchGeocode(\n    requests: BatchGeocodingRequest[]\n  ): Observable<BatchGeocodingResponse> {\n    if (!requests || requests.length === 0) {\n      return throwError(() => new OpenCageError({\n        type: 'REQUEST_ERROR' as any,\n        message: 'Batch requests cannot be empty'\n      }));\n    }\n\n    const startTime = Date.now();\n\n    return from(requests).pipe(\n      concatMap((request, index) => \n        this.geocode(request.query, request.options).pipe(\n          catchError(error => {\n            // Return error response instead of throwing\n            return new Observable<GeocodingResponse>(subscriber => {\n              const errorResponse: GeocodingResponse = {\n                documentation: '',\n                results: [],\n                status: { code: 400, message: error.message || 'Error occurred' },\n                stay_updated: '',\n                thanks: '',\n                timestamp: { created_http: new Date().toISOString(), created_unix: Date.now() / 1000 },\n                total_results: 0\n              };\n              subscriber.next(errorResponse);\n              subscriber.complete();\n            });\n          }),\n          tap(() => {\n            if (this.configService.isDebugEnabled()) {\n              console.debug(`[OpenCage] Batch request ${index + 1}/${requests.length} completed`);\n            }\n          })\n        )\n      ),\n      // Collect all responses\n      reduce((acc: GeocodingResponse[], response: GeocodingResponse) => [...acc, response], [] as GeocodingResponse[]),\n      map(responses => ({\n        responses,\n        metadata: {\n          total_requests: requests.length,\n          processing_time: Date.now() - startTime\n        }\n      } as BatchGeocodingResponse))\n    );\n  }\n\n  /**\n   * Stream geocoding results as they arrive\n   */\n  public streamGeocode(\n    queries: string[],\n    options: ForwardGeocodingOptions = {}\n  ): Observable<{ query: string; response: GeocodingResponse; index: number }> {\n    return from(queries).pipe(\n      mergeMap((query, index) =>\n        this.geocode(query, options).pipe(\n          map(response => ({ query, response, index }))\n        )\n      )\n    );\n  }\n\n  /**\n   * Promise-based interface for geocoding\n   */\n  public geocodePromise(\n    query: string,\n    options: ForwardGeocodingOptions = {}\n  ): Promise<GeocodingResponse> {\n    return this.geocode(query, options).toPromise() as Promise<GeocodingResponse>;\n  }\n\n  /**\n   * Promise-based interface for reverse geocoding\n   */\n  public reverseGeocodePromise(\n    coordinates: Coordinates,\n    options: ReverseGeocodingOptions = {}\n  ): Promise<GeocodingResponse> {\n    return this.reverseGeocode(coordinates, options).toPromise() as Promise<GeocodingResponse>;\n  }\n\n  /**\n   * Execute HTTP request with error handling and retries\n   */\n  private executeRequest(\n    format: string,\n    query: string,\n    options: any\n  ): Observable<GeocodingResponse> {\n    const url = this.configService.buildUrl(format, { q: query, ...options });\n    const headers = new HttpHeaders(this.configService.getHeaders());\n\n    const request$ = this.http.get<GeocodingResponse>(url, { headers }).pipe(\n      timeout(this.configService.getTimeout()),\n      catchError((error: HttpErrorResponse) => this.handleHttpError(error, query, options))\n    );\n\n    // Apply rate limiting if enabled\n    const rateLimitedRequest$ = this.configService.isRateLimitEnabled()\n      ? this.rateLimiter.execute(() => request$)\n      : request$;\n\n    return rateLimitedRequest$.pipe(\n      retry({\n        count: this.configService.getRetryAttempts(),\n        delay: (error, retryIndex) => {\n          if (isOpenCageError(error) && error.isRetryable()) {\n            const delay = error.getRetryDelay() || (retryIndex * this.configService.getRetryDelay());\n            if (this.configService.isDebugEnabled()) {\n              console.debug(`[OpenCage] Retrying request in ${delay}ms (attempt ${retryIndex + 1})`);\n            }\n            return timer(delay);\n          }\n          return throwError(() => error);\n        }\n      }),\n      tap(response => {\n        if (this.configService.isDebugEnabled()) {\n          console.debug('[OpenCage] Request completed:', { query, options, results: response.total_results });\n        }\n\n        // Check if no results found\n        if (response.results.length === 0) {\n          throw new OpenCageNoResultsError(query, { query, options });\n        }\n      })\n    );\n  }\n\n  /**\n   * Handle HTTP errors and convert to OpenCage errors\n   */\n  private handleHttpError(\n    error: HttpErrorResponse,\n    query: string,\n    options: any\n  ): Observable<never> {\n    if (this.configService.isDebugEnabled()) {\n      console.error('[OpenCage] HTTP Error:', error);\n    }\n\n    let openCageError: OpenCageError;\n\n    if (error.status === 0) {\n      // Network error\n      openCageError = new OpenCageNetworkError(\n        'Unable to connect to OpenCage API',\n        error,\n        { query, options }\n      );\n    } else if (error.message?.includes('timeout') || error.message?.includes('Timeout')) {\n      // Timeout error\n      openCageError = new OpenCageTimeoutError(\n        this.configService.getTimeout(),\n        { query, options }\n      );\n    } else {\n      // API error\n      const apiResponse = error.error as any;\n      openCageError = createOpenCageError(\n        error.status,\n        apiResponse?.status?.message || error.message,\n        apiResponse?.status,\n        apiResponse?.rate,\n        { query, options },\n        error\n      );\n    }\n\n    return throwError(() => openCageError);\n  }\n\n  /**\n   * Validate coordinates\n   */\n  private validateCoordinates(coordinates: Coordinates): void {\n    if (!coordinates) {\n      throw new Error('Coordinates are required');\n    }\n\n    const { lat, lng } = coordinates;\n\n    if (typeof lat !== 'number' || typeof lng !== 'number') {\n      throw new Error('Latitude and longitude must be numbers');\n    }\n\n    if (lat < -90 || lat > 90) {\n      throw new Error('Latitude must be between -90 and 90');\n    }\n\n    if (lng < -180 || lng > 180) {\n      throw new Error('Longitude must be between -180 and 180');\n    }\n  }\n\n  /**\n   * Merge options with defaults\n   */\n  private mergeWithDefaults(options: any): any {\n    const defaults = {\n      language: this.configService.getDefaultLanguage(),\n      pretty: this.configService.isDebugEnabled() ? 1 : 0\n    };\n\n    return { ...defaults, ...options };\n  }\n}\n\n// Re-export commonly used functions and operators\nexport { reduce } from 'rxjs/operators';","/**\n * HTTP Interceptor for OpenCage API requests\n * Handles API key injection, error handling, and request/response logging\n */\n\nimport { Injectable } from '@angular/core';\nimport {\n  HttpInterceptor,\n  HttpRequest,\n  HttpHandler,\n  HttpEvent,\n  HttpResponse,\n  HttpErrorResponse\n} from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { tap, catchError, finalize } from 'rxjs/operators';\n\nimport { OpenCageConfigService } from '../services/opencage-config.service';\nimport { createOpenCageError } from '../models/opencage-error';\n\n/**\n * OpenCage HTTP Interceptor\n * Automatically handles API key injection and standardized error handling\n */\n@Injectable()\nexport class OpenCageInterceptor implements HttpInterceptor {\n  \n  constructor(private configService: OpenCageConfigService) {}\n\n  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n    // Only intercept requests to OpenCage API\n    if (!this.isOpenCageRequest(req)) {\n      return next.handle(req);\n    }\n\n    const startTime = Date.now();\n    let modifiedRequest = req;\n\n    try {\n      // Clone and modify the request\n      modifiedRequest = this.addApiKey(req);\n      modifiedRequest = this.addHeaders(modifiedRequest);\n      modifiedRequest = this.addUserAgent(modifiedRequest);\n\n      if (this.configService.isDebugEnabled()) {\n        console.debug('[OpenCage Interceptor] Request:', {\n          url: modifiedRequest.url,\n          method: modifiedRequest.method,\n          headers: modifiedRequest.headers.keys()\n        });\n      }\n\n    } catch (error) {\n      return throwError(() => error);\n    }\n\n    return next.handle(modifiedRequest).pipe(\n      tap(event => {\n        if (event instanceof HttpResponse) {\n          const duration = Date.now() - startTime;\n          \n          if (this.configService.isDebugEnabled()) {\n            console.debug('[OpenCage Interceptor] Response:', {\n              status: event.status,\n              duration: `${duration}ms`,\n              url: req.url\n            });\n          }\n\n          // Log rate limit information if available\n          this.logRateLimit(event);\n        }\n      }),\n      catchError((error: HttpErrorResponse) => {\n        const duration = Date.now() - startTime;\n\n        if (this.configService.isDebugEnabled()) {\n          console.error('[OpenCage Interceptor] Error:', {\n            status: error.status,\n            message: error.message,\n            duration: `${duration}ms`,\n            url: req.url\n          });\n        }\n\n        // Convert HTTP error to OpenCage error\n        const apiResponse = error.error as any;\n        const openCageError = createOpenCageError(\n          error.status,\n          apiResponse?.status?.message || error.message,\n          apiResponse?.status,\n          apiResponse?.rate,\n          {\n            url: req.url,\n            method: req.method,\n            body: req.body\n          },\n          error\n        );\n\n        return throwError(() => openCageError);\n      }),\n      finalize(() => {\n        // Cleanup or additional logging if needed\n        const duration = Date.now() - startTime;\n        if (duration > 5000 && this.configService.isDebugEnabled()) {\n          console.warn(`[OpenCage Interceptor] Slow request detected: ${duration}ms`);\n        }\n      })\n    );\n  }\n\n  /**\n   * Check if request is to OpenCage API\n   */\n  private isOpenCageRequest(req: HttpRequest<any>): boolean {\n    const baseUrl = this.configService.getBaseUrl();\n    return req.url.startsWith(baseUrl) || req.url.includes('opencagedata.com');\n  }\n\n  /**\n   * Add API key to request\n   */\n  private addApiKey(req: HttpRequest<any>): HttpRequest<any> {\n    try {\n      const apiKey = this.configService.getApiKey();\n      \n      // Check if API key is already in the URL\n      const url = new URL(req.url);\n      if (!url.searchParams.has('key')) {\n        url.searchParams.set('key', apiKey);\n        \n        return req.clone({\n          url: url.toString()\n        });\n      }\n      \n      return req;\n    } catch (error) {\n      throw new Error(`Failed to add API key: ${error}`);\n    }\n  }\n\n  /**\n   * Add standard headers\n   */\n  private addHeaders(req: HttpRequest<any>): HttpRequest<any> {\n    const headers = this.configService.getHeaders();\n    \n    return req.clone({\n      setHeaders: headers\n    });\n  }\n\n  /**\n   * Add User-Agent header\n   */\n  private addUserAgent(req: HttpRequest<any>): HttpRequest<any> {\n    const userAgent = this.getUserAgent();\n    \n    return req.clone({\n      setHeaders: {\n        'User-Agent': userAgent\n      }\n    });\n  }\n\n  /**\n   * Get User-Agent string\n   */\n  private getUserAgent(): string {\n    const sdkVersion = '1.0.0'; // This would be dynamically injected in production\n    const angularVersion = this.getAngularVersion();\n    const browserInfo = this.getBrowserInfo();\n    \n    return `OpenCage-Angular-SDK/${sdkVersion} (Rome Stone) Angular/${angularVersion} ${browserInfo}`;\n  }\n\n  /**\n   * Get Angular version (simplified)\n   */\n  private getAngularVersion(): string {\n    // In a real implementation, this would be injected from package.json\n    return '15.0.0';\n  }\n\n  /**\n   * Get browser information\n   */\n  private getBrowserInfo(): string {\n    if (typeof window !== 'undefined' && window.navigator) {\n      const nav = window.navigator;\n      const userAgent = nav.userAgent;\n      \n      // Simplified browser detection\n      if (userAgent.includes('Chrome')) {\n        return 'Chrome';\n      } else if (userAgent.includes('Firefox')) {\n        return 'Firefox';\n      } else if (userAgent.includes('Safari')) {\n        return 'Safari';\n      } else if (userAgent.includes('Edge')) {\n        return 'Edge';\n      }\n    }\n    \n    return 'Unknown';\n  }\n\n  /**\n   * Log rate limit information\n   */\n  private logRateLimit(response: HttpResponse<any>): void {\n    const data = response.body;\n    \n    if (data && data.rate) {\n      const { limit, remaining, reset } = data.rate;\n      \n      if (this.configService.isDebugEnabled()) {\n        console.debug('[OpenCage Interceptor] Rate Limit:', {\n          limit,\n          remaining,\n          reset: new Date(reset * 1000).toISOString(),\n          resetIn: `${reset * 1000 - Date.now()}ms`\n        });\n      }\n\n      // Warn if rate limit is getting low\n      if (remaining < limit * 0.1) {\n        console.warn(`[OpenCage Interceptor] Rate limit warning: ${remaining}/${limit} remaining`);\n      }\n    }\n  }\n}\n\n/**\n * Provider for OpenCage interceptor\n */\nexport const openCageInterceptorProvider = {\n  provide: 'HTTP_INTERCEPTORS',\n  useClass: OpenCageInterceptor,\n  multi: true\n};","/**\n * Coordinate formatting pipe\n * Formats coordinates in various formats (decimal, DMS, etc.)\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { Coordinates } from '../models/opencage-types';\n\nexport type CoordinateFormat = 'decimal' | 'dms' | 'dm' | 'utm' | 'mgrs';\n\n/**\n * Pipe to format coordinates in different formats\n * \n * Usage:\n * {{ coordinates | coordinateFormat }}\n * {{ coordinates | coordinateFormat:'dms' }}\n * {{ coordinates | coordinateFormat:'decimal':4 }}\n */\n@Pipe({\n  name: 'coordinateFormat',\n  standalone: true\n})\nexport class CoordinateFormatPipe implements PipeTransform {\n\n  transform(\n    coordinates: Coordinates | null | undefined,\n    format: CoordinateFormat = 'decimal',\n    precision: number = 6\n  ): string {\n    if (!coordinates) {\n      return '';\n    }\n\n    const { lat, lng } = coordinates;\n\n    switch (format) {\n      case 'decimal':\n        return this.formatDecimal(lat, lng, precision);\n      case 'dms':\n        return this.formatDMS(lat, lng);\n      case 'dm':\n        return this.formatDM(lat, lng, precision);\n      case 'utm':\n        return this.formatUTM(lat, lng);\n      case 'mgrs':\n        return this.formatMGRS(lat, lng);\n      default:\n        return this.formatDecimal(lat, lng, precision);\n    }\n  }\n\n  /**\n   * Format as decimal degrees\n   */\n  private formatDecimal(lat: number, lng: number, precision: number): string {\n    return `${lat.toFixed(precision)}, ${lng.toFixed(precision)}`;\n  }\n\n  /**\n   * Format as Degrees, Minutes, Seconds\n   */\n  private formatDMS(lat: number, lng: number): string {\n    const latDMS = this.toDMS(lat, true);\n    const lngDMS = this.toDMS(lng, false);\n    return `${latDMS}, ${lngDMS}`;\n  }\n\n  /**\n   * Format as Degrees, Minutes\n   */\n  private formatDM(lat: number, lng: number, precision: number): string {\n    const latDM = this.toDM(lat, true, precision);\n    const lngDM = this.toDM(lng, false, precision);\n    return `${latDM}, ${lngDM}`;\n  }\n\n  /**\n   * Format as UTM (simplified)\n   */\n  private formatUTM(lat: number, lng: number): string {\n    // Simplified UTM conversion - in production, you'd use a proper library\n    const zone = Math.floor((lng + 180) / 6) + 1;\n    const hemisphere = lat >= 0 ? 'N' : 'S';\n    return `UTM ${zone}${hemisphere} (approx)`;\n  }\n\n  /**\n   * Format as MGRS (simplified)\n   */\n  private formatMGRS(lat: number, lng: number): string {\n    // Simplified MGRS - in production, you'd use a proper library\n    return `MGRS (${lat.toFixed(2)}, ${lng.toFixed(2)})`;\n  }\n\n  /**\n   * Convert decimal degrees to DMS\n   */\n  private toDMS(decimal: number, isLatitude: boolean): string {\n    const absolute = Math.abs(decimal);\n    const degrees = Math.floor(absolute);\n    const minutesFloat = (absolute - degrees) * 60;\n    const minutes = Math.floor(minutesFloat);\n    const seconds = (minutesFloat - minutes) * 60;\n\n    const direction = this.getDirection(decimal, isLatitude);\n\n    return `${degrees}°${minutes}'${seconds.toFixed(2)}\"${direction}`;\n  }\n\n  /**\n   * Convert decimal degrees to DM\n   */\n  private toDM(decimal: number, isLatitude: boolean, precision: number): string {\n    const absolute = Math.abs(decimal);\n    const degrees = Math.floor(absolute);\n    const minutes = (absolute - degrees) * 60;\n\n    const direction = this.getDirection(decimal, isLatitude);\n\n    return `${degrees}°${minutes.toFixed(precision)}'${direction}`;\n  }\n\n  /**\n   * Get direction letter\n   */\n  private getDirection(decimal: number, isLatitude: boolean): string {\n    if (isLatitude) {\n      return decimal >= 0 ? 'N' : 'S';\n    } else {\n      return decimal >= 0 ? 'E' : 'W';\n    }\n  }\n}\n\n/**\n * Pipe to format individual coordinate (lat or lng)\n */\n@Pipe({\n  name: 'coordinateValue',\n  standalone: true\n})\nexport class CoordinateValuePipe implements PipeTransform {\n\n  transform(\n    value: number | null | undefined,\n    format: CoordinateFormat = 'decimal',\n    isLatitude: boolean = true,\n    precision: number = 6\n  ): string {\n    if (value === null || value === undefined) {\n      return '';\n    }\n\n    const pipe = new CoordinateFormatPipe();\n\n    switch (format) {\n      case 'decimal':\n        return value.toFixed(precision);\n      case 'dms':\n        return pipe['toDMS'](value, isLatitude);\n      case 'dm':\n        return pipe['toDM'](value, isLatitude, precision);\n      default:\n        return value.toFixed(precision);\n    }\n  }\n}\n\n/**\n * Pipe to format coordinates with custom separators\n */\n@Pipe({\n  name: 'coordinateCustom',\n  standalone: true\n})\nexport class CoordinateCustomPipe implements PipeTransform {\n\n  transform(\n    coordinates: Coordinates | null | undefined,\n    template: string = '{lat}, {lng}',\n    precision: number = 6\n  ): string {\n    if (!coordinates) {\n      return '';\n    }\n\n    const { lat, lng } = coordinates;\n\n    return template\n      .replace('{lat}', lat.toFixed(precision))\n      .replace('{lng}', lng.toFixed(precision))\n      .replace('{latitude}', lat.toFixed(precision))\n      .replace('{longitude}', lng.toFixed(precision));\n  }\n}","/**\n * Address formatting pipes\n * Various pipes for formatting and displaying address components\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { GeocodingResult, AddressComponents } from '../models/opencage-types';\n\n/**\n * Pipe to format address components into readable address string\n */\n@Pipe({\n  name: 'addressFormat',\n  standalone: true\n})\nexport class AddressFormatPipe implements PipeTransform {\n\n  transform(\n    result: GeocodingResult | null | undefined,\n    format: 'short' | 'long' | 'postal' | 'country' | 'custom' = 'long',\n    customTemplate?: string\n  ): string {\n    if (!result) {\n      return '';\n    }\n\n    switch (format) {\n      case 'short':\n        return this.formatShort(result);\n      case 'long':\n        return this.formatLong(result);\n      case 'postal':\n        return this.formatPostal(result);\n      case 'country':\n        return this.formatCountry(result);\n      case 'custom':\n        return this.formatCustom(result, customTemplate || '');\n      default:\n        return result.formatted || '';\n    }\n  }\n\n  /**\n   * Format short address (street + city)\n   */\n  private formatShort(result: GeocodingResult): string {\n    const components = result.components;\n    const parts: string[] = [];\n\n    // Add house number and road\n    if (components.house_number && components.road) {\n      parts.push(`${components.house_number} ${components.road}`);\n    } else if (components.road) {\n      parts.push(components.road);\n    }\n\n    // Add city\n    const city = components.city || components.town || components.village;\n    if (city) {\n      parts.push(city);\n    }\n\n    return parts.join(', ') || result.formatted;\n  }\n\n  /**\n   * Format long address (full address without country)\n   */\n  private formatLong(result: GeocodingResult): string {\n    const components = result.components;\n    const parts: string[] = [];\n\n    // Street address\n    const streetParts: string[] = [];\n    if (components.house_number) streetParts.push(components.house_number);\n    if (components.road) streetParts.push(components.road);\n    if (streetParts.length > 0) parts.push(streetParts.join(' '));\n\n    // Neighbourhood or suburb\n    if (components.neighbourhood || components.suburb) {\n      parts.push(components.neighbourhood || components.suburb!);\n    }\n\n    // City\n    const city = components.city || components.town || components.village;\n    if (city) parts.push(city);\n\n    // State/Region\n    if (components.state) {\n      const stateStr = components.state_code \n        ? `${components.state} (${components.state_code})`\n        : components.state;\n      parts.push(stateStr);\n    }\n\n    // Postal code\n    if (components.postcode) {\n      parts.push(components.postcode);\n    }\n\n    return parts.join(', ') || result.formatted;\n  }\n\n  /**\n   * Format postal address\n   */\n  private formatPostal(result: GeocodingResult): string {\n    const components = result.components;\n    const lines: string[] = [];\n\n    // Line 1: Street address\n    const streetParts: string[] = [];\n    if (components.house_number) streetParts.push(components.house_number);\n    if (components.road) streetParts.push(components.road);\n    if (streetParts.length > 0) lines.push(streetParts.join(' '));\n\n    // Line 2: City, State, Postal Code\n    const cityLine: string[] = [];\n    const city = components.city || components.town || components.village;\n    if (city) cityLine.push(city);\n    \n    if (components.state_code) {\n      cityLine.push(components.state_code);\n    } else if (components.state) {\n      cityLine.push(components.state);\n    }\n\n    if (components.postcode) {\n      cityLine.push(components.postcode);\n    }\n\n    if (cityLine.length > 0) lines.push(cityLine.join(', '));\n\n    // Line 3: Country\n    if (components.country) {\n      lines.push(components.country);\n    }\n\n    return lines.join('\\n') || result.formatted;\n  }\n\n  /**\n   * Format country information\n   */\n  private formatCountry(result: GeocodingResult): string {\n    const components = result.components;\n    \n    if (components.country) {\n      if (components.country_code) {\n        return `${components.country} (${components.country_code.toUpperCase()})`;\n      }\n      return components.country;\n    }\n\n    return '';\n  }\n\n  /**\n   * Format using custom template\n   */\n  private formatCustom(result: GeocodingResult, template: string): string {\n    const components = result.components;\n    let formatted = template;\n\n    // Replace all component placeholders\n    Object.entries(components).forEach(([key, value]) => {\n      if (value) {\n        const placeholder = `{${key}}`;\n        formatted = formatted.replace(new RegExp(placeholder, 'g'), String(value));\n      }\n    });\n\n    // Clean up any remaining placeholders\n    formatted = formatted.replace(/\\{[^}]+\\}/g, '').replace(/,\\s*,/g, ',').trim();\n\n    return formatted || result.formatted;\n  }\n}\n\n/**\n * Pipe to extract specific address component\n */\n@Pipe({\n  name: 'addressComponent',\n  standalone: true\n})\nexport class AddressComponentPipe implements PipeTransform {\n\n  transform(\n    result: GeocodingResult | AddressComponents | null | undefined,\n    component: keyof AddressComponents,\n    fallback?: string\n  ): string {\n    if (!result) {\n      return fallback || '';\n    }\n\n    const components = 'components' in result ? result.components : result;\n    if (!components || typeof components === 'string' || Array.isArray(components)) {\n      return fallback || '';\n    }\n    const value = components[component];\n\n    if (Array.isArray(value)) {\n      return value.join(', ');\n    }\n\n    return String(value || fallback || '');\n  }\n}\n\n/**\n * Pipe to format multiple address components\n */\n@Pipe({\n  name: 'addressComponents',\n  standalone: true\n})\nexport class AddressComponentsPipe implements PipeTransform {\n\n  transform(\n    result: GeocodingResult | AddressComponents | null | undefined,\n    components: Array<keyof AddressComponents>,\n    separator: string = ', ',\n    skipEmpty: boolean = true\n  ): string {\n    if (!result) {\n      return '';\n    }\n\n    const addressComponents = 'components' in result ? result.components : result;\n    if (!addressComponents || typeof addressComponents === 'string' || Array.isArray(addressComponents)) {\n      return '';\n    }\n    const values: string[] = [];\n\n    components.forEach(component => {\n      const value = addressComponents[component];\n      if (value !== undefined && value !== null) {\n        if (Array.isArray(value)) {\n          const joinedValue = value.join(', ');\n          if (!skipEmpty || joinedValue.length > 0) {\n            values.push(joinedValue);\n          }\n        } else {\n          const stringValue = String(value);\n          if (!skipEmpty || stringValue.length > 0) {\n            values.push(stringValue);\n          }\n        }\n      }\n    });\n\n    return values.join(separator);\n  }\n}\n\n/**\n * Pipe to format confidence score\n */\n@Pipe({\n  name: 'confidence',\n  standalone: true\n})\nexport class ConfidencePipe implements PipeTransform {\n\n  transform(\n    confidence: number | null | undefined,\n    format: 'number' | 'percentage' | 'stars' | 'text' = 'number',\n    maxStars: number = 5\n  ): string {\n    if (confidence === null || confidence === undefined) {\n      return '';\n    }\n\n    switch (format) {\n      case 'percentage':\n        return `${(confidence * 10).toFixed(0)}%`;\n      case 'stars':\n        const filledStars = Math.round((confidence / 10) * maxStars);\n        const emptyStars = maxStars - filledStars;\n        return '★'.repeat(filledStars) + '☆'.repeat(emptyStars);\n      case 'text':\n        return this.confidenceToText(confidence);\n      case 'number':\n      default:\n        return confidence.toFixed(1);\n    }\n  }\n\n  private confidenceToText(confidence: number): string {\n    if (confidence >= 9) return 'Excellent';\n    if (confidence >= 7) return 'Very Good';\n    if (confidence >= 5) return 'Good';\n    if (confidence >= 3) return 'Fair';\n    if (confidence >= 1) return 'Poor';\n    return 'Very Poor';\n  }\n}\n\n/**\n * Pipe to check if address is in specific country\n */\n@Pipe({\n  name: 'isCountry',\n  standalone: true\n})\nexport class IsCountryPipe implements PipeTransform {\n\n  transform(\n    result: GeocodingResult | AddressComponents | null | undefined,\n    countryCode: string\n  ): boolean {\n    if (!result) {\n      return false;\n    }\n\n    const components = 'components' in result ? result.components : result;\n    if (!components || typeof components === 'string' || Array.isArray(components)) {\n      return false;\n    }\n    return components.country_code?.toLowerCase() === countryCode.toLowerCase();\n  }\n}","/**\n * Geocoding input directive\n * Provides auto-complete and real-time geocoding for input fields\n */\n\nimport {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  OnInit,\n  OnDestroy,\n  HostListener,\n  HostBinding\n} from '@angular/core';\nimport { Subject, fromEvent, EMPTY } from 'rxjs';\nimport {\n  debounceTime,\n  distinctUntilChanged,\n  switchMap,\n  takeUntil,\n  catchError,\n  tap,\n  filter\n} from 'rxjs/operators';\n\nimport { OpenCageService } from '../services/opencage.service';\nimport {\n  GeocodingResponse,\n  GeocodingResult,\n  ForwardGeocodingOptions\n} from '../models/opencage-types';\nimport { OpenCageError } from '../models/opencage-error';\n\n/**\n * Geocoding input directive\n * \n * Usage:\n * <input \n *   type=\"text\"\n *   opencageGeocode\n *   [debounceTime]=\"500\"\n *   [minLength]=\"3\"\n *   [limit]=\"5\"\n *   (geocodeResults)=\"onResults($event)\"\n *   (geocodeError)=\"onError($event)\"\n *   (geocodeLoading)=\"onLoading($event)\"\n * />\n */\n@Directive({\n  selector: 'input[opencageGeocode], textarea[opencageGeocode]',\n  standalone: true\n})\nexport class GeocodeInputDirective implements OnInit, OnDestroy {\n  \n  @Input() debounceTime: number = 500;\n  @Input() minLength: number = 3;\n  @Input() maxLength: number = 100;\n  @Input() limit: number = 5;\n  @Input() options: ForwardGeocodingOptions = {};\n  @Input() autoSelect: boolean = false;\n  @Input() clearOnEmpty: boolean = true;\n\n  @Output() geocodeResults = new EventEmitter<GeocodingResult[]>();\n  @Output() geocodeError = new EventEmitter<OpenCageError>();\n  @Output() geocodeLoading = new EventEmitter<boolean>();\n  @Output() geocodeSelected = new EventEmitter<GeocodingResult>();\n\n  @HostBinding('attr.autocomplete') autocomplete = 'off';\n  @HostBinding('class.geocode-input') cssClass = true;\n  @HostBinding('class.geocode-loading') loading = false;\n  @HostBinding('class.geocode-error') hasError = false;\n\n  private destroy$ = new Subject<void>();\n  private currentQuery = '';\n\n  constructor(\n    private elementRef: ElementRef<HTMLInputElement | HTMLTextAreaElement>,\n    private geocodeService: OpenCageService\n  ) {}\n\n  ngOnInit(): void {\n    this.setupGeocodingStream();\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  @HostListener('input', ['$event'])\n  onInput(event: Event): void {\n    const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n    const value = target.value.trim();\n\n    if (this.clearOnEmpty && value.length === 0) {\n      this.geocodeResults.emit([]);\n      this.hasError = false;\n    }\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent): void {\n    // Handle special keys for autocomplete behavior\n    if (event.key === 'Escape') {\n      this.clearResults();\n    }\n  }\n\n  @HostListener('blur')\n  onBlur(): void {\n    // Emit loading false when input loses focus\n    if (this.loading) {\n      this.setLoading(false);\n    }\n  }\n\n  /**\n   * Setup the geocoding stream\n   */\n  private setupGeocodingStream(): void {\n    fromEvent<Event>(this.elementRef.nativeElement, 'input')\n      .pipe(\n        takeUntil(this.destroy$),\n        debounceTime(this.debounceTime),\n        distinctUntilChanged((prev, curr) => {\n          const prevValue = (prev.target as HTMLInputElement).value.trim();\n          const currValue = (curr.target as HTMLInputElement).value.trim();\n          return prevValue === currValue;\n        }),\n        filter((event) => {\n          const value = (event.target as HTMLInputElement).value.trim();\n          return value.length >= this.minLength && value.length <= this.maxLength;\n        }),\n        tap(() => this.setLoading(true)),\n        switchMap((event) => {\n          const query = (event.target as HTMLInputElement).value.trim();\n          this.currentQuery = query;\n          \n          const geocodeOptions: ForwardGeocodingOptions = {\n            ...this.options,\n            limit: this.limit\n          };\n\n          return this.geocodeService.geocode(query, geocodeOptions).pipe(\n            catchError((error: OpenCageError) => {\n              this.handleError(error);\n              return EMPTY;\n            })\n          );\n        })\n      )\n      .subscribe((response: GeocodingResponse) => {\n        this.handleResults(response);\n      });\n  }\n\n  /**\n   * Handle geocoding results\n   */\n  private handleResults(response: GeocodingResponse): void {\n    this.setLoading(false);\n    this.hasError = false;\n    \n    const results = response.results;\n    this.geocodeResults.emit(results);\n\n    // Auto-select first result if enabled\n    if (this.autoSelect && results.length > 0) {\n      this.selectResult(results[0]);\n    }\n  }\n\n  /**\n   * Handle geocoding errors\n   */\n  private handleError(error: OpenCageError): void {\n    this.setLoading(false);\n    this.hasError = true;\n    this.geocodeError.emit(error);\n    this.geocodeResults.emit([]);\n  }\n\n  /**\n   * Set loading state\n   */\n  private setLoading(loading: boolean): void {\n    this.loading = loading;\n    this.geocodeLoading.emit(loading);\n  }\n\n  /**\n   * Select a geocoding result\n   */\n  public selectResult(result: GeocodingResult): void {\n    this.elementRef.nativeElement.value = result.formatted;\n    this.geocodeSelected.emit(result);\n    this.clearResults();\n  }\n\n  /**\n   * Clear results\n   */\n  public clearResults(): void {\n    this.geocodeResults.emit([]);\n    this.hasError = false;\n    this.setLoading(false);\n  }\n\n  /**\n   * Get current input value\n   */\n  public getValue(): string {\n    return this.elementRef.nativeElement.value;\n  }\n\n  /**\n   * Set input value\n   */\n  public setValue(value: string): void {\n    this.elementRef.nativeElement.value = value;\n  }\n\n  /**\n   * Focus the input\n   */\n  public focus(): void {\n    this.elementRef.nativeElement.focus();\n  }\n}","/**\n * Coordinate validation directive\n * Validates latitude and longitude input fields\n */\n\nimport { Directive, Input } from '@angular/core';\nimport { \n  AbstractControl, \n  NG_VALIDATORS, \n  ValidationErrors, \n  Validator \n} from '@angular/forms';\n\nexport type CoordinateType = 'latitude' | 'longitude' | 'both';\n\n/**\n * Coordinate validator directive\n * \n * Usage:\n * <input \n *   type=\"number\"\n *   coordinateValidator=\"latitude\"\n *   [(ngModel)]=\"latitude\"\n * />\n * \n * <input \n *   type=\"text\"\n *   coordinateValidator=\"both\"\n *   [(ngModel)]=\"coordinates\"\n * />\n */\n@Directive({\n  selector: '[coordinateValidator]',\n  standalone: true,\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      useExisting: CoordinateValidatorDirective,\n      multi: true\n    }\n  ]\n})\nexport class CoordinateValidatorDirective implements Validator {\n  \n  @Input('coordinateValidator') coordinateType: CoordinateType = 'both';\n\n  validate(control: AbstractControl): ValidationErrors | null {\n    if (!control.value) {\n      return null; // Let required validator handle empty values\n    }\n\n    const value = control.value;\n\n    switch (this.coordinateType) {\n      case 'latitude':\n        return this.validateLatitude(value);\n      case 'longitude':\n        return this.validateLongitude(value);\n      case 'both':\n        return this.validateCoordinatePair(value);\n      default:\n        return null;\n    }\n  }\n\n  /**\n   * Validate latitude value\n   */\n  private validateLatitude(value: any): ValidationErrors | null {\n    const lat = this.parseNumber(value);\n    \n    if (lat === null) {\n      return { invalidLatitude: { value, message: 'Invalid latitude format' } };\n    }\n\n    if (lat < -90 || lat > 90) {\n      return { \n        latitudeRange: { \n          value: lat, \n          message: 'Latitude must be between -90 and 90 degrees' \n        } \n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * Validate longitude value\n   */\n  private validateLongitude(value: any): ValidationErrors | null {\n    const lng = this.parseNumber(value);\n    \n    if (lng === null) {\n      return { invalidLongitude: { value, message: 'Invalid longitude format' } };\n    }\n\n    if (lng < -180 || lng > 180) {\n      return { \n        longitudeRange: { \n          value: lng, \n          message: 'Longitude must be between -180 and 180 degrees' \n        } \n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * Validate coordinate pair (lat,lng format)\n   */\n  private validateCoordinatePair(value: any): ValidationErrors | null {\n    if (typeof value !== 'string') {\n      return { \n        invalidCoordinates: { \n          value, \n          message: 'Coordinates must be in \"lat,lng\" format' \n        } \n      };\n    }\n\n    const parts = value.split(',');\n    if (parts.length !== 2) {\n      return { \n        invalidCoordinates: { \n          value, \n          message: 'Coordinates must be in \"lat,lng\" format' \n        } \n      };\n    }\n\n    const lat = this.parseNumber(parts[0].trim());\n    const lng = this.parseNumber(parts[1].trim());\n\n    if (lat === null || lng === null) {\n      return { \n        invalidCoordinates: { \n          value, \n          message: 'Invalid coordinate values' \n        } \n      };\n    }\n\n    // Validate latitude range\n    const latError = this.validateLatitude(lat);\n    if (latError) {\n      return latError;\n    }\n\n    // Validate longitude range\n    const lngError = this.validateLongitude(lng);\n    if (lngError) {\n      return lngError;\n    }\n\n    return null;\n  }\n\n  /**\n   * Parse number from string or return null if invalid\n   */\n  private parseNumber(value: any): number | null {\n    if (typeof value === 'number' && !isNaN(value)) {\n      return value;\n    }\n\n    if (typeof value === 'string') {\n      const parsed = parseFloat(value);\n      return isNaN(parsed) ? null : parsed;\n    }\n\n    return null;\n  }\n}\n\n/**\n * Standalone validator functions for use in reactive forms\n */\nexport class CoordinateValidators {\n  \n  /**\n   * Latitude validator\n   */\n  static latitude(control: AbstractControl): ValidationErrors | null {\n    const directive = new CoordinateValidatorDirective();\n    directive.coordinateType = 'latitude';\n    return directive.validate(control);\n  }\n\n  /**\n   * Longitude validator\n   */\n  static longitude(control: AbstractControl): ValidationErrors | null {\n    const directive = new CoordinateValidatorDirective();\n    directive.coordinateType = 'longitude';\n    return directive.validate(control);\n  }\n\n  /**\n   * Coordinate pair validator\n   */\n  static coordinates(control: AbstractControl): ValidationErrors | null {\n    const directive = new CoordinateValidatorDirective();\n    directive.coordinateType = 'both';\n    return directive.validate(control);\n  }\n\n  /**\n   * Create custom coordinate range validator\n   */\n  static range(minLat: number, maxLat: number, minLng: number, maxLng: number) {\n    return (control: AbstractControl): ValidationErrors | null => {\n      if (!control.value) {\n        return null;\n      }\n\n      let lat: number, lng: number;\n\n      if (typeof control.value === 'string') {\n        const parts = control.value.split(',');\n        if (parts.length !== 2) {\n          return { invalidCoordinates: { value: control.value } };\n        }\n        lat = parseFloat(parts[0].trim());\n        lng = parseFloat(parts[1].trim());\n      } else if (typeof control.value === 'object' && control.value.lat && control.value.lng) {\n        lat = control.value.lat;\n        lng = control.value.lng;\n      } else {\n        return { invalidCoordinates: { value: control.value } };\n      }\n\n      if (isNaN(lat) || isNaN(lng)) {\n        return { invalidCoordinates: { value: control.value } };\n      }\n\n      if (lat < minLat || lat > maxLat) {\n        return { \n          latitudeRange: { \n            value: lat, \n            min: minLat, \n            max: maxLat,\n            message: `Latitude must be between ${minLat} and ${maxLat}` \n          } \n        };\n      }\n\n      if (lng < minLng || lng > maxLng) {\n        return { \n          longitudeRange: { \n            value: lng, \n            min: minLng, \n            max: maxLng,\n            message: `Longitude must be between ${minLng} and ${maxLng}` \n          } \n        };\n      }\n\n      return null;\n    };\n  }\n\n  /**\n   * Precision validator (number of decimal places)\n   */\n  static precision(maxDecimalPlaces: number) {\n    return (control: AbstractControl): ValidationErrors | null => {\n      if (!control.value) {\n        return null;\n      }\n\n      const checkPrecision = (value: number): boolean => {\n        const str = value.toString();\n        const decimalIndex = str.indexOf('.');\n        if (decimalIndex === -1) return true;\n        \n        const decimalPlaces = str.length - decimalIndex - 1;\n        return decimalPlaces <= maxDecimalPlaces;\n      };\n\n      let lat: number, lng: number;\n\n      if (typeof control.value === 'number') {\n        return checkPrecision(control.value) ? null : {\n          precision: {\n            value: control.value,\n            maxDecimalPlaces,\n            message: `Maximum ${maxDecimalPlaces} decimal places allowed`\n          }\n        };\n      }\n\n      if (typeof control.value === 'string') {\n        const parts = control.value.split(',');\n        if (parts.length === 2) {\n          lat = parseFloat(parts[0].trim());\n          lng = parseFloat(parts[1].trim());\n          \n          if (!isNaN(lat) && !isNaN(lng)) {\n            if (!checkPrecision(lat) || !checkPrecision(lng)) {\n              return {\n                precision: {\n                  value: control.value,\n                  maxDecimalPlaces,\n                  message: `Maximum ${maxDecimalPlaces} decimal places allowed`\n                }\n              };\n            }\n          }\n        } else {\n          // Single coordinate\n          const num = parseFloat(control.value);\n          if (!isNaN(num) && !checkPrecision(num)) {\n            return {\n              precision: {\n                value: control.value,\n                maxDecimalPlaces,\n                message: `Maximum ${maxDecimalPlaces} decimal places allowed`\n              }\n            };\n          }\n        }\n      }\n\n      if (typeof control.value === 'object' && control.value.lat && control.value.lng) {\n        lat = control.value.lat;\n        lng = control.value.lng;\n        \n        if (!checkPrecision(lat) || !checkPrecision(lng)) {\n          return {\n            precision: {\n              value: control.value,\n              maxDecimalPlaces,\n              message: `Maximum ${maxDecimalPlaces} decimal places allowed`\n            }\n          };\n        }\n      }\n\n      return null;\n    };\n  }\n}","/**\n * OpenCage Angular Module\n * Main module for the OpenCage Angular SDK\n */\n\nimport { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\n\n// Services\nimport { OpenCageService } from './services/opencage.service';\nimport { OpenCageConfigService, OPENCAGE_CONFIG_TOKEN, provideOpenCageConfig } from './services/opencage-config.service';\nimport { OpenCageCacheService } from './services/opencage-cache.service';\nimport { OpenCageRateLimiterService } from './services/opencage-rate-limiter.service';\n\n// Interceptors\nimport { OpenCageInterceptor } from './interceptors/opencage.interceptor';\n\n// Pipes\nimport { \n  CoordinateFormatPipe, \n  CoordinateValuePipe, \n  CoordinateCustomPipe \n} from './pipes/coordinate-format.pipe';\nimport { \n  AddressFormatPipe, \n  AddressComponentPipe, \n  AddressComponentsPipe,\n  ConfidencePipe,\n  IsCountryPipe\n} from './pipes/address-format.pipe';\n\n// Directives\nimport { GeocodeInputDirective } from './directives/geocode-input.directive';\nimport { CoordinateValidatorDirective } from './directives/coordinate-validator.directive';\n\n// Types and Models\nimport { OpenCageConfig } from './models/opencage-types';\n\n/**\n * List of all pipes for easy importing\n */\nconst OPENCAGE_PIPES = [\n  CoordinateFormatPipe,\n  CoordinateValuePipe,\n  CoordinateCustomPipe,\n  AddressFormatPipe,\n  AddressComponentPipe,\n  AddressComponentsPipe,\n  ConfidencePipe,\n  IsCountryPipe\n];\n\n/**\n * List of all directives for easy importing\n */\nconst OPENCAGE_DIRECTIVES = [\n  GeocodeInputDirective,\n  CoordinateValidatorDirective\n];\n\n/**\n * OpenCage Angular SDK Module\n * \n * Usage:\n * \n * // Basic usage (API key required)\n * @NgModule({\n *   imports: [\n *     OpenCageAngularModule.forRoot({ apiKey: 'YOUR_API_KEY' })\n *   ]\n * })\n * \n * // Advanced usage with configuration\n * @NgModule({\n *   imports: [\n *     OpenCageAngularModule.forRoot({\n *       apiKey: 'YOUR_API_KEY',\n *       enableCaching: true,\n *       cacheTtl: 300000,\n *       enableRateLimit: true,\n *       rateLimit: 10,\n *       timeout: 10000\n *     })\n *   ]\n * })\n */\n@NgModule({\n  imports: [\n    CommonModule,\n    HttpClientModule,\n    // Import all pipes and directives as standalone\n    ...OPENCAGE_PIPES,\n    ...OPENCAGE_DIRECTIVES\n  ],\n  exports: [\n    // Export pipes and directives for use in templates\n    ...OPENCAGE_PIPES,\n    ...OPENCAGE_DIRECTIVES\n  ]\n})\nexport class OpenCageAngularModule {\n  \n  /**\n   * Configure the module with OpenCage settings\n   * This should be called in the root module\n   */\n  static forRoot(config: Partial<OpenCageConfig>): ModuleWithProviders<OpenCageAngularModule> {\n    return {\n      ngModule: OpenCageAngularModule,\n      providers: [\n        // Provide configuration\n        provideOpenCageConfig(config),\n        \n        // Core services\n        OpenCageConfigService,\n        OpenCageCacheService,\n        OpenCageRateLimiterService,\n        OpenCageService,\n        \n        // HTTP Interceptor\n        {\n          provide: HTTP_INTERCEPTORS,\n          useClass: OpenCageInterceptor,\n          multi: true\n        }\n      ]\n    };\n  }\n\n  /**\n   * For feature modules (child modules)\n   */\n  static forChild(): ModuleWithProviders<OpenCageAngularModule> {\n    return {\n      ngModule: OpenCageAngularModule,\n      providers: [\n        // Only provide services that are safe to have multiple instances\n        // The core config service should come from root\n      ]\n    };\n  }\n}\n\n/**\n * Standalone providers for use with Angular 14+ standalone bootstrap\n */\nexport function provideOpenCage(config: Partial<OpenCageConfig>) {\n  return [\n    // Configuration\n    provideOpenCageConfig(config),\n    \n    // Services\n    OpenCageConfigService,\n    OpenCageCacheService,\n    OpenCageRateLimiterService,\n    OpenCageService,\n    \n    // HTTP Interceptor\n    {\n      provide: HTTP_INTERCEPTORS,\n      useClass: OpenCageInterceptor,\n      multi: true\n    }\n  ];\n}\n\n/**\n * Exports for standalone components\n */\nexport const OPENCAGE_IMPORTS = [\n  ...OPENCAGE_PIPES,\n  ...OPENCAGE_DIRECTIVES\n];\n\n/**\n * Feature detection utilities\n */\nexport class OpenCageFeatures {\n  \n  /**\n   * Check if geocoding is available\n   */\n  static isGeocodingAvailable(): boolean {\n    try {\n      // Basic availability check\n      return typeof fetch !== 'undefined' || typeof XMLHttpRequest !== 'undefined';\n    } catch {\n      return false;\n    }\n  }\n\n  /**\n   * Check if browser geolocation is available\n   */\n  static isBrowserGeolocationAvailable(): boolean {\n    return typeof navigator !== 'undefined' && 'geolocation' in navigator;\n  }\n\n  /**\n   * Check if local storage is available for caching\n   */\n  static isLocalStorageAvailable(): boolean {\n    try {\n      return typeof localStorage !== 'undefined';\n    } catch {\n      return false;\n    }\n  }\n\n  /**\n   * Get browser capabilities\n   */\n  static getBrowserCapabilities(): {\n    geocoding: boolean;\n    geolocation: boolean;\n    localStorage: boolean;\n    webWorkers: boolean;\n    serviceWorkers: boolean;\n  } {\n    return {\n      geocoding: this.isGeocodingAvailable(),\n      geolocation: this.isBrowserGeolocationAvailable(),\n      localStorage: this.isLocalStorageAvailable(),\n      webWorkers: typeof Worker !== 'undefined',\n      serviceWorkers: typeof navigator !== 'undefined' && 'serviceWorker' in navigator\n    };\n  }\n}","/**\n * Export all model types and classes\n */\n\nexport * from './opencage-types';\nexport * from './opencage-error';","/**\n * Export all pipes\n */\n\nexport * from './coordinate-format.pipe';\nexport * from './address-format.pipe';","/**\n * Export all directives\n */\n\nexport * from './geocode-input.directive';\nexport * from './coordinate-validator.directive';","/**\n * Export all interceptors\n */\n\nexport * from './opencage.interceptor';","/**\n * Public API Surface of @opencagedata/angular-sdk\n */\n\n// Main module\nexport * from './lib/opencage-angular.module';\n\n// Models and Types\nexport * from './lib/models';\n\n// Services (export specific services to avoid conflicts)\nexport { OpenCageService } from './lib/services/opencage.service';\nexport { OpenCageConfigService } from './lib/services/opencage-config.service';\nexport { OpenCageCacheService } from './lib/services/opencage-cache.service';\nexport { OpenCageRateLimiterService, RateLimiterConfig, RateLimit as RateLimitDecorator } from './lib/services/opencage-rate-limiter.service';\n\n// Pipes\nexport * from './lib/pipes';\n\n// Directives\nexport * from './lib/directives';\n\n// Interceptors\nexport * from './lib/interceptors';\n\n// Version information\nexport const VERSION = '1.0.0';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.OpenCageConfigService","i3.OpenCageCacheService","i4.OpenCageRateLimiterService","i1.OpenCageConfigService","i1.OpenCageService"],"mappings":"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"}