@quranjs/api 1.8.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.min.js CHANGED
@@ -1,17 +1,3 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var S = require('humps');
6
-
7
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
-
9
- var S__default = /*#__PURE__*/_interopDefaultLegacy(S);
10
-
11
- var C=(f=>(f.Word="word",f.End="end",f.Pause="pause",f.Sajdah="sajdah",f.RubElHizb="rub-el-hizb",f))(C||{});var l=(s=>(s.ARABIC="ar",s.ENGLISH="en",s.URDU="ur",s.BENGALI="bn",s.TURKISH="tr",s.SPANISH="es",s.GERMAN="de",s.BOSNIAN="bs",s.RUSSIAN="ru",s.ALBANIAN_AL="al",s.FRENCH="fr",s.DUTCH="nl",s.TAMIL="ta",s.TAJIK="tg",s.INDONESIAN="id",s.UZBEK="uz",s.VIETNAMESE="vi",s.CHINESE="zh",s.ITALIAN="it",s.JAPANESE="ja",s.MALAYALAM="ml",s.AMHARIC="am",s.KAZAKH="kk",s.PORTUGUESE="pt",s.TAGALOG="tl",s.THAI="th",s.KOREAN="ko",s.HINDI="hi",s.KURDISH="ku",s.HAUSA="ha",s.AZERI="az",s.SWAHILI="sw",s.PERSIAN="fa",s.SERBIAN="sr",s.MARANAO="mrn",s.AMAZIGH="zgh",s.ASSAMESE="as",s.BULGARIAN="bg",s.CHECHEN="ce",s.CZECH="cs",s.DIVEHI="dv",s.DHIVEHI="dv",s.MALDIVIAN="dv",s.FINNISH="fi",s.GUJAARATI="gu",s.HEBREW="he",s.GEORGIAN="ka",s.CENTRAL_KHMER="km",s.GANDA="lg",s.MARATHI="mr",s.YORUBA="yo",s.MALAY="ms",s.NEPALI="ne",s.SWEDISH="sv",s.TELUGU="te",s.TATAR="tt",s.UIGHUR="ug",s.UYGHUR="ug",s.UKRAINIAN="uk",s.NORWEGIAN="no",s.OROMO="om",s.POLISH="pl",s.PASHTO="ps",s.ROMANIAN="ro",s.SINDHI="sd",s.NORTHERN_SAMI="se",s.SINHALA="si",s.SINHALESE="si",s.SOMALI="so",s.ALBANIAN_SQ="sq",s))(l||{}),G=(i=>(i.MadaniV1="code_v1",i.MadaniV2="code_v2",i.Uthmani="text_uthmani",i))(G||{});var h=r=>r.startsWith("/")?r.slice(1):r;var B="https://api.quran.com/api/v4/",{camelizeKeys:R,decamelize:z,decamelizeKeys:H}=S__default["default"],I=(r,e)=>{let t=`${B}${h(r)}`;if(!e)return t;let i=H(e),n=new URLSearchParams(Object.entries(i).filter(([,f])=>f!==void 0)).toString();return n?`${t}?${n}`:t},a=async(r,e={},t)=>{if(t){let f=await t(I(r,e));return R(f)}if(typeof globalThis.fetch!="function")throw new Error("Looks like there is no global fetch function. Take a look at https://quranjs.com/techniques#custom-fetcher for more info.");let i=await globalThis.fetch(I(r,e));if(!i.ok||i.status>=400)throw new Error(`${i.status} ${i.statusText}`);let n=await i.json();return R(n)},c=(r={},e={})=>{let t={...r};t.fetchFn&&(t.fetchFn=void 0);let i={...e,...t};if(i.fields){let n=[];Object.entries(i.fields).forEach(([f,E])=>{E&&n.push(z(f));}),i.fields=n.join(",");}return i};var P={1:7,2:286,3:200,4:176,5:120,6:165,7:206,8:75,9:129,10:109,11:123,12:111,13:43,14:52,15:99,16:128,17:111,18:110,19:98,20:135,21:112,22:78,23:118,24:64,25:77,26:227,27:93,28:88,29:69,30:60,31:34,32:30,33:73,34:54,35:45,36:83,37:182,38:88,39:75,40:85,41:54,42:53,43:89,44:59,45:37,46:35,47:38,48:29,49:18,50:45,51:60,52:49,53:62,54:55,55:78,56:96,57:29,58:22,59:24,60:13,61:14,62:11,63:11,64:18,65:12,66:12,67:30,68:52,69:52,70:44,71:28,72:28,73:20,74:56,75:40,76:31,77:50,78:40,79:46,80:42,81:29,82:19,83:36,84:25,85:22,86:17,87:19,88:26,89:30,90:20,91:15,92:21,93:11,94:8,95:8,96:19,97:5,98:8,99:8,100:11,101:11,102:8,103:3,104:9,105:5,106:4,107:7,108:3,109:6,110:3,111:5,112:4,113:5,114:6},A=r=>{let e=typeof r=="number"?r:Number(r);return !(!e||e<=0||e>114)},T=r=>{let e=typeof r=="number"?r:Number(r);return !(!e||e<=0||e>30)},U=r=>{let e=typeof r=="number"?r:Number(r);return !(!e||e<=0||e>240)},$=r=>{let e=typeof r=="number"?r:Number(r);return !(!e||e<=0||e>60)},K=r=>{let e=typeof r=="number"?r:Number(r);return !(!e||e<=0||e>604)},j=r=>{let[e,t]=r.trim().split(":");if(!e||!t||!A(e))return !1;let i=Number(t),n=P[e];return !(!i||i<=0||i>n)},M={isValidChapterId:A,isValidJuz:T,isValidRub:U,isValidHizb:$,isValidQuranPage:K,isValidVerseKey:j},o=M;var p={language:"ar"},_=async r=>{let e=c(r,p),{chapters:t}=await a("/chapters",e,r==null?void 0:r.fetchFn);return t},k=async(r,e)=>{if(!o.isValidChapterId(r))throw new Error("Invalid chapter id");let t=c(e,p),{chapter:i}=await a(`/chapters/${r}`,t,e==null?void 0:e.fetchFn);return i},J=async(r,e)=>{if(!o.isValidChapterId(r))throw new Error("Invalid chapter id");let t=c(e,p),{chapterInfo:i}=await a(`/chapters/${r}/info`,t,e==null?void 0:e.fetchFn);return i},D={findAll:_,findById:k,findInfoById:J},b=D;var{decamelize:y}=S__default["default"],g={language:"ar",perPage:50,words:!1},d=(r={})=>{let e=c(r,g);if(e.translations&&(e.translations=e.translations.join(",")),e.tafsirs&&(e.tafsirs=e.tafsirs.join(",")),e.wordFields){let t=[];Object.entries(e.wordFields).forEach(([i,n])=>{n&&t.push(y(i));}),e.wordFields=t.join(",");}if(e.translationFields){let t=[];Object.entries(e.translationFields).forEach(([i,n])=>{n&&t.push(y(i));}),e.translationFields=t.join(",");}return e.reciter&&(e.audio=e.reciter,e.reciter=void 0),e},q=async(r,e)=>{if(!o.isValidVerseKey(r))throw new Error("Invalid verse key");let t=d(e),i=`/verses/by_key/${r}`,{verse:n}=await a(i,t,e==null?void 0:e.fetchFn);return n},Z=async(r,e)=>{if(!o.isValidChapterId(r))throw new Error("Invalid chapter id");let t=d(e),i=`/verses/by_chapter/${r}`,{verses:n}=await a(i,t,e==null?void 0:e.fetchFn);return n},Y=async(r,e)=>{if(!o.isValidQuranPage(r))throw new Error("Invalid page");let t=d(e),i=`/verses/by_page/${r}`,{verses:n}=await a(i,t,e==null?void 0:e.fetchFn);return n},Q=async(r,e)=>{if(!o.isValidJuz(r))throw new Error("Invalid juz");let t=d(e),i=`/verses/by_juz/${r}`,{verses:n}=await a(i,t,e==null?void 0:e.fetchFn);return n},X=async(r,e)=>{if(!o.isValidHizb(r))throw new Error("Invalid hizb");let t=d(e),i=`/verses/by_hizb/${r}`,{verses:n}=await a(i,t,e==null?void 0:e.fetchFn);return n},L=async(r,e)=>{if(!o.isValidRub(r))throw new Error("Invalid rub");let t=d(e),{verses:i}=await a(`/verses/by_rub/${r}`,t,e==null?void 0:e.fetchFn);return i},ee=async r=>{let e=d(r),{verse:t}=await a("/verses/random",e,r==null?void 0:r.fetchFn);return t},re={findByKey:q,findByChapter:Z,findByPage:Y,findByJuz:Q,findByHizb:X,findByRub:L,findRandom:ee},O=re;var te=async r=>{let{juzs:e}=await a("/juzs",void 0,r==null?void 0:r.fetchFn);return e},se={findAll:te},V=se;var N={language:"ar"},u={language:"ar"},ie=async(r,e)=>{let t=c(e,N),{audioFiles:i}=await a(`/chapter_recitations/${r}`,t,e==null?void 0:e.fetchFn);return i},ae=async(r,e,t)=>{if(!o.isValidChapterId(r))throw new Error("Invalid chapter id");let i=c(t,N),{audioFile:n}=await a(`/chapter_recitations/${e}/${r}`,i,t==null?void 0:t.fetchFn);return n},ne=async(r,e,t)=>{if(!o.isValidChapterId(r))throw new Error("Invalid chapter id");let i=c(t,u);return await a(`/recitations/${e}/by_chapter/${r}`,i,t==null?void 0:t.fetchFn)},ce=async(r,e,t)=>{if(!o.isValidJuz(r))throw new Error("Invalid juz");let i=c(t,u);return await a(`/recitations/${e}/by_juz/${r}`,i,t==null?void 0:t.fetchFn)},oe=async(r,e,t)=>{if(!o.isValidQuranPage(r))throw new Error("Invalid page");let i=c(t,u);return await a(`/recitations/${e}/by_page/${r}`,i,t==null?void 0:t.fetchFn)},fe=async(r,e,t)=>{if(!o.isValidRub(r))throw new Error("Invalid rub");let i=c(t,u);return await a(`/recitations/${e}/by_rub/${r}`,i,t==null?void 0:t.fetchFn)},me=async(r,e,t)=>{if(!o.isValidHizb(r))throw new Error("Invalid hizb");let i=c(t,u);return await a(`/recitations/${e}/by_hizb/${r}`,i,t==null?void 0:t.fetchFn)},de=async(r,e,t)=>{if(!o.isValidVerseKey(r))throw new Error("Invalid verse key");let i=c(t,u);return await a(`/recitations/${e}/by_ayah/${r}`,i,t==null?void 0:t.fetchFn)},le={findAllChapterRecitations:ie,findChapterRecitationById:ae,findVerseRecitationsByChapter:ne,findVerseRecitationsByJuz:ce,findVerseRecitationsByPage:oe,findVerseRecitationsByRub:fe,findVerseRecitationsByHizb:me,findVerseRecitationsByKey:de},w=le;var m={language:"ar"},ue=async r=>{let e=c(r),{recitations:t}=await a("/resources/recitations",e,r==null?void 0:r.fetchFn);return t},pe=async(r,e)=>{let t=c(e,m),{info:i}=await a(`/resources/recitations/${r}/info`,t,e==null?void 0:e.fetchFn);return i},he=async r=>{let e=c(r,m),{translations:t}=await a("/resources/translations",e,r==null?void 0:r.fetchFn);return t},Re=async(r,e)=>{let t=c(e,m),{info:i}=await a(`/resources/translations/${r}/info`,t,e==null?void 0:e.fetchFn);return i},Ie=async r=>{let e=c(r,m),{tafsirs:t}=await a("/resources/tafsirs",e,r==null?void 0:r.fetchFn);return t},Ae=async(r,e)=>{let t=c(e,m),{info:i}=await a(`/resources/tafsirs/${r}/info`,t,e==null?void 0:e.fetchFn);return i},be=async r=>{let{recitationStyles:e}=await a("/resources/recitation_styles",void 0,r==null?void 0:r.fetchFn);return e},ye=async r=>{let e=c(r,m),{languages:t}=await a("/resources/languages",e,r==null?void 0:r.fetchFn);return t},Oe=async r=>{let e=c(r,m),{chapterInfos:t}=await a("/resources/chapter_infos",e,r==null?void 0:r.fetchFn);return t},Ve=async r=>{let e=c(r,m),{verseMedia:t}=await a("/resources/verse_media",e,r==null?void 0:r.fetchFn);return t},Ne=async r=>{let e=c(r,m),{reciters:t}=await a("/resources/chapter_reciters",e,r==null?void 0:r.fetchFn);return t},we={findAllRecitations:ue,findAllTranslations:he,findAllTafsirs:Ie,findAllRecitationStyles:be,findAllLanguages:ye,findVerseMedia:Ve,findAllChapterReciters:Ne,findAllChapterInfos:Oe,findRecitationInfo:pe,findTranslationInfo:Re,findTafsirInfo:Ae},x=we;var xe={language:"ar",size:30},Fe=async(r,e)=>{let t=c({q:r,...e},xe),{search:i}=await a("/search",t,e==null?void 0:e.fetchFn);return i},ve={search:Fe},F=ve;var Ee={chapters:b,verses:O,juzs:V,audio:w,resources:x,search:F},v=Ee;var Ce={v4:v,utils:o},Ge=Ce;
12
-
13
- exports.CharType = C;
14
- exports.Language = l;
15
- exports.QuranFont = G;
16
- exports.quran = Ge;
1
+ 'use strict';var z=require('humps');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var z__default=/*#__PURE__*/_interopDefault(z);var B=(n=>(n.Word="word",n.End="end",n.Pause="pause",n.Sajdah="sajdah",n.RubElHizb="rub-el-hizb",n))(B||{});var G=(p=>(p.SURAH="surah",p.JUZ="juz",p.HIZB="hizb",p.AYAH="ayah",p.RUB_EL_HIZB="rub_el_hizb",p.SEARCH_PAGE="search_page",p.PAGE="page",p.RANGE="range",p.QURAN_RANGE="quran_range",p))(G||{});var U=(t=>(t.Advanced="advanced",t.Quick="quick",t))(U||{});var V=(r=>(r.ARABIC="ar",r.ENGLISH="en",r.URDU="ur",r.BENGALI="bn",r.TURKISH="tr",r.SPANISH="es",r.GERMAN="de",r.BOSNIAN="bs",r.RUSSIAN="ru",r.ALBANIAN_AL="al",r.FRENCH="fr",r.DUTCH="nl",r.TAMIL="ta",r.TAJIK="tg",r.INDONESIAN="id",r.UZBEK="uz",r.VIETNAMESE="vi",r.CHINESE="zh",r.ITALIAN="it",r.JAPANESE="ja",r.MALAYALAM="ml",r.AMHARIC="am",r.KAZAKH="kk",r.PORTUGUESE="pt",r.TAGALOG="tl",r.THAI="th",r.KOREAN="ko",r.HINDI="hi",r.KURDISH="ku",r.HAUSA="ha",r.AZERI="az",r.SWAHILI="sw",r.PERSIAN="fa",r.SERBIAN="sr",r.MARANAO="mrn",r.AMAZIGH="zgh",r.ASSAMESE="as",r.BULGARIAN="bg",r.CHECHEN="ce",r.CZECH="cs",r.DIVEHI="dv",r.FINNISH="fi",r.GUJAARATI="gu",r.HEBREW="he",r.GEORGIAN="ka",r.CENTRAL_KHMER="km",r.GANDA="lg",r.MARATHI="mr",r.YORUBA="yo",r.MALAY="ms",r.NEPALI="ne",r.SWEDISH="sv",r.TELUGU="te",r.TATAR="tt",r.UYGHUR="ug",r.UKRAINIAN="uk",r.NORWEGIAN="no",r.OROMO="om",r.POLISH="pl",r.PASHTO="ps",r.ROMANIAN="ro",r.SINDHI="sd",r.NORTHERN_SAMI="se",r.SINHALA="si",r.SOMALI="so",r.ALBANIAN_SQ="sq",r))(V||{}),k=(s=>(s.MadaniV1="code_v1",s.MadaniV2="code_v2",s.Uthmani="text_uthmani",s))(k||{});var a=i=>{let e=typeof i=="number"?i:Number(i);return !(!e||e<=0||e>114)};var A=i=>{let e=typeof i=="number"?i:Number(i);return !(!e||e<=0||e>30)};var v=i=>{let e=typeof i=="number"?i:Number(i);return !(!e||e<=0||e>240)};var P=i=>{let e=typeof i=="number"?i:Number(i);return !(!e||e<=0||e>60)};var x=i=>{let e=typeof i=="number"?i:Number(i);return !(!e||e<=0||e>604)};var N={1:7,2:286,3:200,4:176,5:120,6:165,7:206,8:75,9:129,10:109,11:123,12:111,13:43,14:52,15:99,16:128,17:111,18:110,19:98,20:135,21:112,22:78,23:118,24:64,25:77,26:227,27:93,28:88,29:69,30:60,31:34,32:30,33:73,34:54,35:45,36:83,37:182,38:88,39:75,40:85,41:54,42:53,43:89,44:59,45:37,46:35,47:38,48:29,49:18,50:45,51:60,52:49,53:62,54:55,55:78,56:96,57:29,58:22,59:24,60:13,61:14,62:11,63:11,64:18,65:12,66:12,67:30,68:52,69:52,70:44,71:28,72:28,73:20,74:56,75:40,76:31,77:50,78:40,79:46,80:42,81:29,82:19,83:36,84:25,85:22,86:17,87:19,88:26,89:30,90:20,91:15,92:21,93:11,94:8,95:8,96:19,97:5,98:8,99:8,100:11,101:11,102:8,103:3,104:9,105:5,106:4,107:7,108:3,109:6,110:3,111:5,112:4,113:5,114:6};var h=i=>{let[e,t]=i.trim().split(":");if(!e||!t||!a(e))return false;let s=Number(t),o=N[e];return !(!s||s<=0||s>o)};var l=class{constructor(e){this.fetcher=e;}async findAllChapterRecitations(e,t){let{audioFiles:s}=await this.fetcher.fetch(`/content/api/v4/recitations/${e}`,t);return s}async findChapterRecitationById(e,t,s){if(!a(t))throw new Error("Invalid chapter id");let{audioFile:o}=await this.fetcher.fetch(`/content/api/v4/recitations/${e}/${t}`,s);return o}async findVerseRecitationsByChapter(e,t,s){if(!a(e))throw new Error("Invalid chapter id");return await this.fetcher.fetch(`/content/api/v4/recitations/${t}/by_chapter/${e}`,s)}async findVerseRecitationsByKey(e,t,s){if(!h(e))throw new Error("Invalid verse key");return await this.fetcher.fetch(`/content/api/v4/recitations/${t}/by_ayah/${e}`,s)}};var m=class{constructor(e){this.fetcher=e;}async findAll(e){let{chapters:t}=await this.fetcher.fetch("/content/api/v4/chapters",e);return t}async findById(e,t){if(!a(e))throw new Error("Invalid chapter id");let{chapter:s}=await this.fetcher.fetch(`/content/api/v4/chapters/${e}`,t);return s}async findInfoById(e,t){if(!a(e))throw new Error("Invalid chapter id");let{chapterInfo:s}=await this.fetcher.fetch(`/content/api/v4/chapters/${e}/info`,t);return s}};var T=async(i,e={retries:3})=>{let t;for(let s=0;s<=e.retries;s++)try{return await i()}catch(o){if(t=o,s===e.retries)throw t;await new Promise(n=>setTimeout(n,Math.pow(2,s)*1e3));}throw t};var{decamelize:w}=z__default.default,F=i=>i.startsWith("/")?i.slice(1):i,S=["wordFields","translationFields","fields"],E=new Set([...S,...S.map(i=>w(i))]),H=new Set(["navigationalResultsNumber","versesResultsNumber"]),O=i=>{if(!i)return "";let e=new URLSearchParams;for(let[t,s]of Object.entries(i)){if(s===void 0)continue;let o=H.has(t)?t:w(t);if(E.has(t)||E.has(o)){let n=Object.entries(s).filter(([,c])=>c).map(([c])=>w(c));n.length>0&&e.set(o,n.join(","));continue}typeof s=="string"?e.set(o,s):typeof s=="number"||typeof s=="boolean"?e.set(o,s.toString()):Array.isArray(s)&&e.set(o,s.join(","));}return e.size===0?"":`?${e.toString()}`};var{camelizeKeys:_}=z__default.default,u=class{constructor(e){this.config=e;}cachedToken=null;updateConfig(e){this.config=e;}getFetch(){let{fetch:e}=this.config,t=e??globalThis.fetch;if(typeof t!="function")throw new Error("No fetch function available. Please provide a fetch implementation or ensure global fetch is available.");return t}doFetch(...e){return this.getFetch()(...e)}async getAccessToken(){if(this.cachedToken&&this.cachedToken.expiresAt>Date.now()+3e4)return this.cachedToken.value;let{clientId:e,clientSecret:t,authBaseUrl:s}=this.config,o=btoa(`${e}:${t}`),n=new URLSearchParams({grant_type:"client_credentials",scope:"content"}).toString(),c=await T(()=>this.doFetch(`${s}/oauth2/token`,{method:"POST",headers:{Authorization:`Basic ${o}`,"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:n}),{retries:3});if(!c.ok)throw new Error(`Token request failed: ${c.statusText}`);let f=await c.json(),I=Date.now()+f.expires_in*1e3;return this.cachedToken={value:f.access_token,expiresAt:I},this.cachedToken.value}clearCachedToken(){this.cachedToken=null;}makeUrl(e,t){let{contentBaseUrl:s}=this.config;return `${s}/${F(e)}${O(t)}`}async fetch(e,t){let{clientId:s,defaults:o}=this.config,n=await this.getAccessToken(),c=this.makeUrl(e,{...o,...t}),f=await this.doFetch(c,{headers:{"x-auth-token":n,"x-client-id":s,"Content-Type":"application/json"}});if(!f.ok||f.status>=400)throw new Error(`${f.status} ${f.statusText}`);let I=await f.json();return _(I)}};var d=class{constructor(e){this.fetcher=e;}async findAll(){let{juzs:e}=await this.fetcher.fetch("/content/api/v4/juzs");return e}};var y=class{constructor(e){this.fetcher=e;}async findAllRecitations(e){let{recitations:t}=await this.fetcher.fetch("/content/api/v4/resources/recitations",e);return t}async findAllTranslations(e){let{translations:t}=await this.fetcher.fetch("/content/api/v4/resources/translations",e);return t}async findAllTafsirs(e){let{tafsirs:t}=await this.fetcher.fetch("/content/api/v4/resources/tafsirs",e);return t}async findAllLanguages(e){let{languages:t}=await this.fetcher.fetch("/content/api/v4/resources/languages",e);return t}async findRecitationInfo(e,t){let{recitationInfo:s}=await this.fetcher.fetch(`/content/api/v4/resources/recitations/${e}/info`,t);return s}async findTranslationInfo(e,t){let{translationInfo:s}=await this.fetcher.fetch(`/content/api/v4/resources/translations/${e}/info`,t);return s}async findTafsirInfo(e,t){let{tafsirInfo:s}=await this.fetcher.fetch(`/content/api/v4/resources/tafsirs/${e}/info`,t);return s}async findAllChapterInfos(e){let{chapterInfos:t}=await this.fetcher.fetch("/content/api/v4/resources/chapter_infos",e);return t}async findAllChapterReciters(e){let{reciters:t}=await this.fetcher.fetch("/content/api/v4/resources/chapter_reciters",e);return t}async findAllRecitationStyles(e){let{recitationStyles:t}=await this.fetcher.fetch("/content/api/v4/resources/recitation_styles",e);return t}async findVerseMedia(e){let{verseMedia:t}=await this.fetcher.fetch("/content/api/v4/resources/verse_media",e);return t}};var R=class{constructor(e){this.fetcher=e;}async search(e,t){return this.fetcher.fetch("/v1/search",{query:e,size:30,...t})}};var b=class{constructor(e){this.fetcher=e;}async findByKey(e,t){if(!h(e))throw new Error("Invalid verse key");let{verse:s}=await this.fetcher.fetch(`/content/api/v4/verses/by_key/${e}`,{words:false,...t});return s}async findByChapter(e,t){if(!a(e))throw new Error("Invalid chapter id");let{verses:s}=await this.fetcher.fetch(`/content/api/v4/verses/by_chapter/${e}`,{words:false,...t});return s}async findByPage(e,t){if(!x(e))throw new Error("Invalid page number");let{verses:s}=await this.fetcher.fetch(`/content/api/v4/verses/by_page/${e}`,{words:false,...t});return s}async findByJuz(e,t){if(!A(e))throw new Error("Invalid juz");let{verses:s}=await this.fetcher.fetch(`/content/api/v4/verses/by_juz/${e}`,{words:false,...t});return s}async findByHizb(e,t){if(!P(e))throw new Error("Invalid hizb");let{verses:s}=await this.fetcher.fetch(`/content/api/v4/verses/by_hizb/${e}`,{words:false,...t});return s}async findByRub(e,t){if(!v(e))throw new Error("Invalid rub");let{verses:s}=await this.fetcher.fetch(`/content/api/v4/verses/by_rub/${e}`,{words:false,...t});return s}async findRandom(e){let{verse:t}=await this.fetcher.fetch("/content/api/v4/verses/random",{words:false,...e});return t}};var C=class{config;fetcher;chapters;verses;juzs;audio;resources;search;constructor(e){this.config={contentBaseUrl:"https://apis.quran.foundation",authBaseUrl:"https://oauth2.quran.foundation",...e,defaults:{language:"ar",...e.defaults}},this.fetcher=new u(this.config),this.fetcher.getFetch(),this.chapters=new m(this.fetcher),this.verses=new b(this.fetcher),this.juzs=new d(this.fetcher),this.audio=new l(this.fetcher),this.resources=new y(this.fetcher),this.search=new R(this.fetcher);}getConfig(){return {...this.config}}updateConfig(e){this.config={...this.config,...e,defaults:{...this.config.defaults,...e.defaults}},this.fetcher.updateConfig(this.config);}clearCachedToken(){this.fetcher.clearCachedToken();}};
2
+ exports.CharType=B;exports.Language=V;exports.QuranClient=C;exports.QuranFont=k;exports.SearchMode=U;exports.SearchNavigationType=G;exports.isValidChapterId=a;exports.isValidHizb=P;exports.isValidJuz=A;exports.isValidQuranPage=x;exports.isValidRub=v;exports.isValidVerseKey=h;//# sourceMappingURL=index.min.js.map
17
3
  //# sourceMappingURL=index.min.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/api/Word.ts","../src/types/index.ts","../src/sdk/v4/_fetcher.ts","../src/utils/misc.ts","../src/sdk/utils.ts","../src/sdk/v4/chapters.ts","../src/sdk/v4/verses.ts","../src/sdk/v4/juzs.ts","../src/sdk/v4/audio.ts","../src/sdk/v4/resources.ts","../src/sdk/v4/search.ts","../src/sdk/v4/index.ts","../src/sdk/index.ts"],"names":["CharType","Language","QuranFont","humps","removeBeginningSlash","url","API_BASE_URL","camelizeKeys","decamelize","decamelizeKeys","makeUrl","params","baseUrl","paramsWithDecamelizedKeys","paramsString","value","fetcher","fetchFn","json","res","mergeApiOptions","options","defaultOptions","clonedOptions","final","fields","key","versesMapping","isValidChapterId","id","parsedId","isValidJuz","juz","parsedJuz","isValidRub","rub","parsedRub","isValidHizb","hizb","parsedHizb","isValidQuranPage","page","parsedPage","isValidVerseKey","chapterId","verseId","parsedVerse","verseCount","utils","utils_default","findAll","chapters","findById","chapter","findInfoById","chapterInfo","chapters_default","mergeVerseOptions","result","wordFields","translationFields","findByKey","verse","findByChapter","verses","findByPage","findByJuz","findByHizb","findByRub","findRandom","verses_default","juzs","juzs_default","defaultChapterRecitationsOptions","defaultVerseRecitationsOptions","findAllChapterRecitations","reciterId","audioFiles","findChapterRecitationById","audioFile","findVerseRecitationsByChapter","recitationId","findVerseRecitationsByJuz","findVerseRecitationsByPage","findVerseRecitationsByRub","findVerseRecitationsByHizb","findVerseRecitationsByKey","audio","audio_default","findAllRecitations","recitations","findRecitationInfo","info","findAllTranslations","translations","findTranslationInfo","findAllTafsirs","tafsirs","findTafsirInfo","findAllRecitationStyles","recitationStyles","findAllLanguages","languages","findAllChapterInfos","chapterInfos","findVerseMedia","verseMedia","findAllChapterReciters","reciters","resources","resources_default","defaultSearchOptions","search","q","searchApi","search_default","v4","v4_default","quran","sdk_default"],"mappings":"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,IAAM,CACjDA,GAAOU,EAAO,KAAKjB,EAAWkB,CAAG,CAAC,CACxC,CAAC,EAGDF,EAAM,OAASC,EAAO,KAAK,GAAG,CAChC,CAEA,OAAOD,CACT,EE1EO,IAAMG,EAAgB,CAC3B,EAAK,EACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,GACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,GACN,GAAM,IACN,GAAM,IACN,GAAM,GACN,GAAM,IACN,GAAM,GACN,GAAM,GACN,GAAM,IACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,IACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,GACN,GAAM,EACN,GAAM,EACN,GAAM,GACN,GAAM,EACN,GAAM,EACN,GAAM,EACN,IAAO,GACP,IAAO,GACP,IAAO,EACP,IAAO,EACP,IAAO,EACP,IAAO,EACP,IAAO,EACP,IAA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","sourcesContent":["import { VerseKey } from '../VerseKey';\nimport { Translation } from './Translation';\nimport { Transliteration } from './Transliteration';\n\nexport enum CharType {\n Word = 'word',\n End = 'end',\n Pause = 'pause',\n Sajdah = 'sajdah',\n RubElHizb = 'rub-el-hizb',\n}\n\nexport interface Word {\n id?: number;\n position: number;\n audioUrl: string;\n charTypeName: CharType;\n codeV1?: string;\n codeV2?: string;\n pageNumber?: number;\n lineNumber?: number;\n text?: string;\n textUthmani?: string;\n textIndopak?: string;\n textImlaei?: string;\n translation: Translation;\n transliteration: Transliteration;\n location?: string; // chapter:verse:word\n verseKey?: VerseKey;\n}\n","export enum Language {\n ARABIC = 'ar',\n ENGLISH = 'en',\n URDU = 'ur',\n BENGALI = 'bn',\n TURKISH = 'tr',\n SPANISH = 'es',\n GERMAN = 'de',\n BOSNIAN = 'bs',\n RUSSIAN = 'ru',\n ALBANIAN_AL = 'al',\n FRENCH = 'fr',\n DUTCH = 'nl',\n TAMIL = 'ta',\n TAJIK = 'tg',\n INDONESIAN = 'id',\n UZBEK = 'uz',\n VIETNAMESE = 'vi',\n CHINESE = 'zh',\n ITALIAN = 'it',\n JAPANESE = 'ja',\n MALAYALAM = 'ml',\n AMHARIC = 'am',\n KAZAKH = 'kk',\n PORTUGUESE = 'pt',\n TAGALOG = 'tl',\n THAI = 'th',\n KOREAN = 'ko',\n HINDI = 'hi',\n KURDISH = 'ku',\n HAUSA = 'ha',\n AZERI = 'az',\n SWAHILI = 'sw',\n PERSIAN = 'fa',\n SERBIAN = 'sr',\n MARANAO = 'mrn',\n AMAZIGH = 'zgh',\n ASSAMESE = 'as',\n BULGARIAN = 'bg',\n CHECHEN = 'ce',\n CZECH = 'cs',\n\n DIVEHI = 'dv',\n DHIVEHI = 'dv',\n MALDIVIAN = 'dv',\n\n FINNISH = 'fi',\n GUJAARATI = 'gu',\n HEBREW = 'he',\n GEORGIAN = 'ka',\n CENTRAL_KHMER = 'km',\n GANDA = 'lg',\n MARATHI = 'mr',\n YORUBA = 'yo',\n MALAY = 'ms',\n NEPALI = 'ne',\n SWEDISH = 'sv',\n TELUGU = 'te',\n TATAR = 'tt',\n\n UIGHUR = 'ug',\n UYGHUR = 'ug',\n\n UKRAINIAN = 'uk',\n NORWEGIAN = 'no',\n OROMO = 'om',\n POLISH = 'pl',\n PASHTO = 'ps',\n ROMANIAN = 'ro',\n SINDHI = 'sd',\n NORTHERN_SAMI = 'se',\n\n SINHALA = 'si',\n SINHALESE = 'si',\n\n SOMALI = 'so',\n ALBANIAN_SQ = 'sq',\n}\n\nexport enum QuranFont {\n MadaniV1 = 'code_v1',\n MadaniV2 = 'code_v2',\n Uthmani = 'text_uthmani',\n}\n\nexport type VerseField =\n | 'chapterId'\n | 'textUthmani'\n | 'textUthmaniSimple'\n | 'textImlaei'\n | 'textImlaeiSimple'\n | 'textIndopak'\n | 'textIndopakNastaleeq'\n | 'textUthmaniTajweed'\n | 'imageUrl'\n | 'imageWidth'\n | 'codeV1'\n | 'codeV2'\n | 'v1Page'\n | 'v2Page';\n\nexport type WordField =\n | 'v1Page'\n | 'v2Page'\n | 'textUthmani'\n | 'textImlaei'\n | 'textIndopak'\n | 'verseKey'\n | 'location'\n | 'codeV1'\n | 'codeV2';\n\nexport type TranslationField =\n | 'resourceName'\n | 'verseId'\n | 'languageId'\n | 'languageName'\n | 'verseKey'\n | 'chapterId'\n | 'verseNumber'\n | 'juzNumber'\n | 'hizbNumber'\n | 'rubNumber'\n | 'pageNumber';\n\nexport type VerseRecitationField = 'id' | 'chapterId' | 'segments' | 'format';\n\nexport * from './VerseKey';\nexport * from './ChapterId';\nexport * from './HizbNumber';\nexport * from './JuzNumber';\nexport * from './PageNumber';\nexport * from './RubNumber';\n\nexport * from './api';\n\nexport * from './FetchFn';\n","import humps from 'humps';\nimport { FetchFn } from '../../types';\nimport { BaseApiOptions } from '../../types/BaseApiOptions';\nimport { removeBeginningSlash } from '../../utils/misc';\n\nexport const API_BASE_URL = 'https://api.quran.com/api/v4/';\n\nconst { camelizeKeys, decamelize, decamelizeKeys } = humps;\n\nexport const makeUrl = (url: string, params?: Record<string, unknown>) => {\n const baseUrl = `${API_BASE_URL}${removeBeginningSlash(url)}`;\n if (!params) return baseUrl;\n\n const paramsWithDecamelizedKeys = decamelizeKeys(params) as Record<\n string,\n string\n >;\n const paramsString = new URLSearchParams(\n Object.entries(paramsWithDecamelizedKeys).filter(\n ([, value]) => value !== undefined\n )\n ).toString();\n if (!paramsString) return baseUrl;\n\n return `${baseUrl}?${paramsString}`;\n};\n\nexport const fetcher = async <T extends object>(\n url: string,\n params: Record<string, unknown> = {},\n fetchFn?: FetchFn\n) => {\n if (fetchFn) {\n const json = await fetchFn(makeUrl(url, params));\n return camelizeKeys(json) as T;\n }\n\n if (typeof globalThis.fetch !== 'function') {\n throw new Error(\n 'Looks like there is no global fetch function. Take a look at https://quranjs.com/techniques#custom-fetcher for more info.'\n );\n }\n\n // if there is no fetchFn, we use the global fetch\n const res = await globalThis.fetch(makeUrl(url, params));\n\n if (!res.ok || res.status >= 400) {\n throw new Error(`${res.status} ${res.statusText}`);\n }\n\n const json = await res.json();\n\n return camelizeKeys(json) as T;\n};\n\ntype MergeApiOptionsObject = Pick<BaseApiOptions, 'fetchFn'> & {\n fields?: Record<string, boolean>;\n} & Record<string, unknown>;\n\nexport const mergeApiOptions = (\n options: MergeApiOptionsObject = {},\n defaultOptions: Record<string, unknown> = {}\n) => {\n const clonedOptions = { ...options };\n\n // we can set it to undefined because `makeUrl` will filter it out\n if (clonedOptions.fetchFn) clonedOptions.fetchFn = undefined;\n\n const final: Record<string, unknown> = {\n ...defaultOptions,\n ...clonedOptions,\n };\n\n if (final.fields) {\n const fields: string[] = [];\n Object.entries(final.fields).forEach(([key, value]) => {\n if (value) fields.push(decamelize(key));\n });\n\n // convert `fields` to a string sperated by commas\n final.fields = fields.join(',');\n }\n\n return final;\n};\n","export const removeBeginningSlash = (url: string) => {\n return url.startsWith('/') ? url.slice(1) : url;\n};\n","import {\n ChapterId,\n HizbNumber,\n JuzNumber,\n PageNumber,\n RubNumber,\n VerseKey,\n} from '../types';\n\n// this maps chapterNumber to verseCount\nexport const versesMapping = {\n '1': 7,\n '2': 286,\n '3': 200,\n '4': 176,\n '5': 120,\n '6': 165,\n '7': 206,\n '8': 75,\n '9': 129,\n '10': 109,\n '11': 123,\n '12': 111,\n '13': 43,\n '14': 52,\n '15': 99,\n '16': 128,\n '17': 111,\n '18': 110,\n '19': 98,\n '20': 135,\n '21': 112,\n '22': 78,\n '23': 118,\n '24': 64,\n '25': 77,\n '26': 227,\n '27': 93,\n '28': 88,\n '29': 69,\n '30': 60,\n '31': 34,\n '32': 30,\n '33': 73,\n '34': 54,\n '35': 45,\n '36': 83,\n '37': 182,\n '38': 88,\n '39': 75,\n '40': 85,\n '41': 54,\n '42': 53,\n '43': 89,\n '44': 59,\n '45': 37,\n '46': 35,\n '47': 38,\n '48': 29,\n '49': 18,\n '50': 45,\n '51': 60,\n '52': 49,\n '53': 62,\n '54': 55,\n '55': 78,\n '56': 96,\n '57': 29,\n '58': 22,\n '59': 24,\n '60': 13,\n '61': 14,\n '62': 11,\n '63': 11,\n '64': 18,\n '65': 12,\n '66': 12,\n '67': 30,\n '68': 52,\n '69': 52,\n '70': 44,\n '71': 28,\n '72': 28,\n '73': 20,\n '74': 56,\n '75': 40,\n '76': 31,\n '77': 50,\n '78': 40,\n '79': 46,\n '80': 42,\n '81': 29,\n '82': 19,\n '83': 36,\n '84': 25,\n '85': 22,\n '86': 17,\n '87': 19,\n '88': 26,\n '89': 30,\n '90': 20,\n '91': 15,\n '92': 21,\n '93': 11,\n '94': 8,\n '95': 8,\n '96': 19,\n '97': 5,\n '98': 8,\n '99': 8,\n '100': 11,\n '101': 11,\n '102': 8,\n '103': 3,\n '104': 9,\n '105': 5,\n '106': 4,\n '107': 7,\n '108': 3,\n '109': 6,\n '110': 3,\n '111': 5,\n '112': 4,\n '113': 5,\n '114': 6,\n};\n\n/**\n * Validates chapter id\n * @param id chapter id\n * @example \n isValidChapterId('1') // true\n isValidChapterId('114') // true\n isValidChapterId('0') // false\n isValidChapterId('-1') // false\n isValidChapterId('200') // false\n */\nconst isValidChapterId = (id: string | number): id is ChapterId => {\n const parsedId = typeof id === 'number' ? id : Number(id);\n if (!parsedId || parsedId <= 0 || parsedId > 114) return false;\n return true;\n};\n\n/**\n * Validates juz number\n * @param juz juz number\n * @example \n isValidJuz('1') // true\n isValidJuz('30') // true\n isValidJuz('0') // false\n isValidJuz('-1') // false\n isValidJuz('200') // false\n */\nconst isValidJuz = (juz: string | number): juz is JuzNumber => {\n const parsedJuz = typeof juz === 'number' ? juz : Number(juz);\n if (!parsedJuz || parsedJuz <= 0 || parsedJuz > 30) return false;\n return true;\n};\n\n/**\n * Validates rub number\n * @param rub rub number\n * @example \n isValidRub('1') // true\n isValidRub('240') // true\n isValidRub('0') // false\n isValidRub('-1') // false\n isValidRub('300') // false\n */\nconst isValidRub = (rub: string | number): rub is RubNumber => {\n const parsedRub = typeof rub === 'number' ? rub : Number(rub);\n if (!parsedRub || parsedRub <= 0 || parsedRub > 240) return false;\n return true;\n};\n\n/**\n * Validates hizb number\n * @param hizb hizb number\n * @example \n isValidHizb('1') // true\n isValidHizb('60') // true\n isValidHizb('0') // false\n isValidHizb('-1') // false\n isValidHizb('200') // false\n */\nconst isValidHizb = (hizb: string | number): hizb is HizbNumber => {\n const parsedHizb = typeof hizb === 'number' ? hizb : Number(hizb);\n if (!parsedHizb || parsedHizb <= 0 || parsedHizb > 60) return false;\n return true;\n};\n\n/**\n * Validates mushaf page number\n * @param page mushaf page number\n * @example \n isValidQuranPage('1') // true\n isValidQuranPage('604') // true\n isValidQuranPage('0') // false\n isValidQuranPage('-1') // false\n isValidQuranPage('1000') // false\n */\nconst isValidQuranPage = (page: string | number): page is PageNumber => {\n const parsedPage = typeof page === 'number' ? page : Number(page);\n if (!parsedPage || parsedPage <= 0 || parsedPage > 604) return false;\n return true;\n};\n\n/**\n * Validates verse key\n * @param key colon separated verse key (chapter:verse)\n * @example \n isValidVerseKey('1:1') // true\n isValidVerseKey('30:1') // true\n isValidVerseKey('0') // false\n isValidVerseKey('1:-') // false\n isValidVerseKey('1_1') // false\n */\nconst isValidVerseKey = (key: string): key is VerseKey => {\n const [chapterId, verseId] = key.trim().split(':');\n if (!chapterId || !verseId || !isValidChapterId(chapterId)) return false;\n\n const parsedVerse = Number(verseId);\n const verseCount = (versesMapping as Record<string, number>)[chapterId];\n if (!parsedVerse || parsedVerse <= 0 || parsedVerse > verseCount)\n return false;\n\n return true;\n};\n\nconst utils = {\n isValidChapterId,\n isValidJuz,\n isValidRub,\n isValidHizb,\n isValidQuranPage,\n isValidVerseKey,\n};\n\nexport default utils;\n","import { Chapter, ChapterId, ChapterInfo, Language } from '../../types';\nimport { fetcher, mergeApiOptions } from './_fetcher';\nimport Utils from '../utils';\nimport { BaseApiOptions } from '../../types/BaseApiOptions';\n\ntype GetChapterOptions = Partial<BaseApiOptions>;\n\nconst defaultOptions: GetChapterOptions = {\n language: Language.ARABIC,\n};\n\n/**\n * Get all chapters.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-chapters\n * @param {GetChapterOptions} options\n * @example\n * quran.v4.chapters.findAll()\n */\nconst findAll = async (options?: GetChapterOptions) => {\n const params = mergeApiOptions(options, defaultOptions);\n const { chapters } = await fetcher<{ chapters: Chapter[] }>(\n '/chapters',\n params,\n options?.fetchFn\n );\n\n return chapters;\n};\n\n/**\n * Get chapter by id.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/get-chapter\n * @param {ChapterId} id chapter id, minimum 1, maximum 114\n * @param {GetChapterOptions} options\n * @example\n * quran.v4.chapters.findById('1')\n * quran.v4.chapters.findById('114')\n */\nconst findById = async (id: ChapterId, options?: GetChapterOptions) => {\n if (!Utils.isValidChapterId(id)) throw new Error('Invalid chapter id');\n\n const params = mergeApiOptions(options, defaultOptions);\n const { chapter } = await fetcher<{ chapter: Chapter }>(\n `/chapters/${id}`,\n params,\n options?.fetchFn\n );\n\n return chapter;\n};\n\n/**\n * Get chapter info by id.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/info\n * @param {ChapterId} id chapter id, minimum 1, maximum 114\n * @param {GetChapterOptions} options\n * @example\n * quran.v4.chapters.findInfoById('1')\n * quran.v4.chapters.findInfoById('114')\n */\nconst findInfoById = async (id: ChapterId, options?: GetChapterOptions) => {\n if (!Utils.isValidChapterId(id)) throw new Error('Invalid chapter id');\n\n const params = mergeApiOptions(options, defaultOptions);\n const { chapterInfo } = await fetcher<{ chapterInfo: ChapterInfo }>(\n `/chapters/${id}/info`,\n params,\n options?.fetchFn\n );\n\n return chapterInfo;\n};\n\nconst chapters = {\n findAll,\n findById,\n findInfoById,\n};\n\nexport default chapters;\n","import {\n ChapterId,\n HizbNumber,\n JuzNumber,\n Language,\n PageNumber,\n RubNumber,\n TranslationField,\n Verse,\n VerseField,\n VerseKey,\n WordField,\n} from '../../types';\nimport humps from 'humps';\nimport Utils from '../utils';\nimport { fetcher, mergeApiOptions } from './_fetcher';\nimport { BaseApiOptions } from '../../types/BaseApiOptions';\n\nconst { decamelize } = humps;\n\ntype GetVerseOptions = Partial<\n BaseApiOptions & {\n reciter: string | number;\n words: boolean;\n translations: string[] | number[];\n tafsirs: string[] | number[];\n wordFields: Partial<Record<WordField, boolean>>;\n translationFields: Partial<Record<TranslationField, boolean>>;\n fields: Partial<Record<VerseField, boolean>>;\n page: number;\n perPage: number;\n }\n>;\n\nconst defaultOptions: GetVerseOptions = {\n language: Language.ARABIC,\n perPage: 50,\n words: false,\n};\n\nconst mergeVerseOptions = (options: GetVerseOptions = {}) => {\n const result = mergeApiOptions(options, defaultOptions);\n\n // @ts-expect-error - we accept an array of strings, however, the API expects a comma separated string\n if (result.translations) result.translations = result.translations.join(',');\n\n // @ts-expect-error - we accept an array of strings, however, the API expects a comma separated string\n if (result.tafsirs) result.tafsirs = result.tafsirs.join(',');\n\n if (result.wordFields) {\n const wordFields: string[] = [];\n Object.entries(result.wordFields).forEach(([key, value]) => {\n if (value) wordFields.push(decamelize(key));\n });\n result.wordFields = wordFields.join(',');\n }\n\n if (result.translationFields) {\n const translationFields: string[] = [];\n Object.entries(result.translationFields).forEach(([key, value]) => {\n if (value) translationFields.push(decamelize(key));\n });\n result.translationFields = translationFields.join(',');\n }\n\n // rename `reciter` to `audio` because the API expects `audio`\n if (result.reciter) {\n result.audio = result.reciter;\n result.reciter = undefined;\n }\n\n return result;\n};\n\n/**\n * Get a specific ayah with key. Key is combination of surah number and ayah number.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-verse-key\n * @param {VerseKey} key - surah number and ayah number separated by a colon.\n * @param {GetVerseOptions} options\n * @example\n * quran.v4.verses.findByKey('1:1')\n * quran.v4.verses.findByKey('101:5')\n */\nconst findByKey = async (key: VerseKey, options?: GetVerseOptions) => {\n if (!Utils.isValidVerseKey(key)) throw new Error('Invalid verse key');\n const params = mergeVerseOptions(options);\n const url = `/verses/by_key/${key}`;\n const { verse } = await fetcher<{ verse: Verse }>(\n url,\n params,\n options?.fetchFn\n );\n\n return verse;\n};\n\n/**\n * Get all ayahs for a specific chapter (surah).\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-chapter-number\n * @param {ChapterId} id - chapter id (surah number)\n * @param {GetVerseOptions} options\n * @example\n * quran.v4.verses.findByChapter('1')\n * quran.v4.verses.findByChapter('101')\n */\nconst findByChapter = async (id: ChapterId, options?: GetVerseOptions) => {\n if (!Utils.isValidChapterId(id)) throw new Error('Invalid chapter id');\n const params = mergeVerseOptions(options);\n const url = `/verses/by_chapter/${id}`;\n const { verses } = await fetcher<{ verses: Verse[] }>(\n url,\n params,\n options?.fetchFn\n );\n\n return verses;\n};\n\n/**\n * Get all ayahs for a specific page in the Quran.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-page-number\n * @param {PageNumber} page - Quran page number\n * @param {GetVerseOptions} options\n * @example\n * quran.v4.verses.findByPage('1')\n * quran.v4.verses.findByPage('101')\n */\nconst findByPage = async (page: PageNumber, options?: GetVerseOptions) => {\n if (!Utils.isValidQuranPage(page)) throw new Error('Invalid page');\n\n const params = mergeVerseOptions(options);\n const url = `/verses/by_page/${page}`;\n const { verses } = await fetcher<{ verses: Verse[] }>(\n url,\n params,\n options?.fetchFn\n );\n\n return verses;\n};\n\n/**\n * Get all ayahs for a Juz.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-juz-number\n * @param {JuzNumber} juz - juz number\n * @param {GetVerseOptions} options\n * @example\n * quran.v4.verses.findByJuz('1')\n * quran.v4.verses.findByJuz('29')\n */\nconst findByJuz = async (juz: JuzNumber, options?: GetVerseOptions) => {\n if (!Utils.isValidJuz(juz)) throw new Error('Invalid juz');\n\n const params = mergeVerseOptions(options);\n const url = `/verses/by_juz/${juz}`;\n const { verses } = await fetcher<{ verses: Verse[] }>(\n url,\n params,\n options?.fetchFn\n );\n\n return verses;\n};\n\n/**\n * Get all ayahs for a Hizb.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-hizb-number\n * @param {HizbNumber} hizb - hizb number\n * @param {GetVerseOptions} options\n * @example\n * quran.v4.verses.findByHizb('1')\n * quran.v4.verses.findByHizb('29')\n */\nconst findByHizb = async (hizb: HizbNumber, options?: GetVerseOptions) => {\n if (!Utils.isValidHizb(hizb)) throw new Error('Invalid hizb');\n\n const params = mergeVerseOptions(options);\n const url = `/verses/by_hizb/${hizb}`;\n const { verses } = await fetcher<{ verses: Verse[] }>(\n url,\n params,\n options?.fetchFn\n );\n\n return verses;\n};\n\n/**\n * Get all ayahs for a Rub.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-rub-el-hizb-number\n * @param {RubNumber} rub - rub number\n * @param {GetVerseOptions} options\n * @example\n * quran.v4.verses.findByRub('1')\n * quran.v4.verses.findByRub('29')\n */\nconst findByRub = async (rub: RubNumber, options?: GetVerseOptions) => {\n if (!Utils.isValidRub(rub)) throw new Error('Invalid rub');\n\n const params = mergeVerseOptions(options);\n const { verses } = await fetcher<{ verses: Verse[] }>(\n `/verses/by_rub/${rub}`,\n params,\n options?.fetchFn\n );\n\n return verses;\n};\n\n/**\n * Get a random ayah.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/random-verse\n * @param {GetVerseOptions} options\n * @example\n * quran.v4.verses.findRandom()\n */\nconst findRandom = async (options?: GetVerseOptions) => {\n const params = mergeVerseOptions(options);\n const { verse } = await fetcher<{ verse: Verse }>(\n '/verses/random',\n params,\n options?.fetchFn\n );\n\n return verse;\n};\n\nconst verses = {\n findByKey,\n findByChapter,\n findByPage,\n findByJuz,\n findByHizb,\n findByRub,\n findRandom,\n};\n\nexport default verses;\n","import { Juz } from '../../types';\nimport { BaseApiOptions } from '../../types/BaseApiOptions';\nimport { fetcher } from './_fetcher';\n\n/**\n * Get All Juzs\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/juzs\n * @example\n * quran.v4.juzs.findAll()\n */\nconst findAll = async (options?: Omit<BaseApiOptions, 'language'>) => {\n const { juzs } = await fetcher<{ juzs: Juz[] }>(\n '/juzs',\n undefined,\n options?.fetchFn\n );\n return juzs;\n};\n\nconst juzs = { findAll };\n\nexport default juzs;\n","import {\n ChapterRecitation,\n VerseRecitation,\n ChapterId,\n HizbNumber,\n JuzNumber,\n Language,\n PageNumber,\n Pagination,\n RubNumber,\n VerseKey,\n VerseRecitationField,\n} from '../../types';\nimport Utils from '../utils';\nimport { fetcher, mergeApiOptions } from './_fetcher';\nimport { BaseApiOptions } from '../../types/BaseApiOptions';\n\ntype GetChapterRecitationOptions = Partial<BaseApiOptions>;\n\nconst defaultChapterRecitationsOptions: GetChapterRecitationOptions = {\n language: Language.ARABIC,\n};\n\ntype GetVerseRecitationOptions = Partial<\n BaseApiOptions & {\n fields: Partial<Record<VerseRecitationField, boolean>>;\n }\n>;\n\nconst defaultVerseRecitationsOptions: GetVerseRecitationOptions = {\n language: Language.ARABIC,\n};\n\n/**\n * Get all chapter recitations for specific reciter\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/chapter-reciter-audio-files\n * @param {string} reciterId\n * @param {GetChapterRecitationOptions} options\n * @example\n * quran.v4.audio.findAllChapterRecitations('2')\n */\nconst findAllChapterRecitations = async (\n reciterId: string,\n options?: GetChapterRecitationOptions\n) => {\n const params = mergeApiOptions(options, defaultChapterRecitationsOptions);\n const { audioFiles } = await fetcher<{ audioFiles: ChapterRecitation[] }>(\n `/chapter_recitations/${reciterId}`,\n params,\n options?.fetchFn\n );\n return audioFiles;\n};\n\n/**\n * Get chapter recitation for specific reciter and a specific chapter\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/chapter-reciter-audio-file\n * @param {ChapterId} chapterId\n * @param {string} reciterId\n * @param {GetChapterRecitationOptions} options\n * @example\n * quran.v4.audio.findChapterRecitationById('1', '2') // first chapter recitation for reciter 2\n */\nconst findChapterRecitationById = async (\n chapterId: ChapterId,\n reciterId: string,\n options?: GetChapterRecitationOptions\n) => {\n if (!Utils.isValidChapterId(chapterId)) throw new Error('Invalid chapter id');\n\n const params = mergeApiOptions(options, defaultChapterRecitationsOptions);\n const { audioFile } = await fetcher<{ audioFile: ChapterRecitation }>(\n `/chapter_recitations/${reciterId}/${chapterId}`,\n params,\n options?.fetchFn\n );\n\n return audioFile;\n};\n\n/**\n * Get all verse audio files for a specific reciter and a specific chapter\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-surah-recitation\n * @param {ChapterId} chapterId\n * @param {string} recitationId\n * @param {GetVerseRecitationOptions} options\n * @example\n * quran.v4.audio.findVerseRecitationsByChapter('1', '2')\n */\nconst findVerseRecitationsByChapter = async (\n chapterId: ChapterId,\n recitationId: string,\n options?: GetVerseRecitationOptions\n) => {\n if (!Utils.isValidChapterId(chapterId)) throw new Error('Invalid chapter id');\n\n const params = mergeApiOptions(options, defaultVerseRecitationsOptions);\n const data = await fetcher<{\n audioFiles: VerseRecitation[];\n pagination: Pagination;\n }>(\n `/recitations/${recitationId}/by_chapter/${chapterId}`,\n params,\n options?.fetchFn\n );\n\n return data;\n};\n\n/**\n * Get all verse audio files for a specific reciter and a specific juz\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-juz-recitaiton\n * @param {JuzNumber} juz\n * @param {string} recitationId\n * @param {GetRecitationsOptions} options\n * @example\n * quran.v4.audio.findVerseRecitationsByJuz('1', '2')\n */\nconst findVerseRecitationsByJuz = async (\n juz: JuzNumber,\n recitationId: string,\n options?: GetVerseRecitationOptions\n) => {\n if (!Utils.isValidJuz(juz)) throw new Error('Invalid juz');\n\n const params = mergeApiOptions(options, defaultVerseRecitationsOptions);\n const data = await fetcher<{\n audioFiles: VerseRecitation[];\n pagination: Pagination;\n }>(`/recitations/${recitationId}/by_juz/${juz}`, params, options?.fetchFn);\n\n return data;\n};\n\n/**\n * Get all verse audio files for a specific reciter and a specific mushaf page\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-page-recitaiton\n * @param {PageNumber} page\n * @param {string} recitationId\n * @param {GetVerseRecitationOptions} options\n * @example\n * quran.v4.audio.findVerseRecitationsByPage('1', '2')\n */\nconst findVerseRecitationsByPage = async (\n page: PageNumber,\n recitationId: string,\n options?: GetVerseRecitationOptions\n) => {\n if (!Utils.isValidQuranPage(page)) throw new Error('Invalid page');\n\n const params = mergeApiOptions(options, defaultVerseRecitationsOptions);\n const data = await fetcher<{\n audioFiles: VerseRecitation[];\n pagination: Pagination;\n }>(`/recitations/${recitationId}/by_page/${page}`, params, options?.fetchFn);\n\n return data;\n};\n\n/**\n * Get all verse audio files for a specific reciter and a specific rub\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-rub-el-hizb-recitaiton\n * @param {RubNumber} rub\n * @param {string} recitationId\n * @param {GetVerseRecitationOptions} options\n * @example\n * quran.v4.audio.findVerseRecitationsByRub('1', '2')\n */\nconst findVerseRecitationsByRub = async (\n rub: RubNumber,\n recitationId: string,\n options?: GetVerseRecitationOptions\n) => {\n if (!Utils.isValidRub(rub)) throw new Error('Invalid rub');\n\n const params = mergeApiOptions(options, defaultVerseRecitationsOptions);\n const data = await fetcher<{\n audioFiles: VerseRecitation[];\n pagination: Pagination;\n }>(`/recitations/${recitationId}/by_rub/${rub}`, params, options?.fetchFn);\n\n return data;\n};\n\n/**\n * Get all verse audio files for a specific reciter and a specific hizb\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-hizb-recitaiton\n * @param {HizbNumber} hizb\n * @param {string} recitationId\n * @param {GetVerseRecitationOptions} options\n * @example\n * quran.v4.audio.findVerseRecitationsByHizb('1', '2')\n */\nconst findVerseRecitationsByHizb = async (\n hizb: HizbNumber,\n recitationId: string,\n options?: GetVerseRecitationOptions\n) => {\n if (!Utils.isValidHizb(hizb)) throw new Error('Invalid hizb');\n\n const params = mergeApiOptions(options, defaultVerseRecitationsOptions);\n const data = await fetcher<{\n audioFiles: VerseRecitation[];\n pagination: Pagination;\n }>(`/recitations/${recitationId}/by_hizb/${hizb}`, params, options?.fetchFn);\n\n return data;\n};\n\n/**\n * Get all verse audio files for a specific reciter and a specific verse\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-ayah-recitaiton\n * @param {VerseKey} key\n * @param {string} recitationId\n * @param {GetVerseRecitationOptions} options\n * @example\n * quran.v4.audio.findVerseRecitationsByKey('1:1', '2')\n */\nconst findVerseRecitationsByKey = async (\n key: VerseKey,\n recitationId: string,\n options?: GetVerseRecitationOptions\n) => {\n if (!Utils.isValidVerseKey(key)) throw new Error('Invalid verse key');\n\n const params = mergeApiOptions(options, defaultVerseRecitationsOptions);\n const data = await fetcher<{\n audioFiles: VerseRecitation[];\n pagination: Pagination;\n }>(`/recitations/${recitationId}/by_ayah/${key}`, params, options?.fetchFn);\n\n return data;\n};\n\nconst audio = {\n findAllChapterRecitations,\n findChapterRecitationById,\n findVerseRecitationsByChapter,\n findVerseRecitationsByJuz,\n findVerseRecitationsByPage,\n findVerseRecitationsByRub,\n findVerseRecitationsByHizb,\n findVerseRecitationsByKey,\n};\n\nexport default audio;\n","import {\n ChapterInfoResource,\n ChapterReciterResource,\n Language,\n LanguageResource,\n RecitationInfoResource,\n RecitationResource,\n RecitationStylesResource,\n TafsirInfoResource,\n TafsirResource,\n TranslationInfoResource,\n TranslationResource,\n VerseMediaResource,\n} from '../../types';\nimport { BaseApiOptions } from '../../types/BaseApiOptions';\nimport { fetcher, mergeApiOptions } from './_fetcher';\n\ntype GetResourceOptions = Partial<BaseApiOptions>;\n\nconst defaultOptions: GetResourceOptions = {\n language: Language.ARABIC,\n};\n\n/**\n * Get all recitations.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/recitations\n * @param {GetResourceOptions} options\n * @example\n * quran.v4.resources.findAllRecitations()\n */\nconst findAllRecitations = async (options?: GetResourceOptions) => {\n const params = mergeApiOptions(options);\n const { recitations } = await fetcher<{\n recitations: RecitationResource[];\n }>('/resources/recitations', params, options?.fetchFn);\n\n return recitations;\n};\n\n/**\n * Get all recitation info.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/recitation-info\n * @param {string} id recitation id\n * @param {GetResourceOptions} options\n * @example\n * quran.v4.resources.findRecitationInfo('1')\n */\nconst findRecitationInfo = async (id: string, options?: GetResourceOptions) => {\n const params = mergeApiOptions(options, defaultOptions);\n const { info } = await fetcher<{\n info: RecitationInfoResource;\n }>(`/resources/recitations/${id}/info`, params, options?.fetchFn);\n\n return info;\n};\n\n/**\n * Get all translations.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/translations\n * @param {GetResourceOptions} options\n * @example\n * quran.v4.resources.findAllTranslations()\n */\nconst findAllTranslations = async (options?: GetResourceOptions) => {\n const params = mergeApiOptions(options, defaultOptions);\n const { translations } = await fetcher<{\n translations: TranslationResource[];\n }>('/resources/translations', params, options?.fetchFn);\n\n return translations;\n};\n\n/**\n * Get translation info.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/translation-info\n * @param {string} id translation id\n * @param {GetResourceOptions} options\n * @example\n * quran.v4.resources.findTranslationInfo('169')\n */\nconst findTranslationInfo = async (\n id: string,\n options?: GetResourceOptions\n) => {\n const params = mergeApiOptions(options, defaultOptions);\n const { info } = await fetcher<{\n info: TranslationInfoResource;\n }>(`/resources/translations/${id}/info`, params, options?.fetchFn);\n\n return info;\n};\n\n/**\n * Get all tafsirs.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/tafsirs\n * @param {GetResourceOptions} options\n * @example\n * quran.v4.resources.findAllTafsirs()\n */\nconst findAllTafsirs = async (options?: GetResourceOptions) => {\n const params = mergeApiOptions(options, defaultOptions);\n const { tafsirs } = await fetcher<{\n tafsirs: TafsirResource[];\n }>('/resources/tafsirs', params, options?.fetchFn);\n\n return tafsirs;\n};\n\n/**\n * Get tafsir info.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/tafsir-info\n * @param {string} id tafsir id\n * @param {GetResourceOptions} options\n * @example\n * quran.v4.resources.findTafsirInfo('1')\n */\nconst findTafsirInfo = async (id: string, options?: GetResourceOptions) => {\n const params = mergeApiOptions(options, defaultOptions);\n const { info } = await fetcher<{\n info: TafsirInfoResource;\n }>(`/resources/tafsirs/${id}/info`, params, options?.fetchFn);\n\n return info;\n};\n\n/**\n * Get all recitation styles.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/recitation-styles\n * @example\n * quran.v4.resources.findAllRecitationStyles()\n */\nconst findAllRecitationStyles = async (\n options?: Omit<BaseApiOptions, 'language'>\n) => {\n const { recitationStyles } = await fetcher<{\n recitationStyles: RecitationStylesResource;\n }>('/resources/recitation_styles', undefined, options?.fetchFn);\n\n return recitationStyles;\n};\n\n/**\n * Get all languages.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/languages\n * @param {GetResourceOptions} options\n * @example\n * quran.v4.resources.findAllLanguages()\n */\nconst findAllLanguages = async (options?: GetResourceOptions) => {\n const params = mergeApiOptions(options, defaultOptions);\n const { languages } = await fetcher<{\n languages: LanguageResource[];\n }>('/resources/languages', params, options?.fetchFn);\n\n return languages;\n};\n\n/**\n * Get all chapter infos.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/chapter-info\n * @param {GetResourceOptions} options\n * @example\n * quran.v4.resources.findAllChapterInfos()\n */\nconst findAllChapterInfos = async (options?: GetResourceOptions) => {\n const params = mergeApiOptions(options, defaultOptions);\n const { chapterInfos } = await fetcher<{\n chapterInfos: ChapterInfoResource[];\n }>('/resources/chapter_infos', params, options?.fetchFn);\n\n return chapterInfos;\n};\n\n/**\n * Get verse media.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verse-media\n * @param {GetResourceOptions} options\n * @example\n * quran.v4.resources.findVerseMedia()\n */\nconst findVerseMedia = async (options?: GetResourceOptions) => {\n const params = mergeApiOptions(options, defaultOptions);\n const { verseMedia } = await fetcher<{\n verseMedia: VerseMediaResource;\n }>(`/resources/verse_media`, params, options?.fetchFn);\n\n return verseMedia;\n};\n\n/**\n * Get all chapter reciters.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/chapter-reciters\n * @param {GetResourceOptions} options\n * @example\n * quran.v4.resources.findAllChapterReciters()\n */\nconst findAllChapterReciters = async (options?: GetResourceOptions) => {\n const params = mergeApiOptions(options, defaultOptions);\n const { reciters } = await fetcher<{\n reciters: ChapterReciterResource[];\n }>(`/resources/chapter_reciters`, params, options?.fetchFn);\n\n return reciters;\n};\n\nconst resources = {\n findAllRecitations,\n findAllTranslations,\n findAllTafsirs,\n findAllRecitationStyles,\n findAllLanguages,\n findVerseMedia,\n findAllChapterReciters,\n findAllChapterInfos,\n findRecitationInfo,\n findTranslationInfo,\n findTafsirInfo,\n};\n\nexport default resources;\n","import { Language, SearchResponse } from '../../types';\nimport { BaseApiOptions } from '../../types/BaseApiOptions';\nimport { fetcher, mergeApiOptions } from './_fetcher';\n\ntype SearchOptions = Partial<\n BaseApiOptions & {\n size: number;\n page: number;\n }\n>;\n\nconst defaultSearchOptions: SearchOptions = {\n language: Language.ARABIC,\n size: 30,\n};\n\n/**\n * Search\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/search\n * @param {string} q search query\n * @param {SearchOptions} options\n * @example\n * quran.v4.search.search('نور')\n * quran.v4.search.search('نور', { language: Language.ENGLISH })\n * quran.v4.search.search('نور', { language: Language.ENGLISH, size: 10 })\n * quran.v4.search.search('نور', { language: Language.ENGLISH, page: 2 })\n */\nconst search = async (q: string, options?: SearchOptions) => {\n const params = mergeApiOptions({ q, ...options }, defaultSearchOptions);\n const { search } = await fetcher<SearchResponse>(\n '/search',\n params,\n options?.fetchFn\n );\n\n return search;\n};\n\nconst searchApi = { search };\n\nexport default searchApi;\n","import chapters from './chapters';\nimport verses from './verses';\nimport juzs from './juzs';\nimport audio from './audio';\nimport resources from './resources';\nimport search from './search';\n\nconst v4 = {\n chapters,\n verses,\n juzs,\n audio,\n resources,\n search,\n};\n\nexport default v4;\n","import v4 from './v4';\nimport utils from './utils';\n\nconst quran = {\n v4,\n utils,\n};\n\nexport default quran;\n"]}
1
+ {"version":3,"sources":["../src/types/api/Word.ts","../src/types/api/search-result.ts","../src/types/BaseApiParams.ts","../src/types/index.ts","../src/utils/is-valid-chapter-id.ts","../src/utils/is-valid-juz.ts","../src/utils/is-valid-rub.ts","../src/utils/is-valid-hizb.ts","../src/utils/is-valid-quran-page.ts","../src/utils/verses-mapping.ts","../src/utils/is-valid-verse-key.ts","../src/sdk/audio.ts","../src/sdk/chapters.ts","../src/lib/retry.ts","../src/lib/url.ts","../src/sdk/fetcher.ts","../src/sdk/juzs.ts","../src/sdk/resources.ts","../src/sdk/search.ts","../src/sdk/verses.ts","../src/sdk/client.ts"],"names":["CharType","SearchNavigationType","SearchMode","Language","QuranFont","isValidChapterId","id","parsedId","isValidJuz","juz","parsedJuz","isValidRub","rub","parsedRub","isValidHizb","hizb","parsedHizb","isValidQuranPage","page","parsedPage","versesMapping","isValidVerseKey","key","chapterId","verseId","parsedVerse","verseCount","QuranAudio","fetcher","reciterId","options","audioFiles","audioFile","recitationId","QuranChapters","chapters","chapter","chapterInfo","retry","fn","lastError","i","error","resolve","decamelize","humps","removeBeginningSlash","url","fieldsKey","fieldsKeySet","preservedKeys","paramsToString","params","paramsString","rawKey","rawValue","fields","value","fieldKey","camelizeKeys","QuranFetcher","config","fetchFn","doFetch","args","clientId","clientSecret","authBaseUrl","auth","body","res","json","expiresAt","contentBaseUrl","defaults","token","fullUrl","QuranJuzs","juzs","QuranResources","recitations","translations","tafsirs","languages","recitationInfo","translationInfo","tafsirInfo","chapterInfos","reciters","recitationStyles","verseMedia","QuranSearch","query","QuranVerses","verse","verses","QuranClient","newConfig"],"mappings":"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AAI,EAAA,CACJ,EAAA,CAAI,GAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,CAAA,CACJ,EAAA,CAAI,CAAA,CACJ,EAAA,CAAI,E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","file":"index.min.js","sourcesContent":["import type { VerseKey } from \"../common/verse-key\";\nimport type { Translation } from \"./Translation\";\nimport type { Transliteration } from \"./Transliteration\";\n\nexport enum CharType {\n Word = \"word\",\n End = \"end\",\n Pause = \"pause\",\n Sajdah = \"sajdah\",\n RubElHizb = \"rub-el-hizb\",\n}\n\nexport interface Word {\n id?: number;\n position: number;\n audioUrl: string;\n charTypeName: CharType;\n codeV1?: string;\n codeV2?: string;\n pageNumber?: number;\n lineNumber?: number;\n text?: string;\n textUthmani?: string;\n textIndopak?: string;\n textImlaei?: string;\n translation: Translation;\n transliteration: Transliteration;\n location?: string; // chapter:verse:word\n verseKey?: VerseKey;\n}\n","export enum SearchNavigationType {\n SURAH = \"surah\",\n JUZ = \"juz\",\n HIZB = \"hizb\",\n AYAH = \"ayah\",\n RUB_EL_HIZB = \"rub_el_hizb\",\n SEARCH_PAGE = \"search_page\",\n PAGE = \"page\",\n RANGE = \"range\",\n QURAN_RANGE = \"quran_range\",\n}\n\nexport interface SearchResult {\n resultType: SearchNavigationType;\n key: number | string;\n name: string;\n arabic?: string;\n isArabic?: boolean;\n isTransliteration?: boolean;\n}\n","import type {\n Language,\n TranslationField,\n VerseField,\n WordField,\n} from \".\";\n\nexport type ApiParams = Record<\n string,\n string | number | boolean | unknown[] | undefined | Record<string, boolean>\n>;\n\n/**\n * Base parameters that are common across most API endpoints\n */\nexport interface BaseApiParams extends ApiParams {\n /** Language for the response */\n language?: Language;\n}\n\n/**\n * Pagination parameters\n */\nexport interface PaginationParams extends ApiParams {\n /** Page number for pagination */\n page?: number;\n /** Number of items per page */\n perPage?: number;\n}\n\nexport type BinaryString = \"0\" | \"1\";\n\nexport enum SearchMode {\n Advanced = \"advanced\",\n Quick = \"quick\",\n}\n\n/**\n * Search parameters\n */\nexport interface SearchParams extends BaseApiParams {\n /** Search mode */\n mode: SearchMode;\n /** Search query */\n query: string;\n /** Filter translations */\n filterTranslations?: string | string[];\n /** For advanced search, limit to exact matches */\n exactMatchesOnly?: BinaryString;\n /** Include text in the response */\n getText?: BinaryString;\n /** Include highlighted text */\n highlight?: BinaryString;\n /** Quick search navigational results count */\n navigationalResultsNumber?: number;\n /** Quick search verse results count */\n versesResultsNumber?: number;\n /** Comma-separated list of indexes */\n indexes?: string | string[];\n /** Page number for pagination */\n page?: number;\n /** Number of results to return */\n size?: number;\n /** Translation IDs to use for language detection */\n translationIds?: string | number | Array<string | number>;\n /** Quran fields to include in verse filters */\n fields?: Partial<Record<VerseField, boolean>>;\n /** Translation fields to include in verse filters */\n translationFields?: Partial<Record<TranslationField, boolean>>;\n /** Word fields to include in verse filters */\n wordFields?: Partial<Record<WordField, boolean>>;\n /** Include word data in verse filters */\n words?: boolean;\n}\n","export enum Language {\n ARABIC = \"ar\",\n ENGLISH = \"en\",\n URDU = \"ur\",\n BENGALI = \"bn\",\n TURKISH = \"tr\",\n SPANISH = \"es\",\n GERMAN = \"de\",\n BOSNIAN = \"bs\",\n RUSSIAN = \"ru\",\n ALBANIAN_AL = \"al\",\n FRENCH = \"fr\",\n DUTCH = \"nl\",\n TAMIL = \"ta\",\n TAJIK = \"tg\",\n INDONESIAN = \"id\",\n UZBEK = \"uz\",\n VIETNAMESE = \"vi\",\n CHINESE = \"zh\",\n ITALIAN = \"it\",\n JAPANESE = \"ja\",\n MALAYALAM = \"ml\",\n AMHARIC = \"am\",\n KAZAKH = \"kk\",\n PORTUGUESE = \"pt\",\n TAGALOG = \"tl\",\n THAI = \"th\",\n KOREAN = \"ko\",\n HINDI = \"hi\",\n KURDISH = \"ku\",\n HAUSA = \"ha\",\n AZERI = \"az\",\n SWAHILI = \"sw\",\n PERSIAN = \"fa\",\n SERBIAN = \"sr\",\n MARANAO = \"mrn\",\n AMAZIGH = \"zgh\",\n ASSAMESE = \"as\",\n BULGARIAN = \"bg\",\n CHECHEN = \"ce\",\n CZECH = \"cs\",\n DIVEHI = \"dv\",\n FINNISH = \"fi\",\n GUJAARATI = \"gu\",\n HEBREW = \"he\",\n GEORGIAN = \"ka\",\n CENTRAL_KHMER = \"km\",\n GANDA = \"lg\",\n MARATHI = \"mr\",\n YORUBA = \"yo\",\n MALAY = \"ms\",\n NEPALI = \"ne\",\n SWEDISH = \"sv\",\n TELUGU = \"te\",\n TATAR = \"tt\",\n UYGHUR = \"ug\",\n UKRAINIAN = \"uk\",\n NORWEGIAN = \"no\",\n OROMO = \"om\",\n POLISH = \"pl\",\n PASHTO = \"ps\",\n ROMANIAN = \"ro\",\n SINDHI = \"sd\",\n NORTHERN_SAMI = \"se\",\n SINHALA = \"si\",\n SOMALI = \"so\",\n ALBANIAN_SQ = \"sq\",\n}\n\nexport enum QuranFont {\n MadaniV1 = \"code_v1\",\n MadaniV2 = \"code_v2\",\n Uthmani = \"text_uthmani\",\n}\n\nexport type VerseField =\n | \"chapterId\"\n | \"textUthmani\"\n | \"textUthmaniSimple\"\n | \"textImlaei\"\n | \"textImlaeiSimple\"\n | \"textIndopak\"\n | \"textIndopakNastaleeq\"\n | \"textUthmaniTajweed\"\n | \"imageUrl\"\n | \"imageWidth\"\n | \"codeV1\"\n | \"codeV2\"\n | \"v1Page\"\n | \"v2Page\";\n\nexport type WordField =\n | \"v1Page\"\n | \"v2Page\"\n | \"textUthmani\"\n | \"textImlaei\"\n | \"textIndopak\"\n | \"verseKey\"\n | \"location\"\n | \"codeV1\"\n | \"codeV2\";\n\nexport type TranslationField =\n | \"resourceName\"\n | \"verseId\"\n | \"languageId\"\n | \"languageName\"\n | \"verseKey\"\n | \"chapterId\"\n | \"verseNumber\"\n | \"juzNumber\"\n | \"hizbNumber\"\n | \"rubNumber\"\n | \"pageNumber\";\n\nexport type VerseRecitationField = \"id\" | \"chapterId\" | \"segments\" | \"format\";\n\nexport * from \"./common/verse-key\";\nexport * from \"./common/chapter-id\";\nexport * from \"./common/hizb-number\";\nexport * from \"./common/juz-number\";\nexport * from \"./common/page-number\";\nexport * from \"./common/rub-number\";\n\nexport * from \"./api\";\nexport * from \"./BaseApiParams\";\nexport * from \"./quran-client\";\n","import type { ChapterId } from \"../types\";\n\n/**\n * Validates chapter id\n * @param id chapter id\n * @example\n * isValidChapterId('1') // true\n * isValidChapterId('114') // true\n * isValidChapterId('0') // false\n * isValidChapterId('-1') // false\n * isValidChapterId('200') // false\n */\nexport const isValidChapterId = (id: string | number): id is ChapterId => {\n const parsedId = typeof id === \"number\" ? id : Number(id);\n if (!parsedId || parsedId <= 0 || parsedId > 114) return false;\n return true;\n};\n","import type { JuzNumber } from \"../types\";\n\n/**\n * Validates juz number\n * @param juz juz number\n * @example\n * isValidJuz('1') // true\n * isValidJuz('30') // true\n * isValidJuz('0') // false\n * isValidJuz('-1') // false\n * isValidJuz('200') // false\n */\nexport const isValidJuz = (juz: string | number): juz is JuzNumber => {\n const parsedJuz = typeof juz === \"number\" ? juz : Number(juz);\n if (!parsedJuz || parsedJuz <= 0 || parsedJuz > 30) return false;\n return true;\n};\n","import type { RubNumber } from \"../types\";\n\n/**\n * Validates rub number\n * @param rub rub number\n * @example\n * isValidRub('1') // true\n * isValidRub('240') // true\n * isValidRub('0') // false\n * isValidRub('-1') // false\n * isValidRub('300') // false\n */\nexport const isValidRub = (rub: string | number): rub is RubNumber => {\n const parsedRub = typeof rub === \"number\" ? rub : Number(rub);\n if (!parsedRub || parsedRub <= 0 || parsedRub > 240) return false;\n return true;\n};\n","import type { HizbNumber } from \"../types\";\n\n/**\n * Validates hizb number\n * @param hizb hizb number\n * @example\n * isValidHizb('1') // true\n * isValidHizb('60') // true\n * isValidHizb('0') // false\n * isValidHizb('-1') // false\n * isValidHizb('200') // false\n */\nexport const isValidHizb = (hizb: string | number): hizb is HizbNumber => {\n const parsedHizb = typeof hizb === \"number\" ? hizb : Number(hizb);\n if (!parsedHizb || parsedHizb <= 0 || parsedHizb > 60) return false;\n return true;\n};\n","import type { PageNumber } from \"../types\";\n\n/**\n * Validates mushaf page number\n * @param page mushaf page number\n * @example\n * isValidQuranPage('1') // true\n * isValidQuranPage('604') // true\n * isValidQuranPage('0') // false\n * isValidQuranPage('-1') // false\n * isValidQuranPage('1000') // false\n */\nexport const isValidQuranPage = (page: string | number): page is PageNumber => {\n const parsedPage = typeof page === \"number\" ? page : Number(page);\n if (!parsedPage || parsedPage <= 0 || parsedPage > 604) return false;\n return true;\n};\n","/**\n * Maps chapter number to verse count\n */\nexport const versesMapping = {\n 1: 7,\n 2: 286,\n 3: 200,\n 4: 176,\n 5: 120,\n 6: 165,\n 7: 206,\n 8: 75,\n 9: 129,\n 10: 109,\n 11: 123,\n 12: 111,\n 13: 43,\n 14: 52,\n 15: 99,\n 16: 128,\n 17: 111,\n 18: 110,\n 19: 98,\n 20: 135,\n 21: 112,\n 22: 78,\n 23: 118,\n 24: 64,\n 25: 77,\n 26: 227,\n 27: 93,\n 28: 88,\n 29: 69,\n 30: 60,\n 31: 34,\n 32: 30,\n 33: 73,\n 34: 54,\n 35: 45,\n 36: 83,\n 37: 182,\n 38: 88,\n 39: 75,\n 40: 85,\n 41: 54,\n 42: 53,\n 43: 89,\n 44: 59,\n 45: 37,\n 46: 35,\n 47: 38,\n 48: 29,\n 49: 18,\n 50: 45,\n 51: 60,\n 52: 49,\n 53: 62,\n 54: 55,\n 55: 78,\n 56: 96,\n 57: 29,\n 58: 22,\n 59: 24,\n 60: 13,\n 61: 14,\n 62: 11,\n 63: 11,\n 64: 18,\n 65: 12,\n 66: 12,\n 67: 30,\n 68: 52,\n 69: 52,\n 70: 44,\n 71: 28,\n 72: 28,\n 73: 20,\n 74: 56,\n 75: 40,\n 76: 31,\n 77: 50,\n 78: 40,\n 79: 46,\n 80: 42,\n 81: 29,\n 82: 19,\n 83: 36,\n 84: 25,\n 85: 22,\n 86: 17,\n 87: 19,\n 88: 26,\n 89: 30,\n 90: 20,\n 91: 15,\n 92: 21,\n 93: 11,\n 94: 8,\n 95: 8,\n 96: 19,\n 97: 5,\n 98: 8,\n 99: 8,\n 100: 11,\n 101: 11,\n 102: 8,\n 103: 3,\n 104: 9,\n 105: 5,\n 106: 4,\n 107: 7,\n 108: 3,\n 109: 6,\n 110: 3,\n 111: 5,\n 112: 4,\n 113: 5,\n 114: 6,\n} as const satisfies Record<number, number>;\n","import type { ChapterId, VerseKey } from \"../types\";\nimport { isValidChapterId } from \"./is-valid-chapter-id\";\nimport { versesMapping } from \"./verses-mapping\";\n\n/**\n * Validates verse key\n * @param key colon separated verse key (chapter:verse)\n * @example\n * isValidVerseKey('1:1') // true\n * isValidVerseKey('30:1') // true\n * isValidVerseKey('0') // false\n * isValidVerseKey('1:-') // false\n * isValidVerseKey('1_1') // false\n */\nexport const isValidVerseKey = (key: string): key is VerseKey => {\n const [chapterId, verseId] = key.trim().split(\":\");\n if (!chapterId || !verseId || !isValidChapterId(chapterId)) return false;\n\n const parsedVerse = Number(verseId);\n const verseCount = versesMapping[chapterId as ChapterId];\n if (!parsedVerse || parsedVerse <= 0 || parsedVerse > verseCount)\n return false;\n\n return true;\n};\n","import type {\n BaseApiParams,\n ChapterId,\n ChapterRecitation,\n Pagination,\n VerseKey,\n VerseRecitation,\n VerseRecitationField,\n} from \"@/types\";\nimport { isValidChapterId, isValidVerseKey } from \"@/utils\";\n\nimport type { QuranFetcher } from \"./fetcher\";\n\ntype GetChapterRecitationOptions = BaseApiParams;\n\ntype GetVerseRecitationOptions = BaseApiParams & {\n fields?: Partial<Record<VerseRecitationField, boolean>>;\n};\n\n/**\n * Audio API methods\n */\nexport class QuranAudio {\n constructor(private fetcher: QuranFetcher) {}\n\n /**\n * Get all chapter recitations for specific reciter\n * @param {string} reciterId\n * @param {GetChapterRecitationOptions} options\n * @example\n * client.audio.findAllChapterRecitations('2')\n */\n async findAllChapterRecitations(\n reciterId: string,\n options?: GetChapterRecitationOptions,\n ): Promise<ChapterRecitation[]> {\n const { audioFiles } = await this.fetcher.fetch<{\n audioFiles: ChapterRecitation[];\n }>(`/content/api/v4/recitations/${reciterId}`, options);\n\n return audioFiles;\n }\n\n /**\n * Get a specific chapter recitation by reciter and chapter\n * @param {string} reciterId\n * @param {ChapterId} chapterId\n * @param {GetChapterRecitationOptions} options\n * @example\n * client.audio.findChapterRecitationById('2', '1')\n */\n async findChapterRecitationById(\n reciterId: string,\n chapterId: ChapterId,\n options?: GetChapterRecitationOptions,\n ): Promise<ChapterRecitation> {\n if (!isValidChapterId(chapterId)) throw new Error(\"Invalid chapter id\");\n\n const { audioFile } = await this.fetcher.fetch<{\n audioFile: ChapterRecitation;\n }>(`/content/api/v4/recitations/${reciterId}/${chapterId}`, options);\n\n return audioFile;\n }\n\n /**\n * Get verse recitations by chapter\n * @param {ChapterId} chapterId\n * @param {string} recitationId\n * @param {GetVerseRecitationOptions} options\n * @example\n * client.audio.findVerseRecitationsByChapter('1', '2')\n */\n async findVerseRecitationsByChapter(\n chapterId: ChapterId,\n recitationId: string,\n options?: GetVerseRecitationOptions,\n ): Promise<{ audioFiles: VerseRecitation[]; pagination: Pagination }> {\n if (!isValidChapterId(chapterId)) throw new Error(\"Invalid chapter id\");\n\n const data = await this.fetcher.fetch<{\n audioFiles: VerseRecitation[];\n pagination: Pagination;\n }>(\n `/content/api/v4/recitations/${recitationId}/by_chapter/${chapterId}`,\n options,\n );\n\n return data;\n }\n\n /**\n * Get verse recitations by verse key\n * @param {VerseKey} key\n * @param {string} recitationId\n * @param {GetVerseRecitationOptions} options\n * @example\n * client.audio.findVerseRecitationsByKey('1:1', '2')\n */\n async findVerseRecitationsByKey(\n key: VerseKey,\n recitationId: string,\n options?: GetVerseRecitationOptions,\n ): Promise<{ audioFiles: VerseRecitation[]; pagination: Pagination }> {\n if (!isValidVerseKey(key)) throw new Error(\"Invalid verse key\");\n\n const data = await this.fetcher.fetch<{\n audioFiles: VerseRecitation[];\n pagination: Pagination;\n }>(`/content/api/v4/recitations/${recitationId}/by_ayah/${key}`, options);\n\n return data;\n }\n}\n","import type { BaseApiParams, Chapter, ChapterId, ChapterInfo } from \"@/types\";\nimport { isValidChapterId } from \"@/utils\";\n\nimport type { QuranFetcher } from \"./fetcher\";\n\ntype GetChapterOptions = BaseApiParams;\n\n/**\n * Chapters API methods\n */\nexport class QuranChapters {\n constructor(private fetcher: QuranFetcher) {}\n\n /**\n * Get all chapters.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-chapters\n * @param {GetChapterOptions} options\n * @example\n * client.chapters.findAll()\n */\n async findAll(options?: GetChapterOptions): Promise<Chapter[]> {\n const { chapters } = await this.fetcher.fetch<{ chapters: Chapter[] }>(\n \"/content/api/v4/chapters\",\n options,\n );\n\n return chapters;\n }\n\n /**\n * Get chapter by id.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/get-chapter\n * @param {ChapterId} id chapter id, minimum 1, maximum 114\n * @param {GetChapterOptions} options\n * @example\n * client.chapters.findById('1')\n * client.chapters.findById('114')\n */\n async findById(id: ChapterId, options?: GetChapterOptions): Promise<Chapter> {\n if (!isValidChapterId(id)) throw new Error(\"Invalid chapter id\");\n\n const { chapter } = await this.fetcher.fetch<{ chapter: Chapter }>(\n `/content/api/v4/chapters/${id}`,\n options,\n );\n\n return chapter;\n }\n\n /**\n * Get chapter info by id.\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/get-chapter-info\n * @param {ChapterId} id chapter id, minimum 1, maximum 114\n * @param {GetChapterOptions} options\n * @example\n * client.chapters.findInfoById('1')\n * client.chapters.findInfoById('114')\n */\n async findInfoById(\n id: ChapterId,\n options?: GetChapterOptions,\n ): Promise<ChapterInfo> {\n if (!isValidChapterId(id)) throw new Error(\"Invalid chapter id\");\n\n const { chapterInfo } = await this.fetcher.fetch<{\n chapterInfo: ChapterInfo;\n }>(`/content/api/v4/chapters/${id}/info`, options);\n\n return chapterInfo;\n }\n}\n","export const retry = async <T>(\n fn: () => Promise<T>,\n options: { retries: number } = { retries: 3 },\n): Promise<T> => {\n let lastError: Error;\n\n for (let i = 0; i <= options.retries; i++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n if (i === options.retries) {\n throw lastError;\n }\n\n // Simple exponential backoff\n await new Promise((resolve) =>\n setTimeout(resolve, Math.pow(2, i) * 1000),\n );\n }\n }\n\n throw lastError!;\n};\n","import type { ApiParams } from \"@/types\";\nimport humps from \"humps\";\n\nconst { decamelize } = humps;\n\nexport const removeBeginningSlash = (url: string) => {\n return url.startsWith(\"/\") ? url.slice(1) : url;\n};\n\nconst fieldsKey = [\"wordFields\", \"translationFields\", \"fields\"] as const;\nconst fieldsKeySet = new Set<string>([\n ...fieldsKey,\n ...fieldsKey.map((key) => decamelize(key)),\n]);\nconst preservedKeys = new Set([\"navigationalResultsNumber\", \"versesResultsNumber\"]);\n\nexport const paramsToString = (params?: ApiParams): string => {\n if (!params) return \"\";\n\n const paramsString = new URLSearchParams();\n\n for (const [rawKey, rawValue] of Object.entries(params)) {\n if (rawValue === undefined) continue;\n\n const key = preservedKeys.has(rawKey) ? rawKey : decamelize(rawKey);\n\n // fields is a special case, it's an object with boolean values\n if (fieldsKeySet.has(rawKey) || fieldsKeySet.has(key)) {\n const fields = Object.entries(rawValue as Record<string, boolean>)\n .filter(([, value]) => value)\n .map(([fieldKey]) => decamelize(fieldKey));\n if (fields.length > 0) {\n paramsString.set(key, fields.join(\",\"));\n }\n continue;\n }\n\n if (typeof rawValue === \"string\") {\n paramsString.set(key, rawValue);\n } else if (typeof rawValue === \"number\") {\n paramsString.set(key, rawValue.toString());\n } else if (typeof rawValue === \"boolean\") {\n paramsString.set(key, rawValue.toString());\n } else if (Array.isArray(rawValue)) {\n paramsString.set(key, rawValue.join(\",\"));\n }\n }\n\n if (paramsString.size === 0) return \"\";\n return `?${paramsString.toString()}`;\n};\n","import type {\n ApiParams,\n CachedToken,\n CustomFetcher,\n QuranClientConfig,\n TokenResponse,\n} from \"@/types\";\nimport { retry } from \"@/lib/retry\";\nimport { paramsToString, removeBeginningSlash } from \"@/lib/url\";\nimport humps from \"humps\";\n\nconst { camelizeKeys } = humps;\n\ntype Config = Required<\n Pick<QuranClientConfig, \"contentBaseUrl\" | \"authBaseUrl\">\n> &\n Omit<QuranClientConfig, \"contentBaseUrl\" | \"authBaseUrl\">;\n\n/**\n * Handles HTTP requests with authentication for the Quran API\n */\nexport class QuranFetcher {\n private cachedToken: CachedToken | null = null;\n\n constructor(private config: Config) {}\n\n /**\n * Update the configuration\n */\n updateConfig(config: Config): void {\n this.config = config;\n }\n\n public getFetch(): CustomFetcher {\n const { fetch: fetchFn } = this.config;\n const doFetch = fetchFn ?? globalThis.fetch;\n\n if (typeof doFetch !== \"function\") {\n throw new Error(\n \"No fetch function available. Please provide a fetch implementation or ensure global fetch is available.\",\n );\n }\n\n return doFetch;\n }\n\n private doFetch(...args: Parameters<typeof fetch>) {\n const runFetch = this.getFetch();\n return runFetch(...args);\n }\n\n /**\n * Get access token for API authentication\n */\n private async getAccessToken(): Promise<string> {\n // add 30 seconds to the expiration time to account for clock skew\n if (this.cachedToken && this.cachedToken.expiresAt > Date.now() + 30_000) {\n return this.cachedToken.value; // still fresh\n }\n\n const { clientId, clientSecret, authBaseUrl } = this.config;\n\n const auth = btoa(`${clientId}:${clientSecret}`);\n\n const body = new URLSearchParams({\n grant_type: \"client_credentials\",\n scope: \"content\",\n }).toString();\n\n const res = await retry(\n () =>\n this.doFetch(`${authBaseUrl}/oauth2/token`, {\n method: \"POST\",\n headers: {\n Authorization: `Basic ${auth}`,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\",\n },\n body,\n }),\n { retries: 3 },\n );\n\n if (!res.ok) {\n throw new Error(`Token request failed: ${res.statusText}`);\n }\n\n const json = (await res.json()) as TokenResponse;\n\n // Calculate expiration time (current time + expires_in seconds - converted to milliseconds)\n const expiresAt = Date.now() + json.expires_in * 1000;\n\n this.cachedToken = {\n value: json.access_token,\n expiresAt,\n };\n\n return this.cachedToken.value;\n }\n\n /**\n * Clear cached token (useful for testing or forcing re-authentication)\n */\n clearCachedToken(): void {\n this.cachedToken = null;\n }\n\n /**\n * Make URL with base URL and query parameters\n */\n private makeUrl(url: string, params?: ApiParams): string {\n const { contentBaseUrl } = this.config;\n return `${contentBaseUrl}/${removeBeginningSlash(url)}${paramsToString(params)}`;\n }\n\n /**\n * Make authenticated HTTP request\n */\n async fetch<T extends object>(url: string, params?: ApiParams): Promise<T> {\n const { clientId, defaults } = this.config;\n\n const token = await this.getAccessToken();\n const fullUrl = this.makeUrl(url, { ...defaults, ...params });\n\n const res = await this.doFetch(fullUrl, {\n headers: {\n \"x-auth-token\": token,\n \"x-client-id\": clientId,\n \"Content-Type\": \"application/json\",\n },\n });\n\n if (!res.ok || res.status >= 400) {\n throw new Error(`${res.status} ${res.statusText}`);\n }\n\n const json = await res.json();\n return camelizeKeys(json as object) as T;\n }\n}\n","import type { Juz } from \"@/types\";\n\nimport type { QuranFetcher } from \"./fetcher\";\n\n/**\n * Juzs API methods\n */\nexport class QuranJuzs {\n constructor(private fetcher: QuranFetcher) {}\n\n /**\n * Get All Juzs\n * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/juzs\n * @example\n * client.juzs.findAll()\n */\n async findAll(): Promise<Juz[]> {\n const { juzs } = await this.fetcher.fetch<{ juzs: Juz[] }>(\n \"/content/api/v4/juzs\",\n );\n return juzs;\n }\n}\n","import type {\n BaseApiParams,\n ChapterInfoResource,\n ChapterReciterResource,\n LanguageResource,\n RecitationInfoResource,\n RecitationResource,\n RecitationStylesResource,\n TafsirInfoResource,\n TafsirResource,\n TranslationInfoResource,\n TranslationResource,\n VerseMediaResource,\n} from \"@/types\";\n\nimport type { QuranFetcher } from \"./fetcher\";\n\ntype GetResourceOptions = BaseApiParams;\n\n/**\n * Resources API methods\n */\nexport class QuranResources {\n constructor(private fetcher: QuranFetcher) {}\n\n /**\n * Get all recitations.\n * @param {GetResourceOptions} options\n * @example\n * client.resources.findAllRecitations()\n */\n async findAllRecitations(\n options?: GetResourceOptions,\n ): Promise<RecitationResource[]> {\n const { recitations } = await this.fetcher.fetch<{\n recitations: RecitationResource[];\n }>(\"/content/api/v4/resources/recitations\", options);\n\n return recitations;\n }\n\n /**\n * Get all translations.\n * @param {GetResourceOptions} options\n * @example\n * client.resources.findAllTranslations()\n */\n async findAllTranslations(\n options?: GetResourceOptions,\n ): Promise<TranslationResource[]> {\n const { translations } = await this.fetcher.fetch<{\n translations: TranslationResource[];\n }>(\"/content/api/v4/resources/translations\", options);\n\n return translations;\n }\n\n /**\n * Get all tafsirs.\n * @param {GetResourceOptions} options\n * @example\n * client.resources.findAllTafsirs()\n */\n async findAllTafsirs(\n options?: GetResourceOptions,\n ): Promise<TafsirResource[]> {\n const { tafsirs } = await this.fetcher.fetch<{\n tafsirs: TafsirResource[];\n }>(\"/content/api/v4/resources/tafsirs\", options);\n\n return tafsirs;\n }\n\n /**\n * Get all languages.\n * @param {GetResourceOptions} options\n * @example\n * client.resources.findAllLanguages()\n */\n async findAllLanguages(\n options?: GetResourceOptions,\n ): Promise<LanguageResource[]> {\n const { languages } = await this.fetcher.fetch<{\n languages: LanguageResource[];\n }>(\"/content/api/v4/resources/languages\", options);\n\n return languages;\n }\n\n /**\n * Get recitation info by id.\n * @param {string} id recitation id\n * @param {GetResourceOptions} options\n * @example\n * client.resources.findRecitationInfo('1')\n */\n async findRecitationInfo(\n id: string,\n options?: GetResourceOptions,\n ): Promise<RecitationInfoResource> {\n const { recitationInfo } = await this.fetcher.fetch<{\n recitationInfo: RecitationInfoResource;\n }>(`/content/api/v4/resources/recitations/${id}/info`, options);\n\n return recitationInfo;\n }\n\n /**\n * Get translation info by id.\n * @param {string} id translation id\n * @param {GetResourceOptions} options\n * @example\n * client.resources.findTranslationInfo('131')\n */\n async findTranslationInfo(\n id: string,\n options?: GetResourceOptions,\n ): Promise<TranslationInfoResource> {\n const { translationInfo } = await this.fetcher.fetch<{\n translationInfo: TranslationInfoResource;\n }>(`/content/api/v4/resources/translations/${id}/info`, options);\n\n return translationInfo;\n }\n\n /**\n * Get tafsir info by id.\n * @param {string} id tafsir id\n * @param {GetResourceOptions} options\n * @example\n * client.resources.findTafsirInfo('171')\n */\n async findTafsirInfo(\n id: string,\n options?: GetResourceOptions,\n ): Promise<TafsirInfoResource> {\n const { tafsirInfo } = await this.fetcher.fetch<{\n tafsirInfo: TafsirInfoResource;\n }>(`/content/api/v4/resources/tafsirs/${id}/info`, options);\n\n return tafsirInfo;\n }\n\n /**\n * Get all chapter infos.\n * @param {GetResourceOptions} options\n * @example\n * client.resources.findAllChapterInfos()\n */\n async findAllChapterInfos(\n options?: GetResourceOptions,\n ): Promise<ChapterInfoResource[]> {\n const { chapterInfos } = await this.fetcher.fetch<{\n chapterInfos: ChapterInfoResource[];\n }>(\"/content/api/v4/resources/chapter_infos\", options);\n\n return chapterInfos;\n }\n\n /**\n * Get all chapter reciters.\n * @param {GetResourceOptions} options\n * @example\n * client.resources.findAllChapterReciters()\n */\n async findAllChapterReciters(\n options?: GetResourceOptions,\n ): Promise<ChapterReciterResource[]> {\n const { reciters } = await this.fetcher.fetch<{\n reciters: ChapterReciterResource[];\n }>(\"/content/api/v4/resources/chapter_reciters\", options);\n\n return reciters;\n }\n\n /**\n * Get all recitation styles.\n * @param {GetResourceOptions} options\n * @example\n * client.resources.findAllRecitationStyles()\n */\n async findAllRecitationStyles(\n options?: GetResourceOptions,\n ): Promise<RecitationStylesResource> {\n const { recitationStyles } = await this.fetcher.fetch<{\n recitationStyles: RecitationStylesResource;\n }>(\"/content/api/v4/resources/recitation_styles\", options);\n\n return recitationStyles;\n }\n\n /**\n * Get verse media.\n * @param {GetResourceOptions} options\n * @example\n * client.resources.findVerseMedia()\n */\n async findVerseMedia(\n options?: GetResourceOptions,\n ): Promise<VerseMediaResource> {\n const { verseMedia } = await this.fetcher.fetch<{\n verseMedia: VerseMediaResource;\n }>(\"/content/api/v4/resources/verse_media\", options);\n\n return verseMedia;\n }\n}\n","import type { SearchParams, SearchResponse } from \"@/types\";\n\nimport type { QuranFetcher } from \"./fetcher\";\n\ntype SearchOptions = Omit<SearchParams, \"query\">;\n\n/**\n * Search API methods\n */\nexport class QuranSearch {\n constructor(private fetcher: QuranFetcher) {}\n\n /**\n * Search\n * @description /v1/search\n * @param {string} query search query\n * @param {SearchOptions} options\n * @example\n * client.search.search('نور', { mode: SearchMode.Quick })\n * client.search.search('نور', { mode: SearchMode.Advanced, exactMatchesOnly: '1' })\n * client.search.search('نور', { mode: SearchMode.Quick, size: 10 })\n * client.search.search('نور', { mode: SearchMode.Quick, page: 2 })\n */\n async search(query: string, options: SearchOptions): Promise<SearchResponse> {\n return this.fetcher.fetch<SearchResponse>(\"/v1/search\", {\n query,\n size: 30, // search-specific default\n ...options,\n });\n }\n}\n","import type {\n BaseApiParams,\n ChapterId,\n HizbNumber,\n JuzNumber,\n PageNumber,\n PaginationParams,\n RubNumber,\n TranslationField,\n Verse,\n VerseField,\n VerseKey,\n WordField,\n} from \"@/types\";\nimport {\n isValidChapterId,\n isValidHizb,\n isValidJuz,\n isValidQuranPage,\n isValidRub,\n isValidVerseKey,\n} from \"@/utils\";\n\nimport type { QuranFetcher } from \"./fetcher\";\n\ntype GetVerseOptions = BaseApiParams &\n PaginationParams & {\n reciter?: string | number;\n words?: boolean;\n translations?: string[] | number[];\n tafsirs?: string[] | number[];\n wordFields?: Partial<Record<WordField, boolean>>;\n translationFields?: Partial<Record<TranslationField, boolean>>;\n fields?: Partial<Record<VerseField, boolean>>;\n };\n\n/**\n * Verses API methods\n */\nexport class QuranVerses {\n constructor(private fetcher: QuranFetcher) {}\n\n /**\n * Get a specific verse by its key.\n * @param {VerseKey} key verse key in format \"chapter:verse\" (e.g., \"1:1\")\n * @param {GetVerseOptions} options\n * @example\n * client.verses.findByKey('1:1')\n * client.verses.findByKey('2:255')\n */\n async findByKey(key: VerseKey, options?: GetVerseOptions): Promise<Verse> {\n if (!isValidVerseKey(key)) throw new Error(\"Invalid verse key\");\n\n const { verse } = await this.fetcher.fetch<{ verse: Verse }>(\n `/content/api/v4/verses/by_key/${key}`,\n {\n words: false, // verses-specific default\n ...options,\n },\n );\n\n return verse;\n }\n\n /**\n * Get verses by chapter.\n * @param {ChapterId} id chapter id, minimum 1, maximum 114\n * @param {GetVerseOptions} options\n * @example\n * client.verses.findByChapter('1')\n */\n async findByChapter(\n id: ChapterId,\n options?: GetVerseOptions,\n ): Promise<Verse[]> {\n if (!isValidChapterId(id)) throw new Error(\"Invalid chapter id\");\n\n const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>(\n `/content/api/v4/verses/by_chapter/${id}`,\n {\n words: false, // verses-specific default\n ...options,\n },\n );\n\n return verses;\n }\n\n /**\n * Get verses by page number.\n * @param {PageNumber} page page number\n * @param {GetVerseOptions} options\n * @example\n * client.verses.findByPage('1')\n */\n async findByPage(\n page: PageNumber,\n options?: GetVerseOptions,\n ): Promise<Verse[]> {\n if (!isValidQuranPage(page)) throw new Error(\"Invalid page number\");\n\n const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>(\n `/content/api/v4/verses/by_page/${page}`,\n {\n words: false, // verses-specific default\n ...options,\n },\n );\n\n return verses;\n }\n\n /**\n * Get verses by juz number.\n * @param {JuzNumber} juz juz number\n * @param {GetVerseOptions} options\n * @example\n * client.verses.findByJuz('1')\n */\n async findByJuz(juz: JuzNumber, options?: GetVerseOptions): Promise<Verse[]> {\n if (!isValidJuz(juz)) throw new Error(\"Invalid juz\");\n\n const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>(\n `/content/api/v4/verses/by_juz/${juz}`,\n {\n words: false, // verses-specific default\n ...options,\n },\n );\n\n return verses;\n }\n\n /**\n * Get verses by hizb number.\n * @param {HizbNumber} hizb hizb number\n * @param {GetVerseOptions} options\n * @example\n * client.verses.findByHizb('1')\n */\n async findByHizb(\n hizb: HizbNumber,\n options?: GetVerseOptions,\n ): Promise<Verse[]> {\n if (!isValidHizb(hizb)) throw new Error(\"Invalid hizb\");\n\n const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>(\n `/content/api/v4/verses/by_hizb/${hizb}`,\n {\n words: false, // verses-specific default\n ...options,\n },\n );\n\n return verses;\n }\n\n /**\n * Get verses by rub number.\n * @param {RubNumber} rub rub number\n * @param {GetVerseOptions} options\n * @example\n * client.verses.findByRub('1')\n */\n async findByRub(rub: RubNumber, options?: GetVerseOptions): Promise<Verse[]> {\n if (!isValidRub(rub)) throw new Error(\"Invalid rub\");\n\n const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>(\n `/content/api/v4/verses/by_rub/${rub}`,\n {\n words: false, // verses-specific default\n ...options,\n },\n );\n\n return verses;\n }\n\n /**\n * Get a random verse.\n * @param {GetVerseOptions} options\n * @example\n * client.verses.findRandom()\n */\n async findRandom(options?: GetVerseOptions): Promise<Verse> {\n const { verse } = await this.fetcher.fetch<{ verse: Verse }>(\n \"/content/api/v4/verses/random\",\n {\n words: false, // verses-specific default\n ...options,\n },\n );\n\n return verse;\n }\n}\n","import type { QuranClientConfig } from \"@/types\";\nimport { Language } from \"@/types\";\n\nimport { QuranAudio } from \"./audio\";\nimport { QuranChapters } from \"./chapters\";\nimport { QuranFetcher } from \"./fetcher\";\nimport { QuranJuzs } from \"./juzs\";\nimport { QuranResources } from \"./resources\";\nimport { QuranSearch } from \"./search\";\nimport { QuranVerses } from \"./verses\";\n\n/**\n * Main Quran API client\n */\nexport class QuranClient {\n private config: Required<\n Pick<QuranClientConfig, \"contentBaseUrl\" | \"authBaseUrl\">\n > &\n Omit<QuranClientConfig, \"contentBaseUrl\" | \"authBaseUrl\">;\n private fetcher: QuranFetcher;\n\n public readonly chapters: QuranChapters;\n public readonly verses: QuranVerses;\n public readonly juzs: QuranJuzs;\n public readonly audio: QuranAudio;\n public readonly resources: QuranResources;\n public readonly search: QuranSearch;\n\n constructor(config: QuranClientConfig) {\n // Resolve configuration with defaults\n this.config = {\n contentBaseUrl: \"https://apis.quran.foundation\",\n authBaseUrl: \"https://oauth2.quran.foundation\",\n ...config,\n defaults: {\n language: Language.ARABIC,\n ...config.defaults,\n },\n };\n\n // Initialize the fetcher\n this.fetcher = new QuranFetcher(this.config);\n this.fetcher.getFetch(); // validate fetch function is available\n\n // Initialize all API modules with the fetcher only\n this.chapters = new QuranChapters(this.fetcher);\n this.verses = new QuranVerses(this.fetcher);\n this.juzs = new QuranJuzs(this.fetcher);\n this.audio = new QuranAudio(this.fetcher);\n this.resources = new QuranResources(this.fetcher);\n this.search = new QuranSearch(this.fetcher);\n }\n\n /**\n * Get the current configuration\n */\n public getConfig(): QuranClientConfig {\n return { ...this.config };\n }\n\n /**\n * Update the configuration\n */\n public updateConfig(newConfig: Partial<QuranClientConfig>): void {\n this.config = {\n ...this.config,\n ...newConfig,\n defaults: {\n ...this.config.defaults,\n ...newConfig.defaults,\n },\n };\n\n // Update the fetcher with new config\n this.fetcher.updateConfig(this.config);\n }\n\n /**\n * Clear cached authentication token\n */\n public clearCachedToken(): void {\n this.fetcher.clearCachedToken();\n }\n}\n"]}
@@ -1,6 +1,3 @@
1
- import S from 'humps';
2
-
3
- var C=(f=>(f.Word="word",f.End="end",f.Pause="pause",f.Sajdah="sajdah",f.RubElHizb="rub-el-hizb",f))(C||{});var l=(s=>(s.ARABIC="ar",s.ENGLISH="en",s.URDU="ur",s.BENGALI="bn",s.TURKISH="tr",s.SPANISH="es",s.GERMAN="de",s.BOSNIAN="bs",s.RUSSIAN="ru",s.ALBANIAN_AL="al",s.FRENCH="fr",s.DUTCH="nl",s.TAMIL="ta",s.TAJIK="tg",s.INDONESIAN="id",s.UZBEK="uz",s.VIETNAMESE="vi",s.CHINESE="zh",s.ITALIAN="it",s.JAPANESE="ja",s.MALAYALAM="ml",s.AMHARIC="am",s.KAZAKH="kk",s.PORTUGUESE="pt",s.TAGALOG="tl",s.THAI="th",s.KOREAN="ko",s.HINDI="hi",s.KURDISH="ku",s.HAUSA="ha",s.AZERI="az",s.SWAHILI="sw",s.PERSIAN="fa",s.SERBIAN="sr",s.MARANAO="mrn",s.AMAZIGH="zgh",s.ASSAMESE="as",s.BULGARIAN="bg",s.CHECHEN="ce",s.CZECH="cs",s.DIVEHI="dv",s.DHIVEHI="dv",s.MALDIVIAN="dv",s.FINNISH="fi",s.GUJAARATI="gu",s.HEBREW="he",s.GEORGIAN="ka",s.CENTRAL_KHMER="km",s.GANDA="lg",s.MARATHI="mr",s.YORUBA="yo",s.MALAY="ms",s.NEPALI="ne",s.SWEDISH="sv",s.TELUGU="te",s.TATAR="tt",s.UIGHUR="ug",s.UYGHUR="ug",s.UKRAINIAN="uk",s.NORWEGIAN="no",s.OROMO="om",s.POLISH="pl",s.PASHTO="ps",s.ROMANIAN="ro",s.SINDHI="sd",s.NORTHERN_SAMI="se",s.SINHALA="si",s.SINHALESE="si",s.SOMALI="so",s.ALBANIAN_SQ="sq",s))(l||{}),G=(i=>(i.MadaniV1="code_v1",i.MadaniV2="code_v2",i.Uthmani="text_uthmani",i))(G||{});var h=r=>r.startsWith("/")?r.slice(1):r;var B="https://api.quran.com/api/v4/",{camelizeKeys:R,decamelize:z,decamelizeKeys:H}=S,I=(r,e)=>{let t=`${B}${h(r)}`;if(!e)return t;let i=H(e),n=new URLSearchParams(Object.entries(i).filter(([,f])=>f!==void 0)).toString();return n?`${t}?${n}`:t},a=async(r,e={},t)=>{if(t){let f=await t(I(r,e));return R(f)}if(typeof globalThis.fetch!="function")throw new Error("Looks like there is no global fetch function. Take a look at https://quranjs.com/techniques#custom-fetcher for more info.");let i=await globalThis.fetch(I(r,e));if(!i.ok||i.status>=400)throw new Error(`${i.status} ${i.statusText}`);let n=await i.json();return R(n)},c=(r={},e={})=>{let t={...r};t.fetchFn&&(t.fetchFn=void 0);let i={...e,...t};if(i.fields){let n=[];Object.entries(i.fields).forEach(([f,E])=>{E&&n.push(z(f));}),i.fields=n.join(",");}return i};var P={1:7,2:286,3:200,4:176,5:120,6:165,7:206,8:75,9:129,10:109,11:123,12:111,13:43,14:52,15:99,16:128,17:111,18:110,19:98,20:135,21:112,22:78,23:118,24:64,25:77,26:227,27:93,28:88,29:69,30:60,31:34,32:30,33:73,34:54,35:45,36:83,37:182,38:88,39:75,40:85,41:54,42:53,43:89,44:59,45:37,46:35,47:38,48:29,49:18,50:45,51:60,52:49,53:62,54:55,55:78,56:96,57:29,58:22,59:24,60:13,61:14,62:11,63:11,64:18,65:12,66:12,67:30,68:52,69:52,70:44,71:28,72:28,73:20,74:56,75:40,76:31,77:50,78:40,79:46,80:42,81:29,82:19,83:36,84:25,85:22,86:17,87:19,88:26,89:30,90:20,91:15,92:21,93:11,94:8,95:8,96:19,97:5,98:8,99:8,100:11,101:11,102:8,103:3,104:9,105:5,106:4,107:7,108:3,109:6,110:3,111:5,112:4,113:5,114:6},A=r=>{let e=typeof r=="number"?r:Number(r);return !(!e||e<=0||e>114)},T=r=>{let e=typeof r=="number"?r:Number(r);return !(!e||e<=0||e>30)},U=r=>{let e=typeof r=="number"?r:Number(r);return !(!e||e<=0||e>240)},$=r=>{let e=typeof r=="number"?r:Number(r);return !(!e||e<=0||e>60)},K=r=>{let e=typeof r=="number"?r:Number(r);return !(!e||e<=0||e>604)},j=r=>{let[e,t]=r.trim().split(":");if(!e||!t||!A(e))return !1;let i=Number(t),n=P[e];return !(!i||i<=0||i>n)},M={isValidChapterId:A,isValidJuz:T,isValidRub:U,isValidHizb:$,isValidQuranPage:K,isValidVerseKey:j},o=M;var p={language:"ar"},_=async r=>{let e=c(r,p),{chapters:t}=await a("/chapters",e,r==null?void 0:r.fetchFn);return t},k=async(r,e)=>{if(!o.isValidChapterId(r))throw new Error("Invalid chapter id");let t=c(e,p),{chapter:i}=await a(`/chapters/${r}`,t,e==null?void 0:e.fetchFn);return i},J=async(r,e)=>{if(!o.isValidChapterId(r))throw new Error("Invalid chapter id");let t=c(e,p),{chapterInfo:i}=await a(`/chapters/${r}/info`,t,e==null?void 0:e.fetchFn);return i},D={findAll:_,findById:k,findInfoById:J},b=D;var{decamelize:y}=S,g={language:"ar",perPage:50,words:!1},d=(r={})=>{let e=c(r,g);if(e.translations&&(e.translations=e.translations.join(",")),e.tafsirs&&(e.tafsirs=e.tafsirs.join(",")),e.wordFields){let t=[];Object.entries(e.wordFields).forEach(([i,n])=>{n&&t.push(y(i));}),e.wordFields=t.join(",");}if(e.translationFields){let t=[];Object.entries(e.translationFields).forEach(([i,n])=>{n&&t.push(y(i));}),e.translationFields=t.join(",");}return e.reciter&&(e.audio=e.reciter,e.reciter=void 0),e},q=async(r,e)=>{if(!o.isValidVerseKey(r))throw new Error("Invalid verse key");let t=d(e),i=`/verses/by_key/${r}`,{verse:n}=await a(i,t,e==null?void 0:e.fetchFn);return n},Z=async(r,e)=>{if(!o.isValidChapterId(r))throw new Error("Invalid chapter id");let t=d(e),i=`/verses/by_chapter/${r}`,{verses:n}=await a(i,t,e==null?void 0:e.fetchFn);return n},Y=async(r,e)=>{if(!o.isValidQuranPage(r))throw new Error("Invalid page");let t=d(e),i=`/verses/by_page/${r}`,{verses:n}=await a(i,t,e==null?void 0:e.fetchFn);return n},Q=async(r,e)=>{if(!o.isValidJuz(r))throw new Error("Invalid juz");let t=d(e),i=`/verses/by_juz/${r}`,{verses:n}=await a(i,t,e==null?void 0:e.fetchFn);return n},X=async(r,e)=>{if(!o.isValidHizb(r))throw new Error("Invalid hizb");let t=d(e),i=`/verses/by_hizb/${r}`,{verses:n}=await a(i,t,e==null?void 0:e.fetchFn);return n},L=async(r,e)=>{if(!o.isValidRub(r))throw new Error("Invalid rub");let t=d(e),{verses:i}=await a(`/verses/by_rub/${r}`,t,e==null?void 0:e.fetchFn);return i},ee=async r=>{let e=d(r),{verse:t}=await a("/verses/random",e,r==null?void 0:r.fetchFn);return t},re={findByKey:q,findByChapter:Z,findByPage:Y,findByJuz:Q,findByHizb:X,findByRub:L,findRandom:ee},O=re;var te=async r=>{let{juzs:e}=await a("/juzs",void 0,r==null?void 0:r.fetchFn);return e},se={findAll:te},V=se;var N={language:"ar"},u={language:"ar"},ie=async(r,e)=>{let t=c(e,N),{audioFiles:i}=await a(`/chapter_recitations/${r}`,t,e==null?void 0:e.fetchFn);return i},ae=async(r,e,t)=>{if(!o.isValidChapterId(r))throw new Error("Invalid chapter id");let i=c(t,N),{audioFile:n}=await a(`/chapter_recitations/${e}/${r}`,i,t==null?void 0:t.fetchFn);return n},ne=async(r,e,t)=>{if(!o.isValidChapterId(r))throw new Error("Invalid chapter id");let i=c(t,u);return await a(`/recitations/${e}/by_chapter/${r}`,i,t==null?void 0:t.fetchFn)},ce=async(r,e,t)=>{if(!o.isValidJuz(r))throw new Error("Invalid juz");let i=c(t,u);return await a(`/recitations/${e}/by_juz/${r}`,i,t==null?void 0:t.fetchFn)},oe=async(r,e,t)=>{if(!o.isValidQuranPage(r))throw new Error("Invalid page");let i=c(t,u);return await a(`/recitations/${e}/by_page/${r}`,i,t==null?void 0:t.fetchFn)},fe=async(r,e,t)=>{if(!o.isValidRub(r))throw new Error("Invalid rub");let i=c(t,u);return await a(`/recitations/${e}/by_rub/${r}`,i,t==null?void 0:t.fetchFn)},me=async(r,e,t)=>{if(!o.isValidHizb(r))throw new Error("Invalid hizb");let i=c(t,u);return await a(`/recitations/${e}/by_hizb/${r}`,i,t==null?void 0:t.fetchFn)},de=async(r,e,t)=>{if(!o.isValidVerseKey(r))throw new Error("Invalid verse key");let i=c(t,u);return await a(`/recitations/${e}/by_ayah/${r}`,i,t==null?void 0:t.fetchFn)},le={findAllChapterRecitations:ie,findChapterRecitationById:ae,findVerseRecitationsByChapter:ne,findVerseRecitationsByJuz:ce,findVerseRecitationsByPage:oe,findVerseRecitationsByRub:fe,findVerseRecitationsByHizb:me,findVerseRecitationsByKey:de},w=le;var m={language:"ar"},ue=async r=>{let e=c(r),{recitations:t}=await a("/resources/recitations",e,r==null?void 0:r.fetchFn);return t},pe=async(r,e)=>{let t=c(e,m),{info:i}=await a(`/resources/recitations/${r}/info`,t,e==null?void 0:e.fetchFn);return i},he=async r=>{let e=c(r,m),{translations:t}=await a("/resources/translations",e,r==null?void 0:r.fetchFn);return t},Re=async(r,e)=>{let t=c(e,m),{info:i}=await a(`/resources/translations/${r}/info`,t,e==null?void 0:e.fetchFn);return i},Ie=async r=>{let e=c(r,m),{tafsirs:t}=await a("/resources/tafsirs",e,r==null?void 0:r.fetchFn);return t},Ae=async(r,e)=>{let t=c(e,m),{info:i}=await a(`/resources/tafsirs/${r}/info`,t,e==null?void 0:e.fetchFn);return i},be=async r=>{let{recitationStyles:e}=await a("/resources/recitation_styles",void 0,r==null?void 0:r.fetchFn);return e},ye=async r=>{let e=c(r,m),{languages:t}=await a("/resources/languages",e,r==null?void 0:r.fetchFn);return t},Oe=async r=>{let e=c(r,m),{chapterInfos:t}=await a("/resources/chapter_infos",e,r==null?void 0:r.fetchFn);return t},Ve=async r=>{let e=c(r,m),{verseMedia:t}=await a("/resources/verse_media",e,r==null?void 0:r.fetchFn);return t},Ne=async r=>{let e=c(r,m),{reciters:t}=await a("/resources/chapter_reciters",e,r==null?void 0:r.fetchFn);return t},we={findAllRecitations:ue,findAllTranslations:he,findAllTafsirs:Ie,findAllRecitationStyles:be,findAllLanguages:ye,findVerseMedia:Ve,findAllChapterReciters:Ne,findAllChapterInfos:Oe,findRecitationInfo:pe,findTranslationInfo:Re,findTafsirInfo:Ae},x=we;var xe={language:"ar",size:30},Fe=async(r,e)=>{let t=c({q:r,...e},xe),{search:i}=await a("/search",t,e==null?void 0:e.fetchFn);return i},ve={search:Fe},F=ve;var Ee={chapters:b,verses:O,juzs:V,audio:w,resources:x,search:F},v=Ee;var Ce={v4:v,utils:o},Ge=Ce;
4
-
5
- export { C as CharType, l as Language, G as QuranFont, Ge as quran };
1
+ import z from'humps';var B=(n=>(n.Word="word",n.End="end",n.Pause="pause",n.Sajdah="sajdah",n.RubElHizb="rub-el-hizb",n))(B||{});var G=(p=>(p.SURAH="surah",p.JUZ="juz",p.HIZB="hizb",p.AYAH="ayah",p.RUB_EL_HIZB="rub_el_hizb",p.SEARCH_PAGE="search_page",p.PAGE="page",p.RANGE="range",p.QURAN_RANGE="quran_range",p))(G||{});var U=(t=>(t.Advanced="advanced",t.Quick="quick",t))(U||{});var V=(r=>(r.ARABIC="ar",r.ENGLISH="en",r.URDU="ur",r.BENGALI="bn",r.TURKISH="tr",r.SPANISH="es",r.GERMAN="de",r.BOSNIAN="bs",r.RUSSIAN="ru",r.ALBANIAN_AL="al",r.FRENCH="fr",r.DUTCH="nl",r.TAMIL="ta",r.TAJIK="tg",r.INDONESIAN="id",r.UZBEK="uz",r.VIETNAMESE="vi",r.CHINESE="zh",r.ITALIAN="it",r.JAPANESE="ja",r.MALAYALAM="ml",r.AMHARIC="am",r.KAZAKH="kk",r.PORTUGUESE="pt",r.TAGALOG="tl",r.THAI="th",r.KOREAN="ko",r.HINDI="hi",r.KURDISH="ku",r.HAUSA="ha",r.AZERI="az",r.SWAHILI="sw",r.PERSIAN="fa",r.SERBIAN="sr",r.MARANAO="mrn",r.AMAZIGH="zgh",r.ASSAMESE="as",r.BULGARIAN="bg",r.CHECHEN="ce",r.CZECH="cs",r.DIVEHI="dv",r.FINNISH="fi",r.GUJAARATI="gu",r.HEBREW="he",r.GEORGIAN="ka",r.CENTRAL_KHMER="km",r.GANDA="lg",r.MARATHI="mr",r.YORUBA="yo",r.MALAY="ms",r.NEPALI="ne",r.SWEDISH="sv",r.TELUGU="te",r.TATAR="tt",r.UYGHUR="ug",r.UKRAINIAN="uk",r.NORWEGIAN="no",r.OROMO="om",r.POLISH="pl",r.PASHTO="ps",r.ROMANIAN="ro",r.SINDHI="sd",r.NORTHERN_SAMI="se",r.SINHALA="si",r.SOMALI="so",r.ALBANIAN_SQ="sq",r))(V||{}),k=(s=>(s.MadaniV1="code_v1",s.MadaniV2="code_v2",s.Uthmani="text_uthmani",s))(k||{});var a=i=>{let e=typeof i=="number"?i:Number(i);return !(!e||e<=0||e>114)};var A=i=>{let e=typeof i=="number"?i:Number(i);return !(!e||e<=0||e>30)};var v=i=>{let e=typeof i=="number"?i:Number(i);return !(!e||e<=0||e>240)};var P=i=>{let e=typeof i=="number"?i:Number(i);return !(!e||e<=0||e>60)};var x=i=>{let e=typeof i=="number"?i:Number(i);return !(!e||e<=0||e>604)};var N={1:7,2:286,3:200,4:176,5:120,6:165,7:206,8:75,9:129,10:109,11:123,12:111,13:43,14:52,15:99,16:128,17:111,18:110,19:98,20:135,21:112,22:78,23:118,24:64,25:77,26:227,27:93,28:88,29:69,30:60,31:34,32:30,33:73,34:54,35:45,36:83,37:182,38:88,39:75,40:85,41:54,42:53,43:89,44:59,45:37,46:35,47:38,48:29,49:18,50:45,51:60,52:49,53:62,54:55,55:78,56:96,57:29,58:22,59:24,60:13,61:14,62:11,63:11,64:18,65:12,66:12,67:30,68:52,69:52,70:44,71:28,72:28,73:20,74:56,75:40,76:31,77:50,78:40,79:46,80:42,81:29,82:19,83:36,84:25,85:22,86:17,87:19,88:26,89:30,90:20,91:15,92:21,93:11,94:8,95:8,96:19,97:5,98:8,99:8,100:11,101:11,102:8,103:3,104:9,105:5,106:4,107:7,108:3,109:6,110:3,111:5,112:4,113:5,114:6};var h=i=>{let[e,t]=i.trim().split(":");if(!e||!t||!a(e))return false;let s=Number(t),o=N[e];return !(!s||s<=0||s>o)};var l=class{constructor(e){this.fetcher=e;}async findAllChapterRecitations(e,t){let{audioFiles:s}=await this.fetcher.fetch(`/content/api/v4/recitations/${e}`,t);return s}async findChapterRecitationById(e,t,s){if(!a(t))throw new Error("Invalid chapter id");let{audioFile:o}=await this.fetcher.fetch(`/content/api/v4/recitations/${e}/${t}`,s);return o}async findVerseRecitationsByChapter(e,t,s){if(!a(e))throw new Error("Invalid chapter id");return await this.fetcher.fetch(`/content/api/v4/recitations/${t}/by_chapter/${e}`,s)}async findVerseRecitationsByKey(e,t,s){if(!h(e))throw new Error("Invalid verse key");return await this.fetcher.fetch(`/content/api/v4/recitations/${t}/by_ayah/${e}`,s)}};var m=class{constructor(e){this.fetcher=e;}async findAll(e){let{chapters:t}=await this.fetcher.fetch("/content/api/v4/chapters",e);return t}async findById(e,t){if(!a(e))throw new Error("Invalid chapter id");let{chapter:s}=await this.fetcher.fetch(`/content/api/v4/chapters/${e}`,t);return s}async findInfoById(e,t){if(!a(e))throw new Error("Invalid chapter id");let{chapterInfo:s}=await this.fetcher.fetch(`/content/api/v4/chapters/${e}/info`,t);return s}};var T=async(i,e={retries:3})=>{let t;for(let s=0;s<=e.retries;s++)try{return await i()}catch(o){if(t=o,s===e.retries)throw t;await new Promise(n=>setTimeout(n,Math.pow(2,s)*1e3));}throw t};var{decamelize:w}=z,F=i=>i.startsWith("/")?i.slice(1):i,S=["wordFields","translationFields","fields"],E=new Set([...S,...S.map(i=>w(i))]),H=new Set(["navigationalResultsNumber","versesResultsNumber"]),O=i=>{if(!i)return "";let e=new URLSearchParams;for(let[t,s]of Object.entries(i)){if(s===void 0)continue;let o=H.has(t)?t:w(t);if(E.has(t)||E.has(o)){let n=Object.entries(s).filter(([,c])=>c).map(([c])=>w(c));n.length>0&&e.set(o,n.join(","));continue}typeof s=="string"?e.set(o,s):typeof s=="number"||typeof s=="boolean"?e.set(o,s.toString()):Array.isArray(s)&&e.set(o,s.join(","));}return e.size===0?"":`?${e.toString()}`};var{camelizeKeys:_}=z,u=class{constructor(e){this.config=e;}cachedToken=null;updateConfig(e){this.config=e;}getFetch(){let{fetch:e}=this.config,t=e??globalThis.fetch;if(typeof t!="function")throw new Error("No fetch function available. Please provide a fetch implementation or ensure global fetch is available.");return t}doFetch(...e){return this.getFetch()(...e)}async getAccessToken(){if(this.cachedToken&&this.cachedToken.expiresAt>Date.now()+3e4)return this.cachedToken.value;let{clientId:e,clientSecret:t,authBaseUrl:s}=this.config,o=btoa(`${e}:${t}`),n=new URLSearchParams({grant_type:"client_credentials",scope:"content"}).toString(),c=await T(()=>this.doFetch(`${s}/oauth2/token`,{method:"POST",headers:{Authorization:`Basic ${o}`,"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:n}),{retries:3});if(!c.ok)throw new Error(`Token request failed: ${c.statusText}`);let f=await c.json(),I=Date.now()+f.expires_in*1e3;return this.cachedToken={value:f.access_token,expiresAt:I},this.cachedToken.value}clearCachedToken(){this.cachedToken=null;}makeUrl(e,t){let{contentBaseUrl:s}=this.config;return `${s}/${F(e)}${O(t)}`}async fetch(e,t){let{clientId:s,defaults:o}=this.config,n=await this.getAccessToken(),c=this.makeUrl(e,{...o,...t}),f=await this.doFetch(c,{headers:{"x-auth-token":n,"x-client-id":s,"Content-Type":"application/json"}});if(!f.ok||f.status>=400)throw new Error(`${f.status} ${f.statusText}`);let I=await f.json();return _(I)}};var d=class{constructor(e){this.fetcher=e;}async findAll(){let{juzs:e}=await this.fetcher.fetch("/content/api/v4/juzs");return e}};var y=class{constructor(e){this.fetcher=e;}async findAllRecitations(e){let{recitations:t}=await this.fetcher.fetch("/content/api/v4/resources/recitations",e);return t}async findAllTranslations(e){let{translations:t}=await this.fetcher.fetch("/content/api/v4/resources/translations",e);return t}async findAllTafsirs(e){let{tafsirs:t}=await this.fetcher.fetch("/content/api/v4/resources/tafsirs",e);return t}async findAllLanguages(e){let{languages:t}=await this.fetcher.fetch("/content/api/v4/resources/languages",e);return t}async findRecitationInfo(e,t){let{recitationInfo:s}=await this.fetcher.fetch(`/content/api/v4/resources/recitations/${e}/info`,t);return s}async findTranslationInfo(e,t){let{translationInfo:s}=await this.fetcher.fetch(`/content/api/v4/resources/translations/${e}/info`,t);return s}async findTafsirInfo(e,t){let{tafsirInfo:s}=await this.fetcher.fetch(`/content/api/v4/resources/tafsirs/${e}/info`,t);return s}async findAllChapterInfos(e){let{chapterInfos:t}=await this.fetcher.fetch("/content/api/v4/resources/chapter_infos",e);return t}async findAllChapterReciters(e){let{reciters:t}=await this.fetcher.fetch("/content/api/v4/resources/chapter_reciters",e);return t}async findAllRecitationStyles(e){let{recitationStyles:t}=await this.fetcher.fetch("/content/api/v4/resources/recitation_styles",e);return t}async findVerseMedia(e){let{verseMedia:t}=await this.fetcher.fetch("/content/api/v4/resources/verse_media",e);return t}};var R=class{constructor(e){this.fetcher=e;}async search(e,t){return this.fetcher.fetch("/v1/search",{query:e,size:30,...t})}};var b=class{constructor(e){this.fetcher=e;}async findByKey(e,t){if(!h(e))throw new Error("Invalid verse key");let{verse:s}=await this.fetcher.fetch(`/content/api/v4/verses/by_key/${e}`,{words:false,...t});return s}async findByChapter(e,t){if(!a(e))throw new Error("Invalid chapter id");let{verses:s}=await this.fetcher.fetch(`/content/api/v4/verses/by_chapter/${e}`,{words:false,...t});return s}async findByPage(e,t){if(!x(e))throw new Error("Invalid page number");let{verses:s}=await this.fetcher.fetch(`/content/api/v4/verses/by_page/${e}`,{words:false,...t});return s}async findByJuz(e,t){if(!A(e))throw new Error("Invalid juz");let{verses:s}=await this.fetcher.fetch(`/content/api/v4/verses/by_juz/${e}`,{words:false,...t});return s}async findByHizb(e,t){if(!P(e))throw new Error("Invalid hizb");let{verses:s}=await this.fetcher.fetch(`/content/api/v4/verses/by_hizb/${e}`,{words:false,...t});return s}async findByRub(e,t){if(!v(e))throw new Error("Invalid rub");let{verses:s}=await this.fetcher.fetch(`/content/api/v4/verses/by_rub/${e}`,{words:false,...t});return s}async findRandom(e){let{verse:t}=await this.fetcher.fetch("/content/api/v4/verses/random",{words:false,...e});return t}};var C=class{config;fetcher;chapters;verses;juzs;audio;resources;search;constructor(e){this.config={contentBaseUrl:"https://apis.quran.foundation",authBaseUrl:"https://oauth2.quran.foundation",...e,defaults:{language:"ar",...e.defaults}},this.fetcher=new u(this.config),this.fetcher.getFetch(),this.chapters=new m(this.fetcher),this.verses=new b(this.fetcher),this.juzs=new d(this.fetcher),this.audio=new l(this.fetcher),this.resources=new y(this.fetcher),this.search=new R(this.fetcher);}getConfig(){return {...this.config}}updateConfig(e){this.config={...this.config,...e,defaults:{...this.config.defaults,...e.defaults}},this.fetcher.updateConfig(this.config);}clearCachedToken(){this.fetcher.clearCachedToken();}};
2
+ export{B as CharType,V as Language,C as QuranClient,k as QuranFont,U as SearchMode,G as SearchNavigationType,a as isValidChapterId,P as isValidHizb,A as isValidJuz,x as isValidQuranPage,v as isValidRub,h as isValidVerseKey};//# sourceMappingURL=index.min.mjs.map
6
3
  //# sourceMappingURL=index.min.mjs.map