UNPKG

@npio/internals

Version:

A free visual website editor, powered with your own SolidJS components.

68 lines (56 loc) 1.48 kB
import { NitroMedia } from "@prisma/client"; import { Media } from "../types"; export const svgMime = "image/svg+xml"; export const imageMimes = [ "image/jpeg", "image/png", "image/webp", "image/gif", "image/avif", "image/tiff", svgMime, ]; export const videoMimes = ["video/mp4", "video/ogg", "video/webm"]; export const audioMimes = ["audio/mpeg", "audio/wav", "audio/ogg"]; export const mediaType = function (media: NitroMedia) { return fileType(media.mime); }; export const fileType = function (mime: string) { if (imageMimes.includes(mime)) { return "image"; } if (audioMimes.includes(mime)) { return "audio"; } if (videoMimes.includes(mime)) { return "video"; } return "other"; }; export const fallbackSize = 1920; export const mediaImageUrl = ( media: Media, { size, aspectRatio, format = "webp", dpr, force, }: { force?: boolean; size?: number; aspectRatio?: string; dpr?: number; format?: string; } = {}, ) => { if (media.mime === svgMime && !force) return media.rawUrl; const params = new URLSearchParams(); if (size != null) params.append("s", String(size)); if (aspectRatio) params.append("ar", aspectRatio); if (dpr != null) params.append("dpr", String(dpr)); if (media.timestamp != null) params.append("ts", String(media.timestamp)); const url = `/image/${media.publicId}.${format}`; if (!params.size) return url; return `${url}?${params}`; };