imagetools-core
Version:
86 lines (85 loc) • 2.51 kB
TypeScript
import type { Metadata, Sharp } from 'sharp';
import { kernelValues } from './transforms/kernel.js';
import { positionValues } from './transforms/position.js';
export interface ProcessedImageMetadata extends ImageMetadata {
src: string;
image: Sharp;
}
export interface ImageMetadata extends Metadata {
allowUpscale?: boolean;
aspect?: number | undefined;
backgroundDirective?: string;
blur?: number | boolean | undefined;
brightness?: number | '' | undefined;
fit?: string;
flip?: true;
flop?: true;
flatten?: true;
hue?: number | '' | undefined;
invert?: true;
grayscale?: true;
kernel?: (typeof kernelValues)[number];
lossless?: true;
median?: number;
normalize?: true;
pixelDensityDescriptor?: string | undefined;
position?: (typeof positionValues)[number];
progressive?: true;
quality?: number;
saturation?: number | '' | undefined;
tint?: string;
rotate?: number;
[key: string]: unknown;
}
export type ImageConfig = Record<string, string | string[]>;
export interface Logger {
info: (msg: string) => void;
warn: (msg: string) => void;
error: (msg: string) => void;
}
export interface TransformFactoryContext {
useParam: (parameter: string) => void;
manualSearchParams: URLSearchParams;
logger: Logger;
}
export type TransformFactory<A = Record<string, unknown>> = (metadata: Partial<ImageConfig & A>, ctx: TransformFactoryContext) => ImageTransformation | undefined;
export type TransformOption<A = Record<string, unknown>, T = unknown> = (metadata: Partial<ImageConfig & A>, image: Sharp) => T | undefined;
export type ImageTransformation = (image: Sharp) => Sharp | Promise<Sharp>;
export interface TransformResult {
image: Sharp;
metadata: ImageMetadata;
}
/**
* The JS object returned by the image import.
*/
export type OutputFormat = (args?: string[]) => (metadata: ProcessedImageMetadata[]) => unknown;
/**
* The img output format.
*/
export interface Img {
src: string;
/**
* The intrinsic width
*/
w: number;
/**
* The intrinsic height. May not be the rendered height.
* Helps prevent reflow. See https://html.com/attributes/img-height/
*/
h: number;
srcset?: string;
}
/**
* The picture output format.
*/
export interface Picture {
/**
* Key is format. Value is srcset.
*/
sources: Record<string, string>;
img: {
src: string;
w: number;
h: number;
};
}