UEA-Prodem

This commit is contained in:
2026-06-10 12:38:42 -03:00
parent 3f33154e16
commit c41625e542
9352 changed files with 1128292 additions and 14752 deletions
+9
View File
@@ -0,0 +1,9 @@
import { DateType } from './types';
/**
* Check date values if within valid range.
*/
export declare function checkHijriRange(date: DateType): void;
/**
* Check if Gregorian date is within valid range.
*/
export declare function checkGregorianRange(date: DateType): void;
+39
View File
@@ -0,0 +1,39 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkGregorianRange = exports.checkHijriRange = void 0;
const ummalqura_1 = require("./ummalqura");
const isoFormat_1 = require("./isoFormat");
const dateHelpersHijri_1 = require("./dateHelpersHijri");
/**
* Check date values if within valid range.
*/
function checkHijriRange(date) {
// check year
const [[minYear], [maxYear]] = ummalqura_1.HIJRI_RANGE;
if (date.year < minYear || maxYear < date.year) {
throw Error('date out of range');
}
// check month
const maxMonths = 12;
if (date.month < 1 || maxMonths < date.month) {
throw Error(`month must be in 1..${maxMonths}`);
}
// check day
const monthLen = (0, dateHelpersHijri_1.hijriDaysInMonth)(date.year, date.month);
if (date.day < 1 || monthLen < date.day) {
throw Error(`day must be in 1..${monthLen}`);
}
}
exports.checkHijriRange = checkHijriRange;
/**
* Check if Gregorian date is within valid range.
*/
function checkGregorianRange(date) {
const [minDate, maxDate] = ummalqura_1.GREGORIAN_RANGE;
const isoCurrentDate = (0, isoFormat_1.isoFormat)(date.year, date.month, date.day);
if ((0, isoFormat_1.isoFormat)(...minDate) > isoCurrentDate ||
(0, isoFormat_1.isoFormat)(...maxDate) < isoCurrentDate) {
throw Error('date out of range');
}
}
exports.checkGregorianRange = checkGregorianRange;
+36
View File
@@ -0,0 +1,36 @@
export declare const DAYS_BEFORE_MONTH: number[];
/**
* year -> 1 if leap year, else 0
*/
export declare function isLeap(year: number): boolean;
/**
* year, month -> number of days in that month in that year.
*/
export declare function _daysInMonth(year: number, month: number): number;
/**
* ordinal -> (year, month, day), considering 01-Jan-0001 as day 1.
*
* n is a 1-based index, starting at 1-Jan-1. The pattern of leap years
* repeats exactly every 400 years. The basic strategy is to find the
* closest 400-year boundary at or before n, then work with the offset
* from that boundary to n. Life is much clearer if we subtract 1 from
* n first -- then the values of n at 400-year boundaries are exactly
* those divisible by _DI400Y:
*
* D M Y n n-1
* -- --- ---- ---------- ----------------
* 31 Dec -400 -_DI400Y -_DI400Y -1
* 1 Jan -399 -_DI400Y +1 -_DI400Y 400-year boundary
* ...
* 30 Dec 000 -1 -2
* 31 Dec 000 0 -1
* 1 Jan 001 1 0 400-year boundary
* 2 Jan 001 2 1
* 3 Jan 001 3 2
* ...
* 31 Dec 400 _DI400Y _DI400Y -1
* 1 Jan 401 _DI400Y +1 _DI400Y 400-year boundary
*
*
*/
export declare function ord2ymd(n: number): [number, number, number];
+173
View File
@@ -0,0 +1,173 @@
"use strict";
/*
* This file contains modifications to code that is licensed under
* the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2.
*
* Copyright © 2001-2023 Python Software Foundation. All rights reserved.
*
* 1. This LICENSE AGREEMENT is between the Python Software Foundation
* ("PSF"), and the Individual or Organization ("Licensee") accessing and
* otherwise using this software ("Python") in source or binary form and
* its associated documentation.
*
* 2. Subject to the terms and conditions of this License Agreement, PSF hereby
* grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
* analyze, test, perform and/or display publicly, prepare derivative works,
* distribute, and otherwise use Python alone or in any derivative version,
* provided, however, that PSF's License Agreement and PSF's notice of copyright,
* i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
* 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Python Software Foundation;
* All Rights Reserved" are retained in Python alone or in any derivative version
* prepared by Licensee.
*
* 3. In the event Licensee prepares a derivative work that is based on
* or incorporates Python or any part thereof, and wants to make
* the derivative work available to others as provided herein, then
* Licensee hereby agrees to include in any such work a brief summary of
* the changes made to Python.
*
* 4. PSF is making Python available to Licensee on an "AS IS"
* basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
* IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
* DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
* FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
* INFRINGE ANY THIRD PARTY RIGHTS.
*
* 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
* FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
* A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
* OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
*
* 6. This License Agreement will automatically terminate upon a material
* breach of its terms and conditions.
*
* 7. Nothing in this License Agreement shall be deemed to create any
* relationship of agency, partnership, or joint venture between PSF and
* Licensee. This License Agreement does not grant permission to use PSF
* trademarks or trade name in a trademark sense to endorse or promote
* products or services of Licensee, or any third party.
*
* 8. By copying, installing or otherwise using Python, Licensee
* agrees to be bound by the terms and conditions of this License
* Agreement.
*
* This modified version of the Software is licensed under the MIT license.
*
* Copyright (c) 2023 Tabby FZ-LLC
*
* A copy of the license can be found in the LICENSE file at the root of this
* distribution.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.ord2ymd = exports._daysInMonth = exports.isLeap = exports.DAYS_BEFORE_MONTH = void 0;
const divmod_1 = require("./utils/divmod");
// Constants for Gregorian calendar
const _DAYS_IN_MONTH = [-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
exports.DAYS_BEFORE_MONTH = [-1];
let dbm = 0;
for (let i = 1; i < _DAYS_IN_MONTH.length; i++) {
exports.DAYS_BEFORE_MONTH.push(dbm);
dbm += _DAYS_IN_MONTH[i];
}
/**
* year -> number of days before January 1st of year.
* @param year
*/
function _daysBeforeYear(year) {
const y = year - 1;
return (y * 365 + Math.floor(y / 4) - Math.floor(y / 100) + Math.floor(y / 400));
}
const _DI400Y = _daysBeforeYear(401); // number of days in 400 years
const _DI100Y = _daysBeforeYear(101); // number of days in 100 years
const _DI4Y = _daysBeforeYear(5); // number of days in 4 years
/**
* year -> 1 if leap year, else 0
*/
function isLeap(year) {
return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
}
exports.isLeap = isLeap;
/**
* year, month -> number of days in that month in that year.
*/
function _daysInMonth(year, month) {
if (month < 1 || month > 12) {
throw Error(`AssertionError: Expected: 1 <= month <= 12; Actual: month = ${month}`);
}
if (month === 2 && isLeap(year)) {
return 29;
}
return _DAYS_IN_MONTH[month];
}
exports._daysInMonth = _daysInMonth;
/**
* ordinal -> (year, month, day), considering 01-Jan-0001 as day 1.
*
* n is a 1-based index, starting at 1-Jan-1. The pattern of leap years
* repeats exactly every 400 years. The basic strategy is to find the
* closest 400-year boundary at or before n, then work with the offset
* from that boundary to n. Life is much clearer if we subtract 1 from
* n first -- then the values of n at 400-year boundaries are exactly
* those divisible by _DI400Y:
*
* D M Y n n-1
* -- --- ---- ---------- ----------------
* 31 Dec -400 -_DI400Y -_DI400Y -1
* 1 Jan -399 -_DI400Y +1 -_DI400Y 400-year boundary
* ...
* 30 Dec 000 -1 -2
* 31 Dec 000 0 -1
* 1 Jan 001 1 0 400-year boundary
* 2 Jan 001 2 1
* 3 Jan 001 3 2
* ...
* 31 Dec 400 _DI400Y _DI400Y -1
* 1 Jan 401 _DI400Y +1 _DI400Y 400-year boundary
*
*
*/
function ord2ymd(n) {
n -= 1;
let n400, n100, n4, n1;
[n400, n] = (0, divmod_1.divmod)(n, _DI400Y);
let year = n400 * 400 + 1; // ..., -399, 1, 401, ...
// Now n is the (non-negative) offset, in days, from January 1 of year, to
// the desired date. Now compute how many 100-year cycles precede n.
// Note that it's possible for n100 to equal 4! In that case 4 full
// 100-year cycles precede the desired day, which implies the desired
// day is December 31 at the end of a 400-year cycle.
[n100, n] = (0, divmod_1.divmod)(n, _DI100Y);
// Now compute how many 4-year cycles precede it.
[n4, n] = (0, divmod_1.divmod)(n, _DI4Y);
// And now how many single years. Again n1 can be 4, and again meaning
// that the desired day is December 31 at the end of the 4-year cycle.
[n1, n] = (0, divmod_1.divmod)(n, 365);
year += n100 * 100 + n4 * 4 + n1;
if (n1 === 4 || n100 === 4) {
if (n !== 0) {
throw Error(`AssertionError: Expected: n = 0; Actual: n = ${n}`);
}
return [year - 1, 12, 31];
}
// Now the year is correct, and n is the offset from January 1. We find
// the month via an estimate that's either exact or one too large.
const leapYear = n1 === 3 && (n4 !== 24 || n100 === 3);
if (leapYear !== isLeap(year)) {
throw Error(`AssertionError: Expected: leapyear = ${isLeap(year)}; Actual: leapyear = ${leapYear}`);
}
let month = (n + 50) >> 5;
let preceding = exports.DAYS_BEFORE_MONTH[month] + Number(month > 2 && leapYear);
if (preceding > n) {
// estimate is too large
month -= 1;
preceding -= _DAYS_IN_MONTH[month] + Number(month === 2 && leapYear);
}
n -= preceding;
if (n < 0 || _daysInMonth(year, month) < n) {
throw Error(`AssertionError: Expected: 0 <= n <= ${_daysInMonth(year, month)}; Actual: n = ${n}`);
}
// Now the year and month are correct, and n is the offset from the
// start of that month: we're done!
return [year, month, n + 1];
}
exports.ord2ymd = ord2ymd;
+19
View File
@@ -0,0 +1,19 @@
import { DateType } from './types';
/**
* Return number of days in month.
*/
export declare function hijriDaysInMonth(year: number, month: number): number;
/**
* Return corresponding Julian day number (JDN) from Hijri date.
*/
export declare function hijriToJulian(date: DateType): number;
/**
* Return corresponding Julian day number (JDN) from Gregorian date.
*/
export declare function gregorianToJulian(date: DateType): number;
/**
* Construct a date from a proleptic Gregorian ordinal.
* January 1 of year 1 is day 1. Only the year, month and day are
* non-zero in the result.
*/
export declare function gregorianFromOrdinal(n: number): DateType;
+86
View File
@@ -0,0 +1,86 @@
"use strict";
/*
* This file contains modifications to code from https://github.com/mhalshehri/hijri-converter
* that is licensed under the MIT license.
*
* Copyright (c) 2018 Mohammed H Alshehri (@mhalshehri) and contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the 'Software'), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software.
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* This modified version of the Software is also licensed under the MIT license,
* and is subject to the same conditions as the original version of the Software.
*
* Copyright (c) 2023 Tabby FZ-LLC
*
* A copy of the license can be found in the LICENSE file at the root of this
* distribution.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.gregorianFromOrdinal = exports.gregorianToJulian = exports.hijriToJulian = exports.hijriDaysInMonth = void 0;
const ummalqura_1 = require("./ummalqura");
const julianDayHelpers_1 = require("./julianDayHelpers");
const dateHelpers_1 = require("./dateHelpers");
/**
* Return months index in ummalqura month starts
*/
function _monthIndex(year, month) {
const priorMonth = (year - 1) * 12 + month - 1;
const index = priorMonth - ummalqura_1.HIJRI_OFFSET;
return index;
}
/**
* Return number of days in month.
*/
function hijriDaysInMonth(year, month) {
const index = _monthIndex(year, month);
return ummalqura_1.MONTH_STARTS[index + 1] - ummalqura_1.MONTH_STARTS[index];
}
exports.hijriDaysInMonth = hijriDaysInMonth;
/**
* Return corresponding Julian day number (JDN) from Hijri date.
*/
function hijriToJulian(date) {
const index = _monthIndex(date.year, date.month);
const rjd = ummalqura_1.MONTH_STARTS[index] + date.day - 1;
const jdn = (0, julianDayHelpers_1.rjdToJdn)(rjd);
return jdn;
}
exports.hijriToJulian = hijriToJulian;
/**
* Return corresponding Julian day number (JDN) from Gregorian date.
*/
function gregorianToJulian(date) {
const y = date.year - 1;
const m = date.month;
const daysBeforeYear = y * 365 + Math.floor(y / 4) - Math.floor(y / 100) + Math.floor(y / 400);
const daysBeforeMonth = dateHelpers_1.DAYS_BEFORE_MONTH[m] + Number(m > 2 && (0, dateHelpers_1.isLeap)(date.year));
const don = daysBeforeYear + daysBeforeMonth + date.day;
const jdn = (0, julianDayHelpers_1.ordinalToJdn)(don);
return jdn;
}
exports.gregorianToJulian = gregorianToJulian;
/**
* Construct a date from a proleptic Gregorian ordinal.
* January 1 of year 1 is day 1. Only the year, month and day are
* non-zero in the result.
*/
function gregorianFromOrdinal(n) {
const [year, month, day] = (0, dateHelpers_1.ord2ymd)(n);
return { year, month, day };
}
exports.gregorianFromOrdinal = gregorianFromOrdinal;
+4
View File
@@ -0,0 +1,4 @@
/**
* Return date in ISO format i.e. `YYYY-MM-DD`.
*/
export declare function isoFormat(year: number, month: number, day: number): string;
+14
View File
@@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.isoFormat = void 0;
/**
* Return date in ISO format i.e. `YYYY-MM-DD`.
*/
function isoFormat(year, month, day) {
return [
String(year).padStart(4, '0'),
String(month).padStart(2, '0'),
String(day).padStart(2, '0'),
].join('-');
}
exports.isoFormat = isoFormat;
+24
View File
@@ -0,0 +1,24 @@
/**
* Convert Julian day number (JDN) to date ordinal number.
* @param {number} jdn - Julian day number (JDN).
* @returns {number} Date ordinal number.
*/
export declare function jdnToOrdinal(jdn: number): number;
/**
* Convert date ordinal number to Julian day number (JDN).
* @param {number} don - Date ordinal number.
* @returns {number} Julian day number (JDN).
*/
export declare function ordinalToJdn(don: number): number;
/**
* Return Reduced Julian Day (RJD) number from Julian day number (JDN).
* @param {number} jdn - Julian day number (JDN).
* @returns {number} Reduced Julian Day (RJD) number.
*/
export declare function jdnToRjd(jdn: number): number;
/**
* Return Julian day number (JDN) from Reduced Julian Day (RJD) number.
* @param {number} rjd - Reduced Julian Day (RJD) number.
* @returns {number} Julian day number (JDN).
*/
export declare function rjdToJdn(rjd: number): number;
+70
View File
@@ -0,0 +1,70 @@
"use strict";
/*
* This file contains modifications to code from https://github.com/mhalshehri/hijri-converter
* that is licensed under the MIT license.
*
* Copyright (c) 2018 Mohammed H Alshehri (@mhalshehri) and contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the 'Software'), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software.
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* This modified version of the Software is also licensed under the MIT license,
* and is subject to the same conditions as the original version of the Software.
*
* Copyright (c) 2023 Tabby FZ-LLC
*
* A copy of the license can be found in the LICENSE file at the root of this
* distribution.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.rjdToJdn = exports.jdnToRjd = exports.ordinalToJdn = exports.jdnToOrdinal = void 0;
/**
* Convert Julian day number (JDN) to date ordinal number.
* @param {number} jdn - Julian day number (JDN).
* @returns {number} Date ordinal number.
*/
function jdnToOrdinal(jdn) {
return jdn - 1721425;
}
exports.jdnToOrdinal = jdnToOrdinal;
/**
* Convert date ordinal number to Julian day number (JDN).
* @param {number} don - Date ordinal number.
* @returns {number} Julian day number (JDN).
*/
function ordinalToJdn(don) {
return don + 1721425;
}
exports.ordinalToJdn = ordinalToJdn;
/**
* Return Reduced Julian Day (RJD) number from Julian day number (JDN).
* @param {number} jdn - Julian day number (JDN).
* @returns {number} Reduced Julian Day (RJD) number.
*/
function jdnToRjd(jdn) {
return jdn - 2400000;
}
exports.jdnToRjd = jdnToRjd;
/**
* Return Julian day number (JDN) from Reduced Julian Day (RJD) number.
* @param {number} rjd - Reduced Julian Day (RJD) number.
* @returns {number} Julian day number (JDN).
*/
function rjdToJdn(rjd) {
return rjd + 2400000;
}
exports.rjdToJdn = rjdToJdn;
+5
View File
@@ -0,0 +1,5 @@
export type DateType = {
year: number;
month: number;
day: number;
};
+2
View File
@@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
+21
View File
@@ -0,0 +1,21 @@
/**
* Umm al-Qura calendar constants.
*/
export type DateTuple = [number, number, number];
/**
* Inclusive range of supported Gregorian dates (year, month and day).
*/
export declare const GREGORIAN_RANGE: [DateTuple, DateTuple];
/**
* Inclusive range of supported Hijri dates (year, month and day).
*/
export declare const HIJRI_RANGE: [DateTuple, DateTuple];
/**
* Total Hijri months elapsed before the beginning of Hijri range.
*/
export declare const HIJRI_OFFSET: number;
/**
* Ordered list of Reduced Julian Day (RJD) numbers for the beginning of
* supported Hijri months.
*/
export declare const MONTH_STARTS: number[];
+231
View File
@@ -0,0 +1,231 @@
"use strict";
/*
* This file contains modifications to code from https://github.com/mhalshehri/hijri-converter
* that is licensed under the MIT license.
*
* Copyright (c) 2018 Mohammed H Alshehri (@mhalshehri) and contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the 'Software'), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software.
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* This modified version of the Software is also licensed under the MIT license,
* and is subject to the same conditions as the original version of the Software.
*
* Copyright (c) 2023 Tabby FZ-LLC
*
* A copy of the license can be found in the LICENSE file at the root of this
* distribution.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.MONTH_STARTS = exports.HIJRI_OFFSET = exports.HIJRI_RANGE = exports.GREGORIAN_RANGE = void 0;
/**
* Inclusive range of supported Gregorian dates (year, month and day).
*/
exports.GREGORIAN_RANGE = [
[1924, 8, 1],
[2077, 11, 16],
];
/**
* Inclusive range of supported Hijri dates (year, month and day).
*/
exports.HIJRI_RANGE = [
[1343, 1, 1],
[1500, 12, 30],
];
/**
* Total Hijri months elapsed before the beginning of Hijri range.
*/
exports.HIJRI_OFFSET = 1342 * 12;
/**
* Ordered list of Reduced Julian Day (RJD) numbers for the beginning of
* supported Hijri months.
*/
exports.MONTH_STARTS = [
23999, 24029, 24058, 24088, 24118, 24147, 24177, 24207, 24237, 24265, 24295,
24325, 24355, 24384, 24413, 24443, 24472, 24502, 24531, 24561, 24590, 24620,
24649, 24679, 24708, 24738, 24767, 24797, 24826, 24857, 24886, 24916, 24944,
24974, 25004, 25033, 25063, 25092, 25121, 25151, 25181, 25210, 25240, 25270,
25299, 25328, 25358, 25388, 25417, 25446, 25475, 25505, 25535, 25564, 25594,
25624, 25653, 25683, 25713, 25742, 25771, 25801, 25830, 25860, 25889, 25919,
25948, 25978, 26008, 26037, 26066, 26097, 26125, 26155, 26184, 26214, 26243,
26273, 26302, 26332, 26362, 26392, 26420, 26451, 26481, 26510, 26540, 26569,
26599, 26628, 26657, 26687, 26716, 26746, 26776, 26805, 26835, 26865, 26894,
26924, 26953, 26983, 27012, 27041, 27070, 27100, 27130, 27159, 27189, 27219,
27248, 27278, 27307, 27337, 27366, 27396, 27425, 27455, 27484, 27514, 27543,
27573, 27602, 27632, 27662, 27691, 27721, 27750, 27780, 27810, 27839, 27868,
27898, 27927, 27957, 27986, 28016, 28045, 28075, 28105, 28134, 28164, 28193,
28223, 28252, 28282, 28311, 28341, 28370, 28400, 28429, 28459, 28488, 28518,
28548, 28577, 28607, 28636, 28665, 28695, 28724, 28754, 28783, 28813, 28843,
28872, 28901, 28931, 28960, 28990, 29019, 29049, 29078, 29108, 29137, 29167,
29196, 29226, 29255, 29285, 29315, 29345, 29375, 29404, 29434, 29463, 29492,
29522, 29551, 29580, 29610, 29640, 29669, 29699, 29729, 29759, 29788, 29818,
29847, 29876, 29906, 29935, 29964, 29994, 30023, 30053, 30082, 30112, 30141,
30171, 30200, 30230, 30259, 30289, 30318, 30348, 30378, 30408, 30437, 30467,
30496, 30526, 30555, 30585, 30614, 30644, 30673, 30703, 30732, 30762, 30791,
30821, 30850, 30880, 30909, 30939, 30968, 30998, 31027, 31057, 31086, 31116,
31145, 31175, 31204, 31234, 31263, 31293, 31322, 31352, 31381, 31411, 31441,
31471, 31500, 31530, 31559, 31589, 31618, 31648, 31676, 31706, 31736, 31766,
31795, 31825, 31854, 31884, 31913, 31943, 31972, 32002, 32031, 32061, 32090,
32120, 32150, 32180, 32209, 32239, 32268, 32298, 32327, 32357, 32386, 32416,
32445, 32475, 32504, 32534, 32563, 32593, 32622, 32652, 32681, 32711, 32740,
32770, 32799, 32829, 32858, 32888, 32917, 32947, 32976, 33006, 33035, 33065,
33094, 33124, 33153, 33183, 33213, 33243, 33272, 33302, 33331, 33361, 33390,
33420, 33450, 33479, 33509, 33539, 33568, 33598, 33627, 33657, 33686, 33716,
33745, 33775, 33804, 33834, 33863, 33893, 33922, 33952, 33981, 34011, 34040,
34069, 34099, 34128, 34158, 34187, 34217, 34247, 34277, 34306, 34336, 34365,
34395, 34424, 34454, 34483, 34512, 34542, 34571, 34601, 34631, 34660, 34690,
34719, 34749, 34778, 34808, 34837, 34867, 34896, 34926, 34955, 34985, 35015,
35044, 35074, 35103, 35133, 35162, 35192, 35222, 35251, 35280, 35310, 35340,
35370, 35399, 35429, 35458, 35488, 35517, 35547, 35576, 35605, 35635, 35665,
35694, 35723, 35753, 35782, 35811, 35841, 35871, 35901, 35930, 35960, 35989,
36019, 36048, 36078, 36107, 36136, 36166, 36195, 36225, 36254, 36284, 36314,
36343, 36373, 36403, 36433, 36462, 36492, 36521, 36551, 36580, 36610, 36639,
36669, 36698, 36728, 36757, 36786, 36816, 36845, 36875, 36904, 36934, 36963,
36993, 37022, 37052, 37081, 37111, 37141, 37170, 37200, 37229, 37259, 37288,
37318, 37347, 37377, 37406, 37436, 37465, 37495, 37524, 37554, 37584, 37613,
37643, 37672, 37701, 37731, 37760, 37790, 37819, 37849, 37878, 37908, 37938,
37967, 37997, 38027, 38056, 38085, 38115, 38144, 38174, 38203, 38233, 38262,
38292, 38322, 38351, 38381, 38410, 38440, 38469, 38499, 38528, 38558, 38587,
38617, 38646, 38676, 38705, 38735, 38764, 38794, 38823, 38853, 38882, 38912,
38941, 38971, 39001, 39030, 39059, 39089, 39118, 39148, 39178, 39208, 39237,
39267, 39297, 39326, 39355, 39385, 39414, 39444, 39473, 39503, 39532, 39562,
39592, 39621, 39650, 39680, 39709, 39739, 39768, 39798, 39827, 39857, 39886,
39916, 39946, 39975, 40005, 40035, 40064, 40094, 40123, 40153, 40182, 40212,
40241, 40271, 40300, 40330, 40359, 40389, 40418, 40448, 40477, 40507, 40536,
40566, 40595, 40625, 40655, 40685, 40714, 40744, 40773, 40803, 40832, 40862,
40892, 40921, 40951, 40980, 41009, 41039, 41068, 41098, 41127, 41157, 41186,
41216, 41245, 41275, 41304, 41334, 41364, 41393, 41422, 41452, 41481, 41511,
41540, 41570, 41599, 41629, 41658, 41688, 41718, 41748, 41777, 41807, 41836,
41865, 41894, 41924, 41953, 41983, 42012, 42042, 42072, 42102, 42131, 42161,
42190, 42220, 42249, 42279, 42308, 42337, 42367, 42397, 42426, 42456, 42485,
42515, 42545, 42574, 42604, 42633, 42662, 42692, 42721, 42751, 42780, 42810,
42839, 42869, 42899, 42929, 42958, 42988, 43017, 43046, 43076, 43105, 43135,
43164, 43194, 43223, 43253, 43283, 43312, 43342, 43371, 43401, 43430, 43460,
43489, 43519, 43548, 43578, 43607, 43637, 43666, 43696, 43726, 43755, 43785,
43814, 43844, 43873, 43903, 43932, 43962, 43991, 44021, 44050, 44080, 44109,
44139, 44169, 44198, 44228, 44258, 44287, 44317, 44346, 44375, 44405, 44434,
44464, 44493, 44523, 44553, 44582, 44612, 44641, 44671, 44700, 44730, 44759,
44788, 44818, 44847, 44877, 44906, 44936, 44966, 44996, 45025, 45055, 45084,
45114, 45143, 45172, 45202, 45231, 45261, 45290, 45320, 45350, 45380, 45409,
45439, 45468, 45498, 45527, 45556, 45586, 45615, 45644, 45674, 45704, 45733,
45763, 45793, 45823, 45852, 45882, 45911, 45940, 45970, 45999, 46028, 46058,
46088, 46117, 46147, 46177, 46206, 46236, 46265, 46295, 46324, 46354, 46383,
46413, 46442, 46472, 46501, 46531, 46560, 46590, 46620, 46649, 46679, 46708,
46738, 46767, 46797, 46826, 46856, 46885, 46915, 46944, 46974, 47003, 47033,
47063, 47092, 47122, 47151, 47181, 47210, 47240, 47269, 47298, 47328, 47357,
47387, 47417, 47446, 47476, 47506, 47535, 47565, 47594, 47624, 47653, 47682,
47712, 47741, 47771, 47800, 47830, 47860, 47890, 47919, 47949, 47978, 48008,
48037, 48066, 48096, 48125, 48155, 48184, 48214, 48244, 48273, 48303, 48333,
48362, 48392, 48421, 48450, 48480, 48509, 48538, 48568, 48598, 48627, 48657,
48687, 48717, 48746, 48776, 48805, 48834, 48864, 48893, 48922, 48952, 48982,
49011, 49041, 49071, 49100, 49130, 49160, 49189, 49218, 49248, 49277, 49306,
49336, 49365, 49395, 49425, 49455, 49484, 49514, 49543, 49573, 49602, 49632,
49661, 49690, 49720, 49749, 49779, 49809, 49838, 49868, 49898, 49927, 49957,
49986, 50016, 50045, 50075, 50104, 50133, 50163, 50192, 50222, 50252, 50281,
50311, 50340, 50370, 50400, 50429, 50459, 50488, 50518, 50547, 50576, 50606,
50635, 50665, 50694, 50724, 50754, 50784, 50813, 50843, 50872, 50902, 50931,
50960, 50990, 51019, 51049, 51078, 51108, 51138, 51167, 51197, 51227, 51256,
51286, 51315, 51345, 51374, 51403, 51433, 51462, 51492, 51522, 51552, 51582,
51611, 51641, 51670, 51699, 51729, 51758, 51787, 51816, 51846, 51876, 51906,
51936, 51965, 51995, 52025, 52054, 52083, 52113, 52142, 52171, 52200, 52230,
52260, 52290, 52319, 52349, 52379, 52408, 52438, 52467, 52497, 52526, 52555,
52585, 52614, 52644, 52673, 52703, 52733, 52762, 52792, 52822, 52851, 52881,
52910, 52939, 52969, 52998, 53028, 53057, 53087, 53116, 53146, 53176, 53205,
53235, 53264, 53294, 53324, 53353, 53383, 53412, 53441, 53471, 53500, 53530,
53559, 53589, 53619, 53648, 53678, 53708, 53737, 53767, 53796, 53825, 53855,
53884, 53914, 53943, 53973, 54003, 54032, 54062, 54092, 54121, 54151, 54180,
54209, 54239, 54268, 54297, 54327, 54357, 54387, 54416, 54446, 54476, 54505,
54535, 54564, 54593, 54623, 54652, 54681, 54711, 54741, 54770, 54800, 54830,
54859, 54889, 54919, 54948, 54977, 55007, 55036, 55066, 55095, 55125, 55154,
55184, 55213, 55243, 55273, 55302, 55332, 55361, 55391, 55420, 55450, 55479,
55508, 55538, 55567, 55597, 55627, 55657, 55686, 55716, 55745, 55775, 55804,
55834, 55863, 55892, 55922, 55951, 55981, 56011, 56040, 56070, 56100, 56129,
56159, 56188, 56218, 56247, 56276, 56306, 56335, 56365, 56394, 56424, 56454,
56483, 56513, 56543, 56572, 56601, 56631, 56660, 56690, 56719, 56749, 56778,
56808, 56837, 56867, 56897, 56926, 56956, 56985, 57015, 57044, 57074, 57103,
57133, 57162, 57192, 57221, 57251, 57280, 57310, 57340, 57369, 57399, 57429,
57458, 57487, 57517, 57546, 57576, 57605, 57634, 57664, 57694, 57723, 57753,
57783, 57813, 57842, 57871, 57901, 57930, 57959, 57989, 58018, 58048, 58077,
58107, 58137, 58167, 58196, 58226, 58255, 58285, 58314, 58343, 58373, 58402,
58432, 58461, 58491, 58521, 58551, 58580, 58610, 58639, 58669, 58698, 58727,
58757, 58786, 58816, 58845, 58875, 58905, 58934, 58964, 58994, 59023, 59053,
59082, 59111, 59141, 59170, 59200, 59229, 59259, 59288, 59318, 59348, 59377,
59407, 59436, 59466, 59495, 59525, 59554, 59584, 59613, 59643, 59672, 59702,
59731, 59761, 59791, 59820, 59850, 59879, 59909, 59939, 59968, 59997, 60027,
60056, 60086, 60115, 60145, 60174, 60204, 60234, 60264, 60293, 60323, 60352,
60381, 60411, 60440, 60469, 60499, 60528, 60558, 60588, 60618, 60647, 60677,
60707, 60736, 60765, 60795, 60824, 60853, 60883, 60912, 60942, 60972, 61002,
61031, 61061, 61090, 61120, 61149, 61179, 61208, 61237, 61267, 61296, 61326,
61356, 61385, 61415, 61445, 61474, 61504, 61533, 61563, 61592, 61621, 61651,
61680, 61710, 61739, 61769, 61799, 61828, 61858, 61888, 61917, 61947, 61976,
62006, 62035, 62064, 62094, 62123, 62153, 62182, 62212, 62242, 62271, 62301,
62331, 62360, 62390, 62419, 62448, 62478, 62507, 62537, 62566, 62596, 62625,
62655, 62685, 62715, 62744, 62774, 62803, 62832, 62862, 62891, 62921, 62950,
62980, 63009, 63039, 63069, 63099, 63128, 63157, 63187, 63216, 63246, 63275,
63305, 63334, 63363, 63393, 63423, 63453, 63482, 63512, 63541, 63571, 63600,
63630, 63659, 63689, 63718, 63747, 63777, 63807, 63836, 63866, 63895, 63925,
63955, 63984, 64014, 64043, 64073, 64102, 64131, 64161, 64190, 64220, 64249,
64279, 64309, 64339, 64368, 64398, 64427, 64457, 64486, 64515, 64545, 64574,
64603, 64633, 64663, 64692, 64722, 64752, 64782, 64811, 64841, 64870, 64899,
64929, 64958, 64987, 65017, 65047, 65076, 65106, 65136, 65166, 65195, 65225,
65254, 65283, 65313, 65342, 65371, 65401, 65431, 65460, 65490, 65520, 65549,
65579, 65608, 65638, 65667, 65697, 65726, 65755, 65785, 65815, 65844, 65874,
65903, 65933, 65963, 65992, 66022, 66051, 66081, 66110, 66140, 66169, 66199,
66228, 66258, 66287, 66317, 66346, 66376, 66405, 66435, 66465, 66494, 66524,
66553, 66583, 66612, 66641, 66671, 66700, 66730, 66760, 66789, 66819, 66849,
66878, 66908, 66937, 66967, 66996, 67025, 67055, 67084, 67114, 67143, 67173,
67203, 67233, 67262, 67292, 67321, 67351, 67380, 67409, 67439, 67468, 67497,
67527, 67557, 67587, 67617, 67646, 67676, 67705, 67735, 67764, 67793, 67823,
67852, 67882, 67911, 67941, 67971, 68000, 68030, 68060, 68089, 68119, 68148,
68177, 68207, 68236, 68266, 68295, 68325, 68354, 68384, 68414, 68443, 68473,
68502, 68532, 68561, 68591, 68620, 68650, 68679, 68708, 68738, 68768, 68797,
68827, 68857, 68886, 68916, 68946, 68975, 69004, 69034, 69063, 69092, 69122,
69152, 69181, 69211, 69240, 69270, 69300, 69330, 69359, 69388, 69418, 69447,
69476, 69506, 69535, 69565, 69595, 69624, 69654, 69684, 69713, 69743, 69772,
69802, 69831, 69861, 69890, 69919, 69949, 69978, 70008, 70038, 70067, 70097,
70126, 70156, 70186, 70215, 70245, 70274, 70303, 70333, 70362, 70392, 70421,
70451, 70481, 70510, 70540, 70570, 70599, 70629, 70658, 70687, 70717, 70746,
70776, 70805, 70835, 70864, 70894, 70924, 70954, 70983, 71013, 71042, 71071,
71101, 71130, 71159, 71189, 71218, 71248, 71278, 71308, 71337, 71367, 71397,
71426, 71455, 71485, 71514, 71543, 71573, 71602, 71632, 71662, 71691, 71721,
71751, 71781, 71810, 71839, 71869, 71898, 71927, 71957, 71986, 72016, 72046,
72075, 72105, 72135, 72164, 72194, 72223, 72253, 72282, 72311, 72341, 72370,
72400, 72429, 72459, 72489, 72518, 72548, 72577, 72607, 72637, 72666, 72695,
72725, 72754, 72784, 72813, 72843, 72872, 72902, 72931, 72961, 72991, 73020,
73050, 73080, 73109, 73139, 73168, 73197, 73227, 73256, 73286, 73315, 73345,
73375, 73404, 73434, 73464, 73493, 73523, 73552, 73581, 73611, 73640, 73669,
73699, 73729, 73758, 73788, 73818, 73848, 73877, 73907, 73936, 73965, 73995,
74024, 74053, 74083, 74113, 74142, 74172, 74202, 74231, 74261, 74291, 74320,
74349, 74379, 74408, 74437, 74467, 74497, 74526, 74556, 74585, 74615, 74645,
74675, 74704, 74733, 74763, 74792, 74822, 74851, 74881, 74910, 74940, 74969,
74999, 75029, 75058, 75088, 75117, 75147, 75176, 75206, 75235, 75264, 75294,
75323, 75353, 75383, 75412, 75442, 75472, 75501, 75531, 75560, 75590, 75619,
75648, 75678, 75707, 75737, 75766, 75796, 75826, 75856, 75885, 75915, 75944,
75974, 76003, 76032, 76062, 76091, 76121, 76150, 76180, 76210, 76239, 76269,
76299, 76328, 76358, 76387, 76416, 76446, 76475, 76505, 76534, 76564, 76593,
76623, 76653, 76682, 76712, 76741, 76771, 76801, 76830, 76859, 76889, 76918,
76948, 76977, 77007, 77036, 77066, 77096, 77125, 77155, 77185, 77214, 77243,
77273, 77302, 77332, 77361, 77390, 77420, 77450, 77479, 77509, 77539, 77569,
77598, 77627, 77657, 77686, 77715, 77745, 77774, 77804, 77833, 77863, 77893,
77923, 77952, 77982, 78011, 78041, 78070, 78099, 78129, 78158, 78188, 78217,
78247, 78277, 78307, 78336, 78366, 78395, 78425, 78454, 78483, 78513, 78542,
78572, 78601, 78631, 78661, 78690, 78720, 78750, 78779, 78808, 78838, 78867,
78897, 78926, 78956, 78985, 79015, 79044, 79074, 79104, 79133, 79163, 79192,
79222, 79251, 79281, 79310, 79340, 79369, 79399, 79428, 79458, 79487, 79517,
79546, 79576, 79606, 79635, 79665, 79695, 79724, 79753, 79783, 79812, 79841,
79871, 79900, 79930, 79960, 79990,
];
+13
View File
@@ -0,0 +1,13 @@
/**
* Locate the insertion point for `x` in `a` to maintain sorted order.
* The parameters `lo` and `hi` may be used to specify a subset of the list
* which should be considered; by default the entire list is used.
* If `x` is already present in `a`, the insertion point will be after (to the
* right of) any existing entries. The return value is suitable for use as
* the first parameter to Array.splice() assuming that `a` is already sorted.
*
* This is part of Python's algorithm of the `bisectRight` function.
*
* @throws {Error} if `lo` is negative number
*/
export declare function bisect<T>(a: T[], x: T, lo?: number, hi?: number): number;
+91
View File
@@ -0,0 +1,91 @@
"use strict";
/*
* This file contains modifications to code that is licensed under
* the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2.
*
* Copyright © 2001-2023 Python Software Foundation. All rights reserved.
*
* 1. This LICENSE AGREEMENT is between the Python Software Foundation
* ("PSF"), and the Individual or Organization ("Licensee") accessing and
* otherwise using this software ("Python") in source or binary form and
* its associated documentation.
*
* 2. Subject to the terms and conditions of this License Agreement, PSF hereby
* grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
* analyze, test, perform and/or display publicly, prepare derivative works,
* distribute, and otherwise use Python alone or in any derivative version,
* provided, however, that PSF's License Agreement and PSF's notice of copyright,
* i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
* 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Python Software Foundation;
* All Rights Reserved" are retained in Python alone or in any derivative version
* prepared by Licensee.
*
* 3. In the event Licensee prepares a derivative work that is based on
* or incorporates Python or any part thereof, and wants to make
* the derivative work available to others as provided herein, then
* Licensee hereby agrees to include in any such work a brief summary of
* the changes made to Python.
*
* 4. PSF is making Python available to Licensee on an "AS IS"
* basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
* IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
* DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
* FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
* INFRINGE ANY THIRD PARTY RIGHTS.
*
* 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
* FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
* A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
* OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
*
* 6. This License Agreement will automatically terminate upon a material
* breach of its terms and conditions.
*
* 7. Nothing in this License Agreement shall be deemed to create any
* relationship of agency, partnership, or joint venture between PSF and
* Licensee. This License Agreement does not grant permission to use PSF
* trademarks or trade name in a trademark sense to endorse or promote
* products or services of Licensee, or any third party.
*
* 8. By copying, installing or otherwise using Python, Licensee
* agrees to be bound by the terms and conditions of this License
* Agreement.
*
* This modified version of the Software is licensed under the MIT license.
*
* Copyright (c) 2023 Tabby FZ-LLC
*
* A copy of the license can be found in the LICENSE file at the root of this
* distribution.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.bisect = void 0;
/**
* Locate the insertion point for `x` in `a` to maintain sorted order.
* The parameters `lo` and `hi` may be used to specify a subset of the list
* which should be considered; by default the entire list is used.
* If `x` is already present in `a`, the insertion point will be after (to the
* right of) any existing entries. The return value is suitable for use as
* the first parameter to Array.splice() assuming that `a` is already sorted.
*
* This is part of Python's algorithm of the `bisectRight` function.
*
* @throws {Error} if `lo` is negative number
*/
function bisect(a, x, lo = 0, hi) {
if (lo < 0)
throw Error('lo must be non-negative');
if (hi === undefined)
hi = a.length;
while (lo < hi) {
const mid = Math.floor((lo + hi) / 2);
if (x < a[mid]) {
hi = mid;
}
else {
lo = mid + 1;
}
}
return lo;
}
exports.bisect = bisect;
+5
View File
@@ -0,0 +1,5 @@
/**
* Take two (non-complex) numbers as arguments and return a pair of numbers
* consisting of their quotient and remainder when using integer division.
*/
export declare function divmod(a: number, b: number): number[];
+11
View File
@@ -0,0 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.divmod = void 0;
/**
* Take two (non-complex) numbers as arguments and return a pair of numbers
* consisting of their quotient and remainder when using integer division.
*/
function divmod(a, b) {
return [Math.floor(a / b), a % b];
}
exports.divmod = divmod;
+6
View File
@@ -0,0 +1,6 @@
import { DateType } from './_lib/types';
/**
* Return Hijri object for the corresponding Gregorian date.
* @throws {Error} when date is out of supported Gregorian range.
*/
export declare function gregorianToHijri(date: DateType): DateType;
+56
View File
@@ -0,0 +1,56 @@
"use strict";
/*
* This file contains modifications to code from https://github.com/mhalshehri/hijri-converter
* that is licensed under the MIT license.
*
* Copyright (c) 2018 Mohammed H Alshehri (@mhalshehri) and contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the 'Software'), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software.
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* This modified version of the Software is also licensed under the MIT license,
* and is subject to the same conditions as the original version of the Software.
*
* Copyright (c) 2023 Tabby FZ-LLC
*
* A copy of the license can be found in the LICENSE file at the root of this
* distribution.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.gregorianToHijri = void 0;
const checkDateRange_1 = require("./_lib/checkDateRange");
const dateHelpersHijri_1 = require("./_lib/dateHelpersHijri");
const julianDayHelpers_1 = require("./_lib/julianDayHelpers");
const bisect_1 = require("./_lib/utils/bisect");
const ummalqura_1 = require("./_lib/ummalqura");
/**
* Return Hijri object for the corresponding Gregorian date.
* @throws {Error} when date is out of supported Gregorian range.
*/
function gregorianToHijri(date) {
(0, checkDateRange_1.checkGregorianRange)(date);
const jdn = (0, dateHelpersHijri_1.gregorianToJulian)(date);
const rjd = (0, julianDayHelpers_1.jdnToRjd)(jdn);
const index = (0, bisect_1.bisect)(ummalqura_1.MONTH_STARTS, rjd) - 1;
const months = index + ummalqura_1.HIJRI_OFFSET;
const years = Math.floor(months / 12);
const year = years + 1;
const month = months - years * 12 + 1;
const day = rjd - ummalqura_1.MONTH_STARTS[index] + 1;
return { year, month, day };
}
exports.gregorianToHijri = gregorianToHijri;
+6
View File
@@ -0,0 +1,6 @@
import { DateType } from './_lib/types';
/**
* Return Gregorian object for the corresponding Hijri date.
* @throws {Error} when date is out of supported Hijri range.
*/
export declare function hijriToGregorian(date: DateType): DateType;
+48
View File
@@ -0,0 +1,48 @@
"use strict";
/*
* This file contains modifications to code from https://github.com/mhalshehri/hijri-converter
* that is licensed under the MIT license.
*
* Copyright (c) 2018 Mohammed H Alshehri (@mhalshehri) and contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the 'Software'), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software.
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* This modified version of the Software is also licensed under the MIT license,
* and is subject to the same conditions as the original version of the Software.
*
* Copyright (c) 2023 Tabby FZ-LLC
*
* A copy of the license can be found in the LICENSE file at the root of this
* distribution.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.hijriToGregorian = void 0;
const checkDateRange_1 = require("./_lib/checkDateRange");
const dateHelpersHijri_1 = require("./_lib/dateHelpersHijri");
const julianDayHelpers_1 = require("./_lib/julianDayHelpers");
/**
* Return Gregorian object for the corresponding Hijri date.
* @throws {Error} when date is out of supported Hijri range.
*/
function hijriToGregorian(date) {
(0, checkDateRange_1.checkHijriRange)(date);
const jdn = (0, dateHelpersHijri_1.hijriToJulian)(date);
const don = (0, julianDayHelpers_1.jdnToOrdinal)(jdn);
return (0, dateHelpersHijri_1.gregorianFromOrdinal)(don);
}
exports.hijriToGregorian = hijriToGregorian;
+3
View File
@@ -0,0 +1,3 @@
import { gregorianToHijri } from './gregorianToHijri';
import { hijriToGregorian } from './hijriToGregorian';
export { gregorianToHijri, hijriToGregorian };
+7
View File
@@ -0,0 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.hijriToGregorian = exports.gregorianToHijri = void 0;
const gregorianToHijri_1 = require("./gregorianToHijri");
Object.defineProperty(exports, "gregorianToHijri", { enumerable: true, get: function () { return gregorianToHijri_1.gregorianToHijri; } });
const hijriToGregorian_1 = require("./hijriToGregorian");
Object.defineProperty(exports, "hijriToGregorian", { enumerable: true, get: function () { return hijriToGregorian_1.hijriToGregorian; } });