quran-meta
Version:
Library with meta data and functionality related to Holy Quran
50 lines (44 loc) • 1.35 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`)
}