@codefast/image-loader
Version:
Flexible image loader for Next.js supporting multiple CDN providers
61 lines • 2.22 kB
TypeScript
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