import { isArray, has, isObject } from "lodash-es"; type Size = number | number[] | { h?: number; w?: number; m?: string }; function parse(rules: string[], { url, size }: { url: string; size: Size }) { if (!url) { return ""; } if (url.startsWith("blob:") || url.includes("file://")) { return url; } let h = 0; let w = 0; if (isArray(size)) { h = size[0]; w = size[1]; } else if (isObject(size) && has(size, "h")) { h = size.h!; w = size.w!; if (size.m) { rules.push(`m_${size.m}`); } } else { h = w = Number(size); } url += url.includes("?") ? "&" : "?"; if (h) { rules.push(`h_${h}`); } if (w) { rules.push(`w_${w}`); } return `${url}${rules.join(",")}`; } function videoPoster(url: string, size: Size) { return parse(["x-oss-process=video/snapshot,t_1000,f_jpg,m_fast"], { url, size }); } function resizeImage(url: string, size: Size) { return parse(["x-oss-process=image/resize"], { url, size }); } export { videoPoster, resizeImage };