import { PayloadImage } from "../sdk"; export const isDefined = <T>(value: T | null | undefined): value is T => value !== null && value !== undefined; export const isUndefined = <T>(value: T | null | undefined): value is null | undefined => !isDefined(value); export const isNotEmpty = (value: string | null | undefined): value is string => isDefined(value) && value.trim().length > 0; export const isEmpty = (value: string | null | undefined): value is string => isUndefined(value) || value.trim().length === 0; type Span = [number, number]; const hasNoIntersection = (a: Span, b: Span): boolean => { const [aStart, aEnd] = a; const [bStart, bEnd] = b; return aEnd < bStart || aStart > bEnd; }; export const hasIntersection = (a: Span, b: Span): boolean => !hasNoIntersection(a, b); export const hasDuplicates = <T>(list: T[]): boolean => list.length !== new Set(list).size; export const isValidPayloadImage = ( image: Partial<PayloadImage> | undefined ): image is PayloadImage => { if (isUndefined(image)) return false; if (isEmpty(image.filename)) return false; if (isEmpty(image.url)) return false; if (isEmpty(image.mimeType)) return false; if (isUndefined(image.width)) return false; if (isUndefined(image.height)) return false; return true; }; export const isString = <T extends Object>(value: string | T): value is string => typeof value === "string"; export const isPayloadType = <T extends Object>(value: string | T): value is T => typeof value === "object"; export const isPayloadArrayType = <T extends Object>(value: string[] | T[]): value is T[] => value.every(isPayloadType<T>);