moon-cycle/CHANGELOG.md
Aric Camarata 24db90e9f5 feat: v2.0.0 — TypeScript rewrite, npm-publishable, off-by-one fix
Port to TypeScript with dual CJS/ESM build via tsup. Fix off-by-one bug
in both cycleMonth and cycleYear (images are 1-indexed; v1 returned
000.webp/0000.webp which don't exist). Add imageFolder and cdnUrl helpers
for jsDelivr CDN integration. Export constants and types. Separate the
~438 MB image dataset from the npm package via the files field, making
moon-cycle publishable to npm for the first time. Add CI workflow with
Node 20/22/24 matrix, typecheck, and pack-check jobs. Add wiki-sync
workflow and full .wiki/ documentation (Home, API Reference, Architecture,
Migration Guide).
2026-02-25 15:34:10 -05:00

2.8 KiB

Changelog

All notable changes to this project will be documented in this file. Format follows Keep a Changelog.

[2.0.0] - 2025-02-25

Added

  • TypeScript source (src/) with full type definitions — dual CJS and ESM builds via tsup
  • imageFolder(set, size, quality) helper to construct image directory names
  • cdnUrl(filename, set, size, quality, ref?) helper to generate jsDelivr CDN URLs, enabling image serving without self-hosting the ~438 MB dataset
  • Exported constants: SYNODIC_MONTH, MONTH_IMAGES, YEAR_IMAGES, MONTH_ANCHOR, YEAR_ANCHOR
  • Exported types: ImageSet, ImageSize, ImageQuality
  • Dual ESM and CJS builds with .mjs / .cjs extensions and matching .d.ts / .d.mts type definitions
  • Proper exports map in package.json (types-first conditional exports)
  • test.mjs and test-cjs.cjs — full assertion-based test suites covering bounds, anchor dates, edge cases, and all exported functions
  • GitHub Actions CI workflow: Node 20/22/24 test matrix, typecheck job, pack-check job
  • GitHub Actions wiki-sync workflow: syncs .wiki/ to GitHub Wiki on push to main
  • .wiki/ documentation: Home, API Reference, Architecture, Migration Guide
  • .nvmrc, .editorconfig, .npmrc, pnpm-workspace.yaml

Changed

  • Package is now npm-publishable: files field restricts the npm package to dist/, README, LICENSE, and CHANGELOG — images are excluded
  • package.json fully updated: correct author name, accurate description, engines, sideEffects, publishConfig, repository.url with git+https:// prefix, expanded keywords
  • repository.url corrected to use git+https:// prefix per npm convention

Fixed

  • Off-by-one bug in both algorithms. The v1 implementation mapped dates to 0-indexed filenames (000.webp to 707.webp monthly, 0000.webp to 8759.webp yearly). The image dataset is 1-indexed (001.webp to 708.webp, 0001.webp to 8760.webp). Both functions now return the correct 1-indexed filename. This is a breaking change for anyone who was working around the bug or had a local image set starting at 000.webp.
  • TypeScript definitions in index.d.ts were incorrect — both functions were typed as returning { result: string } instead of string. The new generated types are accurate.

Removed

  • index.js, cycleMonth.js, cycleYear.js — replaced by src/ TypeScript source and dist/ build output
  • index.d.ts — replaced by generated dist/index.d.ts and dist/index.d.mts
  • test.js — replaced by test.mjs and test-cjs.cjs

[1.0.1] - 2023-11-14

  • Minor repository metadata updates

[1.0.0] - 2023-11-14

  • Initial release: cycleMonth and cycleYear functions, 708 monthly and 8,760 yearly NASA moon phase images in WebP format