{"version":3,"sources":["../src/core/provider.ts"],"names":["UploadProvider","name","config","__publicField","ProviderFactory","providerClass","ProviderClass"],"mappings":"mEAMO,IAAeA,CAAAA,CAAf,KAA8B,CAInC,WAAA,CAAYC,CAAAA,CAAcC,EAA8B,EAAC,CAAG,CAH5DC,mBAAAA,CAAA,IAAA,CAAmB,MAAA,CAAA,CACnBA,oBAAA,IAAA,CAAmB,QAAA,CAAA,CAGjB,IAAA,CAAK,IAAA,CAAOF,CAAAA,CACZ,IAAA,CAAK,MAAA,CAASC,EAChB,CAKA,OAAA,EAAkB,CAChB,OAAO,IAAA,CAAK,IACd,CAKA,SAAA,EAAiC,CAC/B,OAAO,CAAE,GAAG,IAAA,CAAK,MAAO,CAC1B,CAwEA,MAAM,OAAA,EAAyB,CAE/B,CACF,EAKaE,CAAAA,CAAN,KAAsB,CAS3B,OAAO,QAAA,CACLH,CAAAA,CACAI,CAAAA,CACM,CACN,IAAA,CAAK,SAAA,CAAU,GAAA,CAAIJ,CAAAA,CAAMI,CAAa,EACxC,CAKA,OAAO,MAAA,CAAOJ,CAAAA,CAAcC,CAAAA,CAA6B,CACvD,IAAMI,EAAgB,IAAA,CAAK,SAAA,CAAU,GAAA,CAAIL,CAAI,CAAA,CAC7C,GAAI,CAACK,CAAAA,CACH,MAAM,IAAI,KAAA,CACR,CAAA,UAAA,EAAaL,CAAI,CAAA,kCAAA,EAAqC,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,CAAA,CAAE,KAAK,IAAI,CAAC,CAAA,CACpG,CAAA,CAEF,OAAO,IAAIK,EAAcJ,CAAM,CACjC,CAKA,OAAO,qBAAA,EAAkC,CACvC,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,CACzC,CACF,EAlCEC,mBAAAA,CADWC,CAAAA,CACI,WAAA,CAAY,IAAI,GAAA,CAAA","file":"chunk-734ONACG.cjs","sourcesContent":["import type { UploadOptions, UploadResponse } from \"../types\";\r\n\r\n/**\r\n * Abstract base class for all upload providers\r\n * This allows for easy switching between different upload services\r\n */\r\nexport abstract class UploadProvider {\r\n  protected readonly name: string;\r\n  protected readonly config: Record<string, any>;\r\n\r\n  constructor(name: string, config: Record<string, any> = {}) {\r\n    this.name = name;\r\n    this.config = config;\r\n  }\r\n\r\n  /**\r\n   * Get the provider name\r\n   */\r\n  getName(): string {\r\n    return this.name;\r\n  }\r\n\r\n  /**\r\n   * Get the provider configuration\r\n   */\r\n  getConfig(): Record<string, any> {\r\n    return { ...this.config };\r\n  }\r\n\r\n  /**\r\n   * Initialize the provider (called before first use)\r\n   */\r\n  abstract initialize(): Promise<void>;\r\n\r\n  /**\r\n   * Check if the provider is properly configured\r\n   */\r\n  abstract isConfigured(): boolean;\r\n\r\n  /**\r\n   * Upload a single file\r\n   */\r\n  abstract uploadFile(\r\n    file: File,\r\n    options: UploadOptions\r\n  ): Promise<UploadResponse>;\r\n\r\n  /**\r\n   * Upload multiple files\r\n   */\r\n  abstract uploadFiles(\r\n    files: readonly File[],\r\n    options: UploadOptions,\r\n    onProgress?: (fileId: string, progress: number) => void\r\n  ): Promise<UploadResponse[]>;\r\n\r\n  /**\r\n   * Delete a file by its ID\r\n   */\r\n  abstract deleteFile(fileId: string): Promise<void>;\r\n\r\n  /**\r\n   * Get file information by ID\r\n   */\r\n  abstract getFileInfo(fileId: string): Promise<UploadResponse | null>;\r\n\r\n  /**\r\n   * Generate a preview URL for a file\r\n   */\r\n  abstract generatePreviewUrl(\r\n    fileId: string,\r\n    options?: Record<string, any>\r\n  ): string;\r\n\r\n  /**\r\n   * Validate provider-specific options\r\n   */\r\n  abstract validateOptions(options: UploadOptions): {\r\n    valid: boolean;\r\n    error?: string;\r\n  };\r\n\r\n  /**\r\n   * Get upload statistics\r\n   */\r\n  abstract getStats(): Promise<{\r\n    totalFiles: number;\r\n    totalSize: number;\r\n    provider: string;\r\n  }>;\r\n\r\n  /**\r\n   * Test the provider connection\r\n   */\r\n  abstract testConnection(): Promise<boolean>;\r\n\r\n  /**\r\n   * Clean up resources\r\n   */\r\n  async cleanup(): Promise<void> {\r\n    // Default implementation does nothing\r\n  }\r\n}\r\n\r\n/**\r\n * Provider factory for creating provider instances\r\n */\r\nexport class ProviderFactory {\r\n  private static providers = new Map<\r\n    string,\r\n    new (config: any) => UploadProvider\r\n  >();\r\n\r\n  /**\r\n   * Register a provider class\r\n   */\r\n  static register(\r\n    name: string,\r\n    providerClass: new (config: any) => UploadProvider\r\n  ): void {\r\n    this.providers.set(name, providerClass);\r\n  }\r\n\r\n  /**\r\n   * Create a provider instance\r\n   */\r\n  static create(name: string, config: any): UploadProvider {\r\n    const ProviderClass = this.providers.get(name);\r\n    if (!ProviderClass) {\r\n      throw new Error(\r\n        `Provider '${name}' not found. Available providers: ${Array.from(this.providers.keys()).join(\", \")}`\r\n      );\r\n    }\r\n    return new ProviderClass(config);\r\n  }\r\n\r\n  /**\r\n   * Get list of available providers\r\n   */\r\n  static getAvailableProviders(): string[] {\r\n    return Array.from(this.providers.keys());\r\n  }\r\n}\r\n\r\n/**\r\n * Provider configuration interface\r\n */\r\nexport interface ProviderConfig {\r\n  readonly name: string;\r\n  readonly type: string;\r\n  readonly config: Record<string, any>;\r\n  readonly enabled: boolean;\r\n}\r\n"]}