UNPKG

quran-meta

Version:

Library with meta data and functionality related to Holy Quran

49 lines (43 loc) 1.33 kB
import type { Riwayas } from "./types" import { HafsLists } from "./HafsLists" import { QalunLists } from "./QalunLists" import { WarshLists } from "./WarshLists" // Export Meta objects for direct use export { HafsMeta } from "./HafsLists" export { QalunMeta } from "./QalunLists" export { WarshMeta } from "./WarshLists" /** * Retrieves the lists associated with a specific Riwaya. * Uses switch statement to enable tree-shaking. * * @example * ```typescript * const hafsLists = getListsOfRiwaya('Hafs'); * ``` */ export function getListsOfRiwaya<R extends keyof Riwayas>(riwaya: R): Riwayas[R] { switch (riwaya) { case "Hafs": return HafsLists as Riwayas[R] case "Qalun": return QalunLists as Riwayas[R] case "Warsh": return WarshLists as Riwayas[R] default: throw new Error(`Unknown riwaya: ${riwaya}`) } } export const getListOfRiwaya = < R extends keyof Riwayas, L extends keyof Riwayas[R] >( listName: L, riwaya?: R ): Riwayas[R][L] => { const actualRiwaya = (riwaya || "Hafs") const lists = getListsOfRiwaya(actualRiwaya) if (listName in lists) { return lists[listName as keyof typeof lists] as Riwayas[R][L] } throw new Error(`List ${String(listName)} not found in ${actualRiwaya} riwaya`) }