mirror of
https://github.com/acamarata/nrel-spa.git
synced 2026-07-01 11:24:25 +00:00
4.1 KiB
4.1 KiB
Changelog
[2.0.1] - 2026-02-25
Fixed
- Runtime crash:
calcSpa(... , [])with an empty angles array no longer crashes. The empty-array guard is now consistent betweengetSpaandcalcSpa. - Silent wrong output:
getSpawithoptions.function: SPA_ZAorSPA_ZA_INCnow returnsNaNforsunrise,solarNoon, andsunsetinstead of silently returning0.calcSpareturns"N/A"for those fields. The zero values were misleading: those fields are never computed by non-RTS function codes. lib/spa.jsinternal file header corrected from// dist/spa.jsto// lib/spa.js.wiki-sync.yml: workflow now handles first-run initialization when the GitHub Wiki repository does not yet exist. Replacesactions/checkout@v4for the wiki step with agit clone || git initpattern.- Removed
package-import-method=hardlinkfrom.npmrc: it is pnpm's default since v7 and causednpm warn Unknown project configbecause npm reads.npmrctoo. - CI pack-check grep now uses a word-boundary pattern, preventing false matches on files with similar prefixes.
Added
- Validation:
options.functionis now validated before the SPA calculation. Passing an invalid function code throws a descriptiveRangeErrorinstead of silently producing wrong results. - Validation: Passing custom
angleswith a non-RTS function code (SPA_ZAorSPA_ZA_INC) now throwsRangeError. Custom angle calculations requiresuntransit, which is only computed bySPA_ZA_RTSandSPA_ALL. - TypeScript function overloads for
getSpaandcalcSpa: theanglesparameter is typed as[number, ...number[]](non-empty tuple), so TypeScript rejects empty arrays at compile time and narrows the return type automatically. SpaFormattedAnglesResultinterface for the formatted angles array, consistent with the existingSpaAnglesResultinterface on the raw side.- CI workflows now declare explicit
permissions: contents: readon all jobs. - API Reference wiki updated: inline anonymous types replaced with named
SpaAnglesResultandSpaFormattedAnglesResultinterfaces; new Named Types import block added;anglesparameter type and new throws documented. - Architecture wiki updated to document all exported interfaces from
src/types.ts.
[2.0.0] - 2026-02-25
Added
- TypeScript wrapper (
src/index.ts,src/types.ts) with full type definitions - Dual CJS and ESM builds via tsup (
dist/index.cjs,dist/index.mjs) - TypeScript declaration files (
dist/index.d.ts,dist/index.d.mts) formatTime()utility export for converting fractional hours toHH:MM:SS- Input validation with descriptive
TypeErrorandRangeErrormessages - Function code exports:
SPA_ZA,SPA_ZA_INC,SPA_ZA_RTS,SPA_ALL - Test suite: 61 ESM assertions and 17 CJS assertions
- GitHub Actions CI workflow (Node 20/22/24 matrix, typecheck, pack-check)
- GitHub Wiki with architecture, API reference, twilight calculations, and algorithm documentation
- NREL attribution in
LICENSEandREADME pnpm-workspace.yaml,.editorconfig,.npmrc,.nvmrcconfig files
Changed
- Core algorithm moved from
dist/spa.jstolib/spa.js(same code, clearer location) package.jsonrewritten: properexportsmap,files,engines,sideEffects, all required fields- Author corrected to "Aric Camarata"
repository.urlcorrected to usegit+https://prefix (no npm publish warnings)engines.nodeset to>=20- Description expanded with full keyword coverage
- LICENSE year corrected to
2023-2026 - README rewritten with badges, full API tables, quick start, and NREL acknowledgments
[1.3.0] - 2025-05-04
- Major fix for discrepancies between this implementation and the original NREL C reference
- Added
bin/folder for compiling and testing against the C reference executable - All 10 global test cases now produce identical output to the C reference
[1.2.2] - 2023-11-12
- Moved timezone to main function arguments and changed default behavior
- Updated test cases and README
[1.1.0] - 2023-11-11
- Committed
dist/folder (core algorithm) to git
[1.0.0] - 2023-11-11
- Initial release