quran-meta
Version:
Library with meta data and functionality related to Holy Quran
49 lines (43 loc) • 1.33 kB
text/typescript
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`)
}