From f3de3edcad190489fc7c5328d95eac49afa6e560 Mon Sep 17 00:00:00 2001 From: "Carlos E. Ugarte" Date: Fri, 19 Jan 2024 08:42:35 -0500 Subject: [PATCH 1/2] convert from common JS to ES6 --- .gitignore | 2 + clients/nodejs/Makefile | 5 +- clients/nodejs/sliderule/core.js | 22 +- clients/nodejs/sliderule/h5coro.js | 8 +- clients/nodejs/sliderule/icesat2.js | 64 +++-- clients/nodejs/sliderule/index.js | 17 +- clients/nodejs/sliderule/package-lock.json | 260 +++++++++--------- clients/nodejs/sliderule/package.json | 1 + .../sliderule/tests/uofmdtest.config.js | 2 + clients/nodejs/utils/main.js | 25 -- clients/nodejs/utils/main.mjs | 23 ++ 11 files changed, 234 insertions(+), 195 deletions(-) create mode 100644 clients/nodejs/sliderule/tests/uofmdtest.config.js delete mode 100644 clients/nodejs/utils/main.js create mode 100644 clients/nodejs/utils/main.mjs diff --git a/.gitignore b/.gitignore index 078537281..aa4f60786 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,5 @@ cscope.* compile_commands.json report.pdf report.xml +# infracost +.infracost/ diff --git a/clients/nodejs/Makefile b/clients/nodejs/Makefile index 33c189066..379ae997a 100644 --- a/clients/nodejs/Makefile +++ b/clients/nodejs/Makefile @@ -10,6 +10,9 @@ test-local: ## run unit tests against local running sliderule server test-developer: ## run unit tests against developers cluster cd sliderule; jest $(TEST) --setupFiles $(ROOT)/sliderule/tests/developer.config.js +test-uofmdtest: ## run unit tests against UofMDTest cluster in testsliderule.org domain + cd sliderule; jest $(TEST) --setupFiles $(ROOT)/sliderule/tests/uofmdtest.config.js + publish: ## publish package to npm registry cd sliderule; npm publish --access public @@ -30,4 +33,4 @@ distclean: ## fully remove all non-version controlled files and directories help: ## That's me! @grep -E '^[a-zA-Z_-].+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' - @echo ENVVER:$(ENVVER) \ No newline at end of file + @echo ROOT:$(ROOT) \ No newline at end of file diff --git a/clients/nodejs/sliderule/core.js b/clients/nodejs/sliderule/core.js index 3e10cfe7d..19a0b7554 100644 --- a/clients/nodejs/sliderule/core.js +++ b/clients/nodejs/sliderule/core.js @@ -27,9 +27,9 @@ // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -const https = require('https'); -const netrc = require('netrc'); -const pkg = require('./package.json') +import https from 'https'; +import netrc from 'netrc'; +import pkg from './package.json' assert { type: 'json' }; //------------------------------------ // File Data @@ -113,7 +113,7 @@ function populateDefinition(rec_type) { } else { return new Promise((resolve, reject) => { - exports.source("definition", {"rectype" : rec_type}).then( + source("definition", {"rectype" : rec_type}).then( result => { recordDefinitions[rec_type] = result; resolve(recordDefinitions[rec_type]); @@ -253,7 +253,7 @@ async function decodeRecord(rec_type, buffer, offset, rec_size) { // // parseResponse // -function parseResponse (response, resolve, reject, callbacks) { +function parseResponse(response, resolve, reject, callbacks) { // Check Response Code if (response.statusCode !== 200) { response.resume(); @@ -396,14 +396,14 @@ async function httpRequest(options, body, callbacks) { // // Initialize Client // -exports.init = (config) => { +export function init(config) { sysConfig = Object.assign(sysConfig, config) } // // Source Endpoint // -exports.source = (api, parm=null, stream=false, callbacks={}) => { +export function source(api, parm=null, stream=false, callbacks={}) { // Setup Request Options const options = { @@ -426,7 +426,7 @@ exports.source = (api, parm=null, stream=false, callbacks={}) => { // // Authenticate User // -exports.authenticate = (ps_username=null, ps_password=null) => { +export function authenticate(ps_username=null, ps_password=null) { // Build Provisioning System URL let psHost = 'ps.' + sysConfig.domain; @@ -480,8 +480,8 @@ exports.authenticate = (ps_username=null, ps_password=null) => { // // Get Version // -exports.get_version = () => { - return exports.source('version').then( +export function get_version() { + return source('version').then( result => { result['client'] = {version: pkg['version']}; result['organization'] = sysConfig.organization; @@ -493,7 +493,7 @@ exports.get_version = () => { // // Get Values // -exports.get_values = (bytearray, fieldtype) => { +export function get_values(bytearray, fieldtype) { let values = []; let buffer = Buffer.from(bytearray); switch (fieldtype) { diff --git a/clients/nodejs/sliderule/h5coro.js b/clients/nodejs/sliderule/h5coro.js index 6b7f5594b..1c8d3b2f6 100644 --- a/clients/nodejs/sliderule/h5coro.js +++ b/clients/nodejs/sliderule/h5coro.js @@ -27,9 +27,9 @@ // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -const https = require('https'); -const core = require('./core.js') -const events = require('events'); +//const https = require('https'); +import * as core from './core.js'; +//import { EventEmitter } from 'events'; //------------------------------------ // File Data @@ -51,7 +51,7 @@ const datatypes = { // // h5 // -exports.h5 = (dataset, resource, asset, datatype=datatypes.DYNAMIC, col=0, startrow=0, numrows=ALL_ROWS, callbacks=null) => { +export function h5(dataset, resource, asset, datatype=datatypes.DYNAMIC, col=0, startrow=0, numrows=ALL_ROWS, callbacks=null){ let parm = { asset: asset, resource: resource, diff --git a/clients/nodejs/sliderule/icesat2.js b/clients/nodejs/sliderule/icesat2.js index e3effea76..ca4002117 100644 --- a/clients/nodejs/sliderule/icesat2.js +++ b/clients/nodejs/sliderule/icesat2.js @@ -27,10 +27,8 @@ // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -const https = require('https'); -const core = require('./core.js') -const events = require('events'); - +import { EventEmitter } from 'events'; +import {core} from '../sliderule/index.js'; //------------------------------------ // File Data //------------------------------------ @@ -71,7 +69,7 @@ const ATL08_ICE = 3; // // PhoREAL Percentiles // -P = { '5': 0, '10': 1, '15': 2, '20': 3, '25': 4, '30': 5, '35': 6, '40': 7, '45': 8, '50': 9, +const P = { '5': 0, '10': 1, '15': 2, '20': 3, '25': 4, '30': 5, '35': 6, '40': 7, '45': 8, '50': 9, '55': 10, '60': 11, '65': 12, '70': 13, '75': 14, '80': 15, '85': 16, '90': 17, '95': 18 }; //------------------------------------ @@ -81,25 +79,25 @@ P = { '5': 0, '10': 1, '15': 2, '20': 3, '25': 4, '30': 5, '35': 6, '40' // // ATL06P // -exports.atl06p = (parm, resources, callbacks=null) => { - if ('asset' in parm === false) { +export function atl06p(parm, resources, callbacks = null){ + console.log("atl06p: ", parm, resources); + if (!('asset' in parm)) { parm['asset'] = 'icesat2'; } let rqst = { "resources": resources, "parms": parm - } + }; if (callbacks != null) { return core.source('atl06p', rqst, true, callbacks); - } - else { - var event = new events.EventEmitter(); - var total_recs = null; - var recs = []; - var callbacks = { + } else { + let event = new EventEmitter(); + let total_recs = null; + let recs = []; + callbacks = { atl06rec: (result) => { recs.push(result["elevation"]); - if ((total_recs != null) && (recs.length == total_recs)) { + if (total_recs != null && recs.length == total_recs) { event.emit('complete'); } }, @@ -118,4 +116,38 @@ exports.atl06p = (parm, resources, callbacks=null) => { ); }); } -} \ No newline at end of file +}; + +// Export any other constants or functions if necessary +export { + CNF_POSSIBLE_TEP, + CNF_NOT_CONSIDERED, + CNF_BACKGROUND, + CNF_WITHIN_10M, + CNF_SURFACE_LOW, + CNF_SURFACE_MEDIUM, + CNF_SURFACE_HIGH, + SRT_LAND, + SRT_OCEAN, + SRT_SEA_ICE, + SRT_LAND_ICE, + SRT_INLAND_WATER, + MAX_COORDS_IN_POLYGON, + GT1L, + GT1R, + GT2L, + GT2R, + GT3L, + GT3R, + STRONG_SPOTS, + WEAK_SPOTS, + LEFT_PAIR, + RIGHT_PAIR, + SC_BACKWARD, + SC_FORWARD, + ATL08_WATER, + ATL08_LAND, + ATL08_SNOW, + ATL08_ICE + }; + \ No newline at end of file diff --git a/clients/nodejs/sliderule/index.js b/clients/nodejs/sliderule/index.js index e4233b8c9..211372943 100644 --- a/clients/nodejs/sliderule/index.js +++ b/clients/nodejs/sliderule/index.js @@ -1,8 +1,9 @@ -const core = require("./core.js"); -const icesat2 = require("./icesat2.js"); -const h5coro = require("./h5coro.js"); -module.exports = { - core: core, - h5coro: h5coro, - icesat2: icesat2, -}; \ No newline at end of file +import * as core from './core.js'; +import * as icesat2 from './icesat2.js'; +import * as h5coro from './h5coro.js'; + +export { + core, + h5coro, + icesat2, +}; diff --git a/clients/nodejs/sliderule/package-lock.json b/clients/nodejs/sliderule/package-lock.json index ae65c388a..d4fdb7ee9 100644 --- a/clients/nodejs/sliderule/package-lock.json +++ b/clients/nodejs/sliderule/package-lock.json @@ -29,12 +29,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" }, "engines": { @@ -113,30 +113,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", - "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -152,12 +152,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dev": true, "dependencies": { - "@babel/types": "^7.23.0", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -167,14 +167,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -229,9 +229,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", - "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", @@ -281,9 +281,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -299,32 +299,32 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", "dev": true, "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", @@ -407,9 +407,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -479,9 +479,9 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -581,9 +581,9 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -610,20 +610,20 @@ } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -631,12 +631,12 @@ } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, @@ -992,9 +992,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", + "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1026,9 +1026,9 @@ } }, "node_modules/@types/babel__core": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz", - "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -1039,18 +1039,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz", - "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz", - "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -1058,75 +1058,75 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz", - "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" } }, "node_modules/@types/graceful-fs": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.8.tgz", - "integrity": "sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz", - "integrity": "sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz", - "integrity": "sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/node": { - "version": "20.8.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.8.tgz", - "integrity": "sha512-YRsdVxq6OaLfmR9Hy816IMp33xOBjfyOgUd77ehqg96CFywxAPbDbXvAsuN2KVg2HOT8Eh6uAfU+l4WffwPVrQ==", + "version": "20.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", + "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", "dev": true, "dependencies": { - "undici-types": "~5.25.1" + "undici-types": "~5.26.4" } }, "node_modules/@types/stack-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz", - "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.29", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.29.tgz", - "integrity": "sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.2.tgz", - "integrity": "sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "node_modules/ansi-escapes": { @@ -1326,9 +1326,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "dev": true, "funding": [ { @@ -1345,9 +1345,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, "bin": { @@ -1391,9 +1391,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001553", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001553.tgz", - "integrity": "sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==", + "version": "1.0.30001579", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", + "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", "dev": true, "funding": [ { @@ -1610,9 +1610,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.565", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.565.tgz", - "integrity": "sha512-XbMoT6yIvg2xzcbs5hCADi0dXBh4//En3oFXmtPX+jiyyiCTiM9DGFT2SLottjpEs9Z8Mh8SqahbR96MaHfuSg==", + "version": "1.4.639", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.639.tgz", + "integrity": "sha512-CkKf3ZUVZchr+zDpAlNLEEy2NJJ9T64ULWaDgy3THXXlPVPkLu3VOs9Bac44nebVtdwl2geSj6AxTtGDOxoXhg==", "dev": true }, "node_modules/emittery": { @@ -2008,9 +2008,9 @@ "dev": true }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "engines": { "node": ">=8" @@ -2909,9 +2909,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/normalize-path": { @@ -3461,9 +3461,9 @@ } }, "node_modules/undici-types": { - "version": "5.25.3", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, "node_modules/update-browserslist-db": { @@ -3497,9 +3497,9 @@ } }, "node_modules/v8-to-istanbul": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", - "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", diff --git a/clients/nodejs/sliderule/package.json b/clients/nodejs/sliderule/package.json index 671d9cd0e..c325fe08c 100644 --- a/clients/nodejs/sliderule/package.json +++ b/clients/nodejs/sliderule/package.json @@ -1,5 +1,6 @@ { "name": "@sliderule/sliderule", + "type": "module", "description": "client for the SlideRule on-demand science data processing service", "version": "4.1.0", "keywords": [ diff --git a/clients/nodejs/sliderule/tests/uofmdtest.config.js b/clients/nodejs/sliderule/tests/uofmdtest.config.js new file mode 100644 index 000000000..61ee41744 --- /dev/null +++ b/clients/nodejs/sliderule/tests/uofmdtest.config.js @@ -0,0 +1,2 @@ +const sliderule = require('..'); +sliderule.core.init({domain: "testsliderule.org", organization: "UofMDTest"}); diff --git a/clients/nodejs/utils/main.js b/clients/nodejs/utils/main.js deleted file mode 100644 index a05f85f50..000000000 --- a/clients/nodejs/utils/main.js +++ /dev/null @@ -1,25 +0,0 @@ -const sliderule = require('../sliderule'); - - -const http = require('http'); -sliderule.core.init({domain:"localhost", organization: null, protocol: http}); - -sliderule.icesat2.atl06p( - { "cnf": "atl03_high", - "ats": 20.0, - "cnt": 10, - "len": 40.0, - "res": 20.0, - "maxi": 1 }, - resources=["ATL03_20181019065445_03150111_005_01.h5"] -).then( - result => console.log('Results = ', result.length, result[0]), - error => console.error('Error = ', error) -); - -/* -sliderule.h5coro.h5("ancillary_data/atlas_sdp_gps_epoch", "ATL03_20181019065445_03150111_005_01.h5", "icesat2").then( - result => console.log("GPS Epoch: ", result), - error => console.error(error) -); -*/ diff --git a/clients/nodejs/utils/main.mjs b/clients/nodejs/utils/main.mjs new file mode 100644 index 000000000..4812d9f9c --- /dev/null +++ b/clients/nodejs/utils/main.mjs @@ -0,0 +1,23 @@ +import {core,h5coro,icesat2} from '../sliderule/index.js'; + +core.init({}); + +icesat2.atl06p( + { "cnf": "atl03_high", + "ats": 20.0, + "cnt": 10, + "len": 40.0, + "res": 20.0, + "maxi": 1 }, + ["ATL03_20181019065445_03150111_005_01.h5"] +).then( + result => console.log('Results = ', result.length, result[0]), + error => console.error('Error = ', error) +); + +/* +h5coro.h5("ancillary_data/atlas_sdp_gps_epoch", "ATL03_20181019065445_03150111_005_01.h5", "icesat2").then( + result => console.log("GPS Epoch: ", result), + error => console.error(error) +); +*/ From 4a0652956cf1c27282454763f145545fade25432 Mon Sep 17 00:00:00 2001 From: "Carlos E. Ugarte" Date: Fri, 19 Jan 2024 11:50:33 -0500 Subject: [PATCH 2/2] Add Typescript declarations and replace events with mitt --- clients/nodejs/sliderule/core.d.ts | 58 +++++++++++ clients/nodejs/sliderule/h5coro.d.ts | 22 ++++ clients/nodejs/sliderule/h5coro.js | 2 - clients/nodejs/sliderule/icesat2.d.ts | 55 ++++++++++ clients/nodejs/sliderule/icesat2.js | 16 +-- clients/nodejs/sliderule/index.d.ts | 4 + clients/nodejs/sliderule/index.js | 7 +- clients/nodejs/sliderule/index.ts | 9 ++ clients/nodejs/sliderule/package-lock.json | 22 +++- clients/nodejs/sliderule/package.json | 7 +- clients/nodejs/sliderule/tsconfig.json | 115 +++++++++++++++++++++ 11 files changed, 299 insertions(+), 18 deletions(-) create mode 100644 clients/nodejs/sliderule/core.d.ts create mode 100644 clients/nodejs/sliderule/h5coro.d.ts create mode 100644 clients/nodejs/sliderule/icesat2.d.ts create mode 100644 clients/nodejs/sliderule/index.d.ts create mode 100644 clients/nodejs/sliderule/index.ts create mode 100644 clients/nodejs/sliderule/tsconfig.json diff --git a/clients/nodejs/sliderule/core.d.ts b/clients/nodejs/sliderule/core.d.ts new file mode 100644 index 000000000..70ebc6fd1 --- /dev/null +++ b/clients/nodejs/sliderule/core.d.ts @@ -0,0 +1,58 @@ +import https from 'https'; + +// Define types for the constants +export const INT8: number; +export const INT16: number; +export const INT32: number; +export const INT64: number; +export const UINT8: number; +export const UINT16: number; +export const UINT32: number; +export const UINT64: number; +export const BITFIELD: number; +export const FLOAT: number; +export const DOUBLE: number; +export const TIME8: number; +export const STRING: number; +export const USER: number; + +// Define type for fieldtypes +export const fieldtypes: { + [key: string]: { code: number; size: number }; +}; + +// Define type for the init function +export function init(config: { + domain?: string; + organization?: string; + protocol?: https; + verbose?: boolean; + desired_nodes?: any; // Replace 'any' with a more specific type if possible + time_to_live?: number; + timeout?: number; +}): void; + +// Define type for the source function +export function source( + api: string, + parm?: any, // Replace 'any' with a more specific type if possible + stream?: boolean, + callbacks?: { [key: string]: (...args: any[]) => void } +): Promise; // Replace 'any' with a more specific return type if possible + +// Define type for the authenticate function +export function authenticate( + ps_username?: string | null, + ps_password?: string | null +): Promise; + +// Define type for the get_version function +export function get_version(): Promise<{ + client: { version: string }; + organization: string; + [key: string]: any; // Additional dynamic properties +}>; + +// Define type for the get_values function +export function get_values(bytearray: Uint8Array, fieldtype: number): any[]; // Replace 'any' with a more specific type if possible + diff --git a/clients/nodejs/sliderule/h5coro.d.ts b/clients/nodejs/sliderule/h5coro.d.ts new file mode 100644 index 000000000..ae6f4f5ef --- /dev/null +++ b/clients/nodejs/sliderule/h5coro.d.ts @@ -0,0 +1,22 @@ +// Define the constants +export const ALL_ROWS: number; + +// Define type for datatypes +export const datatypes: { + TEXT: number; + REAL: number; + INTEGER: number; + DYNAMIC: number; +}; + +// Define type for the h5 function +export function h5( + dataset: string, + resource: string, + asset: string, + datatype?: number, + col?: number, + startrow?: number, + numrows?: number, + callbacks?: { [key: string]: (...args: any[]) => void } | null +): Promise | void; // Replace 'any' with a more specific return type if possible diff --git a/clients/nodejs/sliderule/h5coro.js b/clients/nodejs/sliderule/h5coro.js index 1c8d3b2f6..e750c2735 100644 --- a/clients/nodejs/sliderule/h5coro.js +++ b/clients/nodejs/sliderule/h5coro.js @@ -27,9 +27,7 @@ // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -//const https = require('https'); import * as core from './core.js'; -//import { EventEmitter } from 'events'; //------------------------------------ // File Data diff --git a/clients/nodejs/sliderule/icesat2.d.ts b/clients/nodejs/sliderule/icesat2.d.ts new file mode 100644 index 000000000..e7f5e0d5c --- /dev/null +++ b/clients/nodejs/sliderule/icesat2.d.ts @@ -0,0 +1,55 @@ +import { Emitter } from 'mitt'; + +// Define the types for the constants +export const CNF_POSSIBLE_TEP: number; +export const CNF_NOT_CONSIDERED: number; +export const CNF_BACKGROUND: number; +export const CNF_WITHIN_10M: number; +export const CNF_SURFACE_LOW: number; +export const CNF_SURFACE_MEDIUM: number; +export const CNF_SURFACE_HIGH: number; +export const SRT_LAND: number; +export const SRT_OCEAN: number; +export const SRT_SEA_ICE: number; +export const SRT_LAND_ICE: number; +export const SRT_INLAND_WATER: number; +export const MAX_COORDS_IN_POLYGON: number; +export const GT1L: number; +export const GT1R: number; +export const GT2L: number; +export const GT2R: number; +export const GT3L: number; +export const GT3R: number; +export const STRONG_SPOTS: number[]; +export const WEAK_SPOTS: number[]; +export const LEFT_PAIR: number; +export const RIGHT_PAIR: number; +export const SC_BACKWARD: number; +export const SC_FORWARD: number; +export const ATL08_WATER: number; +export const ATL08_LAND: number; +export const ATL08_SNOW: number; +export const ATL08_ICE: number; + +// Define the P constant as an object with string keys and number values +export const P: { [key: string]: number }; + + // Define the parameter type for the atl06p function + interface Atl06pParams { + asset?: string; + [key: string]: any; // Other dynamic keys +} +type Resource = any; // Replace 'any' with the actual type of a resource + +// Define the callback type +interface Callbacks { + atl06rec?: (result: any) => void; + [key: string]: ((result: any) => void) | undefined; +} + +// Define the function atl06p +export function atl06p( + parm: Atl06pParams, + resources: Resource[], + callbacks?: Callbacks | null +): Promise | void; diff --git a/clients/nodejs/sliderule/icesat2.js b/clients/nodejs/sliderule/icesat2.js index ca4002117..75eaf2352 100644 --- a/clients/nodejs/sliderule/icesat2.js +++ b/clients/nodejs/sliderule/icesat2.js @@ -27,7 +27,7 @@ // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -import { EventEmitter } from 'events'; +import mitt from 'mitt'; import {core} from '../sliderule/index.js'; //------------------------------------ // File Data @@ -91,26 +91,30 @@ export function atl06p(parm, resources, callbacks = null){ if (callbacks != null) { return core.source('atl06p', rqst, true, callbacks); } else { - let event = new EventEmitter(); + let emitter = mitt(); + let total_recs = null; let recs = []; callbacks = { atl06rec: (result) => { recs.push(result["elevation"]); if (total_recs != null && recs.length == total_recs) { - event.emit('complete'); + emitter.emit('complete'); } }, }; return new Promise(resolve => { core.source('atl06p', rqst, true, callbacks).then( result => { - event.once('complete', () => { + const onComplete = () => { resolve(recs.flat(1)); - }); + emitter.off('complete', onComplete); // Remove the event listener after it's called + }; + emitter.on('complete', onComplete); + total_recs = result["atl06rec"] ?? 0; if (recs.length == total_recs) { - event.emit('complete'); + emitter.emit('complete'); } } ); diff --git a/clients/nodejs/sliderule/index.d.ts b/clients/nodejs/sliderule/index.d.ts new file mode 100644 index 000000000..868293284 --- /dev/null +++ b/clients/nodejs/sliderule/index.d.ts @@ -0,0 +1,4 @@ +import * as core from './core.js'; +import * as icesat2 from './icesat2.js'; +import * as h5coro from './h5coro.js'; +export { core, h5coro, icesat2, }; diff --git a/clients/nodejs/sliderule/index.js b/clients/nodejs/sliderule/index.js index 211372943..868293284 100644 --- a/clients/nodejs/sliderule/index.js +++ b/clients/nodejs/sliderule/index.js @@ -1,9 +1,4 @@ import * as core from './core.js'; import * as icesat2 from './icesat2.js'; import * as h5coro from './h5coro.js'; - -export { - core, - h5coro, - icesat2, -}; +export { core, h5coro, icesat2, }; diff --git a/clients/nodejs/sliderule/index.ts b/clients/nodejs/sliderule/index.ts new file mode 100644 index 000000000..211372943 --- /dev/null +++ b/clients/nodejs/sliderule/index.ts @@ -0,0 +1,9 @@ +import * as core from './core.js'; +import * as icesat2 from './icesat2.js'; +import * as h5coro from './h5coro.js'; + +export { + core, + h5coro, + icesat2, +}; diff --git a/clients/nodejs/sliderule/package-lock.json b/clients/nodejs/sliderule/package-lock.json index d4fdb7ee9..39eba3eaa 100644 --- a/clients/nodejs/sliderule/package-lock.json +++ b/clients/nodejs/sliderule/package-lock.json @@ -9,10 +9,12 @@ "version": "4.1.0", "license": "BSD-3-Clause", "dependencies": { + "mitt": "^3.0.1", "netrc": "^0.1.4" }, "devDependencies": { - "jest": "^29.5.0" + "jest": "^29.5.0", + "typescript": "^5.3.3" } }, "node_modules/@ampproject/remapping": { @@ -2885,6 +2887,11 @@ "node": "*" } }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3460,6 +3467,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", diff --git a/clients/nodejs/sliderule/package.json b/clients/nodejs/sliderule/package.json index c325fe08c..ce6056cac 100644 --- a/clients/nodejs/sliderule/package.json +++ b/clients/nodejs/sliderule/package.json @@ -12,7 +12,8 @@ }, "license": "BSD-3-Clause", "devDependencies": { - "jest": "^29.5.0" + "jest": "^29.5.0", + "typescript": "^5.3.3" }, "scripts": { "test": "jest" @@ -29,15 +30,15 @@ "./" ], "dependencies": { + "mitt": "^3.0.1", "netrc": "^0.1.4" }, "bugs": { "url": "https://github.com/ICESat2-SlideRule/sliderule/issues" }, "homepage": "https://github.com/ICESat2-SlideRule/sliderule#readme", - "main": "index.js", "author": "", "directories": { "test": "tests" } -} \ No newline at end of file +} diff --git a/clients/nodejs/sliderule/tsconfig.json b/clients/nodejs/sliderule/tsconfig.json new file mode 100644 index 000000000..9b2c8dcd5 --- /dev/null +++ b/clients/nodejs/sliderule/tsconfig.json @@ -0,0 +1,115 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "ES6", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "node_modules" + ] +}