export enum Resource { MangaDex = 'MangaDex', Rawkuma = 'Rawkuma' } export const identify = (url: string): Resource | undefined => { if (url.match(/mangadex\.org\/title\/([a-f0-9-]+)\/?/)?.[1]) { return Resource.MangaDex; } else if (url.match(/rawkuma\.com\/manga\/([a-z0-9-]+)\/?/)?.[1]) { return Resource.Rawkuma; } return undefined; }; export const fetchResource = async (url: string) => { const resource = identify(url); if (resource === Resource.MangaDex) { return await fetch( `https://api.mangadex.org/manga/${ url.match(/mangadex\.org\/title\/([a-f0-9-]+)\/?/)?.[1] }/feed?order[chapter]=desc&translatedLanguage[]=en` ); } else if (resource === Resource.Rawkuma) { return await fetch(url); } return fetch(url); }; export const decodeResource = async (response: Response, url: string) => { const resource = identify(url); if (resource === Resource.MangaDex) { return await response.json(); } else { return await response.text(); } };