No description
Find a file
Aric Camarata 6aabd304b0 ci: fix coverage corepack order, eslint parser devDeps, pack-check d.mts
- Move corepack enable before actions/setup-node in coverage job
- Add @typescript-eslint/parser and @typescript-eslint/eslint-plugin as direct devDeps
- Add files pattern and parserOptions.project to eslint.config.mjs
- Change build:ts to cp dist/index.d.ts dist/index.d.mts so pack-check passes
- Run prettier format on src/ files
2026-05-31 08:46:54 -04:00
.github ci: fix coverage corepack order, eslint parser devDeps, pack-check d.mts 2026-05-31 08:46:54 -04:00
src ci: fix coverage corepack order, eslint parser devDeps, pack-check d.mts 2026-05-31 08:46:54 -04:00
wasm feat(e6): portfolio polish — docs, CI, TypeScript standard, wiki 2026-05-28 13:59:50 -04:00
.editorconfig v2.0.0: TypeScript rewrite with WASM recompilation 2026-02-25 10:35:24 -05:00
.gitignore refactor: code quality improvements across the board 2026-03-08 11:33:21 -04:00
.npmrc Remove pnpm-specific .npmrc setting that causes npm warning 2026-02-25 11:17:19 -05:00
.nvmrc v2.0.0: TypeScript rewrite with WASM recompilation 2026-02-25 10:35:24 -05:00
CHANGELOG.md release: v2.0.2 — P1 standardization 2026-05-30 19:12:24 -04:00
eslint.config.mjs ci: fix coverage corepack order, eslint parser devDeps, pack-check d.mts 2026-05-31 08:46:54 -04:00
LICENSE v2.0.0: TypeScript rewrite with WASM recompilation 2026-02-25 10:35:24 -05:00
package.json ci: fix coverage corepack order, eslint parser devDeps, pack-check d.mts 2026-05-31 08:46:54 -04:00
pnpm-lock.yaml ci: fix coverage corepack order, eslint parser devDeps, pack-check d.mts 2026-05-31 08:46:54 -04:00
pnpm-workspace.yaml v2.0.0: TypeScript rewrite with WASM recompilation 2026-02-25 10:35:24 -05:00
README.md chore: refresh CI workflow + TypeDoc wiki (E5 conformance) 2026-05-30 18:37:50 -04:00
test-cjs.cjs refactor: code quality improvements across the board 2026-03-08 11:33:21 -04:00
test.mjs refactor: code quality improvements across the board 2026-03-08 11:33:21 -04:00
tsconfig.json chore: adopt shared config packages (tsconfig, eslint, prettier) 2026-05-30 15:04:42 -04:00
tsup.config.ts feat(e6): portfolio polish — docs, CI, TypeScript standard, wiki 2026-05-28 13:59:50 -04:00
typedoc.json docs: add TypeDoc API generation (typedoc@0.28.19 + typedoc-plugin-markdown@4.11.0) 2026-05-30 16:41:57 -04:00
validate.mjs v2.0.0: TypeScript rewrite with WASM recompilation 2026-02-25 10:35:24 -05:00

solar-spa

npm version CI coverage license wiki

NREL Solar Position Algorithm compiled to WebAssembly. Calculates solar zenith, azimuth, incidence angle, sunrise, sunset, solar noon, and equation of time for any location and date. The WASM binary is inlined as base64, so there is no external .wasm file to locate. It works in Node.js, browsers, Webpack, Vite, Next.js, and web workers without configuration.

Installation

npm install solar-spa

Quick Start

import { spa } from 'solar-spa';

const result = await spa(
  new Date(2025, 5, 21, 12, 0, 0), // June 21, 2025 at noon
  40.7128,                           // latitude (NYC)
  -74.0060,                          // longitude
  { timezone: -4, elevation: 10 }    // EDT (UTC-4), 10m elevation
);

console.log(result.zenith);   // ~27   (degrees from vertical)
console.log(result.sunrise);  // ~5.4  (fractional hours)
console.log(result.sunset);   // ~20.5 (fractional hours)

CommonJS also works:

const { spa } = require('solar-spa');

TypeScript

import { spa, SPA_ALL } from 'solar-spa';
import type { SpaResult, SpaOptions } from 'solar-spa';

Documentation

See the Wiki for the full API reference, architecture notes, build flags, bundler compatibility, and validation benchmarks.

  • nrel-spa: Pure JavaScript port of the same algorithm. Synchronous, no WASM dependency.
  • pray-calc: Islamic prayer times built on nrel-spa.

Acknowledgments

This package includes the Solar Position Algorithm (SPA) developed at the National Renewable Energy Laboratory (NREL) by Ibrahim Reda and Afshin Andreas. The C source files spa.c and spa.h are copyright Alliance for Sustainable Energy, LLC (2008-2011).

Reda, I., Andreas, A. (2004). "Solar Position Algorithm for Solar Radiation Applications." Solar Energy, 76(5), 577-589.

License

MIT (wrapper, TypeScript source, and build tooling). The NREL SPA C source (src/spa.c, src/spa.h) is subject to its own terms; see the notice in those files.