/// import { Request, Response } from 'express'; import { ServerResponse } from 'http'; import { Color, ExtendOptions, Region, Sharp } from 'sharp'; import { Duplex } from 'stream'; import { Logger } from 'pino'; export declare type Middleware = (req: Request, res: IMutableResponse, next: () => any) => any; /** * Receives an [express Request](https://expressjs.com/en/api.html#req) and * returns `true` if hastily should attempt to optimize the current request. * The default implementation tests the file extension for files supported as * input formats by `sharp`. */ export declare type RequestFilter = (request: Request) => boolean; export interface IRequestErrors { url: string; warnings: Warning[]; } /** * Receives a {@link RequestErrors} object to do side effects such as logging. * Default prints to stderr. */ export declare type ErrorLogger = (errors: IRequestErrors | Error) => any; export declare type Param = 'bg-color' | 'blur' | 'brightness' | 'canvas' | 'crop' | 'contrast' | 'disable' | 'dpr' | 'enable' | 'fit' | 'height' | 'orient' | 'pad' | 'resize-filter' | 'saturation' | 'sharpen' | 'trim' | 'width'; export declare type ParamMap = Map; export declare type NumericParams = (number | undefined)[]; export declare type Mapper = (transform: Sharp, params: IFastlyParams) => Sharp | false; export declare type Orientation = 'r' | 'l' | 'h' | 'v' | 'hv' | 'vh' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8'; export declare type Format = 'gif' | 'png' | 'png8' | 'jpg' | 'pjpg' | 'webp' | 'webpll' | 'webply'; export interface IMutableResponse extends ServerResponse, Response { _header: any; flush(): any; _implicitHeader(): any; } export declare type Handler = (...args: readonly any[]) => any; export declare type EventName = string | symbol; export declare type Listener = readonly [EventName, Handler]; export interface IWorkStream extends Duplex { flush(): any; } export declare type WarnType = 'unsupported' | 'invalid'; export interface Warning { type: WarnType; msg: string; } export interface IFastlyParams { /** * The Express.Request being handled. */ req: Request; /** * The Express.Response being transformed. */ res: IMutableResponse; /** * Logger object for the context of this request. */ log: Logger; /** * The requested output quality, from 1-100 (optional, default 85 from sharp) */ quality: number | undefined; /** * Get a string value from the raw query. */ get(param: Param): string | undefined; /** * Test for the presence of a string value in the raw query. */ has(param: Param): boolean; /** * Record that an unsupported or invalid value was passed, for optional later * logging. */ warn(type: WarnType, param: Param, msg?: string): void; /** * Get list of warnings for optional logging. */ getWarnings(): Warning[]; /** * Cast parameters to numbers, and return them in order. * @example * params.toNumbers(['width', 'dpr']) * // from query width=400&dpr=1.300, * // returns [400, 1.3] */ toNumbers(names: Param[]): NumericParams; /** * Parse a comma-separated string specifying top, left, bottom, and right * pixel values, and optionally background color. * @example * params.toCssBox('extend') * // from query extend=25,30,80&bg-color=40,40,40 * // returns { * // top: 25, * // left: 30, * // bottom: 80, * // right: 30, * // background: { r: 40, g: 40, b: 40 } * // } * */ toCssBox(name: Param): ExtendOptions; /** * Parse a comma-separated string R,G,B into a color value usable by Sharp. * @example * params.toColor('bg-color') * // from query bg-color=ccc * // returns '#ccc' * // from query bg-color=3,50,40 * // returns { r: 3, g: 50, b: 40 } */ toColor(name: Param): Color; /** * Parse a comma-separated string with optional tag-prefixed values and * required positional values. * @example * params.toTaggedValues('canvas', ['width', 'foo'], ['smart', 'x']) * // from query canvas=30,bar,smart,x5 * // returns { width: 30, foo: 'bar', smart: null, x: 5 } */ toTaggedValues(name: Param, positional: string[], named: string[]): { [key: string]: string | null; }; /** * Parse a comma-separated string into an absolutely positioned CSS box, * with optional top, left, width, and height values. * @example * params.toRegion('extract') * // from query extract=40,80,y0,x50 * // returns { width: 40, height: 80, left: 50, top: 0 } */ toRegion(name: Param): Partial; }