quran-meta
Version:
Library with meta data and functionality related to Holy Quran
650 lines • 27.4 kB
TypeScript
//#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 };