image-optimizer.d.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /// <reference types="node" />
  2. /// <reference types="node" />
  3. /// <reference types="node" />
  4. /// <reference types="node" />
  5. import { IncomingMessage, ServerResponse } from 'http';
  6. import { UrlWithParsedQuery } from 'url';
  7. import { NextConfigComplete } from './config-shared';
  8. import { NextUrlWithParsedQuery } from './request-meta';
  9. import { IncrementalCacheEntry, IncrementalCacheValue } from './response-cache';
  10. declare type XCacheHeader = 'MISS' | 'HIT' | 'STALE';
  11. export interface ImageParamsResult {
  12. href: string;
  13. isAbsolute: boolean;
  14. isStatic: boolean;
  15. width: number;
  16. quality: number;
  17. mimeType: string;
  18. sizes: number[];
  19. minimumCacheTTL: number;
  20. }
  21. export declare function getHash(items: (string | number | Buffer)[]): string;
  22. /**
  23. * Inspects the first few bytes of a buffer to determine if
  24. * it matches the "magic number" of known file signatures.
  25. * https://en.wikipedia.org/wiki/List_of_file_signatures
  26. */
  27. export declare function detectContentType(buffer: Buffer): "image/svg+xml" | "image/avif" | "image/webp" | "image/png" | "image/jpeg" | "image/gif" | null;
  28. export declare class ImageOptimizerCache {
  29. private cacheDir;
  30. private nextConfig;
  31. static validateParams(req: IncomingMessage, query: UrlWithParsedQuery['query'], nextConfig: NextConfigComplete, isDev: boolean): ImageParamsResult | {
  32. errorMessage: string;
  33. };
  34. static getCacheKey({ href, width, quality, mimeType, }: {
  35. href: string;
  36. width: number;
  37. quality: number;
  38. mimeType: string;
  39. }): string;
  40. constructor({ distDir, nextConfig, }: {
  41. distDir: string;
  42. nextConfig: NextConfigComplete;
  43. });
  44. get(cacheKey: string): Promise<IncrementalCacheEntry | null>;
  45. set(cacheKey: string, value: IncrementalCacheValue | null, revalidate?: number | false): Promise<void>;
  46. }
  47. export declare class ImageError extends Error {
  48. statusCode: number;
  49. constructor(statusCode: number, message: string);
  50. }
  51. export declare function getMaxAge(str: string | null): number;
  52. export declare function imageOptimizer(_req: IncomingMessage, _res: ServerResponse, paramsResult: ImageParamsResult, nextConfig: NextConfigComplete, isDev: boolean | undefined, handleRequest: (newReq: IncomingMessage, newRes: ServerResponse, newParsedUrl?: NextUrlWithParsedQuery) => Promise<void>): Promise<{
  53. buffer: Buffer;
  54. contentType: string;
  55. maxAge: number;
  56. }>;
  57. export declare function sendResponse(req: IncomingMessage, res: ServerResponse, url: string, extension: string, buffer: Buffer, isStatic: boolean, xCache: XCacheHeader, contentSecurityPolicy: string, maxAge: number, isDev: boolean): void;
  58. export declare function resizeImage(content: Buffer, width: number, height: number, extension: 'avif' | 'webp' | 'png' | 'jpeg', quality: number): Promise<Buffer>;
  59. export declare function getImageSize(buffer: Buffer, extension: 'avif' | 'webp' | 'png' | 'jpeg'): Promise<{
  60. width?: number;
  61. height?: number;
  62. }>;
  63. export declare class Deferred<T> {
  64. promise: Promise<T>;
  65. resolve: (value: T) => void;
  66. reject: (error?: Error) => void;
  67. constructor();
  68. }
  69. export {};