mirror of
https://github.com/acamarata/solar-spa.git
synced 2026-06-30 19:04:28 +00:00
Complete rewrite of the package from plain JavaScript to TypeScript, compiled to dual CJS/ESM via tsup. The NREL SPA C source is recompiled to WASM with Emscripten using SINGLE_FILE base64 inlining, eliminating bundler path-resolution issues. Changes: - Rewrite JS wrapper in TypeScript with full type definitions - Recompile WASM with -O3 -flto, 1MB fixed memory, no filesystem - Add input validation with descriptive error messages - Add spaFormatted() for HH:MM:SS time strings - Add formatTime() utility and init() for eager WASM loading - Add SPA_ZA, SPA_ZA_INC, SPA_ZA_RTS, SPA_ALL function code exports - Dual CJS/ESM output via tsup with proper exports map - Test suite: 68 ESM + 13 CJS assertions - 100-scenario validation suite across 7 categories - GitHub Wiki with 8 documentation pages - CI workflow: Node 20/22/24 matrix, typecheck, pack-check - NREL attribution in LICENSE and README per their license terms - Minimum Node.js 20
74 lines
2.1 KiB
JSON
74 lines
2.1 KiB
JSON
{
|
|
"name": "solar-spa",
|
|
"version": "2.0.0",
|
|
"description": "NREL Solar Position Algorithm (SPA) compiled to WebAssembly. High-performance solar position, sunrise, sunset, and solar noon calculations.",
|
|
"author": "Aric Camarata",
|
|
"license": "MIT",
|
|
"main": "./dist/index.cjs",
|
|
"module": "./dist/index.mjs",
|
|
"types": "./dist/index.d.ts",
|
|
"exports": {
|
|
".": {
|
|
"import": {
|
|
"types": "./dist/index.d.mts",
|
|
"default": "./dist/index.mjs"
|
|
},
|
|
"require": {
|
|
"types": "./dist/index.d.ts",
|
|
"default": "./dist/index.cjs"
|
|
}
|
|
}
|
|
},
|
|
"sideEffects": false,
|
|
"files": [
|
|
"dist/",
|
|
"wasm/",
|
|
"README.md",
|
|
"CHANGELOG.md",
|
|
"LICENSE"
|
|
],
|
|
"scripts": {
|
|
"build:wasm": "emcc src/spa.c src/spa_wrapper.c -O3 -flto --no-entry -sMODULARIZE=1 -sEXPORT_NAME=createSpaModule -sSINGLE_FILE=1 -sEXPORTED_FUNCTIONS='[\"_spa_calculate_wrapper\",\"_spa_free_result\",\"_malloc\",\"_free\"]' -sEXPORTED_RUNTIME_METHODS='[\"cwrap\",\"getValue\"]' -sALLOW_MEMORY_GROWTH=0 -sINITIAL_MEMORY=1048576 -sSTACK_SIZE=65536 -sENVIRONMENT='node,web,worker' -sNO_FILESYSTEM=1 -sASSERTIONS=0 -sDISABLE_EXCEPTION_CATCHING=1 -sWASM_BIGINT=0 -o wasm/spa-module.js",
|
|
"build:ts": "tsup",
|
|
"build": "pnpm run build:wasm && pnpm run build:ts",
|
|
"typecheck": "tsc --noEmit",
|
|
"pretest": "pnpm run build:ts",
|
|
"test": "node test.mjs && node test-cjs.cjs",
|
|
"validate": "node validate.mjs",
|
|
"prepublishOnly": "pnpm run build:ts"
|
|
},
|
|
"keywords": [
|
|
"solar",
|
|
"spa",
|
|
"nrel",
|
|
"wasm",
|
|
"webassembly",
|
|
"sunrise",
|
|
"sunset",
|
|
"solar-noon",
|
|
"zenith",
|
|
"azimuth",
|
|
"solar-position",
|
|
"astronomy"
|
|
],
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/acamarata/solar-spa.git"
|
|
},
|
|
"homepage": "https://github.com/acamarata/solar-spa#readme",
|
|
"bugs": {
|
|
"url": "https://github.com/acamarata/solar-spa/issues"
|
|
},
|
|
"engines": {
|
|
"node": ">=20"
|
|
},
|
|
"publishConfig": {
|
|
"access": "public",
|
|
"registry": "https://registry.npmjs.org/"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^25.3.0",
|
|
"tsup": "^8.5.1",
|
|
"typescript": "^5.9.3"
|
|
}
|
|
}
|