import { ExifData } from 'exif'; import { File } from 'formidable'; export namespace AcceptableMedia { export const gifs = ['.gif']; export const pngs = ['.png']; export const jpgs = ['.jpg', '.jpeg']; export const webps = ['.webp']; export const tiffs = ['.tiff']; export const imageFormats = [...pngs, ...jpgs, ...gifs, ...webps, ...tiffs]; export const videoFormats = ['.mov', '.mp4', '.quicktime', '.mkv', '.x-matroska;codecs=avc1']; export const applicationFormats = ['.pdf']; export const audioFormats = ['.wav', '.mp3', '.mpeg', '.flac', '.au', '.aiff', '.m4a', '.webm']; } export enum AudioAnnoState { stopped = 'stopped', playing = 'playing', } export namespace Upload { export function isTextInformation(uploadResponse: Upload.FileInformation): uploadResponse is Upload.ImageInformation { return 'rawText' in uploadResponse; } export function isImageInformation(uploadResponse: Upload.FileInformation): uploadResponse is Upload.ImageInformation { return 'nativeWidth' in uploadResponse; } export function isVideoInformation(uploadResponse: Upload.FileInformation): uploadResponse is Upload.VideoInformation { return 'duration' in uploadResponse; } export interface AccessPathInfo { [suffix: string]: { client: string; server: string }; } export interface FileInformation { accessPaths: AccessPathInfo; rawText?: string; duration?: number; } export interface EnrichedExifData { data: ExifData & ExifData['gps'] & { Orientation?: string }; error?: string; } export interface InspectionResults { source: string; requestable: string; exifData: EnrichedExifData; contentSize: number; contentType: string; nativeWidth: number; nativeHeight: number; filename?: string; } export interface VideoResults { duration: number; } export type FileResponse = { source: File; result: T | Error }; export type ImageInformation = FileInformation & InspectionResults; export type VideoInformation = FileInformation & VideoResults; }