mirror of
https://github.com/acamarata/hijri-core.git
synced 2026-06-30 18:54:27 +00:00
Bug: uaqToHijri read local date components (getFullYear/getMonth/getDate) and passed them to Date.UTC(), producing a UTC midnight that does not match the input's intended Gregorian day on hosts west of UTC. Concretely, a Date returned by toGregorian() (UTC midnight) would map to the *previous* Hijri day on UTC-5 or UTC-13 hosts, breaking the toHijri(toGregorian(hy,hm,hd)) round-trip. Fix: switch line 44 to read UTC components (getUTCFullYear/getUTCMonth/ getUTCDate), matching how the FCNA engine already worked. Both engines now share the same UTC-day contract: toHijri reads the UTC calendar day of the input, and toGregorian returns a UTC-midnight Date. Round-trips are exact; results are host-timezone-independent. Behavior change: on non-UTC hosts, toHijri results may shift to the UTC calendar day rather than the local calendar day. Users passing local wall-clock dates should use new Date(Date.UTC(y, m-1, d)). Also: - Fix misleading comment in uaqToHijri (previously claimed local components were "timezone-safe") - Add UTC-day contract to toHijri JSDoc in src/index.ts - Fix wrong constraint comment in hijri-core.test.ts header - Add "day boundaries (UTC contract)" describe block to vitest suite - Convert LOCAL Date constructors in test.mjs and test-cjs.cjs to Date.UTC() form; add UAQ round-trip assertion to test.mjs - Add "Day boundaries and time zones" section to README.md - Add [Unreleased] Fixed entry to CHANGELOG.md
91 lines
2.4 KiB
JSON
91 lines
2.4 KiB
JSON
{
|
|
"name": "hijri-core",
|
|
"version": "1.0.2",
|
|
"description": "Zero-dependency Hijri calendar engine with pluggable calendar support. Includes Umm al-Qura (UAQ) and FCNA/ISNA calendars. Extensible registry for custom calendars.",
|
|
"author": "Aric Camarata",
|
|
"license": "MIT",
|
|
"main": "./dist/index.cjs",
|
|
"module": "./dist/index.mjs",
|
|
"types": "./dist/index.d.ts",
|
|
"exports": {
|
|
".": {
|
|
"types": "./dist/index.d.ts",
|
|
"import": "./dist/index.mjs",
|
|
"require": "./dist/index.cjs"
|
|
},
|
|
"./package.json": "./package.json"
|
|
},
|
|
"sideEffects": false,
|
|
"files": [
|
|
"dist/index.cjs",
|
|
"dist/index.mjs",
|
|
"dist/index.d.ts",
|
|
"dist/index.d.mts",
|
|
"README.md",
|
|
"CHANGELOG.md",
|
|
"LICENSE"
|
|
],
|
|
"engines": {
|
|
"node": ">=20"
|
|
},
|
|
"packageManager": "pnpm@10.30.1",
|
|
"scripts": {
|
|
"build": "tsup",
|
|
"typecheck": "tsc --noEmit",
|
|
"pretest": "tsup",
|
|
"test": "node --test test.mjs && node --test test-cjs.cjs",
|
|
"prepublishOnly": "tsup",
|
|
"lint": "eslint .",
|
|
"format": "prettier --write src/",
|
|
"format:check": "prettier --check src/",
|
|
"coverage": "c8 --reporter=lcov --reporter=text node test.mjs",
|
|
"docs": "typedoc --out .github/wiki/api src/index.ts",
|
|
"postbuild": "cp dist/index.d.ts dist/index.d.mts",
|
|
"test:vitest": "vitest run"
|
|
},
|
|
"keywords": [
|
|
"hijri",
|
|
"islamic",
|
|
"calendar",
|
|
"umm-al-qura",
|
|
"uaq",
|
|
"fcna",
|
|
"isna",
|
|
"gregorian",
|
|
"converter",
|
|
"typescript"
|
|
],
|
|
"devDependencies": {
|
|
"@acamarata/eslint-config": "^0.1.0",
|
|
"@acamarata/prettier-config": "^0.1.0",
|
|
"@acamarata/tsconfig": "^0.1.0",
|
|
"@eslint/js": "^10.0.1",
|
|
"@types/node": "^22.15.0",
|
|
"@typescript-eslint/eslint-plugin": "^8.56.1",
|
|
"@typescript-eslint/parser": "^8.56.1",
|
|
"c8": "^10.1.0",
|
|
"eslint": "^10.0.3",
|
|
"eslint-config-prettier": "^10.1.8",
|
|
"prettier": "^3.8.1",
|
|
"tsup": "^8.0.0",
|
|
"typedoc": "^0.28.19",
|
|
"typedoc-plugin-markdown": "^4.11.0",
|
|
"typescript": "^5.5.0",
|
|
"typescript-eslint": "^8.56.1",
|
|
"vitest": "^2.1.9"
|
|
},
|
|
"publishConfig": {
|
|
"access": "public",
|
|
"registry": "https://registry.npmjs.org/"
|
|
},
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/acamarata/hijri-core.git"
|
|
},
|
|
"homepage": "https://github.com/acamarata/hijri-core#readme",
|
|
"bugs": {
|
|
"url": "https://github.com/acamarata/hijri-core/issues"
|
|
},
|
|
"type": "module",
|
|
"prettier": "@acamarata/prettier-config"
|
|
}
|