Commit graph

7 commits

Author SHA1 Message Date
Aric Camarata
e663b343ac docs: add TypeDoc API generation (typedoc@0.28.19 + typedoc-plugin-markdown@4.11.0)
Add typedoc and typedoc-plugin-markdown as devDependencies. Add typedoc.json config
targeting src/index.ts with markdown output to .github/wiki/api. Add docs script to
package.json. Generate initial API reference pages.

Part of T-E8-03 — TypeDoc automation for all 12 JS/TS packages.
2026-05-30 16:41:58 -04:00
Aric Camarata
19dc465d7f chore: adopt shared config packages (tsconfig, eslint, prettier) 2026-05-30 15:08:47 -04:00
Aric Camarata
fd246b7a99 chore: ADR-007 peer-dep migration to luxon v3, CHANGELOG update (v3.0.0 BREAKING) 2026-05-28 13:46:05 -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
30afd3c8a7 feat: v2.1.0 — delegate engine logic to hijri-core
All Hijri conversion logic (UAQ table, FCNA algorithm, month/weekday
names, isValidHijriDate) now lives in hijri-core and is re-exported
from this package with identical signatures. Zero breaking changes:
the public API surface, type exports, and behavior are unchanged.

src/fcna.ts removed — FCNA engine is in hijri-core.
src/hDates.ts, hMonths.ts, hWeekdays.ts, utils.ts, toHijri.ts,
toGregorian.ts all rewritten as thin re-exports or single-line wrappers.

hijri-core added as a runtime dependency.
2026-02-25 14:14:29 -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