From a54b290ac50751b8190e5ee268de63f18fcb4653 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 26 Jul 2024 17:07:11 +0200 Subject: [PATCH 001/188] :sparkles: first playground - timer --- apps/papam_timer/papamTimer.info | 6 ++++ apps/papam_timer/papamTimer.js | 59 +++++++++++++++++++++++++++++++ apps/papam_timer/timer-48.png | Bin 0 -> 1487 bytes 3 files changed, 65 insertions(+) create mode 100644 apps/papam_timer/papamTimer.info create mode 100644 apps/papam_timer/papamTimer.js create mode 100644 apps/papam_timer/timer-48.png diff --git a/apps/papam_timer/papamTimer.info b/apps/papam_timer/papamTimer.info new file mode 100644 index 000000000..d3db17766 --- /dev/null +++ b/apps/papam_timer/papamTimer.info @@ -0,0 +1,6 @@ +require("Storage").write("papamTimer.info",{ + "id":"papamTimer", + "name":"PapaM Timer", + "src":"papamTimer.app.js", + "icon":"papamTimer.img" +}); \ No newline at end of file diff --git a/apps/papam_timer/papamTimer.js b/apps/papam_timer/papamTimer.js new file mode 100644 index 000000000..1a4631538 --- /dev/null +++ b/apps/papam_timer/papamTimer.js @@ -0,0 +1,59 @@ +var counter = 30; +var counterInterval; + +function countDown() { + counter--; + + if (counter<=0) { + clearInterval(counterInterval); + counterInterval = undefined; + + E.showMessage("Out of Time","My Timer"); + Bangle.buzz(); + counterInterval = setInterval(() => Bangle.buzz(), 5000); + + Bangle.setUI({ + mode : "custom", + btn : ()=>{ + Bangle.setUI(); + startTimer(); + } + }); + return; + } + + g.clear(1); // clear screen and reset graphics state + g.setFontAlign(0,0); // center font + g.setFont("Vector",80); // vector font, 80px + + g.drawString(counter, g.getWidth()/2, g.getHeight()/2); + + Bangle.setLCDPower(1); // optional - this keeps the watch LCD lit up +} + +function startTimer() { + counter = 30; + countDown(); + + if (counterInterval) + clearInterval(counterInterval); + + counterInterval = setInterval(countDown, 1000); + + Bangle.setUI({ + mode : "updown", + }, dir => { + if (!dir) { // if tapped or button pressed, start/stop + if (counterInterval) { + clearInterval(counterInterval); + counterInterval = undefined; + } else counterInterval = setInterval(countDown, 1000); + } else { // otherwise if dir nonzero, count time up/down + counter += dir + 1; // +1 because countDown decrements + if (counter<3) counter=3; + countDown(); + } + }); +} + +startTimer(); \ No newline at end of file diff --git a/apps/papam_timer/timer-48.png b/apps/papam_timer/timer-48.png new file mode 100644 index 0000000000000000000000000000000000000000..c07d674efe5ef437b1840251eb234847d5567ff8 GIT binary patch literal 1487 zcmV;=1u*)FP)|*C(U-rJ}14rXalM3P=CLNWV4;08% z_)fM{q3&m*x&CuUx{URPyOYh9qUvLiR3LYguP-0Aw~qW~V*9`Uqp%?(g<+UI+pV{( z?oQdO%|k!mzB{RNjLhGL4LNxHWf6hQuU_K68K#;+$2W1TpJ6l^&xKua^ zH-~>27@FlpOtj$P~Y5X7;v@Tprv?=?4qlFtKdlpYKiI;z{61px`sU z!*ANbN+`LOwFL*?9e_^3q?(Diixn4j!|a^?|Ky+b!mM<8nQk~0qvhP{I1&^7LW?2 z1p}1c$QGXjM^y%?eC8qHgvaYL;KlvVLjzk6Qsa?z2Fly=JeX5vPC&|^yqfv6f}>}J zlcCKThWa2jHWpMWRY*vvZoEqnpymT|u?m*HD4YoGbn?*%zmQI+gQ%z|$ji$Eo6ROE z3G>o@IIVe$FeSReFXb^hVt^4&a%)uWwoqAF8OUTZNJ~qD>FH@nNwnPmRTS(P_MqI4 z-KSK-34Un#7@RJLXrbKPT%JUHd_3s&ddUdb>=uzJVcOx_?la7u$9c-;V7*D>aUrYK z3dzaIJc*c?7^tt8?s9jIHIQy~B3qpu>6O4KHZxT?5Thmro~>Xun;|YPjwcZj5djRt zfXgM04gSLBu!lL6f+mFD5HXQ@mS6GVl-lTXHxE-+ zvJ%4rJX~-%?QpjF5ZS5t)+gn+Drm5K5H7S0|1R?Xg&h5?%pYJ!fGjD|t%Vw<1p^c{ zy+L}P^L{DMpMv)Fr^uontE45%Ovsd9w$8zKy7!1mjG7C$Z;HK2qO9XvAJ{#R8cUWL zINy3$+*WC%vjbB8KN8dha?&%`-+{m9`y@3RmAD4R-7l8~3#>yG992(Fj&_ROgJ5EW z!)b@M;cAi1uU}lck-3=>C6fZ!XvK!Bc!$>S1s34`5W(MKwRM(ol>(p7N!HvYn!IkF ziHz7-!(#q2zBs^VlDNYt_>Awm##pG;7mFgSk}w;|cHR@PS4ny&Nra_mg1)eR_Dw4= zzyz;2wTgZo-L@>;!05Q1cDUzGz6oW*^uX^38wy~Og-s{y+hER)g$Gu4kN?24tyg(e pAAZA>7_-V9@i*%(b|L%!<6lbM+hcr#pJV_4002ovPDHLkV1lop!}S0F literal 0 HcmV?d00001 From 7f2470d32ef825e8c0bdb1ce81d7534e2a3edbcb Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Thu, 1 Aug 2024 15:42:26 +0200 Subject: [PATCH 002/188] :tada: initial TS projec --- apps_ts/papam_clockinfo_tests/.gitignore | 6 + apps_ts/papam_clockinfo_tests/README.md | 2 + apps_ts/papam_clockinfo_tests/app-config.yaml | 1 + apps_ts/papam_clockinfo_tests/env-config.yaml | 7 + apps_ts/papam_clockinfo_tests/gulpfile.js | 120 + .../papam_clockinfo_tests/package-lock.json | 4822 +++++++++++++++++ apps_ts/papam_clockinfo_tests/package.json | 25 + apps_ts/papam_clockinfo_tests/src/app.ts | 7 + apps_ts/papam_clockinfo_tests/tsconfig.json | 15 + 9 files changed, 5005 insertions(+) create mode 100644 apps_ts/papam_clockinfo_tests/.gitignore create mode 100644 apps_ts/papam_clockinfo_tests/README.md create mode 100644 apps_ts/papam_clockinfo_tests/app-config.yaml create mode 100644 apps_ts/papam_clockinfo_tests/env-config.yaml create mode 100644 apps_ts/papam_clockinfo_tests/gulpfile.js create mode 100644 apps_ts/papam_clockinfo_tests/package-lock.json create mode 100644 apps_ts/papam_clockinfo_tests/package.json create mode 100644 apps_ts/papam_clockinfo_tests/src/app.ts create mode 100644 apps_ts/papam_clockinfo_tests/tsconfig.json diff --git a/apps_ts/papam_clockinfo_tests/.gitignore b/apps_ts/papam_clockinfo_tests/.gitignore new file mode 100644 index 000000000..f22165a47 --- /dev/null +++ b/apps_ts/papam_clockinfo_tests/.gitignore @@ -0,0 +1,6 @@ +dist +node_modules +app-config.user.yaml +src/app-config.ts + +.idea/ \ No newline at end of file diff --git a/apps_ts/papam_clockinfo_tests/README.md b/apps_ts/papam_clockinfo_tests/README.md new file mode 100644 index 000000000..bb7a616f9 --- /dev/null +++ b/apps_ts/papam_clockinfo_tests/README.md @@ -0,0 +1,2 @@ +# espruino-ts-quickstart +Quickstart for Espruino using typescript and Visual Studio Code IDE diff --git a/apps_ts/papam_clockinfo_tests/app-config.yaml b/apps_ts/papam_clockinfo_tests/app-config.yaml new file mode 100644 index 000000000..ba54ad573 --- /dev/null +++ b/apps_ts/papam_clockinfo_tests/app-config.yaml @@ -0,0 +1 @@ +refreshPeriodSec: 2 \ No newline at end of file diff --git a/apps_ts/papam_clockinfo_tests/env-config.yaml b/apps_ts/papam_clockinfo_tests/env-config.yaml new file mode 100644 index 000000000..0e7d4d34a --- /dev/null +++ b/apps_ts/papam_clockinfo_tests/env-config.yaml @@ -0,0 +1,7 @@ +# Port where mcu device is located +port: COM4 + +# ESP32 after flash has 115200 speed. +port_speed: 115200 + +board: ESP32 \ No newline at end of file diff --git a/apps_ts/papam_clockinfo_tests/gulpfile.js b/apps_ts/papam_clockinfo_tests/gulpfile.js new file mode 100644 index 000000000..852c5d2bd --- /dev/null +++ b/apps_ts/papam_clockinfo_tests/gulpfile.js @@ -0,0 +1,120 @@ +const gulp = require('gulp'); +const ts = require('gulp-typescript'); +const tsProject = ts.createProject('tsconfig.json'); +const fs = require("fs"); +const { fork } = require('child_process'); +const path = require("path"); +const yaml = require("js-yaml"); +const _ = require("lodash"); + +const envConfig = yaml.load(fs.readFileSync("env-config.yaml")); + +const distDir = "./dist"; +const srcDir = "./src"; +const espReadyBundleFileName = "bundle.js"; +const espReadyBundlePath = path.join(distDir, espReadyBundleFileName); +const appFileName = "app.js"; +const appFilePath = path.join(distDir, appFileName); +const appConfigTsFileName = "app-config.ts"; +const appConfigFileName = "app-config.yaml"; +const userAppConfigFileName = "app-config.user.yaml"; +const espConsoleBeingWatchedFileName = "esp-console-input.js"; +const espConsoleBeingWatchedFilePath = path.join(distDir, espConsoleBeingWatchedFileName); + + +function prepare_for_espruino(cb) { + if (!fs.existsSync(appFilePath)) { + cb("main app file does not exit " + appFilePath); + return; + } + + let appContent = fs.readFileSync(appFilePath).toString(); + appContent = appContent.replace('Object.defineProperty(exports, "__esModule", { value: true });', ""); + fs.writeFileSync(appFilePath, appContent); + + const buildproc = fork( + require.resolve("espruino/bin/espruino-cli"), + ["--board", envConfig.board, appFileName, "-o", espReadyBundleFileName], + { cwd: distDir }); + buildproc.on('close', () => { + cb(); + }); +} + +function compile_ts() { + const tsResult = tsProject.src().pipe(tsProject()); + return tsResult.js.pipe(gulp.dest(distDir)); +} + +function content_to_dist() { + return gulp + .src("src/**/*.js", { base: 'src' }) + .pipe(gulp.dest(distDir)); +} + +function send_to_espruino_console(cb) { + const content = fs.readFileSync(espReadyBundlePath); + fs.writeFile( + espConsoleBeingWatchedFilePath, + content, + (err) => { + if (err) { throw err; } + cb(); + }); +} + +function clear_espruino_watch_file(cb) { + fs.writeFile( + espConsoleBeingWatchedFilePath, + "", + (err) => { + if (err) { throw err; } + cb(); + }); +} + +function espruino_console(cb) { + const buildproc = fork( + require.resolve("espruino/bin/espruino-cli"), + ["--board", envConfig.board, "-b", envConfig.port_speed, "--port", envConfig.port, "-w", espConsoleBeingWatchedFileName], + { cwd: distDir }); + buildproc.on('close', () => { + cb(); + }); +} + +function gen_config_ts(cb) { + if (!fs.existsSync(userAppConfigFileName)) { + const content = fs.readFileSync(appConfigFileName) + .toString() + .split("\n") + .map(x => `# ${x}`) + .join("\n"); + + fs.writeFileSync(userAppConfigFileName, content, { encoding: "utf-8" }); + } + + const appConfig = yaml.load(fs.readFileSync(appConfigFileName)); + const userAppConfig = yaml.load(fs.readFileSync(userAppConfigFileName)); + const mergedAppConfig = _.assign(appConfig, userAppConfig); + const jsonString = JSON.stringify(mergedAppConfig); + const resultConfigTsContent = `export default ${jsonString};`; + fs.writeFileSync(path.join(srcDir, appConfigTsFileName), resultConfigTsContent); + cb(); +} + +gulp.task("gen-config-ts", gen_config_ts); + +gulp.task("compile-ts", gulp.series("gen-config-ts", compile_ts)); + +gulp.task("content-to-dist", content_to_dist); + +gulp.task("prepare-for-espruino", gulp.series('compile-ts', 'content-to-dist', prepare_for_espruino)); + +gulp.task("build", gulp.series("prepare-for-espruino")); + +gulp.task("send-to-espurino-console", send_to_espruino_console); + +gulp.task("clear-espurino-watch-file", clear_espruino_watch_file); + +gulp.task("espruino-console", gulp.series("clear-espurino-watch-file", espruino_console)); diff --git a/apps_ts/papam_clockinfo_tests/package-lock.json b/apps_ts/papam_clockinfo_tests/package-lock.json new file mode 100644 index 000000000..efc8eb5a2 --- /dev/null +++ b/apps_ts/papam_clockinfo_tests/package-lock.json @@ -0,0 +1,4822 @@ +{ + "name": "papam_clockinfo_tests", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "papam_clockinfo_tests", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@types/espruino": "^1.94.10", + "espruino": "^0.1.55", + "gulp": "^5.0", + "gulp-typescript": "^5.0.1", + "js-yaml": "^4.1.0", + "lodash": "^4.17", + "typescript": "^5.5.4" + } + }, + "node_modules/@abandonware/bluetooth-hci-socket": { + "version": "0.5.3-12", + "resolved": "https://registry.npmjs.org/@abandonware/bluetooth-hci-socket/-/bluetooth-hci-socket-0.5.3-12.tgz", + "integrity": "sha512-qo2cBoh94j6RPusaNXSLYI8Bzxuz01Bx3MD80a/QYzhHED/FZ6Y0k2w2kRbfIA2EEhFSCbXrBZDQlpilL4nbxA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "linux", + "android", + "freebsd", + "win32" + ], + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "debug": "^4.3.4", + "nan": "^2.18.0", + "node-gyp": "^10.0.1" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "usb": "^2.11.0" + } + }, + "node_modules/@abandonware/noble": { + "version": "1.9.2-25", + "resolved": "https://registry.npmjs.org/@abandonware/noble/-/noble-1.9.2-25.tgz", + "integrity": "sha512-FBgwjWkXF3VLb0V0hdOeeVhuupdfuagkBz9E0Xjfmr8MYuR5JjnXHty0/6Q38d4v//EhX7oZaZXBiZWrhWKKbg==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin", + "linux", + "freebsd", + "win32" + ], + "dependencies": { + "debug": "^4.3.4", + "napi-thread-safe-callback": "^0.0.6", + "node-addon-api": "^4.3.0", + "node-gyp-build": "^4.5.0" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "@abandonware/bluetooth-hci-socket": "^0.5.3-11" + } + }, + "node_modules/@gulpjs/messages": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", + "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@gulpjs/to-absolute-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", + "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", + "dependencies": { + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "optional": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "optional": true, + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "optional": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "optional": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@serialport/binding-mock": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-10.2.2.tgz", + "integrity": "sha512-HAFzGhk9OuFMpuor7aT5G1ChPgn5qSsklTFOTUX72Rl6p0xwcSVsRtG/xaGp6bxpN7fI9D/S8THLBWbBgS6ldw==", + "optional": true, + "dependencies": { + "@serialport/bindings-interface": "^1.2.1", + "debug": "^4.3.3" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@serialport/bindings-cpp": { + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/@serialport/bindings-cpp/-/bindings-cpp-10.8.0.tgz", + "integrity": "sha512-OMQNJz5kJblbmZN5UgJXLwi2XNtVLxSKmq5VyWuXQVsUIJD4l9UGHnLPqM5LD9u3HPZgDI5w7iYN7gxkQNZJUw==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "@serialport/bindings-interface": "1.2.2", + "@serialport/parser-readline": "^10.2.1", + "debug": "^4.3.2", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=12.17.0 <13.0 || >=14.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "optional": true + }, + "node_modules/@serialport/bindings-interface": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@serialport/bindings-interface/-/bindings-interface-1.2.2.tgz", + "integrity": "sha512-CJaUd5bLvtM9c5dmO9rPBHPXTa9R2UwpkJ0wdh9JCYcbrPWsKz+ErvR0hBLeo7NPeiFdjFO4sonRljiw4d2XiA==", + "optional": true, + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/@serialport/parser-byte-length": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-10.5.0.tgz", + "integrity": "sha512-eHhr4lHKboq1OagyaXAqkemQ1XyoqbLQC8XJbvccm95o476TmEdW5d7AElwZV28kWprPW68ZXdGF2VXCkJgS2w==", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-cctalk": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-10.5.0.tgz", + "integrity": "sha512-Iwsdr03xmCKAiibLSr7b3w6ZUTBNiS+PwbDQXdKU/clutXjuoex83XvsOtYVcNZmwJlVNhAUbkG+FJzWwIa4DA==", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-delimiter": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-10.5.0.tgz", + "integrity": "sha512-/uR/yT3jmrcwnl2FJU/2ySvwgo5+XpksDUR4NF/nwTS5i3CcuKS+FKi/tLzy1k8F+rCx5JzpiK+koqPqOUWArA==", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-inter-byte-timeout": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-10.5.0.tgz", + "integrity": "sha512-WPvVlSx98HmmUF9jjK6y9mMp3Wnv6JQA0cUxLeZBgS74TibOuYG3fuUxUWGJALgAXotOYMxfXSezJ/vSnQrkhQ==", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-packet-length": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-packet-length/-/parser-packet-length-10.5.0.tgz", + "integrity": "sha512-jkpC/8w4/gUBRa2Teyn7URv1D7T//0lGj27/4u9AojpDVXsR6dtdcTG7b7dNirXDlOrSLvvN7aS5/GNaRlEByw==", + "optional": true, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@serialport/parser-readline": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-10.5.0.tgz", + "integrity": "sha512-0aXJknodcl94W9zSjvU+sLdXiyEG2rqjQmvBWZCr8wJZjWEtv3RgrnYiWq4i2OTOyC8C/oPK8ZjpBjQptRsoJQ==", + "optional": true, + "dependencies": { + "@serialport/parser-delimiter": "10.5.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-ready": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-10.5.0.tgz", + "integrity": "sha512-QIf65LTvUoxqWWHBpgYOL+soldLIIyD1bwuWelukem2yDZVWwEjR288cLQ558BgYxH4U+jLAQahhqoyN1I7BaA==", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-regex": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-10.5.0.tgz", + "integrity": "sha512-9jnr9+PCxRoLjtGs7uxwsFqvho+rxuJlW6ZWSB7oqfzshEZWXtTJgJRgac/RuLft4hRlrmRz5XU40i3uoL4HKw==", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-slip-encoder": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-slip-encoder/-/parser-slip-encoder-10.5.0.tgz", + "integrity": "sha512-wP8m+uXQdkWSa//3n+VvfjLthlabwd9NiG6kegf0fYweLWio8j4pJRL7t9eTh2Lbc7zdxuO0r8ducFzO0m8CQw==", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-spacepacket": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-spacepacket/-/parser-spacepacket-10.5.0.tgz", + "integrity": "sha512-BEZ/HAEMwOd8xfuJSeI/823IR/jtnThovh7ils90rXD4DPL1ZmrP4abAIEktwe42RobZjIPfA4PaVfyO0Fjfhg==", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/stream": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-10.5.0.tgz", + "integrity": "sha512-gbcUdvq9Kyv2HsnywS7QjnEB28g+6OGB5Z8TLP7X+UPpoMIWoUsoQIq5Kt0ZTgMoWn3JGM2lqwTsSHF+1qhniA==", + "optional": true, + "dependencies": { + "@serialport/bindings-interface": "1.2.2", + "debug": "^4.3.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@types/espruino": { + "version": "1.94.10", + "resolved": "https://registry.npmjs.org/@types/espruino/-/espruino-1.94.10.tgz", + "integrity": "sha512-+rFJlVs1Weob0OnyT4UpRmnXl88t61O1bChmZaT+3AZl1xm1P1KrfZLuMnflsIBWq3FnsvC1wP0b340r6LhesQ==" + }, + "node_modules/@types/w3c-web-usb": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz", + "integrity": "sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ==", + "optional": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "optional": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-done": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", + "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", + "dependencies": { + "end-of-stream": "^1.4.4", + "once": "^1.4.0", + "stream-exhaust": "^1.0.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/async-settle": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", + "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", + "dependencies": { + "async-done": "^2.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/b4a": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" + }, + "node_modules/bach": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", + "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", + "dependencies": { + "async-done": "^2.0.0", + "async-settle": "^2.0.0", + "now-and-later": "^3.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/bach/node_modules/now-and-later": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", + "dependencies": { + "once": "^1.4.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/bare-events": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "optional": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/blob-to-arraybuffer": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/blob-to-arraybuffer/-/blob-to-arraybuffer-0.0.1.tgz", + "integrity": "sha512-cn23j+k87nZKnJcBDx/8jyRAPVbBrtZPUBx7xhmRXzdVSsN+k0nRePQuC06tuPqXmcNcHGlt+rs+zrSe5wafKg==", + "optional": true + }, + "node_modules/bluetooth-hci-socket": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/bluetooth-hci-socket/-/bluetooth-hci-socket-0.5.1.tgz", + "integrity": "sha512-5/cPO2R+X4UXLudZOevREf3kwyCNCVovA9rcXk5smBgx+q/sIucfkC6F57+xWR5X17bY931w6bB2EUaPh9ArfQ==", + "hasInstallScript": true, + "optional": true, + "os": [ + "linux", + "android", + "win32" + ], + "dependencies": { + "debug": "^2.2.0", + "nan": "^2.0.5" + }, + "optionalDependencies": { + "usb": "^1.1.0" + } + }, + "node_modules/bluetooth-hci-socket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/bluetooth-hci-socket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "optional": true + }, + "node_modules/bluetooth-hci-socket/node_modules/usb": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/usb/-/usb-1.9.2.tgz", + "integrity": "sha512-dryNz030LWBPAf6gj8vyq0Iev3vPbCLHCT8dBw3gQRXRzVNsIdeuU+VjPp3ksmSPkeMAl1k+kQ14Ij0QHyeiAg==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-addon-api": "^4.2.0", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bplist-parser": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz", + "integrity": "sha512-fGeghPEH4Eytvf+Mi446aKcDqvkA/+eh6r7QGiZWMQG6TzqrnsToLP379XFfqRSZ41+676hhGIm++maNST1Apw==", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "optional": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-native-messaging": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chrome-native-messaging/-/chrome-native-messaging-0.2.0.tgz", + "integrity": "sha512-RgTFMY0x/K5JUSLfd+rTaWxNvkliYqNR41h5DbbkjlDCbxmZSXIHAYOSTbIazjyorzpK26Y2H9BXnboy4s9SXw==", + "optional": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==" + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/copy-props": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", + "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", + "dependencies": { + "each-props": "^3.0.0", + "is-plain-object": "^5.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "optional": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "optional": true + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "optional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "optional": true, + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "deprecated": "Use your platform's native DOMException instead", + "optional": true, + "dependencies": { + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "optional": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/each-props": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", + "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", + "dependencies": { + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "optional": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "optional": true + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "optional": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-shim": { + "version": "0.35.8", + "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.8.tgz", + "integrity": "sha512-Twf7I2v4/1tLoIXMT8HlqaBSS5H2wQTs2wx3MNYCI8K1R1/clXyCazrcVCPm/FuO9cyV8+leEaZOWD5C253NDg==" + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "optional": true, + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "optional": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/espruino": { + "version": "0.1.55", + "resolved": "https://registry.npmjs.org/espruino/-/espruino-0.1.55.tgz", + "integrity": "sha512-ttn9dlwmc54H1BTDagSNc16hbORQwyECr8HXCPDh5EuIeOVJeoLcUI6/2tpUrqtqjh3mLDXDU+e3nxWltJT6Ww==", + "dependencies": { + "acorn": "^8.8.2", + "es6-shim": "^0.35.8", + "utf8": "^3.0.0", + "ws": "^8.13.0" + }, + "bin": { + "espruino": "bin/espruino-cli.js" + }, + "optionalDependencies": { + "@abandonware/noble": "^1.9.2-14", + "noble-winrt": "^0.1.1", + "peerjs-on-node": "^1.0.2", + "serialport": "^10.5.0", + "websocket": "^1.0.34" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "optional": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "optional": true + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "optional": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + }, + "node_modules/fast-levenshtein": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", + "dependencies": { + "fastest-levenshtein": "^1.0.7" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/filereader": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/filereader/-/filereader-0.10.3.tgz", + "integrity": "sha512-7F8w6GSXuHLN80ukaVOcHgBaiTRHUZr8GeEhNdqfAECcnBoROg4i8hTl+KqtF4yUPffOJVHEFg4iDJb7xIYFng==", + "optional": true + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/fined": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0", + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/flagged-respawn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "optional": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "optional": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fs-mkdirp-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true + }, + "node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "optional": true + }, + "node_modules/gauge/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "optional": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-stream/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob-stream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-stream/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-watcher": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", + "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", + "dependencies": { + "async-done": "^2.0.0", + "chokidar": "^3.5.3" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/glogg": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", + "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", + "dependencies": { + "sparkles": "^2.1.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/gulp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.0.tgz", + "integrity": "sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==", + "dependencies": { + "glob-watcher": "^6.0.0", + "gulp-cli": "^3.0.0", + "undertaker": "^2.0.0", + "vinyl-fs": "^4.0.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulp-cli": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.0.0.tgz", + "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==", + "dependencies": { + "@gulpjs/messages": "^1.1.0", + "chalk": "^4.1.2", + "copy-props": "^4.0.0", + "gulplog": "^2.2.0", + "interpret": "^3.1.1", + "liftoff": "^5.0.0", + "mute-stdout": "^2.0.0", + "replace-homedir": "^2.0.0", + "semver-greatest-satisfied-range": "^2.0.0", + "string-width": "^4.2.3", + "v8flags": "^4.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulp-cli/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-cli/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/gulp-cli/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-cli/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-typescript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-5.0.1.tgz", + "integrity": "sha512-YuMMlylyJtUSHG1/wuSVTrZp60k1dMEFKYOvDf7OvbAJWrDtxxD4oZon4ancdWwzjj30ztiidhe4VXJniF0pIQ==", + "dependencies": { + "ansi-colors": "^3.0.5", + "plugin-error": "^1.0.1", + "source-map": "^0.7.3", + "through2": "^3.0.0", + "vinyl": "^2.1.0", + "vinyl-fs": "^3.0.3" + }, + "engines": { + "node": ">= 8" + }, + "peerDependencies": { + "typescript": "~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev" + } + }, + "node_modules/gulp-typescript/node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/gulp/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/gulp/node_modules/fs-mkdirp-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", + "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", + "dependencies": { + "graceful-fs": "^4.2.8", + "streamx": "^2.12.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulp/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulp/node_modules/glob-stream": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.2.tgz", + "integrity": "sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==", + "dependencies": { + "@gulpjs/to-absolute-glob": "^4.0.0", + "anymatch": "^3.1.3", + "fastq": "^1.13.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "is-negated-glob": "^1.0.0", + "normalize-path": "^3.0.0", + "streamx": "^2.12.5" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulp/node_modules/lead": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", + "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulp/node_modules/now-and-later": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", + "dependencies": { + "once": "^1.4.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/gulp/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/gulp/node_modules/resolve-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", + "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", + "dependencies": { + "value-or-function": "^4.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/gulp/node_modules/to-through": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", + "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", + "dependencies": { + "streamx": "^2.12.5" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulp/node_modules/value-or-function": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", + "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/gulp/node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", + "dependencies": { + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulp/node_modules/vinyl-fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", + "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", + "dependencies": { + "fs-mkdirp-stream": "^2.0.1", + "glob-stream": "^8.0.0", + "graceful-fs": "^4.2.11", + "iconv-lite": "^0.6.3", + "is-valid-glob": "^1.0.0", + "lead": "^4.0.0", + "normalize-path": "3.0.0", + "resolve-options": "^2.0.0", + "stream-composer": "^1.0.2", + "streamx": "^2.14.0", + "to-through": "^3.0.0", + "value-or-function": "^4.0.0", + "vinyl": "^3.0.0", + "vinyl-sourcemap": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulp/node_modules/vinyl-sourcemap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", + "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", + "dependencies": { + "convert-source-map": "^2.0.0", + "graceful-fs": "^4.2.10", + "now-and-later": "^3.0.0", + "streamx": "^2.12.5", + "vinyl": "^3.0.0", + "vinyl-contents": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulplog": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", + "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", + "dependencies": { + "glogg": "^2.2.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "optional": true + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "optional": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "optional": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "optional": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "optional": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "optional": true + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "optional": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "optional": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "optional": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/last-run": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", + "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/liftoff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.0.tgz", + "integrity": "sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==", + "dependencies": { + "extend": "^3.0.2", + "findup-sync": "^5.0.0", + "fined": "^2.0.0", + "flagged-respawn": "^2.0.0", + "is-plain-object": "^5.0.0", + "rechoir": "^0.8.0", + "resolve": "^1.20.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "optional": true + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "optional": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "optional": true, + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "optional": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "optional": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "optional": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "optional": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "optional": true + }, + "node_modules/mute-stdout": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", + "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/nan": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", + "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", + "optional": true + }, + "node_modules/napi-thread-safe-callback": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/napi-thread-safe-callback/-/napi-thread-safe-callback-0.0.6.tgz", + "integrity": "sha512-X7uHCOCdY4u0yamDxDrv3jF2NtYc8A1nvPzBQgvpoSX+WB3jAe2cVNsY448V1ucq7Whf9Wdy02HEUoLW5rJKWg==", + "optional": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "optional": true + }, + "node_modules/noble": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/noble/-/noble-1.9.1.tgz", + "integrity": "sha512-5sbPLvCh1zJqy5caq+oQQE9eYoXB/ePweLWuN8UeapWO6KgFu4SS0VeLmYc23HTfWAXKb/ey6rtEvHwn9aY5Iw==", + "optional": true, + "os": [ + "darwin", + "linux", + "freebsd", + "win32" + ], + "dependencies": { + "debug": "~2.2.0" + }, + "engines": { + "node": ">=0.8" + }, + "optionalDependencies": { + "bluetooth-hci-socket": "^0.5.1", + "bplist-parser": "0.0.6", + "xpc-connection": "~0.1.4" + } + }, + "node_modules/noble-winrt": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noble-winrt/-/noble-winrt-0.1.1.tgz", + "integrity": "sha512-IUlWQfaHJMuiYOQTGvW4YdWeQR7E6tBVXut8KDMkIFGAKU+LNvTciWYTwHUlzqZKtuP3jc9VFMBvR9UDFNq7Sw==", + "optional": true, + "dependencies": { + "chrome-native-messaging": "^0.2.0", + "debug": "^2.6.8", + "noble": "^1.7.0" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/noble-winrt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/noble-winrt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "optional": true + }, + "node_modules/noble/node_modules/debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", + "optional": true, + "dependencies": { + "ms": "0.7.1" + } + }, + "node_modules/noble/node_modules/ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==", + "optional": true + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "optional": true + }, + "node_modules/node-blob": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/node-blob/-/node-blob-0.0.2.tgz", + "integrity": "sha512-82wiGzMht96gPQDUYaZBdZEVvYD9aEhU6Bt9KLCr4rADZPRd7dQVY2Yj0ZG/1vp4DhVkL49nJT/M3CiMTAt3ag==", + "optional": true + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "optional": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", + "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "optional": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "optional": true, + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "optional": true + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "optional": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/peerjs-on-node": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/peerjs-on-node/-/peerjs-on-node-1.0.2.tgz", + "integrity": "sha512-bb11mMOzawK79zk+/M4YUZndSxZ4XnPJbSmAFJb115C6xzxfbkqbdm0WgJeUrgC2Lvmrl29Tjqmy7xN1hIdENA==", + "optional": true, + "dependencies": { + "blob-to-arraybuffer": "0.0.1", + "filereader": "^0.10.3", + "node-blob": "0.0.2", + "node-fetch": "^2.6.0", + "wrtc": "^0.4.2", + "ws": "^7.2.0" + } + }, + "node_modules/peerjs-on-node/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "optional": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dependencies": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/plugin-error/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "optional": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-bom-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/replace-homedir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", + "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-greatest-satisfied-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", + "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", + "dependencies": { + "sver": "^1.8.3" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/serialport": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-10.5.0.tgz", + "integrity": "sha512-7OYLDsu5i6bbv3lU81pGy076xe0JwpK6b49G6RjNvGibstUqQkI+I3/X491yBGtf4gaqUdOgoU1/5KZ/XxL4dw==", + "optional": true, + "dependencies": { + "@serialport/binding-mock": "10.2.2", + "@serialport/bindings-cpp": "10.8.0", + "@serialport/parser-byte-length": "10.5.0", + "@serialport/parser-cctalk": "10.5.0", + "@serialport/parser-delimiter": "10.5.0", + "@serialport/parser-inter-byte-timeout": "10.5.0", + "@serialport/parser-packet-length": "10.5.0", + "@serialport/parser-readline": "10.5.0", + "@serialport/parser-ready": "10.5.0", + "@serialport/parser-regex": "10.5.0", + "@serialport/parser-slip-encoder": "10.5.0", + "@serialport/parser-spacepacket": "10.5.0", + "@serialport/stream": "10.5.0", + "debug": "^4.3.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "optional": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "optional": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "optional": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "optional": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "optional": true, + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "optional": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/sparkles": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", + "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "optional": true + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "optional": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/stream-composer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", + "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", + "dependencies": { + "streamx": "^2.13.2" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" + }, + "node_modules/streamx": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "optional": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "optional": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sver": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", + "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", + "optionalDependencies": { + "semver": "^6.3.0" + } + }, + "node_modules/sver/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dependencies": { + "streamx": "^2.12.5" + } + }, + "node_modules/text-decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz", + "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/through2-filter/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/to-through/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "optional": true + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "optional": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "optional": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undertaker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", + "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", + "dependencies": { + "bach": "^2.0.1", + "fast-levenshtein": "^3.0.0", + "last-run": "^2.0.0", + "undertaker-registry": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/undertaker-registry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", + "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "optional": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "node_modules/usb": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/usb/-/usb-2.13.0.tgz", + "integrity": "sha512-pTNKyxD1DfC1DYu8kFcIdpE8f33e0c2Sbmmi0HEs28HTVC555uocvYR1g5DDv4CBibacCh4BqRyYZJylN4mBbw==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "@types/w3c-web-usb": "^1.0.6", + "node-addon-api": "^8.0.0", + "node-gyp-build": "^4.5.0" + }, + "engines": { + "node": ">=12.22.0 <13.0 || >=14.17.0" + } + }, + "node_modules/usb/node_modules/node-addon-api": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.1.0.tgz", + "integrity": "sha512-yBY+qqWSv3dWKGODD6OGE6GnTX7Q2r+4+DfpqxHSHh8x0B4EKP9+wVGLS6U/AM1vxSNNmUEuIV5EGhYwPpfOwQ==", + "optional": true, + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/v8flags": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", + "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-contents": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", + "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", + "dependencies": { + "bl": "^5.0.0", + "vinyl": "^3.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-contents/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/vinyl-contents/node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", + "dependencies": { + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", + "dependencies": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "optional": true + }, + "node_modules/websocket": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", + "optional": true, + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.63", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "optional": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "optional": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "optional": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "optional": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/wrtc": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/wrtc/-/wrtc-0.4.7.tgz", + "integrity": "sha512-P6Hn7VT4lfSH49HxLHcHhDq+aFf/jd9dPY7lDHeFhZ22N3858EKuwm2jmnlPzpsRGEPaoF6XwkcxY5SYnt4f/g==", + "bundleDependencies": [ + "node-pre-gyp" + ], + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-pre-gyp": "^0.13.0" + }, + "engines": { + "node": "^8.11.2 || >=10.0.0" + }, + "optionalDependencies": { + "domexception": "^1.0.1" + } + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xpc-connection": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/xpc-connection/-/xpc-connection-0.1.4.tgz", + "integrity": "sha512-Np4+cx5l9zhSNrH5O5niVqVT0vBnja4IG5CxuBgCvTdWGiyujRwUTSj/FtT66KX84/MMCKpt5wIcuORBMFT6qQ==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "nan": "^2.0.5" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "optional": true, + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/apps_ts/papam_clockinfo_tests/package.json b/apps_ts/papam_clockinfo_tests/package.json new file mode 100644 index 000000000..ec8c197e4 --- /dev/null +++ b/apps_ts/papam_clockinfo_tests/package.json @@ -0,0 +1,25 @@ +{ + "name": "papam_clockinfo_tests", + "version": "1.0.0", + "description": "Quickstart for Espruino using typescript and Visual Studio Code IDE", + "main": "app.js", + "repository": { + "url": "https://github.com/stasberkov/espruino-ts-quickstart" + }, + "scripts": { + "build": "gulp build", + "send-to-espruino-console": "gulp send-to-espruino-console", + "espruino-console": "gulp espruino-console" + }, + "author": "Stanislav Berkov", + "license": "ISC", + "dependencies": { + "@types/espruino": "^1.94.10", + "espruino": "^0.1.55", + "gulp": "^5.0", + "gulp-typescript": "^5.0.1", + "js-yaml": "^4.1.0", + "lodash": "^4.17", + "typescript": "^5.5.4" + } +} diff --git a/apps_ts/papam_clockinfo_tests/src/app.ts b/apps_ts/papam_clockinfo_tests/src/app.ts new file mode 100644 index 000000000..cb78a08e2 --- /dev/null +++ b/apps_ts/papam_clockinfo_tests/src/app.ts @@ -0,0 +1,7 @@ +import appConfig = require("./app-config"); + +setInterval(() => { + const temp = E.getTemperature(); + console.log("Current temp:", temp); +}, appConfig.default.refreshPeriodSec * 1000); + diff --git a/apps_ts/papam_clockinfo_tests/tsconfig.json b/apps_ts/papam_clockinfo_tests/tsconfig.json new file mode 100644 index 000000000..970971d7e --- /dev/null +++ b/apps_ts/papam_clockinfo_tests/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "lib": [ + "es2015", + "dom" // setInterval, console + ], + "strict": true, + "skipLibCheck": true + }, + "include": [ + "src/**/*.ts" + ] +} \ No newline at end of file From aae8479231b119ff71835b2fc3a45cd032282f45 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Thu, 1 Aug 2024 16:40:33 +0200 Subject: [PATCH 003/188] :sparkles: presp to display GPS data --- apps_ts/papam_clockinfo_tests/src/app.ts | 53 ++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/apps_ts/papam_clockinfo_tests/src/app.ts b/apps_ts/papam_clockinfo_tests/src/app.ts index cb78a08e2..616922da3 100644 --- a/apps_ts/papam_clockinfo_tests/src/app.ts +++ b/apps_ts/papam_clockinfo_tests/src/app.ts @@ -1,7 +1,52 @@ import appConfig = require("./app-config"); -setInterval(() => { - const temp = E.getTemperature(); - console.log("Current temp:", temp); -}, appConfig.default.refreshPeriodSec * 1000); +interface GpsData { + text: string; + img: string; +} +interface Item { + name: string; + get: () => GpsData; + show: () => void; + hide: () => void; + hasRange?: boolean; +} + +interface Result { + name: string; + items: Item[]; +} + +(function() { + function show(this: { interval?: number; emit: (event: string) => void }) { + this.interval = setTimeout(() => { + this.emit("redraw"); + this.interval = setInterval(() => { + this.emit("redraw"); + }, 60000); + }, 60000 - (Date.now() % 60000)); + } + + function hide(this: { interval?: number }) { + clearInterval(this.interval); + this.interval = undefined; + } + + return { + name: "Bangle", + items: [ + { + name: "GPS-Data", + get: () => { + return { + text: "lat/lon", + img: atob("GBiBAAAAAAAAAAAAAAAYAAA8AAB+AAD/AAAAAAAAAAAAAAAYAAAYAAQYIA4AcAYAYAA8AAB+AAD/AAH/gD///D///AAAAAAAAAAAAA==") + }; + }, + show: show, + hide: hide + }, + ] + } as Result; +})(); From e9745a31c92c3fab26800ad6f20dda2d07b928e1 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Thu, 1 Aug 2024 18:02:19 +0200 Subject: [PATCH 004/188] :sparkles: set timer via config --- apps_ts/papam_clockinfo_tests/app-config.yaml | 2 +- apps_ts/papam_clockinfo_tests/src/app.ts | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps_ts/papam_clockinfo_tests/app-config.yaml b/apps_ts/papam_clockinfo_tests/app-config.yaml index ba54ad573..a05b8c520 100644 --- a/apps_ts/papam_clockinfo_tests/app-config.yaml +++ b/apps_ts/papam_clockinfo_tests/app-config.yaml @@ -1 +1 @@ -refreshPeriodSec: 2 \ No newline at end of file +refreshPeriodSec: 10 \ No newline at end of file diff --git a/apps_ts/papam_clockinfo_tests/src/app.ts b/apps_ts/papam_clockinfo_tests/src/app.ts index 616922da3..9d344b9b9 100644 --- a/apps_ts/papam_clockinfo_tests/src/app.ts +++ b/apps_ts/papam_clockinfo_tests/src/app.ts @@ -19,13 +19,15 @@ interface Result { } (function() { + let totalIntervalInMillis: number = appConfig.default.refreshPeriodSec; + function show(this: { interval?: number; emit: (event: string) => void }) { this.interval = setTimeout(() => { this.emit("redraw"); this.interval = setInterval(() => { this.emit("redraw"); - }, 60000); - }, 60000 - (Date.now() % 60000)); + }, totalIntervalInMillis); + }, totalIntervalInMillis - (Date.now() % totalIntervalInMillis)); } function hide(this: { interval?: number }) { From 7906219a76d675ebfaf6c5b298325fca5a9f8ea0 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Thu, 1 Aug 2024 19:51:22 +0200 Subject: [PATCH 005/188] NOT POSSIBLE via external editor and TypeScript --- apps_ts/papam_clockinfo_tests/env-config.yaml | 2 +- apps_ts/papam_clockinfo_tests/gulpfile.js | 2 +- apps_ts/papam_clockinfo_tests/src/app.ts | 24 ++++++++++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/apps_ts/papam_clockinfo_tests/env-config.yaml b/apps_ts/papam_clockinfo_tests/env-config.yaml index 0e7d4d34a..18d4894a6 100644 --- a/apps_ts/papam_clockinfo_tests/env-config.yaml +++ b/apps_ts/papam_clockinfo_tests/env-config.yaml @@ -4,4 +4,4 @@ port: COM4 # ESP32 after flash has 115200 speed. port_speed: 115200 -board: ESP32 \ No newline at end of file +board: "Bangle.js 2" \ No newline at end of file diff --git a/apps_ts/papam_clockinfo_tests/gulpfile.js b/apps_ts/papam_clockinfo_tests/gulpfile.js index 852c5d2bd..50485c1d1 100644 --- a/apps_ts/papam_clockinfo_tests/gulpfile.js +++ b/apps_ts/papam_clockinfo_tests/gulpfile.js @@ -34,7 +34,7 @@ function prepare_for_espruino(cb) { const buildproc = fork( require.resolve("espruino/bin/espruino-cli"), - ["--board", envConfig.board, appFileName, "-o", espReadyBundleFileName], + ["-d Bangle2.js -v --board", envConfig.board, appFileName, "-o", espReadyBundleFileName], { cwd: distDir }); buildproc.on('close', () => { cb(); diff --git a/apps_ts/papam_clockinfo_tests/src/app.ts b/apps_ts/papam_clockinfo_tests/src/app.ts index 9d344b9b9..25a9e3277 100644 --- a/apps_ts/papam_clockinfo_tests/src/app.ts +++ b/apps_ts/papam_clockinfo_tests/src/app.ts @@ -13,6 +13,11 @@ interface Item { hasRange?: boolean; } +interface GpsResult { + lat: number; + lon: number; +} + interface Result { name: string; items: Item[]; @@ -21,6 +26,21 @@ interface Result { (function() { let totalIntervalInMillis: number = appConfig.default.refreshPeriodSec; + function format(x: number): string { + const d = Math.floor(x); + let m = x - d; + m = m * 60; + return "" + d + " " + m.toFixed(3) + "'"; + } + + function getPosition () : GpsResult { + let result: GpsResult = { lat: 0, lon: 0 } as GpsResult; + if (Bangle.isGPSOn()) { + result = Bangle.getGPSFix(); + } + return result; + } + function show(this: { interval?: number; emit: (event: string) => void }) { this.interval = setTimeout(() => { this.emit("redraw"); @@ -41,8 +61,10 @@ interface Result { { name: "GPS-Data", get: () => { + const position: GpsResult = getPosition(); + const strPosition: string = format(position.lat) return { - text: "lat/lon", + text: `lat: ${strPosition}`, img: atob("GBiBAAAAAAAAAAAAAAAYAAA8AAB+AAD/AAAAAAAAAAAAAAAYAAAYAAQYIA4AcAYAYAA8AAB+AAD/AAH/gD///D///AAAAAAAAAAAAA==") }; }, From aa35dd6b8cf36d7d77a974279ea0803433c80b98 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 3 Aug 2024 17:38:08 +0200 Subject: [PATCH 006/188] :truck: shorten file-names; remember to upload new to watch --- apps/papam_timer/papamTimer.info | 6 ------ apps/pm_timer/pmTimer.info | 6 ++++++ .../papamTimer.js => pm_timer/pmTimer.js} | 0 apps/{papam_timer => pm_timer}/timer-48.png | Bin 4 files changed, 6 insertions(+), 6 deletions(-) delete mode 100644 apps/papam_timer/papamTimer.info create mode 100644 apps/pm_timer/pmTimer.info rename apps/{papam_timer/papamTimer.js => pm_timer/pmTimer.js} (100%) rename apps/{papam_timer => pm_timer}/timer-48.png (100%) diff --git a/apps/papam_timer/papamTimer.info b/apps/papam_timer/papamTimer.info deleted file mode 100644 index d3db17766..000000000 --- a/apps/papam_timer/papamTimer.info +++ /dev/null @@ -1,6 +0,0 @@ -require("Storage").write("papamTimer.info",{ - "id":"papamTimer", - "name":"PapaM Timer", - "src":"papamTimer.app.js", - "icon":"papamTimer.img" -}); \ No newline at end of file diff --git a/apps/pm_timer/pmTimer.info b/apps/pm_timer/pmTimer.info new file mode 100644 index 000000000..f00b17279 --- /dev/null +++ b/apps/pm_timer/pmTimer.info @@ -0,0 +1,6 @@ +require("Storage").write("pmTimer.info",{ + "id":"pmTimer", + "name":"PapaM Timer", + "src":"pmTimer.app.js", + "icon":"pmTimer.img" +}); \ No newline at end of file diff --git a/apps/papam_timer/papamTimer.js b/apps/pm_timer/pmTimer.js similarity index 100% rename from apps/papam_timer/papamTimer.js rename to apps/pm_timer/pmTimer.js diff --git a/apps/papam_timer/timer-48.png b/apps/pm_timer/timer-48.png similarity index 100% rename from apps/papam_timer/timer-48.png rename to apps/pm_timer/timer-48.png From d8544630ec8b06fac958a688357703910b93803e Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 11 Aug 2024 17:42:23 +0200 Subject: [PATCH 007/188] :tada: "fork" from Slope Clock ++ and try to put in left upper corner --- apps/slopeclockbig/ChangeLog | 2 + apps/slopeclockbig/README.md | 18 ++ apps/slopeclockbig/app-icon.js | 1 + apps/slopeclockbig/app.js | 187 ++++++++++++++++++ apps/slopeclockbig/app.png | Bin 0 -> 10685 bytes apps/slopeclockbig/default.json | 10 + apps/slopeclockbig/metadata.json | 21 ++ apps/slopeclockbig/screenshot.png | Bin 0 -> 3302 bytes apps/slopeclockbig/settings.js | 60 ++++++ .../papam_clockinfo_tests/package-lock.json | 2 +- 10 files changed, 300 insertions(+), 1 deletion(-) create mode 100644 apps/slopeclockbig/ChangeLog create mode 100644 apps/slopeclockbig/README.md create mode 100644 apps/slopeclockbig/app-icon.js create mode 100644 apps/slopeclockbig/app.js create mode 100644 apps/slopeclockbig/app.png create mode 100644 apps/slopeclockbig/default.json create mode 100644 apps/slopeclockbig/metadata.json create mode 100644 apps/slopeclockbig/screenshot.png create mode 100644 apps/slopeclockbig/settings.js diff --git a/apps/slopeclockbig/ChangeLog b/apps/slopeclockbig/ChangeLog new file mode 100644 index 000000000..5af08e543 --- /dev/null +++ b/apps/slopeclockbig/ChangeLog @@ -0,0 +1,2 @@ +0.01: Clone of original SlopeClock++; + plus first modifications to draw clock only in left upper corner diff --git a/apps/slopeclockbig/README.md b/apps/slopeclockbig/README.md new file mode 100644 index 000000000..cdba8892d --- /dev/null +++ b/apps/slopeclockbig/README.md @@ -0,0 +1,18 @@ +# Slope Clock BIG + +A version of Slope Clock ++ with different spacing and a bigger size +for the clock_info module parts + +## Usage + +When the screen is unlocked, tap on the information that you would like +to change (top right or bottom left). It should change color showing +it is selected. + +* Swipe up or down to cycle through the info screens that can be displayed + when you have finished tap again towards the centre of the screen to unselect. + +* Swipe left or right to change the type of info screens displayed (by default + there is only one type of data so this will have no effect) + +Settings are saved automatically and reloaded along with the clock. diff --git a/apps/slopeclockbig/app-icon.js b/apps/slopeclockbig/app-icon.js new file mode 100644 index 000000000..bd62b928d --- /dev/null +++ b/apps/slopeclockbig/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4P/AAMA/Ayq8EH8AEBgfgj4zCj/gn/8Aod//wFDvk/gEEAoP4AoMAEIP4j4FFwAFC/gFEv//ApM/74FDg4XBgZLCFIMzAoU4g8BK4dwgMP+Ewg+AgMfK4PhAoXwh+B/0Bj0B/4FBgYnB/8B/kDgf/+ED/kHn//HgIFBW4IFB/AFDgf4h4FB+EBFgLKCAoInBAAOAAoqkBAgPAWAIuBAoXAn+zCAMB4F/8YFBgYFB4YFBRgY7BYwIoCABX4zkY74FB/mMiALC/3mug6CAAgA==")) diff --git a/apps/slopeclockbig/app.js b/apps/slopeclockbig/app.js new file mode 100644 index 000000000..2b0ddf9e9 --- /dev/null +++ b/apps/slopeclockbig/app.js @@ -0,0 +1,187 @@ +{ // must be inside our own scope here so that when we are unloaded everything disappears + // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global + +let settings = Object.assign( + require("Storage").readJSON("slopeclockbig.default.json", true) || {}, + require("Storage").readJSON("slopeclockbig.json", true) || {} +); +// Actual height 71 (81 - 11) +//const fontBitmap = E.toString(require('heatshrink').decompress(atob('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'))); +// Actual height 35 (34 - 0) +const fontBitmap = E.toString(require('heatshrink').decompress(atob('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'))); + +Graphics.prototype.setFontPaytoneOne = function(scale) { + //this.setFontCustom(fontBitmap,32, atob("HTBFLTQ0PzU/Lz8+HQ=="),100+(scale<<8)+(1<<16)); + this.setFontCustom( + fontBitmap, + 32, + atob("BwsQFhQhGgkPEBIWCw0LEhkRExQYFBYTFxYLCxUVFhIfGxsWGxUVFxsLDxwUHxwdGB0ZFRUbGSUYFhMQEg8XERIYGRIYFA8aGA4MFw8lGBcZGBEREBYWIBUXExELEBY="), + 100+(scale<<8)+(1<<16) + ); + return this; +}; + +let drawTimeout; + +let g2 = Graphics.createArrayBuffer(g.getWidth(),90,1,{msb:true}); +let g2img = { + width:g2.getWidth(), height:g2.getHeight(), bpp:1, + buffer:g2.buffer, transparent:0 +}; +const slope = 20; +const offsY = 20; // offset of numbers from middle +const fontBorder = 4; // offset from left/right +const slopeBorder = 10, slopeBorderUpper = 4; // fudge-factor to move minutes down from slope +let R,x,y; // middle of the clock face +let dateStr = ""; +let bgColors = []; +if (g.theme.dark) { + if (settings.colorYellow) bgColors.push("#ff0"); + if (settings.colorCyan) bgColors.push("#0ff"); + if (settings.colorMagenta) bgColors.push("#f0f"); + if (settings.colorWhite) bgColors.push("#fff"); +} else { + if (settings.colorRed) bgColors.push("#f00"); + if (settings.colorGreen) bgColors.push("#0f0"); + if (settings.colorBlue) bgColors.push("#00f"); + if (settings.colorBlack) bgColors.push("#000"); +} +let bgColor = bgColors[(Math.random()*bgColors.length)|0]||"#000"; + + +// Draw the hour, and the minute into an offscreen buffer +let draw = function() { + // queue next draw + if (drawTimeout) clearTimeout(drawTimeout); + + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + animate(false, function() { + draw(); + }); + + }, 60000 - (Date.now() % 60000)); + // Now draw this one + const rRaw = Bangle.appRect; + R = { x: rRaw.x, y: rRaw.y, w: rRaw.w / 2, h:rRaw.h / 2, x2: rRaw.x + rRaw.w / 2, y2: rRaw.y + rRaw.h / 2 }; + x = R.w / 2; + y = R.y + R.h / 2 - 6; + if (!settings.hideWidgets) y-= 6; // extra room for date + const date = new Date(); + const local_time = require("locale").time(date, 1); + const hourStr = local_time.split(":")[0].trim().padStart(2, '0'); + const minStr = local_time.split(":")[1].trim().padStart(2, '0'); + dateStr = require("locale").dow(date, 1).toUpperCase()+ " " + require("locale").date(date, 0).toUpperCase(); + + // Draw hour + g.reset().clearRect(R); // clear whole background (w/o widgets) + g.setFontAlign(-1, 0).setFont("PaytoneOne"); + g.drawString(hourStr, fontBorder, y-offsY).setFont("4x6"); // draw and unload custom font + // add slope in background color + g.setColor(g.theme.bg) + .fillPoly([0,y+slope-slopeBorderUpper, R.w,y-slope-slopeBorderUpper, R.w,y-slope, 0,y+slope]); + + // Draw minute to offscreen buffer + g2.setColor(0).fillRect(0,0,g2.getWidth(),g2.getHeight()).setFontAlign(1, 0).setFont("PaytoneOne"); + g2.setColor(1).drawString(minStr, g2.getWidth()-fontBorder, g2.getHeight()/2).setFont("4x6"); // draw and unload custom font + g2.setColor(0).fillPoly([0,0, g2.getWidth(),0, 0,slope*2]); + // redraw the top widget + clockInfoMenu.redraw(); + // start the animation *in* + animate(true); +}; + +let isAnimIn = true; +let animInterval; +let minuteX; +// Draw *just* the minute image +let drawMinute = function() { + const yo = slopeBorder + offsY + y - 2 * slope * minuteX / R.w; + // draw over the slanty bit + g.setColor(bgColor).fillPoly([0,y+slope, R.w,y-slope, R.w,R.h+R.y, 0,R.h+R.y]); + // draw the minutes + g.setColor(g.theme.bg).drawImage(g2img, x+minuteX-(g2.getWidth()/2), yo-(g2.getHeight()/2)); +}; +let animate = function(isIn, callback) { + if (animInterval) clearInterval(animInterval); + isAnimIn = isIn; + minuteX = isAnimIn ? -g2.getWidth() : 0; + drawMinute(); + animInterval = setInterval(function() { + minuteX += 8; + let stop = false; + if (isAnimIn && minuteX>=0) { + minuteX=0; + stop = true; + } else if (!isAnimIn && minuteX>=R.w) + stop = true; + drawMinute(); + if (stop) { + clearInterval(animInterval); + animInterval=undefined; + if (isAnimIn) { + // draw the date + g.setColor(g.theme.bg).setFontAlign(0, 0).setFont("6x15").drawString(dateStr, R.x + R.w/2, R.y+R.h-9); + // draw the menu items + clockInfoMenu.redraw(); + clockInfoMenu2.redraw(); + } + if (callback) callback(); + } + }, 20); +}; + +// clock info menus (scroll up/down for info) +let clockInfoDraw = (itm, info, options) => { + let textY = options.y+41; + // set a cliprect to stop us drawing outside our box + g.reset().setClipRect(options.x, options.y, options.x+options.w-1, options.y+options.h-1); + g.setFont("6x15").setBgColor(options.bg).clearRect(options.x, textY-15, options.x+options.w-2, textY); + + g.setColor(options.focus ? options.hl : options.fg); + if (options.x < g.getWidth()/2) { // left align + let x = options.x+2; + if (info.img) g.clearRect(x, options.y, x+23, options.y+23).drawImage(info.img, x, options.y); + g.setFontAlign(-1,1).drawString(info.text, x,textY); + } else { // right align + let x = options.x+options.w-3; + if (info.img) g.clearRect(x-23, options.y, x, options.y+23).drawImage(info.img, x-23, options.y); + g.setFontAlign(1,1).drawString(info.text, x,textY); + } + // return ClipRect + g.setClipRect(0,0,g.getWidth()-1, g.getHeight()-1); +}; +let clockInfoItems = require("clock_info").load(); +let clockInfoMenu = require("clock_info").addInteractive(clockInfoItems, { // top right + app:"slopeclockbig",x:132, y:settings.hideWidgets ? 12 : 24, w:44, h:40, + draw : clockInfoDraw, bg : g.theme.bg, fg : g.theme.fg, hl : "#f00"/*red*/ +}); +let clockInfoMenu2 = require("clock_info").addInteractive(clockInfoItems, { // bottom left + app:"slopeclockbig",x:0, y:115, w:50, h:40, + draw : clockInfoDraw, bg : bgColor, fg : g.theme.bg, hl : (g.theme.fg===g.toColor(bgColor))?"#f00"/*red*/:g.theme.fg +}); + +// Show launcher when middle button pressed +Bangle.setUI({ + mode : "clock", + remove : function() { + // Called to unload all of clock app + if (animInterval) clearInterval(animInterval); + animInterval = undefined; + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + delete Graphics.prototype.setFontPaytoneOne; + // remove info menu + clockInfoMenu.remove(); + delete clockInfoMenu; + clockInfoMenu2.remove(); + delete clockInfoMenu2; + } +}); + +// Load widgets +Bangle.loadWidgets(); +if (settings.hideWidgets) require("widget_utils").swipeOn(); +else setTimeout(Bangle.drawWidgets,0); +draw(); +} diff --git a/apps/slopeclockbig/app.png b/apps/slopeclockbig/app.png new file mode 100644 index 0000000000000000000000000000000000000000..2f5912fcf3c5dde259cd3f6ec1f7745cd3013d8e GIT binary patch literal 10685 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%0A^TaIdNAA1c|vojMSZS%LP3!g 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 ZwI=CXS3MV047Msb8n<;-%5L2c`9H>$Z?^yd literal 0 HcmV?d00001 diff --git a/apps/slopeclockbig/default.json b/apps/slopeclockbig/default.json new file mode 100644 index 000000000..29b618735 --- /dev/null +++ b/apps/slopeclockbig/default.json @@ -0,0 +1,10 @@ +{ + "colorRed": true, + "colorGreen": true, + "colorBlue": true, + "colorYellow": true, + "colorMagenta": true, + "colorCyan": true, + "colorBlack": true, + "colorWhite": true +} diff --git a/apps/slopeclockbig/metadata.json b/apps/slopeclockbig/metadata.json new file mode 100644 index 000000000..a49802fb9 --- /dev/null +++ b/apps/slopeclockbig/metadata.json @@ -0,0 +1,21 @@ +{ "id": "slopeclockbig", + "name": "Slope Clock BIG", + "version":"0.1", + "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen. This is a clone of the original Slope Clock which shows extra information and allows the colors to be selected.", + "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], + "type": "clock", + "tags": "clock,clkinfo", + "supports" : ["BANGLEJS2"], + "dependencies" : { "clock_info":"module" }, + "readme": "README.md", + "storage": [ + {"name":"slopeclockbig.app.js","url":"app.js"}, + {"name":"slopeclockbig.img","url":"app-icon.js","evaluate":true}, + {"name":"slopeclockbig.settings.js","url":"settings.js"}, + {"name":"slopeclockbig.default.json","url":"default.json"} + ], + "data": [ + {"name":"slopeclockbig.json"} + ] +} diff --git a/apps/slopeclockbig/screenshot.png b/apps/slopeclockbig/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..1d9cec8e4e86b379460ac59d532ae0ace1e94ddd GIT binary patch literal 3302 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 literal 0 HcmV?d00001 diff --git a/apps/slopeclockbig/settings.js b/apps/slopeclockbig/settings.js new file mode 100644 index 000000000..2c2d2c463 --- /dev/null +++ b/apps/slopeclockbig/settings.js @@ -0,0 +1,60 @@ +(function(back) { + const SETTINGS_FILE = "slopeclockpp.json"; + const storage = require('Storage'); + let settings = Object.assign( + storage.readJSON("slopeclockpp.default.json", true) || {}, + storage.readJSON(SETTINGS_FILE, true) || {} + ); + + function save(key, value) { + settings[key] = value; + storage.write(SETTINGS_FILE, settings); + } + + function showMainMenu() { + let menu ={ + '': { 'title': 'Slope Clock ++' }, + /*LANG*/'< Back': back, + /*LANG*/'Hide Widgets': { + value: !!settings.hideWidgets, + onchange: x => save('hideWidgets', x), + }, + /*LANG*/'Red': { + value: !!settings.colorRed, + onchange: x => save('colorRed', x), + }, + /*LANG*/'Green': { + value: !!settings.colorGreen, + onchange: x => save('colorGreen', x), + }, + /*LANG*/'Blue': { + value: !!settings.colorBlue, + onchange: x => save('colorBlue', x), + }, + /*LANG*/'Magenta': { + value: !!settings.colorMagenta, + onchange: x => save('colorMagenta', x), + }, + /*LANG*/'Cyan': { + value: !!settings.colorCyan, + onchange: x => save('colorCyan', x), + }, + /*LANG*/'Yellow': { + value: !!settings.colorYellow, + onchange: x => save('colorYellow', x), + }, + /*LANG*/'Black': { + value: !!settings.colorBlack, + onchange: x => save('colorBlack', x), + }, + /*LANG*/'White': { + value: !!settings.colorWhite, + onchange: x => save('colorWhite', x), + } + }; + E.showMenu(menu); + } + + + showMainMenu(); +}); diff --git a/apps_ts/papam_clockinfo_tests/package-lock.json b/apps_ts/papam_clockinfo_tests/package-lock.json index efc8eb5a2..231874c4a 100644 --- a/apps_ts/papam_clockinfo_tests/package-lock.json +++ b/apps_ts/papam_clockinfo_tests/package-lock.json @@ -375,7 +375,7 @@ "resolved": "https://registry.npmjs.org/@types/espruino/-/espruino-1.94.10.tgz", "integrity": "sha512-+rFJlVs1Weob0OnyT4UpRmnXl88t61O1bChmZaT+3AZl1xm1P1KrfZLuMnflsIBWq3FnsvC1wP0b340r6LhesQ==" }, - "node_modules/@types/w3c-web-usb": { + "node_modules/@types/w3c-web-usbslo": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz", "integrity": "sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ==", From 85426a19d473bcddfb5899aa04896cc878a0e282 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 11 Aug 2024 18:12:23 +0200 Subject: [PATCH 008/188] :bug: minor fix when clearing canvas --- apps/slopeclockbig/ChangeLog | 3 ++- apps/slopeclockbig/app.js | 2 +- apps/slopeclockbig/metadata.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/slopeclockbig/ChangeLog b/apps/slopeclockbig/ChangeLog index 5af08e543..2edf10bfa 100644 --- a/apps/slopeclockbig/ChangeLog +++ b/apps/slopeclockbig/ChangeLog @@ -1,2 +1,3 @@ -0.01: Clone of original SlopeClock++; +0.10: Clone of original SlopeClock++; plus first modifications to draw clock only in left upper corner +0.20: Minor fix diff --git a/apps/slopeclockbig/app.js b/apps/slopeclockbig/app.js index 2b0ddf9e9..fd5297c61 100644 --- a/apps/slopeclockbig/app.js +++ b/apps/slopeclockbig/app.js @@ -74,7 +74,7 @@ let draw = function() { dateStr = require("locale").dow(date, 1).toUpperCase()+ " " + require("locale").date(date, 0).toUpperCase(); // Draw hour - g.reset().clearRect(R); // clear whole background (w/o widgets) + g.reset().clearRect(rRaw); // clear whole background (w/o widgets) g.setFontAlign(-1, 0).setFont("PaytoneOne"); g.drawString(hourStr, fontBorder, y-offsY).setFont("4x6"); // draw and unload custom font // add slope in background color diff --git a/apps/slopeclockbig/metadata.json b/apps/slopeclockbig/metadata.json index a49802fb9..856710a7c 100644 --- a/apps/slopeclockbig/metadata.json +++ b/apps/slopeclockbig/metadata.json @@ -1,6 +1,6 @@ { "id": "slopeclockbig", "name": "Slope Clock BIG", - "version":"0.1", + "version":"0.2", "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen. This is a clone of the original Slope Clock which shows extra information and allows the colors to be selected.", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], From 5d0d2b7caf894190db5f69d378903464a9e4dd43 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 11 Aug 2024 18:29:16 +0200 Subject: [PATCH 009/188] :bug: minor fix when clearing canvas --- apps/slopeclockbig/ChangeLog | 1 + apps/slopeclockbig/app.js | 11 ++++++++--- apps/slopeclockbig/metadata.json | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/apps/slopeclockbig/ChangeLog b/apps/slopeclockbig/ChangeLog index 2edf10bfa..6386fa490 100644 --- a/apps/slopeclockbig/ChangeLog +++ b/apps/slopeclockbig/ChangeLog @@ -1,3 +1,4 @@ 0.10: Clone of original SlopeClock++; plus first modifications to draw clock only in left upper corner 0.20: Minor fix +0.30: Fix size of animation and drawing slope to left upper diff --git a/apps/slopeclockbig/app.js b/apps/slopeclockbig/app.js index fd5297c61..801fc72f8 100644 --- a/apps/slopeclockbig/app.js +++ b/apps/slopeclockbig/app.js @@ -23,10 +23,15 @@ Graphics.prototype.setFontPaytoneOne = function(scale) { let drawTimeout; -let g2 = Graphics.createArrayBuffer(g.getWidth(),90,1,{msb:true}); +//let g2 = Graphics.createArrayBuffer(g.getWidth(),90,1,{msb:true}); +let g2 = Graphics.createArrayBuffer(g.getWidth() / 2,g.getHeight() / 2,1,{msb:true}); +// let g2img = { +// width:g2.getWidth(), height:g2.getHeight(), bpp:1, +// buffer:g2.buffer, transparent:0 +// }; let g2img = { - width:g2.getWidth(), height:g2.getHeight(), bpp:1, - buffer:g2.buffer, transparent:0 + width:g2.getWidth() / 2, height:g2.getHeight() / 2, bpp:1, + buffer:g2.buffer, transparent:0 }; const slope = 20; const offsY = 20; // offset of numbers from middle diff --git a/apps/slopeclockbig/metadata.json b/apps/slopeclockbig/metadata.json index 856710a7c..0ba111f66 100644 --- a/apps/slopeclockbig/metadata.json +++ b/apps/slopeclockbig/metadata.json @@ -1,6 +1,6 @@ { "id": "slopeclockbig", "name": "Slope Clock BIG", - "version":"0.2", + "version":"0.3", "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen. This is a clone of the original Slope Clock which shows extra information and allows the colors to be selected.", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], From d705d41cb5af28ab418794158fe54aedbb021bb1 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 11 Aug 2024 18:42:52 +0200 Subject: [PATCH 010/188] :bug: minor fix when clearing canvas --- apps/slopeclockbig/ChangeLog | 1 + apps/slopeclockbig/app.js | 8 +++++--- apps/slopeclockbig/metadata.json | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/slopeclockbig/ChangeLog b/apps/slopeclockbig/ChangeLog index 6386fa490..16c02f904 100644 --- a/apps/slopeclockbig/ChangeLog +++ b/apps/slopeclockbig/ChangeLog @@ -2,3 +2,4 @@ plus first modifications to draw clock only in left upper corner 0.20: Minor fix 0.30: Fix size of animation and drawing slope to left upper +0.40: Try with halving the other scalars diff --git a/apps/slopeclockbig/app.js b/apps/slopeclockbig/app.js index 801fc72f8..eab1474d4 100644 --- a/apps/slopeclockbig/app.js +++ b/apps/slopeclockbig/app.js @@ -33,10 +33,10 @@ let g2img = { width:g2.getWidth() / 2, height:g2.getHeight() / 2, bpp:1, buffer:g2.buffer, transparent:0 }; -const slope = 20; -const offsY = 20; // offset of numbers from middle +const slope = 10; +const offsY = 10; // offset of numbers from middle const fontBorder = 4; // offset from left/right -const slopeBorder = 10, slopeBorderUpper = 4; // fudge-factor to move minutes down from slope +const slopeBorder = 5, slopeBorderUpper = 2; // fudge-factor to move minutes down from slope let R,x,y; // middle of the clock face let dateStr = ""; let bgColors = []; @@ -82,6 +82,7 @@ let draw = function() { g.reset().clearRect(rRaw); // clear whole background (w/o widgets) g.setFontAlign(-1, 0).setFont("PaytoneOne"); g.drawString(hourStr, fontBorder, y-offsY).setFont("4x6"); // draw and unload custom font + // add slope in background color g.setColor(g.theme.bg) .fillPoly([0,y+slope-slopeBorderUpper, R.w,y-slope-slopeBorderUpper, R.w,y-slope, 0,y+slope]); @@ -90,6 +91,7 @@ let draw = function() { g2.setColor(0).fillRect(0,0,g2.getWidth(),g2.getHeight()).setFontAlign(1, 0).setFont("PaytoneOne"); g2.setColor(1).drawString(minStr, g2.getWidth()-fontBorder, g2.getHeight()/2).setFont("4x6"); // draw and unload custom font g2.setColor(0).fillPoly([0,0, g2.getWidth(),0, 0,slope*2]); + // redraw the top widget clockInfoMenu.redraw(); // start the animation *in* diff --git a/apps/slopeclockbig/metadata.json b/apps/slopeclockbig/metadata.json index 0ba111f66..6d47b3b22 100644 --- a/apps/slopeclockbig/metadata.json +++ b/apps/slopeclockbig/metadata.json @@ -1,6 +1,6 @@ { "id": "slopeclockbig", "name": "Slope Clock BIG", - "version":"0.3", + "version":"0.4", "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen. This is a clone of the original Slope Clock which shows extra information and allows the colors to be selected.", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], From 1188025348440d676592db9663ef151be1bfdee0 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 11 Aug 2024 18:58:51 +0200 Subject: [PATCH 011/188] :bug: use different font for clock --- apps/slopeclockbig/ChangeLog | 1 + apps/slopeclockbig/app.js | 12 ++++++------ apps/slopeclockbig/metadata.json | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/slopeclockbig/ChangeLog b/apps/slopeclockbig/ChangeLog index 16c02f904..e1de62d23 100644 --- a/apps/slopeclockbig/ChangeLog +++ b/apps/slopeclockbig/ChangeLog @@ -3,3 +3,4 @@ 0.20: Minor fix 0.30: Fix size of animation and drawing slope to left upper 0.40: Try with halving the other scalars +0.41: Use different font for clock diff --git a/apps/slopeclockbig/app.js b/apps/slopeclockbig/app.js index eab1474d4..1f4807e4f 100644 --- a/apps/slopeclockbig/app.js +++ b/apps/slopeclockbig/app.js @@ -7,16 +7,16 @@ let settings = Object.assign( ); // Actual height 71 (81 - 11) //const fontBitmap = E.toString(require('heatshrink').decompress(atob('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'))); -// Actual height 35 (34 - 0) -const fontBitmap = E.toString(require('heatshrink').decompress(atob('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'))); +// Actual height 35 (37 - 3) +const fontBitmap = E.toString(require('heatshrink').decompress(atob('AAUD4AFDh/gAoc/BYn/AocB/+ADgf/CAcH/wiE/gFDj/4FAnwFxM/JhYFEnwKEFxJLBFwcf/5jD/5dDh4FBLoV/AoJbCAgJdCBQQoBNgIWDEwP/HIU/E4gWBIgYKBHARDBQgYiBIYYzBR4iDEj6mDgE4aJcBCQl/HQYpBGoZSCIwgFCMYZ/EAoQWCAoR6CEYJdBAoYcDGoKRCAoUfBwM/SQLnCAQV/RQM/O4KbCeAIoBGIWAgYxDFAIFBAQRLBFYIuBKIYuBKIYoBAoYxCLogFCbw4FDXoQRCT4QFBTArDDIIQATn4CBEYV+NIJdBAQUDIAICCg4vBTwZjLJgIECIIK7DR4S7ERhK+CFwh6CFwQoDPYSJCMAiBDLQYACLQQALjAFEPQLqCewTqCLoLtEFYLqDFYN/LoXgCwJdBv/AOIJdBEQJrB4AlCLoUD/yICFYTfDQwX9GIQFB/aME86MEx6MD/0fRgIFB/E/XYfgRgQ4CRgS5BRgd/+CMDjzqDAAsQAok8AQMPEQSvBFAICCgYoBRgN/R4UP+H+g5dC8P8BAI5B4f4SoIiBx5XBRgUf+BdBRgM/LoQoC4KMC/P/4aMEOwKGDXYQFDRgYABRgIECLQIFB/a1CHQP3EQQFB44cCgBcBTIJ8CfYQACgIQCABozCAAJlBAocfXQS8CXQQQBLgStCH4ZeCLgJMCIoZKBFwc//guD/6wBCAeDFwQ4BdIaMPwAzCF4RKBAAIvBHIX/dQS7EYIa7RUgbpBAAapFRgkDRgYAMiEAFwKdCn5dD8BdE8IFBLoXBGoJdC4Y1BLoWHGoJdB/0PMYJdB/kPMYJtCj/AJ4Mf8F/wBPBn/AFwXwFAIuCHAKSCj/DSQc/w6SDv5BCLoI4BXYYuBWoQuCEQQuBAoIcBh5TCDgLsCTwhcCABsfV4aTCDYbMEb4QFBCAQFCfgYFBfgYFBewYcBAgRGBDgYFBDgY7BDgJ8BQwMf/C1E8f4VYIiBw61DB4S1CXYS1CRgP3WoQPBWoYPBWofBAoIoBn7BCTAN/wZXEJoKHC/gFBDgMB4AFBV4cDV4gAJn6bCAAN/AQMCAQIaCjwoBGIICCdQJaBAQLqBDIIIC8EDeAR9Bj4FCFwJjDTgIFD/x6BKQK1FEAIABDgLYIGYIuBQobeCNwYnBDYLkDAgQuBDYQuCRQcHRQjhCABavCDIrfBj4FCj/8n4FCYoLHCHQP9AoRjDIQJdCeAZ1EQoSMBQwQpB4C1BBIKhBg/gAoLQBh/AMgN+FAOBAoI0Bn5wBwYuBFAWHFwItCXYQFDXYiUBXYbBFewX/z5RCgf+L4KgBgfwL4KMDQQIFEUxEPB4l/GQN4SQX+g72DF4JRBGQKABAoIyBQwRdC/F/wBdC+BdE8AqBGYN/4I2BEoN/w61CTALzCD4I0D/8DDAKGCg/z/+AFAOP76MFcg8PVIgFDKILwDQgQcDAoaMCAoQWBAoRcBSQQQDRoIKDAA0HwEPWgfAn+AVQWAHQRkBwYFCLwMHEgQDBYYYDBj5jBEQP4n47CAYN/NIIoB8BSDFwkAv0AcwgAD'))); Graphics.prototype.setFontPaytoneOne = function(scale) { - //this.setFontCustom(fontBitmap,32, atob("HTBFLTQ0PzU/Lz8+HQ=="),100+(scale<<8)+(1<<16)); + //this.setFontCustom(fontBitmap,46, atob("HTBFLTQ0PzU/Lz8+HQ=="),100+(scale<<8)+(1<<16)); this.setFontCustom( fontBitmap, - 32, - atob("BwsQFhQhGgkPEBIWCw0LEhkRExQYFBYTFxYLCxUVFhIfGxsWGxUVFxsLDxwUHxwdGB0ZFRUbGSUYFhMQEg8XERIYGRIYFA8aGA4MFw8lGBcZGBEREBYWIBUXExELEBY="), - 100+(scale<<8)+(1<<16) + 46, + atob("DRcgFhkZHhodGRwcDQ=="), + 47|65536 ); return this; }; diff --git a/apps/slopeclockbig/metadata.json b/apps/slopeclockbig/metadata.json index 6d47b3b22..c94688c9b 100644 --- a/apps/slopeclockbig/metadata.json +++ b/apps/slopeclockbig/metadata.json @@ -1,6 +1,6 @@ { "id": "slopeclockbig", "name": "Slope Clock BIG", - "version":"0.4", + "version":"0.41", "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen. This is a clone of the original Slope Clock which shows extra information and allows the colors to be selected.", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], From c720e7ff046ebeebd6abb7df8d5c6c41c41519c9 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 11 Aug 2024 19:09:20 +0200 Subject: [PATCH 012/188] :bug: use proper size for g2 --- apps/slopeclockbig/ChangeLog | 1 + apps/slopeclockbig/app.js | 8 ++------ apps/slopeclockbig/metadata.json | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/apps/slopeclockbig/ChangeLog b/apps/slopeclockbig/ChangeLog index e1de62d23..2faf14c57 100644 --- a/apps/slopeclockbig/ChangeLog +++ b/apps/slopeclockbig/ChangeLog @@ -4,3 +4,4 @@ 0.30: Fix size of animation and drawing slope to left upper 0.40: Try with halving the other scalars 0.41: Use different font for clock +0.42: Minor fix; use proper amount of g2 diff --git a/apps/slopeclockbig/app.js b/apps/slopeclockbig/app.js index 1f4807e4f..e2e7fc36c 100644 --- a/apps/slopeclockbig/app.js +++ b/apps/slopeclockbig/app.js @@ -25,13 +25,9 @@ let drawTimeout; //let g2 = Graphics.createArrayBuffer(g.getWidth(),90,1,{msb:true}); let g2 = Graphics.createArrayBuffer(g.getWidth() / 2,g.getHeight() / 2,1,{msb:true}); -// let g2img = { -// width:g2.getWidth(), height:g2.getHeight(), bpp:1, -// buffer:g2.buffer, transparent:0 -// }; let g2img = { - width:g2.getWidth() / 2, height:g2.getHeight() / 2, bpp:1, - buffer:g2.buffer, transparent:0 + width:g2.getWidth(), height:g2.getHeight(), bpp:1, + buffer:g2.buffer, transparent:0 }; const slope = 10; const offsY = 10; // offset of numbers from middle diff --git a/apps/slopeclockbig/metadata.json b/apps/slopeclockbig/metadata.json index c94688c9b..ecc8d4bcc 100644 --- a/apps/slopeclockbig/metadata.json +++ b/apps/slopeclockbig/metadata.json @@ -1,6 +1,6 @@ { "id": "slopeclockbig", "name": "Slope Clock BIG", - "version":"0.41", + "version":"0.42", "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen. This is a clone of the original Slope Clock which shows extra information and allows the colors to be selected.", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], From 2b1b7048f46155bb82f3a70251741e2ce94f5d04 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 11 Aug 2024 20:59:29 +0200 Subject: [PATCH 013/188] :sparkles: Increase size of clock_info stuff bottom, left --- apps/slopeclockbig/ChangeLog | 1 + apps/slopeclockbig/app.js | 2 +- apps/slopeclockbig/metadata.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/slopeclockbig/ChangeLog b/apps/slopeclockbig/ChangeLog index 2faf14c57..a8903409e 100644 --- a/apps/slopeclockbig/ChangeLog +++ b/apps/slopeclockbig/ChangeLog @@ -5,3 +5,4 @@ 0.40: Try with halving the other scalars 0.41: Use different font for clock 0.42: Minor fix; use proper amount of g2 +0.50: Increase size of clock_info stuff bottom, left diff --git a/apps/slopeclockbig/app.js b/apps/slopeclockbig/app.js index e2e7fc36c..c8ca4cedc 100644 --- a/apps/slopeclockbig/app.js +++ b/apps/slopeclockbig/app.js @@ -160,7 +160,7 @@ let clockInfoMenu = require("clock_info").addInteractive(clockInfoItems, { // t draw : clockInfoDraw, bg : g.theme.bg, fg : g.theme.fg, hl : "#f00"/*red*/ }); let clockInfoMenu2 = require("clock_info").addInteractive(clockInfoItems, { // bottom left - app:"slopeclockbig",x:0, y:115, w:50, h:40, + app:"slopeclockbig",x:0, y:92, w:85, h:80, draw : clockInfoDraw, bg : bgColor, fg : g.theme.bg, hl : (g.theme.fg===g.toColor(bgColor))?"#f00"/*red*/:g.theme.fg }); diff --git a/apps/slopeclockbig/metadata.json b/apps/slopeclockbig/metadata.json index ecc8d4bcc..92f925ab1 100644 --- a/apps/slopeclockbig/metadata.json +++ b/apps/slopeclockbig/metadata.json @@ -1,6 +1,6 @@ { "id": "slopeclockbig", "name": "Slope Clock BIG", - "version":"0.42", + "version":"0.5", "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen. This is a clone of the original Slope Clock which shows extra information and allows the colors to be selected.", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], From fc585160768df9c42ac8e69659d8991061b61585 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 11 Aug 2024 21:55:03 +0200 Subject: [PATCH 014/188] :memo: better readability --- apps/slopeclockbig/app.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/slopeclockbig/app.js b/apps/slopeclockbig/app.js index c8ca4cedc..1afde1410 100644 --- a/apps/slopeclockbig/app.js +++ b/apps/slopeclockbig/app.js @@ -137,7 +137,7 @@ let animate = function(isIn, callback) { // clock info menus (scroll up/down for info) let clockInfoDraw = (itm, info, options) => { let textY = options.y+41; - // set a cliprect to stop us drawing outside our box + // set a clip-rect to stop us drawing outside our box g.reset().setClipRect(options.x, options.y, options.x+options.w-1, options.y+options.h-1); g.setFont("6x15").setBgColor(options.bg).clearRect(options.x, textY-15, options.x+options.w-2, textY); @@ -154,14 +154,18 @@ let clockInfoDraw = (itm, info, options) => { // return ClipRect g.setClipRect(0,0,g.getWidth()-1, g.getHeight()-1); }; +//load first let clockInfoItems = require("clock_info").load(); let clockInfoMenu = require("clock_info").addInteractive(clockInfoItems, { // top right app:"slopeclockbig",x:132, y:settings.hideWidgets ? 12 : 24, w:44, h:40, - draw : clockInfoDraw, bg : g.theme.bg, fg : g.theme.fg, hl : "#f00"/*red*/ + draw : clockInfoDraw, + bg : g.theme.bg, fg : g.theme.fg, hl : "#f00"/*red*/ }); let clockInfoMenu2 = require("clock_info").addInteractive(clockInfoItems, { // bottom left - app:"slopeclockbig",x:0, y:92, w:85, h:80, - draw : clockInfoDraw, bg : bgColor, fg : g.theme.bg, hl : (g.theme.fg===g.toColor(bgColor))?"#f00"/*red*/:g.theme.fg + app:"slopeclockbig", + x:0, y:92, w:85, h:80, + draw : clockInfoDraw, + bg : bgColor, fg : g.theme.bg, hl : (g.theme.fg===g.toColor(bgColor))?"#f00"/*red*/:g.theme.fg }); // Show launcher when middle button pressed From de6fb4978445ca549430f80ebec540b1012c0089 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 4 Oct 2024 22:00:21 +0200 Subject: [PATCH 015/188] :arrow_right: merge from upstream? --- core | 2 +- webtools | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core b/core index 3ec8e289a..1cdcb3405 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 3ec8e289a26a545d0d0c50f6945978584fb3d7f8 +Subproject commit 1cdcb3405f78ef35f231b9c3df501721bda75525 diff --git a/webtools b/webtools index eb1a20ce8..71f271a1c 160000 --- a/webtools +++ b/webtools @@ -1 +1 @@ -Subproject commit eb1a20ce892e28e89686f022cbda7cd66896d23b +Subproject commit 71f271a1c7be37efe4e472b7482b08ded1d0ab6f From a1ac80efb0d3a1b7ccd0c146f6e852ba4269673f Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 16 Feb 2025 21:41:37 +0100 Subject: [PATCH 016/188] change font to AudioWide for better readability --- apps/pebblepp/app.js | 33 ++++++++++++++++++++++++--------- apps/pebblepp/metadata.json | 2 +- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/apps/pebblepp/app.js b/apps/pebblepp/app.js index 7c01fcade..d5a55c45a 100644 --- a/apps/pebblepp/app.js +++ b/apps/pebblepp/app.js @@ -1,20 +1,35 @@ Graphics.prototype.setFontLECO1976Regular42 = function(scale) { - // Actual height 42 (41 - 0) - return g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAA/AAAAAAAAH/AAAAAAAA//AAAAAAAP//AAAAAAB///AAAAAAP///AAAAAB////AAAAAf////AAAAD////4AAAAf////AAAAH////4AAAA////+AAAAA////wAAAAA///+AAAAAA///gAAAAAA//8AAAAAAA//gAAAAAAA/4AAAAAAAA/AAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAH/AAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//h////AAA//h////AAA//h////AAA//h////AAA//h////AAA//h////AAA//h////AAA//h////AAA//h////AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////gD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4AAAH/AAA/4B/gH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////wAAAAA////wAAAAA////wAAAAA////wAAAAA////wAAAAA////wAAAAA////wAAAAA////wAAAAA////wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAAAAB/wAAAAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////x//AAA////x//AAA////x//AAA////x//AAA////x//AAA////x//AAA////x//AAA////x//AAA////x//AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/wB////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/4B////AAA/wB////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA//gAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA/4AAAAAAAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA////wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA/4B/wH/AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAA///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAH/AAAAP+AAH/AAAAP+AAH/AAAAP+AAH/AAAAP+AAH/AAAAP+AAH/AAAAP+AAH/AAAAP+AAH/AAAAH+AAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"), 46, atob("ERkmHyYmJiYmJCYmEQ=="), 60+(scale<<8)+(1<<16)); -}; + // Actual height 30 (31 - 2) + // 1 BPP + return this.setFontCustom( + atob('AAAAAAAAAAAHgAAAAAHwAAAAAPwAAAAAPwAAAAAHwAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAABwAAAAAHwAAAAAfwAAAAA/wAAAAD/wAAAAH/wAAAAf/AAAAA/+AAAAD/4AAAAP/wAAAAf/AAAAB/+AAAAD/4AAAAP/gAAAA//AAAAB/8AAAAH/4AAAAP/gAAAAP+AAAAAP8AAAAAPwAAAAAPgAAAAAOAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//AAAAP//wAAAf//8AAA///+AAB////AAD////AAD/gH/gAH+AP/gAH8Af/wAH4Af/wAP4A/vwAPwB/vwAPwB/PwAPwD/PwAPwH+PwAPwH8PwAPwP8PwAPwf4PwAPwfwPwAPw/wPwAPx/gPwAPx/APwAPz/APwAPz+APwAP/8APwAH78AfwAH/4AfwAH/wA/gAD////gAD////AAB////AAA///+AAAf//8AAAP//wAAAB//AAAAAAAAAAAAAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAP////wAP////wAP////wAP////wAP////wAP////wAAAAAAAAAAAAAAAAAAf/wAAAB//wAHwD//wAPwH//wAPwH//wAPwH//wAPwP//wAPwP4PwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAP4fwPwAP//wPwAH//wPwAH//gPwAD//gPwAB//APwAAf8APwAAAAAAAAAAAAAAAAAAAAAAHwHwHwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAP4PwfwAP////wAH////wAH////gAD////gAB////AAAf//8AAAAAAAAAAAAAAAAP//gAAAP//wAAAP//wAAAP//wAAAP//wAAAP//wAAAH//wAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAP////wAP////wAP////wAP////wAP////wAP////wAAAAAAAAAAAAAAAAAAAAAAP/8APwAP/+APwAP//gPwAP//gPwAP//wPwAP//wPwAP//wPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwP//wAPwH//wAPwH//wAPwH//gAHwD//AAAAB/+AAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAP//wAAA///8AAB///+AAD////AAD////gAH////gAH+Px/wAH4PwfwAP4PwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwP4PwAPwP//wAPwH//wAPwH//wAAAD//gAAAD//AAAAB/+AAAAAf4AAAAAAAAAAAAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAQAPwAABwAPwAADwAPwAAPwAPwAA/wAPwAD/wAPwAH/wAPwAf/wAPwB//AAPwD/+AAPwP/4AAPw//gAAPz/+AAAP3/8AAAP//wAAAP//AAAAP/+AAAAP/4AAAAP/gAAAAP+AAAAAP8AAAAAHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAHwAAAAA/+AAAAB//AAAf///gAB////gAD////wAH////wAH//4PwAH//wPwAP//wPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAP//wPwAP//wPwAH//4PwAH////wAD////wAB////wAAf///gAAAB//AAAAA/+AAAAAPwAAAAAAAAAAAAAAAAAf8AAAAB/+AAAAD//AAAAH//gAAAH//wPwAH//wPwAP//wPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAP4PwPwAH8PwfwAH////wAH////gAD////gAD////AAB///+AAAf//8AAAP//wAAAAAAAAAAAAAAAAAAAAAAAAD4AHgAAD4AHwAAH8APwAAD8APwAAD4AHwAABwAHgAAAAAAAA'), + 46, + atob("CBwmDR4dHh8fHB8eCQ=="), + // 42|65536 + 60+(scale<<8)+(1<<16) + ); +} Graphics.prototype.setFontLECO1976Regular22 = function(scale) { // Actual height 22 (21 - 0) - return g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/nA/+cD/5wP/nAAAAAAAAPwAA/gAD+AAPwAAAAAD+AAP4AA/gAAAAAAAAAAAAAcOAP//A//8D//wP//AHDgAcOAP//A//8D//wP//AHDgAAAAAAAAH/jgf+OB/44H/jj8OP/w4//Dj/8OPxw/4HD/gcP+Bw/4AAAAAAAP+AA/8AD/wQOHHA4c8D//wP/8A//gAD4AAfAAH/8A//wP//A84cDjhwIP/AA/8AB/wAAAAAAAD//wP//A//8D//wOHHA4ccDhxwOHHA4f8Dh/wOH/A4f8ABwAAAAAAAAD8AAP4AA/gAD8AAAAAAAAAAAEAAD+AB//A///v/D//gB/wABwAAAAAADgAA/wAf/4P8///wf/4AP8AAOAAAAAAAAAyAAHcAAPwAD/gAP/AA/8AA/AAH8AAMwAAAAAAAAAAAAADgAAOAAA4AAf8AD/wAP/AA/8AAOAAA4AADgAAAAAAAAAAD8AAfwAB/AAD8AAAAAAAADgAAOAAA4AADgAAOAAA4AADgAAAAAAAAAADgAAOAAA4AADgAAAAAAAAABwAB/AA/8A//gP/gA/wADwAAIAAAAAAD//wP//A//8D//wOAHA4AcDgBwOAHA//8D//wP//A//8AAAAAAAA4AcDgBwOAHA//8D//wP//A//8AABwAAHAAAcAAAAAAAA+f8D5/wPn/A+f8DhxwOHHA4ccDhxwP/HA/8cD/xwP/HAAAAAAAAOAHA4AcDhxwOHHA4ccDhxwOHHA4ccD//wP//A//8D//wAAAAAAAD/wAP/AA/8AD/wAAHAAAcAABwAAHAA//8D//wP//A//8AAAAAAAA/98D/3wP/fA/98DhxwOHHA4ccDhxwOH/A4f8Dh/wOH/AAAAAAAAP//A//8D//wP//A4ccDhxwOHHA4ccDh/wOH/A4f8Dh/wAAAAAAAD4AAPgAA+AADgAAOAAA4AADgAAP//A//8D//wP//AAAAAAAAP//A//8D//wP//A4ccDhxwOHHA4ccD//wP//A//8D//wAAAAAAAD/xwP/HA/8cD/xwOHHA4ccDhxwOHHA//8D//wP//A//8AAAAAAAAOA4A4DgDgOAOA4AAAAAAAAOA/A4H8DgfwOA/AAAAAAAAB4AAPwAA/AAD8AAf4ABzgAPPAA8cAHh4AAAAAAAAAAAAHHAAccABxwAHHAAccABxwAHHAAccABxwAHHAAAAAAAAAOHAA4cADzwAPPAAf4AB/gAD8AAPwAAeAAB4AAAAAAAAA+AAD4AAPgAA+ecDh9wOH3A4fcDhwAP/AA/8AD/wAP/AAAAAAAAAP//4///j//+P//44ADjn/OOf845/zjnHOP8c4//zj//OP/84AAAAAAAP//A//8D//wP//A4cADhwAOHAA4cAD//wP//A//8D//wAAAAAAAD//wP//A//8D//wOHHA4ccDhxwOHHA//8D//wP9/A/j8AAAAAAAA//8D//wP//A//8DgBwOAHA4AcDgBwOAHA4AcDgBwOAHAAAAAAAAP//A//8D//wP//A4AcDgBwOAHA8A8D//wH/+AP/wAf+AAAAAAAAD//wP//A//8D//wOHHA4ccDhxwOHHA4ccDhxwOAHA4AcAAAAAAAA//8D//wP//A//8DhwAOHAA4cADhwAOHAA4cADgAAOAAAAAAD//wP//A//8D//wOAHA4ccDhxwOHHA4f8Dh/wOH/A4f8AAAAAAAA//8D//wP//A//8ABwAAHAAAcAABwAP//A//8D//wP//AAAAAAAAP//A//8D//wP//AAAAAAAAOAHA4AcDgBwOAHA4AcDgBwOAHA//8D//wP//A//8AAAAAAAA//8D//wP//A//8AHwAA/AAP8AB/wAPn/A8f8DB/wIH/AAAAAAAAP//A//8D//wP//AAAcAABwAAHAAAcAABwAAHAAAAAAAAP//A//8D//wP//Af8AAP+AAH/AAD8AAHwAD/AB/wAf8AP+AA//8D//wP//AAAAAAAAP//A//8D//wP//AfwAAfwAAfwAAfwAAfwP//A//8D//wAAAAAAAAAAAP//A//8D//wP//A4AcDgBwOAHA4AcD//wP//A//8D//wAAAAAAAD//wP//A//8D//wOHAA4cADhwAOHAA/8AD/wAP/AA/8AAAAAP//A//8D//wP//A4AcDgBwOAHA4AcD//+P//4///j//+AAA4AADgAAAP//A//8D//wP//A4eADh+AOH8A4f4D/3wP/HA/8MD/wQAAAAAAAD/xwP/HA/8cD/xwOHHA4ccDhxwOHHA4f8Dh/wOH/A4f8AAAAAAAA4AADgAAOAAA//8D//wP//A//8DgAAOAAA4AADgAAAAAA//8D//wP//A//8AABwAAHAAAcAABwP//A//8D//wP//AAAADAAAPgAA/wAD/4AB/8AA/8AAfwAB/AA/8Af+AP/AA/wAD4AAMAAA4AAD+AAP/gA//8AH/wAB/AAf8Af/wP/4A/4AD/gAP/4AH/8AB/wAB/AB/8D//wP/gA/gADgAAIABA4AcDwDwPw/Afn4Af+AA/wAD/AA//AH5+A/D8DwDwOAHAgAEAAAAP/AA/8AD/wAP/AAAf8AB/wAH/AAf8D/wAP/AA/8AD/wAAAAAAAADh/wOH/A4f8Dh/wOHHA4ccDhxwOHHA/8cD/xwP/HA/8cAAAAAAAAf//9///3///f//9wAA3AADcAAMAAAOAAA/gAD/wAH/8AB/8AA/wAAPAAAEAAAAHAADcAANwAB3///f//9///wAA"), 32, atob("BwYLDg4UDwYJCQwMBgkGCQ4MDg4ODg4NDg4GBgwMDA4PDg4ODg4NDg4GDQ4MEg8ODQ8ODgwODhQODg4ICQg="), 22+(scale<<8)+(1<<16)); -}; + // 1 BPP + return this.setFontCustom( + atob('AAAAAAAAAAAAAAAAAAAAAAAAAB/wQH//gf/+B/+4DgAAAAAAAAAD8AAPwAA/AADgAAPwAA/AAD8AAAAAAADAAEcAB5+AH/4A//gP/+A//AD+dgN7+AH/4D//gP/4A/3AD+cAB5AADAAAAAAAIAAD4AAf+AD/4A//4H7/gfv+B+/4A7+ADvwAO+AADwAAAAAPgAB/AAH+AAd4IB3jgH++AP34A//AAfwAH8AA/+AH78Aef4BhzgEHOAAf4AA/AAB8AAAAAAAAD/8Af/4B//gH/+Ac44BzjgHOOAc44BzHgHB+AcP4AA/AADgAAGAAAAAOAAA/AAD8AAPwAAAAAABgAA/4AP/4D//wf//z+A/vgA+4AB7AADgAAAwAAbgADvAA+/AP7/n/D//4H/+AH/gADwAAAAAIgAB3AAHcAAfwAH/wAf/AB/8AB/AAHcAAdwAAiAAAAAAA4AADgAAOAAH/AA/+AD/4AP/gADgAAOAAA4AADgAAAAAAAeAAH4AAfgAB8AAGAAAAAAAAADgAAOAAA4AADgAAOAAA4AADgAAOAAA4AADgAAOAAAAAAAAAAAOAAA4AADgAAEAAAAAAAgAAOAAB4AAfgAH8AA/gAP4AB/AAfwAD8AAfgAB4AAHAAAQAAAAAAAHwAD/wAf/gD//AP/+B8P4Hh/geHuB4+4HnzgeeOB744H/Dgf4OB/h4D//gP/8Af/gA/8AAfAAAAADAAAeAAB4AAH//gf/+B//4H//gAAAAAAAAB/geP+B4/4Hj/geeOB544HnjgeeOB544HnjgeeOB/44D/jgP8OAfg4AAAAMOOB544HnjgeeOB544HnjgeeOB544HnjgeeOB//4H//gP/+Af/wAf4AAAAB/4AH/gAf+AB/4AAHgAAeAAB4AAHgAAeAAB4AAHgAP/+B//4H//gf/+A//4AAAAAAAB/g4H/Dgf+OB/44HnjgeeOB544HnjgeeOB544HnjgeP+B4/4Hj/gAH4AAAAAAAAD/4Af/wD//gP/+B554HnjgeeOB544HnjgeeOB544Hj/geP+AA/wAA+AAAAB4AAHgAAeAGB4B4HgfgeD+B4/wHv8Af/AB/4AH+AAfgAB8AADAAAAAAAAHAAZ/AH/+A//4D//gf+OB544HnjgeeOB544H/jgf+OA//4B//gBn8AAPgAAAAH4AA/wAD/jgf+OB544HnjgeeOB544HnjgeeOB554D//gP/+Af/wA/+AAAAAAAQAcDgB4OAHA4AABAAAAACA+AcH4B4fgHB4AAAAAOAAB8AAP4AB/gAP/AB8+AHh4AcDgBwGAGAIAAAAAAAABzgAHOAAc4ABzgAHOAAc4ABzgAHOAAc4ABzgAHOAAAAAAAAAYAgBwGAHA4AeHgB8+AD/wAH/AAP4AAfAAA4AAAAAMAAB4AAHgAAeAAB4eQHj/gef+B5/4Hn4AeeAB54AH/gAP+AA/wAA8AAAAAAAAAAH+AB/+AH/4Ac/gB/+AH/4Af+AB/4AH/gAf+AB/4AH/gAP8AAAAAAAAAP/gD/+Af/4D//gPjwA8PAHg8AeDwB4PAHg8AeDwB4PAH//gf/+B//4D//gAAAAf/wH//gf/+B//4H//geeOB544HnjgeeOB544HnjgeeOB/84D//gP/+Aff4AA/AAAAAP/gD//AP/+B//4HgDgeAOB4A4HgDgeAOB4A4HgDgeAOB4A4HgDgeAOAwA4AAAAH/8B//4H//gf/+B//4HgDgeAOB4A4HgDgeAOB4A4HgHgPAeA//4B//AH/4AH/AAAAAAAAA//gH//Af/+B//4HnjgeeOB544HnjgeeOB544HnjgeeOB544HjjgeAOAAAAAAAAP/+B//4H//gf/+B//4HngAeeAB54AHngAeeAB54AHngAeeAB54AHgAAAAAAAAAB//AP/+B//4H//geAOB544HnjgeeOB544HnjgeeOB544Hn/gef+B5/4Hj/gAAAA//4H//gf/+B//4D//gAeAAB4AAHgAAeAAB4AAHgAAeAAB4AH//gf/+B//4H//gAAAA//4H//gf/+B//4D//gAAAAAA4AADgAAOAAA4AADgAAOAAA4AADgAAOAAA4AADgf/+B//4H//AP/4AAAAAAAAP/+B//4H//gf/+A//4AHgAAeAAD8AAf4AD/wAfvgD8fAfg+B8B4HgDgcAGBgAIAAAAAAAA//wH//gf/+B//4D//gAAOAAA4AADgAAOAAA4AADgAAOAAA4AADgAAOAAAAAAAAf/+B//4H//gP/+Af4AAf4AAf4AAfwAA/gAA/AAP4AD/AAfwAH+AB/gAf/+B//4H//gP/+AAAAAAAAf/+B//4H//gP/+AfAAA+AAB8AAD4AAHwAAPgAAfgAA/AP/+B//4H//wf/+A//wAAAAB/gAf/gD//AP/+B8B4HgDgeAPB4A8HgDweAPB4A8HgDweAOB8D4D//gH/8AP/gAf4AAAAAH/4B//gP/+B//4H//geDwB4PAHg8AeDwB4PAHg8AeDwB4eAD/4AP/gAf8AA/gAAAAAH+AB/+AP/8A//4HwHgeAOB4A8HgDweAPB4A8HgDweAPh4A/HwP8P//wf/zA/+EB/gAAAAAAAAP/+B//4H//gf/+B4cAHhwAeHgB4fAHh+AeH4B4fwHj/gf/eB/84D/hgP8GAHAIAAAAAAAAfg4D/DgP+OB/44HnjgeeOB544HnjgeeOB544HnjgeeOB4/4Hj/geH8AAPgAAAAeAAB4AAHgAAeAAB4AAH//gf/+B//4H//gf/+B4AAHgAAeAAB4AAHgAAMAAAAAAAAAAf/AB//AH/+Af/8AAH4AAHgAAeAAA4AADgAAOAAA4AADgAAOB//4H//gf/+A//wAAAAcAAB8AAH+AAP+AAf+AAP+AAP+AAP4AAfwAH+AB/wAf8AH/AB/wAH8AAfAABwAAAAAAfgAB/8AH//gf/+AD/8AA/gAP8AB/AAf4AD+AAPgAA/gAB/gAD/AAD/AAD+AD/8H//gf/+B/+AH4AAAAABAAIHABgeAOB8B4H4fgPz+Af/gA/8AA/gAD+AA/8AH/4A/P4H4fgfAeB4A4HABgAAAB/gAH/AAf+AB/8AADwAAHAAAf4AB/gAH+AAf4AB/gAHAAA8AH/wAf+AB/4AH+AAAAAB4A4HgHgeA+B4H4Hg/geH+B4/4Hnzgf+OB/w4H+DgfwOB+A4HwDgOAOAAAAH//8///7///v//+///7gAHuAAeYAAAAAAEAAAcAAB4AAH4AAPwAAfwAAfwAA/gAA/gAB/AAB+AAB4AADgAACAAAAGAAM4AB7gAHv//+///7///v//+f//wAAAAfAAH4AA/AAH4AAfAAB+AAD8AAH4AAHwAAAAAAAAAAADgAAOAAA4AADgAAOAAA4AADgAAOAAA4AADgAAOAAA4AADgAAAAAAAAAAOAAA8AADwAAHAAAeAAA4AADAAAAAAAADgAA/AAH+AHf4AdzgB3OAHc4AdzgB3OAHc4Af/gB/+AD/4AH/AAAAD//AP//A//+D//4H//gB4OAHg4AeDgB4OAHg4Af/gB/+AD/4AP/AAPwAAAAAB8AA/8AD/4Af/gB/+AHg4AeDgB4OAHg4AeDgB4OAHg4AeDgAAAAA/AAP/AA/+AH/4Af/gB4OAHg4AeDgB4OAHg4H//g//+D//4P//Af/wAAAAAAAAAf8AD/4Af/gB/+AHO4Ac7gBzuAHO4Ac7gB7uAH+AAf4AA/AAAAAA//gf/+B//4P//g//+D3gAPeAA94AD3gAPeAA94AD3gAAAAAAf4AD/wAf/gB/+AHg5weDnB4OcHg5weDnB4OcH//wf//A//4B//AAAAf/+D//4P//g//+D//4AeAAB4AAHgAAeAAB4AAHgAAf/gA/+AD/4AD/gAAABj/4Of/g5/+Dn/4Of/gAAABj//+f//5///n//uf/4AAAAAAAP//g//+D//4P//gAHAAA+AAH8AAf4AD/wAfPgB4eAHA4AYBgBgGAAAAAAAA//4D//wP//g//+AAA4AADgAAAAB/4Af/gB/+AH/4Af/gB4AAHgAAeAAB/+AH/4Af/gB/+AHgAAeAAB/+AH/4AP/gAf+AAf4AAAAAAAAD/4Af/gB/+AH/4AeAAB4AAHgAAeAAB4AAHgAAf/gA/+AB/4AD/gAAAAA/AAP/AA/+AH/4Af/gB4OAHg4AeDgB4OAHg4Af/gB/+AD/4AP/AAPwAAAAAD/+A//4D//gf/+B//wHg4AeDgB4OAHg4AeDgB/+AH/4AP/gA/8AA/AAAAAAHwAD/wAP/gB/+AH/4AeDgB4OAHg4AeDgB4OAH//Af/+A//4D//gD/+AAAAAP4AH/gA/+AH/4Af/gB4AAHgAAeAAB4AAHgAAeAAB4AAAAAAAAAA+OAD84AfzgB/OAH84AfzgB/OAH84Af/gB/+AH/4AA/AAAAAHgAAeAAB4AA//4H//gf/+B//4D//gB4AAHgAAeAAB4AAAAAAf4AB/4AH/wAf/gA/+AAA4AADgAAOAAA4AADgB/+AH/4Af/gB/+AD/wAAAAAAAAH/4Af/gB/+AH/4AADgAAeAAD4AAfAAD4AAfgAH8AB/gAH4AAeAAAAAAAAAAf/gB/+AH/4Af/gAD4AA/AAH4AA/4AH/4Af/gB/+AD/4AAfAAH8AA/AAP4AB/AAHwAAeAAAAAAEAIAYBgBwOAHj4AffgA/8AB/gAD8AAf4AD/wAf/gB8+AHB4AYDgBAGAAAAAf8AB/8AH/4Af/gA/+cAA5wADnAAOcAA5wADnA//8H//wf//B//4H/+AAAAAAEAHg4AeHgB4+AHn4Ae/gB/+AH+4AfzgB+OAHw4AeDgBwOAAAAABwAAHAAf/4H//4f//z///v+P+4AB7gAHgAAA///7///v//+///7///AAAAYAAzgAHuAAe/4/7///n//8f//gf/4ABwAAAAAAcAADwAAOAAB4AAHgAAOAAA4AADwAAPAAA8AADwAAPAAB4AAAAAA='), + 32, + atob("BwYJEQ0TEAUKCgwMBg0GDxUIERAREREPERAGBQsNDBAPEhIREhEREhIGEBMRFRMTEhMTEhETEhYSEhAJDwkKDwoPEA4QDw0PEAYGEAgUEBAQEA0ODRAQFRAQDgoGCg4="), + // 22|65536 + 22+(scale<<8)+(1<<16) + ); +} Graphics.prototype.setFontLECO1976Regular14 = function() { // Actual height 14 (13 - 0) + // 1 BPP return this.setFontCustom( - atob('AAAAAAAAAAAD+w/sAAAAA8APAAAA8APAAAAMwP/D/wMwDMD/w/8DMAAAAAD8w/M8z/M/zPM/DPwAAAAPwD8QzcP/D/AHgD/D/wzMI/APwAAAAD/w/8MzDMwzMM/DPwDAAADwA8AAAAAAD8H/74f4BwAAAA4B/z8/8D8AAAAAeAPwD8AeAHgAAAAAAAAYAGAH4B+AGABgAAAAAAHgB4AAAAAYAGABgAYAAAAAABgAYAAAAQA8D/D+A8AAAAAA/8P/DAwwMMDD/w/8AAAAAwMMDD/w/8ADAAwAAO/DvwzMMzDMw/MPzAAAAAMDDMwzMMzDMw/8P/AAAAAPwD8ADAAwAMA/8P/AAAAAP3D9wzMMzDMwz8M/AAAAAP/D/wzMMzDMwz8M/AAA4AOADAAwAMAD/w/8AAAAA/8P/DMwzMMzD/w/8AAAAA/MPzDMwzMMzD/w/8AAAAAYYGGAAAAAGHhh4AABwAcAPgDYB3AYwAAAAAZgGYBmAZgGYBmAAAAABjAdwDYA+AHABwAAA4AOADOwzsMwD8A/AAAAAA//P/zAM37N+zZs/7P+wAAAAP/D/wzAMwDMA/8P/AAAAAP/D/wzMMzDMw/8P/AAAAAP/D/wwMMDDAwwMMDAAAAAP/D/wwMMDDhw/8H+AAAAAP/D/wzMMzDMwzMMDAAAAAP/D/wzAMwDMAzAMAAAA/8P/DAwzMMzDPwz8AAAAA/8P/AMADAAwD/w/8AAAAA/8P/AAAwMMDDAwwMMDD/w/8AAAAA/8P/AcAPAPwDvwj8AAAAA/8P/AAwAMADAAwAAP/D/w/AB+AHwA8B+B+A/8P/AAA/8P/D/wfAB8AHw/8P/AAAAAP/D/wwMMDDAw/8P/AAAAAP/D/wzAMwDMA/APwAAA/8P/DAwwMMDD/8//AAwAA/8P/DOAzwM/D9w/EAAAAA/MPzDMwzMMzDPwz8AADAAwAMAD/w/8MADAAwAAAD/w/8ADAAwAMP/D/wAAPAD8AP4AfAHwP4PwDgAAAPgD/gH8AfB/w/AP4A/wA8D/D/A8AAADAw4cP/A/APwH+DzwwMAAAAA/APwAPwD8A/D8A/AAAAAAz8M/DMwzMMzD8w/MAAAAA/////ADwA4ADwA/wB/ADwAAMAPAD////8A'), - 32, - atob("BAQHCQkNCQQGBggIBAYEBgkHCQkJCQkICQkEBAcIBwkKCQkJCQkICQkECAkHDAkJCAkJCQgJCQ0JCQkFBgU="), - 14|65536 + atob('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'), + 32, + atob("BQUGCwgNCgQHBwkIBAgECg4FCwsMCwsKCwsEBAgJCAoKDAwLDQsLDA0FCwwLDg0NDA0NDAsNDA8MDAsGCgYHCwcKCgkKCgkKCwUFCwUNCwoKCgkJCQoKDgsLCQcEBwk="), + 14|65536 ); } diff --git a/apps/pebblepp/metadata.json b/apps/pebblepp/metadata.json index c2187483c..964c757b6 100644 --- a/apps/pebblepp/metadata.json +++ b/apps/pebblepp/metadata.json @@ -2,7 +2,7 @@ "id": "pebblepp", "name": "Pebble++ Clock", "shortName": "Pebble++", - "version": "0.10", + "version": "0.10.1", "description": "A Pebble style clock (based on the 'Pebble Clock' app) but with two configurable ClockInfo items at the top and custom backgrounds. Date/theme/borders be reconfigured using settings page.", "icon": "app.png", "screenshots": [{"url":"screenshot.png"},{"url":"screenshot2.png"}], From 92b68286d8771e29cb468bb68fce90008d2efb17 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 16 Feb 2025 21:50:11 +0100 Subject: [PATCH 017/188] Try without scaling for large clock letters --- apps/pebblepp/app.js | 4 ++-- apps/pebblepp/metadata.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/pebblepp/app.js b/apps/pebblepp/app.js index d5a55c45a..c1d2ea4c5 100644 --- a/apps/pebblepp/app.js +++ b/apps/pebblepp/app.js @@ -5,8 +5,8 @@ Graphics.prototype.setFontLECO1976Regular42 = function(scale) { atob('AAAAAAAAAAAHgAAAAAHwAAAAAPwAAAAAPwAAAAAHwAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAABwAAAAAHwAAAAAfwAAAAA/wAAAAD/wAAAAH/wAAAAf/AAAAA/+AAAAD/4AAAAP/wAAAAf/AAAAB/+AAAAD/4AAAAP/gAAAA//AAAAB/8AAAAH/4AAAAP/gAAAAP+AAAAAP8AAAAAPwAAAAAPgAAAAAOAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//AAAAP//wAAAf//8AAA///+AAB////AAD////AAD/gH/gAH+AP/gAH8Af/wAH4Af/wAP4A/vwAPwB/vwAPwB/PwAPwD/PwAPwH+PwAPwH8PwAPwP8PwAPwf4PwAPwfwPwAPw/wPwAPx/gPwAPx/APwAPz/APwAPz+APwAP/8APwAH78AfwAH/4AfwAH/wA/gAD////gAD////AAB////AAA///+AAAf//8AAAP//wAAAB//AAAAAAAAAAAAAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAP////wAP////wAP////wAP////wAP////wAP////wAAAAAAAAAAAAAAAAAAf/wAAAB//wAHwD//wAPwH//wAPwH//wAPwH//wAPwP//wAPwP4PwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAP4fwPwAP//wPwAH//wPwAH//gPwAD//gPwAB//APwAAf8APwAAAAAAAAAAAAAAAAAAAAAAHwHwHwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAP4PwfwAP////wAH////wAH////gAD////gAB////AAAf//8AAAAAAAAAAAAAAAAP//gAAAP//wAAAP//wAAAP//wAAAP//wAAAP//wAAAH//wAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAP////wAP////wAP////wAP////wAP////wAP////wAAAAAAAAAAAAAAAAAAAAAAP/8APwAP/+APwAP//gPwAP//gPwAP//wPwAP//wPwAP//wPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwP//wAPwH//wAPwH//wAPwH//gAHwD//AAAAB/+AAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAP//wAAA///8AAB///+AAD////AAD////gAH////gAH+Px/wAH4PwfwAP4PwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwP4PwAPwP//wAPwH//wAPwH//wAAAD//gAAAD//AAAAB/+AAAAAf4AAAAAAAAAAAAAAAAPwAAAAAPwAAAAAPwAAAAAPwAAAQAPwAABwAPwAADwAPwAAPwAPwAA/wAPwAD/wAPwAH/wAPwAf/wAPwB//AAPwD/+AAPwP/4AAPw//gAAPz/+AAAP3/8AAAP//wAAAP//AAAAP/+AAAAP/4AAAAP/gAAAAP+AAAAAP8AAAAAHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAHwAAAAA/+AAAAB//AAAf///gAB////gAD////wAH////wAH//4PwAH//wPwAP//wPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAP//wPwAP//wPwAH//4PwAH////wAD////wAB////wAAf///gAAAB//AAAAA/+AAAAAPwAAAAAAAAAAAAAAAAAf8AAAAB/+AAAAD//AAAAH//gAAAH//wPwAH//wPwAP//wPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAPwPwPwAP4PwPwAH8PwfwAH////wAH////gAD////gAD////AAB///+AAAf//8AAAP//wAAAAAAAAAAAAAAAAAAAAAAAAD4AHgAAD4AHwAAH8APwAAD8APwAAD4AHwAABwAHgAAAAAAAA'), 46, atob("CBwmDR4dHh8fHB8eCQ=="), - // 42|65536 - 60+(scale<<8)+(1<<16) + 42|65536 + // 60+(scale<<8)+(1<<16) ); } diff --git a/apps/pebblepp/metadata.json b/apps/pebblepp/metadata.json index 964c757b6..3d00f49f5 100644 --- a/apps/pebblepp/metadata.json +++ b/apps/pebblepp/metadata.json @@ -2,7 +2,7 @@ "id": "pebblepp", "name": "Pebble++ Clock", "shortName": "Pebble++", - "version": "0.10.1", + "version": "0.10.2", "description": "A Pebble style clock (based on the 'Pebble Clock' app) but with two configurable ClockInfo items at the top and custom backgrounds. Date/theme/borders be reconfigured using settings page.", "icon": "app.png", "screenshots": [{"url":"screenshot.png"},{"url":"screenshot2.png"}], From 1748fab8d6d53ffbc24938dc0160a1ca39e0f889 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 22 Feb 2025 22:45:51 +0100 Subject: [PATCH 018/188] :tada: create first files; nightly check-in --- apps/coin_info/Changelog | 1 + apps/coin_info/README.md | 7 ++++ apps/coin_info/app.png | Bin 0 -> 1670 bytes apps/coin_info/app_mono.png | Bin 0 -> 1005 bytes apps/coin_info/interface.html | 63 ++++++++++++++++++++++++++++++++++ apps/coin_info/metadata.json | 22 ++++++++++++ 6 files changed, 93 insertions(+) create mode 100644 apps/coin_info/Changelog create mode 100644 apps/coin_info/README.md create mode 100644 apps/coin_info/app.png create mode 100644 apps/coin_info/app_mono.png create mode 100644 apps/coin_info/interface.html create mode 100644 apps/coin_info/metadata.json diff --git a/apps/coin_info/Changelog b/apps/coin_info/Changelog new file mode 100644 index 000000000..7108fd7b6 --- /dev/null +++ b/apps/coin_info/Changelog @@ -0,0 +1 @@ +0.01: Initial creation \ No newline at end of file diff --git a/apps/coin_info/README.md b/apps/coin_info/README.md new file mode 100644 index 000000000..891db395f --- /dev/null +++ b/apps/coin_info/README.md @@ -0,0 +1,7 @@ +# Crypto-Coin Info + +Crypto-Coins Infos with the help of the Coinmarketcap API + +## Creator + +Martin Zwigl \ No newline at end of file diff --git a/apps/coin_info/app.png b/apps/coin_info/app.png new file mode 100644 index 0000000000000000000000000000000000000000..97fe8df7de70fd2d6515f4cd0160b5d41e4d89f5 GIT binary patch literal 1670 zcmV;126_33P)On!MWjju(Sm5K z{^42rk5~Ios1+MgE0$s@Ej<)!)mG4YHHz41X~mGd*_hMT=CEngBu&hW zdApm2R*Lyc@HYI3#wxeRA?tu+ZM>i^$@k0 z5T}>JELu1o#Go!-KrdcW(I}(&;lG2%gBZxKmQC3ZRgXe8zYFyI1oRw%y7(b5v65lndtu{mL0hQJL{O28sj* z0>D5%(EkU}cO2-;1$uw>4$=M&RNGsSbx*@8zH;no9M>*7HRAJV9yjR3$jz;?rNCe* zFj$1Cf>6yHApX8}Jj7I-gg#RHjb&ptFm%!tLeyl!EKGqo^Mp5u)+~ss`^UP|XOj}o z4SK;Lz99=3t_FrryF!?OxsmS$=6XMg*6|Qp!^EFHqXQ#15@*%`ycXa!o*?WZe7RF= zmcyNNL7Z@k<>l#jny2m>5NDnNhHC(`E-r+qT?;cXCvmJ+&RO@eMmbMPl)hNoich@B-mG3k6c4Iu0f5 zon+fKSjA~D|6BlBzt&!rLzY1gb4DGeL5)NCbYsMA7`>nD2i+ii12BSBz6`4K>$ni& z{L41j(Hg@IGC89G+kIXkvw$8L(|gExKPsDd0J1MGgl~Y6I4EBh4(xFdp^w9r+vWR> z$fHHtb?)Je!jlzel*koF?%S|FZYwT> zyTYk9k@z8lZi@N8RX`b>(K?h-N_2Y={-EkDhV00JZ2uCFLx3EN3*i88X*+aahapBz z;pFWJ=Ls3y4Xb3d_(k2O$ss;YFz3XcPTL_sS<#CFayTx86TrQ9(kC%m59TKwiezX{ zB%mYWLqmmhbMjQGcRM34bZ#A>ge!y-Am|CgDqS2ofzs<-Cp#J19~@?LG7+Hkq~fCh zD`SF67DWWRKsW$A^iCQ=^&AZkNUHls*YQ+#e{-08ZP^$#$Ks QnZgcHD91L$?K zLl`1wHTf~lXnQQkDpmnXCWY{vHcOX4_2v14=*?{a^5*&i(Ca?V$c&vr_isrdbY=Al zAunw9cM`oPUZaVaUiXa_oLd0Vn-D_OZyFuqlb*m*s6OWIPW|~1)sMma>$ZMgmUhR4 z0Q4Xo-YSn|q_Zypkgo1DnZU-#jIG6w=KTXSQPaCh$MH9Q;29$3R)JJsfi3G^cffOl zo~Nl@Y0PB>_l--FC5s@=u7zwn2-RBz@YaZE>mo2z2h~#m z*}4~^<~f)}Y4L=&b4Jh74x0vT;`wyyvjYEjfxr6x2&e-#0uz;|=%@sC0B?Zi!0{T`4Gb!l z^4)=tDHL}{6L19RTWA9Y>hXvakzF_eECNOXy@B>XTc8gx0$8BRzK${E3ot+5N|!s| z)xc3;X5g6?qoxB5F@}hNWf|*DXP_SV18mM%_7tGeG2$xFDa%#2D<#n+AO2M57;y#Y zkcIH$j^L%9e0zZ(8fkpcMt9fFb&wn}-x0VjfcKa3$TI}HoH^%_1CAI$5@AAMl_1c; z&l_F|)fJ?~aNq`TEG7b3>@X`HH^lj00*8UY9`kll`iTDkc}8o>yW^`yo+MNoo?rRC zu|sd)uO14u0qz=}?S(QR4jpvWUl_VW9&%?nxs&)uUf}DnQw^OMlLSdcJ{X=c6xo1o z&bjtMt>Ibk!?0Yp>qJ0Kl4b{#*Eq`5c^cv41JfKI*y`cLk|2&XJooi~ zvA(dOg^1x}M4Bih$EhVqgnABq0u~xR@rOzJl*JelF>FbgFv*DK6yq|`vjure9AAmv zrT+MCzLyE{c+Uw}WNd(p28}c>DxBjMH{_=7FT|tGAM15{qwkaEy~fjk)-V8Asaa}7 zFGnN}ay*{3qWmyRJXy0oIVKMbp%_;M%t^RJd<}@O%Fy3R@P#Ky%DcE^h!=Y*6l%Z# zL;uO6^U>(5JleMjO`$^#z$n$|S+UL1=0GAQ7-imj7VBvYkd<5w3?*a8S$}I35+BHi z0eQtvqtI;+df%|wn2!~Y!(i>0`PQW&1&th=g5aQ;^cB#x7255dM)>YPxt6gvwX98r zej4JU$JJ|?}?BL ztflc2*bnrg2&mMw!}c+Kht#~=qN=LcXse~EwBIiR_w+ZfCSBooS}2_c)&ir7t#An? b{4e+iJ{1*%KCwob00000NkvXXu0mjfu$|R~ literal 0 HcmV?d00001 diff --git a/apps/coin_info/interface.html b/apps/coin_info/interface.html new file mode 100644 index 000000000..229ced48a --- /dev/null +++ b/apps/coin_info/interface.html @@ -0,0 +1,63 @@ + + + + + +

Set Coinmarketcap API key for Crypto-Coin Info

+

+ +

Where to get your personal API key?

+

Go to https://coinmarketcap.com/api/ and sign up for a free account.
+ There are various pricing models with various degrees of API access. As of 2025.02.22 there is also a free tier.

+ + + + + + + diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json new file mode 100644 index 000000000..02227efc8 --- /dev/null +++ b/apps/coin_info/metadata.json @@ -0,0 +1,22 @@ +{ "id": "coin_info", + "name": "Crypto-Coins Info", + "shortName":"Coins Info", + "version": "0.01", + "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", + "icon": "app.png", + "type": "bootloader", + "tags": "blockchain,crypto,cryptocurrency", + "supports" : ["BANGLEJS2"], + "interface": "interface.html", + "readme": "README.md", + "data": [ + {"name":"coin_info.settings.json"}, + {"name":"coin_info.cmc_key.json"} + ], + "storage": [ + {"name":"owmweather.default.json","url":"default.json"}, + {"name":"owmweather.boot.js","url":"boot.js"}, + {"name":"owmweather","url":"lib.js"}, + {"name":"owmweather.settings.js","url":"settings.js"} + ] +} \ No newline at end of file From ec21723f999f8186e469dc29845e1f39b603ed60 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 00:05:57 +0100 Subject: [PATCH 019/188] :sparkles: more initial stuff; nightly check-in --- apps/coin_info/app.js | 0 apps/coin_info/clkinfo.js | 0 apps/coin_info/metadata.json | 9 ++++----- apps/coin_info/settings.js | 0 4 files changed, 4 insertions(+), 5 deletions(-) create mode 100644 apps/coin_info/app.js create mode 100644 apps/coin_info/clkinfo.js create mode 100644 apps/coin_info/settings.js diff --git a/apps/coin_info/app.js b/apps/coin_info/app.js new file mode 100644 index 000000000..e69de29bb diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js new file mode 100644 index 000000000..e69de29bb diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 02227efc8..68b1c3056 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -5,7 +5,7 @@ "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "type": "bootloader", - "tags": "blockchain,crypto,cryptocurrency", + "tags": "clkinfo,coin_info,blockchain,crypto,cryptocurrency", "supports" : ["BANGLEJS2"], "interface": "interface.html", "readme": "README.md", @@ -14,9 +14,8 @@ {"name":"coin_info.cmc_key.json"} ], "storage": [ - {"name":"owmweather.default.json","url":"default.json"}, - {"name":"owmweather.boot.js","url":"boot.js"}, - {"name":"owmweather","url":"lib.js"}, - {"name":"owmweather.settings.js","url":"settings.js"} + {"name":"coin_info.app.js","url":"app.js"}, + {"name":"coin_info.clkinfo.json","url":"clkinfo.js"}, + {"name":"coin_info.settings.js","url":"settings.js"} ] } \ No newline at end of file diff --git a/apps/coin_info/settings.js b/apps/coin_info/settings.js new file mode 100644 index 000000000..e69de29bb From 9c03c1e6f3f6e43befd805952c3506c7fc32a548 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 16:13:24 +0100 Subject: [PATCH 020/188] :sparkles: basic clock-info add-on --- apps/coin_info/clkinfo.js | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index e69de29bb..e3f2960b2 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -0,0 +1,40 @@ +(function() { + + function retrieveClkInfo(strToken) { + // TODO: do something useful here -> http request to CMC + return { + text : strToken, + // color: "#f00", + img : atob("GBiBAAAAAAAAAAAAAAAYAAA8AAB+AAD/AAAAAAAAAAAAAAAYAAAYAAQYIA4AcAYAYAA8AAB+AAD/AAH/gD///D///AAAAAAAAAAAAA==") + } + } + + function showClkInfo() { + this.interval = setTimeout(()=>{ + this.emit("redraw"); + this.interval = setInterval(()=>{ + this.emit("redraw"); + }, 60000); + }, 60000 - (Date.now() % 60000)); + } + + function hideClkInfo() { + clearInterval(this.interval); + this.interval = undefined; + } + + var coinInfoItems = { + name: "CoinInfo", + // TODO: get maybe from settings + items: [ + { + name: "BTC", + get : retrieveClkInfo("BTC"), + show : showClkInfo, + hide : hideClkInfo + }, + ] + }; + + return coinInfoItems; +}) From e4ddc728da6ad5033c94f34d12bd2084dc09355d Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 17:03:19 +0100 Subject: [PATCH 021/188] :sparkles: also store traceable tokens --- apps/coin_info/interface.html | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/apps/coin_info/interface.html b/apps/coin_info/interface.html index 229ced48a..3015b7fb8 100644 --- a/apps/coin_info/interface.html +++ b/apps/coin_info/interface.html @@ -3,8 +3,17 @@ -

Set Coinmarketcap API key for Crypto-Coin Info

-

+

Settings for Crypto-Coin Info

+

Set Coinmarketcap API key and trackable tokens.

+

+
+ + +
+ + + +

Where to get your personal API key?

Go to https://coinmarketcap.com/api/ and sign up for a free account.
@@ -33,12 +42,13 @@ settings = data; console.log("Got settings", settings); document.getElementById("apikey").value = settings.apikey; - console.log("Loaded apikey from BangleJs."); + document.getElementById("traceTokens").value = settings.traceTokens; + console.log("Loaded settings from BangleJs."); checkInput(); } }); } catch(ex) { - console.log("(Warning) Could not load apikey from BangleJs."); + console.log("(Warning) Could not load settings from BangleJs."); console.log(ex); } @@ -47,6 +57,7 @@ document.getElementById("upload").addEventListener("click", function() { try { settings.apikey = document.getElementById("apikey").value; + settings.traceTokens = document.getElementById("traceTokens").value; Util.showModal("Saving..."); Util.writeStorage("coin_info.cmc_key.json", JSON.stringify(settings), ()=>{ Util.hideModal(); From bd108c54accf429211dc0282c82ec2a1a53155eb Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 17:03:42 +0100 Subject: [PATCH 022/188] :pencil2: better --- apps/coin_info/interface.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/coin_info/interface.html b/apps/coin_info/interface.html index 3015b7fb8..383ba3268 100644 --- a/apps/coin_info/interface.html +++ b/apps/coin_info/interface.html @@ -4,7 +4,7 @@

Settings for Crypto-Coin Info

-

Set Coinmarketcap API key and trackable tokens.

+

Set Coinmarketcap API key and traceable tokens.


From 3779732796f1aeb846832dd9c3811cee80777448 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 17:54:02 +0100 Subject: [PATCH 023/188] :sparkles: first try on settings --- apps/coin_info/settings.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/apps/coin_info/settings.js b/apps/coin_info/settings.js index e69de29bb..8cdcd7ffa 100644 --- a/apps/coin_info/settings.js +++ b/apps/coin_info/settings.js @@ -0,0 +1,37 @@ +(function(back) { + const SETTINGS_FILE = "coin_info.settings.json"; + + // Initialize with default settings... + let settings = {'tokens':'bitcoin', 'getRateMin':60} + // ...and overwrite them with any saved values + // This way saved values are preserved if a new version adds more settings + const storage = require('Storage'); + settings = Object.assign(settings, storage.readJSON(SETTINGS_FILE, 1)||{}); + + function save() { + storage.write(SETTINGS_FILE, settings); + } + + var token_options = ['bitcoin', 'ethereum', 'tether']; + + E.showMenu({ + '': { 'title': 'Crpyto-Coin Info' }, + '< Back': back, + 'Traceable Tokens': { + value: 0 | theme_options.indexOf(settings.theme), + min: 0, max: theme_options.length - 1, + format: v => theme_options[v], + onchange: v => { + settings.theme = theme_options[v]; + save(); + } + }, + 'Req. Rate in Min': { + value: !!settings.getRateMin, + onchange: v => { + settings.getRateMin = v; + save(); + } + } + }); +}) \ No newline at end of file From e522bdb1c2e12bd7ec7c4f1722a63255fc01a010 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 20:51:22 +0100 Subject: [PATCH 024/188] :sparkles: settings in theory looking good --- apps/coin_info/settings.js | 47 ++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/apps/coin_info/settings.js b/apps/coin_info/settings.js index 8cdcd7ffa..1727a0cbf 100644 --- a/apps/coin_info/settings.js +++ b/apps/coin_info/settings.js @@ -2,7 +2,9 @@ const SETTINGS_FILE = "coin_info.settings.json"; // Initialize with default settings... - let settings = {'tokens':'bitcoin', 'getRateMin':60} + // TODO: retrieve from upload-storage + const token_options = ['bitcoin', 'ethereum', 'tether']; + let settings = {'tokens':token_options, 'tokenSelected':['bitcoin'], 'getRateMin':60} // ...and overwrite them with any saved values // This way saved values are preserved if a new version adds more settings const storage = require('Storage'); @@ -12,26 +14,41 @@ storage.write(SETTINGS_FILE, settings); } - var token_options = ['bitcoin', 'ethereum', 'tether']; + function createMultiSelectMenu() { + const menu = { + '': { 'title': 'Crpyto-Coin Info' }, + '< Back': () => Bangle.showClock() + }; - E.showMenu({ - '': { 'title': 'Crpyto-Coin Info' }, - '< Back': back, - 'Traceable Tokens': { - value: 0 | theme_options.indexOf(settings.theme), - min: 0, max: theme_options.length - 1, - format: v => theme_options[v], - onchange: v => { - settings.theme = theme_options[v]; - save(); - } - }, - 'Req. Rate in Min': { + // Dynamic checkbox creation + settings.tokens.forEach((token, index) => { + menu[token] = { + value: settings.tokenSelected.includes(token), + onchange: v => { + if (v) { + settings.tokenSelected.push(token); + } else { + settings.tokenSelected = settings.tokenSelected.filter(f => f !== token); + } + save(); + } + }; + }); + + // update time + menu['Req. Rate in Min'] = { value: !!settings.getRateMin, onchange: v => { settings.getRateMin = v; save(); } } + + E.showMenu(menu); + } + + Bangle.setUI({ + mode: 'custom', + btn: createMultiSelectMenu }); }) \ No newline at end of file From a2b59b5765eaf628e3eb78bdfd1228033db7b995 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 21:17:27 +0100 Subject: [PATCH 025/188] Cleanup --- apps/coin_info/settings.js | 45 ++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/apps/coin_info/settings.js b/apps/coin_info/settings.js index 1727a0cbf..f9218894d 100644 --- a/apps/coin_info/settings.js +++ b/apps/coin_info/settings.js @@ -1,54 +1,51 @@ (function(back) { const SETTINGS_FILE = "coin_info.settings.json"; - - // Initialize with default settings... - // TODO: retrieve from upload-storage - const token_options = ['bitcoin', 'ethereum', 'tether']; - let settings = {'tokens':token_options, 'tokenSelected':['bitcoin'], 'getRateMin':60} - // ...and overwrite them with any saved values - // This way saved values are preserved if a new version adds more settings const storage = require('Storage'); - settings = Object.assign(settings, storage.readJSON(SETTINGS_FILE, 1)||{}); + + // Default settings with sorted tokens + let settings = Object.assign({ + // TODO: MZw - retrieve from upload-storage + tokens: ['bitcoin', 'ethereum', 'tether'], + tokenSelected: ['bitcoin'], + getRateMin: 60 + }, storage.readJSON(SETTINGS_FILE, 1) || {}); function save() { storage.write(SETTINGS_FILE, settings); } - function createMultiSelectMenu() { + function createMenu() { const menu = { - '': { 'title': 'Crpyto-Coin Info' }, + '': { 'title': 'Crypto-Coin Info' }, '< Back': () => Bangle.showClock() }; // Dynamic checkbox creation - settings.tokens.forEach((token, index) => { + settings.tokens.sort().forEach(token => { menu[token] = { value: settings.tokenSelected.includes(token), onchange: v => { - if (v) { - settings.tokenSelected.push(token); - } else { - settings.tokenSelected = settings.tokenSelected.filter(f => f !== token); - } + settings.tokenSelected = v + ? [...new Set([...settings.tokenSelected, token])] // Prevent duplicates + : settings.tokenSelected.filter(t => t !== token); save(); } }; }); // update time - menu['Req. Rate in Min'] = { - value: !!settings.getRateMin, + menu['Refresh Rate (min)'] = { + value: settings.getRateMin, + min: 1, + max: 1440, onchange: v => { settings.getRateMin = v; save(); } - } + }; - E.showMenu(menu); + return menu; } - Bangle.setUI({ - mode: 'custom', - btn: createMultiSelectMenu - }); + E.showMenu(createMenu()); }) \ No newline at end of file From 9e05058a3d2e6965e793859a8133ebf85f83f62d Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 21:37:48 +0100 Subject: [PATCH 026/188] :sparkles: countdown app to show something --- apps/coin_info/app.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/apps/coin_info/app.js b/apps/coin_info/app.js index e69de29bb..d6dab15aa 100644 --- a/apps/coin_info/app.js +++ b/apps/coin_info/app.js @@ -0,0 +1,22 @@ +{ + Bangle.loadWidgets(); + Bangle.drawWidgets(); + + function countDown() { + counter--; + + g.clear(); + // draw the current counter value + g.drawString(counter, g.getWidth()/2, g.getHeight()/2); + // optional - this keeps the watch LCD lit up + Bangle.setLCDPower(1); + } + + // call countDown every second + var interval = setInterval(countDown, 1000); + // + Bangle.setUI({ + mode : 'custom', + back : Bangle.showClock, + }); +} \ No newline at end of file From f3d699f80e1f99e644b471a54429fedf530a5835 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 21:50:25 +0100 Subject: [PATCH 027/188] Cleanup --- apps/coin_info/app-icon.js | 0 apps/coin_info/app.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 apps/coin_info/app-icon.js diff --git a/apps/coin_info/app-icon.js b/apps/coin_info/app-icon.js new file mode 100644 index 000000000..e69de29bb diff --git a/apps/coin_info/app.js b/apps/coin_info/app.js index d6dab15aa..b9d852f50 100644 --- a/apps/coin_info/app.js +++ b/apps/coin_info/app.js @@ -1,7 +1,7 @@ { Bangle.loadWidgets(); Bangle.drawWidgets(); - + function countDown() { counter--; From 46e1d26fe2cd78464c3d5aa19b157f707c459958 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 21:50:57 +0100 Subject: [PATCH 028/188] :sparkles: app icon --- apps/coin_info/app-icon.js | 1 + apps/coin_info/metadata.json | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/coin_info/app-icon.js b/apps/coin_info/app-icon.js index e69de29bb..6cd06c707 100644 --- a/apps/coin_info/app-icon.js +++ b/apps/coin_info/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4AT5gAGFdYzmFx4xfEAfN53U6oAC53O5owg6wjB5wrDAA3UGQxaW5vWAAgwLGIIwXRAYvFGBxiEXCnOF4wwBKoKWHGAPUGCguLAAINCMJIwEFzgvLGC3NFw7gFAAfNehovN65aKABDEGGAouNAAIvSSg6RRF4QwGDAQIF6qSLMBwuDGAwvIGAj0IF6YwEF5IKDF4/VSAQtIO4QwJL6vVSBaoDGBC/UF5gJCGBQNEAA/VGoIAEBIIvEGQYaHGA4vML4IwEFgYAFF5PM54vSGAKXCL4gvOIIXVF5DvG6xWD5wwMYBAUCR5IvHGAZgCGBLwJFo4vEegIAHHgwwGFwwwD5wvMGBHNL4gwFFpBgEF5owI53VA4ovQ6wvNSRIAGFxYvD5ovKAAyKFAA4vLMBYvJagIuXMBfOL6fN5ovNGAfOeRD0PFwIPCGCPPF54wHOQYuOF4YwKEIJtFFxAvQGAiSLAAqMGFyIwFcQIwP6ouXGAoxOFoouVGI6VB6ozDRAPVXAgtZGBAANFzQxSFrozNFcYA/AH4AvA")) \ No newline at end of file diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 68b1c3056..445c867e3 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -15,7 +15,8 @@ ], "storage": [ {"name":"coin_info.app.js","url":"app.js"}, - {"name":"coin_info.clkinfo.json","url":"clkinfo.js"}, - {"name":"coin_info.settings.js","url":"settings.js"} + {"name":"coin_info.clkinfo.js","url":"clkinfo.js"}, + {"name":"coin_info.settings.js","url":"settings.js"}, + {"name":"coin_info.img","url":"app-icon.js","evaluate":true} ] } \ No newline at end of file From 474f4f279543c4bba05393450d301e228801802e Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 22:10:57 +0100 Subject: [PATCH 029/188] Fix duplicate version entries in Changelog --- apps/cutelauncher/Changelog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/cutelauncher/Changelog b/apps/cutelauncher/Changelog index 29232f766..8a5d25486 100644 --- a/apps/cutelauncher/Changelog +++ b/apps/cutelauncher/Changelog @@ -2,3 +2,5 @@ 0.28: Adjusted icon size to better fit with native dimensions (48x48) 0.29: Draw function optimization 0.30: Refine initial scrollbar position +0.31: Coloring for scrollbar +0.32: Coloring for scrollbar From e2a3a9340989fdd3d8599fab02b3d1c0f09000d3 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 23:15:36 +0100 Subject: [PATCH 030/188] :bug: forgot to initialize var --- apps/coin_info/Changelog | 3 ++- apps/coin_info/app.js | 2 ++ apps/coin_info/metadata.json | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/coin_info/Changelog b/apps/coin_info/Changelog index 7108fd7b6..c474120a6 100644 --- a/apps/coin_info/Changelog +++ b/apps/coin_info/Changelog @@ -1 +1,2 @@ -0.01: Initial creation \ No newline at end of file +0.01: Initial creation +0.02: Debugging \ No newline at end of file diff --git a/apps/coin_info/app.js b/apps/coin_info/app.js index b9d852f50..4792cfbd5 100644 --- a/apps/coin_info/app.js +++ b/apps/coin_info/app.js @@ -2,6 +2,8 @@ Bangle.loadWidgets(); Bangle.drawWidgets(); + let counter = 30; + function countDown() { counter--; diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 445c867e3..f077ba3b7 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.01", + "version": "0.02", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "type": "bootloader", From b5d66a6649f37db5c462afe00cc3eae92bd7cceb Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 23:23:44 +0100 Subject: [PATCH 031/188] Cleanup --- apps/coin_info/Changelog | 3 ++- apps/coin_info/app.js | 16 +++------------- apps/coin_info/metadata.json | 2 +- 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/apps/coin_info/Changelog b/apps/coin_info/Changelog index c474120a6..534411b5b 100644 --- a/apps/coin_info/Changelog +++ b/apps/coin_info/Changelog @@ -1,2 +1,3 @@ 0.01: Initial creation -0.02: Debugging \ No newline at end of file +0.02: Debugging +0.03: Debugging \ No newline at end of file diff --git a/apps/coin_info/app.js b/apps/coin_info/app.js index 4792cfbd5..dd9203b44 100644 --- a/apps/coin_info/app.js +++ b/apps/coin_info/app.js @@ -2,21 +2,11 @@ Bangle.loadWidgets(); Bangle.drawWidgets(); - let counter = 30; - - function countDown() { - counter--; + g.clear(); + // draw the current counter value + g.drawString("TEST", g.getWidth()/2, g.getHeight()/2); - g.clear(); - // draw the current counter value - g.drawString(counter, g.getWidth()/2, g.getHeight()/2); - // optional - this keeps the watch LCD lit up - Bangle.setLCDPower(1); - } - // call countDown every second - var interval = setInterval(countDown, 1000); - // Bangle.setUI({ mode : 'custom', back : Bangle.showClock, diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index f077ba3b7..f87c4db77 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.02", + "version": "0.03", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "type": "bootloader", From e2b671df92173b21a30faab1aeeca3c5596c3619 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 23 Feb 2025 23:36:22 +0100 Subject: [PATCH 032/188] Cleanup --- apps/coin_info/ChangeLog | 1 + apps/coin_info/Changelog | 3 --- apps/coin_info/metadata.json | 3 +-- 3 files changed, 2 insertions(+), 5 deletions(-) create mode 100644 apps/coin_info/ChangeLog delete mode 100644 apps/coin_info/Changelog diff --git a/apps/coin_info/ChangeLog b/apps/coin_info/ChangeLog new file mode 100644 index 000000000..e85d911f6 --- /dev/null +++ b/apps/coin_info/ChangeLog @@ -0,0 +1 @@ +0.03: Initial creation \ No newline at end of file diff --git a/apps/coin_info/Changelog b/apps/coin_info/Changelog deleted file mode 100644 index 534411b5b..000000000 --- a/apps/coin_info/Changelog +++ /dev/null @@ -1,3 +0,0 @@ -0.01: Initial creation -0.02: Debugging -0.03: Debugging \ No newline at end of file diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index f87c4db77..e02a19607 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,10 +1,9 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03", + "version": "0.03.1", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", - "type": "bootloader", "tags": "clkinfo,coin_info,blockchain,crypto,cryptocurrency", "supports" : ["BANGLEJS2"], "interface": "interface.html", From 3a9b14b22c5cda61c804a368d09269cb6fdea829 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Mon, 24 Feb 2025 00:03:06 +0100 Subject: [PATCH 033/188] Cleanup --- apps/coin_info/metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index e02a19607..20a10381c 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,10 +1,10 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.1", + "version": "0.03.2", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", - "tags": "clkinfo,coin_info,blockchain,crypto,cryptocurrency", + "tags": "clkinfo", "supports" : ["BANGLEJS2"], "interface": "interface.html", "readme": "README.md", From 0fda03ec50bd03b0d114612e967c840a1f438f5b Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Mon, 24 Feb 2025 00:08:55 +0100 Subject: [PATCH 034/188] :bug: and cleanup --- apps/coin_info/clkinfo.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index e3f2960b2..d83a9941a 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -5,7 +5,7 @@ return { text : strToken, // color: "#f00", - img : atob("GBiBAAAAAAAAAAAAAAAYAAA8AAB+AAD/AAAAAAAAAAAAAAAYAAAYAAQYIA4AcAYAYAA8AAB+AAD/AAH/gD///D///AAAAAAAAAAAAA==") + img : atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") } } @@ -20,7 +20,7 @@ function hideClkInfo() { clearInterval(this.interval); - this.interval = undefined; + this.interval = null; } var coinInfoItems = { @@ -29,7 +29,7 @@ items: [ { name: "BTC", - get : retrieveClkInfo("BTC"), + get : () => retrieveClkInfo("BTC"), show : showClkInfo, hide : hideClkInfo }, From 82b2fc498185271b5b4d8064d3458507548758d2 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Mon, 24 Feb 2025 00:48:27 +0100 Subject: [PATCH 035/188] Cleanup - TS not really working with this --- apps_ts/papam_clockinfo_tests/.gitignore | 6 - apps_ts/papam_clockinfo_tests/README.md | 2 - apps_ts/papam_clockinfo_tests/app-config.yaml | 1 - apps_ts/papam_clockinfo_tests/env-config.yaml | 7 - apps_ts/papam_clockinfo_tests/gulpfile.js | 120 - .../papam_clockinfo_tests/package-lock.json | 4822 ----------------- apps_ts/papam_clockinfo_tests/package.json | 25 - apps_ts/papam_clockinfo_tests/src/app.ts | 76 - apps_ts/papam_clockinfo_tests/tsconfig.json | 15 - 9 files changed, 5074 deletions(-) delete mode 100644 apps_ts/papam_clockinfo_tests/.gitignore delete mode 100644 apps_ts/papam_clockinfo_tests/README.md delete mode 100644 apps_ts/papam_clockinfo_tests/app-config.yaml delete mode 100644 apps_ts/papam_clockinfo_tests/env-config.yaml delete mode 100644 apps_ts/papam_clockinfo_tests/gulpfile.js delete mode 100644 apps_ts/papam_clockinfo_tests/package-lock.json delete mode 100644 apps_ts/papam_clockinfo_tests/package.json delete mode 100644 apps_ts/papam_clockinfo_tests/src/app.ts delete mode 100644 apps_ts/papam_clockinfo_tests/tsconfig.json diff --git a/apps_ts/papam_clockinfo_tests/.gitignore b/apps_ts/papam_clockinfo_tests/.gitignore deleted file mode 100644 index f22165a47..000000000 --- a/apps_ts/papam_clockinfo_tests/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -dist -node_modules -app-config.user.yaml -src/app-config.ts - -.idea/ \ No newline at end of file diff --git a/apps_ts/papam_clockinfo_tests/README.md b/apps_ts/papam_clockinfo_tests/README.md deleted file mode 100644 index bb7a616f9..000000000 --- a/apps_ts/papam_clockinfo_tests/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# espruino-ts-quickstart -Quickstart for Espruino using typescript and Visual Studio Code IDE diff --git a/apps_ts/papam_clockinfo_tests/app-config.yaml b/apps_ts/papam_clockinfo_tests/app-config.yaml deleted file mode 100644 index a05b8c520..000000000 --- a/apps_ts/papam_clockinfo_tests/app-config.yaml +++ /dev/null @@ -1 +0,0 @@ -refreshPeriodSec: 10 \ No newline at end of file diff --git a/apps_ts/papam_clockinfo_tests/env-config.yaml b/apps_ts/papam_clockinfo_tests/env-config.yaml deleted file mode 100644 index 18d4894a6..000000000 --- a/apps_ts/papam_clockinfo_tests/env-config.yaml +++ /dev/null @@ -1,7 +0,0 @@ -# Port where mcu device is located -port: COM4 - -# ESP32 after flash has 115200 speed. -port_speed: 115200 - -board: "Bangle.js 2" \ No newline at end of file diff --git a/apps_ts/papam_clockinfo_tests/gulpfile.js b/apps_ts/papam_clockinfo_tests/gulpfile.js deleted file mode 100644 index 50485c1d1..000000000 --- a/apps_ts/papam_clockinfo_tests/gulpfile.js +++ /dev/null @@ -1,120 +0,0 @@ -const gulp = require('gulp'); -const ts = require('gulp-typescript'); -const tsProject = ts.createProject('tsconfig.json'); -const fs = require("fs"); -const { fork } = require('child_process'); -const path = require("path"); -const yaml = require("js-yaml"); -const _ = require("lodash"); - -const envConfig = yaml.load(fs.readFileSync("env-config.yaml")); - -const distDir = "./dist"; -const srcDir = "./src"; -const espReadyBundleFileName = "bundle.js"; -const espReadyBundlePath = path.join(distDir, espReadyBundleFileName); -const appFileName = "app.js"; -const appFilePath = path.join(distDir, appFileName); -const appConfigTsFileName = "app-config.ts"; -const appConfigFileName = "app-config.yaml"; -const userAppConfigFileName = "app-config.user.yaml"; -const espConsoleBeingWatchedFileName = "esp-console-input.js"; -const espConsoleBeingWatchedFilePath = path.join(distDir, espConsoleBeingWatchedFileName); - - -function prepare_for_espruino(cb) { - if (!fs.existsSync(appFilePath)) { - cb("main app file does not exit " + appFilePath); - return; - } - - let appContent = fs.readFileSync(appFilePath).toString(); - appContent = appContent.replace('Object.defineProperty(exports, "__esModule", { value: true });', ""); - fs.writeFileSync(appFilePath, appContent); - - const buildproc = fork( - require.resolve("espruino/bin/espruino-cli"), - ["-d Bangle2.js -v --board", envConfig.board, appFileName, "-o", espReadyBundleFileName], - { cwd: distDir }); - buildproc.on('close', () => { - cb(); - }); -} - -function compile_ts() { - const tsResult = tsProject.src().pipe(tsProject()); - return tsResult.js.pipe(gulp.dest(distDir)); -} - -function content_to_dist() { - return gulp - .src("src/**/*.js", { base: 'src' }) - .pipe(gulp.dest(distDir)); -} - -function send_to_espruino_console(cb) { - const content = fs.readFileSync(espReadyBundlePath); - fs.writeFile( - espConsoleBeingWatchedFilePath, - content, - (err) => { - if (err) { throw err; } - cb(); - }); -} - -function clear_espruino_watch_file(cb) { - fs.writeFile( - espConsoleBeingWatchedFilePath, - "", - (err) => { - if (err) { throw err; } - cb(); - }); -} - -function espruino_console(cb) { - const buildproc = fork( - require.resolve("espruino/bin/espruino-cli"), - ["--board", envConfig.board, "-b", envConfig.port_speed, "--port", envConfig.port, "-w", espConsoleBeingWatchedFileName], - { cwd: distDir }); - buildproc.on('close', () => { - cb(); - }); -} - -function gen_config_ts(cb) { - if (!fs.existsSync(userAppConfigFileName)) { - const content = fs.readFileSync(appConfigFileName) - .toString() - .split("\n") - .map(x => `# ${x}`) - .join("\n"); - - fs.writeFileSync(userAppConfigFileName, content, { encoding: "utf-8" }); - } - - const appConfig = yaml.load(fs.readFileSync(appConfigFileName)); - const userAppConfig = yaml.load(fs.readFileSync(userAppConfigFileName)); - const mergedAppConfig = _.assign(appConfig, userAppConfig); - const jsonString = JSON.stringify(mergedAppConfig); - const resultConfigTsContent = `export default ${jsonString};`; - fs.writeFileSync(path.join(srcDir, appConfigTsFileName), resultConfigTsContent); - cb(); -} - -gulp.task("gen-config-ts", gen_config_ts); - -gulp.task("compile-ts", gulp.series("gen-config-ts", compile_ts)); - -gulp.task("content-to-dist", content_to_dist); - -gulp.task("prepare-for-espruino", gulp.series('compile-ts', 'content-to-dist', prepare_for_espruino)); - -gulp.task("build", gulp.series("prepare-for-espruino")); - -gulp.task("send-to-espurino-console", send_to_espruino_console); - -gulp.task("clear-espurino-watch-file", clear_espruino_watch_file); - -gulp.task("espruino-console", gulp.series("clear-espurino-watch-file", espruino_console)); diff --git a/apps_ts/papam_clockinfo_tests/package-lock.json b/apps_ts/papam_clockinfo_tests/package-lock.json deleted file mode 100644 index 231874c4a..000000000 --- a/apps_ts/papam_clockinfo_tests/package-lock.json +++ /dev/null @@ -1,4822 +0,0 @@ -{ - "name": "papam_clockinfo_tests", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "papam_clockinfo_tests", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "@types/espruino": "^1.94.10", - "espruino": "^0.1.55", - "gulp": "^5.0", - "gulp-typescript": "^5.0.1", - "js-yaml": "^4.1.0", - "lodash": "^4.17", - "typescript": "^5.5.4" - } - }, - "node_modules/@abandonware/bluetooth-hci-socket": { - "version": "0.5.3-12", - "resolved": "https://registry.npmjs.org/@abandonware/bluetooth-hci-socket/-/bluetooth-hci-socket-0.5.3-12.tgz", - "integrity": "sha512-qo2cBoh94j6RPusaNXSLYI8Bzxuz01Bx3MD80a/QYzhHED/FZ6Y0k2w2kRbfIA2EEhFSCbXrBZDQlpilL4nbxA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "linux", - "android", - "freebsd", - "win32" - ], - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.11", - "debug": "^4.3.4", - "nan": "^2.18.0", - "node-gyp": "^10.0.1" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "usb": "^2.11.0" - } - }, - "node_modules/@abandonware/noble": { - "version": "1.9.2-25", - "resolved": "https://registry.npmjs.org/@abandonware/noble/-/noble-1.9.2-25.tgz", - "integrity": "sha512-FBgwjWkXF3VLb0V0hdOeeVhuupdfuagkBz9E0Xjfmr8MYuR5JjnXHty0/6Q38d4v//EhX7oZaZXBiZWrhWKKbg==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin", - "linux", - "freebsd", - "win32" - ], - "dependencies": { - "debug": "^4.3.4", - "napi-thread-safe-callback": "^0.0.6", - "node-addon-api": "^4.3.0", - "node-gyp-build": "^4.5.0" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "@abandonware/bluetooth-hci-socket": "^0.5.3-11" - } - }, - "node_modules/@gulpjs/messages": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", - "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@gulpjs/to-absolute-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", - "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", - "dependencies": { - "is-negated-glob": "^1.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "optional": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@npmcli/agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", - "optional": true, - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "optional": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", - "optional": true, - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "optional": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@serialport/binding-mock": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-10.2.2.tgz", - "integrity": "sha512-HAFzGhk9OuFMpuor7aT5G1ChPgn5qSsklTFOTUX72Rl6p0xwcSVsRtG/xaGp6bxpN7fI9D/S8THLBWbBgS6ldw==", - "optional": true, - "dependencies": { - "@serialport/bindings-interface": "^1.2.1", - "debug": "^4.3.3" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@serialport/bindings-cpp": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/@serialport/bindings-cpp/-/bindings-cpp-10.8.0.tgz", - "integrity": "sha512-OMQNJz5kJblbmZN5UgJXLwi2XNtVLxSKmq5VyWuXQVsUIJD4l9UGHnLPqM5LD9u3HPZgDI5w7iYN7gxkQNZJUw==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "@serialport/bindings-interface": "1.2.2", - "@serialport/parser-readline": "^10.2.1", - "debug": "^4.3.2", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=12.17.0 <13.0 || >=14.0.0" - }, - "funding": { - "url": "https://opencollective.com/serialport/donate" - } - }, - "node_modules/@serialport/bindings-cpp/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "optional": true - }, - "node_modules/@serialport/bindings-interface": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@serialport/bindings-interface/-/bindings-interface-1.2.2.tgz", - "integrity": "sha512-CJaUd5bLvtM9c5dmO9rPBHPXTa9R2UwpkJ0wdh9JCYcbrPWsKz+ErvR0hBLeo7NPeiFdjFO4sonRljiw4d2XiA==", - "optional": true, - "engines": { - "node": "^12.22 || ^14.13 || >=16" - } - }, - "node_modules/@serialport/parser-byte-length": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-10.5.0.tgz", - "integrity": "sha512-eHhr4lHKboq1OagyaXAqkemQ1XyoqbLQC8XJbvccm95o476TmEdW5d7AElwZV28kWprPW68ZXdGF2VXCkJgS2w==", - "optional": true, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/serialport/donate" - } - }, - "node_modules/@serialport/parser-cctalk": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-10.5.0.tgz", - "integrity": "sha512-Iwsdr03xmCKAiibLSr7b3w6ZUTBNiS+PwbDQXdKU/clutXjuoex83XvsOtYVcNZmwJlVNhAUbkG+FJzWwIa4DA==", - "optional": true, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/serialport/donate" - } - }, - "node_modules/@serialport/parser-delimiter": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-10.5.0.tgz", - "integrity": "sha512-/uR/yT3jmrcwnl2FJU/2ySvwgo5+XpksDUR4NF/nwTS5i3CcuKS+FKi/tLzy1k8F+rCx5JzpiK+koqPqOUWArA==", - "optional": true, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/serialport/donate" - } - }, - "node_modules/@serialport/parser-inter-byte-timeout": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-10.5.0.tgz", - "integrity": "sha512-WPvVlSx98HmmUF9jjK6y9mMp3Wnv6JQA0cUxLeZBgS74TibOuYG3fuUxUWGJALgAXotOYMxfXSezJ/vSnQrkhQ==", - "optional": true, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/serialport/donate" - } - }, - "node_modules/@serialport/parser-packet-length": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@serialport/parser-packet-length/-/parser-packet-length-10.5.0.tgz", - "integrity": "sha512-jkpC/8w4/gUBRa2Teyn7URv1D7T//0lGj27/4u9AojpDVXsR6dtdcTG7b7dNirXDlOrSLvvN7aS5/GNaRlEByw==", - "optional": true, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/@serialport/parser-readline": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-10.5.0.tgz", - "integrity": "sha512-0aXJknodcl94W9zSjvU+sLdXiyEG2rqjQmvBWZCr8wJZjWEtv3RgrnYiWq4i2OTOyC8C/oPK8ZjpBjQptRsoJQ==", - "optional": true, - "dependencies": { - "@serialport/parser-delimiter": "10.5.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/serialport/donate" - } - }, - "node_modules/@serialport/parser-ready": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-10.5.0.tgz", - "integrity": "sha512-QIf65LTvUoxqWWHBpgYOL+soldLIIyD1bwuWelukem2yDZVWwEjR288cLQ558BgYxH4U+jLAQahhqoyN1I7BaA==", - "optional": true, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/serialport/donate" - } - }, - "node_modules/@serialport/parser-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-10.5.0.tgz", - "integrity": "sha512-9jnr9+PCxRoLjtGs7uxwsFqvho+rxuJlW6ZWSB7oqfzshEZWXtTJgJRgac/RuLft4hRlrmRz5XU40i3uoL4HKw==", - "optional": true, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/serialport/donate" - } - }, - "node_modules/@serialport/parser-slip-encoder": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@serialport/parser-slip-encoder/-/parser-slip-encoder-10.5.0.tgz", - "integrity": "sha512-wP8m+uXQdkWSa//3n+VvfjLthlabwd9NiG6kegf0fYweLWio8j4pJRL7t9eTh2Lbc7zdxuO0r8ducFzO0m8CQw==", - "optional": true, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/serialport/donate" - } - }, - "node_modules/@serialport/parser-spacepacket": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@serialport/parser-spacepacket/-/parser-spacepacket-10.5.0.tgz", - "integrity": "sha512-BEZ/HAEMwOd8xfuJSeI/823IR/jtnThovh7ils90rXD4DPL1ZmrP4abAIEktwe42RobZjIPfA4PaVfyO0Fjfhg==", - "optional": true, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/serialport/donate" - } - }, - "node_modules/@serialport/stream": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-10.5.0.tgz", - "integrity": "sha512-gbcUdvq9Kyv2HsnywS7QjnEB28g+6OGB5Z8TLP7X+UPpoMIWoUsoQIq5Kt0ZTgMoWn3JGM2lqwTsSHF+1qhniA==", - "optional": true, - "dependencies": { - "@serialport/bindings-interface": "1.2.2", - "debug": "^4.3.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/serialport/donate" - } - }, - "node_modules/@types/espruino": { - "version": "1.94.10", - "resolved": "https://registry.npmjs.org/@types/espruino/-/espruino-1.94.10.tgz", - "integrity": "sha512-+rFJlVs1Weob0OnyT4UpRmnXl88t61O1bChmZaT+3AZl1xm1P1KrfZLuMnflsIBWq3FnsvC1wP0b340r6LhesQ==" - }, - "node_modules/@types/w3c-web-usbslo": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz", - "integrity": "sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ==", - "optional": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "optional": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "optional": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dependencies": { - "ansi-wrap": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "optional": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "optional": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", - "dependencies": { - "buffer-equal": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "optional": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "deprecated": "This package is no longer supported.", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async-done": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", - "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", - "dependencies": { - "end-of-stream": "^1.4.4", - "once": "^1.4.0", - "stream-exhaust": "^1.0.2" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/async-settle": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", - "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", - "dependencies": { - "async-done": "^2.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" - }, - "node_modules/bach": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", - "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", - "dependencies": { - "async-done": "^2.0.0", - "async-settle": "^2.0.0", - "now-and-later": "^3.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/bach/node_modules/now-and-later": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", - "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", - "dependencies": { - "once": "^1.4.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/bare-events": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", - "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", - "optional": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/blob-to-arraybuffer": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/blob-to-arraybuffer/-/blob-to-arraybuffer-0.0.1.tgz", - "integrity": "sha512-cn23j+k87nZKnJcBDx/8jyRAPVbBrtZPUBx7xhmRXzdVSsN+k0nRePQuC06tuPqXmcNcHGlt+rs+zrSe5wafKg==", - "optional": true - }, - "node_modules/bluetooth-hci-socket": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/bluetooth-hci-socket/-/bluetooth-hci-socket-0.5.1.tgz", - "integrity": "sha512-5/cPO2R+X4UXLudZOevREf3kwyCNCVovA9rcXk5smBgx+q/sIucfkC6F57+xWR5X17bY931w6bB2EUaPh9ArfQ==", - "hasInstallScript": true, - "optional": true, - "os": [ - "linux", - "android", - "win32" - ], - "dependencies": { - "debug": "^2.2.0", - "nan": "^2.0.5" - }, - "optionalDependencies": { - "usb": "^1.1.0" - } - }, - "node_modules/bluetooth-hci-socket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/bluetooth-hci-socket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "optional": true - }, - "node_modules/bluetooth-hci-socket/node_modules/usb": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/usb/-/usb-1.9.2.tgz", - "integrity": "sha512-dryNz030LWBPAf6gj8vyq0Iev3vPbCLHCT8dBw3gQRXRzVNsIdeuU+VjPp3ksmSPkeMAl1k+kQ14Ij0QHyeiAg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-addon-api": "^4.2.0", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/bplist-parser": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz", - "integrity": "sha512-fGeghPEH4Eytvf+Mi446aKcDqvkA/+eh6r7QGiZWMQG6TzqrnsToLP379XFfqRSZ41+676hhGIm++maNST1Apw==", - "optional": true - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "optional": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", - "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/bufferutil": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", - "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/cacache": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", - "optional": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "optional": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-native-messaging": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chrome-native-messaging/-/chrome-native-messaging-0.2.0.tgz", - "integrity": "sha512-RgTFMY0x/K5JUSLfd+rTaWxNvkliYqNR41h5DbbkjlDCbxmZSXIHAYOSTbIazjyorzpK26Y2H9BXnboy4s9SXw==", - "optional": true - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==" - }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "optional": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "optional": true - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/copy-props": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", - "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", - "dependencies": { - "each-props": "^3.0.0", - "is-plain-object": "^5.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "optional": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "optional": true - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "optional": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", - "optional": true, - "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "optional": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "optional": true - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "deprecated": "Use your platform's native DOMException instead", - "optional": true, - "dependencies": { - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "optional": true - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/each-props": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", - "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", - "dependencies": { - "is-plain-object": "^5.0.0", - "object.defaults": "^1.1.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "optional": true - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "optional": true - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "optional": true - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "optional": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-shim": { - "version": "0.35.8", - "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.8.tgz", - "integrity": "sha512-Twf7I2v4/1tLoIXMT8HlqaBSS5H2wQTs2wx3MNYCI8K1R1/clXyCazrcVCPm/FuO9cyV8+leEaZOWD5C253NDg==" - }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", - "optional": true, - "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "optional": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/espruino": { - "version": "0.1.55", - "resolved": "https://registry.npmjs.org/espruino/-/espruino-0.1.55.tgz", - "integrity": "sha512-ttn9dlwmc54H1BTDagSNc16hbORQwyECr8HXCPDh5EuIeOVJeoLcUI6/2tpUrqtqjh3mLDXDU+e3nxWltJT6Ww==", - "dependencies": { - "acorn": "^8.8.2", - "es6-shim": "^0.35.8", - "utf8": "^3.0.0", - "ws": "^8.13.0" - }, - "bin": { - "espruino": "bin/espruino-cli.js" - }, - "optionalDependencies": { - "@abandonware/noble": "^1.9.2-14", - "noble-winrt": "^0.1.1", - "peerjs-on-node": "^1.0.2", - "serialport": "^10.5.0", - "websocket": "^1.0.34" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "optional": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "optional": true - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "optional": true, - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" - }, - "node_modules/fast-levenshtein": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", - "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", - "dependencies": { - "fastest-levenshtein": "^1.0.7" - } - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/filereader": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/filereader/-/filereader-0.10.3.tgz", - "integrity": "sha512-7F8w6GSXuHLN80ukaVOcHgBaiTRHUZr8GeEhNdqfAECcnBoROg4i8hTl+KqtF4yUPffOJVHEFg4iDJb7xIYFng==", - "optional": true - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/findup-sync": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", - "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.3", - "micromatch": "^4.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/fined": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", - "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^5.0.0", - "object.defaults": "^1.1.0", - "object.pick": "^1.3.0", - "parse-filepath": "^1.0.2" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/flagged-respawn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", - "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "optional": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "optional": true, - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", - "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fs-mkdirp-stream/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "deprecated": "This package is no longer supported.", - "optional": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "optional": true - }, - "node_modules/gauge/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "optional": true - }, - "node_modules/gauge/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "optional": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "optional": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "optional": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", - "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-stream/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob-stream/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-stream/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/glob-watcher": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", - "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", - "dependencies": { - "async-done": "^2.0.0", - "chokidar": "^3.5.3" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/glogg": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", - "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", - "dependencies": { - "sparkles": "^2.1.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/gulp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.0.tgz", - "integrity": "sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==", - "dependencies": { - "glob-watcher": "^6.0.0", - "gulp-cli": "^3.0.0", - "undertaker": "^2.0.0", - "vinyl-fs": "^4.0.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp-cli": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.0.0.tgz", - "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==", - "dependencies": { - "@gulpjs/messages": "^1.1.0", - "chalk": "^4.1.2", - "copy-props": "^4.0.0", - "gulplog": "^2.2.0", - "interpret": "^3.1.1", - "liftoff": "^5.0.0", - "mute-stdout": "^2.0.0", - "replace-homedir": "^2.0.0", - "semver-greatest-satisfied-range": "^2.0.0", - "string-width": "^4.2.3", - "v8flags": "^4.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp-cli/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/gulp-cli/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/gulp-cli/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gulp-cli/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gulp-typescript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-5.0.1.tgz", - "integrity": "sha512-YuMMlylyJtUSHG1/wuSVTrZp60k1dMEFKYOvDf7OvbAJWrDtxxD4oZon4ancdWwzjj30ztiidhe4VXJniF0pIQ==", - "dependencies": { - "ansi-colors": "^3.0.5", - "plugin-error": "^1.0.1", - "source-map": "^0.7.3", - "through2": "^3.0.0", - "vinyl": "^2.1.0", - "vinyl-fs": "^3.0.3" - }, - "engines": { - "node": ">= 8" - }, - "peerDependencies": { - "typescript": "~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev" - } - }, - "node_modules/gulp-typescript/node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/gulp/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/gulp/node_modules/fs-mkdirp-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", - "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", - "dependencies": { - "graceful-fs": "^4.2.8", - "streamx": "^2.12.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/glob-stream": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.2.tgz", - "integrity": "sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==", - "dependencies": { - "@gulpjs/to-absolute-glob": "^4.0.0", - "anymatch": "^3.1.3", - "fastq": "^1.13.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "is-negated-glob": "^1.0.0", - "normalize-path": "^3.0.0", - "streamx": "^2.12.5" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/lead": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", - "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/now-and-later": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", - "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", - "dependencies": { - "once": "^1.4.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/gulp/node_modules/replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/gulp/node_modules/resolve-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", - "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", - "dependencies": { - "value-or-function": "^4.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/gulp/node_modules/to-through": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", - "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", - "dependencies": { - "streamx": "^2.12.5" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/value-or-function": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", - "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/gulp/node_modules/vinyl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", - "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", - "dependencies": { - "clone": "^2.1.2", - "clone-stats": "^1.0.0", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/vinyl-fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", - "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", - "dependencies": { - "fs-mkdirp-stream": "^2.0.1", - "glob-stream": "^8.0.0", - "graceful-fs": "^4.2.11", - "iconv-lite": "^0.6.3", - "is-valid-glob": "^1.0.0", - "lead": "^4.0.0", - "normalize-path": "3.0.0", - "resolve-options": "^2.0.0", - "stream-composer": "^1.0.2", - "streamx": "^2.14.0", - "to-through": "^3.0.0", - "value-or-function": "^4.0.0", - "vinyl": "^3.0.0", - "vinyl-sourcemap": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/vinyl-sourcemap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", - "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", - "dependencies": { - "convert-source-map": "^2.0.0", - "graceful-fs": "^4.2.10", - "now-and-later": "^3.0.0", - "streamx": "^2.12.5", - "vinyl": "^3.0.0", - "vinyl-contents": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulplog": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", - "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", - "dependencies": { - "glogg": "^2.2.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "optional": true - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "optional": true - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "optional": true, - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "optional": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "optional": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "optional": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "optional": true, - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "optional": true - }, - "node_modules/is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dependencies": { - "is-unc-path": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "optional": true - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dependencies": { - "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" - }, - "node_modules/is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "optional": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "optional": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "optional": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/last-run": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", - "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", - "dependencies": { - "flush-write-stream": "^1.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/liftoff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.0.tgz", - "integrity": "sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==", - "dependencies": { - "extend": "^3.0.2", - "findup-sync": "^5.0.0", - "fined": "^2.0.0", - "flagged-respawn": "^2.0.0", - "is-plain-object": "^5.0.0", - "rechoir": "^0.8.0", - "resolve": "^1.20.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "optional": true - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "optional": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "optional": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", - "optional": true, - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "optional": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "optional": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", - "optional": true, - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "optional": true, - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "optional": true - }, - "node_modules/mute-stdout": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", - "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/nan": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", - "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", - "optional": true - }, - "node_modules/napi-thread-safe-callback": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/napi-thread-safe-callback/-/napi-thread-safe-callback-0.0.6.tgz", - "integrity": "sha512-X7uHCOCdY4u0yamDxDrv3jF2NtYc8A1nvPzBQgvpoSX+WB3jAe2cVNsY448V1ucq7Whf9Wdy02HEUoLW5rJKWg==", - "optional": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "optional": true - }, - "node_modules/noble": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/noble/-/noble-1.9.1.tgz", - "integrity": "sha512-5sbPLvCh1zJqy5caq+oQQE9eYoXB/ePweLWuN8UeapWO6KgFu4SS0VeLmYc23HTfWAXKb/ey6rtEvHwn9aY5Iw==", - "optional": true, - "os": [ - "darwin", - "linux", - "freebsd", - "win32" - ], - "dependencies": { - "debug": "~2.2.0" - }, - "engines": { - "node": ">=0.8" - }, - "optionalDependencies": { - "bluetooth-hci-socket": "^0.5.1", - "bplist-parser": "0.0.6", - "xpc-connection": "~0.1.4" - } - }, - "node_modules/noble-winrt": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noble-winrt/-/noble-winrt-0.1.1.tgz", - "integrity": "sha512-IUlWQfaHJMuiYOQTGvW4YdWeQR7E6tBVXut8KDMkIFGAKU+LNvTciWYTwHUlzqZKtuP3jc9VFMBvR9UDFNq7Sw==", - "optional": true, - "dependencies": { - "chrome-native-messaging": "^0.2.0", - "debug": "^2.6.8", - "noble": "^1.7.0" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "node_modules/noble-winrt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/noble-winrt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "optional": true - }, - "node_modules/noble/node_modules/debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", - "optional": true, - "dependencies": { - "ms": "0.7.1" - } - }, - "node_modules/noble/node_modules/ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==", - "optional": true - }, - "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", - "optional": true - }, - "node_modules/node-blob": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/node-blob/-/node-blob-0.0.2.tgz", - "integrity": "sha512-82wiGzMht96gPQDUYaZBdZEVvYD9aEhU6Bt9KLCr4rADZPRd7dQVY2Yj0ZG/1vp4DhVkL49nJT/M3CiMTAt3ag==", - "optional": true - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "optional": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", - "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", - "optional": true, - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^4.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", - "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "optional": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", - "optional": true, - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "optional": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dependencies": { - "once": "^1.3.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "deprecated": "This package is no longer supported.", - "optional": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", - "dependencies": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", - "dependencies": { - "readable-stream": "^2.0.1" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "optional": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "optional": true - }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dependencies": { - "path-root-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "optional": true, - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/peerjs-on-node": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/peerjs-on-node/-/peerjs-on-node-1.0.2.tgz", - "integrity": "sha512-bb11mMOzawK79zk+/M4YUZndSxZ4XnPJbSmAFJb115C6xzxfbkqbdm0WgJeUrgC2Lvmrl29Tjqmy7xN1hIdENA==", - "optional": true, - "dependencies": { - "blob-to-arraybuffer": "0.0.1", - "filereader": "^0.10.3", - "node-blob": "0.0.2", - "node-fetch": "^2.6.0", - "wrtc": "^0.4.2", - "ws": "^7.2.0" - } - }, - "node_modules/peerjs-on-node/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "optional": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dependencies": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/plugin-error/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "optional": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "optional": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", - "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remove-bom-stream/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" - }, - "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/replace-homedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", - "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", - "dependencies": { - "value-or-function": "^3.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "optional": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "optional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "optional": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "optional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-greatest-satisfied-range": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", - "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", - "dependencies": { - "sver": "^1.8.3" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/serialport": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/serialport/-/serialport-10.5.0.tgz", - "integrity": "sha512-7OYLDsu5i6bbv3lU81pGy076xe0JwpK6b49G6RjNvGibstUqQkI+I3/X491yBGtf4gaqUdOgoU1/5KZ/XxL4dw==", - "optional": true, - "dependencies": { - "@serialport/binding-mock": "10.2.2", - "@serialport/bindings-cpp": "10.8.0", - "@serialport/parser-byte-length": "10.5.0", - "@serialport/parser-cctalk": "10.5.0", - "@serialport/parser-delimiter": "10.5.0", - "@serialport/parser-inter-byte-timeout": "10.5.0", - "@serialport/parser-packet-length": "10.5.0", - "@serialport/parser-readline": "10.5.0", - "@serialport/parser-ready": "10.5.0", - "@serialport/parser-regex": "10.5.0", - "@serialport/parser-slip-encoder": "10.5.0", - "@serialport/parser-spacepacket": "10.5.0", - "@serialport/stream": "10.5.0", - "debug": "^4.3.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/serialport/donate" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "optional": true - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "optional": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "optional": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "optional": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", - "optional": true, - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", - "optional": true, - "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "optional": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/sparkles": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", - "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "optional": true - }, - "node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "optional": true, - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/stream-composer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", - "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", - "dependencies": { - "streamx": "^2.13.2" - } - }, - "node_modules/stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" - }, - "node_modules/stream-shift": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" - }, - "node_modules/streamx": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", - "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", - "dependencies": { - "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", - "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "optional": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "optional": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "optional": true - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "optional": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "optional": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "optional": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sver": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", - "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", - "optionalDependencies": { - "semver": "^6.3.0" - } - }, - "node_modules/sver/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "optional": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "optional": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/teex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", - "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", - "dependencies": { - "streamx": "^2.12.5" - } - }, - "node_modules/text-decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz", - "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==", - "dependencies": { - "b4a": "^1.6.4" - } - }, - "node_modules/through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - }, - "node_modules/through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dependencies": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/through2-filter/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", - "dependencies": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", - "dependencies": { - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/to-through/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "optional": true - }, - "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "optional": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "optional": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/undertaker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", - "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", - "dependencies": { - "bach": "^2.0.1", - "fast-levenshtein": "^3.0.0", - "last-run": "^2.0.0", - "undertaker-registry": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/undertaker-registry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", - "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "optional": true, - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "optional": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "node_modules/usb": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/usb/-/usb-2.13.0.tgz", - "integrity": "sha512-pTNKyxD1DfC1DYu8kFcIdpE8f33e0c2Sbmmi0HEs28HTVC555uocvYR1g5DDv4CBibacCh4BqRyYZJylN4mBbw==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "@types/w3c-web-usb": "^1.0.6", - "node-addon-api": "^8.0.0", - "node-gyp-build": "^4.5.0" - }, - "engines": { - "node": ">=12.22.0 <13.0 || >=14.17.0" - } - }, - "node_modules/usb/node_modules/node-addon-api": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.1.0.tgz", - "integrity": "sha512-yBY+qqWSv3dWKGODD6OGE6GnTX7Q2r+4+DfpqxHSHh8x0B4EKP9+wVGLS6U/AM1vxSNNmUEuIV5EGhYwPpfOwQ==", - "optional": true, - "engines": { - "node": "^18 || ^20 || >= 21" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/v8flags": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", - "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-contents": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", - "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", - "dependencies": { - "bl": "^5.0.0", - "vinyl": "^3.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-contents/node_modules/replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/vinyl-contents/node_modules/vinyl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", - "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", - "dependencies": { - "clone": "^2.1.2", - "clone-stats": "^1.0.0", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dependencies": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", - "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "optional": true - }, - "node_modules/websocket": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", - "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", - "optional": true, - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.63", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "optional": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "optional": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "optional": true, - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "optional": true - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "optional": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "optional": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "optional": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "optional": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "optional": true - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "optional": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "optional": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/wrtc": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/wrtc/-/wrtc-0.4.7.tgz", - "integrity": "sha512-P6Hn7VT4lfSH49HxLHcHhDq+aFf/jd9dPY7lDHeFhZ22N3858EKuwm2jmnlPzpsRGEPaoF6XwkcxY5SYnt4f/g==", - "bundleDependencies": [ - "node-pre-gyp" - ], - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-pre-gyp": "^0.13.0" - }, - "engines": { - "node": "^8.11.2 || >=10.0.0" - }, - "optionalDependencies": { - "domexception": "^1.0.1" - } - }, - "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xpc-connection": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/xpc-connection/-/xpc-connection-0.1.4.tgz", - "integrity": "sha512-Np4+cx5l9zhSNrH5O5niVqVT0vBnja4IG5CxuBgCvTdWGiyujRwUTSj/FtT66KX84/MMCKpt5wIcuORBMFT6qQ==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "nan": "^2.0.5" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "optional": true, - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - } - } -} diff --git a/apps_ts/papam_clockinfo_tests/package.json b/apps_ts/papam_clockinfo_tests/package.json deleted file mode 100644 index ec8c197e4..000000000 --- a/apps_ts/papam_clockinfo_tests/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "papam_clockinfo_tests", - "version": "1.0.0", - "description": "Quickstart for Espruino using typescript and Visual Studio Code IDE", - "main": "app.js", - "repository": { - "url": "https://github.com/stasberkov/espruino-ts-quickstart" - }, - "scripts": { - "build": "gulp build", - "send-to-espruino-console": "gulp send-to-espruino-console", - "espruino-console": "gulp espruino-console" - }, - "author": "Stanislav Berkov", - "license": "ISC", - "dependencies": { - "@types/espruino": "^1.94.10", - "espruino": "^0.1.55", - "gulp": "^5.0", - "gulp-typescript": "^5.0.1", - "js-yaml": "^4.1.0", - "lodash": "^4.17", - "typescript": "^5.5.4" - } -} diff --git a/apps_ts/papam_clockinfo_tests/src/app.ts b/apps_ts/papam_clockinfo_tests/src/app.ts deleted file mode 100644 index 25a9e3277..000000000 --- a/apps_ts/papam_clockinfo_tests/src/app.ts +++ /dev/null @@ -1,76 +0,0 @@ -import appConfig = require("./app-config"); - -interface GpsData { - text: string; - img: string; -} - -interface Item { - name: string; - get: () => GpsData; - show: () => void; - hide: () => void; - hasRange?: boolean; -} - -interface GpsResult { - lat: number; - lon: number; -} - -interface Result { - name: string; - items: Item[]; -} - -(function() { - let totalIntervalInMillis: number = appConfig.default.refreshPeriodSec; - - function format(x: number): string { - const d = Math.floor(x); - let m = x - d; - m = m * 60; - return "" + d + " " + m.toFixed(3) + "'"; - } - - function getPosition () : GpsResult { - let result: GpsResult = { lat: 0, lon: 0 } as GpsResult; - if (Bangle.isGPSOn()) { - result = Bangle.getGPSFix(); - } - return result; - } - - function show(this: { interval?: number; emit: (event: string) => void }) { - this.interval = setTimeout(() => { - this.emit("redraw"); - this.interval = setInterval(() => { - this.emit("redraw"); - }, totalIntervalInMillis); - }, totalIntervalInMillis - (Date.now() % totalIntervalInMillis)); - } - - function hide(this: { interval?: number }) { - clearInterval(this.interval); - this.interval = undefined; - } - - return { - name: "Bangle", - items: [ - { - name: "GPS-Data", - get: () => { - const position: GpsResult = getPosition(); - const strPosition: string = format(position.lat) - return { - text: `lat: ${strPosition}`, - img: atob("GBiBAAAAAAAAAAAAAAAYAAA8AAB+AAD/AAAAAAAAAAAAAAAYAAAYAAQYIA4AcAYAYAA8AAB+AAD/AAH/gD///D///AAAAAAAAAAAAA==") - }; - }, - show: show, - hide: hide - }, - ] - } as Result; -})(); diff --git a/apps_ts/papam_clockinfo_tests/tsconfig.json b/apps_ts/papam_clockinfo_tests/tsconfig.json deleted file mode 100644 index 970971d7e..000000000 --- a/apps_ts/papam_clockinfo_tests/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "module": "commonjs", - "lib": [ - "es2015", - "dom" // setInterval, console - ], - "strict": true, - "skipLibCheck": true - }, - "include": [ - "src/**/*.ts" - ] -} \ No newline at end of file From 814abf6423f1767e4490aee82e69188feb9abac6 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Mon, 24 Feb 2025 00:52:08 +0100 Subject: [PATCH 036/188] Obsolete --- apps/pm_timer/pmTimer.info | 6 ---- apps/pm_timer/pmTimer.js | 59 ------------------------------------- apps/pm_timer/timer-48.png | Bin 1487 -> 0 bytes 3 files changed, 65 deletions(-) delete mode 100644 apps/pm_timer/pmTimer.info delete mode 100644 apps/pm_timer/pmTimer.js delete mode 100644 apps/pm_timer/timer-48.png diff --git a/apps/pm_timer/pmTimer.info b/apps/pm_timer/pmTimer.info deleted file mode 100644 index f00b17279..000000000 --- a/apps/pm_timer/pmTimer.info +++ /dev/null @@ -1,6 +0,0 @@ -require("Storage").write("pmTimer.info",{ - "id":"pmTimer", - "name":"PapaM Timer", - "src":"pmTimer.app.js", - "icon":"pmTimer.img" -}); \ No newline at end of file diff --git a/apps/pm_timer/pmTimer.js b/apps/pm_timer/pmTimer.js deleted file mode 100644 index 1a4631538..000000000 --- a/apps/pm_timer/pmTimer.js +++ /dev/null @@ -1,59 +0,0 @@ -var counter = 30; -var counterInterval; - -function countDown() { - counter--; - - if (counter<=0) { - clearInterval(counterInterval); - counterInterval = undefined; - - E.showMessage("Out of Time","My Timer"); - Bangle.buzz(); - counterInterval = setInterval(() => Bangle.buzz(), 5000); - - Bangle.setUI({ - mode : "custom", - btn : ()=>{ - Bangle.setUI(); - startTimer(); - } - }); - return; - } - - g.clear(1); // clear screen and reset graphics state - g.setFontAlign(0,0); // center font - g.setFont("Vector",80); // vector font, 80px - - g.drawString(counter, g.getWidth()/2, g.getHeight()/2); - - Bangle.setLCDPower(1); // optional - this keeps the watch LCD lit up -} - -function startTimer() { - counter = 30; - countDown(); - - if (counterInterval) - clearInterval(counterInterval); - - counterInterval = setInterval(countDown, 1000); - - Bangle.setUI({ - mode : "updown", - }, dir => { - if (!dir) { // if tapped or button pressed, start/stop - if (counterInterval) { - clearInterval(counterInterval); - counterInterval = undefined; - } else counterInterval = setInterval(countDown, 1000); - } else { // otherwise if dir nonzero, count time up/down - counter += dir + 1; // +1 because countDown decrements - if (counter<3) counter=3; - countDown(); - } - }); -} - -startTimer(); \ No newline at end of file diff --git a/apps/pm_timer/timer-48.png b/apps/pm_timer/timer-48.png deleted file mode 100644 index c07d674efe5ef437b1840251eb234847d5567ff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1487 zcmV;=1u*)FP)|*C(U-rJ}14rXalM3P=CLNWV4;08% z_)fM{q3&m*x&CuUx{URPyOYh9qUvLiR3LYguP-0Aw~qW~V*9`Uqp%?(g<+UI+pV{( z?oQdO%|k!mzB{RNjLhGL4LNxHWf6hQuU_K68K#;+$2W1TpJ6l^&xKua^ zH-~>27@FlpOtj$P~Y5X7;v@Tprv?=?4qlFtKdlpYKiI;z{61px`sU z!*ANbN+`LOwFL*?9e_^3q?(Diixn4j!|a^?|Ky+b!mM<8nQk~0qvhP{I1&^7LW?2 z1p}1c$QGXjM^y%?eC8qHgvaYL;KlvVLjzk6Qsa?z2Fly=JeX5vPC&|^yqfv6f}>}J zlcCKThWa2jHWpMWRY*vvZoEqnpymT|u?m*HD4YoGbn?*%zmQI+gQ%z|$ji$Eo6ROE z3G>o@IIVe$FeSReFXb^hVt^4&a%)uWwoqAF8OUTZNJ~qD>FH@nNwnPmRTS(P_MqI4 z-KSK-34Un#7@RJLXrbKPT%JUHd_3s&ddUdb>=uzJVcOx_?la7u$9c-;V7*D>aUrYK z3dzaIJc*c?7^tt8?s9jIHIQy~B3qpu>6O4KHZxT?5Thmro~>Xun;|YPjwcZj5djRt zfXgM04gSLBu!lL6f+mFD5HXQ@mS6GVl-lTXHxE-+ zvJ%4rJX~-%?QpjF5ZS5t)+gn+Drm5K5H7S0|1R?Xg&h5?%pYJ!fGjD|t%Vw<1p^c{ zy+L}P^L{DMpMv)Fr^uontE45%Ovsd9w$8zKy7!1mjG7C$Z;HK2qO9XvAJ{#R8cUWL zINy3$+*WC%vjbB8KN8dha?&%`-+{m9`y@3RmAD4R-7l8~3#>yG992(Fj&_ROgJ5EW z!)b@M;cAi1uU}lck-3=>C6fZ!XvK!Bc!$>S1s34`5W(MKwRM(ol>(p7N!HvYn!IkF ziHz7-!(#q2zBs^VlDNYt_>Awm##pG;7mFgSk}w;|cHR@PS4ny&Nra_mg1)eR_Dw4= zzyz;2wTgZo-L@>;!05Q1cDUzGz6oW*^uX^38wy~Og-s{y+hER)g$Gu4kN?24tyg(e pAAZA>7_-V9@i*%(b|L%!<6lbM+hcr#pJV_4002ovPDHLkV1lop!}S0F From e7a7a801382aae0284c9cae74991a141ef1890e8 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Tue, 25 Feb 2025 21:26:41 +0100 Subject: [PATCH 037/188] obsolete --- apps/slopeclockbig/ChangeLog | 8 -- apps/slopeclockbig/README.md | 18 --- apps/slopeclockbig/app-icon.js | 1 - apps/slopeclockbig/app.js | 194 ------------------------------ apps/slopeclockbig/app.png | Bin 10685 -> 0 bytes apps/slopeclockbig/default.json | 10 -- apps/slopeclockbig/metadata.json | 21 ---- apps/slopeclockbig/screenshot.png | Bin 3302 -> 0 bytes apps/slopeclockbig/settings.js | 60 --------- 9 files changed, 312 deletions(-) delete mode 100644 apps/slopeclockbig/ChangeLog delete mode 100644 apps/slopeclockbig/README.md delete mode 100644 apps/slopeclockbig/app-icon.js delete mode 100644 apps/slopeclockbig/app.js delete mode 100644 apps/slopeclockbig/app.png delete mode 100644 apps/slopeclockbig/default.json delete mode 100644 apps/slopeclockbig/metadata.json delete mode 100644 apps/slopeclockbig/screenshot.png delete mode 100644 apps/slopeclockbig/settings.js diff --git a/apps/slopeclockbig/ChangeLog b/apps/slopeclockbig/ChangeLog deleted file mode 100644 index a8903409e..000000000 --- a/apps/slopeclockbig/ChangeLog +++ /dev/null @@ -1,8 +0,0 @@ -0.10: Clone of original SlopeClock++; - plus first modifications to draw clock only in left upper corner -0.20: Minor fix -0.30: Fix size of animation and drawing slope to left upper -0.40: Try with halving the other scalars -0.41: Use different font for clock -0.42: Minor fix; use proper amount of g2 -0.50: Increase size of clock_info stuff bottom, left diff --git a/apps/slopeclockbig/README.md b/apps/slopeclockbig/README.md deleted file mode 100644 index cdba8892d..000000000 --- a/apps/slopeclockbig/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Slope Clock BIG - -A version of Slope Clock ++ with different spacing and a bigger size -for the clock_info module parts - -## Usage - -When the screen is unlocked, tap on the information that you would like -to change (top right or bottom left). It should change color showing -it is selected. - -* Swipe up or down to cycle through the info screens that can be displayed - when you have finished tap again towards the centre of the screen to unselect. - -* Swipe left or right to change the type of info screens displayed (by default - there is only one type of data so this will have no effect) - -Settings are saved automatically and reloaded along with the clock. diff --git a/apps/slopeclockbig/app-icon.js b/apps/slopeclockbig/app-icon.js deleted file mode 100644 index bd62b928d..000000000 --- a/apps/slopeclockbig/app-icon.js +++ /dev/null @@ -1 +0,0 @@ -require("heatshrink").decompress(atob("mEw4P/AAMA/Ayq8EH8AEBgfgj4zCj/gn/8Aod//wFDvk/gEEAoP4AoMAEIP4j4FFwAFC/gFEv//ApM/74FDg4XBgZLCFIMzAoU4g8BK4dwgMP+Ewg+AgMfK4PhAoXwh+B/0Bj0B/4FBgYnB/8B/kDgf/+ED/kHn//HgIFBW4IFB/AFDgf4h4FB+EBFgLKCAoInBAAOAAoqkBAgPAWAIuBAoXAn+zCAMB4F/8YFBgYFB4YFBRgY7BYwIoCABX4zkY74FB/mMiALC/3mug6CAAgA==")) diff --git a/apps/slopeclockbig/app.js b/apps/slopeclockbig/app.js deleted file mode 100644 index 1afde1410..000000000 --- a/apps/slopeclockbig/app.js +++ /dev/null @@ -1,194 +0,0 @@ -{ // must be inside our own scope here so that when we are unloaded everything disappears - // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global - -let settings = Object.assign( - require("Storage").readJSON("slopeclockbig.default.json", true) || {}, - require("Storage").readJSON("slopeclockbig.json", true) || {} -); -// Actual height 71 (81 - 11) -//const fontBitmap = E.toString(require('heatshrink').decompress(atob('AFv4BZU/+ALJh//wALIgP//gYJj//8ALIgf//4YJv//HxMHDAI+JDAJkJDBgLBDBJvBDEZKYDBaVMn6VKY4P+cBfAXZQ9JEoIkKAGcDBZUBPhJkCBZU/DBSJBBZLUBDBLHMBYIYJdgIYJj4YKJAIYJHgQYIe4IYKBYYYHn4YKJAQYIQoIYJJAYYHJAgYHQoQYIJAn//iFIAAP+JBX/wBIJ//AQpAAB8BIK/CFJJAxtMDApIEDAxIFW5gYEJAoYFQooYGBYwYEJAoYFQooYFJAwYEQooYFJA4YEBZAYCQowYEJBAYCQo4YDJBIYCBZUBQo4A5WBKYDOhLWCDJE/cZUPBYT8HgYLDTY4LDGQ7VBEpIkEfw9/EpRJEEox6CJZJuDOI8HBYo+FBYo+FHow+EHoy9FHo3/4B7IK4wYHK4ZWGK4qUC/BCDK4ZWCIoIMDN4o4CIYQYGApAYCIgY3BOAYSBLoYlCRIQ4CR4b+BDAYFFCQoYGFYIYFYIgYHZooYebQhjTPhKVOVwwYFY5gGCcAz5CGQIECDAcHCYQAD/wYGAAhQDHAQYJn4MG4DaFAAiCDRIQAFN4ZeDAAbNEK44LDHw5WDK449EHw49EHww9EHwx7EEo57DEo7rDEo4kGEopJFZIpuEWAwwGPwh6FBgoLJAH4AVSgKRDRoKHFQoazBcIgYaX4oYFCQYYSXAIYKn74DAATeGAAgYEFYIYJFYIYWh4YLBYwYEN4IYJRAIYKN44YDN46bGDBJvHDH4Y0AAwSBBZIrBDH4YhAHF4BZUPLghjG//gAohjEh//4AFCj4YEgISBwAFBgYYFCQqIBAoYSFFQIYEn4+DFQQYF/wREDAgrBJQRiBDAgGB/hiEDBJPBDBJPCDAhvEDoIYELoP4MQgYIMQQYJMQQYIMQQYJBYQYIEgYYHEgYYG4BJDDAyuBEgRxBDAvwSYX3DAwAD/wYHAAfHDBX8DBeHY4xUEDArCCHoQSBDBPgDBX8DAr0DUoQYFVQYVBDAqeETAIYFSQSxCDApwEZQIYFaAoYGHwfgDAw+D/gYHV4Z2DBYZ9D4AYHEoRJBDA4TBGAIYHGQILCDA4A/ABMHBhd+Aws8NwjpBTYiZBcAZ7DBYIFEfILRBbIYFDVoIlDAooYCFYYeFgYxEDAwrBDAbyBY4YYB/AVBBAL9DZoeAFwIYGcwIYQCQQYE+AYDCQSIDCoIYIG4RNBDBRmBDEgIBDBWADBAIDDBAICDBACBZQIYHwACB4APBDAv8RAP+TAIYG+4CB/BNBDAoAGDAoAFDBjgFAAr5FDCyrBAAv+DAZdBAAvgDA3vAYSYBAASGBEAI1D4AMDA4XHN4xwDSYSIFK4Y1DKwY+D8A1DBYYlCFgI9HEoSNDHohLCHAI+CBYpbFPYYAFIQIkGIQiHEAH4ADPgKgEAAkBPZaIBDBLXCEhYYJVpYkCDBAkCDBIkCDBAkCDBAkDDBF/DBQkDDA4kDDBAkDDA4kC34YHgYLB8YYIEgP8OIIkJDYIYGEgXgDBAkB/AYIj5gCDA4kC4AYIEgQYIEgP+DgQYFEgYYIEgIUBDA8HVgawHVgYADIYIYKwAY/DH4Y/DF4AEn//BI4ABgf/+AMJDH4YjAH4AJj/ABRDiB/jzCdgcBdIfgOIIPBAAQLD/wnB/4oDh4MD+AeBDBCgBDAPgDBASBFAIYHwASBDBH4CQQYI4ASBZIYYEI4J0BDBJ8BDBAxBDAKJDJQoYBB4JjIDBSuCDAvwBAJsBDAyCBAQQYH8CFDDBLgDDAzQDDA7QDDBQxBOYQYGGgISBDBD5CDBAIBn4YJ/ybCDBClEDAylEDEZzBVwwACOYKuGAAalBDBKlBDAq3BAARvDDAS3BAASIDDAaSBKwwYCK4hWDDAY+DHogIBG4I9HgFgAQMDSgwAESwR7EAAh7GAAglCEhBCCJIgMGBZQA9j5JKcAKHJaYQMIUATrFAAT4Eb4gABdYjTFGAjsGVYYlJEgv/EhRLGJIjtHBYpxFNwYACfQkDBYpkFT4I+JHow+FBYx9EHox9EPYxXFPYoYFKw6WEDAXh/+DOApWC+E/+AFCN4v8FAJQCOAYSDv4hBRIpECcQISCDAYIBOwJTCIgIYFwEfNgI0BDAv4P4IYV+AIBDBIICDBZjBDCwIBR4IYIwBdCDA/8cwQYI+AkBY4YYEcA4SBfgrgF/AYLwAYERgIYJUoIACCoPAewIAC4ALCMAoABcwIYKN4YVBFYJWHgAVB8BBBKwyJDLQJWFRIXgK4Y9ECoIrBHwY9DOALACHo8AniADPYoAESwR7DAAokHAAaNCBZAMBBZQA5PAKoENYyDJXQYYQjgYKg4FEDAsDAogYGAowSEZIIYJfYLIEDAjuCwAYHagP//AYIBYIYJv4LBcQgYDHgIAB4AYGHgRdFAoQ8CAAJdDDAYLDOAgYCHgQABOAYYCHgYYHBwIADOAYJB8YLEOAgYBBYoYFAApjFAAzHFAAqIDDA7TEDAzGEDAw8EDA4LEDAw8EDAy4DDA48FDAr2EDA4LGDAiqDDA48GDAiFEDAw8HDAaFFDAw8HDAY8HDAY8IDAQ8IAH4AFv5nJgE/QBMAg6ZKgKBLEgIlGEIICCRwwhBFoN/WY4IB+DxDZA/Bfo5GC/0fco5GC+YLCHwhGC/+/AYXAdooAEDAhGDAAZXDHoQAESwhGDAAZXDgYLGOAhWCDBBWDDBCdCDB2DRIt//gzC8BpB/BvEwALBBAIrBDAYqBE4RdCDArVDLoQYE8ByCwCPBDAiOBCgIIBR4IYFUgXADBAUBYgIYHawQYJJoIcDMYoYCGoRjGOAZjGCIKJCPg/AUQWADA3/z4CB/goBDAoAD+LHGfMa4CDBJUCAAicBDBKYBAASbBDBJwC/5BDZQJwF+YYD4BXF/xBDRAY+D4IYDRAY+C/CZDN4Y+DQAZWEEoXAM4Y9EUYIGBHwRWEFAyUEDYp7GAAglBEhJLBJIoyGBZQA/MBDPEPI7DFfQy3FAAUBaAkBUQrdCGQSKFewYlBv41EEgQlCj//wBJFAAPwaoJbEbgTqCCIJOEHoQVBgbhFHoYuBGIJXDHoYVBAoLuECQJXDDAorBDAZvBOAhWDCoI3BOAYYEFwIYFKwYYBNIIYDN4gYBCQKJDAoPwAQIYCRIY3BMAgYFPIQPBDBA3Bv4YIBAIVBDBCCBn4YKOYIYY4ASBDBCuDDCn4cwR8FDAWAZoIYFAoM/+C0CY4b2CBIIFCY4xgB8DyCcAv+g/8j7jCcA7jEfI78DBYRTBAAp/BAAQ4CAAnABYR2CAAhvDgBFCAAgLDNQQAEN4aJCKxJXHHoZXHHog+HBYg+GPYY+HPYh9HdYZ9HEgolFEgwlFBYxLENwhxGGAzvET4gZGC5AA/ABl8AYV4BY0fdIU/OQx8BSYIDDUQv+AYokESgQDDcI2AWQTUHHwIDDY43AXwWADAz3Bv4YGCgQYJCgIYDAYIYKOAoYYJRZjOPhKVGDAqqBCgKuHYYKqBDgLHGHQPggEPcA8/NYU/HoolCIQQkGAEIA=='))); -// Actual height 35 (37 - 3) -const fontBitmap = E.toString(require('heatshrink').decompress(atob('AAUD4AFDh/gAoc/BYn/AocB/+ADgf/CAcH/wiE/gFDj/4FAnwFxM/JhYFEnwKEFxJLBFwcf/5jD/5dDh4FBLoV/AoJbCAgJdCBQQoBNgIWDEwP/HIU/E4gWBIgYKBHARDBQgYiBIYYzBR4iDEj6mDgE4aJcBCQl/HQYpBGoZSCIwgFCMYZ/EAoQWCAoR6CEYJdBAoYcDGoKRCAoUfBwM/SQLnCAQV/RQM/O4KbCeAIoBGIWAgYxDFAIFBAQRLBFYIuBKIYuBKIYoBAoYxCLogFCbw4FDXoQRCT4QFBTArDDIIQATn4CBEYV+NIJdBAQUDIAICCg4vBTwZjLJgIECIIK7DR4S7ERhK+CFwh6CFwQoDPYSJCMAiBDLQYACLQQALjAFEPQLqCewTqCLoLtEFYLqDFYN/LoXgCwJdBv/AOIJdBEQJrB4AlCLoUD/yICFYTfDQwX9GIQFB/aME86MEx6MD/0fRgIFB/E/XYfgRgQ4CRgS5BRgd/+CMDjzqDAAsQAok8AQMPEQSvBFAICCgYoBRgN/R4UP+H+g5dC8P8BAI5B4f4SoIiBx5XBRgUf+BdBRgM/LoQoC4KMC/P/4aMEOwKGDXYQFDRgYABRgIECLQIFB/a1CHQP3EQQFB44cCgBcBTIJ8CfYQACgIQCABozCAAJlBAocfXQS8CXQQQBLgStCH4ZeCLgJMCIoZKBFwc//guD/6wBCAeDFwQ4BdIaMPwAzCF4RKBAAIvBHIX/dQS7EYIa7RUgbpBAAapFRgkDRgYAMiEAFwKdCn5dD8BdE8IFBLoXBGoJdC4Y1BLoWHGoJdB/0PMYJdB/kPMYJtCj/AJ4Mf8F/wBPBn/AFwXwFAIuCHAKSCj/DSQc/w6SDv5BCLoI4BXYYuBWoQuCEQQuBAoIcBh5TCDgLsCTwhcCABsfV4aTCDYbMEb4QFBCAQFCfgYFBfgYFBewYcBAgRGBDgYFBDgY7BDgJ8BQwMf/C1E8f4VYIiBw61DB4S1CXYS1CRgP3WoQPBWoYPBWofBAoIoBn7BCTAN/wZXEJoKHC/gFBDgMB4AFBV4cDV4gAJn6bCAAN/AQMCAQIaCjwoBGIICCdQJaBAQLqBDIIIC8EDeAR9Bj4FCFwJjDTgIFD/x6BKQK1FEAIABDgLYIGYIuBQobeCNwYnBDYLkDAgQuBDYQuCRQcHRQjhCABavCDIrfBj4FCj/8n4FCYoLHCHQP9AoRjDIQJdCeAZ1EQoSMBQwQpB4C1BBIKhBg/gAoLQBh/AMgN+FAOBAoI0Bn5wBwYuBFAWHFwItCXYQFDXYiUBXYbBFewX/z5RCgf+L4KgBgfwL4KMDQQIFEUxEPB4l/GQN4SQX+g72DF4JRBGQKABAoIyBQwRdC/F/wBdC+BdE8AqBGYN/4I2BEoN/w61CTALzCD4I0D/8DDAKGCg/z/+AFAOP76MFcg8PVIgFDKILwDQgQcDAoaMCAoQWBAoRcBSQQQDRoIKDAA0HwEPWgfAn+AVQWAHQRkBwYFCLwMHEgQDBYYYDBj5jBEQP4n47CAYN/NIIoB8BSDFwkAv0AcwgAD'))); - -Graphics.prototype.setFontPaytoneOne = function(scale) { - //this.setFontCustom(fontBitmap,46, atob("HTBFLTQ0PzU/Lz8+HQ=="),100+(scale<<8)+(1<<16)); - this.setFontCustom( - fontBitmap, - 46, - atob("DRcgFhkZHhodGRwcDQ=="), - 47|65536 - ); - return this; -}; - -let drawTimeout; - -//let g2 = Graphics.createArrayBuffer(g.getWidth(),90,1,{msb:true}); -let g2 = Graphics.createArrayBuffer(g.getWidth() / 2,g.getHeight() / 2,1,{msb:true}); -let g2img = { - width:g2.getWidth(), height:g2.getHeight(), bpp:1, - buffer:g2.buffer, transparent:0 -}; -const slope = 10; -const offsY = 10; // offset of numbers from middle -const fontBorder = 4; // offset from left/right -const slopeBorder = 5, slopeBorderUpper = 2; // fudge-factor to move minutes down from slope -let R,x,y; // middle of the clock face -let dateStr = ""; -let bgColors = []; -if (g.theme.dark) { - if (settings.colorYellow) bgColors.push("#ff0"); - if (settings.colorCyan) bgColors.push("#0ff"); - if (settings.colorMagenta) bgColors.push("#f0f"); - if (settings.colorWhite) bgColors.push("#fff"); -} else { - if (settings.colorRed) bgColors.push("#f00"); - if (settings.colorGreen) bgColors.push("#0f0"); - if (settings.colorBlue) bgColors.push("#00f"); - if (settings.colorBlack) bgColors.push("#000"); -} -let bgColor = bgColors[(Math.random()*bgColors.length)|0]||"#000"; - - -// Draw the hour, and the minute into an offscreen buffer -let draw = function() { - // queue next draw - if (drawTimeout) clearTimeout(drawTimeout); - - drawTimeout = setTimeout(function() { - drawTimeout = undefined; - animate(false, function() { - draw(); - }); - - }, 60000 - (Date.now() % 60000)); - // Now draw this one - const rRaw = Bangle.appRect; - R = { x: rRaw.x, y: rRaw.y, w: rRaw.w / 2, h:rRaw.h / 2, x2: rRaw.x + rRaw.w / 2, y2: rRaw.y + rRaw.h / 2 }; - x = R.w / 2; - y = R.y + R.h / 2 - 6; - if (!settings.hideWidgets) y-= 6; // extra room for date - const date = new Date(); - const local_time = require("locale").time(date, 1); - const hourStr = local_time.split(":")[0].trim().padStart(2, '0'); - const minStr = local_time.split(":")[1].trim().padStart(2, '0'); - dateStr = require("locale").dow(date, 1).toUpperCase()+ " " + require("locale").date(date, 0).toUpperCase(); - - // Draw hour - g.reset().clearRect(rRaw); // clear whole background (w/o widgets) - g.setFontAlign(-1, 0).setFont("PaytoneOne"); - g.drawString(hourStr, fontBorder, y-offsY).setFont("4x6"); // draw and unload custom font - - // add slope in background color - g.setColor(g.theme.bg) - .fillPoly([0,y+slope-slopeBorderUpper, R.w,y-slope-slopeBorderUpper, R.w,y-slope, 0,y+slope]); - - // Draw minute to offscreen buffer - g2.setColor(0).fillRect(0,0,g2.getWidth(),g2.getHeight()).setFontAlign(1, 0).setFont("PaytoneOne"); - g2.setColor(1).drawString(minStr, g2.getWidth()-fontBorder, g2.getHeight()/2).setFont("4x6"); // draw and unload custom font - g2.setColor(0).fillPoly([0,0, g2.getWidth(),0, 0,slope*2]); - - // redraw the top widget - clockInfoMenu.redraw(); - // start the animation *in* - animate(true); -}; - -let isAnimIn = true; -let animInterval; -let minuteX; -// Draw *just* the minute image -let drawMinute = function() { - const yo = slopeBorder + offsY + y - 2 * slope * minuteX / R.w; - // draw over the slanty bit - g.setColor(bgColor).fillPoly([0,y+slope, R.w,y-slope, R.w,R.h+R.y, 0,R.h+R.y]); - // draw the minutes - g.setColor(g.theme.bg).drawImage(g2img, x+minuteX-(g2.getWidth()/2), yo-(g2.getHeight()/2)); -}; -let animate = function(isIn, callback) { - if (animInterval) clearInterval(animInterval); - isAnimIn = isIn; - minuteX = isAnimIn ? -g2.getWidth() : 0; - drawMinute(); - animInterval = setInterval(function() { - minuteX += 8; - let stop = false; - if (isAnimIn && minuteX>=0) { - minuteX=0; - stop = true; - } else if (!isAnimIn && minuteX>=R.w) - stop = true; - drawMinute(); - if (stop) { - clearInterval(animInterval); - animInterval=undefined; - if (isAnimIn) { - // draw the date - g.setColor(g.theme.bg).setFontAlign(0, 0).setFont("6x15").drawString(dateStr, R.x + R.w/2, R.y+R.h-9); - // draw the menu items - clockInfoMenu.redraw(); - clockInfoMenu2.redraw(); - } - if (callback) callback(); - } - }, 20); -}; - -// clock info menus (scroll up/down for info) -let clockInfoDraw = (itm, info, options) => { - let textY = options.y+41; - // set a clip-rect to stop us drawing outside our box - g.reset().setClipRect(options.x, options.y, options.x+options.w-1, options.y+options.h-1); - g.setFont("6x15").setBgColor(options.bg).clearRect(options.x, textY-15, options.x+options.w-2, textY); - - g.setColor(options.focus ? options.hl : options.fg); - if (options.x < g.getWidth()/2) { // left align - let x = options.x+2; - if (info.img) g.clearRect(x, options.y, x+23, options.y+23).drawImage(info.img, x, options.y); - g.setFontAlign(-1,1).drawString(info.text, x,textY); - } else { // right align - let x = options.x+options.w-3; - if (info.img) g.clearRect(x-23, options.y, x, options.y+23).drawImage(info.img, x-23, options.y); - g.setFontAlign(1,1).drawString(info.text, x,textY); - } - // return ClipRect - g.setClipRect(0,0,g.getWidth()-1, g.getHeight()-1); -}; -//load first -let clockInfoItems = require("clock_info").load(); -let clockInfoMenu = require("clock_info").addInteractive(clockInfoItems, { // top right - app:"slopeclockbig",x:132, y:settings.hideWidgets ? 12 : 24, w:44, h:40, - draw : clockInfoDraw, - bg : g.theme.bg, fg : g.theme.fg, hl : "#f00"/*red*/ -}); -let clockInfoMenu2 = require("clock_info").addInteractive(clockInfoItems, { // bottom left - app:"slopeclockbig", - x:0, y:92, w:85, h:80, - draw : clockInfoDraw, - bg : bgColor, fg : g.theme.bg, hl : (g.theme.fg===g.toColor(bgColor))?"#f00"/*red*/:g.theme.fg -}); - -// Show launcher when middle button pressed -Bangle.setUI({ - mode : "clock", - remove : function() { - // Called to unload all of clock app - if (animInterval) clearInterval(animInterval); - animInterval = undefined; - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = undefined; - delete Graphics.prototype.setFontPaytoneOne; - // remove info menu - clockInfoMenu.remove(); - delete clockInfoMenu; - clockInfoMenu2.remove(); - delete clockInfoMenu2; - } -}); - -// Load widgets -Bangle.loadWidgets(); -if (settings.hideWidgets) require("widget_utils").swipeOn(); -else setTimeout(Bangle.drawWidgets,0); -draw(); -} diff --git a/apps/slopeclockbig/app.png b/apps/slopeclockbig/app.png deleted file mode 100644 index 2f5912fcf3c5dde259cd3f6ec1f7745cd3013d8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10685 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%0A^TaIdNAA1c|vojMSZS%LP3!g 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 ZwI=CXS3MV047Msb8n<;-%5L2c`9H>$Z?^yd diff --git a/apps/slopeclockbig/default.json b/apps/slopeclockbig/default.json deleted file mode 100644 index 29b618735..000000000 --- a/apps/slopeclockbig/default.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "colorRed": true, - "colorGreen": true, - "colorBlue": true, - "colorYellow": true, - "colorMagenta": true, - "colorCyan": true, - "colorBlack": true, - "colorWhite": true -} diff --git a/apps/slopeclockbig/metadata.json b/apps/slopeclockbig/metadata.json deleted file mode 100644 index 92f925ab1..000000000 --- a/apps/slopeclockbig/metadata.json +++ /dev/null @@ -1,21 +0,0 @@ -{ "id": "slopeclockbig", - "name": "Slope Clock BIG", - "version":"0.5", - "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen. This is a clone of the original Slope Clock which shows extra information and allows the colors to be selected.", - "icon": "app.png", - "screenshots": [{"url":"screenshot.png"}], - "type": "clock", - "tags": "clock,clkinfo", - "supports" : ["BANGLEJS2"], - "dependencies" : { "clock_info":"module" }, - "readme": "README.md", - "storage": [ - {"name":"slopeclockbig.app.js","url":"app.js"}, - {"name":"slopeclockbig.img","url":"app-icon.js","evaluate":true}, - {"name":"slopeclockbig.settings.js","url":"settings.js"}, - {"name":"slopeclockbig.default.json","url":"default.json"} - ], - "data": [ - {"name":"slopeclockbig.json"} - ] -} diff --git a/apps/slopeclockbig/screenshot.png b/apps/slopeclockbig/screenshot.png deleted file mode 100644 index 1d9cec8e4e86b379460ac59d532ae0ace1e94ddd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3302 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 diff --git a/apps/slopeclockbig/settings.js b/apps/slopeclockbig/settings.js deleted file mode 100644 index 2c2d2c463..000000000 --- a/apps/slopeclockbig/settings.js +++ /dev/null @@ -1,60 +0,0 @@ -(function(back) { - const SETTINGS_FILE = "slopeclockpp.json"; - const storage = require('Storage'); - let settings = Object.assign( - storage.readJSON("slopeclockpp.default.json", true) || {}, - storage.readJSON(SETTINGS_FILE, true) || {} - ); - - function save(key, value) { - settings[key] = value; - storage.write(SETTINGS_FILE, settings); - } - - function showMainMenu() { - let menu ={ - '': { 'title': 'Slope Clock ++' }, - /*LANG*/'< Back': back, - /*LANG*/'Hide Widgets': { - value: !!settings.hideWidgets, - onchange: x => save('hideWidgets', x), - }, - /*LANG*/'Red': { - value: !!settings.colorRed, - onchange: x => save('colorRed', x), - }, - /*LANG*/'Green': { - value: !!settings.colorGreen, - onchange: x => save('colorGreen', x), - }, - /*LANG*/'Blue': { - value: !!settings.colorBlue, - onchange: x => save('colorBlue', x), - }, - /*LANG*/'Magenta': { - value: !!settings.colorMagenta, - onchange: x => save('colorMagenta', x), - }, - /*LANG*/'Cyan': { - value: !!settings.colorCyan, - onchange: x => save('colorCyan', x), - }, - /*LANG*/'Yellow': { - value: !!settings.colorYellow, - onchange: x => save('colorYellow', x), - }, - /*LANG*/'Black': { - value: !!settings.colorBlack, - onchange: x => save('colorBlack', x), - }, - /*LANG*/'White': { - value: !!settings.colorWhite, - onchange: x => save('colorWhite', x), - } - }; - E.showMenu(menu); - } - - - showMainMenu(); -}); From d634f589ac50c7ca958def498b348cc398fb104e Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Thu, 27 Feb 2025 22:36:24 +0100 Subject: [PATCH 038/188] :construction: read clkinfo items from settings --- apps/coin_info/clkinfo.js | 18 +++++++++--------- apps/coin_info/metadata.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index d83a9941a..c0705f082 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,4 +1,6 @@ (function() { + const SETTINGS_FILE = "coin_info.settings.json"; + var settings = require("Storage").readJSON(SETTINGS_FILE,1)||{}; function retrieveClkInfo(strToken) { // TODO: do something useful here -> http request to CMC @@ -25,15 +27,13 @@ var coinInfoItems = { name: "CoinInfo", - // TODO: get maybe from settings - items: [ - { - name: "BTC", - get : () => retrieveClkInfo("BTC"), - show : showClkInfo, - hide : hideClkInfo - }, - ] + items: settings.tokenSelected.sort().map(token => { + return { name : token, + get : () => retrieveClkInfo(token), + show : showClkInfo(), + hide : hideClkInfo(), + } + }) }; return coinInfoItems; diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 20a10381c..bd6776630 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.2", + "version": "0.03.3", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 7572d3bf6116def0e0280732e54fdaafca887ecc Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Thu, 27 Feb 2025 22:45:45 +0100 Subject: [PATCH 039/188] :construction: improve settings save --- apps/coin_info/metadata.json | 2 +- apps/coin_info/settings.js | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index bd6776630..08f6caea6 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.3", + "version": "0.03.4", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", diff --git a/apps/coin_info/settings.js b/apps/coin_info/settings.js index f9218894d..c46d22c70 100644 --- a/apps/coin_info/settings.js +++ b/apps/coin_info/settings.js @@ -28,7 +28,6 @@ settings.tokenSelected = v ? [...new Set([...settings.tokenSelected, token])] // Prevent duplicates : settings.tokenSelected.filter(t => t !== token); - save(); } }; }); @@ -40,10 +39,16 @@ max: 1440, onchange: v => { settings.getRateMin = v; - save(); } }; + menu['SAVE'] = { + cb: () => { + save(); + Bangle.showClock(); + } + } + return menu; } From c69d383aa3643830b8b18dedf213f66281d83739 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Thu, 27 Feb 2025 22:52:38 +0100 Subject: [PATCH 040/188] :construction: improve settings save --- apps/coin_info/metadata.json | 2 +- apps/coin_info/settings.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 08f6caea6..714098ac0 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.4", + "version": "0.03.5", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", diff --git a/apps/coin_info/settings.js b/apps/coin_info/settings.js index c46d22c70..1ef7ad41e 100644 --- a/apps/coin_info/settings.js +++ b/apps/coin_info/settings.js @@ -44,7 +44,7 @@ menu['SAVE'] = { cb: () => { - save(); + storage.write(SETTINGS_FILE, settings); Bangle.showClock(); } } From e574d540d42e7dba3a06ee6dffb09271462b1279 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Thu, 27 Feb 2025 23:04:38 +0100 Subject: [PATCH 041/188] :construction: improve settings save --- apps/coin_info/metadata.json | 2 +- apps/coin_info/settings.js | 21 +++++++++------------ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 714098ac0..78eae3bf9 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.5", + "version": "0.03.6", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", diff --git a/apps/coin_info/settings.js b/apps/coin_info/settings.js index 1ef7ad41e..1c88d7ae0 100644 --- a/apps/coin_info/settings.js +++ b/apps/coin_info/settings.js @@ -2,7 +2,7 @@ const SETTINGS_FILE = "coin_info.settings.json"; const storage = require('Storage'); - // Default settings with sorted tokens + // Default settings with sorted tokens and load settings let settings = Object.assign({ // TODO: MZw - retrieve from upload-storage tokens: ['bitcoin', 'ethereum', 'tether'], @@ -25,9 +25,12 @@ menu[token] = { value: settings.tokenSelected.includes(token), onchange: v => { - settings.tokenSelected = v - ? [...new Set([...settings.tokenSelected, token])] // Prevent duplicates - : settings.tokenSelected.filter(t => t !== token); + if (v) { + settings.tokenSelected.push(token); + } else { + settings.tokenSelected = settings.tokenSelected.filter(f => f !== token); + } + save(); } }; }); @@ -39,18 +42,12 @@ max: 1440, onchange: v => { settings.getRateMin = v; + save(); } }; - menu['SAVE'] = { - cb: () => { - storage.write(SETTINGS_FILE, settings); - Bangle.showClock(); - } - } - return menu; } E.showMenu(createMenu()); -}) \ No newline at end of file +})(load) \ No newline at end of file From 0f3e16d482e840afd2c8c3e78e23259295b9e20e Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Thu, 27 Feb 2025 23:21:12 +0100 Subject: [PATCH 042/188] :construction: improve settings save --- apps/coin_info/metadata.json | 2 +- apps/coin_info/settings.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 78eae3bf9..8f460c7d6 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.6", + "version": "0.03.7", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", diff --git a/apps/coin_info/settings.js b/apps/coin_info/settings.js index 1c88d7ae0..38810a109 100644 --- a/apps/coin_info/settings.js +++ b/apps/coin_info/settings.js @@ -50,4 +50,4 @@ } E.showMenu(createMenu()); -})(load) \ No newline at end of file +}) \ No newline at end of file From f994e95e66d5d3fc022423a11d78b4ff2fedb1a0 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Thu, 27 Feb 2025 23:46:22 +0100 Subject: [PATCH 043/188] :construction: improve clk-info --- apps/coin_info/clkinfo.js | 35 +++++++++++++++++++++-------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index c0705f082..c2e38bd88 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -12,10 +12,11 @@ } function showClkInfo() { - this.interval = setTimeout(()=>{ - this.emit("redraw"); - this.interval = setInterval(()=>{ - this.emit("redraw"); + const self = this; + this.interval = setTimeout(() => { + self.emit("redraw"); + self.interval = setInterval(() => { + self.emit("redraw"); }, 60000); }, 60000 - (Date.now() % 60000)); } @@ -25,16 +26,22 @@ this.interval = null; } - var coinInfoItems = { - name: "CoinInfo", - items: settings.tokenSelected.sort().map(token => { - return { name : token, - get : () => retrieveClkInfo(token), - show : showClkInfo(), - hide : hideClkInfo(), + function createClkInfoItems() { + let clkItems = []; + settings.tokens.sort().forEach(token => { + const clkItem = { + name: token, + get: () => retrieveClkInfo(token), + show: showClkInfo, + hide: hideClkInfo, } - }) - }; + clkItems.push(clkItem) + }); + return clkItems; + } - return coinInfoItems; + return { + name: "CoinInfo", + items: createClkInfoItems + }; }) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 8f460c7d6..0a57b9d3c 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.7", + "version": "0.03.8", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 9daa08c326e61958efc198326435204a49a5c810 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Thu, 27 Feb 2025 23:56:45 +0100 Subject: [PATCH 044/188] :construction: improve clk-info --- apps/coin_info/clkinfo.js | 18 ++++++++---------- apps/coin_info/metadata.json | 2 +- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index c2e38bd88..be652c7f4 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -12,11 +12,10 @@ } function showClkInfo() { - const self = this; - this.interval = setTimeout(() => { - self.emit("redraw"); - self.interval = setInterval(() => { - self.emit("redraw"); + this.interval = setTimeout(()=>{ + this.emit("redraw"); + this.interval = setInterval(()=>{ + this.emit("redraw"); }, 60000); }, 60000 - (Date.now() % 60000)); } @@ -28,14 +27,13 @@ function createClkInfoItems() { let clkItems = []; - settings.tokens.sort().forEach(token => { - const clkItem = { + (settings.tokens || []).sort().forEach(token => { + clkItems.push({ name: token, get: () => retrieveClkInfo(token), show: showClkInfo, - hide: hideClkInfo, - } - clkItems.push(clkItem) + hide: hideClkInfo + }); }); return clkItems; } diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 0a57b9d3c..3bbf9e45a 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.8", + "version": "0.03.9", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 7b207411d0e093693e1633c2106a87b922868a50 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 00:05:13 +0100 Subject: [PATCH 045/188] :construction: improve clk-info --- apps/coin_info/clkinfo.js | 13 ++++++++----- apps/coin_info/metadata.json | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index be652c7f4..3e658340b 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -12,12 +12,14 @@ } function showClkInfo() { - this.interval = setTimeout(()=>{ - this.emit("redraw"); - this.interval = setInterval(()=>{ - this.emit("redraw"); + const self = this; + this.interval = setTimeout(() => { + self.emit("redraw"); + self.interval = setInterval(() => { + self.emit("redraw"); }, 60000); }, 60000 - (Date.now() % 60000)); + } function hideClkInfo() { @@ -27,7 +29,8 @@ function createClkInfoItems() { let clkItems = []; - (settings.tokens || []).sort().forEach(token => { + + (settings.tokenSelected || []).sort().forEach(token => { clkItems.push({ name: token, get: () => retrieveClkInfo(token), diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 3bbf9e45a..6ca73434c 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.9", + "version": "0.03.10", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 6794acf2b3589b78323b676dc13aed32a23d921d Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 00:10:20 +0100 Subject: [PATCH 046/188] :construction: improve clk-info --- apps/coin_info/clkinfo.js | 11 ++++------- apps/coin_info/metadata.json | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 3e658340b..620de57fc 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -12,14 +12,12 @@ } function showClkInfo() { - const self = this; - this.interval = setTimeout(() => { - self.emit("redraw"); - self.interval = setInterval(() => { - self.emit("redraw"); + this.interval = setTimeout(()=>{ + this.emit("redraw"); + this.interval = setInterval(()=>{ + this.emit("redraw"); }, 60000); }, 60000 - (Date.now() % 60000)); - } function hideClkInfo() { @@ -29,7 +27,6 @@ function createClkInfoItems() { let clkItems = []; - (settings.tokenSelected || []).sort().forEach(token => { clkItems.push({ name: token, diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 6ca73434c..8e5ccde47 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.10", + "version": "0.03.11", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From f199f9dc3adfbe4fd99b78bbdb46c6527222a6df Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 00:25:04 +0100 Subject: [PATCH 047/188] :construction: improve clk-info --- apps/coin_info/clkinfo.js | 2 +- apps/coin_info/metadata.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 620de57fc..eaf7174a2 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -40,6 +40,6 @@ return { name: "CoinInfo", - items: createClkInfoItems + items: () => createClkInfoItems() }; }) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 8e5ccde47..6b3e3e339 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.11", + "version": "0.03.12", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 2de66b3a4227d50826e0a87fe7443bba8afa256e Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 00:45:47 +0100 Subject: [PATCH 048/188] :construction: improve clk-info --- apps/coin_info/clkinfo.js | 62 +++++++++++++++++++++--------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 37 insertions(+), 27 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index eaf7174a2..6f8b59605 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,45 +1,55 @@ (function() { const SETTINGS_FILE = "coin_info.settings.json"; - var settings = require("Storage").readJSON(SETTINGS_FILE,1)||{}; + const settings = require("Storage").readJSON(SETTINGS_FILE,1) || {}; - function retrieveClkInfo(strToken) { - // TODO: do something useful here -> http request to CMC - return { - text : strToken, - // color: "#f00", - img : atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") - } + function debug(...args) { + console.log("[CoinInfo]", ...args); } + function retrieveClkInfo(token) { + // TODO: do something useful here -> http request to CMC + debug("Retrieving:", token); + return { + text : token, + // color: "#f00", + img : atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") + v: 0 + } + } + function showClkInfo() { - this.interval = setTimeout(()=>{ - this.emit("redraw"); - this.interval = setInterval(()=>{ - this.emit("redraw"); + debug("Show called"); + const self = this; + this.interval = setTimeout(() => { + self.emit("redraw"); + self.interval = setInterval(() => { + debug("Interval refresh"); + self.emit("redraw"); }, 60000); }, 60000 - (Date.now() % 60000)); } function hideClkInfo() { - clearInterval(this.interval); - this.interval = null; + debug("Hide called"); + if (this.interval) { + clearInterval(this.interval); + this.interval = null; + } } function createClkInfoItems() { - let clkItems = []; - (settings.tokenSelected || []).sort().forEach(token => { - clkItems.push({ - name: token, - get: () => retrieveClkInfo(token), - show: showClkInfo, - hide: hideClkInfo - }); - }); - return clkItems; + debug("Creating items from:", settings.tokenSelected); + return (settings.tokenSelected || []).map(token => ({ + name: token, + get: () => retrieveClkInfo(token), + show: showClkInfo, + hide: hideClkInfo, + hasRange: false + })); } return { name: "CoinInfo", - items: () => createClkInfoItems() + items: createClkInfoItems }; -}) +})(); diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 6b3e3e339..045c4c955 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.12", + "version": "0.03.13", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 1cda9a71a0fddc2fcd1050adaf42aa60a88f89b9 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 00:57:47 +0100 Subject: [PATCH 049/188] :construction: improve clk-info --- apps/coin_info/clkinfo.js | 19 +++++++------------ apps/coin_info/metadata.json | 2 +- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 6f8b59605..9f31dea44 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -2,35 +2,30 @@ const SETTINGS_FILE = "coin_info.settings.json"; const settings = require("Storage").readJSON(SETTINGS_FILE,1) || {}; - function debug(...args) { - console.log("[CoinInfo]", ...args); - } - function retrieveClkInfo(token) { // TODO: do something useful here -> http request to CMC - debug("Retrieving:", token); + console.log("Retrieving:", token); return { text : token, // color: "#f00", img : atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") - v: 0 } } - + function showClkInfo() { - debug("Show called"); + console.log("Show called"); const self = this; this.interval = setTimeout(() => { self.emit("redraw"); self.interval = setInterval(() => { - debug("Interval refresh"); + console.log("Interval refresh"); self.emit("redraw"); }, 60000); }, 60000 - (Date.now() % 60000)); } function hideClkInfo() { - debug("Hide called"); + console.log("Hide called"); if (this.interval) { clearInterval(this.interval); this.interval = null; @@ -38,7 +33,7 @@ } function createClkInfoItems() { - debug("Creating items from:", settings.tokenSelected); + console.log("Creating items from:", settings.tokenSelected); return (settings.tokenSelected || []).map(token => ({ name: token, get: () => retrieveClkInfo(token), @@ -52,4 +47,4 @@ name: "CoinInfo", items: createClkInfoItems }; -})(); +}); diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 045c4c955..fab4e4aa3 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.13", + "version": "0.03.14", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From ced064c7974b92c7032b31e897a6fb5ee6920679 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 01:04:47 +0100 Subject: [PATCH 050/188] :construction: improve clk-info --- apps/coin_info/clkinfo.js | 30 +++++++++++++++++------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 9f31dea44..04732db2e 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,10 +1,6 @@ (function() { - const SETTINGS_FILE = "coin_info.settings.json"; - const settings = require("Storage").readJSON(SETTINGS_FILE,1) || {}; function retrieveClkInfo(token) { - // TODO: do something useful here -> http request to CMC - console.log("Retrieving:", token); return { text : token, // color: "#f00", @@ -12,20 +8,26 @@ } } + // function showClkInfo() { + // const self = this; + // this.interval = setTimeout(() => { + // self.emit("redraw"); + // self.interval = setInterval(() => { + // console.log("Interval refresh"); + // self.emit("redraw"); + // }, 60000); + // }, 60000 - (Date.now() % 60000)); + // } function showClkInfo() { - console.log("Show called"); - const self = this; - this.interval = setTimeout(() => { - self.emit("redraw"); - self.interval = setInterval(() => { - console.log("Interval refresh"); - self.emit("redraw"); + this.interval = setTimeout(()=>{ + this.emit("redraw"); + this.interval = setInterval(()=>{ + this.emit("redraw"); }, 60000); }, 60000 - (Date.now() % 60000)); } function hideClkInfo() { - console.log("Hide called"); if (this.interval) { clearInterval(this.interval); this.interval = null; @@ -33,7 +35,9 @@ } function createClkInfoItems() { - console.log("Creating items from:", settings.tokenSelected); + const SETTINGS_FILE = "coin_info.settings.json"; + const settings = require("Storage").readJSON(SETTINGS_FILE,1) || {}; + return (settings.tokenSelected || []).map(token => ({ name: token, get: () => retrieveClkInfo(token), diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index fab4e4aa3..b19987601 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.14", + "version": "0.03.15", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 016ac1b6c9af9209392cc9e99fd180b406d0fba2 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 01:44:42 +0100 Subject: [PATCH 051/188] :construction: improve clk-info --- apps/coin_info/clkinfo.js | 7 +++---- apps/coin_info/metadata.json | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 04732db2e..e221d3503 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,4 +1,6 @@ (function() { + const SETTINGS_FILE = "coin_info.settings.json"; + const settings = require('Storage').readJSON(SETTINGS_FILE,1) || {}; function retrieveClkInfo(token) { return { @@ -35,9 +37,6 @@ } function createClkInfoItems() { - const SETTINGS_FILE = "coin_info.settings.json"; - const settings = require("Storage").readJSON(SETTINGS_FILE,1) || {}; - return (settings.tokenSelected || []).map(token => ({ name: token, get: () => retrieveClkInfo(token), @@ -51,4 +50,4 @@ name: "CoinInfo", items: createClkInfoItems }; -}); +})(); diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index b19987601..7d5204e89 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.15", + "version": "0.03.16", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 94f8a00dc06ebab1c0645b60573decb99e4ba6e2 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 02:01:57 +0100 Subject: [PATCH 052/188] :construction: improve clk-info --- apps/coin_info/clkinfo.js | 81 ++++++++++++++---------------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 33 insertions(+), 50 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index e221d3503..a514ce05a 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,53 +1,36 @@ (function() { - const SETTINGS_FILE = "coin_info.settings.json"; - const settings = require('Storage').readJSON(SETTINGS_FILE,1) || {}; - - function retrieveClkInfo(token) { - return { - text : token, - // color: "#f00", - img : atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") - } - } - - // function showClkInfo() { - // const self = this; - // this.interval = setTimeout(() => { - // self.emit("redraw"); - // self.interval = setInterval(() => { - // console.log("Interval refresh"); - // self.emit("redraw"); - // }, 60000); - // }, 60000 - (Date.now() % 60000)); - // } - function showClkInfo() { - this.interval = setTimeout(()=>{ - this.emit("redraw"); - this.interval = setInterval(()=>{ - this.emit("redraw"); - }, 60000); - }, 60000 - (Date.now() % 60000)); - } - - function hideClkInfo() { - if (this.interval) { - clearInterval(this.interval); - this.interval = null; - } - } - - function createClkInfoItems() { - return (settings.tokenSelected || []).map(token => ({ - name: token, - get: () => retrieveClkInfo(token), - show: showClkInfo, - hide: hideClkInfo, - hasRange: false - })); - } - + const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; + if (!(settings.tokenSelected instanceof Array)) + settings.tokenSelected = []; return { name: "CoinInfo", - items: createClkInfoItems + items: settings.tokenSelected.map(token => { + return { name : token, + get : function() + { + return { + text : token, + img : atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") + } + }, + show : function() { + var self = this; + // Set timeout to align to the next minute + self.interval = setTimeout(function timerTimeout() { + self.emit("redraw"); + // Continue updating every minute + self.interval = setInterval(function intervalCallback() { + self.emit("redraw"); + }, 60000); + }, 60000 - (Date.now() % 60000)); + }, + hide : function() { + if (this.interval) { + clearInterval(this.interval); + this.interval = null; + } + }, + } + }) }; -})(); +}) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 7d5204e89..a0c45112e 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.16", + "version": "0.03.17", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 004d7f0b95993a3fe2a775fab637596fecce847a Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 21:54:06 +0100 Subject: [PATCH 053/188] :construction: try a more modular approach --- apps/coin_info/bak_clkinfo.js | 36 ++++++++++++++ apps/coin_info/clkinfo.js | 90 ++++++++++++++++++++++------------- apps/coin_info/metadata.json | 2 +- 3 files changed, 95 insertions(+), 33 deletions(-) create mode 100644 apps/coin_info/bak_clkinfo.js diff --git a/apps/coin_info/bak_clkinfo.js b/apps/coin_info/bak_clkinfo.js new file mode 100644 index 000000000..a514ce05a --- /dev/null +++ b/apps/coin_info/bak_clkinfo.js @@ -0,0 +1,36 @@ +(function() { + const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; + if (!(settings.tokenSelected instanceof Array)) + settings.tokenSelected = []; + return { + name: "CoinInfo", + items: settings.tokenSelected.map(token => { + return { name : token, + get : function() + { + return { + text : token, + img : atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") + } + }, + show : function() { + var self = this; + // Set timeout to align to the next minute + self.interval = setTimeout(function timerTimeout() { + self.emit("redraw"); + // Continue updating every minute + self.interval = setInterval(function intervalCallback() { + self.emit("redraw"); + }, 60000); + }, 60000 - (Date.now() % 60000)); + }, + hide : function() { + if (this.interval) { + clearInterval(this.interval); + this.interval = null; + } + }, + } + }) + }; +}) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index a514ce05a..73b96a8d8 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,36 +1,62 @@ -(function() { - const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; - if (!(settings.tokenSelected instanceof Array)) +// Reads and validates settings from storage. +function readSettings() { + const settings = require("Storage").readJSON("coin_info.settings.json", 1) || {}; + // Ensure settings.tokenSelected is an array. + if (!(settings.tokenSelected instanceof Array)) { settings.tokenSelected = []; + } + return settings; +} + +// Returns the display content for a given token. +function getCoinInfo(token) { + return { + text: token, + img: atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") + }; +} + +// Starts the redraw timer for a clock info item. The timer aligns the redraw to the next minute. +function showCoinInfo() { + var self = this; + self.interval = setTimeout(function timerTimeout() { + self.emit("redraw"); + self.interval = setInterval(function intervalCallback() { + self.emit("redraw"); + }, 60000); + }, 60000 - (Date.now() % 60000)); +} + +// Stops the redraw timer. +function hideCoinInfo() { + if (this.interval) { + clearInterval(this.interval); + this.interval = null; + } +} + +// Creates a single coin info item for a given token. +function createCoinInfoItem(token) { + return { + name: token, + get: function getCoinInfoItem() { + return getCoinInfo(token); + }, + show: showCoinInfo, + hide: hideCoinInfo, + hasRange: false + }; +} + +// Creates the module object for CoinInfo by reading storage and mapping tokens to clock info items. +function createCoinInfoModule() { + const settings = readSettings(); + const items = settings.tokenSelected.map(createCoinInfoItem); return { name: "CoinInfo", - items: settings.tokenSelected.map(token => { - return { name : token, - get : function() - { - return { - text : token, - img : atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") - } - }, - show : function() { - var self = this; - // Set timeout to align to the next minute - self.interval = setTimeout(function timerTimeout() { - self.emit("redraw"); - // Continue updating every minute - self.interval = setInterval(function intervalCallback() { - self.emit("redraw"); - }, 60000); - }, 60000 - (Date.now() % 60000)); - }, - hide : function() { - if (this.interval) { - clearInterval(this.interval); - this.interval = null; - } - }, - } - }) + items: items }; -}) +} + +// Export the module. +exports = createCoinInfoModule(); diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index a0c45112e..f9d8a979d 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.17", + "version": "0.03.20", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From c6a0b5ffefbd8600b79ab86c03346b7c5309742a Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 22:13:17 +0100 Subject: [PATCH 054/188] :construction: does it have to be module.... --- apps/coin_info/clkinfo.js | 2 +- apps/coin_info/metadata.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 73b96a8d8..e070bd82d 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -59,4 +59,4 @@ function createCoinInfoModule() { } // Export the module. -exports = createCoinInfoModule(); +module.exports = createCoinInfoModule(); diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index f9d8a979d..a0ac5acc8 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.20", + "version": "0.03.21", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From d1e344f3cb2a4b65b4c559f0fe38df37c9de1aa2 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 22:28:52 +0100 Subject: [PATCH 055/188] :construction: let AI run its way --- apps/coin_info/clkinfo.js | 116 +++++++++++++++++++---------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 63 insertions(+), 55 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index e070bd82d..39e6302c7 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,62 +1,70 @@ -// Reads and validates settings from storage. -function readSettings() { - const settings = require("Storage").readJSON("coin_info.settings.json", 1) || {}; - // Ensure settings.tokenSelected is an array. - if (!(settings.tokenSelected instanceof Array)) { - settings.tokenSelected = []; +/* coin_info.js */ +(function() { + // Reads and validates settings from storage. + function readSettings() { + const storage = require("Storage"); + let settings = storage.readJSON("coin_info.settings.json", 1) || {}; + if (!(settings.tokenSelected instanceof Array)) { + settings.tokenSelected = []; + } + return settings; } - return settings; -} -// Returns the display content for a given token. -function getCoinInfo(token) { - return { - text: token, - img: atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") - }; -} + // Returns the display content for a given token. + function getCoinInfo(token) { + return { + text: token, + // Decodes the base-64 image that will be shown. + img: atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") + }; + } -// Starts the redraw timer for a clock info item. The timer aligns the redraw to the next minute. -function showCoinInfo() { - var self = this; - self.interval = setTimeout(function timerTimeout() { - self.emit("redraw"); - self.interval = setInterval(function intervalCallback() { + // Starts the redraw timer for a clock info item. + // The timer is set so that the first redraw happens at the beginning of the next minute, + // and then continues with an interval of 60,000ms (1 minute). + function showCoinInfo() { + var self = this; + self.interval = setTimeout(function timerTimeout() { self.emit("redraw"); - }, 60000); - }, 60000 - (Date.now() % 60000)); -} - -// Stops the redraw timer. -function hideCoinInfo() { - if (this.interval) { - clearInterval(this.interval); - this.interval = null; + self.interval = setInterval(function intervalCallback() { + self.emit("redraw"); + }, 60000); + }, 60000 - (Date.now() % 60000)); } -} -// Creates a single coin info item for a given token. -function createCoinInfoItem(token) { - return { - name: token, - get: function getCoinInfoItem() { - return getCoinInfo(token); - }, - show: showCoinInfo, - hide: hideCoinInfo, - hasRange: false - }; -} + // Stops the redraw timer. + function hideCoinInfo() { + if (this.interval) { + clearInterval(this.interval); + this.interval = null; + } + } -// Creates the module object for CoinInfo by reading storage and mapping tokens to clock info items. -function createCoinInfoModule() { - const settings = readSettings(); - const items = settings.tokenSelected.map(createCoinInfoItem); - return { - name: "CoinInfo", - items: items - }; -} + // Creates a single clock info item for a given token. + function createCoinInfoItem(token) { + return { + name: token, + get: function() { + return getCoinInfo(token); + }, + show: showCoinInfo, + hide: hideCoinInfo, + hasRange: false, + }; + } -// Export the module. -module.exports = createCoinInfoModule(); + // Reads the stored tokens and creates clock info items for them. + function createCoinInfoModule() { + const settings = readSettings(); + const items = settings.tokenSelected.map(createCoinInfoItem); + return { + name: "CoinInfo", + items: items, + }; + } + + // Return the exported object (the module) from the IIFE. + // Using this pattern ensures compatibility with the Espruino environment + // on Bangle.js instead of Node.js-style module.exports. + return createCoinInfoModule(); +})(); diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index a0ac5acc8..476cb85e4 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.21", + "version": "0.03.22", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 917e2908f2264e645b2d225b1fe3962083b143cb Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 22:38:50 +0100 Subject: [PATCH 056/188] :construction: last try for AI --- apps/coin_info/clkinfo.js | 36 ++++++++++++++---------------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 39e6302c7..27bb946c3 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -2,26 +2,23 @@ (function() { // Reads and validates settings from storage. function readSettings() { - const storage = require("Storage"); - let settings = storage.readJSON("coin_info.settings.json", 1) || {}; + var storage = require("Storage"); + var settings = storage.readJSON("coin_info.settings.json", 1) || {}; if (!(settings.tokenSelected instanceof Array)) { settings.tokenSelected = []; } return settings; } - // Returns the display content for a given token. + // Returns the display info (text and image) for a given token. function getCoinInfo(token) { return { text: token, - // Decodes the base-64 image that will be shown. img: atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") }; } - // Starts the redraw timer for a clock info item. - // The timer is set so that the first redraw happens at the beginning of the next minute, - // and then continues with an interval of 60,000ms (1 minute). + // Starts the redraw timer so the info gets updated at the start of each minute. function showCoinInfo() { var self = this; self.interval = setTimeout(function timerTimeout() { @@ -40,7 +37,7 @@ } } - // Creates a single clock info item for a given token. + // Creates a single clock_info item for a given token. function createCoinInfoItem(token) { return { name: token, @@ -49,22 +46,17 @@ }, show: showCoinInfo, hide: hideCoinInfo, - hasRange: false, + hasRange: false }; } - // Reads the stored tokens and creates clock info items for them. - function createCoinInfoModule() { - const settings = readSettings(); - const items = settings.tokenSelected.map(createCoinInfoItem); - return { - name: "CoinInfo", - items: items, - }; - } + // Read settings and create items. + var settings = readSettings(); + var items = settings.tokenSelected.map(createCoinInfoItem); - // Return the exported object (the module) from the IIFE. - // Using this pattern ensures compatibility with the Espruino environment - // on Bangle.js instead of Node.js-style module.exports. - return createCoinInfoModule(); + // Return the module object, exactly as the clock_info app expects. + return { + name: "CoinInfo", + items: items + }; })(); diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 476cb85e4..def5f610d 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.22", + "version": "0.03.23", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 93fc758c5eb1af27e884e96a22fbf6cbc97da90f Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 22:47:51 +0100 Subject: [PATCH 057/188] :construction: last try for AI --- apps/coin_info/clkinfo.js | 36 ++++++++++++++++++++++-------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 27bb946c3..39e6302c7 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -2,23 +2,26 @@ (function() { // Reads and validates settings from storage. function readSettings() { - var storage = require("Storage"); - var settings = storage.readJSON("coin_info.settings.json", 1) || {}; + const storage = require("Storage"); + let settings = storage.readJSON("coin_info.settings.json", 1) || {}; if (!(settings.tokenSelected instanceof Array)) { settings.tokenSelected = []; } return settings; } - // Returns the display info (text and image) for a given token. + // Returns the display content for a given token. function getCoinInfo(token) { return { text: token, + // Decodes the base-64 image that will be shown. img: atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") }; } - // Starts the redraw timer so the info gets updated at the start of each minute. + // Starts the redraw timer for a clock info item. + // The timer is set so that the first redraw happens at the beginning of the next minute, + // and then continues with an interval of 60,000ms (1 minute). function showCoinInfo() { var self = this; self.interval = setTimeout(function timerTimeout() { @@ -37,7 +40,7 @@ } } - // Creates a single clock_info item for a given token. + // Creates a single clock info item for a given token. function createCoinInfoItem(token) { return { name: token, @@ -46,17 +49,22 @@ }, show: showCoinInfo, hide: hideCoinInfo, - hasRange: false + hasRange: false, }; } - // Read settings and create items. - var settings = readSettings(); - var items = settings.tokenSelected.map(createCoinInfoItem); + // Reads the stored tokens and creates clock info items for them. + function createCoinInfoModule() { + const settings = readSettings(); + const items = settings.tokenSelected.map(createCoinInfoItem); + return { + name: "CoinInfo", + items: items, + }; + } - // Return the module object, exactly as the clock_info app expects. - return { - name: "CoinInfo", - items: items - }; + // Return the exported object (the module) from the IIFE. + // Using this pattern ensures compatibility with the Espruino environment + // on Bangle.js instead of Node.js-style module.exports. + return createCoinInfoModule(); })(); diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index def5f610d..0499f3aa3 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.23", + "version": "0.03.24", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 0c12c655229ae84e69bf54bcea9d23143b312ef8 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 23:38:31 +0100 Subject: [PATCH 058/188] :construction: anonymous functions it is --- apps/coin_info/bak_clkinfo.js | 36 ------------ apps/coin_info/clkinfo.js | 104 ++++++++++++---------------------- apps/coin_info/metadata.json | 2 +- 3 files changed, 36 insertions(+), 106 deletions(-) delete mode 100644 apps/coin_info/bak_clkinfo.js diff --git a/apps/coin_info/bak_clkinfo.js b/apps/coin_info/bak_clkinfo.js deleted file mode 100644 index a514ce05a..000000000 --- a/apps/coin_info/bak_clkinfo.js +++ /dev/null @@ -1,36 +0,0 @@ -(function() { - const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; - if (!(settings.tokenSelected instanceof Array)) - settings.tokenSelected = []; - return { - name: "CoinInfo", - items: settings.tokenSelected.map(token => { - return { name : token, - get : function() - { - return { - text : token, - img : atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") - } - }, - show : function() { - var self = this; - // Set timeout to align to the next minute - self.interval = setTimeout(function timerTimeout() { - self.emit("redraw"); - // Continue updating every minute - self.interval = setInterval(function intervalCallback() { - self.emit("redraw"); - }, 60000); - }, 60000 - (Date.now() % 60000)); - }, - hide : function() { - if (this.interval) { - clearInterval(this.interval); - this.interval = null; - } - }, - } - }) - }; -}) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 39e6302c7..a514ce05a 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,70 +1,36 @@ -/* coin_info.js */ (function() { - // Reads and validates settings from storage. - function readSettings() { - const storage = require("Storage"); - let settings = storage.readJSON("coin_info.settings.json", 1) || {}; - if (!(settings.tokenSelected instanceof Array)) { - settings.tokenSelected = []; - } - return settings; - } - - // Returns the display content for a given token. - function getCoinInfo(token) { - return { - text: token, - // Decodes the base-64 image that will be shown. - img: atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") - }; - } - - // Starts the redraw timer for a clock info item. - // The timer is set so that the first redraw happens at the beginning of the next minute, - // and then continues with an interval of 60,000ms (1 minute). - function showCoinInfo() { - var self = this; - self.interval = setTimeout(function timerTimeout() { - self.emit("redraw"); - self.interval = setInterval(function intervalCallback() { - self.emit("redraw"); - }, 60000); - }, 60000 - (Date.now() % 60000)); - } - - // Stops the redraw timer. - function hideCoinInfo() { - if (this.interval) { - clearInterval(this.interval); - this.interval = null; - } - } - - // Creates a single clock info item for a given token. - function createCoinInfoItem(token) { - return { - name: token, - get: function() { - return getCoinInfo(token); - }, - show: showCoinInfo, - hide: hideCoinInfo, - hasRange: false, - }; - } - - // Reads the stored tokens and creates clock info items for them. - function createCoinInfoModule() { - const settings = readSettings(); - const items = settings.tokenSelected.map(createCoinInfoItem); - return { - name: "CoinInfo", - items: items, - }; - } - - // Return the exported object (the module) from the IIFE. - // Using this pattern ensures compatibility with the Espruino environment - // on Bangle.js instead of Node.js-style module.exports. - return createCoinInfoModule(); -})(); + const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; + if (!(settings.tokenSelected instanceof Array)) + settings.tokenSelected = []; + return { + name: "CoinInfo", + items: settings.tokenSelected.map(token => { + return { name : token, + get : function() + { + return { + text : token, + img : atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") + } + }, + show : function() { + var self = this; + // Set timeout to align to the next minute + self.interval = setTimeout(function timerTimeout() { + self.emit("redraw"); + // Continue updating every minute + self.interval = setInterval(function intervalCallback() { + self.emit("redraw"); + }, 60000); + }, 60000 - (Date.now() % 60000)); + }, + hide : function() { + if (this.interval) { + clearInterval(this.interval); + this.interval = null; + } + }, + } + }) + }; +}) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 0499f3aa3..7a1a3b1e6 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.24", + "version": "0.03.25", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 9330250ed977a795236bf7f851218efc70f47c6b Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 28 Feb 2025 23:57:27 +0100 Subject: [PATCH 059/188] :construction: extract getting info for token --- apps/coin_info/clkinfo.js | 21 +++++++++++++-------- apps/coin_info/metadata.json | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index a514ce05a..99e2dc91f 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,3 +1,14 @@ +const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); // (full base64 string here) + +function getTokenInfo(token) { + return function() { + return { + text: token, + img: COIN_ICON + }; + }; +} + (function() { const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; if (!(settings.tokenSelected instanceof Array)) @@ -6,13 +17,7 @@ name: "CoinInfo", items: settings.tokenSelected.map(token => { return { name : token, - get : function() - { - return { - text : token, - img : atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") - } - }, + get : getTokenInfo(token), show : function() { var self = this; // Set timeout to align to the next minute @@ -33,4 +38,4 @@ } }) }; -}) +})() diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 7a1a3b1e6..f9ba0ddcc 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.25", + "version": "0.03.26", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From ef6c04b1cca90125d3e41381be4a70231c076412 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 1 Mar 2025 00:06:32 +0100 Subject: [PATCH 060/188] :construction: at least make icon a constant --- apps/coin_info/clkinfo.js | 23 ++++++++++------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 99e2dc91f..bf61e20f2 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,15 +1,6 @@ -const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); // (full base64 string here) - -function getTokenInfo(token) { - return function() { - return { - text: token, - img: COIN_ICON - }; - }; -} - (function() { + const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); // (full base64 string here) + const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; if (!(settings.tokenSelected instanceof Array)) settings.tokenSelected = []; @@ -17,7 +8,13 @@ function getTokenInfo(token) { name: "CoinInfo", items: settings.tokenSelected.map(token => { return { name : token, - get : getTokenInfo(token), + get : function() + { + return { + text : token, + img : COIN_ICON + } + }, show : function() { var self = this; // Set timeout to align to the next minute @@ -38,4 +35,4 @@ function getTokenInfo(token) { } }) }; -})() +}) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index f9ba0ddcc..1541b1ea2 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.26", + "version": "0.03.28", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 5ebc00f311fd6fce4722bcdcc6d94e833d8fbaa3 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 2 Mar 2025 20:07:24 +0100 Subject: [PATCH 061/188] :construction: stub for CoinmarketCap lib --- apps/coin_info/libCmC.js | 22 ++++++++++++++++++++++ apps/coin_info/metadata.json | 5 +++-- 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 apps/coin_info/libCmC.js diff --git a/apps/coin_info/libCmC.js b/apps/coin_info/libCmC.js new file mode 100644 index 000000000..03a097834 --- /dev/null +++ b/apps/coin_info/libCmC.js @@ -0,0 +1,22 @@ +exports.getQuoteLatest = function(slug) { + // Bangle.http("https://pur3.co.uk/hello.txt").then(data=>{ + // console.log("Got ",data); + // // actual response is in data.resp + // }); + // ------------- + // Prints: + //Got { + // "t": "http", + // "id": "89875941444", + // "resp": "Hello World!\n" + // } + + // return Bangle.http(serverUrl, { + // method: 'GET', + // headers: { + // 'Authorization': `Basic ${credentials}` + // } + // }); + + return { result: "yo"}; +} diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 1541b1ea2..a5c34a080 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.28", + "version": "0.03.30", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", @@ -16,6 +16,7 @@ {"name":"coin_info.app.js","url":"app.js"}, {"name":"coin_info.clkinfo.js","url":"clkinfo.js"}, {"name":"coin_info.settings.js","url":"settings.js"}, - {"name":"coin_info.img","url":"app-icon.js","evaluate":true} + {"name":"coin_info.img","url":"app-icon.js","evaluate":true}, + {"name":"coin_info.libCmC.js","url":"libCmC.js"} ] } \ No newline at end of file From 8a9535955c799bb04a2f60a08f10e27ea1ffe655 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 2 Mar 2025 21:19:20 +0100 Subject: [PATCH 062/188] :construction: first REST call to CmC --- apps/coin_info/ChangeLog | 3 ++- apps/coin_info/README.md | 5 ++++- apps/coin_info/clkinfo.js | 20 ++++++++++++++++---- apps/coin_info/libCmC.js | 17 ++++++++--------- apps/coin_info/metadata.json | 2 +- 5 files changed, 31 insertions(+), 16 deletions(-) diff --git a/apps/coin_info/ChangeLog b/apps/coin_info/ChangeLog index e85d911f6..6ed1d1c3d 100644 --- a/apps/coin_info/ChangeLog +++ b/apps/coin_info/ChangeLog @@ -1 +1,2 @@ -0.03: Initial creation \ No newline at end of file +0.03: Initial creation +0.04: Using GB http for Coinmarketcap requests \ No newline at end of file diff --git a/apps/coin_info/README.md b/apps/coin_info/README.md index 891db395f..38e1655f0 100644 --- a/apps/coin_info/README.md +++ b/apps/coin_info/README.md @@ -4,4 +4,7 @@ Crypto-Coins Infos with the help of the Coinmarketcap API ## Creator -Martin Zwigl \ No newline at end of file +Martin Zwigl + +## Reminder for last working +- ef6c04b1cca90125d3e41381be4a70231c076412 \ No newline at end of file diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index bf61e20f2..66c088f05 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -2,6 +2,9 @@ const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); // (full base64 string here) const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; + const db = require("Storage").readJSON("coin_info.cmc_key.json",1)||{}; + const coinInfoLib = require("coin_info"); + if (!(settings.tokenSelected instanceof Array)) settings.tokenSelected = []; return { @@ -10,10 +13,19 @@ return { name : token, get : function() { - return { - text : token, - img : COIN_ICON - } + coinInfoLib.getCmCQuoteLatest(db.apikey, token) + .then((cmcResult) => { + return { + text : cmcResult.data["1"].symbol, + img : COIN_ICON + } + }) + .catch(err => { + return { + text : err, + img : COIN_ICON + } + }); }, show : function() { var self = this; diff --git a/apps/coin_info/libCmC.js b/apps/coin_info/libCmC.js index 03a097834..76f2e1b07 100644 --- a/apps/coin_info/libCmC.js +++ b/apps/coin_info/libCmC.js @@ -1,4 +1,4 @@ -exports.getQuoteLatest = function(slug) { +exports.getCmCQuoteLatest = function(apiKey, slug) { // Bangle.http("https://pur3.co.uk/hello.txt").then(data=>{ // console.log("Got ",data); // // actual response is in data.resp @@ -11,12 +11,11 @@ exports.getQuoteLatest = function(slug) { // "resp": "Hello World!\n" // } - // return Bangle.http(serverUrl, { - // method: 'GET', - // headers: { - // 'Authorization': `Basic ${credentials}` - // } - // }); - - return { result: "yo"}; + const url = `https://pro-api.coinmarketcap.com//v2/cryptocurrency/quotes/latest?slug=${slug}`; + return Bangle.http(url, { + method: 'GET', + headers: { + 'CMC_PRO_API_KEY': apiKey + } + }).then(data => data.resp); } diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index a5c34a080..31ba806fd 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.03.30", + "version": "0.04", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 8b2af7e6a7a220249449d07c3df8aa69b1002a9a Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 2 Mar 2025 21:34:14 +0100 Subject: [PATCH 063/188] :construction: forget about lib --- apps/coin_info/clkinfo.js | 12 +++++++++--- apps/coin_info/metadata.json | 3 +-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 66c088f05..25f3937af 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -3,7 +3,6 @@ const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; const db = require("Storage").readJSON("coin_info.cmc_key.json",1)||{}; - const coinInfoLib = require("coin_info"); if (!(settings.tokenSelected instanceof Array)) settings.tokenSelected = []; @@ -13,10 +12,17 @@ return { name : token, get : function() { - coinInfoLib.getCmCQuoteLatest(db.apikey, token) + const url = `https://pro-api.coinmarketcap.com//v2/cryptocurrency/quotes/latest?slug=${token}`; + Bangle + .http(url, { + method: 'GET', + headers: { + 'CMC_PRO_API_KEY': db.apiKey + } + }) .then((cmcResult) => { return { - text : cmcResult.data["1"].symbol, + text : cmcResult.resp.data["1"].symbol, img : COIN_ICON } }) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 31ba806fd..14d84f2ca 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04", + "version": "0.04.1", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", @@ -17,6 +17,5 @@ {"name":"coin_info.clkinfo.js","url":"clkinfo.js"}, {"name":"coin_info.settings.js","url":"settings.js"}, {"name":"coin_info.img","url":"app-icon.js","evaluate":true}, - {"name":"coin_info.libCmC.js","url":"libCmC.js"} ] } \ No newline at end of file From e22cc297fe49cc251a196f9ba0f76e0368fa1a6c Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 2 Mar 2025 21:42:25 +0100 Subject: [PATCH 064/188] :construction::pencil2: really? a colon? --- apps/coin_info/metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 14d84f2ca..3e39ef64a 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.1", + "version": "0.04.2", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", @@ -16,6 +16,6 @@ {"name":"coin_info.app.js","url":"app.js"}, {"name":"coin_info.clkinfo.js","url":"clkinfo.js"}, {"name":"coin_info.settings.js","url":"settings.js"}, - {"name":"coin_info.img","url":"app-icon.js","evaluate":true}, + {"name":"coin_info.img","url":"app-icon.js","evaluate":true} ] } \ No newline at end of file From c4bc8c0b740cd4caf90cb99b9a5a14f569dde651 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 2 Mar 2025 21:53:44 +0100 Subject: [PATCH 065/188] :construction::pencil2: remove / --- apps/coin_info/clkinfo.js | 4 ++-- apps/coin_info/metadata.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 25f3937af..b7230000f 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -12,7 +12,7 @@ return { name : token, get : function() { - const url = `https://pro-api.coinmarketcap.com//v2/cryptocurrency/quotes/latest?slug=${token}`; + const url = `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`; Bangle .http(url, { method: 'GET', @@ -28,7 +28,7 @@ }) .catch(err => { return { - text : err, + text : `ERROR: ${err}`, img : COIN_ICON } }); diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 3e39ef64a..7ac6af0ee 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.2", + "version": "0.04.3", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 3532f2e5b9a27be6101e8bb80471dec20af74684 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 2 Mar 2025 22:23:48 +0100 Subject: [PATCH 066/188] :construction: Improve load --- apps/coin_info/clkinfo.js | 88 ++++++++++++++++++------------------ apps/coin_info/metadata.json | 2 +- 2 files changed, 44 insertions(+), 46 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index b7230000f..b86c17672 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,56 +1,54 @@ (function() { const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); // (full base64 string here) - const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; const db = require("Storage").readJSON("coin_info.cmc_key.json",1)||{}; - if (!(settings.tokenSelected instanceof Array)) - settings.tokenSelected = []; return { name: "CoinInfo", items: settings.tokenSelected.map(token => { - return { name : token, - get : function() - { - const url = `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`; - Bangle - .http(url, { - method: 'GET', - headers: { - 'CMC_PRO_API_KEY': db.apiKey - } - }) - .then((cmcResult) => { - return { - text : cmcResult.resp.data["1"].symbol, - img : COIN_ICON - } - }) - .catch(err => { - return { - text : `ERROR: ${err}`, - img : COIN_ICON - } - }); - }, - show : function() { - var self = this; - // Set timeout to align to the next minute - self.interval = setTimeout(function timerTimeout() { - self.emit("redraw"); - // Continue updating every minute - self.interval = setInterval(function intervalCallback() { - self.emit("redraw"); - }, 60000); - }, 60000 - (Date.now() % 60000)); - }, - hide : function() { - if (this.interval) { - clearInterval(this.interval); - this.interval = null; - } - }, + let currentValue = {text: "Load...", img: COIN_ICON}; + let nextUpdate = 0; + + function update() { + return Bangle.http( + `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`, + {headers: {'CMC_PRO_API_KEY': db.apiKey}} + ).then(res => { + currentValue = { + text: `${res.data["1"].symbol}\n$${res.data["1"].quote.USD.price.toFixed(2)}`, + }; + nextUpdate = Date.now() + 3600000; + }).catch(e => { + currentValue = {text: `Error: ${e}`, img: COIN_ICON}; + nextUpdate = Date.now() + 300000; // Retry in 5 minutes on error + }).finally(() => { + Bangle.drawWidgets(); + }); } + + function checkUpdate() { + if(Date.now() > nextUpdate) { + return update(); + } + return Promise.resolve(); + } + + return { + name: token, + get: () => { + checkUpdate().then(); // Explicit promise handling + return currentValue; + }, + show: function() { + update().then(); // Initial fetch + this.interval = setInterval(() => { + checkUpdate().then(() => this.emit("redraw")); + }, 60000); + }, + hide: function() { + clearInterval(this.interval); + } + }; }) }; -}) +})(); diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 7ac6af0ee..621f29b17 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.3", + "version": "0.04.4", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 0662017fe7829201d205610fd31855624c41f4f6 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 2 Mar 2025 22:30:33 +0100 Subject: [PATCH 067/188] :construction: ...and anonymous again --- apps/coin_info/clkinfo.js | 50 +++++++++++++++++------------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 24 insertions(+), 28 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index b86c17672..8815e0e42 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -7,43 +7,38 @@ name: "CoinInfo", items: settings.tokenSelected.map(token => { let currentValue = {text: "Load...", img: COIN_ICON}; - let nextUpdate = 0; + let nextUpdate = Date.now() + 3600000; - function update() { - return Bangle.http( - `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`, - {headers: {'CMC_PRO_API_KEY': db.apiKey}} - ).then(res => { - currentValue = { - text: `${res.data["1"].symbol}\n$${res.data["1"].quote.USD.price.toFixed(2)}`, - }; - nextUpdate = Date.now() + 3600000; - }).catch(e => { - currentValue = {text: `Error: ${e}`, img: COIN_ICON}; - nextUpdate = Date.now() + 300000; // Retry in 5 minutes on error - }).finally(() => { - Bangle.drawWidgets(); - }); - } + const update = () => Bangle.http( + `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`, + {headers: {'CMC_PRO_API_KEY': db.apiKey}} + ).then(res => { + currentValue = { + text: `${res.data["1"].symbol}\n$${res.data["1"].quote.USD.price.toFixed(2)}`, + }; + nextUpdate = Date.now() + 3600000; + return true; + }).catch(e => { + currentValue = {text: `Error: ${e}`, img:COIN_ICON}; + nextUpdate = Date.now() + 300000; + return false; + }).finally(() => Bangle.drawWidgets()); - function checkUpdate() { - if(Date.now() > nextUpdate) { - return update(); - } - return Promise.resolve(); - } + const checkUpdate = () => (Date.now() > nextUpdate) + ? update() + : Promise.resolve(); return { name: token, get: () => { - checkUpdate().then(); // Explicit promise handling + checkUpdate().then(); // Explicit empty handler return currentValue; }, show: function() { update().then(); // Initial fetch - this.interval = setInterval(() => { - checkUpdate().then(() => this.emit("redraw")); - }, 60000); + this.interval = setInterval(() => checkUpdate().then( + () => this.emit("redraw") + ), 60000); }, hide: function() { clearInterval(this.interval); @@ -52,3 +47,4 @@ }) }; })(); + diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 621f29b17..82127868b 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.4", + "version": "0.04.5", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 539c839c26001aecf2860c21955274bcbf3878c6 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 2 Mar 2025 22:42:58 +0100 Subject: [PATCH 068/188] Extend infrastructure --- apps/coin_info/metadata.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 82127868b..afdbb7dd4 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,10 +1,12 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.5", + "version": "0.04.6", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", + "dependencies": {"clock_info":"module"}, + "provides_modules": ["coin_info"], "supports" : ["BANGLEJS2"], "interface": "interface.html", "readme": "README.md", From 35397b96843211614281d958d84e0f95bb2d25cb Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 2 Mar 2025 22:51:39 +0100 Subject: [PATCH 069/188] :construction: talk even more to AI --- apps/coin_info/clkinfo.js | 45 ++++++++++++++++-------------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 8815e0e42..e7b497c5e 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -7,44 +7,39 @@ name: "CoinInfo", items: settings.tokenSelected.map(token => { let currentValue = {text: "Load...", img: COIN_ICON}; - let nextUpdate = Date.now() + 3600000; + let nextUpdate = 0; - const update = () => Bangle.http( - `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`, - {headers: {'CMC_PRO_API_KEY': db.apiKey}} - ).then(res => { - currentValue = { - text: `${res.data["1"].symbol}\n$${res.data["1"].quote.USD.price.toFixed(2)}`, - }; - nextUpdate = Date.now() + 3600000; - return true; - }).catch(e => { - currentValue = {text: `Error: ${e}`, img:COIN_ICON}; - nextUpdate = Date.now() + 300000; - return false; - }).finally(() => Bangle.drawWidgets()); - - const checkUpdate = () => (Date.now() > nextUpdate) - ? update() - : Promise.resolve(); + function update() { + return Bangle.http( + `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`, + {headers: {'CMC_PRO_API_KEY': db.apiKey}} + ).then(res => { + currentValue = { + text: `${res.data["1"].symbol}\n $${res.data["1"].quote.USD.price.toFixed(2)}` + }; + nextUpdate = Date.now() + 3600000; + }).catch(e => { + currentValue = {text: `Error: ${e}`, img:COIN_ICON}; + nextUpdate = Date.now() + 300000; + }).finally(Bangle.drawWidgets); + } return { name: token, get: () => { - checkUpdate().then(); // Explicit empty handler + if(Date.now() > nextUpdate) update(); return currentValue; }, show: function() { - update().then(); // Initial fetch - this.interval = setInterval(() => checkUpdate().then( - () => this.emit("redraw") - ), 60000); + update(); + this.interval = setInterval(update, 3600000); }, hide: function() { - clearInterval(this.interval); + if(this.interval) clearInterval(this.interval); } }; }) }; })(); + diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index afdbb7dd4..f639d67ee 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.6", + "version": "0.04.7", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 2f18ea26a8646aaf5d519188a117317b1e7e7f9d Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 2 Mar 2025 23:12:53 +0100 Subject: [PATCH 070/188] :construction: create a module for clock_info --- apps/coin_info/clkinfo.js | 81 ++++++++++++++++++++---------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 45 insertions(+), 38 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index e7b497c5e..d9268587d 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,45 +1,52 @@ -(function() { +(function() { // IIFE wrapper required const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); // (full base64 string here) const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; const db = require("Storage").readJSON("coin_info.cmc_key.json",1)||{}; - return { - name: "CoinInfo", - items: settings.tokenSelected.map(token => { - let currentValue = {text: "Load...", img: COIN_ICON}; - let nextUpdate = 0; - - function update() { - return Bangle.http( - `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`, - {headers: {'CMC_PRO_API_KEY': db.apiKey}} - ).then(res => { - currentValue = { - text: `${res.data["1"].symbol}\n $${res.data["1"].quote.USD.price.toFixed(2)}` - }; - nextUpdate = Date.now() + 3600000; - }).catch(e => { - currentValue = {text: `Error: ${e}`, img:COIN_ICON}; - nextUpdate = Date.now() + 300000; - }).finally(Bangle.drawWidgets); - } - - return { - name: token, - get: () => { - if(Date.now() > nextUpdate) update(); - return currentValue; - }, - show: function() { - update(); - this.interval = setInterval(update, 3600000); - }, - hide: function() { - if(this.interval) clearInterval(this.interval); - } - }; - }) + const module = { + name: "Coin Price", + items: [] }; + + settings.tokenSelected.forEach(token => { + let current = {text:"-", img: COIN_ICON}; + let timer = null; + let lastUpdate = 0; + + function update() { + Bangle.http( + `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`, + {headers: {'CMC_PRO_API_KEY': db.apiKey}} + ).then(res => { + // current.text = `${res.data["1"].symbol}\n$${res.data["1"].quote.USD.price.toFixed(2)}`; + current.text = `${res.data["1"].symbol}`; + lastUpdate = Date.now(); + }).catch(err => { + current.text = `Err: ${err}`; + lastUpdate = Date.now() + 300000; // Retry in 5min + }).finally(() => Bangle.drawWidgets()); + } + + module.items.push({ + name: token, + get: () => current, + show: function() { + if(!timer) { + update(); + timer = setInterval(update, 3600000); // 60min + } + }, + hide: function() { + if(timer) { + clearInterval(timer); + timer = null; + } + } + }); + }); + + return module; })(); + diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index f639d67ee..8ebe31391 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.7", + "version": "0.04.8", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 536aeb510d788d36f66c189cd377b17eb75dcdc8 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 2 Mar 2025 23:22:17 +0100 Subject: [PATCH 071/188] :construction: back to basic --- apps/coin_info/clkinfo.js | 72 +++++++++++++----------------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 27 insertions(+), 47 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index d9268587d..28836ae49 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,52 +1,32 @@ -(function() { // IIFE wrapper required - const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); // (full base64 string here) +(function() { + const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; - const db = require("Storage").readJSON("coin_info.cmc_key.json",1)||{}; + const apiKey = (require("Storage").readJSON("coin_info.cmc_key.json",1)||{}).apiKey||""; - const module = { - name: "Coin Price", - items: [] - }; + return { + name: "CoinInfo", + items: (settings.tokenSelected||[]).map(token => { + let current = {text:"-", img:COIN_ICON}; + let tmr; - settings.tokenSelected.forEach(token => { - let current = {text:"-", img: COIN_ICON}; - let timer = null; - let lastUpdate = 0; + return { + name: token, + get: () => current, + show: function() { + const update = () => Bangle.http( + `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`, + {headers: {'CMC_PRO_API_KEY': apiKey}} + ).then(r => { + // current.text = `${r.data["1"].symbol} $${r.data["1"].quote.USD.price.toFixed(2)}`; + current.text = `${r.data["1"].symbol}`; + Bangle.drawWidgets(); + }).catch(e => current.text = `Err:${e}`); - function update() { - Bangle.http( - `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`, - {headers: {'CMC_PRO_API_KEY': db.apiKey}} - ).then(res => { - // current.text = `${res.data["1"].symbol}\n$${res.data["1"].quote.USD.price.toFixed(2)}`; - current.text = `${res.data["1"].symbol}`; - lastUpdate = Date.now(); - }).catch(err => { - current.text = `Err: ${err}`; - lastUpdate = Date.now() + 300000; // Retry in 5min - }).finally(() => Bangle.drawWidgets()); - } - - module.items.push({ - name: token, - get: () => current, - show: function() { - if(!timer) { update(); - timer = setInterval(update, 3600000); // 60min - } - }, - hide: function() { - if(timer) { - clearInterval(timer); - timer = null; - } - } - }); - }); - - return module; + tmr = setInterval(update, 3600000); + }, + hide: () => tmr && clearInterval(tmr) + }; + }) + }; })(); - - - diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 8ebe31391..93652667e 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.8", + "version": "0.04.9", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 9a66a57c33f0a4e611e99973bc5d77d44ba68489 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 2 Mar 2025 23:38:01 +0100 Subject: [PATCH 072/188] Revert ":construction::pencil2: really? a colon?" This reverts commit e22cc297fe49cc251a196f9ba0f76e0368fa1a6c. --- apps/coin_info/clkinfo.js | 74 ++++++++++++++++++++++++------------ apps/coin_info/metadata.json | 4 +- 2 files changed, 50 insertions(+), 28 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 28836ae49..25f3937af 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,32 +1,56 @@ (function() { - const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); - const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; - const apiKey = (require("Storage").readJSON("coin_info.cmc_key.json",1)||{}).apiKey||""; + const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); // (full base64 string here) + const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; + const db = require("Storage").readJSON("coin_info.cmc_key.json",1)||{}; + + if (!(settings.tokenSelected instanceof Array)) + settings.tokenSelected = []; return { name: "CoinInfo", - items: (settings.tokenSelected||[]).map(token => { - let current = {text:"-", img:COIN_ICON}; - let tmr; - - return { - name: token, - get: () => current, - show: function() { - const update = () => Bangle.http( - `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`, - {headers: {'CMC_PRO_API_KEY': apiKey}} - ).then(r => { - // current.text = `${r.data["1"].symbol} $${r.data["1"].quote.USD.price.toFixed(2)}`; - current.text = `${r.data["1"].symbol}`; - Bangle.drawWidgets(); - }).catch(e => current.text = `Err:${e}`); - - update(); - tmr = setInterval(update, 3600000); + items: settings.tokenSelected.map(token => { + return { name : token, + get : function() + { + const url = `https://pro-api.coinmarketcap.com//v2/cryptocurrency/quotes/latest?slug=${token}`; + Bangle + .http(url, { + method: 'GET', + headers: { + 'CMC_PRO_API_KEY': db.apiKey + } + }) + .then((cmcResult) => { + return { + text : cmcResult.resp.data["1"].symbol, + img : COIN_ICON + } + }) + .catch(err => { + return { + text : err, + img : COIN_ICON + } + }); }, - hide: () => tmr && clearInterval(tmr) - }; + show : function() { + var self = this; + // Set timeout to align to the next minute + self.interval = setTimeout(function timerTimeout() { + self.emit("redraw"); + // Continue updating every minute + self.interval = setInterval(function intervalCallback() { + self.emit("redraw"); + }, 60000); + }, 60000 - (Date.now() % 60000)); + }, + hide : function() { + if (this.interval) { + clearInterval(this.interval); + this.interval = null; + } + }, + } }) }; -})(); +}) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 93652667e..6c64df7eb 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,12 +1,10 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.9", + "version": "0.04.10", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", - "dependencies": {"clock_info":"module"}, - "provides_modules": ["coin_info"], "supports" : ["BANGLEJS2"], "interface": "interface.html", "readme": "README.md", From cc93a573181b58b773f1c82490193fd63eb07020 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sun, 2 Mar 2025 23:47:52 +0100 Subject: [PATCH 073/188] :construction: every hour; correct return --- apps/coin_info/clkinfo.js | 28 ++++++++++++---------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 25f3937af..5dc9932d1 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -13,36 +13,32 @@ get : function() { const url = `https://pro-api.coinmarketcap.com//v2/cryptocurrency/quotes/latest?slug=${token}`; - Bangle + return Bangle .http(url, { method: 'GET', headers: { 'CMC_PRO_API_KEY': db.apiKey } }) - .then((cmcResult) => { - return { - text : cmcResult.resp.data["1"].symbol, - img : COIN_ICON - } - }) - .catch(err => { - return { - text : err, - img : COIN_ICON - } - }); + .then(cmcResult => ({ + text: cmcResult.data.data["1"].symbol, // Fixed data path + img: COIN_ICON + })) + .catch(err => ({ + text: err.toString(), + img: COIN_ICON + })); }, show : function() { var self = this; // Set timeout to align to the next minute self.interval = setTimeout(function timerTimeout() { self.emit("redraw"); - // Continue updating every minute + // Continue updating every hour self.interval = setInterval(function intervalCallback() { self.emit("redraw"); - }, 60000); - }, 60000 - (Date.now() % 60000)); + }, 3600000); + }, 3600000 - (Date.now() % 3600000)); }, hide : function() { if (this.interval) { diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 6c64df7eb..87e543829 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.10", + "version": "0.04.11", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 4b76fa001337bfbfadabbf0039c2755d1f7cf10a Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Wed, 5 Mar 2025 20:27:14 +0100 Subject: [PATCH 074/188] :pencil2::bug: --- apps/coin_info/clkinfo.js | 5 +++-- apps/coin_info/metadata.json | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 5dc9932d1..d87d35e64 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -12,12 +12,13 @@ return { name : token, get : function() { - const url = `https://pro-api.coinmarketcap.com//v2/cryptocurrency/quotes/latest?slug=${token}`; + const url = `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`; + // const url = `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=bitcoin`; return Bangle .http(url, { method: 'GET', headers: { - 'CMC_PRO_API_KEY': db.apiKey + 'CMC_PRO_API_KEY': db.apikey } }) .then(cmcResult => ({ diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 87e543829..df0acc0a3 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.11", + "version": "0.04.13", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 34b9b8d9e2458dc53a4ee01d7272b02084d7a9ec Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Wed, 5 Mar 2025 22:10:41 +0100 Subject: [PATCH 075/188] :pencil2::bug: --- apps/coin_info/clkinfo.js | 2 +- apps/coin_info/metadata.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index d87d35e64..8bb865562 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -22,7 +22,7 @@ } }) .then(cmcResult => ({ - text: cmcResult.data.data["1"].symbol, // Fixed data path + text: cmcResult.resp.data["1"].symbol, // Fixed data path img: COIN_ICON })) .catch(err => ({ diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index df0acc0a3..caa0f4412 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.13", + "version": "0.04.14", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 150725707da556bc72035f9b4b7b116a670ffed4 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Wed, 5 Mar 2025 22:24:58 +0100 Subject: [PATCH 076/188] test with fixed value --- apps/coin_info/clkinfo.js | 4 ++-- apps/coin_info/metadata.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 8bb865562..a1cd5869f 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -12,8 +12,8 @@ return { name : token, get : function() { - const url = `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`; - // const url = `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=bitcoin`; + // const url = `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`; + const url = `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=bitcoin`; return Bangle .http(url, { method: 'GET', diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index caa0f4412..fed106faf 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.14", + "version": "0.04.15", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From fc7780d8d27367333245b70bede9a15e49f92253 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Wed, 5 Mar 2025 23:01:22 +0100 Subject: [PATCH 077/188] forgot to parse maybe --- apps/coin_info/clkinfo.js | 2 +- apps/coin_info/metadata.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index a1cd5869f..bc4a06cdc 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -22,7 +22,7 @@ } }) .then(cmcResult => ({ - text: cmcResult.resp.data["1"].symbol, // Fixed data path + text: JSON.parse(cmcResult.resp).data["1"].symbol, // Fixed data path img: COIN_ICON })) .catch(err => ({ diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index fed106faf..3e51308c5 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.15", + "version": "0.04.16", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 0595427d3b38a98f5a4808213a815b3af2fe39e1 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Wed, 5 Mar 2025 23:19:09 +0100 Subject: [PATCH 078/188] Provoke redraw --- apps/coin_info/clkinfo.js | 3 +++ apps/coin_info/metadata.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index bc4a06cdc..eb182e5e7 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -47,6 +47,9 @@ this.interval = null; } }, + run: function () { + this.emit("redraw"); + } } }) }; diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 3e51308c5..b3946eebb 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.16", + "version": "0.04.17", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 00f4b1436c4441b1c7b0209d3a4d580d3fc8d035 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Fri, 7 Mar 2025 23:50:40 +0100 Subject: [PATCH 079/188] :construction: maybe Coinmarketcap has CORS protection; trying free Binance API --- apps/coin_info/clkinfo.js | 14 ++++++++------ apps/coin_info/metadata.json | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index eb182e5e7..36ab2b684 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -13,16 +13,18 @@ get : function() { // const url = `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`; - const url = `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=bitcoin`; + // const url = `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=bitcoin`; + const url = `https://api.binance.com/api/v3/ticker/24hr?symbol=BTCUSDT`; return Bangle .http(url, { - method: 'GET', - headers: { - 'CMC_PRO_API_KEY': db.apikey - } + method: 'GET' + // ,headers: { + // 'CMC_PRO_API_KEY': db.apikey + // } }) .then(cmcResult => ({ - text: JSON.parse(cmcResult.resp).data["1"].symbol, // Fixed data path + // text: JSON.parse(cmcResult.resp).data["1"].symbol, // Fixed data path + text: JSON.parse(cmcResult.resp).symbol, // Fixed data path img: COIN_ICON })) .catch(err => ({ diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index b3946eebb..1f37aab3a 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.17", + "version": "0.04.18", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From dccd09660466106ae6ef23b0ef7d5ce1d5e820c2 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 8 Mar 2025 00:04:09 +0100 Subject: [PATCH 080/188] :construction: no parsing required? --- apps/coin_info/clkinfo.js | 2 +- apps/coin_info/metadata.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 36ab2b684..9d46222c9 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -24,7 +24,7 @@ }) .then(cmcResult => ({ // text: JSON.parse(cmcResult.resp).data["1"].symbol, // Fixed data path - text: JSON.parse(cmcResult.resp).symbol, // Fixed data path + text: cmcResult.resp.symbol, img: COIN_ICON })) .catch(err => ({ diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 1f37aab3a..e72f94822 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.18", + "version": "0.04.19", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 73b7a1259642d93e39665d01c647b1a6de1a8d74 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 8 Mar 2025 00:26:39 +0100 Subject: [PATCH 081/188] :construction: well, it is (parsing) --- apps/coin_info/clkinfo.js | 11 +++++++---- apps/coin_info/metadata.json | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 9d46222c9..60f5038e2 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -22,11 +22,14 @@ // 'CMC_PRO_API_KEY': db.apikey // } }) - .then(cmcResult => ({ + .then(cmcResult => { // text: JSON.parse(cmcResult.resp).data["1"].symbol, // Fixed data path - text: cmcResult.resp.symbol, - img: COIN_ICON - })) + const apiData = JSON.parse(cmcResult.resp); // Correctly declare variable + return { + text: apiData.symbol, + img: COIN_ICON + }; + }) .catch(err => ({ text: err.toString(), img: COIN_ICON diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index e72f94822..7ae666959 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.19", + "version": "0.04.20", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From eff4ebc33c5c8915f3d6a192516b10b63ea7589e Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 8 Mar 2025 00:34:54 +0100 Subject: [PATCH 082/188] remove manual redraw --- apps/coin_info/clkinfo.js | 6 +++--- apps/coin_info/metadata.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 60f5038e2..e5a1adbbc 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -51,10 +51,10 @@ clearInterval(this.interval); this.interval = null; } - }, - run: function () { - this.emit("redraw"); } + // ,run: function () { + // this.emit("redraw"); + // } } }) }; diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 7ae666959..c383046df 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.20", + "version": "0.04.21", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 3ad611799f6a433fe6bd685ace5a4f1fe757c60d Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 8 Mar 2025 00:56:08 +0100 Subject: [PATCH 083/188] Logging --- apps/coin_info/clkinfo.js | 14 ++++++++++---- apps/coin_info/metadata.json | 5 +++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index e5a1adbbc..a8966d3f3 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -3,6 +3,7 @@ const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; const db = require("Storage").readJSON("coin_info.cmc_key.json",1)||{}; + const logFile = require("Storage").open("log.txt", "a"); if (!(settings.tokenSelected instanceof Array)) settings.tokenSelected = []; @@ -24,16 +25,21 @@ }) .then(cmcResult => { // text: JSON.parse(cmcResult.resp).data["1"].symbol, // Fixed data path + logFile.write(cmcResult.toString()); const apiData = JSON.parse(cmcResult.resp); // Correctly declare variable + logFile.write(apiData.toString()); return { text: apiData.symbol, img: COIN_ICON }; }) - .catch(err => ({ - text: err.toString(), - img: COIN_ICON - })); + .catch(err => { + logFile.write("API Error: " + err.toString()); + return { + text: err.toString(), + img: COIN_ICON + } + }); }, show : function() { var self = this; diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index c383046df..5356a1840 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.21", + "version": "0.04.22", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", @@ -16,6 +16,7 @@ {"name":"coin_info.app.js","url":"app.js"}, {"name":"coin_info.clkinfo.js","url":"clkinfo.js"}, {"name":"coin_info.settings.js","url":"settings.js"}, - {"name":"coin_info.img","url":"app-icon.js","evaluate":true} + {"name":"coin_info.img","url":"app-icon.js","evaluate":true}, + {"name":"coin_info.log.txt","url":"log.txt"} ] } \ No newline at end of file From e1083425544e2d36faddee712ce4a3e570542c32 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 8 Mar 2025 01:02:51 +0100 Subject: [PATCH 084/188] Wrong section in metadata corrected --- apps/coin_info/metadata.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 5356a1840..8fb531b27 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.22", + "version": "0.04.23", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", @@ -10,13 +10,13 @@ "readme": "README.md", "data": [ {"name":"coin_info.settings.json"}, - {"name":"coin_info.cmc_key.json"} + {"name":"coin_info.cmc_key.json"}, + {"name":"coin_info.log.txt"} ], "storage": [ {"name":"coin_info.app.js","url":"app.js"}, {"name":"coin_info.clkinfo.js","url":"clkinfo.js"}, {"name":"coin_info.settings.js","url":"settings.js"}, - {"name":"coin_info.img","url":"app-icon.js","evaluate":true}, - {"name":"coin_info.log.txt","url":"log.txt"} + {"name":"coin_info.img","url":"app-icon.js","evaluate":true} ] } \ No newline at end of file From 0cfd65b919157356d46ccbbeb2416d794312e13a Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 8 Mar 2025 01:15:00 +0100 Subject: [PATCH 085/188] json.stringify --- apps/coin_info/clkinfo.js | 6 +++--- apps/coin_info/metadata.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index a8966d3f3..cb0f05f63 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -25,16 +25,16 @@ }) .then(cmcResult => { // text: JSON.parse(cmcResult.resp).data["1"].symbol, // Fixed data path - logFile.write(cmcResult.toString()); + logFile.write("HTTP resp:" + JSON.stringify(cmcResult)); const apiData = JSON.parse(cmcResult.resp); // Correctly declare variable - logFile.write(apiData.toString()); + logFile.write("data:" + JSON.stringify(apiData)); return { text: apiData.symbol, img: COIN_ICON }; }) .catch(err => { - logFile.write("API Error: " + err.toString()); + logFile.write("API Error: " + JSON.stringify(err)); return { text: err.toString(), img: COIN_ICON diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 8fb531b27..c8b42199a 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.23", + "version": "0.04.24", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 3d6c78afac5d5be2aa2dd2dfc12475dd7be4c90c Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 8 Mar 2025 01:34:29 +0100 Subject: [PATCH 086/188] Better retrieval mechanism; also caching for promise --- apps/coin_info/README.md | 2 +- apps/coin_info/clkinfo.js | 108 ++++++++++++++++++++++------------- apps/coin_info/metadata.json | 2 +- 3 files changed, 69 insertions(+), 43 deletions(-) diff --git a/apps/coin_info/README.md b/apps/coin_info/README.md index 38e1655f0..176196741 100644 --- a/apps/coin_info/README.md +++ b/apps/coin_info/README.md @@ -7,4 +7,4 @@ Crypto-Coins Infos with the help of the Coinmarketcap API Martin Zwigl ## Reminder for last working -- ef6c04b1cca90125d3e41381be4a70231c076412 \ No newline at end of file +- 0cfd65b919157356d46ccbbeb2416d794312e13a \ No newline at end of file diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index cb0f05f63..3f8398ca2 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,67 +1,93 @@ (function() { const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); // (full base64 string here) - const settings = require("Storage").readJSON("coin_info.settings.json",1)||{}; - const db = require("Storage").readJSON("coin_info.cmc_key.json",1)||{}; + const settings = require("Storage").readJSON("coin_info.settings.json", 1) || {}; + const db = require("Storage").readJSON("coin_info.cmc_key.json", 1) || {}; const logFile = require("Storage").open("log.txt", "a"); - if (!(settings.tokenSelected instanceof Array)) - settings.tokenSelected = []; + // Ensure tokenSelected is an array + if (!(settings.tokenSelected instanceof Array)) settings.tokenSelected = []; + + // Cache for storing results + let cache = {}; + return { name: "CoinInfo", items: settings.tokenSelected.map(token => { - return { name : token, - get : function() - { - // const url = `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=${token}`; - // const url = `https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest?slug=bitcoin`; - const url = `https://api.binance.com/api/v3/ticker/24hr?symbol=BTCUSDT`; - return Bangle - .http(url, { - method: 'GET' - // ,headers: { - // 'CMC_PRO_API_KEY': db.apikey - // } - }) + return { + name: token, + get: function() { + // Return cached data if available + if (cache[token]) { + return cache[token]; + } + + // Return placeholder while fetching data + return { + text: "Load...", + img: COIN_ICON + }; + }, + show: function() { + var self = this; + + // Fetch data when shown + const url = `https://api.binance.com/api/v3/ticker/24hr?symbol=${token.toUpperCase()}`; + Bangle.http(url, { method: 'GET' }) .then(cmcResult => { - // text: JSON.parse(cmcResult.resp).data["1"].symbol, // Fixed data path logFile.write("HTTP resp:" + JSON.stringify(cmcResult)); - const apiData = JSON.parse(cmcResult.resp); // Correctly declare variable + const apiData = JSON.parse(cmcResult.resp); logFile.write("data:" + JSON.stringify(apiData)); - return { - text: apiData.symbol, + + // Update cache with fetched data + cache[token] = { + // text: `${apiData.symbol}\n${apiData.lastPrice} USD`, + text: `${apiData.symbol}`, img: COIN_ICON }; + + // Trigger a redraw of this item + self.emit("redraw"); }) .catch(err => { logFile.write("API Error: " + JSON.stringify(err)); - return { - text: err.toString(), + cache[token] = { + text: "Error", img: COIN_ICON - } - }); - }, - show : function() { - var self = this; - // Set timeout to align to the next minute - self.interval = setTimeout(function timerTimeout() { - self.emit("redraw"); - // Continue updating every hour - self.interval = setInterval(function intervalCallback() { + }; self.emit("redraw"); - }, 3600000); - }, 3600000 - (Date.now() % 3600000)); + }); + + // Set interval to refresh data every hour + self.interval = setInterval(() => { + Bangle.http(url, { method: 'GET' }) + .then(cmcResult => { + const apiData = JSON.parse(cmcResult.resp); + cache[token] = { + // text: `${apiData.symbol}\n${apiData.lastPrice} USD`, + text: `${apiData.symbol}`, + img: COIN_ICON + }; + self.emit("redraw"); + }) + .catch(err => { + logFile.write("API Error: " + JSON.stringify(err)); + cache[token] = { + text: "Error", + img: COIN_ICON + }; + self.emit("redraw"); + }); + }, 3600000); // Refresh every hour }, - hide : function() { + hide: function() { if (this.interval) { clearInterval(this.interval); this.interval = null; } } - // ,run: function () { - // this.emit("redraw"); - // } - } + }; }) }; -}) +})(); + diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index c8b42199a..c40afdeb7 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.24", + "version": "0.04.25", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From b2e6077e8bfad873fb8b70b619fe07ffbb6f1402 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 8 Mar 2025 01:50:10 +0100 Subject: [PATCH 087/188] Better retrieval mechanism; also caching for promise --- apps/coin_info/clkinfo.js | 48 +++++++++++------------------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 16 insertions(+), 34 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 3f8398ca2..d64db2416 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,11 +1,10 @@ (function() { - const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); // (full base64 string here) + const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); const settings = require("Storage").readJSON("coin_info.settings.json", 1) || {}; const db = require("Storage").readJSON("coin_info.cmc_key.json", 1) || {}; const logFile = require("Storage").open("log.txt", "a"); - // Ensure tokenSelected is an array if (!(settings.tokenSelected instanceof Array)) settings.tokenSelected = []; // Cache for storing results @@ -17,12 +16,10 @@ return { name: token, get: function() { - // Return cached data if available + // Immediate return from cache or placeholder if (cache[token]) { return cache[token]; } - - // Return placeholder while fetching data return { text: "Load...", img: COIN_ICON @@ -32,42 +29,23 @@ var self = this; // Fetch data when shown - const url = `https://api.binance.com/api/v3/ticker/24hr?symbol=${token.toUpperCase()}`; - Bangle.http(url, { method: 'GET' }) - .then(cmcResult => { - logFile.write("HTTP resp:" + JSON.stringify(cmcResult)); - const apiData = JSON.parse(cmcResult.resp); - logFile.write("data:" + JSON.stringify(apiData)); + const url = `https://api.binance.com/api/v3/ticker/24hr?symbol=${token.toUpperCase()}USDT`; - // Update cache with fetched data - cache[token] = { - // text: `${apiData.symbol}\n${apiData.lastPrice} USD`, - text: `${apiData.symbol}`, - img: COIN_ICON - }; - - // Trigger a redraw of this item - self.emit("redraw"); - }) - .catch(err => { - logFile.write("API Error: " + JSON.stringify(err)); - cache[token] = { - text: "Error", - img: COIN_ICON - }; - self.emit("redraw"); - }); - - // Set interval to refresh data every hour - self.interval = setInterval(() => { + (function fetchData() { Bangle.http(url, { method: 'GET' }) .then(cmcResult => { + logFile.write("HTTP resp:" + JSON.stringify(cmcResult)); const apiData = JSON.parse(cmcResult.resp); + logFile.write("data:" + JSON.stringify(apiData)); + + // Update cache with fetched data cache[token] = { // text: `${apiData.symbol}\n${apiData.lastPrice} USD`, text: `${apiData.symbol}`, img: COIN_ICON }; + + // Trigger a redraw of this item self.emit("redraw"); }) .catch(err => { @@ -78,6 +56,11 @@ }; self.emit("redraw"); }); + })(); + + // Set interval to refresh data every hour + self.interval = setInterval(() => { + fetchData(); // Call the fetch function again }, 3600000); // Refresh every hour }, hide: function() { @@ -90,4 +73,3 @@ }) }; })(); - diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index c40afdeb7..e4620ea7c 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.25", + "version": "0.04.26", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 18711f385ee276eb81aa7277873fb3f4e0b7fff6 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 8 Mar 2025 02:38:15 +0100 Subject: [PATCH 088/188] Better retrieval mechanism; also caching for promise --- apps/coin_info/clkinfo.js | 39 +++++++++++++++++++++--------------- apps/coin_info/metadata.json | 2 +- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index d64db2416..469029a9e 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,5 +1,5 @@ (function() { - const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); + const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); // (full base64 string here) const settings = require("Storage").readJSON("coin_info.settings.json", 1) || {}; const db = require("Storage").readJSON("coin_info.cmc_key.json", 1) || {}; @@ -7,7 +7,6 @@ if (!(settings.tokenSelected instanceof Array)) settings.tokenSelected = []; - // Cache for storing results let cache = {}; return { @@ -16,10 +15,12 @@ return { name: token, get: function() { - // Immediate return from cache or placeholder + // Return cached data if available if (cache[token]) { return cache[token]; } + + // Return placeholder while waiting for data return { text: "Load...", img: COIN_ICON @@ -28,10 +29,10 @@ show: function() { var self = this; - // Fetch data when shown - const url = `https://api.binance.com/api/v3/ticker/24hr?symbol=${token.toUpperCase()}USDT`; + // Function to fetch data from API + const fetchData = (callback) => { + const url = `https://api.binance.com/api/v3/ticker/24hr?symbol=${token.toUpperCase()}USDT`; - (function fetchData() { Bangle.http(url, { method: 'GET' }) .then(cmcResult => { logFile.write("HTTP resp:" + JSON.stringify(cmcResult)); @@ -40,13 +41,11 @@ // Update cache with fetched data cache[token] = { - // text: `${apiData.symbol}\n${apiData.lastPrice} USD`, text: `${apiData.symbol}`, img: COIN_ICON }; - // Trigger a redraw of this item - self.emit("redraw"); + callback(); }) .catch(err => { logFile.write("API Error: " + JSON.stringify(err)); @@ -54,14 +53,22 @@ text: "Error", img: COIN_ICON }; + callback(); + }); + }; + + // Set timeout to align to the next hour and then continue updating every hour + self.interval = setTimeout(function timerTimeout() { + fetchData(() => { + self.emit("redraw"); + }); + // Continue updating every hour + self.interval = setInterval(function intervalCallback() { + fetchData(() => { self.emit("redraw"); }); - })(); - - // Set interval to refresh data every hour - self.interval = setInterval(() => { - fetchData(); // Call the fetch function again - }, 3600000); // Refresh every hour + }, 3600000); + }, 3600000 - (Date.now() % 3600000)); }, hide: function() { if (this.interval) { @@ -72,4 +79,4 @@ }; }) }; -})(); +}); \ No newline at end of file diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index e4620ea7c..afc456b1c 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.26", + "version": "0.04.27", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 017a7a86e12e4a58df9f7f5f2fb88e68b95bf84d Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 8 Mar 2025 02:43:41 +0100 Subject: [PATCH 089/188] Also adjusted settings to new Binance API --- apps/coin_info/clkinfo.js | 2 +- apps/coin_info/metadata.json | 2 +- apps/coin_info/settings.js | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 469029a9e..e055dfe9c 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -31,7 +31,7 @@ // Function to fetch data from API const fetchData = (callback) => { - const url = `https://api.binance.com/api/v3/ticker/24hr?symbol=${token.toUpperCase()}USDT`; + const url = `https://api.binance.com/api/v3/ticker/24hr?symbol=${token}USDT`; Bangle.http(url, { method: 'GET' }) .then(cmcResult => { diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index afc456b1c..22753926d 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.27", + "version": "0.04.28", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", diff --git a/apps/coin_info/settings.js b/apps/coin_info/settings.js index 38810a109..944f737c3 100644 --- a/apps/coin_info/settings.js +++ b/apps/coin_info/settings.js @@ -5,8 +5,8 @@ // Default settings with sorted tokens and load settings let settings = Object.assign({ // TODO: MZw - retrieve from upload-storage - tokens: ['bitcoin', 'ethereum', 'tether'], - tokenSelected: ['bitcoin'], + tokens: ['BTC', 'ETH', 'STORJ'], + tokenSelected: ['BTC'], getRateMin: 60 }, storage.readJSON(SETTINGS_FILE, 1) || {}); From 93fbffed3b7a074a8eb0f44b4fa8308f183d1012 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 8 Mar 2025 03:07:51 +0100 Subject: [PATCH 090/188] For first only wait till next minute --- apps/coin_info/clkinfo.js | 2 +- apps/coin_info/metadata.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index e055dfe9c..963965393 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -68,7 +68,7 @@ self.emit("redraw"); }); }, 3600000); - }, 3600000 - (Date.now() % 3600000)); + }, 60000 - (Date.now() % 60000 )); }, hide: function() { if (this.interval) { diff --git a/apps/coin_info/metadata.json b/apps/coin_info/metadata.json index 22753926d..6dbd3de1f 100644 --- a/apps/coin_info/metadata.json +++ b/apps/coin_info/metadata.json @@ -1,7 +1,7 @@ { "id": "coin_info", "name": "Crypto-Coins Info", "shortName":"Coins Info", - "version": "0.04.28", + "version": "0.04.29", "description": "Crypto-Coins Infos with the help of the Coinmarketcap API", "icon": "app.png", "tags": "clkinfo", From 0df72cfc41b0291518989538b00353e945855a90 Mon Sep 17 00:00:00 2001 From: Martin Zwigl Date: Sat, 8 Mar 2025 12:27:23 +0100 Subject: [PATCH 091/188] Naming cleanup --- apps/coin_info/ChangeLog | 3 +- apps/coin_info/README.md | 2 +- apps/coin_info/clkinfo.js | 9 +++--- .../icons/icons8-submit-progress-24.png | Bin 0 -> 508 bytes apps/coin_info/interface.html | 26 ++++++++---------- apps/coin_info/metadata.json | 4 +-- 6 files changed, 21 insertions(+), 23 deletions(-) create mode 100644 apps/coin_info/icons/icons8-submit-progress-24.png diff --git a/apps/coin_info/ChangeLog b/apps/coin_info/ChangeLog index 6ed1d1c3d..88924b567 100644 --- a/apps/coin_info/ChangeLog +++ b/apps/coin_info/ChangeLog @@ -1,2 +1,3 @@ 0.03: Initial creation -0.04: Using GB http for Coinmarketcap requests \ No newline at end of file +0.04: Using GB http for Binance API requests +0.05: Lot of cleanup \ No newline at end of file diff --git a/apps/coin_info/README.md b/apps/coin_info/README.md index 176196741..5b53c05fa 100644 --- a/apps/coin_info/README.md +++ b/apps/coin_info/README.md @@ -7,4 +7,4 @@ Crypto-Coins Infos with the help of the Coinmarketcap API Martin Zwigl ## Reminder for last working -- 0cfd65b919157356d46ccbbeb2416d794312e13a \ No newline at end of file +- 93fbffed3b7a074a8eb0f44b4fa8308f183d1012 \ No newline at end of file diff --git a/apps/coin_info/clkinfo.js b/apps/coin_info/clkinfo.js index 963965393..154feb89b 100644 --- a/apps/coin_info/clkinfo.js +++ b/apps/coin_info/clkinfo.js @@ -1,9 +1,10 @@ (function() { - const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); // (full base64 string here) + const COIN_ICON = atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAA//8AAAAB///AAAAB8A/gAAAAgAH4AAAwAAB8AAB4AAA+AADwA4APAADgA4APAAHgA4AHgADAf/ADwAAAf/gBwAAAf/wB4AAAcB4A4AAAcA4A4AAAcA4A4AYAcA4AcA8AcB4AcB+Af/wDdj/Af/4D/n/Af/8D/n/AcAcB/A4AcAOA+A4AcAOAcAcAcAOAAAcAcAAAAAcAcAAAAAeAf/AAAAOAf/AAAAPAf/ADAAHgA4AHgADwA4AHAADwA4APAAB8AAA+AAA+AAB8AAAfgAH4AAAH8A/gAAAD///AAAAA//8AAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); + const LOAD_ICON_24 = atob("GBiBAAAAAAAeAAGfwAGB4AAAcBgAOBgYHAAYDAAYDGAYBmAYBgAYBgAYBmDbBmB+BgA8DAAYDBgAHBgAOAAAcAGB4AGfwAAeAAAAAA=="); const settings = require("Storage").readJSON("coin_info.settings.json", 1) || {}; const db = require("Storage").readJSON("coin_info.cmc_key.json", 1) || {}; - const logFile = require("Storage").open("log.txt", "a"); + const logFile = require("Storage").open("coin_info_log.txt", "a"); if (!(settings.tokenSelected instanceof Array)) settings.tokenSelected = []; @@ -22,8 +23,8 @@ // Return placeholder while waiting for data return { - text: "Load...", - img: COIN_ICON + text: "Load", + img: LOAD_ICON_24 }; }, show: function() { diff --git a/apps/coin_info/icons/icons8-submit-progress-24.png b/apps/coin_info/icons/icons8-submit-progress-24.png new file mode 100644 index 0000000000000000000000000000000000000000..71b95033469b30feead300a9d8810ec9960c5100 GIT binary patch literal 508 zcmV!Q5462WH2aiWfqi|i5*|T#)zf2d{ zgqMvhlp0owNn~Ybq45c@Frh34%}{jfKe|2Ud7JUCThBfB&i{Yzx#yfa5Dm3J4gZK% zU{K#9z&B6?9)Jw62qY>cUj|-*wC3%=Bk(Mt(#QiFKuc7CdEgV+DznxIi~*ZKK|)!e zKZvvsSh40kAsjKJ=Mu^JiNt|xZJZ(+>VRGABxS?Z2^;`dK)naiu|_$>fD4JN`+3vg zv-YOpg#q13-kn_&z_c!pDg+F+bqbThzc`f92vsYP64$A1JOiFoSV02$fIV>u+y(5b zSis;#HDp>#AQHf683AMK@)0Q70vQ#FJ48*uE%2_`mITIS%W6+xh|)fn>}bsperbHj zX4bqe`NTF(0<%78>bM%57rC9L3sDQr2|=E;3hmGRbO8GSt-|pkH?87Q4y*+=yBVS( z2JGp#H$b!3#$I66ns3i6E^zW7DCKbJ^xgtdV+wub=w0%t1KX

Settings for Crypto-Coin Info

-

Set Coinmarketcap API key and traceable tokens.

+

Input for coins to request and calculate against pair.

-
- - -
+
- + +
+ +

- -

Where to get your personal API key?

-

Go to https://coinmarketcap.com/api/ and sign up for a free account.
- There are various pricing models with various degrees of API access. As of 2025.02.22 there is also a free tier.

- +

General Info:

+

Requesting from Binance with free API. Get info from their website.

-