UNPKG

arabicfmt

Version:

Arabic-first formatting for numbers, currency, dates and bidirectional text across all 22 Arab League countries — with correct handling of the 2025–2026 Unicode currency-symbol transition (Saudi Riyal U+20C1, UAE Dirham U+20C3, Omani Rial U+20C4).

430 lines (424 loc) 6.27 kB
'use strict'; var chunkN4EBTUD5_cjs = require('../chunk-N4EBTUD5.cjs'); require('../chunk-3NAF2S6Y.cjs'); // src/umalqura/table.generated.ts var FIRST_YEAR = 1300; var LAST_YEAR = 1599; var EPOCH_GREGORIAN = [1882, 11, 12]; var TOTAL_DAYS = 106311; var MONTH_LENGTH_BITS = [ 1365, 683, 2359, 694, 1398, 876, 2901, 2730, 2390, 1182, 2397, 698, 1461, 938, 2891, 2710, 1326, 685, 1389, 2906, 1874, 3877, 3722, 3350, 2646, 2741, 1716, 3497, 2962, 2853, 1611, 2715, 858, 1753, 1492, 3493, 3402, 2709, 1334, 2421, 756, 1769, 1748, 1705, 1333, 605, 1213, 2490, 948, 2921, 2858, 2645, 1197, 2653, 730, 1753, 3754, 3732, 3370, 3158, 1198, 2669, 1386, 3413, 3402, 2707, 1323, 2651, 1338, 1717, 3753, 3410, 3369, 2645, 1197, 1389, 2794, 1764, 3793, 3490, 2730, 2394, 730, 1465, 2994, 1892, 1737, 1365, 683, 1243, 2746, 1460, 3497, 3410, 2725, 2349, 621, 2285, 730, 2773, 2725, 2635, 1175, 2359, 694, 2421, 3433, 3410, 3221, 2347, 603, 1243, 2517, 1490, 3493, 3402, 2709, 1357, 2733, 938, 3026, 3012, 2953, 2709, 1325, 1453, 2922, 1748, 3529, 3474, 2726, 2390, 686, 1389, 874, 2901, 2730, 2381, 1181, 2397, 698, 1461, 1450, 3413, 2714, 2350, 622, 1373, 2778, 1748, 1701, 2855, 2637, 1197, 1389, 2906, 1876, 3913, 3730, 3366, 2646, 854, 1717, 2986, 2962, 2853, 1675, 2715, 1370, 2778, 1460, 3497, 2898, 2714, 1334, 630, 1397, 2802, 1748, 1705, 1365, 685, 1213, 2490, 1396, 2921, 2898, 2709, 1325, 2653, 1242, 2777, 1714, 3733, 3626, 3222, 2350, 2733, 1386, 3429, 3402, 3349, 1579, 3163, 1338, 1717, 3506, 3428, 3369, 2645, 1197, 2413, 2794, 1768, 3793, 3492, 3402, 2666, 730, 1465, 2930, 2920, 1745, 1621, 1195, 2395, 698, 1461, 3497, 3410, 3238, 2382, 1134, 2397, 1242, 2773, 2730, 2637, 1179, 2359, 1206, 2421, 3434, 3410, 2725, 2379, 683, 1371, 2777, 1490, 3525, 3474, 2853, 1365, 2741, 1460, 2985, 1954, 1861, 1427, 2731, 1238, 2518, 1490, 2981, 2890, 2709, 1197, 349, 733, 2522, 1460, 1449, 1325, 603, 2231, 374, 1389, 2922, 2762, 2710, 1323, 347, 699, 1462, 3498, 2964, 3398, 2701, 1325, 2717, 1370, 1877, 1865, 3859, 3658, 2710, 1366, 1717, 2986 ]; // src/umalqura/convert.ts var EPOCH_JDN = chunkN4EBTUD5_cjs.gregorianToJDN( EPOCH_GREGORIAN[0], EPOCH_GREGORIAN[1], EPOCH_GREGORIAN[2] ); var UMALQURA_FIRST_YEAR = FIRST_YEAR; var UMALQURA_LAST_YEAR = LAST_YEAR; function yearDays(bits) { let days = 0; for (let m = 0; m < 12; m++) days += 29 + (bits >> m & 1); return days; } var YEAR_OFFSET = (() => { const offsets = []; let acc = 0; for (let i = 0; i < MONTH_LENGTH_BITS.length; i++) { offsets.push(acc); acc += yearDays(MONTH_LENGTH_BITS[i]); } offsets.push(acc); return offsets; })(); function monthLength(yearIndex, month) { return 29 + (MONTH_LENGTH_BITS[yearIndex] >> month - 1 & 1); } function isUmalquraYear(year) { return year >= FIRST_YEAR && year <= LAST_YEAR; } function umalquraToJDN(year, month, day) { if (!isUmalquraYear(year)) { throw new RangeError( `arabicfmt/umalqura: year ${year} is outside the supported range AH ${FIRST_YEAR}\u2013${LAST_YEAR}.` ); } if (month < 1 || month > 12) { throw new RangeError(`arabicfmt/umalqura: invalid month ${month}.`); } const yearIndex = year - FIRST_YEAR; let days = YEAR_OFFSET[yearIndex]; for (let m = 1; m < month; m++) days += monthLength(yearIndex, m); return EPOCH_JDN + days + (day - 1); } function jdnToUmalqura(jdn) { const offset = jdn - EPOCH_JDN; if (offset < 0 || offset >= TOTAL_DAYS) { throw new RangeError( `arabicfmt/umalqura: date is outside the supported Umm al-Qura range (AH ${FIRST_YEAR}\u2013${LAST_YEAR}).` ); } let lo = 0; let hi = MONTH_LENGTH_BITS.length - 1; let yearIndex = 0; while (lo <= hi) { const mid = lo + hi >> 1; if (offset < YEAR_OFFSET[mid]) { hi = mid - 1; } else if (offset >= YEAR_OFFSET[mid + 1]) { lo = mid + 1; } else { yearIndex = mid; break; } } let remainder = offset - YEAR_OFFSET[yearIndex]; let month = 1; while (month < 12) { const len = monthLength(yearIndex, month); if (remainder < len) break; remainder -= len; month++; } return { year: FIRST_YEAR + yearIndex, month, day: remainder + 1 }; } function gregorianToUmalqura(date) { return jdnToUmalqura(chunkN4EBTUD5_cjs.dateToJDN(date)); } function umalquraToGregorian(year, month, day) { return chunkN4EBTUD5_cjs.jdnToDate(umalquraToJDN(year, month, day)); } // src/umalqura/index.ts function formatHijri(date, options) { return chunkN4EBTUD5_cjs.formatHijriDate(gregorianToUmalqura(date), options); } Object.defineProperty(exports, "HIJRI_ERA_AR", { enumerable: true, get: function () { return chunkN4EBTUD5_cjs.HIJRI_ERA_AR; } }); Object.defineProperty(exports, "HIJRI_ERA_EN", { enumerable: true, get: function () { return chunkN4EBTUD5_cjs.HIJRI_ERA_EN; } }); Object.defineProperty(exports, "HIJRI_MONTHS_AR", { enumerable: true, get: function () { return chunkN4EBTUD5_cjs.HIJRI_MONTHS_AR; } }); Object.defineProperty(exports, "HIJRI_MONTHS_EN", { enumerable: true, get: function () { return chunkN4EBTUD5_cjs.HIJRI_MONTHS_EN; } }); Object.defineProperty(exports, "formatHijriDate", { enumerable: true, get: function () { return chunkN4EBTUD5_cjs.formatHijriDate; } }); exports.UMALQURA_FIRST_YEAR = UMALQURA_FIRST_YEAR; exports.UMALQURA_LAST_YEAR = UMALQURA_LAST_YEAR; exports.formatHijri = formatHijri; exports.fromHijri = umalquraToGregorian; exports.gregorianToUmalqura = gregorianToUmalqura; exports.isUmalquraYear = isUmalquraYear; exports.jdnToUmalqura = jdnToUmalqura; exports.toHijri = gregorianToUmalqura; exports.umalquraToGregorian = umalquraToGregorian; exports.umalquraToJDN = umalquraToJDN;