UNPKG

@codefast/image-loader

Version:

Flexible image loader for Next.js supporting multiple CDN providers

61 lines 2.22 kB
import type { ImageLoaderProps } from "next/image"; import type { ImageLoader } from "./types"; /** * Abstract base class for image loaders * Implements the Template Method pattern and follows the Open/Closed Principle */ export declare abstract class BaseImageLoader implements ImageLoader { protected readonly config?: { defaultQuality?: number; } | undefined; protected readonly defaultQuality: number; constructor(config?: { defaultQuality?: number; } | undefined); /** * Template method that defines the algorithm for loading images * Follows the Template Method pattern */ load(config: ImageLoaderProps): string; /** * Abstract method to check if this loader can handle the given URL * Each loader defines its own domain/pattern matching logic */ abstract canHandle(source: string): boolean; /** * Abstract method to get the loader name * Each loader provides its own identifier */ abstract getName(): string; /** * Abstract method to be implemented by concrete loaders * Each loader defines its own URL transformation logic */ protected abstract transformUrl(config: ImageLoaderProps): string; /** * Validates the input configuration * Common validation logic for all loaders */ protected validateConfig(config: ImageLoaderProps): void; /** * Normalizes the configuration by applying defaults * Common normalization logic for all loaders */ protected normalizeConfig(config: ImageLoaderProps): ImageLoaderProps; /** * Utility method to extract domain from URL * Helper method for domain-based loader selection */ protected extractDomain(url: string): string; /** * Utility method to build query parameters using query-string library * Helper method for URL construction */ protected buildQueryParams(params: Record<string, number | string | undefined>): string; /** * Utility method to ensure URL has protocol * Helper method for URL normalization */ protected ensureProtocol(url: string, defaultProtocol?: string): string; } //# sourceMappingURL=base-loader.d.ts.map