@replyke/core
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
75 lines (74 loc) • 2.13 kB
TypeScript
export interface ImageVariant {
path: string;
publicPath: string;
width: number;
height: number;
size: number;
format: string;
}
export interface Image {
fileId: string;
imageId: string;
status: "completed" | "failed";
original: ImageVariant;
variants: Record<string, ImageVariant>;
metadata: {
originalFormat: string;
originalSize: number;
exifStripped: boolean;
processingTime: number;
};
createdAt: string;
}
interface BaseImageOptions {
quality?: number;
format?: "webp" | "jpeg" | "png" | "original";
stripExif?: boolean;
pathParts?: string[];
entityId?: string;
commentId?: string;
spaceId?: string;
onProgress?: (progress: number) => void;
}
export interface ExactDimensionsMode extends BaseImageOptions {
mode: "exact-dimensions";
dimensions: Record<string, {
width: number;
height: number;
}>;
fit?: "cover" | "contain" | "inside" | "outside";
}
export interface AspectRatioWidthMode extends BaseImageOptions {
mode: "aspect-ratio-width-based";
aspectRatio: {
width: number;
height: number;
};
widths: Record<string, number>;
fit?: "cover" | "contain" | "inside" | "outside";
}
export interface AspectRatioHeightMode extends BaseImageOptions {
mode: "aspect-ratio-height-based";
aspectRatio: {
width: number;
height: number;
};
heights: Record<string, number>;
fit?: "cover" | "contain" | "inside" | "outside";
}
export interface OriginalAspectMode extends BaseImageOptions {
mode: "original-aspect";
sizes: Record<string, number>;
fit?: "inside" | "outside";
}
export interface MultiAspectRatioMode extends BaseImageOptions {
mode: "multi-aspect-ratio";
aspectRatios: Array<{
width: number;
height: number;
}>;
sizes: Record<string, number>;
fit?: "cover" | "contain" | "inside" | "outside";
}
export type UploadImageOptions = ExactDimensionsMode | AspectRatioWidthMode | AspectRatioHeightMode | OriginalAspectMode | MultiAspectRatioMode;
export {};