luxon-hijri
Version:
Hijri/Gregorian date conversion and formatting using the Umm al-Qura calendar. Built on Luxon. Supports toHijri, toGregorian, formatHijriDate, and isValidHijriDate.
165 lines (156 loc) • 5.44 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
formatHijriDate: () => formatHijriDate,
formatPatterns: () => formatPatterns,
hDatesTable: () => import_hijri_core.hDatesTable,
hmLong: () => import_hijri_core2.hmLong,
hmMedium: () => import_hijri_core2.hmMedium,
hmShort: () => import_hijri_core2.hmShort,
hwLong: () => import_hijri_core3.hwLong,
hwNumeric: () => import_hijri_core3.hwNumeric,
hwShort: () => import_hijri_core3.hwShort,
isValidHijriDate: () => import_hijri_core6.isValidHijriDate,
toGregorian: () => toGregorian,
toHijri: () => import_hijri_core5.toHijri
});
module.exports = __toCommonJS(index_exports);
// src/formatPatterns.ts
var formatPatterns = {
// Hijri Year
iYYYY: "Hijri year (4 digits)",
iYY: "Hijri year (2 digits)",
// Hijri Month
iMM: "Hijri month (2 digits, zero-padded)",
iM: "Hijri month (1 or 2 digits without zero-padding)",
iMMM: "Hijri month (abbreviated name)",
iMMMM: "Hijri month (full name)",
// Hijri Day
iDD: "Hijri day of the month (2 digits, zero-padded)",
iD: "Hijri day of the month (1 or 2 digits without zero-padding)",
// Hijri Weekday
iE: "Hijri weekday (1 digit)",
iEEE: "Hijri weekday (abbreviated name)",
iEEEE: "Hijri weekday (full name)",
// Hour, Minute, Second
// These can remain the same as in Gregorian as they don’t change in Hijri
HH: "Hour (2 digits, zero-padded, 24-hour clock)",
H: "Hour (1 or 2 digits without zero-padding, 24-hour clock)",
hh: "Hour (2 digits, zero-padded, 12-hour clock)",
h: "Hour (1 or 2 digits without zero-padding, 12-hour clock)",
mm: "Minute (2 digits, zero-padded)",
m: "Minute (1 or 2 digits without zero-padding)",
ss: "Second (2 digits, zero-padded)",
s: "Second (1 or 2 digits without zero-padding)",
// AM/PM
a: "AM/PM marker",
// Other
iooo: "Hijri era (abbreviated)",
ioooo: "Hijri era (full)",
// Timezone
z: "Timezone (abbreviated)",
zz: "Timezone (medium)",
zzz: "Timezone (full)",
Z: "Timezone offset from UTC (+HH:MM)",
ZZ: "Timezone offset from UTC (condensed)"
};
// src/hDates.ts
var import_hijri_core = require("hijri-core");
// src/hMonths.ts
var import_hijri_core2 = require("hijri-core");
// src/hWeekdays.ts
var import_hijri_core3 = require("hijri-core");
// src/toGregorian.ts
var import_hijri_core4 = require("hijri-core");
function toGregorian(hy, hm, hd, options) {
const result = (0, import_hijri_core4.toGregorian)(hy, hm, hd, options);
if (result === null) throw new Error("Invalid Hijri date");
return result;
}
// src/toHijri.ts
var import_hijri_core5 = require("hijri-core");
// src/formatHijriDate.ts
var import_luxon = require("luxon");
var TOKEN_RE = /iYYYY|iYY|iMMMM|iMMM|iMM|iM|iDD|iD|iEEEE|iEEE|iE|ioooo|iooo|HH|H|hh|h|mm|m|ss|s|a|z{1,3}|ZZ|Z/g;
function formatHijriDate(hijriDate, format) {
if (hijriDate.hm < 1 || hijriDate.hm > 12) {
throw new RangeError(`Hijri month must be 1-12, got ${hijriDate.hm}`);
}
let _gregDt;
function getGregDt() {
if (!_gregDt) {
const greg = toGregorian(hijriDate.hy, hijriDate.hm, hijriDate.hd);
_gregDt = import_luxon.DateTime.fromJSDate(greg, { zone: "UTC" });
}
return _gregDt;
}
return format.replace(TOKEN_RE, (match) => {
switch (match) {
case "iYYYY":
return String(hijriDate.hy).padStart(4, "0");
case "iYY":
return String(hijriDate.hy % 100).padStart(2, "0");
case "iMM":
return String(hijriDate.hm).padStart(2, "0");
case "iM":
return String(hijriDate.hm);
case "iMMM":
return import_hijri_core2.hmMedium[hijriDate.hm - 1];
case "iMMMM":
return import_hijri_core2.hmLong[hijriDate.hm - 1];
case "iDD":
return String(hijriDate.hd).padStart(2, "0");
case "iD":
return String(hijriDate.hd);
case "iE":
case "iEEE":
case "iEEEE": {
const idx = getGregDt().weekday % 7;
if (match === "iE") return String(import_hijri_core3.hwNumeric[idx]);
if (match === "iEEE") return import_hijri_core3.hwShort[idx];
return import_hijri_core3.hwLong[idx];
}
case "iooo":
case "ioooo":
return "AH";
default:
return getGregDt().toFormat(match);
}
});
}
// src/utils.ts
var import_hijri_core6 = require("hijri-core");
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
formatHijriDate,
formatPatterns,
hDatesTable,
hmLong,
hmMedium,
hmShort,
hwLong,
hwNumeric,
hwShort,
isValidHijriDate,
toGregorian,
toHijri
});
//# sourceMappingURL=index.cjs.map