@paroicms/server-image-cache-engine
Version:
The image variant engine that we use at Paroi.
58 lines (57 loc) • 2.31 kB
TypeScript
import type { AppLogger } from "@paroicms/internal-server-lib";
import type { ResizeRule, ScImageCompressionQualityPolicyStep } from "@paroicms/public-anywhere-lib";
import type { GetOriginalImage, ImageCacheOwnerTransaction, ImageVariant, ImageVariantStorage, ImageVariantWithBinary, NewVariantInput } from "./engine-types.js";
export interface ImageCacheEngine {
getImageVariantWithBinary(options: {
mediaId: string;
mediaType: string;
rawWidth: number;
rawHeight: number;
}): Promise<ImageVariantWithBinary | undefined>;
getImageVariantWithBinaryByOwner(options: {
mediaId: string;
mediaType: string;
ownerHandle: string;
rawResizeR: ResizeRule;
}): Promise<ImageVariantWithBinary | undefined>;
makeImageAvailable(input: NewVariantAndOwnerInput): Promise<ImageVariant>;
createOwnerTransaction(ownerHandle: string): ImageCacheOwnerTransaction;
invalidate(options: {
mediaId: string;
} | {
mediaIds: string[];
} | {
ownerHandles: string[];
}): Promise<void>;
/**
* Delete the images that have no ownerHandle and that have not been used recently.
*/
cleanUnusedValues(): Promise<void>;
clearCache(): Promise<void>;
getUsedRawSizesByMedia(mediaId: string): Promise<import("./engine-types.js").UsedRawSize[]>;
close(): Promise<void>;
}
export interface NewVariantAndOwnerInput extends NewVariantInput {
ownerHandle: string;
isHandleReusable: boolean;
/**
* If `true`, the `ownerHandle` is used for a single variant with the same `mediaType` and
* `mediaId`. Also, `getImageVariantWithBinaryByOwner` can be safely used to fetch the image
* variant even when the variant is still being processed.
*/
canBeRetrievedByOwner: boolean;
}
export interface CreateImageCacheEngineOptions {
storage: ImageVariantStorage;
getOriginalImage: GetOriginalImage;
logger?: AppLogger;
qualityPolicy: ScImageCompressionQualityPolicyStep[];
/**
* For example: `"14d"`. Leave `undefined` to keep cache data undefinitely.
*/
timeToIdle?: string;
}
export declare function createImageCacheEngine(options: CreateImageCacheEngineOptions): Promise<{
imageCache: ImageCacheEngine;
isCleared: boolean;
}>;