1 |
- {"version":3,"file":"41051.js","mappings":"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","sources":["webpack://quran.com/./src/utils/page.ts","webpack://quran.com/./src/utils/validator.ts"],"sourcesContent":["import { toLocalizedNumber } from './locale';\n\nimport { Mushaf, MushafLines, QuranFont, QuranFontMushaf } from 'types/QuranReader';\n\nconst DEFAULT_NUMBER_OF_PAGES = 604;\n\n// a map between the mushafId and the number of pages it has\nexport const PAGES_MUSHAF_MAP = {\n [Mushaf.Indopak]: 604,\n [Mushaf.KFGQPCHAFS]: 604,\n [Mushaf.QCFV1]: 604,\n [Mushaf.QCFV2]: 604,\n [Mushaf.UthmaniHafs]: 604,\n [Mushaf.Indopak16Lines]: 548,\n [Mushaf.Indopak15Lines]: 610,\n [Mushaf.Tajweeed]: 604,\n};\n\n/**\n * Whether the current page is the first page.\n *\n * @param {number} surahNumber\n * @returns {boolean}\n */\nexport const isFirstPage = (surahNumber: number): boolean => surahNumber === 1;\n\n/**\n * Whether the current page is the last page.\n *\n * @param {number} pageNumber\n * @param {QuranFont} quranFont\n * @param {MushafLines} mushafLines\n * @returns {boolean}\n */\nexport const isLastPage = (\n pageNumber: number,\n quranFont?: QuranFont,\n mushafLines?: MushafLines,\n): boolean => pageNumber === getMushafTotalPageNumber(quranFont, mushafLines);\n\n/**\n * Get the number of pages of the current mushaf based on the selected font\n * and the number of line (in the case of IndoPak).\n *\n * @param {QuranFont} quranFont\n * @param {MushafLines} mushafLines\n * @returns {number}\n */\nconst getMushafTotalPageNumber = (quranFont?: QuranFont, mushafLines?: MushafLines): number => {\n let mushafTotalPages = 0;\n // this is when we are SSR the page because those 2 values won't be there since they come from Redux\n if (!quranFont || !mushafLines) {\n mushafTotalPages = DEFAULT_NUMBER_OF_PAGES;\n } else if (quranFont === QuranFont.IndoPak) {\n mushafTotalPages =\n mushafLines === MushafLines.SixteenLines\n ? PAGES_MUSHAF_MAP[Mushaf.Indopak16Lines]\n : PAGES_MUSHAF_MAP[Mushaf.Indopak15Lines];\n } else {\n mushafTotalPages = PAGES_MUSHAF_MAP[QuranFontMushaf[quranFont]];\n }\n return mushafTotalPages;\n};\n\n/**\n * Return array of page id\n *\n * @returns {{value: number, label: string}[]}\n */\nexport const getPageIdsByMushaf = (\n lang: string,\n quranFont?: QuranFont,\n mushafLines?: MushafLines,\n): { value: number; label: string }[] =>\n [...Array(getMushafTotalPageNumber(quranFont, mushafLines))].map((n, index) => {\n const page = index + 1;\n return { value: page, label: toLocalizedNumber(page, lang) };\n });\n\n/**\n * Get the number of lines in a Mushaf page based on the Mushaf.\n * All Mushafs have 15 lines except for Indopak 16-line one.\n *\n * @param {QuranFont} quranFont\n * @param {MushafLines} mushafLines\n * @returns {number}\n */\nexport const getMushafLinesNumber = (quranFont: QuranFont, mushafLines: MushafLines): number => {\n if (\n quranFont !== QuranFont.IndoPak ||\n (quranFont === QuranFont.IndoPak && mushafLines === MushafLines.FifteenLines)\n ) {\n return 15;\n }\n return 16;\n};\n","import { getChapterData } from './chapter';\nimport { PAGES_MUSHAF_MAP } from './page';\nimport { parseVerseRange } from './verseKeys';\n\nimport ChaptersData from 'types/ChaptersData';\nimport { Mushaf } from 'types/QuranReader';\n\n/**\n * Validate a chapterId which can be in-valid in 2 cases:\n *\n * 1. if it's a string that is not numeric e.g. \"test\".\n * 2. if it's a numeric string but lies outside the range 1->114.\n *\n * @param {string} chapterId\n * @returns {boolean}\n */\nexport const isValidChapterId = (chapterId: string): boolean => {\n const chapterIdNumber = Number(chapterId);\n // if it's not a numeric string or it's numeric but out of the range of chapter 1->114\n if (Number.isNaN(chapterIdNumber) || chapterIdNumber > 114 || chapterIdNumber < 1) {\n return false;\n }\n return true;\n};\n\n/**\n * Check whether the verse number is valid by trying to convert it\n * into a number.\n *\n * @param {string} verseId\n * @returns {boolean}\n */\nexport const isValidVerseNumber = (verseId: string): boolean => {\n const verseIdNumber = Number(verseId);\n return !Number.isNaN(verseIdNumber);\n};\n\n/**\n * Validate a verseId which can be in-valid in 3 cases:\n *\n * 1. if it's a string that is not numeric e.g. \"test\".\n * 2. if it's a numeric string but below 1.\n * 3. if it's a numeric string but above the maximum number of verses for the chapter. e.g. verseId 8 for chapterId 1 (Alfatiha) is invalid since it only has 7 verses.\n *\n * @param {ChaptersData} chaptersData\n * @param {string} chapterId the chapter id. We will assume it's valid since we already validated it.\n * @param {string} verseId the verse id being validated.\n * @returns {boolean}\n */\nexport const isValidVerseId = (\n chaptersData: ChaptersData,\n chapterId: string,\n verseId: string,\n): boolean => {\n const verseIdNumber = Number(verseId);\n // is not a valid number, below 1 or above the maximum number of verses for the chapter.\n if (Number.isNaN(verseIdNumber) || verseIdNumber < 1) {\n return false;\n }\n if (\n !getChapterData(chaptersData, chapterId) ||\n verseIdNumber > getChapterData(chaptersData, chapterId).versesCount\n ) {\n return false;\n }\n return true;\n};\n\n/**\n * Validate a juzId which can be in-valid in 2 cases:\n *\n * 1. if it's a string that is not numeric e.g. \"test\".\n * 2. if it's a numeric string but lies outside the range 1->30.\n *\n * @param {string} juzId\n * @returns {boolean}\n */\nexport const isValidJuzId = (juzId: string): boolean => {\n const juzIdNumber = Number(juzId);\n // if it's not a numeric string or it's numeric but out of the range of chapter 1->30\n if (Number.isNaN(juzIdNumber) || juzIdNumber > 30 || juzIdNumber < 1) {\n return false;\n }\n return true;\n};\n\n/**\n * Validate a rubId which can be in-valid in 2 cases:\n *\n * 1. if it's a string that is not numeric e.g. \"test\".\n * 2. if it's a numeric string but lies outside the range 1->240.\n *\n * @param {string} rubId\n * @returns {boolean}\n */\nexport const isValidRubId = (rubId: string): boolean => {\n const rubIdNumber = Number(rubId);\n // if it's not a numeric string or it's numeric but out of the range of chapter 1->240\n if (Number.isNaN(rubIdNumber) || rubIdNumber > 240 || rubIdNumber < 1) {\n return false;\n }\n return true;\n};\n\n/**\n * Validate a hizbId which can be in-valid in 2 cases:\n *\n * 1. if it's a string that is not numeric e.g. \"test\".\n * 2. if it's a numeric string but lies outside the range 1->60.\n *\n * @param {string} hizbId\n * @returns {boolean}\n */\nexport const isValidHizbId = (hizbId: string): boolean => {\n const hizbIdNumber = Number(hizbId);\n // if it's not a numeric string or it's numeric but out of the range of chapter 1->30\n if (Number.isNaN(hizbIdNumber) || hizbIdNumber > 60 || hizbIdNumber < 1) {\n return false;\n }\n return true;\n};\n\n/**\n * Validate a pageId which can be in-valid in 2 cases:\n *\n * 1. if it's a string that is not numeric e.g. \"test\".\n * 2. if it's a numeric string but lies outside the range of the selected Mushaf.\n *\n * @param {string | number} pageId\n * @returns {boolean}\n */\nexport const isValidPageNumber = (pageId: string | number, mushafId: Mushaf): boolean => {\n const pageIdNumber = Number(pageId);\n const MUSHAF_COUNT = PAGES_MUSHAF_MAP[mushafId];\n // if it's not a numeric string or it's numeric but out of the range of the selected Mushaf\n if (Number.isNaN(pageIdNumber) || pageIdNumber > MUSHAF_COUNT || pageIdNumber < 1) {\n return false;\n }\n return true;\n};\n\n/**\n * Extract the to and from verse by splitting the range by '-'.\n *\n * @param {string} range\n * @returns {string[]}\n */\nexport const getToAndFromFromRange = (range: string): string[] => range.split('-');\n\n/**\n * This is to check if the range passed is valid or not. It won't be valid if:\n *\n * 1. The format is not a range's format and this is known if after splitting the range string\n * by '-', we don't have 2 parts for the range representing the from verse and to verse.\n * e.g. 'one'\n * 2. If after splitting them, either of the 2 parts are not a valid number e.g. 'one-two'\n * or '1-two' or 'one-2'.\n * 3. If the from verse number exceeds the to verse number. e.g. '8-7'.\n * 4. If either the from verse number of to verse number exceeds the total number of verses\n * for the current chapter e.g. for chapter 1: '7-8' or '8-8'.\n *\n * @param {ChaptersData} chaptersData\n * @param {string} chapterId\n * @param {string} range\n * @returns {boolean}\n */\nexport const isValidVerseRange = (\n chaptersData: ChaptersData,\n chapterId: string,\n range: string,\n): boolean => {\n const rangeSplits = getToAndFromFromRange(range);\n // if the splits are not 2, it means it's not in the right format.\n if (rangeSplits.length !== 2) {\n return false;\n }\n const [from, to] = rangeSplits;\n const fromNumber = Number(from);\n const toNumber = Number(to);\n // if the range is in the right format but either value is not a number e.g. 'one-two'\n if (Number.isNaN(fromNumber) || Number.isNaN(toNumber)) {\n return false;\n }\n // 0 is not a valid verse number\n if (fromNumber === 0 || toNumber === 0) {\n return false;\n }\n // if the from verse number is bigger than the to verse number\n if (fromNumber > toNumber) {\n return false;\n }\n // if the chapterId is not a valid chapterId e.g. \"word\"\n if (!getChapterData(chaptersData, chapterId)) {\n return false;\n }\n const chapterVersesCount = getChapterData(chaptersData, chapterId).versesCount;\n // if either the from verse number of to verse number exceeds the chapter's total number.\n if (fromNumber > chapterVersesCount || toNumber > chapterVersesCount) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Check if a string range is valid or not.\n * A valid range looks like this: \"1:1-1:2\" or \"1:1-2:3\".\n *\n * @param {ChaptersData} chaptersData\n * @param {string} rangesString\n * @returns {boolean}\n */\nexport const isRangesStringValid = (chaptersData: ChaptersData, rangesString: string): boolean => {\n const parsedVerseRange = parseVerseRange(rangesString);\n // 1. if the range is not in the right format\n if (!parsedVerseRange) {\n return false;\n }\n const [fromRange, toRange] = parsedVerseRange;\n // if both ranges are in the same chapter\n if (fromRange.chapter === toRange.chapter) {\n const verseRange = `${fromRange.verse}-${toRange.verse}`;\n // 2. if range within same surah is not valid\n if (!isValidVerseRange(chaptersData, fromRange.chapter, verseRange)) {\n return false;\n }\n } else {\n // 2. if start of range verse key is not valid\n if (!isValidVerseKey(chaptersData, fromRange.verseKey)) {\n return false;\n }\n // 3. if end of range verse key is not valid\n if (!isValidVerseKey(chaptersData, toRange.verseKey)) {\n return false;\n }\n // 4. if the fromRange chapter is bigger than the toRange chapter e.g. 2:1-1:1\n if (Number(fromRange.chapter) > Number(toRange.chapter)) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * Check if a verse key is valid. An invalid verse key can be:\n *\n * 1. it's in a wrong format e.g. \"verseKey\"\n * 2. if the number of parts is bigger than 2 e.g. \"1:2:3\"\n * 3. if it's not a valid chapter id {@see isValidChapterId}\n * 4. if it's not a valid verse ID {@see isValidVerseId}\n *\n * @param {ChaptersData} chaptersData\n * @param {string} verseKey\n * @returns {boolean}\n */\nexport const isValidVerseKey = (chaptersData: ChaptersData, verseKey: string): boolean => {\n const splits = verseKey.split(':');\n // if the splits are not 2, it means it's not in the right format.\n if (splits.length !== 2) {\n return false;\n }\n const [chapterId, verseId] = splits;\n // if either value is not a number e.g. 'one:2' or if the verseNumber is below 0\n if (!isValidChapterId(chapterId) || !isValidVerseId(chaptersData, chapterId, verseId)) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Check whether a tafsir id is valid or not. An invalid tafsirId can be:\n * 1. A non numeric value.\n * 2. A numeric value that is less than 0.\n *\n * @param {string} tafsirId\n * @returns {boolean}\n */\nexport const isValidTafsirId = (tafsirId: string): boolean => {\n const tafsirIdNumber = Number(tafsirId);\n // if the tafsir Id is not a number of if it's below 1\n if (Number.isNaN(tafsirIdNumber) || tafsirIdNumber < 1) {\n return false;\n }\n return true;\n};\n"],"names":["toLocalizedNumber","Mushaf","MushafLines","QuranFont","QuranFontMushaf","DEFAULT_NUMBER_OF_PAGES","PAGES_MUSHAF_MAP","Indopak","KFGQPCHAFS","QCFV1","QCFV2","UthmaniHafs","Indopak16Lines","Indopak15Lines","Tajweeed","isFirstPage","surahNumber","isLastPage","pageNumber","quranFont","mushafLines","getMushafTotalPageNumber","mushafTotalPages","IndoPak","SixteenLines","getPageIdsByMushaf","lang","Array","map","n","index","page","value","label","getMushafLinesNumber","FifteenLines","getChapterData","parseVerseRange","isValidChapterId","chapterId","chapterIdNumber","Number","isNaN","isValidVerseNumber","verseId","verseIdNumber","isValidVerseId","chaptersData","versesCount","isValidJuzId","juzId","juzIdNumber","isValidRubId","rubId","rubIdNumber","isValidHizbId","hizbId","hizbIdNumber","isValidPageNumber","pageId","mushafId","pageIdNumber","MUSHAF_COUNT","getToAndFromFromRange","range","split","isValidVerseRange","rangeSplits","length","from","to","fromNumber","toNumber","chapterVersesCount","isRangesStringValid","rangesString","parsedVerseRange","fromRange","toRange","chapter","verseRange","verse","isValidVerseKey","verseKey","splits","isValidTafsirId","tafsirId","tafsirIdNumber"],"sourceRoot":""}
|