UNPKG

quran-meta

Version:

Library with meta data and functionality related to Holy Quran

53 lines (45 loc) 1.75 kB
import type { AyahId, QuranMeta, SurahInfo } from "../types" import type { FixedArray } from "../ts-utils" export type RiwayaFullData = { HizbEighthList?: AyahId[] HizbQuarterList: AyahId[] JuzList: AyahId[] ManzilList: AyahId[] PageList: AyahId[] RukuList: AyahId[] SajdaList: AyahId[] SurahList: FixedArray<SurahInfo, 116> meta: QuranMeta } type RiwayasNames = ["Hafs", "Qalun", "Warsh"] export type RiwayaName = RiwayasNames[number] export type AllListsNames = keyof Omit<RiwayaFullData, "meta"> type MissingListsPerRiwaya = { Hafs: ["HizbEighthList"] Qalun: [] Warsh: [] } export type Riwayas = { [k in RiwayaName]: Omit<RiwayaFullData, MissingListsPerRiwaya[k][number]> & { meta: QuranMeta } } export type RiwayaData = Riwayas[RiwayaName] /* // Get all list keys available in a specific riwaya export type ListsInRiwaya<R extends keyof Riwayas> = keyof Riwayas[R] */ export type RiwayahsWith<L extends AllListsNames> = { [R in RiwayaName]: L extends keyof Riwayas[R] ? Riwayas[R] : never }[RiwayaName] export type RiwayahsWithAll<L extends (AllListsNames)[]> = { [R in RiwayaName]: L[number] extends keyof Riwayas[R] ? Riwayas[R] : never }[RiwayaName] /* A map of readable parameters that can be used in the function and their corresponding list name */ export const partNames = ["surah", "juz", "rubAlHizb", "thumunAlHizb", "page", "manzil", "ruku"] as const export type PartType = (typeof partNames)[number] export const parts = { surah: "SurahList", juz: "JuzList", rubAlHizb: "HizbQuarterList", thumunAlHizb: "HizbEighthList", page: "PageList", manzil: "ManzilList", ruku: "RukuList" } as const satisfies Record<PartType, AllListsNames>