From e0faeadcde43564f89778a07aa520bd9edf4baff Mon Sep 17 00:00:00 2001 From: Ali Camarata Date: Tue, 4 Apr 2023 21:01:46 -0400 Subject: [PATCH] Bug fix --- .DS_Store | Bin 6148 -> 6148 bytes package.json | 2 +- solar-spa.js | 108 +++++++++++++++++++++++++-------------------------- 3 files changed, 53 insertions(+), 57 deletions(-) diff --git a/.DS_Store b/.DS_Store index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..9a874b5768f336915163bb88cd434575b859f936 100644 GIT binary patch delta 72 zcmZoMXfc?eJ=s8n#ekWin4yRvIi)x`Cn-Nahmipan4mOB0Eh(`pz<3Nm$6UQ6JguT I&GC~T02$#9#Q*>R delta 51 vcmZoMXfc?e&B4IH0LBv&MFg0D92j6^U=Y}txQu;b0oP;$5thx|96$L1$0-Qd diff --git a/package.json b/package.json index 300394b..c5fbbef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "solar-spa", - "version": "1.2.2", + "version": "1.2.3", "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 985d45a..7bba5e8 100644 --- a/solar-spa.js +++ b/solar-spa.js @@ -1,10 +1,4 @@ -const spaModule = require('./spa.js'); - -let isRuntimeInitialized = false; - -spaModule.onRuntimeInitialized = function () { - isRuntimeInitialized = true; -}; +const spaModuleFactory = require('./spa.js'); module.exports = function spa( date, @@ -16,55 +10,57 @@ module.exports = function spa( refraction = 0.5667 ) { return new Promise((resolve, reject) => { - if (!isRuntimeInitialized) { - reject(new Error('Emscripten runtime is not initialized.')); - return; + 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' + ] + ); + + 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 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'), + }; + + spa_free_result(resultPtr); + + resolve(result); + }, + }); + if (spaModule.calledRun) { + spaModule.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' - ] - ); - - 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 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'), - }; - - spa_free_result(resultPtr); - - resolve(result); }); };