UNPKG

quran-meta

Version:

Library with meta data and functionality related to Holy Quran

650 lines 27.4 kB
//#region src/ts-utils.d.ts type GrowToSize<T, N extends number, A extends T[]> = A["length"] extends N ? A : GrowToSize<T, N, [...A, T]>; type FixedArray<T, N extends number> = GrowToSize<T, N, []>; type LessThan<TNumber extends number, TArray extends unknown[] = []> = TNumber extends TArray["length"] ? TArray[number] : LessThan<TNumber, [...TArray, TArray["length"]]>; //#endregion //#region src/lists/types.d.ts 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"]; type RiwayaName = RiwayasNames[number]; type MissingListsPerRiwaya = { Hafs: ["HizbEighthList"]; Qalun: []; Warsh: []; }; type Riwayas = { [k in RiwayaName]: Omit<RiwayaFullData, MissingListsPerRiwaya[k][number]> & { meta: QuranMeta; } }; type RiwayaData = Riwayas[RiwayaName]; declare const partNames: readonly ["surah", "juz", "rubAlHizb", "thumunAlHizb", "page", "manzil", "ruku"]; type PartType = (typeof partNames)[number]; //#endregion //#region src/types.d.ts /** * The maximum number of ayahs (verses) that can exist in any surah (chapter) of the Quran. * This maximum occurs in Surah Al-Baqarah (2), which has 286 ayahs. */ declare const maxAyahsInSurah = 286; /** * Total number of surahs (chapters) in the Quran. * This is constant across all riwayas. */ declare const numSurahs = 114; /** * Number of Rub al-Hizbs (quarters) in each Juz. * This is constant across all riwayas. */ declare const numRubsInJuz = 8; /** * Default metadata for the Quran (uses Hafs riwaya as default). * * @remarks * Hafs metadata includes: * - 6236 ayahs (verses) * - 114 surahs (chapters) * - 604 pages * - 30 juzs (parts) * - 60 hizbs (sections) * - 240 rub al-hizbs (quarters) * - 0 thumun al-hizbs (eighths) - not used in Hafs * - 15 sajdas (prostrations) * - 556 rukus * - 7 manzils * * @example * ```typescript * import { meta } from 'quran-meta/hafs' * console.log(meta.numAyahs) // 6236 * ``` */ /** * Riwaya-specific metadata type. * For tree-shakeable imports, use specific entry points: * - 'quran-meta/hafs' for Hafs only * - 'quran-meta/qalun' for Qalun only * - 'quran-meta/warsh' for Warsh only * * @example * ```typescript * import { meta } from 'quran-meta/hafs' // Only Hafs data bundled * import { meta } from 'quran-meta/qalun' // Only Qalun data bundled * ``` */ /** * Represents the complete metadata structure for Quranic information. * Contains counts for all structural divisions of the Quran. * * @remarks * Different riwayas may have different values for these properties. * Most notably, Qalun has 6214 ayahs while Hafs has 6236 ayahs. * * @example * ```typescript * import { meta, riwayaMeta } from 'quran-meta' * * // Hafs metadata (default) * console.log(meta.numAyahs) // 6236 * * // Qalun metadata * console.log(riwayaMeta.Qalun.numAyahs) // 6214 * ``` */ type QuranMeta = { /** Name of the riwaya (recitation tradition) */ riwayaName: RiwayaName; /** Total number of ayahs (verses) in this riwaya */ numAyahs: number; /** Total number of surahs (chapters) - always 114 */ numSurahs: number; /** Total number of pages - typically 604 */ numPages: number; /** Total number of juzs (parts) - always 30 */ numJuzs: number; /** Total number of hizbs (sections) - always 60 */ numHizbs: number; /** Total number of rub al-hizbs (quarters) - always 240 */ numRubAlHizbs: number; /** Total number of thumun al-hizbs (eighths) - 0 for Hafs, 480 for Qalun */ numThumunAlHizbs: number; /** Number of rubs (quarters) in each juz - always 8 */ numRubsInJuz: number; /** Total number of sajdas (prostrations) - varies by riwaya */ numSajdas: number; /** Total number of rukus (sections) - varies by riwaya */ numRukus: number; /** Total number of manzils (7-day reading divisions) - always 7 */ numManzils: number; }; /** * Creates a type representing a range of numbers from TStart to TEnd (inclusive). * * @typeParam TStart - The starting number of the range * @typeParam TEnd - The ending number of the range * * * @remarks * This type uses the Exclude utility type along with a LessThan helper type * to generate a union of all numbers within the specified range. */ type NumericRange<TStart extends number, TEnd extends number> = Exclude<TEnd | LessThan<TEnd>, LessThan<TStart>>; /** * Represents a valid Surah number in the Quran. * A type that ensures the number is within the valid range of Surahs (1 to 114). */ type Surah = NumericRange<1, typeof numSurahs>; /** * Represents the number of an ayah (verse) within a surah. * Valid values are between 1 and the maximum number of ayahs in any surah. * */ type AyahNo = NumericRange<1, typeof maxAyahsInSurah>; /** * Represents a valid thumun al-Hizb (Eighth of a Hizb) identifier. * The value must be a number between 1 and 480 (maximum across all riwayas). * Uses 1-based indexing where 1 is the first thumun al-hizb. * * @remarks * - Hafs: 0 ThumunAlHizbs (not supported) * - Qalun: 480 ThumunAlHizbs */ type ThumunAlHizbId = NumericRange<1, 480>; /** * Represents a valid Rub al-Hizb (quarter of a Hizb) identifier. * The value must be a number between 1 and 240 (consistent across all riwayas). * Uses 1-based indexing where 1 is the first rub al-hizb. */ type RubAlHizbId = NumericRange<1, 240>; /** * Represents a valid Hizb number in the Quran. * A Hizb is one of 60 equal divisions of the Quran. * Uses 1-based indexing where 1 is the first hizb. */ type HizbId = NumericRange<1, 60>; /** * Represents a numeric identifier for an Ayah (verse) in the Quran. * The value should be between 0 and the total number of Ayahs. */ type AyahId = number; /** * Represents a valid page number within the Quran. * Uses 1-based indexing where 1 is the first page (typically 604 pages total). */ type Page = NumericRange<1, 604>; /** * Represents a Manzil number in the Quran. * A Manzil is one of seven roughly equal parts of the Quran used for sequential reading over seven days. * Uses 1-based indexing where 1 is the first manzil (1-7). */ type Manzil = NumericRange<1, 7>; /** * A type representing a valid Ruku (section) number in the Quran. * Uses 1-based indexing where 1 is the first ruku (typically 556 rukus in Hafs). */ type Ruku = NumericRange<1, 556>; /** * Represents a Juz (part) number in the Quran. * The Quran is traditionally divided into 30 Juzs for ease of recitation and memorization. * Uses 1-based indexing where 1 is the first juz (1-30). */ type Juz = NumericRange<1, 30>; /** * Represents a part (rub') number within a Juz. * A numeric value ranging from 1 to the total number of rub's (quarters) in a Juz. * A number constrained between 1 and the total number of rub's in a Juz */ type JuzPart = NumericRange<1, typeof numRubsInJuz>; type SurahInfo = [startAyahId: AyahId, ayahCount: AyahNo, surahOrder: Surah, rukuCount: Ruku, name: string, isMeccan: boolean]; type SurahListType = FixedArray<SurahInfo, 116>; type SurahName = [name: string, translitName: string]; type RangeMeta = { firstAyahId: AyahId; lastAyahId: AyahId; first: SurahAyah; last: SurahAyah; }; /** * Represents the structure of a Juz and Hizb combination in the Quran */ type ThumunAlHizb = { juz: Juz; juzPart: JuzPart; hizbId: HizbId; rubAlHizbId: RubAlHizbId; thumunAlHizbId: ThumunAlHizbId; }; type ThumunAlHizbMeta = ThumunAlHizb & RangeMeta; /** * Represents the structure of a Juz and Hizb combination in the Quran */ type RubAlHizb = { juz: Juz; juzPart: JuzPart; hizbId: HizbId; rubAlHizbId: RubAlHizbId; }; type RubAlHizbMeta = RubAlHizb & RangeMeta; type SurahAyah = [Surah, AyahNo]; type AyahRange = [AyahId, AyahId]; type SurahAyahSegment = [Surah, AyahNo | [AyahNo, AyahNo]]; type SurahMeta = { name: string; surahNum: Surah; ayahCount: AyahNo; surahOrder: Surah; rukuCount: Ruku; isMeccan: boolean; } & RangeMeta; type PageMeta = { pageNum: Page; } & RangeMeta; type ManzilMeta = { manzilNum: Manzil; } & RangeMeta; type JuzMeta = { juzNum: Juz; } & RangeMeta; type RukuMeta = { rukuNum: Ruku; } & RangeMeta; type AyahCountBetweenJuzSurah = NumericRange<0, typeof maxAyahsInSurah>; type SurahJuzMeta = { leftjuz: Juz; ayahsBetweenJuzSurah: AyahCountBetweenJuzSurah; rightJuz: Juz; leftAyahId: AyahId; rightAyahId: AyahId; }; type RangeMode = "juz" | "surah" | "ayah" | "page" | "ruku" | "all"; type AyahMeta = { juz: Juz; juzPart: JuzPart; hizbId: HizbId; rubAlHizbId: RubAlHizbId; thumunAlHizbId?: ThumunAlHizbId; page: Page; ruku: number; surah: Surah; ayah: AyahNo; isStartOfQuarter: boolean; isEndOfQuarter: boolean; isSajdahAyah: boolean; isStartOfPage: boolean; isEndOfPage: boolean; isStartOfJuz: boolean; isEndOfJuz: boolean; isStartOfSurah: boolean; isEndOfSurah: boolean; isStartOfRuku: boolean; isEndOfRuku: boolean; }; //#endregion //#region src/QuranRiwaya.d.ts /** * QuranRiwaya class provides a clean API for Quran metadata operations * with a specific riwaya (recitation tradition) context. * * Currently provides basic Surah and Ayah operations. For advanced features * like Juz, Page, Manzil, RubAlHizb, etc., use the functional API directly. * * @example * **Basic Usage with Hafs** * ```typescript * import { quran } from 'quran-meta/hafs' * * const surahMeta = quran.getSurahMeta(2) // Get Al-Baqarah metadata * const ayahCount = quran.getAyahCountInSurah(2) // 286 ayahs * const [surah, ayah] = quran.findSurahAyahByAyahId(100) // [2, 93] * ``` * * @example * **Working with Qalun** * ```typescript * import { quran } from 'quran-meta/qalun' * * const meta = quran.meta * console.log(meta.numAyahs) // 6214 (Qalun has fewer ayahs than Hafs) * ``` * * @example * **Creating a custom instance** * ```typescript * import { QuranRiwaya } from 'quran-meta' * import { WarshMeta, WarshLists } from 'quran-meta/lists/WarshLists' * * const warsh = QuranRiwaya.create(WarshLists) * ``` */ declare class QuranRiwaya<R$1 extends RiwayaName = "Hafs"> { #private; private constructor(); /** * Create a QuranRiwaya instance with the specified riwaya, metadata, and lists * @param riwaya - The riwaya name ("Hafs", "Qalun", or "Warsh") * @param meta - The metadata for this riwaya * @param rData - The Lists object for this riwaya */ static create<R$1 extends RiwayaName>(rData: Riwayas[R$1]): QuranRiwaya<R$1>; /** * Gets the metadata for the specified Surah */ getSurahMeta(surahNum: Surah): SurahMeta; ayahStringSplitter(str: string, isStrict?: boolean): SurahAyahSegment; /** * Gets the surah info array [firstAyahId, ayahCount, surahOrder, rukuCount, name, isMeccan] */ getSurahInfo(surah: Surah): SurahInfo; /** * Gets the count of ayahs in a surah */ getAyahCountInSurah(surah: Surah): number; /** * Finds the surah number for a given ayah ID */ findSurahByAyahId(ayahId: AyahId): Surah; /** * Finds the [surah, ayah] tuple for a given ayah ID */ findSurahAyahByAyahId(ayahId: AyahId): SurahAyah; /** * Finds the ayah ID for a given surah and ayah number */ findAyahIdBySurah(surah: Surah, ayah: AyahNo): AyahId; generatePartBlocks<P extends PartType>(type: P): { startAyahId: AyahId; ayahCount: AyahId | AyahNo; }[] | null; getList<P extends PartType>(type: P): number[] | [SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo]; getListNormalised<P extends PartType>(type: P): { startAyahId: AyahId; ayahCount: AyahId | AyahNo; }[]; /** * Gets the next ayah after the given surah and ayah */ nextAyah(surah: Surah, ayah: AyahNo): SurahAyah; /** * Gets the previous ayah before the given surah and ayah */ prevAyah(surah: Surah, ayah: AyahNo): SurahAyah; /** * Finds the juz number for a given surah and ayah */ findJuz(surah: Surah, ayah?: AyahNo): Juz; /** * Finds the juz number for a given ayah ID */ findJuzByAyahId(ayahId: AyahId): Juz; /** * Finds the page number for a given surah and ayah */ findPage(surah: Surah, ayah?: AyahNo): Page; /** * Finds the page number for a given ayah ID */ findPagebyAyahId(ayahId: AyahId): Page; /** * Gets metadata for a specific page */ getPageMeta(pageNum: Page): PageMeta; /** * Finds the manzil number for a given surah and ayah */ findManzil(surah: Surah, ayah?: AyahNo): Manzil; /** * Finds the manzil number for a given ayah ID */ findManzilByAyahId(ayahId: AyahId): Manzil; /** * Gets metadata for a specific manzil */ getManzilMeta(manzilNum: number): ManzilMeta; /** * Finds the ruku number for a given ayah ID */ findRukuByAyahId(ayahId: AyahId): Ruku; /** * Gets metadata for a specific ruku */ getRukuMeta(rukuNum: number): RukuMeta; /** * Gets metadata for a specific juz */ getJuzMeta(juzNum: Juz): JuzMeta; /** * Finds juz metadata for a given surah and ayah */ findJuzMetaBySurah(surah: Surah, ayah?: AyahNo): SurahJuzMeta; /** * Finds juz and calculates shift between juz start and surah start */ findJuzAndShift(surah: Surah, ayah: AyahNo): { juz: Juz; leftAyahId: AyahId; ayahsBetweenJuzSurah: AyahCountBetweenJuzSurah; }; /** * Finds juz and shift for a given ayah ID */ findJuzAndShiftByAyahId(ayahId: AyahId): { juz: Juz; leftAyahId: AyahId; ayahsBetweenJuzSurah: AyahCountBetweenJuzSurah; }; /** * Finds the RubAlHizb for a given surah and ayah */ findRubAlHizb(surah: Surah, ayah?: AyahNo): RubAlHizbId; /** * Finds the RubAlHizb ID for a given ayah ID */ findRubAlHizbByAyahId(ayahId: AyahId): RubAlHizbId; /** * Gets RubAlHizb data (juz, hizb, etc.) for a given ayah ID */ getRubAlHizbByAyahId(ayahId: AyahId): RubAlHizb; /** * Gets RubAlHizb data (juz, hizb, etc.) for a given ayah ID */ getRubAlHizb(quarterIndex: RubAlHizbId): RubAlHizb; /** * Gets complete RubAlHizb metadata for a given ayah ID */ getRubAlHizbMetaByAyahId(ayahId: AyahId): RubAlHizbMeta; /** * Gets metadata for a specific RubAlHizb */ getRubAlHizbMeta(quarterIndex: RubAlHizbId): RubAlHizbMeta; /** * Finds the ThumunAlHizb ID for a given ayah ID (Qalun/Warsh only) */ findThumunAlHizbByAyahId(ayahId: AyahId): ThumunAlHizbId | null; /** * Finds the ThumunAlHizb ID for a given ayah ID (Qalun/Warsh only) */ findThumunAlHizb(surah: Surah, ayah?: AyahNo): ThumunAlHizbId | null; /** * Gets metadata for a specific ThumunAlHizb (Qalun/Warsh only) */ getThumunAlHizbMeta(eighthIndex: ThumunAlHizbId): ThumunAlHizbMeta | null; getThumunAlHizbByAyahId(ayahId: AyahId): ThumunAlHizb | null; getThumunAlHizbMetaByAyahId(ayahId: AyahId): ThumunAlHizb | null; getThumunAlHizb(eighthIndex: ThumunAlHizbId): ThumunAlHizb | null; /** * Gets comprehensive metadata for a specific ayah */ getAyahMeta(ayahId: AyahId): AyahMeta; /** * Gets metadata for all ayahs in a surah */ getAyahMetasForSurah(surahNumber: Surah): AyahMeta[]; /** * Finds the range of ayahs around a given ayah */ findRangeAroundAyah(ayahId: AyahId, mode: RangeMode): AyahRange; /** * Finds the range of ayahs around a given surah and ayah */ findRangeAroundSurahAyah(surah: Surah, ayah: AyahNo, mode: RangeMode): AyahRange; /** * Checks if an ayah is the first ayah of a juz */ isAyahJuzFirst(ayahId: AyahId): Juz | number; /** * Checks if an ayah is the first ayah of a page */ isAyahPageFirst(ayahId: AyahId): Page | number; /** * Checks if a surah-ayah combination is the first ayah of a juz */ isSurahAyahJuzFirst(surah: Surah, ayah: AyahNo): Juz | number; /** * Checks if a surah-ayah combination is the first ayah of a page */ isSurahAyahPageFirst(surah: Surah, ayah: AyahNo): Page | number; isValidAyahId(x: unknown): x is AyahId; isValidPage(x: unknown): x is Page; isValidSurah(x: unknown): x is Surah; isValidJuz(x: unknown): x is Juz; isValidRuku(x: unknown): x is Ruku; isValidSurahAyah(x: [unknown, unknown]): x is SurahAyah; static isValidAyahNo(x: unknown): x is AyahNo; surahStringParser(str: string, isStrict?: boolean): Page | number; static string2NumberSplitter(str: string): { ayah?: number; ayahTo?: number; surahOrAyah?: number; } | null; /** * Gets the riwaya name */ get riwayaName(): R$1; /** * Gets the metadata for this riwaya */ get meta(): QuranMeta; /** * Gets the metadata for this riwaya */ get lists(): Riwayas[R$1]; } //#endregion //#region src/qalun.d.ts /** * Qalun metadata */ declare const riwayaLists: RiwayaData; declare const getList: (listName: PartType) => number[] | [SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo]; declare const getListNormalised: (listName: PartType) => { startAyahId: AyahId; ayahCount: AyahId | AyahNo; }[]; declare const meta: QuranMeta; /** * Qalun Lists (SurahList, JuzList, etc.) */ declare const HizbQuarterList: number[]; declare const JuzList: number[]; declare const ManzilList: number[]; declare const PageList: number[]; declare const SurahList: [SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo]; declare const RukuList: number[]; declare const SajdaList: number[]; declare const ayahStringSplitter: (str: string, isStrict?: boolean) => SurahAyahSegment; declare const surahStringParser: (str: string) => { surah: Surah; ayah: AyahNo; }; declare const checkValidSurahAyah: (surah: Surah | number | unknown, ayah: number | AyahNo | unknown) => void; declare const checkValidSurah: (surah: Surah | number | unknown) => void; declare const checkValidSurahAyahPair: (pair: [unknown, unknown]) => void; declare const checkValidAyahId: (ayahId: unknown) => void; declare const checkValidPage: (page: unknown) => void; declare const checkValidJuz: (juz: unknown) => void; declare const checkValidRuku: (ruku: unknown) => void; declare const checkValidManzil: (manzil: unknown) => void; declare const getSurahMeta: (surah: Surah) => SurahMeta; declare const getSurahInfo: (surah: Surah) => SurahInfo; declare const getAyahCountInSurah: (surah: Surah) => AyahNo; declare const findAyahIdBySurah: (surah: Surah, ayah?: AyahNo) => number; declare const findSurahByAyahId: (ayahId: AyahId) => Surah; declare const findSurahAyahByAyahId: (ayahId: AyahId) => SurahAyah; declare const nextAyah: (surah: Surah, ayah: AyahNo) => SurahAyah; declare const prevAyah: (surah: Surah, ayah: AyahNo) => SurahAyah; declare const findJuz: (surah: Surah, ayah?: AyahNo) => Juz; declare const findJuzByAyahId: (ayahId: AyahId) => Juz; declare const getJuzMeta: (juz: Juz) => JuzMeta; declare const findJuzMetaBySurah: (surah: Surah, ayah?: AyahNo) => SurahJuzMeta; declare const findJuzAndShift: (surah: Surah, ayah?: AyahNo) => { juz: Juz; leftAyahId: AyahId; ayahsBetweenJuzSurah: AyahCountBetweenJuzSurah; }; declare const findJuzAndShiftByAyahId: (ayahId: AyahId) => { juz: Juz; leftAyahId: AyahId; ayahsBetweenJuzSurah: AyahCountBetweenJuzSurah; }; declare const findPage: (surah: Surah, ayah?: AyahNo) => Page; declare const findPagebyAyahId: (ayahId: AyahId) => Page; declare const getPageMeta: (page: Page) => PageMeta; declare const findManzil: (surah: Surah, ayah?: AyahNo) => Manzil; declare const findManzilByAyahId: (ayahId: AyahId) => Manzil; declare const getManzilMeta: (manzil: Manzil) => ManzilMeta; declare const findRukuByAyahId: (ayahId: AyahId) => Ruku; declare const getRukuMeta: (ruku: Ruku) => RukuMeta; declare const findRubAlHizb: (surah: Surah, ayah?: AyahNo) => RubAlHizbId; declare const findRubAlHizbByAyahId: (ayahId: AyahId) => RubAlHizbId; declare const getRubAlHizb: (quarterIndex: RubAlHizbId) => RubAlHizb; declare const getRubAlHizbMeta: (quarterIndex: RubAlHizbId) => RubAlHizbMeta; declare const getRubAlHizbMetaByAyahId: (ayahId: AyahId) => RubAlHizbMeta; declare const getRubAlHizbByAyahId: (ayahId: AyahId) => RubAlHizb; declare const findThumunAlHizb: (surah: Surah, ayah?: AyahNo) => ThumunAlHizbId; declare const findThumunAlHizbByAyahId: (ayahId: AyahId) => ThumunAlHizbId; declare const getThumunAlHizb: (quarterIndex: ThumunAlHizbId) => ThumunAlHizb; declare const getThumunAlHizbByAyahId: (ayahId: AyahId) => ThumunAlHizb; declare const getThumunAlHizbMeta: (quarterIndex: ThumunAlHizbId) => ThumunAlHizbMeta; declare const getThumunAlHizbMetaByAyahId: (ayahId: AyahId) => ThumunAlHizbMeta; declare const getAyahMeta: (ayahId: AyahId) => AyahMeta; declare const getAyahMetasForSurah: (surah: Surah) => AyahMeta[]; declare const findRangeAroundAyah: (ayahId: AyahId, mode: RangeMode) => AyahRange; declare const findRangeAroundSurahAyah: (surah: Surah, ayah: AyahNo, mode: RangeMode) => AyahRange; declare const isAyahJuzFirst: (ayahId: AyahId) => number; declare const isAyahPageFirst: (ayahId: AyahId) => number; declare const isSurahAyahJuzFirst: (surah: Surah, ayah: AyahNo) => number; declare const isSurahAyahPageFirst: (surah: Surah, ayah: AyahNo) => number; declare const isValidSurah: (x: unknown) => x is Surah; declare const isValidAyahNo: (ayahNo: number) => ayahNo is AyahNo; declare const isValidAyahId: (x: unknown) => x is number; declare const isValidPage: (x: unknown) => x is Juz; declare const string2NumberSplitter: (str: string) => number[]; declare const isValidJuz: (x: unknown) => x is Juz; declare const isValidRuku: (x: unknown) => x is Ruku; declare const isValidSurahAyah: (x: [unknown, unknown]) => x is SurahAyah; declare const generatePartBlocks: (part: PartType) => { startAyahId: AyahId; ayahCount: AyahId | AyahNo; }[] | null; /** * Pre-initialized QuranRiwaya instance for Qalun * * @example * ```typescript * import { quran } from 'quran-meta/qalun' * * const ayahMeta = quran.getAyahMeta(1) * const juz = quran.findJuz(1, 1) * ``` */ declare const createQalun: () => QuranRiwaya<"Hafs" | "Qalun" | "Warsh">; //#endregion export { AyahCountBetweenJuzSurah, AyahId, AyahMeta, AyahNo, AyahRange, HizbId, HizbQuarterList, Juz, JuzList, JuzMeta, JuzPart, Manzil, ManzilList, ManzilMeta, NumericRange, Page, PageList, PageMeta, PartType, QuranMeta, RangeMeta, RangeMode, RubAlHizb, RubAlHizbId, RubAlHizbMeta, Ruku, RukuList, RukuMeta, SajdaList, Surah, SurahAyah, SurahAyahSegment, SurahInfo, SurahJuzMeta, SurahList, SurahListType, SurahMeta, SurahName, ThumunAlHizb, ThumunAlHizbId, ThumunAlHizbMeta, ayahStringSplitter, checkValidAyahId, checkValidJuz, checkValidManzil, checkValidPage, checkValidRuku, checkValidSurah, checkValidSurahAyah, checkValidSurahAyahPair, createQalun, findAyahIdBySurah, findJuz, findJuzAndShift, findJuzAndShiftByAyahId, findJuzByAyahId, findJuzMetaBySurah, findManzil, findManzilByAyahId, findPage, findPagebyAyahId, findRangeAroundAyah, findRangeAroundSurahAyah, findRubAlHizb, findRubAlHizbByAyahId, findRukuByAyahId, findSurahAyahByAyahId, findSurahByAyahId, findThumunAlHizb, findThumunAlHizbByAyahId, generatePartBlocks, getAyahCountInSurah, getAyahMeta, getAyahMetasForSurah, getJuzMeta, getList, getListNormalised, getManzilMeta, getPageMeta, getRubAlHizb, getRubAlHizbByAyahId, getRubAlHizbMeta, getRubAlHizbMetaByAyahId, getRukuMeta, getSurahInfo, getSurahMeta, getThumunAlHizb, getThumunAlHizbByAyahId, getThumunAlHizbMeta, getThumunAlHizbMetaByAyahId, isAyahJuzFirst, isAyahPageFirst, isSurahAyahJuzFirst, isSurahAyahPageFirst, isValidAyahId, isValidAyahNo, isValidJuz, isValidPage, isValidRuku, isValidSurah, isValidSurahAyah, maxAyahsInSurah, meta, nextAyah, numRubsInJuz, numSurahs, prevAyah, riwayaLists, string2NumberSplitter, surahStringParser };