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(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 = ( 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`) }