quran-meta
Version:
Library with meta data and functionality related to Holy Quran
42 lines (36 loc) • 1.18 kB
text/typescript
import { AyahNo, SurahAyahSegment } from "./types"
import { checkValidSurahAyah } from "./validation"
/**
* Turns String of type "x:y" or "x:y1-y2" to array [x,y] or [x,[y1,y2]] respectively
* @param str - String of type "x:y" or "x:y1-y2"
* @returns array [x,y] or [x,[y1,y2]] respectively
*/
export function ayahStringSplitter(str: string): SurahAyahSegment {
const [surahStr, ayahsStr] = str.trim().split(":")
const surah = parseInt(surahStr, 10)
if (isNaN(surah)) {
throw new Error("Error in surah format " + str)
}
if (!ayahsStr) {
throw new Error("Error in data " + str)
}
let ayahs: AyahNo | [AyahNo, AyahNo]
if (ayahsStr.includes("-")) {
ayahs = ayahsStr.split("-").map((a) => {
const ayah = parseInt(a, 10)
if (isNaN(ayah) || ayah === 0) {
throw new Error("Error in ayah " + a)
}
return ayah
}) as [AyahNo, AyahNo]
if (ayahs[0] > ayahs[1]) throw new Error("Error in ayah range " + str)
}
else {
ayahs = parseInt(ayahsStr, 10)
if (isNaN(ayahs) || ayahs === 0) {
throw new Error("Error in data " + str)
}
checkValidSurahAyah(surah, ayahs)
}
return [surah, ayahs]
}