const sources = { bdc: { domain: "https://lpbookingcom.imgix.net", regex: /https?:\/\/[\w-]+.bstatic.com/, }, gadventures: { domain: "https://lpgadventures.imgix.net", regex: /https?:\/\/media.gadventures.com/, }, hostelworld: { domain: "https://lphostelworld.imgix.net", regex: /https?:\/\/(.*)hwstatic.com/, }, media: { domain: "https://lonelyplanetimages.imgix.net", regex: /https?:\/\/media.lonelyplanet.com/, }, viator: { domain: "https://lpviator.imgix.net", regex: /https?:\/\/cache-graphicslib.viator.com/, }, wordpress: { domain: "https://lonelyplanetwp.imgix.net", regex: /https?:\/\/www.lonelyplanet.com\/travel-blog\/tip-article\/wordpress_uploads/, }, }; interface IImgixProps { auto?: string; crop?: string; fit?: string; h?: number; q?: number; sharp?: number; w?: number; [key: string]: any; } /** * Converts an image path to the imgix url with params */ export default function imgix( src: string, options: IImgixProps = {}, source: string = "media", ): string { const match = sources[source || "media"]; if (!match || !match.regex.test(src)) { return src; } const url = src.replace(match.regex, match.domain); const query = Object.keys(options) .map(k => `${k}=${options[k]}`) .join("&"); return `${url}${query ? `?${query}` : ""}`; }