UNPKG

smart-dropzone-react

Version:

🚀 A production-ready React dropzone component with smart defaults, drag & drop reordering, chunked uploads, resume functionality, and comprehensive provider support (Cloudinary, AWS S3, Supabase)

1 lines • 4.8 kB
{"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"]}