Commit graph

6 commits

Author SHA1 Message Date
Aric Camarata
344525a7af ci: let pnpm/action-setup read version from packageManager field 2026-03-08 16:52:28 -04:00
Aric Camarata
124297bc60 ci: pin pnpm to version 10 in all CI jobs
Also enable sourcemap: true in tsup config
2026-03-08 16:37:35 -04:00
Aric Camarata
cc620328a0 refactor: code quality improvements across the board 2026-03-08 11:42:29 -04:00
Aric Camarata
20dc36541b feat: v2.1.0 - delegate engine to hijri-core
Extract conversion logic to hijri-core. All Hijri algorithms now
live in that package and are re-exported with identical signatures.
Fix weekday, era, and time token bugs. Dual CJS/ESM build. Full
test suite. CI and wiki workflows. Zero breaking API changes.
2026-02-25 15:26:28 -05:00
Aric Camarata
8b734dd777 ci: pin pnpm via packageManager field, drop hardcoded version
pnpm/action-setup@v4 with version:10 resolved to pnpm@10.30.2, which
returned 403 from npm registry on release day. Switch to reading the
version from the packageManager field in package.json so CI uses the
same exact pnpm version as local development.
2026-02-25 14:00:19 -05:00
Aric Camarata
1ab6463184 feat: v2.0.0 — FCNA calendar, dual ESM/CJS build, weekday bug fix, full test suite
Core fixes:
- Fix critical weekday bug: iE/iEEE/iEEEE tokens used Hijri year as Gregorian,
  returning weekdays ~580 years wrong. Now converts via toGregorian() first.
- Fix era tokens iooo/ioooo: were returning Gregorian era, now always return "AH".
- Fix toGregorian timezone sensitivity: was using DateTime.local(), now DateTime.utc().
- Fix format token regex: word-boundary approach caused partial matches.

New: FCNA/ISNA calendar support:
- toHijri, toGregorian, isValidHijriDate now accept { calendar: 'fcna' } option.
- FCNA criterion: conjunction before 12:00 UTC → month starts D+1, else D+2.
- New moon times from Meeus Ch.49 full formula (accurate to within minutes, 1000–3000 CE).
- Works for all Hijri years, not just the 1318–1500 UAQ table range.
- Anchor: UAQ table for in-range years, Islamic epoch estimate for out-of-range.
- Exports: CalendarSystem, ConversionOptions types.

Build and infrastructure:
- pnpm replaces npm; tsup replaces tsc for dual CJS/ESM output.
- Exports map with types-first conditional exports for import/require.
- Binary search O(log 183) replaces linear O(n) scan in all three functions.
- Luxon upgraded from ^2.5.2 to ^3.5.0; TypeScript from ^4 to ^5.5.
- CI: Node 20/22/24 matrix, typecheck, and pack-check jobs.
- GitHub Wiki: four pages synced via Actions on push.
- Test suite: 81 ESM tests + 24 CJS tests, verified against ISNA 2023–2025 calendars.
- Exports hwLong, hwShort, hwNumeric weekday arrays.

Breaking changes:
- Dual ESM/CJS exports map (CJS consumers: no change via main field).
- HijriYearRecord replaces hDates interface name.
- Luxon peer dep bumped to ^3.5.0.
- Node >=20 required.
2026-02-25 13:25:11 -05:00