diff --git a/package.json b/package.json index c5fbbef..0eef415 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "solar-spa", - "version": "1.2.3", + "version": "1.2.4", "description": "NREL Solar Position Algorithm (SPA) in WebAssembly", "main": "solar-spa.js", "types": "index.d.ts", diff --git a/solar-spa.js b/solar-spa.js index 7bba5e8..a59ccde 100644 --- a/solar-spa.js +++ b/solar-spa.js @@ -1,4 +1,5 @@ -const spaModuleFactory = require('./spa.js'); +// solar-spa.js +const spaModule = require('./spa.js'); module.exports = function spa( date, @@ -9,58 +10,53 @@ module.exports = function spa( pressure = 1013.25, refraction = 0.5667 ) { - return new Promise((resolve, reject) => { - const spaModule = spaModuleFactory({ - onRuntimeInitialized: () => { - const spa_calculate = spaModule.cwrap( - 'spa_calculate_wrapper', - 'number', - [ - 'number', 'number', 'number', 'number', 'number', - 'number', 'number', 'number', 'number', 'number', - 'number', 'number', 'number', 'number', 'number' - ] - ); + return new Promise((resolve) => { + spaModule.onRuntimeInitialized = function () { + const spa_calculate = spaModule.cwrap( + 'spa_calculate_wrapper', + 'number', + [ + 'number', 'number', 'number', 'number', 'number', + 'number', 'number', 'number', 'number', 'number', + 'number', 'number', 'number', 'number', 'number' + ] + ); - const spa_free_result = spaModule.cwrap( - 'spa_free_result', - null, - ['number'] - ); + const spa_free_result = spaModule.cwrap( + 'spa_free_result', + null, + ['number'] + ); - const year = date.getFullYear(); - const month = date.getMonth() + 1; - const day = date.getDate(); - const hour = date.getHours(); - const minute = date.getMinutes(); - const second = date.getSeconds(); - const timezone = -date.getTimezoneOffset() / 60; - const slope = 0; - const azm_rotation = 0; + const year = date.getFullYear(); + const month = date.getMonth() + 1; + const day = date.getDate(); + const hour = date.getHours(); + const minute = date.getMinutes(); + const second = date.getSeconds(); + const timezone = -date.getTimezoneOffset() / 60; + const slope = 0; + const azm_rotation = 0; - const resultPtr = spa_calculate( - year, month, day, hour, minute, second, timezone, - latitude, longitude, elevation, pressure, temperature, - slope, azm_rotation, refraction - ); + const resultPtr = spa_calculate( + year, month, day, hour, minute, second, timezone, + latitude, longitude, elevation, pressure, temperature, + slope, azm_rotation, refraction + ); - const result = { - zenith: spaModule.getValue(resultPtr, 'double'), - azimuth: spaModule.getValue(resultPtr + 8, 'double'), - incidence: spaModule.getValue(resultPtr + 16, 'double'), - sunrise: spaModule.getValue(resultPtr + 24, 'double'), - sunset: spaModule.getValue(resultPtr + 32, 'double'), - solar_noon: spaModule.getValue(resultPtr + 40, 'double'), - sun_transit_alt: spaModule.getValue(resultPtr + 48, 'double'), - }; + const result = { + zenith: spaModule.getValue(resultPtr, 'double'), + azimuth: spaModule.getValue(resultPtr + 8, 'double'), + incidence: spaModule.getValue(resultPtr + 16, 'double'), + sunrise: spaModule.getValue(resultPtr + 24, 'double'), + sunset: spaModule.getValue(resultPtr + 32, 'double'), + solar_noon: spaModule.getValue(resultPtr + 40, 'double'), + sun_transit_alt: spaModule.getValue(resultPtr + 48, 'double'), + }; - spa_free_result(resultPtr); + spa_free_result(resultPtr); - resolve(result); - }, - }); - if (spaModule.calledRun) { - spaModule.onRuntimeInitialized(); - } + resolve(result); + }; }); };